This is an automated email from the git hooks/post-receive script.
richard pushed a change to branch geckoview-102.3.0esr-12.0-1 in repository tor-browser.
at f76d47caa2328 Bug 1789487 - Update l10n-changesets.json on ESR102 to match Fx105 release. r=flod, a=me
This branch includes the following new commits:
new c1b716fc8bcdf Bug 1785788 - Gracefully handle null nickname in CERT_GetCertNicknameWithValidity. r=rrelyea, a=RyanVM UPGRADE_NSS_RELEASE new 9339f0d4b2f1d No bug - Tagging 3876d5327f44c991c9034c4112f33f147ab10ab9 with FIREFOX_102_2_0esr_BUILD2 a=release CLOSED TREE DONTBUILD new 99068563ba422 No Bug, mozilla-esr102 repo-update HSTS HPKP remote-settings - a=repo-update, r=dsmith new c1d6badd2b556 Update configs. IGNORE BROKEN CHANGESETS CLOSED TREE NO BUG a=release ba=release new a220c862e7c2d No bug - Tagging 3876d5327f44c991c9034c4112f33f147ab10ab9 with FIREFOX_102_2_0esr_RELEASE a=release CLOSED TREE DONTBUILD new 63bbb447e5a8d No Bug, mozilla-esr102 repo-update HSTS HPKP remote-settings - a=repo-update r=RyanVM new db71f90574fe0 Bug 1781464 - Add ESR-only taggedCode for Bing - r=Standard8 a=test-only new 1ee3f6a9aef73 Bug 1785109, mark CustomElementRegistry as multizone holder, r=mccr8 a=RyanVM new 0f122e8c34be4 Bug 1779036 - Account for the fact that the ended promise might already have been resolved in GetPosition, during shutdown. r=ng, a=RyanVM new e8d66927c1422 Bug 1783784 - Update packed_simd_2 to 0.3.8. r=hsivonen,supply-chain-reviewers, a=RyanVM new fb5e48a5f6bbf Bug 1768632: Make EnumSet compile for MSVC. r=glandium, a=RyanVM new bae3c2e783f8f Bug 1786025: Update time zone data to tzdata2022b. r=platform-i18n-reviewers,dminor a=RyanVM new 0a47b4621237d Backed out changeset e0c24eb1e8d3 (bug 1783784) for causing build bustages. a=backout new 05a867c1fc290 Bug 1786555 - Add Bing ESR PC to test - r=Standard8 a=test-only new d36b4c404e0e2 Bug 1782795 - Remove shared context from GlyphRasterizer. r=jnicol, a=RyanVM new f20d23c3e7723 Bug 1783115 - Use only a single FT_Face for each font in WebRender. r=jnicol, a=RyanVM new a8420e6d329c8 Bug 1779005 - Avoid setting |mLoader| to null if we already start a new PAC load, r=necko-reviewers,valentin a=RyanVM new f9216d71e5586 Bug 1779005 - Use mLoadFailureCount as an indicator for PAC laod, r=necko-reviewers,valentin a=RyanVM new 302870fce229a Bug 1772290 - tests, r=smaug a=test-only new ada04eb9b8253 Bug 1783784 - Update packed_simd_2 to 0.3.8. new 4805e26a3fa23 Bug 1784835. Use checkedint in webp encoder to avoid overflow. r=aosmond, a=RyanVM new 10c583e16d60c No Bug, mozilla-esr102 repo-update HSTS HPKP remote-settings tld-suffixes - a=repo-update r=RyanVM new 3e4c74f620f03 Bug 1774453: Disable hiding cursor while typing on Windows. r=cpeterson, a=RyanVM new 49eba737d8875 Bug 1559205, 1611093, 1748828 - support moz-proxy in about:logins r=dimi a=RyanVM new e6d3401ad0e31 Bug 1782211 - Init feature policy; r=ckerschb, a=RyanVM new 8e154d75a8894 Bug 1785186 - Use zero threshold for lazyload observer. r=hiro, a=RyanVM new c7f95db015f8c No Bug, mozilla-esr102 repo-update HSTS HPKP remote-settings tld-suffixes - a=repo-update r=RyanVM new da2b9096bb842 Bug 1787674 - Snap: Run `apt-get update` before downloading apt packages. r=jcristau, a=RyanVM new 06dd4b32f0e44 Bug 1781759 factor out ChannelMediaResource::MediaElement() helper r=chunmin a=RyanVM new ba3564bcf0e5b Bug 1781759 use media element node principal instead of channel loading principal for cross-origin resource test r=padenot a=RyanVM new 50d697de73120 Bug 1781759 Test cross origin load of media document in parts r=chunmin a=RyanVM new 4b97f47d5532e Bug 1781063 don't use tainting for cross-origin check on document media resource loads r=chunmin a=RyanVM new cfa8596ba261c Bug 1776655 - Allocate input report context for each gamepad. r=mccr8, a=RyanVM new 344e8654b59ec Bug 1777209 - Use DrawSurface rather than FillRect to paint <canvas>, and don't use EXTEND_PAD when writing to PDF. r=jrmuizel, a=RyanVM new 409cc69a678c1 No Bug, mozilla-esr102 repo-update HSTS HPKP remote-settings - a=repo-update r=RyanVM new 3f81dec850ee6 Bug 1767360 - use correct image size retrieved from the output type to create video frames buffer. r=media-playback-reviewers,jolin a=RyanVM new 35ce7a62c998c Bug 1768671 - force append '.pdf' for pdf blob downloads displayed inline if it's missing, r=marco a=RyanVM new bc4fafbe58269 Bug 1780348 - Exit fullscreen if DOMFullscreenChild is not able to continue the fullscreen transition; r=smaug, a=RyanVM new 866e6f2c40c9d Bug 1784183. Initialize nsWindow::mPanInProgress. r=rmader, a=RyanVM new 4646c65868922 Bug 1784387 - Crash in [@ nsDocShell::Reload] in ContentChild::RecvReload, r=mccr8 a=RyanVM new 98d205b30ab79 Bug 1774155 - Avoid copying data URI specs in deprecation warning. r=mccr8, a=RyanVM new 3be2527950f26 Bug 1787684. Only return views with widgets from FindFloatingViewContaining. r=emilio, a=RyanVM new de088a7d3653b Bug 1777604 - wasm: Perform a pipeline flush while creating a module object. r=nbp, a=RyanVM new 257982b707fbe Bug 1777604 - wasm: Move membarrier call to separate functions. r=nbp, a=RyanVM new 0bd42cb43a8df Bug 1783415 - Don't use custom styling of select in chrome pages. r=mconley, a=RyanVM new 157e78f73c5bf Bug 1784432 - allow opening list all tabs menu using the keyboard, r=mhowell a=RyanVM new 4f9825634cdcc Bug 1770094 r=freddyb,emilio a=RyanVM new 79e7732a6abef Bug 1766030 - Add an optional source URL when saving an URL. r=Gijs, a=RyanVM new 2c8bd75968661 Bug 1761265, don't show the downloads panel when a download was started by user action that they expect will save the file, r=mhowell,kershaw a=RyanVM new 226da410d9356 Bug 1739348 - Don't open downloads panel after download dialogs. r=NeilDeakin, a=RyanVM new 1f0194a2c33cd Bug 1783643 - Don't open downloads panel if window is inactive. r=Gijs, a=RyanVM new 5407f0f027aef Bug 1778714 - Fix the pdf download link in the All Downloads view. r=Gijs, a=RyanVM new a6829d8ca2842 Bug 1759604, check CanDropLink during the drop event as sites can cancel the dragover event causing the drop event to still fire, r=arai a=RyanVM new 5053d07b4c92a No Bug, mozilla-esr102 repo-update HSTS HPKP remote-settings tld-suffixes - a=repo-update r=pascalc new 2ed4cb1654bd6 Bug 1772988, add some additional extensions for some media types as Windows doesn't provide some of them, causing valid extensions to be replaced when saving files, r=mhowell, a=RyanVM new b7c7929228f0e Bug 1786502 - Lock access to DeviceInfo devicechange callbacks. r=webrtc-reviewers,jib a=RyanVM new 4fbde0237d239 Bug 1780839 - Update pdf.js to bf000687313b08924186f9f35a604f8cce27bd1d in ESR102. r=marco, a=RyanVM new 5404656aa2263 Bug 1776222 - Disable fullscreen on audio tags. r=jaws, a=RyanVM new d902453efafea Bug 1785801 - Make `RangeUpdater::SelAdjJoinNodes` take the ex-offset of right node. r=m_kato, a=RyanVM new d74be19592019 Bug 1780839 - Fix browser_parsable_css.js failures. a=bustage DONTBUILD new bfcf5e8ea7320 Bug 1755700: Use StartAudioSession and StopAudioSession symmetrically r=cmartin, a=RyanVM new d03f74a543ed4 Bug 1755700: Simplify ownership of AudioSession r=cmartin, a=RyanVM new a592e02f6803d Bug 1755700: Use AgileReference for cross-apartment AudioSessionControl use r=Jamie, a=RyanVM new ffc0e69dfd2c3 Bug 1755700: Serialize IAudioSessionControl destruction/re-creation r=cmartin, a=RyanVM new 628f4b80a2627 Bug 1787633 - Make nsTextToSubURI::UnEscapeNonAsciiURI static. r=m_kato, a=RyanVM new 80b8c7a3e34a0 No Bug, mozilla-esr102 repo-update HSTS HPKP remote-settings - a=repo-update r=RyanVM new 7a4366e13b36f Bug 1777574, automate CC zone handling, r=mccr8 a=RyanVM new 5fbf64d96f02c Bug 1779993 - Reject cookies with no name and a __Secure- or __Host- prefix r=necko-reviewers,kershaw a=RyanVM new b4f40f882543e Bug 1789440 - Track reply message IDs for MessageChannel async replies, r=ipc-reviewers,mccr8 a=RyanVM new 70baea49bd1cf No Bug, mozilla-esr102 repo-update HSTS HPKP remote-settings - a=repo-update r=RyanVM new 4f063b3751b72 Bug 1786292 - part 1: Make esr102 not next-esr anymore. r=jcristau, a=release new da912d341963b Bug 1785940 - Fix buggy error path in IPCBlobUtils::Serialize, r=asuth a=RyanVM new f76d47caa2328 Bug 1789487 - Update l10n-changesets.json on ESR102 to match Fx105 release. r=flod, a=me
The 73 revisions listed above as "new" are entirely new to this repository and will be described in separate emails. The revisions listed as "add" were already present in the repository and have only been added to this reference.
This is an automated email from the git hooks/post-receive script.
richard pushed a commit to branch geckoview-102.3.0esr-12.0-1 in repository tor-browser.
commit c1b716fc8bcdfafaced31df5c918275849878da3 Author: Kai Engert kaie@kuix.de AuthorDate: Mon Jul 18 13:26:10 2022 +0000
Bug 1785788 - Gracefully handle null nickname in CERT_GetCertNicknameWithValidity. r=rrelyea, a=RyanVM UPGRADE_NSS_RELEASE --- security/nss/lib/certhigh/certvfy.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-)
diff --git a/security/nss/lib/certhigh/certvfy.c b/security/nss/lib/certhigh/certvfy.c index a550d087007df..5bf82d9bb989a 100644 --- a/security/nss/lib/certhigh/certvfy.c +++ b/security/nss/lib/certhigh/certvfy.c @@ -1913,15 +1913,19 @@ CERT_GetCertNicknameWithValidity(PLArenaPool *arena, CERTCertificate *cert, { SECCertTimeValidity validity; char *nickname = NULL, *tmpstr = NULL; + const char *srcNickname = cert->nickname; + if (!srcNickname) { + srcNickname = "{???}"; + }
validity = CERT_CheckCertValidTimes(cert, PR_Now(), PR_FALSE);
/* if the cert is good, then just use the nickname directly */ if (validity == secCertTimeValid) { if (arena == NULL) { - nickname = PORT_Strdup(cert->nickname); + nickname = PORT_Strdup(srcNickname); } else { - nickname = PORT_ArenaStrdup(arena, cert->nickname); + nickname = PORT_ArenaStrdup(arena, srcNickname); }
if (nickname == NULL) { @@ -1933,11 +1937,11 @@ CERT_GetCertNicknameWithValidity(PLArenaPool *arena, CERTCertificate *cert, * end */ if (validity == secCertTimeExpired) { - tmpstr = PR_smprintf("%s%s", cert->nickname, + tmpstr = PR_smprintf("%s%s", srcNickname, expiredString); } else if (validity == secCertTimeNotValidYet) { /* not yet valid */ - tmpstr = PR_smprintf("%s%s", cert->nickname, + tmpstr = PR_smprintf("%s%s", srcNickname, notYetGoodString); } else { /* undetermined */
This is an automated email from the git hooks/post-receive script.
richard pushed a commit to branch geckoview-102.3.0esr-12.0-1 in repository tor-browser.
commit 9339f0d4b2f1d12c243ef029cc315d07ebe8c95f Author: Mozilla Releng Treescript release+treescript@mozilla.org AuthorDate: Thu Aug 18 19:56:28 2022 +0000
No bug - Tagging 3876d5327f44c991c9034c4112f33f147ab10ab9 with FIREFOX_102_2_0esr_BUILD2 a=release CLOSED TREE DONTBUILD --- .hgtags | 1 + 1 file changed, 1 insertion(+)
diff --git a/.hgtags b/.hgtags index 24739b560ab1f..55ab8a3954337 100644 --- a/.hgtags +++ b/.hgtags @@ -3712,3 +3712,4 @@ ac17d3e21f82ce34b2b9f09f8a15b270cf41e91c FIREFOX_RELEASE_102_BASE 73db4126165f2a2eded92f48a6c81c8ece6d21ce FIREFOX_102_1_0esr_BUILD1 73db4126165f2a2eded92f48a6c81c8ece6d21ce FIREFOX_102_1_0esr_RELEASE 40d1412657291933cc2c9d65c3306927c1b332e1 FIREFOX_102_2_0esr_BUILD1 +3876d5327f44c991c9034c4112f33f147ab10ab9 FIREFOX_102_2_0esr_BUILD2
This is an automated email from the git hooks/post-receive script.
richard pushed a commit to branch geckoview-102.3.0esr-12.0-1 in repository tor-browser.
commit 99068563ba42233a6f4540d751bbd3c4f0125566 Author: ffxbld ffxbld@mozilla.com AuthorDate: Mon Aug 22 11:17:48 2022 +0000
No Bug, mozilla-esr102 repo-update HSTS HPKP remote-settings - a=repo-update, r=dsmith
Differential Revision: https://phabricator.services.mozilla.com/D155204 --- security/manager/ssl/StaticHPKPins.h | 2 +- security/manager/ssl/nsSTSPreloadList.inc | 3247 ++++++++++++++++++-- .../dumps/blocklists/addons-bloomfilters.json | 17 +- .../settings/dumps/main/search-telemetry-v2.json | 7 +- 4 files changed, 3028 insertions(+), 245 deletions(-)
diff --git a/security/manager/ssl/StaticHPKPins.h b/security/manager/ssl/StaticHPKPins.h index 6a0a86550086c..ca6cc29b955cd 100644 --- a/security/manager/ssl/StaticHPKPins.h +++ b/security/manager/ssl/StaticHPKPins.h @@ -1125,4 +1125,4 @@ static const TransportSecurityPreload kPublicKeyPinningPreloadList[] = {
static const int32_t kUnknownId = -1;
-static const PRTime kPreloadPKPinsExpirationTime = INT64_C(1669288206218000); +static const PRTime kPreloadPKPinsExpirationTime = INT64_C(1669633805906000); diff --git a/security/manager/ssl/nsSTSPreloadList.inc b/security/manager/ssl/nsSTSPreloadList.inc index a623f1c8da764..4a13a9e0d1fff 100644 --- a/security/manager/ssl/nsSTSPreloadList.inc +++ b/security/manager/ssl/nsSTSPreloadList.inc @@ -8,7 +8,7 @@ /*****************************************************************************/
#include <stdint.h> -const PRTime gPreloadListExpirationTime = INT64_C(1671707401989000); +const PRTime gPreloadListExpirationTime = INT64_C(1672053001842000); %% 0--1.de, 1 0-0.io, 1 @@ -100,6 +100,7 @@ const PRTime gPreloadListExpirationTime = INT64_C(1671707401989000); 010203.ru, 1 010ks.net, 1 01100010011001010111001101110100.com, 1 +01101000.xyz, 1 01110000011100110111001001100111.ca, 1 01110000011100110111001001100111.com, 1 011101.xyz, 1 @@ -375,7 +376,6 @@ const PRTime gPreloadListExpirationTime = INT64_C(1671707401989000); 1-123hp.com, 1 1-2-3bounce.co.uk, 1 1-ae.com, 1 -1-airlines.com, 1 1-inv.com, 1 1-pujcky-uvery.tk, 1 100-downloads.com, 1 @@ -1338,7 +1338,6 @@ const PRTime gPreloadListExpirationTime = INT64_C(1671707401989000); 1adda.tk, 1 1ae86.com, 1 1ago.be, 1 -1airlines.com, 1 1allhosting.com, 1 1android.de, 1 1apple.com, 1 @@ -1970,8 +1969,6 @@ const PRTime gPreloadListExpirationTime = INT64_C(1671707401989000); 30019cc.com, 1 3007337.com, 1 300jjjj.com, 1 -301.moe, 1 -301.sh, 1 301.technology, 1 302422.com, 1 3033888.com, 1 @@ -2909,7 +2906,6 @@ const PRTime gPreloadListExpirationTime = INT64_C(1671707401989000); 4dclub.com, 1 4digitiq.nl, 1 4dillusion.tk, 1 -4dimension.net, 1 4dlatest.com, 1 4dplay.com, 1 4dsoft.com, 1 @@ -3180,6 +3176,7 @@ const PRTime gPreloadListExpirationTime = INT64_C(1671707401989000); 52051.com, 1 52051a.com, 1 5205365.com, 0 +52062z.com, 1 5206365.com, 0 52067.vip, 0 5209365.com, 0 @@ -3384,7 +3381,7 @@ const PRTime gPreloadListExpirationTime = INT64_C(1671707401989000); 5dm.tv, 1 5dtech.com, 1 5e.tools, 1 -5eki.jp, 1 +5eki.jp, 0 5francs.com, 1 5gb.space, 1 5goglobal.com, 1 @@ -5556,6 +5553,7 @@ abaranov.gq, 1 abarquinha.tk, 1 abas-erp.com, 1 abasalehngo.com, 1 +abashevo.ml, 1 abashevo.tk, 1 abasite.tk, 1 abasky.net, 1 @@ -5638,6 +5636,7 @@ abecodes.net, 1 abecon.com.br, 1 abeestrada.com, 0 abeilles-idapi.fr, 0 +abelbarretto.tk, 1 abellagranitecountertops.com, 1 abellao.com, 1 abelles.cf, 1 @@ -5792,6 +5791,7 @@ aboutmarketing.ga, 1 aboutmedia.nl, 1 aboutmedicine.tk, 1 aboutmoney.tk, 1 +aboutmusicals.tk, 1 aboutmyip.info, 1 aboutmyproperty.ca, 1 aboutpublishers.nl, 1 @@ -5911,6 +5911,7 @@ abys.se, 1 abysra.com, 1 abyss.moe, 1 abysse.tk, 1 +abyssinian.ga, 1 abyssiniankitty.com, 1 abyssproject.net, 1 abysswebsite.tk, 1 @@ -6085,7 +6086,6 @@ aceparking.com, 1 acercapartners.com, 1 acerentalandsales.com, 1 acerislaw.com, 1 -acerostrevino.com.mx, 1 aceshop702.com, 1 acessoeducacao.com, 1 acetianyi.top, 1 @@ -6114,6 +6114,7 @@ achicrip.org, 1 achievenewsfrance.tk, 1 achiever.ga, 1 achievingheightsacademy.com, 1 +achiksongs.tk, 1 achildshome.com, 1 achildshome.org, 1 achill.org, 1 @@ -6165,7 +6166,7 @@ acodonline.be, 1 acolicy.com, 1 acomerygozar.cam, 1 acompanhantes.com.pt, 1 -aconnor.xyz, 1 +acomplia20mg.cf, 1 acopatableware.com, 1 acordes.online, 1 acorncastles.co.uk, 1 @@ -6468,6 +6469,7 @@ adblockextreme.net, 1 adblockextreme.org, 1 adbpub.com, 1 adc64.com, 1 +adceuta.tk, 1 adcnvs.com, 1 add-image.tk, 1 add-ons.co.uk, 1 @@ -6731,11 +6733,11 @@ adriarae.xyz, 1 adriatic.hr, 1 adriatika.tk, 1 adriatrans.ga, 1 -adrienfelsmann.fr, 1 adrieng.fr, 1 adrienkohlbecker.com, 1 adriennekiss.net, 1 adriennesmiles.com, 1 +adrinet.tk, 1 adrino.cf, 1 adrino.gq, 1 adrino.ml, 1 @@ -6767,6 +6769,7 @@ adson.lv, 1 adson.nl, 1 adson.no, 1 adson.pt, 1 +adspire.tk, 1 adspottest.tk, 1 adspu.org, 1 adstop.ga, 1 @@ -6789,6 +6792,7 @@ adv.cr, 1 adv.studio, 1 advair-generic.ga, 1 advairgeneric.ga, 1 +advairprice.ga, 1 advaitghaisas.in, 1 advaith.fun, 1 advaith.io, 1 @@ -6818,6 +6822,7 @@ advancedprotectionsecuritykey.com, 1 advancedroofingmuskoka.com, 1 advancedsepticandpumping.com, 0 advancedsurgicalconsultantsllc.com, 1 +advancedturf.tk, 1 advancedurologyca.com, 1 advancedurologyswla.com, 1 advancedwriters.com, 1 @@ -6825,7 +6830,6 @@ advanceeasymoving.it, 1 advancemoversnc.com, 1 advanceoptical.com, 1 advanceworx.com, 1 -advancis.net, 1 advania.info, 1 advantagehomeexteriors.com, 1 advantagehomeinteriors.com, 1 @@ -6834,6 +6838,7 @@ advantageroofer.com, 1 advantis.cf, 1 advantis.ga, 1 advantis.gq, 1 +advantis.tk, 1 advapacs.com, 1 advara.com, 1 advarra.com, 1 @@ -6892,9 +6897,11 @@ advice24.tk, 1 adviceprime.tk, 1 adviesfactuur.nl, 1 adviesgv.nl, 1 +advirk.tk, 1 advisercentre.com.au, 1 adviserplus.com, 1 advisorperspectives.com, 1 +advmaster.cf, 1 advocaat-dejonge.be, 1 advocatae.com, 1 advocatburo.tk, 1 @@ -6903,16 +6910,31 @@ advocatize.com, 1 advocator.ca, 1 advoervice.ga, 1 advogatech.com.br, 1 +advokat-dtp.cf, 1 advokat-dtp.ga, 1 +advokat-dtp.gq, 1 +advokat-dtp.ml, 1 +advokat-dtp.tk, 1 advokat-malinovskii.ml, 1 advokat-romanov.com, 1 advokat-teigstad.no, 1 advokat-vvp.com.ua, 1 advokat73.gq, 1 advokati-ceva.cz, 1 +advokatkonsult.cf, 1 advokatmorgunov.ml, 1 +advokatonline.ml, 1 +advokatskoe-byuro.ml, 1 +advokaty-onlajn.cf, 1 +advokaty-onlajn.ga, 1 advokaty-onlajn.gq, 1 +advokaty-onlajn.ml, 1 +advokaty-onlajn.tk, 1 advokaty-yuristy.ga, 1 +advokaty-yuristy.ml, 1 +advokaty-yuristy.tk, 1 +advokaty.cf, 1 +advokaty.gq, 1 advst.uk, 1 advtran.com, 0 adware.pl, 0 @@ -6920,6 +6942,7 @@ adwokatkosterka.pl, 1 adwokatzdunek.pl, 1 adws.io, 1 adxperience.com, 1 +adygeya.cf, 1 adzie.xyz, 1 adzuna.at, 1 adzuna.ca, 1 @@ -7033,6 +7056,7 @@ aerobotz.com, 1 aeroclub-tolhuin.tk, 1 aeroexpress.tk, 1 aeroflot.gq, 1 +aeroframe.tk, 1 aeroglass.ml, 1 aerogrill.tk, 1 aeroklub.tk, 1 @@ -7052,6 +7076,7 @@ aerospacearchives.tk, 1 aerospacescience.ml, 1 aerotechcoatings.com, 1 aerotrophy.fr, 1 +aerowillys.tk, 1 aerozone.tk, 1 aertel.ie, 1 aerztezentrum.io, 1 @@ -7072,6 +7097,7 @@ aestuar.de, 1 aesvalanalys.com, 1 aesyours.com, 1 aeterna-ufa.ru, 1 +aeternus-darkermonument.tk, 1 aeternus.tech, 1 aetherc0r3.eu, 1 aethereahealth.com, 1 @@ -7090,6 +7116,7 @@ af.link, 1 afadvantage.gov, 1 afafootball.co.th, 1 afalina-hotel.su, 1 +afanasev.tk, 1 afanias.org, 1 afas-apps.nl, 1 afasim.tk, 1 @@ -7099,6 +7126,7 @@ afbrtv.com, 1 afbrunswick.com, 1 afbryt.com, 1 afc-capital.mx, 1 +afcmrs.org, 0 afcmrstest.org, 1 afcurgentcarelyndhurst.com, 0 afdah.se, 1 @@ -7131,9 +7159,12 @@ affittialmare.it, 1 affittibreviliguria.it, 1 affittisalento.it, 1 affle.com, 1 +afflictedquarter.tk, 1 affordable.icu, 1 affordableblindsexpress.com, 1 +affordablecameras.tk, 1 affordableconnectivity.gov, 1 +affordableelectronics.tk, 1 affordableenvironmental.net, 1 affordablehealthquotesforyou.com, 1 affordablepapers.com, 1 @@ -7151,6 +7182,7 @@ afghan-media.tk, 1 afghan-sites.tk, 1 afghan.dating, 1 afghan.gq, 1 +afghandonia.tk, 1 afghanen4life.tk, 1 afghangreetings.tk, 1 afghanlink.tk, 1 @@ -7177,11 +7209,13 @@ aflebedevo.tk, 1 afoikrali.gr, 1 afonso.io, 1 aforadearrastu.tk, 1 +aforism.tk, 1 afp548.com, 1 afreelancersworld.com, 1 afreshperspective.com, 1 africa.dating, 1 africaclassifieds.ga, 1 +africaindemander.tk, 1 africalebanon.tk, 1 african-artmosphere.tk, 1 africanconstellations.co.za, 1 @@ -7189,8 +7223,10 @@ africanewstest0.ml, 1 africangazda.tk, 1 africangreyparrotscare.com, 1 africanheritage.tk, 1 +africanhosting.ml, 1 africankingsclothing.com, 1 africankitchen.gallery, 1 +africanmangoforum.ga, 1 africanmangoforum.gq, 1 africansafaris.co.nz, 1 africantourer.com, 1 @@ -7211,6 +7247,7 @@ afriregister.eu, 1 afriregister.rw, 1 afriregister.sn, 1 afrodigital.uk, 1 +afrodisiac.tk, 1 afrodita.tk, 1 afroditafirm.tk, 1 afroditehotel.tk, 1 @@ -7219,18 +7256,20 @@ afroludi.tk, 1 afroto.com, 1 afsys.com.br, 1 aftamurae.com, 1 +after-whoru.tk, 1 after.digital, 1 afterblokrock.tk, 1 afterburnerjs.com, 1 afterdwi.info, 1 +afterfostercare.tk, 1 afterhate.fr, 1 afterhoursglass.com.au, 1 +afternoonhereyes.tk, 1 afteroblivion.tk, 1 afterpay.com, 1 afterschool.tk, 1 afterskool.eu, 1 afterstack.net, 1 -afto-chor.de, 1 aftodioikisi.gr, 1 aftonbladet.se, 1 afuturewithoutfear.org, 1 @@ -7354,6 +7393,7 @@ ag995.com, 1 ag9999.co, 1 ag9ks.com, 1 ag9vip.com, 1 +aga-eiken.tk, 1 aga.gov.au, 1 agabucheros.tk, 1 agaclinicaltrials.com, 1 @@ -7364,6 +7404,7 @@ againstgynexams.tk, 1 againsttheneighbour.tk, 1 againsttheodds.es, 1 agalexusfix.com, 1 +agalloch.tk, 1 agambition.eu, 1 agamsecurity.ch, 0 agape24-7.com, 1 @@ -7411,6 +7452,7 @@ agence-wazacom.fr, 1 agenceimmoselect.com, 1 agences-cegee.fr, 1 agencesaintpierre.fr, 1 +agencetourismemali.ml, 1 agenciacanina.tk, 1 agenciacolors.com.br, 1 agenciacolors.digital, 1 @@ -7471,6 +7513,7 @@ agg88.com, 1 aggielandtutoring.com, 1 agglo-sion.ch, 1 aggn.info, 1 +aggression.tk, 1 aggressionpvp.com, 1 aggressivecarwraps.com, 1 aghayeva-edler.de, 1 @@ -7561,6 +7604,7 @@ agnusbostel.tk, 1 agocs.me, 1 agonpro.ch, 1 agonworks.com, 0 +agora-soft.cf, 1 agora.co.il, 1 agora.ru, 1 agoracupom.com.br, 1 @@ -7601,6 +7645,7 @@ agrente.pl, 1 agreor.com, 1 agri-meet.com, 1 agri.ee, 1 +agricult.tk, 1 agricultural-technology.tk, 1 agriculture-schools.com, 1 agrifoodtoday.it, 1 @@ -7613,6 +7658,7 @@ agriresearch.tk, 1 agrish.tk, 1 agrisicilia.it, 0 agro-dom.solutions, 1 +agro-ferma.tk, 1 agro-forestry.net, 1 agrobase.uz, 0 agrobaza.com.ua, 1 @@ -7631,9 +7677,11 @@ agroland.tk, 1 agrolife.tk, 1 agromotorsburzaco.com, 1 agron.tk, 1 +agronomi.tk, 1 agronomict.tk, 1 agropark.tk, 1 agroplas.cf, 1 +agropool.tk, 1 agropotter.com.ua, 1 agrospan.ga, 1 agroteam.tk, 1 @@ -7646,6 +7694,7 @@ agscapeslandscaping.com, 1 agscinemas.com, 1 agscinemasapp.com, 1 agsun6.com, 1 +aguantepimpinero.tk, 1 aguarani.com.br, 1 aguaviva.tk, 1 aguiascarecas.org, 1 @@ -7680,11 +7729,13 @@ ahanet.tk, 1 ahansen.is, 0 ahbap.org, 1 ahc.fyi, 1 +ahccorleone.tk, 1 ahcpb.com, 1 ahcpr.gov, 1 ahd.com, 0 ahealthyjourney.ca, 1 ahegaoroulette.com, 1 +ahelos.tk, 1 ahenkerp.com, 1 ahero4all.org, 1 ahg-offices.fr, 1 @@ -7731,6 +7782,7 @@ ahroproject.org, 1 ahrq.gov, 1 ahs.com, 1 ahsanautos.pk, 1 +ahsinsaleem.tk, 1 ahstrem.com, 1 ahsyg.com, 1 ahtuxpk.ru, 1 @@ -7866,6 +7918,7 @@ ainutrition.co.uk, 1 ainvest.de, 1 ainzu.net, 1 aioboot.com, 1 +aiofx.net, 1 aiois.com, 1 aioj.ac, 1 aiom.tk, 1 @@ -7890,6 +7943,7 @@ aipregnant.com, 1 aiqidm.com, 1 air-business.tk, 1 air-clan.tk, 1 +air-flot.tk, 1 air-planning.co.jp, 1 air-rishon.tk, 1 air-soft.ga, 1 @@ -7976,6 +8030,7 @@ aircheapfare.com, 1 aircheapfares.com, 1 aircomet.tk, 1 aircompressormachine.com, 1 +airconditioning.tk, 1 airconditioningcondensers.tk, 1 airconditioningmidrand.co.za, 1 airconmidrand.co.za, 1 @@ -7997,6 +8052,7 @@ airdur.eu, 1 aireaseleaks.org, 1 airedaleterrier.com.br, 1 aires-autoroute-areas.com, 1 +airethilien.tk, 1 airetvie.com, 1 aireuropeflights.com, 1 airez.tk, 1 @@ -8037,6 +8093,7 @@ airjet.cf, 1 airjordanpascher.tk, 1 airkiss.ga, 1 airknowledge.gov, 1 +airline-rabota.tk, 1 airlineairlines.com, 1 airlineairways.com, 1 airlinec.com, 1 @@ -8051,6 +8108,7 @@ airlinefees.com, 1 airlineflyingclub.tk, 1 airlinehawaii.com, 1 airlinelondon.com, 1 +airlinenews.tk, 1 airlineoil.com, 1 airlineplanetickets.com, 1 airlinesair.com, 1 @@ -8166,6 +8224,7 @@ airterms.cf, 1 airticketstravel.com, 1 airtimerewards.co.uk, 0 airtoolaccessoryo.com, 1 +airtrain.gq, 1 airtrolinc.com, 1 airventilation.ca, 1 airventuri.com, 1 @@ -8180,6 +8239,7 @@ airzox.com, 1 ais.fashion, 1 aiscale.fr, 1 aischepervers-porn.com, 1 +aisedomains.ga, 1 aisera.com, 1 aish.ml, 1 aisi316l.net, 1 @@ -8227,6 +8287,7 @@ ajaxnow.tk, 1 ajaxplaza.tk, 1 ajaxposter.tk, 1 ajaxsites.tk, 1 +ajaxtime.tk, 1 ajaxtraining.tk, 1 ajaxworld.tk, 1 ajces.com, 1 @@ -8296,6 +8357,8 @@ akasi.cf, 1 akaxaka.tk, 1 akaziya.cf, 1 akbam.co.uk, 1 +akbarsempoi.tk, 1 +akbas.tk, 1 akbtv.ru, 1 akc3n.org, 1 akdenizim.tk, 1 @@ -8349,6 +8412,7 @@ akiyama.website, 1 akiym.com, 1 akj.io, 1 akkerwinde.tk, 1 +akkordy-skachat.ga, 1 akkorturizm.com, 1 akl.city, 1 aklagare.se, 1 @@ -8412,6 +8476,7 @@ akumat.pl, 1 akuntansilengkap.com, 1 akupunktur-akupunktoer.dk, 1 akupunktura.tk, 1 +akura.cf, 1 akura.tk, 1 akuseorangtraveler.com, 1 akuston.eu, 1 @@ -8423,6 +8488,8 @@ akvorrat.at, 1 akyildiz.net, 1 al-abdal.tk, 1 al-bahrain.tk, 1 +al-capone.ga, 1 +al-capone.tk, 1 al-f.net, 1 al-hekka.com.ua, 1 al-salam.tk, 1 @@ -8455,6 +8522,7 @@ alacriti.com, 1 alacritylaw.com, 1 aladdin.ie, 1 aladdinschools.appspot.com, 1 +aladintechnologies.tk, 1 alain-webcreator.cf, 1 alainbaechlerphotography.ch, 0 alainfrancois.eu, 1 @@ -8465,6 +8533,7 @@ alainwolf.ch, 1 alainwolf.net, 1 alais.com.do, 1 alalivre.cf, 1 +alamad.cf, 1 alamak.cc, 1 alamalsahara.co, 1 alamanceconstruction.com, 1 @@ -8506,6 +8575,7 @@ alarme-bateau-yacht.com, 1 alarmmessageest.ga, 1 alarmnewengland.com, 1 alarna.de, 1 +alas-negras.tk, 1 alasdelalma.com.co, 1 alasdupur.tk, 1 alaska.com.tr, 1 @@ -8530,8 +8600,11 @@ albadon.tk, 1 albagold.tk, 1 albagora.nl, 1 albakham.eu.org, 1 +albakos.tk, 1 +albaladejodelcuende.tk, 1 albalatedelarzobispo.tk, 1 albalew.is, 1 +albalinks.tk, 1 albamusic.tk, 1 albaneselorenzo.com, 1 albanesi.it, 1 @@ -8554,10 +8627,12 @@ albendazole.ml, 1 albergointernational.it, 1 albergolafiorita.com, 1 alberguecovadonga.es, 1 +alberoraydolap.com, 0 albersdruck.de, 1 albert-yu.com, 1 albertathome.org, 1 albertcuyp-markt.amsterdam, 1 +alberteinsteinbiography.tk, 1 albertforfuture.de, 1 albertgibb.tk, 1 albertify.xyz, 1 @@ -8594,6 +8669,7 @@ alcalainos.tk, 1 alcaldia.info, 1 alcamilo.cloudns.cc, 1 alcanaan.com, 1 +alcantara.cf, 1 alcapalis.tk, 1 alcapone.gq, 1 alcar.tk, 1 @@ -8615,6 +8691,7 @@ alcineconamor.com, 1 alcionesakugawa.com, 0 alcites.com, 1 alcnutrition.com, 1 +alcobendas.tk, 1 alcoclinica.moscow, 1 alcoclinica.ru, 1 alcoholapi.com, 1 @@ -8625,11 +8702,14 @@ alcoleadetajo.tk, 1 alcolecapital.com, 1 alcor.tk, 1 alcorncountyms.gov, 1 +alcove.cf, 1 alcovidvaccine.gov, 1 alctel.com.br, 1 +alcubillas.tk, 1 aldarcake.com, 1 aldastv.tk, 1 alday.de, 1 +aldeal.gq, 1 aldealices.tk, 1 aldebaranbm.com, 1 aldersgatemontgomery.org, 1 @@ -8646,6 +8726,7 @@ aldo-shop.tk, 1 aldomedia.com, 1 aldorr.net, 0 aldous-huxley.com, 1 +aldridge-ringers.tk, 1 aldyputra.net, 1 ale5000.altervista.org, 1 alea-prevention.com, 1 @@ -8671,17 +8752,23 @@ alekos2go.com, 1 aleks.com, 1 aleksa.ga, 1 aleksa.tk, 1 +aleksandar-vukmirovic.tk, 1 aleksanderkilinski.tk, 1 +aleksanders.tk, 1 alekseevaleksandr.cf, 1 alekseevski.tk, 1 +aleksejjocic.tk, 1 alelectricista.es, 1 alelin.ml, 1 alemagia.pl, 1 +alemangranada.tk, 1 alemautos.com.co, 1 alena.ga, 1 alena.tk, 1 alenafugueroa.tk, 1 +alenaserezhina.cf, 1 alenbadel.com, 1 +alendronate.gq, 1 alenwich.com, 1 aleph.land, 1 alerbon.net, 1 @@ -8693,6 +8780,7 @@ alertes.biz, 1 alerts.sg, 1 alertwire.com, 1 alescan.it, 1 +alesha.tk, 1 aless.io, 1 alessandraoliva.tk, 1 alessandrobasi.it, 1 @@ -8722,10 +8810,13 @@ alexanderb.info, 1 alexanderbernitz.eu, 1 alexanderg.tk, 1 alexanderjshapiro.com, 1 +alexanderkhen.tk, 1 alexanderlau.ga, 1 alexanderneng.de, 1 alexandernorth.ch, 1 +alexanderpiatigorsky.tk, 1 alexanderplatz.tk, 1 +alexanderpopov.tk, 1 alexanderschimpf.de, 1 alexandertechniquenow.com, 1 alexandertutoring.com, 1 @@ -8751,6 +8842,7 @@ alexbogovich.com, 0 alexbosch.net, 1 alexbresnahan.com, 1 alexcoman.com, 1 +alexcpp.tk, 1 alexdaniel.org, 1 alexdesigner.tk, 1 alexdowns.tk, 1 @@ -8780,6 +8872,7 @@ alexisshaw.com, 1 alexitor.com, 1 alexjsully.me, 1 alexlambertz.de, 1 +alexlombardo.tk, 1 alexlouden.com, 1 alexmainz.com, 1 alexmedia.tk, 1 @@ -8811,6 +8904,7 @@ alextaffe.com, 1 alexthayne.co.uk, 1 alextsang.net, 1 alextweewielers.tk, 1 +alexustinoff.cf, 1 alexvdveen.nl, 1 alexvetter.de, 0 alexwardweb.com, 1 @@ -8820,6 +8914,7 @@ alexzeta.tk, 1 aleymedya.ga, 1 aleymedya.gq, 1 aleymedya.ml, 1 +aleynamasajsalonu.gq, 1 alezaragoza.com, 1 alfa-auto.tk, 1 alfa-books.ga, 1 @@ -8834,7 +8929,9 @@ alfadecor.ml, 1 alfadefiant.tk, 1 alfagroup-aluminium.com, 1 alfagroupaluminium.com, 1 +alfalasteenyia.cf, 1 alfamask.de, 1 +alfambra.tk, 1 alfaperfumes.com.br, 1 alfaproweb.fr, 1 alfastone.com.ua, 1 @@ -8861,6 +8958,7 @@ algbee.com, 1 algbra.com, 1 algebra-quiz.com, 1 algercounty.gov, 1 +algerianportal.tk, 1 algeriaweb.tk, 1 algerie-music.tk, 1 alghadpowersolutions.com, 1 @@ -8892,13 +8990,16 @@ alianet.org, 1 aliantsoft.pl, 1 aliasinfoforums.tk, 1 aliaswp.com, 1 +alibabau.tk, 1 alibamu.com, 1 alibamu.org, 1 alibangash.com, 1 alibi-ua.com.ua, 1 alibip.de, 1 +alicante-spain.tk, 1 alice-memorial.de, 1 alice.tw, 1 +alicebaldenegro.tk, 1 alicedepret.com, 1 alicehairstyling.tk, 1 alicehartley.com, 1 @@ -8964,9 +9065,11 @@ alinode.com, 1 alinol.com, 1 aliorange.com, 1 aliosmanyuksel.com.tr, 1 +alireza2love.tk, 1 alirezahesari.com, 1 alis-test.tk, 1 alisblog.ml, 1 +alishanova.tk, 1 alisoft.gq, 1 alisondavenport.ga, 1 alisondemarco.com, 1 @@ -8976,15 +9079,15 @@ alisonmcalpine.com, 1 alissa-group.com, 1 alissagerhard.de, 1 alissanoir.net, 1 +alisstyle.tk, 1 alista.design, 1 +alistaku.tk, 1 alisync.com, 1 alitabergert.tk, 1 alitajran.com, 1 alitec.it, 1 alitpedia.ga, 1 -aliud.be, 1 aliv.biz, 1 -alivecast.co.jp, 1 alix-board.de, 1 aliyasin.org, 1 alizah.id, 1 @@ -9009,6 +9112,7 @@ alko-stop.cf, 1 alko-stop.ml, 1 alkoferma.gq, 1 alkogol.ga, 1 +alkopedia.tk, 1 alkor.tk, 1 alkozeroks-wiki.ru, 1 all-bikes.fr, 1 @@ -9019,6 +9123,7 @@ all-credits.cf, 1 all-ebooks.gq, 1 all-fashion-schools.com, 1 all-for-u.tk, 1 +all-gsm-solutions.tk, 1 all-inhealth.com, 1 all-markup-news.com, 1 all-music.ml, 1 @@ -9081,12 +9186,14 @@ allbooks.cf, 1 allbouncesurrey.co.uk, 1 allboymodeling.com, 1 allbrestby.tk, 1 +allbrestorg.tk, 1 allbridges.tk, 1 allbs.pt, 1 allcapa.org, 1 allcarecorrectionalpharmacy.com, 1 allcarepharmacy.com, 1 allcarespecialty.pharmacy, 1 +allcelebs.tk, 1 allcinema.net, 1 allcleanservices.ca, 1 allcloud.com, 1 @@ -9094,6 +9201,7 @@ allcompanycorp.com, 1 allcooking.tk, 1 allcourts.tk, 1 allcoveredbyac.com, 1 +allcrimea.tk, 1 alldentalalanya.com, 1 alldewall.de, 1 alldigitalsolutions.com, 0 @@ -9105,8 +9213,10 @@ alle.bg, 1 allefrisuren.de, 1 alleganyco.gov, 1 allegorymetal.tk, 1 +allegra.ga, 1 allegra180.ga, 1 allegra180mg.ga, 1 +allegrapark.ga, 1 allegrettoresort.com, 1 allegrettoresortandvineyard.com, 1 allegrettoresortandvineyardbyayres.com, 1 @@ -9154,12 +9264,14 @@ allexpress.su, 1 allfashionews.tk, 1 allfaucet.ml, 1 allfoodrecipes.ga, 1 +allforex.ml, 1 allforhon.tk, 1 allforlocal.com, 1 allformsweden.com, 1 allfortips.com, 1 allfundsconnect.com, 1 allfur.love, 1 +allgadgetsfree.tk, 1 allgaragefloors.com, 1 allgemeinarzt-wenta-bralla.de, 1 allglobal.net, 1 @@ -9168,6 +9280,7 @@ allgrass.net, 1 allgreek.tk, 1 allhallows.tk, 1 allhard.org, 1 +allhits.ml, 1 allhomemueble.com, 1 allhsa.com, 1 alli-diet-pill.cf, 1 @@ -9184,7 +9297,9 @@ alliances-globalsolutions.com, 0 allianskyrkan.se, 1 allincoin.shop, 1 allindiacityguide.com, 1 +allindiajobs.ga, 1 allindiatanzeem.ml, 1 +allinform.ga, 1 allinoutfits.com, 1 allinsuranceinformation.com, 1 allis.co.jp, 1 @@ -9194,19 +9309,24 @@ allisonsite.tk, 1 allitcrm.sytes.net, 1 allius.de, 1 alljamin.com, 1 +alljokesaside.tk, 1 +alllaboutchickens.tk, 1 allladyboys.com, 1 allline.shop, 1 allmagic.tk, 1 allmandlaw.com, 1 +allmaps.tk, 1 allmaster.ga, 1 allmba.cf, 1 allmco.com, 1 allmemy.com, 0 allmen.tk, 1 +allmessedup.tk, 1 allmobilenews.tk, 1 allmousepads.com, 1 allmoviesonline.tk, 1 allnations4christ.org, 1 +allnovosibirsk.tk, 1 allns.fr, 1 allnutritionrd.com, 1 allo-credit.ch, 0 @@ -9216,9 +9336,11 @@ allohol.de, 1 allontanamentovolatili.it, 1 allontanamentovolatili.milano.it, 1 allopurinal.tk, 1 +allopurinol.gq, 1 allopurinol100mg.tk, 1 allopurinol300mg.ml, 1 alloverthehill.com, 1 +allpedia.tk, 1 allphaseclean.com, 1 allplayer.tk, 1 allpointsblog.com, 1 @@ -9246,7 +9368,6 @@ allseasons-cleaning.co.uk, 1 allseasonschimney.com, 1 allseasonswaterproofing.com, 1 allset.ml, 1 -allshapes.co.nz, 1 allshousedesigns.com, 0 allsoftfree.com, 1 allsoulinc.com, 1 @@ -9326,6 +9447,7 @@ almanea.org, 1 almanilan.com, 1 almanshood.com, 1 almarail.tk, 1 +almargen.ga, 1 almargen.tk, 1 almasoft.ga, 1 almastabriz.com, 1 @@ -9334,6 +9456,7 @@ almatinki.com, 1 almatytips.com, 1 almayadeen.education, 1 almaz-host.ml, 1 +almaz-host.tk, 1 almaz-sait-rp.ml, 1 almeerajtour.com, 1 almeeraloyalty.com, 1 @@ -9343,9 +9466,11 @@ almenrausch-pirkhof.de, 1 almeriaplayer.tk, 1 almi.cz, 1 almiriatechstore.co.ke, 1 +almlab.tk, 1 almlc.gov, 1 almokhlifoud.com, 1 almorafestival.com, 1 +almosis.tk, 1 almost.cf, 1 almost.fit, 1 almost.gq, 1 @@ -9373,6 +9498,7 @@ alohotelorange.com, 1 alohotels.com, 1 alola.co.uk, 1 alolabor.org, 1 +alomch.gq, 1 alomendia.tk, 1 alonaku.com, 1 aloneg.ovh, 1 @@ -9441,7 +9567,9 @@ alphacyp.com, 1 alphadance.tk, 1 alphadefense.co.za, 1 alphadote.com, 1 +alphadronten.tk, 1 alphaetomega3d.fr, 1 +alphagames.tk, 1 alphahosting.hu, 1 alphahunks.com, 1 alphainflatablehire.com, 1 @@ -9510,13 +9638,25 @@ alta-densidad.tk, 1 alta-ict.nl, 1 altabadia.com, 1 altabadia.it, 1 +altabash.tk, 1 altabib.me, 1 +altabooks.ga, 1 altacomunicazione.tk, 1 altahrim.net, 1 +altai-info.ga, 1 +altai-voyage.tk, 1 +altai-zemlya.cf, 1 +altai-zemlya.ga, 1 +altai-zemlya.ml, 1 +altai-zemlya.tk, 1 +altai22.tk, 1 altailife.ru, 0 altairfp.es, 1 altairlyh.com, 1 altaizemlya.cf, 1 +altaizemlya.ga, 1 +altaizemlya.ml, 1 +altaizemlya.tk, 1 altaplana.be, 1 altavaldinon.com, 1 altaynews.kz, 0 @@ -9559,12 +9699,14 @@ alternative.hosting, 1 alternativebit.fr, 1 alternativedev.ca, 1 alternativeenergy.tk, 1 +alternativefacts.cf, 1 alternativehosting.ca, 1 alternativehosting.com, 1 alternativeinternet.ca, 1 alternativet.party, 1 alternativetomeds.com, 1 alternativnizivot.tk, 1 +alternatiwa.tk, 1 alternatyv.ch, 1 alternego.com, 1 alternet.ml, 1 @@ -9611,7 +9753,9 @@ altoweb.tk, 1 altphotos.com, 1 altporn.xyz, 0 altralamezia.tk, 1 +altramarsala.tk, 1 altrasoluzione.com, 1 +altratella.tk, 1 altrei.ch, 1 altria.wang, 1 altrui.st, 1 @@ -9625,6 +9769,7 @@ alturiak.net, 1 altusbiologics.com, 1 altview.gq, 1 altweb.ro, 1 +aluchta.tk, 1 alugha.com, 1 aluguer-rodagigante.pt, 0 alukard.ml, 1 @@ -9632,6 +9777,7 @@ alulasails.com, 1 aluminium-giesserei.de, 1 aluminumfencestlouis.com, 1 alumni-kusa.jp, 1 +alumni-skensa.tk, 1 alumnifire-staging.com, 1 alumnifire.com, 1 alumnispecialers.ga, 1 @@ -9640,11 +9786,14 @@ alunara.eu, 1 alunyc.gq, 1 alupferd.de, 1 aluroof.eu, 1 +alushta-vostorg.ml, 1 alushta-vostorg.tk, 1 alushta.tk, 1 alusib.ga, 1 +alusim.ga, 1 alvaiazere.net, 1 alvarez.tk, 1 +alvarezmorales.tk, 1 alvaritoeresnuestradulcelocura.tk, 1 alvaro-smith.link, 1 alvarocastillo.net, 1 @@ -9662,6 +9811,7 @@ alvordtx.gov, 1 alvosec.com, 1 always.com, 0 always.com.mx, 1 +alwayshowher.tk, 1 alwayslookingyourbest.com, 1 alwaysmine.fi, 1 alwaysonssl.com, 1 @@ -9713,6 +9863,8 @@ ama.com.au, 1 ama.ne.jp, 1 amabiligranilhas.com, 1 amaderforum.tk, 1 +amadeusproject.cf, 1 +amadin.tk, 1 amadispa.com.br, 1 amadoraslindas.com, 1 amadvice.com, 1 @@ -9726,13 +9878,16 @@ amaiz.com, 1 amalbansode.com, 1 amalfi5stars.com, 1 amalfipositanoboatrental.com, 1 +amalgaamvrij.tk, 1 amalgaamziekte.tk, 1 +amalgamma.ml, 1 amalievonstein.net, 1 amalou-photografie.de, 1 amambebe.com, 1 amanandalens.com, 1 amandablain.com, 1 amandadamsphotography.com, 1 +amandahamilton.tk, 1 amandamachado.nl, 1 amandamaedesign.com, 1 amandasage.ca, 1 @@ -9762,6 +9917,7 @@ amasing.tk, 1 amateri.com, 1 amateur-boxing.tk, 1 amateur-ham-rad.io, 1 +amateur.cf, 1 amateur101.tk, 1 amateureuro.com, 1 amateurplayerstour.com, 1 @@ -9917,6 +10073,7 @@ americanfootball.tk, 1 americangods.tk, 1 americanimageawards.com, 1 americanindiannursing.com, 1 +americankickoff.ga, 1 americanpop.be, 1 americanreservations.us, 1 americans.cam, 1 @@ -10019,6 +10176,7 @@ amiserver.de, 1 amisharingstuff.com, 1 amishra.tk, 1 amisoft.co.jp, 1 +amisoft.tk, 1 amissing.link, 1 amithvijayan.in, 1 amitopia.tk, 1 @@ -10126,6 +10284,7 @@ ampproject.org, 1 ampselectricsolar.com, 1 amptubes.com.au, 1 ampullen.tk, 1 +amputated.tk, 1 amputatedgenitals.tk, 1 amr.de, 1 amrcaustin.com, 1 @@ -10203,6 +10362,7 @@ anabijou.com.br, 1 anabolic-stresser.ga, 1 anabolic.co, 1 anabolickdieta.ga, 1 +anabolics.tk, 1 anabolika.ga, 1 anabolika.gq, 1 anabolika.ml, 1 @@ -10260,11 +10420,15 @@ anamterminal.tk, 1 ananas.gq, 1 anandchowdhary.com, 1 anandsah.in, 1 +anangeix.tk, 1 anankecosmetics.com, 1 anantshri.info, 1 +ananyagupta.tk, 1 ananyoo.com, 0 anaprieto.com, 1 +anapsi.tk, 1 anarajaoui.ma, 1 +anarcasmetalicos.tk, 1 anarchie-in-lippe.tk, 1 anarchie.tk, 1 anarchista.top, 1 @@ -10357,6 +10521,7 @@ andoaingo-gaztetxea.tk, 1 andoms.fi, 1 andonivr.com, 1 andor.com.au, 1 +andorraimperial.tk, 1 andorrainsiders.com, 1 andos.tk, 1 andoyasuyuki.com, 1 @@ -10473,6 +10638,7 @@ andreysmirnov.tk, 1 andrian.ga, 1 andrian.tk, 1 andriano.net, 1 +andrianova.ml, 1 andriekus.tk, 1 andrienko.tk, 1 andrija-i-andjelka.com, 1 @@ -10646,7 +10812,6 @@ angiology.sk, 1 angione.ca, 1 angione.se, 1 angisonline.cz, 1 -angkapaito.net, 1 angkasa.net.id, 1 anglais-angouleme.com, 1 anglarsports.com, 1 @@ -11052,6 +11217,7 @@ antabuse500mg.ga, 1 antabuskaufen1.gq, 1 antagning.se, 1 antagonist1.tk, 1 +antalya-taxi.cf, 1 antalya-turkey.tk, 1 antalya-yesim.cf, 1 antalyaescmagazin.tk, 1 @@ -11091,6 +11257,7 @@ anteny.ml, 1 antephaber.tk, 1 anteprima.info, 1 anteroleppanen.fi, 1 +antfarm.cf, 1 anthisis.tv, 1 anthony-bardon.eu, 1 anthonycarbonaro.com, 0 @@ -11115,6 +11282,7 @@ anthropoid.ca, 1 anti-bible.com, 1 anti-civilisation.tk, 1 anti-depressants.tk, 1 +anti-doping.tk, 1 anti-eniologia.ml, 1 anti-eniologiya.ml, 1 anti-gololed.ga, 1 @@ -11206,6 +11374,7 @@ antistate.ch, 1 antistatik.tk, 1 antisystem.tk, 1 antitabak.tk, 1 +antiuser.tk, 1 antivandal.tk, 1 antivigilancia.tk, 1 antivirus.cz, 1 @@ -11425,7 +11594,6 @@ apercloud.es, 1 aperioadvice.ga, 1 aperiomoney.ga, 1 aperiotaxation.ga, 1 -apert.be, 1 aperta.ro, 1 aperta.shop, 1 apertis.org, 0 @@ -11539,6 +11707,7 @@ apnisites.tk, 1 apnsettingss.com, 1 apobot.de, 1 apocalipsisdot.tk, 1 +apocalypseboard.tk, 1 apocalypseclan.tk, 1 apocalypsje.ga, 1 apod.com.au, 1 @@ -11923,6 +12092,7 @@ arabstar.ml, 1 arabstar.tk, 1 arabstreamsystem.tk, 1 arabtones.tk, 1 +arabwomen.ml, 1 aracbul.com, 1 arachina.com, 1 arachnid.tk, 1 @@ -12130,6 +12300,7 @@ area51.dyndns1.de, 1 area51.social, 1 area51bit.com, 1 area51bit.it, 1 +areacinquentaeum.tk, 1 areaclienti.net, 0 areafiftylan.nl, 1 areallyneatwebsite.com, 1 @@ -12260,6 +12431,7 @@ arinde.ee, 1 arinflatablefun.co.uk, 1 arionta.com, 1 arious.uk, 1 +aripiprazolee.gq, 1 arirabinowitz.com, 1 arisaka.tk, 1 arise19.com, 1 @@ -12416,6 +12588,7 @@ arno.pm, 1 arnoklein.eu, 1 arnoklein.fr, 1 arnoklein.it, 1 +arnold-schwarzenegger.tk, 1 arnoldkontz-occasions.lu, 0 arnonerba.com, 1 arnor.org, 1 @@ -12980,6 +13153,7 @@ asiansongs.tk, 1 asianspa.co.uk, 1 asianwebcams.webcam, 1 asiaproductsdirect.tk, 1 +asiasmi.tk, 1 asiaticas.cf, 1 asiaview.ml, 1 asiaview.tk, 1 @@ -13240,6 +13414,7 @@ astrid-stolz.de, 1 astro-com.co.uk, 1 astro4u.tk, 1 astroalloys.com.au, 0 +astrociencia.tk, 1 astrodog.com.au, 1 astrogate.tk, 1 astrogift.cf, 1 @@ -13391,6 +13566,7 @@ aterlectric.com, 1 atev.tk, 1 atf.gov, 1 atfonline.gov, 1 +atfstudios.tk, 1 atgoetschel.ch, 0 atgresultat.com, 1 atgseed.co.uk, 1 @@ -13424,6 +13600,7 @@ athlin.de, 1 athomedeco.fr, 1 athorcis.ovh, 1 athritisexplained.com, 1 +atide.cf, 1 atigerseye.com, 1 atik.kr, 0 atiku2007.tk, 1 @@ -13452,7 +13629,7 @@ atk-nexus.tech, 1 atk.me, 1 atkinshealthcenter.com.au, 1 atkstore.com, 1 -atl-paas.net, 1 +atl-paas.net, 0 atlan.digital, 1 atlana.pro, 1 atlantacustomfab.com, 0 @@ -13474,6 +13651,7 @@ atlanticwatches.ch, 1 atlantida-amber.org, 1 atlantik.ml, 1 atlantik.tk, 1 +atlantikwall.ga, 1 atlantischild.hu, 1 atlantishop.si, 1 atlantishq.de, 1 @@ -13496,8 +13674,6 @@ atlasleeuwen.tk, 1 atlaso.cz, 1 atlasone.us, 1 atlasreclame.nl, 1 -atlassart.com, 1 -atlassian.io, 1 atlassian.net, 0 atlassignsandplaques.com, 1 atlastax.ga, 1 @@ -13505,6 +13681,7 @@ atlastaxi.eu, 1 atlasuno.com, 1 atlaswu.com, 1 atlcoaters.com, 1 +atletico-guacuano.tk, 1 atletika.hu, 1 atletismomacotera.tk, 1 atlseccon.com, 1 @@ -13520,6 +13697,7 @@ atmmasterplan.eu, 1 atmocdn.com, 0 atmondigital.com, 0 atmos.tk, 1 +atmosferno.cf, 1 atmox.eu, 1 atmoz.tk, 1 atmydesk.tech, 1 @@ -13578,6 +13756,7 @@ attekaleva.fi, 1 attendanceondemand.com, 1 attendantdesign.com, 1 attendu.cz, 1 +attengo.ga, 1 attention.horse, 1 attentionpleats.com.tw, 1 atthehelmins.com, 1 @@ -13674,7 +13853,6 @@ audiologiasinfronteras.com, 1 audiologistdirectory.com, 1 audiolokah.tk, 1 audiolot.com, 1 -audiomaze.com, 1 audiomedica.com, 1 audiomind.tk, 1 audiomir.tk, 1 @@ -13700,6 +13878,7 @@ auditingfirm.tk, 1 audition-radio.tk, 1 auditiontapes.co.uk, 1 auditmatrix.com, 1 +auditore-host.tk, 1 auditos.com, 1 auditpartnership.com, 1 auditsquare.com, 1 @@ -13727,6 +13906,8 @@ augesen.tk, 1 augix.net, 1 augmedix.com, 1 augmentable.de, 0 +augmentin.ga, 1 +augmentin.gq, 1 augmentines600.ga, 1 augredutemps.ca, 1 augur.us, 1 @@ -13852,8 +14033,10 @@ austinonline.tk, 1 austinsutphin.com, 1 austintxacrepairtoday.com, 1 austinuniversityhouse.com, 1 +australiadaily.ga, 1 australiajetcharter.com, 1 australian.dating, 1 +australian.tk, 1 australianairbrushedtattoos.com, 1 australianairbrushedtattoos.com.au, 1 australianallnaturalskincare.com.au, 1 @@ -13868,6 +14051,7 @@ australiantemporarytattoos.com, 1 australiantemporarytattoos.com.au, 1 australien-tipps.info, 1 austriablog.de, 0 +austriaguide.tk, 1 austriahikingtours.tk, 1 austriantekken.tk, 1 austriatravel.tk, 1 @@ -13911,6 +14095,7 @@ autismewoerden.nl, 1 autisten.club, 1 autistici.org, 1 auto-anleitung.de, 1 +auto-arsenal.tk, 1 auto-borse.tk, 1 auto-dealership-news.com, 1 auto-ecole-remparts.fr, 1 @@ -13923,6 +14108,7 @@ auto-plus.tn, 1 auto-profy.com.ua, 1 auto-quote.ga, 1 auto-rahbari.de, 1 +auto-reklame.tk, 1 auto-res.ru, 1 auto-skills.ru, 1 auto1.fi, 1 @@ -13962,6 +14148,8 @@ autoconcept.ga, 1 autoconcept.tk, 1 autocorner.com, 1 autocross.tk, 1 +autocrossfoto.tk, 1 +autocrossonline.tk, 1 autocrossteam-martens.tk, 1 autocrossteam-monein.tk, 1 autocrossteam.tk, 1 @@ -13982,6 +14170,7 @@ autoentrepreneurinfo.com, 1 autoepc.ro, 1 autoexprez.com, 1 autofficina.roma.it, 1 +autofinancing.ga, 1 autofornal.pl, 1 autofresh.tk, 1 autogarag.ru, 1 @@ -14200,6 +14389,7 @@ autoparts.wf, 1 autopartso.com, 1 autopaulito.pt, 1 autopocket.co, 1 +autoportal.tk, 1 autopril.com, 1 autoprogconsortium.ga, 1 autoproshouston.com, 1 @@ -14248,6 +14438,7 @@ autostationsest.ga, 1 autostock.me, 1 autostodulky.cz, 1 autostop-occasions.be, 1 +autostrady.tk, 1 autostramites.com, 1 autostramites.com.ar, 1 autosupirkimas.tk, 1 @@ -14290,6 +14481,7 @@ autowallpapers.tk, 1 autowatch.tk, 1 autoweek.nl, 1 autowerkstatt-puchheim.de, 1 +autozaz.ml, 1 autozen.com.co, 1 autozuki.com, 1 autres-talents.fr, 1 @@ -14340,6 +14532,7 @@ avalon-rpg.com, 1 avalon-studios.de, 1 avalonaardoom.nl, 1 avalonbelltown.com, 0 +avalondevelopment.tk, 1 avalontechsv.com, 1 avalyuan.com, 1 avamax.cz, 1 @@ -14397,8 +14590,10 @@ avanadejobs.com, 1 avanadejobs.net, 1 avanadeonline.com, 1 avancen.com, 1 +avangard-tovar.tk, 1 avangard.tk, 1 avanguardia.tk, 1 +avangvpn.ga, 1 avanovum.de, 1 avanpatel.com, 1 avanpost.co, 1 @@ -14446,6 +14641,7 @@ avenade.org, 1 avenge.pet, 1 avengepet.com, 1 avengersonline.ml, 1 +avengersonlinemovie.ga, 1 aventuranursery.com, 1 aventurasnorowa.com, 0 avenuedesbebes.com, 1 @@ -14463,7 +14659,6 @@ avevad.com, 1 avexon.com, 1 avg.club, 1 avg7.de, 1 -avgeeksunited.com, 1 avgindiantech.com, 1 avi-web.com, 1 avi12.com, 0 @@ -14484,6 +14679,7 @@ aviasales.gq, 1 aviasalon.spb.ru, 1 aviaskan.ru, 1 aviationcareerpal.com, 1 +aviationmilitaire.tk, 1 aviationonline.tk, 1 aviations-engineering.tk, 1 aviationsafetywiki.org, 1 @@ -14491,6 +14687,7 @@ aviationstrategies.aero, 1 aviationstrategy.aero, 1 aviationweather.gov, 1 aviationzone.tk, 1 +aviconverter.tk, 1 avidmode-dev.com, 1 avidmode-staging.com, 1 avidmode.com, 1 @@ -14504,6 +14701,7 @@ avinilo.com, 1 avinserver.com, 1 avintivmedia.com, 1 aviokarte.rs, 1 +avionicbooks.tk, 1 avions.ga, 1 aviruptribedi.com, 1 avisbabes.com, 1 @@ -14540,6 +14738,7 @@ avocatcivil.net, 1 avocatpenal.net, 1 avocatro.net, 1 avocode.com, 1 +avodart.ml, 1 avogel-company.ch, 1 avogel.ca, 1 avogel.ch, 1 @@ -14582,15 +14781,18 @@ avto-bazar.tk, 1 avto-signal.cf, 1 avto-signal.ga, 1 avto-signal.gq, 1 +avto-signal.ml, 1 avto-skupka-dorogo.ru, 1 avtobania.pro, 1 avtochip.tk, 1 +avtodoki.tk, 1 avtodot.tk, 1 avtoforex.ru, 1 avtogara-isperih.com, 1 avtojurist.ml, 1 avtojurist.tk, 1 avtomaniya.ml, 1 +avtomaniya.tk, 1 avtomarket.ru, 1 avtoobzor.tk, 1 avtorlab.ru, 1 @@ -14600,7 +14802,9 @@ avtours.gr, 1 avtoveles.by, 1 avtovikup.ml, 1 avtovokzaly.ru, 1 +avtoyurist.cf, 1 avtoyurist.ga, 1 +avtoyurist.gq, 1 avtoyurist.ml, 1 avtoyurist.tk, 1 avtransformation.com, 1 @@ -14636,6 +14840,7 @@ awe130.com, 1 awebsome.fr, 1 awedience.tv, 1 awei.pub, 1 +awersomecreatorfromrussia.tk, 1 awesome-coconut-software.fr, 1 awesomebouncycastles.co.uk, 1 awesomelifedeals.today, 1 @@ -14721,6 +14926,7 @@ axmedmessi.tk, 1 axo.art, 1 axome.com, 1 axon-toumpa.gr, 1 +axoncoho.tk, 1 axone-computers.fr, 0 axonholdingse.eu, 1 axre.de, 1 @@ -14886,6 +15092,7 @@ azarkepic.com, 1 azartmania.ga, 1 azartmania.tk, 1 azarus.ch, 1 +azarweb.tk, 1 azbukazvetov.ru, 1 azcensus2020.gov, 1 azenot.com, 0 @@ -14974,6 +15181,7 @@ azuriom.com, 1 azurlane.cool, 1 azurpedia.cf, 1 azuxul.fr, 1 +azvpn.tk, 1 azzorti.com, 1 azzurrapelletterie.it, 1 b-angel.info, 1 @@ -15226,6 +15434,7 @@ babaei.net, 1 babaei.org, 1 babaganousha.net, 1 babai.ru, 1 +babakhanalia.tk, 1 babakortane.ga, 1 babakshaabani.tk, 1 babarkata.com, 1 @@ -15239,6 +15448,7 @@ babbelchat.tk, 1 babblefeed.tk, 1 babeeclothingandoutfits.com, 1 babehunt.tk, 1 +babekids.tk, 1 babeleo.com, 1 babelfisch.eu, 1 babet365.com, 1 @@ -15247,7 +15457,9 @@ babettelandmesser.de, 0 babibonami.tk, 1 babineaux.zone, 1 babitaji.tk, 1 +babki-mgnovenno.ga, 1 babki-mgnovenno.ml, 1 +babkitut.ga, 1 bablodel.biz, 1 bablodel.com, 1 babo.tk, 1 @@ -15262,6 +15474,7 @@ baby-bath-tub.com, 1 baby-digne.com, 0 baby-doll.tk, 1 baby-massage.tk, 1 +baby-skin-care.ga, 1 baby-tester.tk, 1 babyandchild.ae, 1 babyandmoms.tk, 1 @@ -15276,6 +15489,7 @@ babychou.me, 1 babyfights.tk, 1 babyfotograf-schweiz.ch, 1 babygearlab.com, 1 +babygirlholidaydresses.tk, 1 babyinthehouse.com.br, 1 babykappy.com, 1 babyledweaning.website, 1 @@ -15283,6 +15497,7 @@ babyliss-pro.net, 0 babylonclub.cf, 1 babylonplast.com, 1 babymasaze.cz, 1 +babymozg.ga, 1 babynamen.nl, 1 babynames.net, 1 babynoise.tk, 1 @@ -15306,6 +15521,7 @@ babyzen.tk, 1 bac-fiches.tk, 1 bacanal-intruder.tk, 1 bacaneriahlg.com, 1 +bacanora.tk, 1 bacardi.cf, 1 bacardicola.tk, 1 baccarat.tk, 1 @@ -15329,6 +15545,7 @@ bachweid-baar.ch, 1 baciu.ch, 0 back-links.ga, 1 back-stage.tk, 1 +back-streets.tk, 1 back-yard.tk, 1 backd00red.org, 1 backenmachtgluecklich.de, 0 @@ -15396,8 +15613,12 @@ bacsmegye.hu, 1 bacteriakit.com, 1 bactrim-antibiotic.gq, 1 bactrim-antibiotic.ml, 1 +bactrim-ds.ga, 1 +bactrim-medicine.ml, 1 bactrim.ga, 1 bactrim.gq, 1 +bactrimds.cf, 1 +bactrimprice.tk, 1 bacula.jp, 1 bacus.ga, 1 bad-homburg.tk, 1 @@ -15428,6 +15649,7 @@ badf00d.de, 1 badge.rs, 1 badges.fedoraproject.org, 1 badges.stg.fedoraproject.org, 1 +badgirlfoto.ga, 1 badgirlsbible.com, 1 badhabits.tk, 1 badhusky.com, 0 @@ -15438,6 +15660,8 @@ badkamermarkt.com, 1 badkamermarkt.net, 1 badkamermarkt.nl, 1 badkeys.info, 1 +badmessage.tk, 1 +badmice.tk, 1 badminton-forum.tk, 1 badmintonargentina.tk, 1 badmintonbeersheva.co.il, 1 @@ -15446,8 +15670,11 @@ badmintonclubwaarschoot.tk, 1 badmintonoverdag.tk, 1 badmonkey.fr, 1 badmood.tk, 1 +badmusic.tk, 1 +badnails.tk, 1 badnat.tk, 1 badnjar.rs, 1 +badodds.ga, 1 badoo.com, 1 badoo.com.ar, 1 badoo.de, 1 @@ -15524,8 +15751,8 @@ bahrainonline.tk, 1 bahrep.com, 1 baidu-s.com, 0 baiduo.com, 1 -baifubao.com, 1 baikal.cf, 1 +baikalfond.ml, 1 baikalppk.tk, 1 baildonbouncycastles.co.uk, 1 baildonhottubs.co.uk, 1 @@ -15543,11 +15770,14 @@ bairuo.net, 1 bairuo.top, 1 bairwell.com, 1 bait55.ru, 1 +baitable.ml, 1 baitulongbaycruises.com, 1 baity.net, 1 +baixadordemusica.tk, 1 baixarbluray.tk, 1 baixarvideosgratis.com.br, 1 baiyangliu.com, 0 +bajacalifornia.tk, 1 bajalotodo.tk, 1 bajanowski-fotografie.de, 0 bajaprogramas.tk, 1 @@ -15592,9 +15822,12 @@ bakkus.tk, 1 bakla.ml, 1 bakongcondo.com, 1 bakrypt.io, 1 +baks.cf, 1 baksclub.cf, 1 +baksclub.gq, 1 baku-club.tk, 1 baku.news, 1 +bakubest.tk, 1 bakupka.de, 1 bakuze.net, 1 bakxnet.com, 0 @@ -15624,7 +15857,9 @@ balancehits.com.br, 1 balancemedical.com, 1 balancenaturalhealthclinic.ca, 1 balancer.gq, 1 +balanda.ga, 1 balashiha-podmoskovie.ml, 1 +balasingandaru.cf, 1 balaskas.gr, 1 balatonlelleapartman.tk, 1 balboa.io, 1 @@ -15643,6 +15878,7 @@ baldvinringsted.com, 1 baldwin-mania.tk, 1 baleen.us, 1 balelabs.id, 1 +balerma.tk, 1 balesetvedelem.hu, 1 balester.com, 1 balezovolley.fr, 1 @@ -15664,12 +15900,14 @@ balivillassanur.com, 0 baliwebsitedesign.info, 1 baliyano.com, 1 balkan-webcam-model.com, 1 +balkannightlife.ga, 1 balkanpharmstore.com, 1 balkenbushmechanical.com, 1 balkoni.gq, 1 balkonien.org, 1 balkonov.com.ua, 1 ball-bizarr.de, 1 +ball3d.es, 1 ball4training.com, 1 ballarin.cc, 1 ballast.tk, 1 @@ -15697,7 +15935,9 @@ balluncar.tk, 1 balmaindubai.com, 1 balmofgilead.org.uk, 1 balnova.com, 1 +baloch-intelligence.tk, 1 balochism.tk, 1 +baloncestoarqueros.tk, 1 baloncestolliria.tk, 1 balonmano.co, 1 balonsiparis.com, 1 @@ -15725,6 +15965,7 @@ bamboostage.com, 1 bambrick.com.au, 1 bambuitalia.it, 1 bambuk.com.br, 1 +bambukshop.ml, 1 bambumania.com.br, 1 bambusushibar.com, 0 bamfacts.tk, 1 @@ -15732,6 +15973,7 @@ bamifm.tk, 1 bamily.rocks, 1 baming.com, 1 bamoza.com, 1 +bampers.tk, 1 bamsmackpow.com, 1 ban-list.gq, 1 banabarka.tk, 1 @@ -15740,6 +15982,7 @@ bananabandy.com, 1 bananabeer.xyz, 1 bananaday.ru, 1 banananet.work, 1 +bananathrash.tk, 1 bananatreenews.today, 1 bananatrunkingprotocol.com, 1 bananavapes.com, 1 @@ -15762,6 +16005,7 @@ band.us, 1 bandademusicacarrion.tk, 1 bandadestino.tk, 1 bandally.net, 1 +bandamirandadeebro.tk, 1 bandarifamily.com, 1 bandaronline.ml, 1 bandarqonline.ga, 1 @@ -15785,9 +16029,12 @@ bando.de, 1 bandolino-bewind.nl, 1 bandoom.tk, 1 bandures.tk, 1 +bandvideos.tk, 1 bandwagon.tk, 1 bandwagonok.tk, 1 +bandymasarna.tk, 1 baneh-academic.com, 1 +banerka.tk, 1 banes.ch, 1 banffcanmorespeedskating.ca, 1 banfieldtravel.it, 1 @@ -15854,6 +16101,7 @@ bankitt.network, 1 bankmno.ga, 1 bankmoney.cf, 1 banknet.gov, 1 +banknews.ga, 1 banknn.ru, 0 bankofdenton.com, 1 bankofireland.com, 1 @@ -15876,6 +16124,7 @@ banland.net, 1 banlinhdanong.com, 0 banlitang.com, 1 banned-bitches.tk, 1 +banner-design.tk, 1 banner.ga, 1 bannercountyne.gov, 1 bannerexchange.tk, 1 @@ -15885,6 +16134,7 @@ bannerrealty.com, 1 bannervaners.ga, 1 bannerworld.co.uk, 1 bannifan.com, 1 +banning.gq, 1 banningca.gov, 1 banninglibraryca.gov, 1 bannisbierblog.de, 1 @@ -15899,6 +16149,7 @@ banterera.com, 1 bantik.by, 1 bantiki.ga, 1 banwagong.eu.org, 1 +banzay.ml, 1 banzhuti.com, 1 bao-in.net, 1 baobabgroup.com, 1 @@ -15917,6 +16168,7 @@ bapeel.tk, 1 bapha.be, 1 baptiste-peugnez.fr, 1 baptistecabrera.com, 1 +baptisteplanckaert.tk, 1 baptistesale.tk, 1 bar-event.tk, 1 bar-valhalla.tk, 1 @@ -15935,7 +16187,6 @@ baraxolka.ga, 1 baraxolka.ml, 1 barbaderespeito.com.br, 1 barbaleonecuador.com, 1 -barbara-bertagnolli.co.uk, 1 barbara-fuchs-gruene-fuerth.de, 1 barbarabowersrealty.com, 1 barbarabryce.com, 1 @@ -15954,6 +16205,7 @@ barberscorner.tk, 1 barbershop-harmony.org, 0 barbershop-lasvillas.com, 0 barbiecollectorjapan.cf, 1 +barbiecollectorjapan.ga, 1 barbiecollectorjapan.gq, 1 barbieforteza.tk, 1 barbiere.it, 1 @@ -15997,6 +16249,7 @@ bargerveen.tk, 1 bargrill.ga, 1 bargroup.ga, 1 bariatricsurgerynewjersey.com, 1 +barihandin.tk, 1 barikell.be, 1 barinasknot.tk, 1 barinov.ga, 1 @@ -16022,6 +16275,7 @@ barmenteros.com, 1 barmusic.tk, 1 barnabasgolf.org, 1 barnabycolby.io, 1 +barnaul-altai.tk, 1 barnestransport.com, 1 barnesvilleohio.gov, 1 barneveldcentrum.nl, 1 @@ -16036,6 +16290,7 @@ baroccofashion.it, 1 barok.tk, 1 baroloboys.de, 1 baron14.be, 1 +baronet.cf, 1 baronspices.com, 1 barpodsosnami.pl, 1 barprive.com, 1 @@ -16064,6 +16319,7 @@ barro.ga, 1 barronbankruptcyattorney.com, 1 barruntos.tk, 1 barrydenicola.com, 1 +barrymarkus.tk, 1 barrytownshipmn.gov, 1 barsashop.com.br, 1 barsgroup.com, 1 @@ -16077,6 +16333,7 @@ bartavi.nl, 1 bartbania.com, 1 bartcoppens.be, 1 bartdaelman.tk, 1 +bartdesign.tk, 1 bartel.ws, 1 bartelt.name, 1 barter.vg, 1 @@ -16089,6 +16346,7 @@ bartlettil.gov, 1 bartolomebellido.com, 1 bartowcountyga.gov, 1 bartula.de, 1 +bartvandamme.tk, 1 baruch.me, 1 barwaldesigns.com, 1 barwave.com, 1 @@ -16108,6 +16366,7 @@ basdferty.cf, 1 base-autonome-durable.com, 0 base-people.ml, 1 base-radio.cf, 1 +base2face.tk, 1 base64-encode-decode.com, 1 basebalance.net, 1 baseballcrank.com, 1 @@ -16148,11 +16407,13 @@ bashari.tk, 1 bashc.at, 1 bashhack.cf, 1 bashing-battlecats.com, 1 +bashkiri.cf, 1 bashkiria.cf, 1 bashkiria.ga, 1 bashkiria.ml, 1 bashkirlife.tk, 1 bashoutter.link, 1 +bashsoftware.tk, 1 bashstreetband.co.uk, 1 bashtel.tk, 1 basic.is, 1 @@ -16192,6 +16453,7 @@ basmacioglu.com, 1 basnachtegaal.tk, 1 basnoslovno.ru, 1 basonlinemarketing.nl, 1 +basradio.tk, 1 bass-pro.ru, 1 bassanova.tk, 1 bassbase.tk, 1 @@ -16215,6 +16477,7 @@ bastelstu.be, 1 basteltips.tk, 1 bastelwelt.ch, 1 bastelzauberwelt.de, 1 +bastionadvokat.ml, 1 bastionentifo.tk, 1 bastiv.com, 1 bastivmobile.com, 1 @@ -16226,6 +16489,7 @@ baswetter.photography, 1 basyrova.ml, 1 basysconsulting.com, 1 basyspro.net, 1 +batailleros.tk, 1 bataminnovationhub.com, 1 batcave.tech, 1 batch.com, 0 @@ -16255,6 +16519,7 @@ batkonjon.com, 1 batmanvsupermanfullmovie.ga, 1 batmod.com, 1 batoit.gq, 1 +batonchik.tk, 1 batook.org, 1 batten.eu.org, 1 batterman.ch, 1 @@ -16302,6 +16567,7 @@ baumkletterschule.de, 1 baumkuchen-aus-dresden.de, 1 baur.de, 1 bausep.de, 1 +bausparkassen.tk, 1 baustils.com, 1 bauthier-occasions.be, 0 bautizodelucia.com, 1 @@ -16347,6 +16613,7 @@ bayofseo.com, 1 bayou.energy, 1 bayportuganda.com, 1 bayraklar.info, 1 +bayramov.tk, 1 bayrisch-fuer-anfaenger.de, 1 bayscollisionrepairs.co.nz, 1 baysideaba.com, 1 @@ -16370,6 +16637,7 @@ bazaarcompass.com, 1 bazaart.me, 1 bazaclub.ru, 0 bazaleev.ru, 1 +bazar-online.tk, 1 bazar-pc.tk, 1 bazar.bg, 0 bazardunet.tk, 1 @@ -16410,6 +16678,7 @@ bbbff.net, 1 bbc-anal.com, 1 bbc67.fr, 1 bbcastles.com, 1 +bbclyra.tk, 1 bbcomcdn.com, 1 bbcsuk.co.uk, 1 bbcustomremodeling.com, 1 @@ -16442,6 +16711,7 @@ bbox-mag.fr, 1 bbpnas.win, 1 bbqs-algarve.com, 1 bbrigittae.hu, 1 +bbschat.tk, 1 bbsec.xyz, 1 bbsgood.com, 1 bbunits.de, 1 @@ -16489,6 +16759,7 @@ bcoffices.com.mx, 1 bcome.nl, 1 bcomm.com.au, 1 bcpc-ccgpfcheminots.com, 1 +bcrnews.tk, 1 bcrook.com, 1 bcrypt.online, 1 bcschool.cn, 1 @@ -16499,6 +16770,7 @@ bcubic.net, 1 bcyw56.live, 0 bcyw56.top, 1 bczeeland.tk, 1 +bd-media.tk, 1 bd.foundation, 1 bda-boulevarddesairs.com, 0 bdbe.ga, 1 @@ -16561,6 +16833,7 @@ beachsmile.com, 1 beachsoccer.tk, 1 beachvolley.tk, 1 beachvolleyball.tk, 1 +beachworldchampion.tk, 1 beacinsight.com, 1 beaconfed.org, 1 beaconhospital.com.my, 1 @@ -16586,9 +16859,11 @@ beaker.coffee, 1 beal.edu, 1 bealefss.marketing, 1 bealpha.pl, 1 +beam-life.tk, 1 beam-to.me, 1 beama.org, 1 beambdi.com, 1 +beamitaly.tk, 1 beamitapp.com, 1 beamrustproofing.com.au, 1 beanandbarrel.co.za, 1 @@ -16612,6 +16887,7 @@ bearden.io, 1 beardic.cn, 1 beardsome.me, 1 bearev.xyz, 1 +bearfactory.tk, 1 bearfarm.tk, 1 beargoggleson.com, 1 bearings.tk, 1 @@ -16626,6 +16902,7 @@ beashandmade.com, 1 beast-books.com, 1 beast.rent, 1 beastiejob.com, 1 +beastlog.tk, 1 beastnet.works, 1 beastnet.xyz, 1 beastowner.li, 1 @@ -16663,8 +16940,8 @@ beautifulart.ml, 1 beautifulplaces.tk, 1 beautifulreflectionsmedspa.com, 1 beautifulrussianwomen.cf, 1 +beautifulsouth.tk, 1 beauty-blog.gq, 1 -beauty-expert.co, 0 beauty-form.ir, 1 beauty-haircare.tk, 1 beauty-mens.com, 1 @@ -16682,6 +16959,7 @@ beautyandboutique.tk, 1 beautyandfashionadvice.com, 1 beautyanna.ga, 1 beautyanna.gq, 1 +beautyarticles.tk, 1 beautybism.com, 1 beautybox.ro, 1 beautyby.tv, 1 @@ -16697,7 +16975,6 @@ beautyisfine.tk, 1 beautykiss.com, 1 beautylookz.nl, 1 beautymadel.de, 1 -beautyplace-buxtehude.de, 1 beautyschool.od.ua, 1 beautyseasons.ru, 1 beautyspot.tk, 1 @@ -16739,6 +17016,7 @@ beckerpumps.com, 1 becklove.cn, 1 beckmccormick.com, 1 beckylicious.tk, 1 +beclan.tk, 1 becleverwithyourcash.com, 1 beclick.co.il, 1 becoairandheat.com, 1 @@ -16907,6 +17185,7 @@ beizsoft.co.uk, 1 bejago.com, 1 bejarano.io, 1 bejbi.net, 1 +bejo.be, 0 bejo.by, 0 bejo.cl, 0 bejo.cn, 0 @@ -16943,6 +17222,7 @@ belacapa.com.br, 1 belacine.com, 1 belafonte.co, 1 belajar.store, 1 +belajarpsikology.tk, 1 belanews.tk, 1 belani.eu, 1 belanja.express, 1 @@ -16953,6 +17233,7 @@ belarto.es, 1 belarto.pl, 1 belarus-mtz.gq, 1 belarus.tk, 1 +belarustoday.tk, 1 belarustravel.tk, 1 belastingdienst-in-beeld.nl, 0 belastingmiddeling.nl, 1 @@ -16965,6 +17246,7 @@ beleefheemstede.nl, 1 beleggingspanden-financiering.nl, 0 belezadateresa.com.br, 1 belezashopping.com.br, 1 +belf.ml, 1 belfastbounce.co.uk, 1 belfastjujitsu.tk, 1 belfastlocks.com, 1 @@ -16977,9 +17259,11 @@ belger.tk, 1 belgers.com, 1 belgia.tk, 1 belgian-investor.be, 1 +belgian-naturists.tk, 1 belgian-swimmers-united.tk, 1 belgianbirdalerts.be, 1 belgianfilipinolovers.be, 1 +belgiantennis.tk, 1 belgianwaffleironstore.com, 1 belgianwesthoekclassic.tk, 1 belgicaservices.be, 1 @@ -17048,10 +17332,12 @@ bellezanatural.life, 1 bellezzasenzalimiti.it, 1 bellflowerlactation.com, 1 bellinifashion.nl, 1 +bellissime.tk, 1 bellizas.com.br, 1 belloweb.tk, 1 bellowsafs.marketing, 1 belloy.net, 0 +bellreguard.tk, 1 bellsapplianceservice.com, 1 bellsweets.com, 1 bellthrogh.com, 1 @@ -17080,8 +17366,10 @@ belt.black, 1 beltanelabrosse.tk, 1 beltar.nl, 1 beltbuckle.pw, 1 +beltman-shipping.tk, 1 beltramifashion.be, 1 belug.de, 1 +belugadev.ml, 1 belviderepoliceil.gov, 1 belvitajoreggelt.hu, 1 belvo.com, 1 @@ -17112,6 +17400,7 @@ benceskorka.com, 1 benchling.com, 1 benchmarkmonument.com, 1 benchstoolo.com, 1 +benclarkphotography.com.au, 1 bencrump.com, 1 bendechrai.com, 0 bendemaree.com, 1 @@ -17226,6 +17515,7 @@ bensjamtracks.com, 1 bensokol.com, 1 bensonvermont.gov, 1 benstevinson.com, 1 +bensvriend.tk, 1 bent-nails.com, 1 bentertain.de, 0 benthanhtourist.com, 1 @@ -17270,6 +17560,7 @@ berasavocate.com, 1 beraten-entwickeln-steuern.de, 1 beratungswelt.dvag, 1 berbatov.ga, 1 +berbervandenberg.tk, 1 berchtesgaden-hilft.de, 1 berdan.tk, 1 berdu.id, 1 @@ -17286,6 +17577,7 @@ berete.de, 1 beretinec.hr, 1 berg.social, 1 berge.tk, 1 +bergelevrad.tk, 1 bergenfieldnj.gov, 1 bergenson.nl, 0 berger-chiro.com, 1 @@ -17299,6 +17591,7 @@ berglust-pur.de, 1 bergman-gmbh.de, 1 bergmanbeachproperties.com, 1 bergside.pl, 1 +bergsjomannen.tk, 1 bergstoneware.com, 1 bergvallsmassage.se, 1 bergwandercamp.de, 1 @@ -17336,6 +17629,7 @@ berlingeriresort.it, 1 berlintwpmi.gov, 1 berlinvt.gov, 1 berluga.com, 1 +berluskoni.tk, 1 bermatrix.hu, 1 bermeitinger.eu, 0 bermellar.tk, 1 @@ -17344,12 +17638,14 @@ bermudabathtub-retard.cf, 1 bermytraq.bm, 1 bern.bz, 1 berna.fr, 1 +bernadette.tk, 1 bernadetteanderes.ch, 0 bernama.com.my, 1 bernar.do, 1 bernard-securite-protection.fr, 1 bernardcontainers.be, 0 bernardez-photo.com, 1 +bernarditadiaz.tk, 1 bernardo.fm, 1 bernat.ch, 1 bernat.im, 1 @@ -17361,6 +17657,7 @@ bernd-leitner-fotodesign.de, 1 bernd-leitner.de, 1 berndartmueller.com, 0 bernerland.cf, 1 +bernerland.tk, 1 bernersennen.tk, 1 bernexskiclub.ch, 0 bernhard-eicher.ch, 1 @@ -17386,6 +17683,7 @@ berrycheapers.ga, 1 berryvillear.gov, 1 berrywan.com, 1 berserk.gq, 1 +berserk.tk, 1 bersierservices.ch, 0 bersotavocats.fr, 0 berst.cz, 1 @@ -17430,7 +17728,6 @@ besiktasmtsk.com, 1 besnard.me, 1 besnik.de, 0 besnik.tk, 1 -besola.de, 1 besole.ch, 1 besolov.tk, 1 besox.be, 1 @@ -17448,6 +17745,7 @@ besser-golfen.tk, 1 bessmertie.ml, 1 best-accounting-schools.com, 1 best-art-colleges.com, 1 +best-book.gq, 1 best-business-colleges.com, 1 best-cat.tk, 1 best-cats.tk, 1 @@ -17723,6 +18021,7 @@ bestnovelbooks.ga, 1 besto.cf, 1 besto.ga, 1 besto.tk, 1 +bestofbooks.gq, 1 bestofjazz.org, 1 bestoliveoils.com, 1 bestomania.tk, 1 @@ -17736,7 +18035,6 @@ bestpornclip.com, 1 bestporngirls.com, 1 bestpracticesblog.com, 1 bestproductsaudit.com, 1 -bestprofessionalchainsaw.com, 1 bestreleases.tk, 1 bestremote.io, 1 bestroofinginkansascity.com, 1 @@ -18048,6 +18346,7 @@ bettertime.jetzt, 1 betterweb.fr, 0 betterworlded.org, 1 bettflaschen.ch, 1 +bettie.tk, 1 bettingbasket.com, 1 bettingbusiness.ru, 1 bettingonaverage.com, 1 @@ -18067,7 +18366,6 @@ betwinner.cm, 1 betwinner.co.it, 1 betwinner.de.com, 1 betwinnerbahis.net, 1 -betwinnercolombia.com, 1 betwinnerfrance.net, 1 betwinnergiris.org, 1 betwinnerkenya.com, 1 @@ -18185,7 +18483,6 @@ bf-foto.eu, 1 bfam.tv, 1 bfbet365.com, 1 bfcgermania88.de, 1 -bfdz.ink, 1 bfem.gov, 1 bfh.science, 1 bfkcloud.ddns.net, 1 @@ -18235,6 +18532,7 @@ bhanaphotography.co.nz, 1 bharatanatyam-dancer.tk, 1 bharath-g.in, 1 bhat.vn, 1 +bhavansvidyamandir.tk, 1 bhaweshkumar.com, 1 bhbet365.com, 1 bhhscalhomes.com, 1 @@ -18242,6 +18540,7 @@ bhi.consulting, 1 bhitnews.tk, 1 bhitti.in, 1 bhodisoft.com, 1 +bhogavati.tk, 1 bhosted.nl, 1 bhpin.pl, 1 bhpropco.com, 1 @@ -18408,6 +18707,7 @@ big80s.tk, 1 bigalba.ga, 1 bigambitions.co.za, 1 bigart.tk, 1 +bigband.tk, 1 bigbangco.com.br, 1 bigbearkh.com, 0 bigbeats.tk, 1 @@ -18415,6 +18715,7 @@ bigbeautysecrets.tk, 1 bigbendcoffeeroasters.com, 0 bigbendguide.com, 1 bigbendsentinel.com, 1 +bigbenny.tk, 1 bigbit.tk, 1 bigbluecomputers.tk, 1 bigbluedoor.net, 1 @@ -18428,6 +18729,7 @@ bigbunce.ru, 1 bigbyte.com.np, 1 bigcakes.dk, 1 bigchance.tk, 1 +bigchris.tk, 1 bigcitylife.fr, 1 bigclassaction.com, 1 bigcomputerchair.gq, 1 @@ -18478,6 +18780,7 @@ bigshare.ga, 1 bigshopper.com, 1 bigshopper.nl, 1 bigshort.org, 1 +bigsister.tk, 1 bigskyhomebuyers.com, 1 bigskylifestylerealestate.com, 1 bigskymontanalandforsale.com, 1 @@ -18502,7 +18805,6 @@ bijou.be, 1 bijoux.com.br, 1 bijouxbrasil.com.br, 1 bijouxcherie.com, 1 -bijubox.com, 1 bijzonderekoorprojecten.nl, 1 bike-kurse.ch, 1 bike-liptov.tk, 1 @@ -18692,6 +18994,7 @@ binarydream.fi, 1 binaryevolved.com, 1 binarypuzzle.nl, 1 binarystud.io, 1 +binaryvision.tk, 1 binbin9.com, 1 binbo.cz, 1 binbo.sk, 1 @@ -18781,6 +19084,7 @@ bioexistencialismo.tk, 1 bioexploratorium.pl, 1 biofattorietoscane.it, 1 biofizpribor.ru, 1 +bioforce.tk, 1 biogaspuxin.es, 1 biogecho.ch, 0 biogecho.swiss, 0 @@ -18793,7 +19097,9 @@ biographyseriesest.ga, 1 biographywiki.net, 1 biohappiness.com, 1 bioharmony.ca, 1 +biohazardland.tk, 1 biohazardonline.tk, 1 +biohazardous.tk, 1 biohof-paas.de, 1 bioinformaticsweb.tk, 1 biointelligence-explosion.com, 1 @@ -18823,6 +19129,7 @@ biomasscore.com, 0 biomassinfo.jp, 1 biomathalliance.org, 1 biomax-mep.com.br, 1 +biomechanics.tk, 1 biomechanoid.tk, 1 biomed-hospital.ch, 1 biomed-sparepart.com, 1 @@ -18923,7 +19230,6 @@ birosuli.hu, 1 biroumumsumut.id, 1 birra.tk, 1 birrapenombra.tk, 1 -birsinghdhami.com.np, 1 birtamode.tk, 1 birthday-to-you.com, 1 birthdayapp.today, 1 @@ -18948,6 +19254,7 @@ bishopp.com.au, 1 bishopscourt-hawarden.co.uk, 1 bishoptx.com, 1 bisik.ml, 1 +bisix.tk, 1 bismantova.tk, 1 bismarck-tb.de, 1 bismi.solutions, 0 @@ -19226,6 +19533,8 @@ bizleal.com, 1 bizmerlin.com, 1 biznakenya.com, 1 biznes-bum.tk, 1 +biznes-sekrety.gq, 1 +biznes-sekrety.tk, 1 biznes.cf, 1 biznes4you.ml, 1 biznesinfo.pl, 0 @@ -19420,6 +19729,7 @@ blackmetaller.tk, 1 blackminds.tk, 1 blackmistery.tk, 1 blacknova.io, 1 +blackoutzone.tk, 1 blackpapermoon.de, 1 blackpayment.ru, 1 blackphantom.de, 1 @@ -19437,6 +19747,7 @@ blacksega.ga, 1 blacksheepsw.com, 1 blackslots.club, 1 blacksniffer.tk, 1 +blackspark.tk, 1 blackspider.tk, 1 blacksport.ru, 1 blackstonehost.com, 1 @@ -19450,6 +19761,7 @@ blackteam.org, 1 blacktemplars.tk, 1 blacktown.eu, 1 blacktownbuildingsupplies.com.au, 1 +blacktubes.cf, 1 blacktype.bet, 1 blackwaterutilities.tk, 1 blackwidow.tk, 1 @@ -19509,6 +19821,7 @@ blasorchester-runkel.de, 1 blastentertainment.co.nz, 1 blastentertainment.com.au, 1 blastersklan.com, 1 +blastertag.com.ua, 1 blastoffbuisness.in, 1 blastofftherapy.com, 1 blastoise186.co.uk, 1 @@ -19598,6 +19911,7 @@ bliker.ga, 1 blikund.swedbank.se, 1 blinblin.la, 1 blindaryproduction.tk, 1 +blindfold.cf, 1 blindfold.ga, 1 blindpigandtheacorn.com, 1 blinds-unlimited.com, 1 @@ -19644,7 +19958,6 @@ blizko.tk, 1 blizora.com, 1 blk-booking.com, 1 blk-lunch.com, 1 -blk.me, 1 blkbx.eu, 1 blkj.com, 1 bllb.ru, 0 @@ -19746,6 +20059,7 @@ bloginbeeld.nl, 1 bloginformatique.ml, 1 blogit.fi, 1 bloglogistics.com, 1 +blognews.cf, 1 blognone.com, 1 blogofant.de, 1 blogofapps.com, 1 @@ -19786,6 +20100,7 @@ bloodteam.tk, 1 bloody-hosting.tk, 1 bloody.pw, 1 bloodybiz-news.tk, 1 +bloodycraft.ml, 1 bloodyhawks.tk, 1 bloom.ec, 1 bloom.sh, 1 @@ -19811,6 +20126,7 @@ bltc.org, 1 bltc.org.uk, 1 bltdirect.com, 1 bluamoeba.com, 1 +bluavido.ml, 1 blubop.fr, 1 blubracket.com, 1 blubux.tk, 1 @@ -19874,13 +20190,13 @@ bluemountain-ms.gov, 1 bluemtnrentalmanagement.ca, 1 bluenailsstudio.nl, 1 bluenet-26.com, 1 +blueneuron.tk, 1 blueoakart.com, 1 blueoceanbrain.com, 1 blueparrotpainting.com, 1 bluepearl.tk, 1 blueperil.de, 1 bluepostbox.de, 1 -blueprintma.com, 1 blueprintrealtytn.com, 1 bluepromocode.com, 1 bluerange.io, 1 @@ -19898,6 +20214,7 @@ blueskybrokerage.tk, 1 blueskycoverage.com, 1 blueskyinsure.com, 1 blueskywebdesign.net, 1 +bluesnews.tk, 1 bluesoap.com.au, 1 bluespotmedia.ro, 1 bluestarbus.co.uk, 1 @@ -19914,6 +20231,7 @@ bluetape.tk, 1 bluetexservice.com, 1 bluetomatographics.com, 1 bluetoothlasersers.ga, 1 +bluetoothspecialist.ga, 1 bluetrout.nl, 1 bluewatertaco.com, 0 bluewavewebdesign.com, 1 @@ -19946,6 +20264,7 @@ bluntandsnakes.com, 1 blupig.net, 1 bluproducts.com.es, 1 blurringexistence.net, 1 +blurt.cf, 1 blushbymounika.com, 0 blushingweb.tk, 1 blusmurf.net, 1 @@ -20016,6 +20335,7 @@ bo4tracker.com, 1 boa.rw, 1 boam.nu, 1 boanastudio.com, 1 +boardfree.tk, 1 boardgameforces.com, 1 boardgamegeeks.de, 1 boardingschoolreview.com, 1 @@ -20030,6 +20350,7 @@ boatmanwindsor.com, 1 boatseller.org, 0 boattour.ru, 1 boattrader.com.au, 1 +bob-dylan.tk, 1 bob-fuchs.de, 1 bobaly.es, 0 bobancoamigo.com, 1 @@ -20066,6 +20387,7 @@ bobstikkers.be, 1 bobstronomie.fr, 1 bobtiell.com, 1 bobvincent.com, 1 +bocaaboca.ml, 1 bocabeats.tk, 1 bocada.com, 1 bocahkampus.com, 1 @@ -20128,9 +20450,11 @@ boensite.tk, 1 boenyc.gov, 1 boerandolphcountyga.gov, 1 boese.one, 1 +boevik.ml, 1 boew.de, 1 bof.fo, 1 bofashion.site, 1 +boffin.tk, 1 bofn.com.tr, 1 bofoxdesign.com, 0 bog8.com, 1 @@ -20219,6 +20543,7 @@ bollywoodacapellas4djs.tk, 1 bollywoodfans.tk, 1 bollywoodgk.tk, 1 bollywoodhdsongs.tk, 1 +bollywoodstrot.tk, 1 bologna-disinfestazioni.it, 1 bolognatoday.it, 1 bologoe.tk, 1 @@ -20227,6 +20552,7 @@ bololo.online, 1 bolos.tk, 1 bolosbatiente.tk, 1 bolovegna.it, 1 +bolsa.tk, 1 bolsasbellagio.com.br, 1 bolsashidrosolubles.com, 1 bolseriacarioca.com.br, 1 @@ -20257,6 +20583,7 @@ bombgirls.cf, 1 bombgirls.ga, 1 bombgirls.gq, 1 bombgirls.ml, 1 +bombiaturkiye.cf, 1 bombo.xyz, 1 bomboniere.roma.it, 1 bomenzoeker.nl, 1 @@ -20281,6 +20608,7 @@ bonami.sk, 1 bonami.tech, 1 bonanzateam.tk, 1 bonapati.tk, 1 +bonapeti.ml, 1 bonaselect.lv, 1 bonawehouse.co.uk, 1 bonbini.ga, 1 @@ -20318,6 +20646,7 @@ bongo.cat, 1 bongocams.webcam, 1 bongoland.tk, 1 bongoo.fr, 1 +bonic.tk, 1 bonifatius-friedrich.de, 1 bonita.com.br, 1 bonitadesax.com, 1 @@ -20327,6 +20656,7 @@ bonitech.co.uk, 1 bonito.pl, 1 bonjourimmo.tv, 1 bonk.pw, 1 +bonkleagues.ml, 1 bonn.digital, 1 bonnant-associes.ch, 0 bonnant-partners.ch, 0 @@ -20348,6 +20678,7 @@ bonprix.co.uk, 1 bonra.com, 1 bonsai-uk.cf, 1 bonsaiclubkengai.tk, 1 +bonsaiclubsanvi.tk, 1 bonsaimedia.nl, 1 bonsaitree.tv, 1 bonsaj.tk, 1 @@ -20360,6 +20691,7 @@ bonus-kran.tk, 1 bonus.ca, 1 bonus.net.nz, 1 bonusdigital.id, 1 +bonusov.tk, 1 bonusup.tk, 1 bonviveur.com, 1 bonvorur.is, 1 @@ -20404,14 +20736,18 @@ booknooktutor.com, 1 bookourdjs.com, 1 bookposh.com, 1 bookreport.ga, 1 +books-dowload.tk, 1 books-ru.tk, 1 books.co.ua, 1 booksales.tk, 1 +booksandcoffee.ml, 1 bookshopofindia.com, 1 booksinthefridge.at, 1 booksjar.com, 1 +bookslibrarybooks.gq, 1 booksoncamping.com, 1 bookstores.gq, 1 +bookstrap.ga, 1 booktoan.com, 1 booktook.cz, 1 bookvuz.tk, 1 @@ -20456,6 +20792,7 @@ boosman.nu, 1 boosmanpoolservice.com, 1 boost.fyi, 1 boost.ink, 1 +boostdesign.tk, 1 boostermachine.com, 1 boostgame.win, 1 boostitco.com, 1 @@ -20483,6 +20820,7 @@ borafalardeguito.com, 1 borahan.net, 1 boranco.tk, 1 borasol.tk, 1 +borba-umov.tk, 1 borche-imm.eu, 1 borchers-media.de, 1 borchers.ninja, 1 @@ -20513,6 +20851,7 @@ boredhoard.com, 1 boredhousewifeconfessions.cf, 1 boredhousewifeconfessions.ga, 1 boredhousewifeconfessions.ml, 1 +borein.cf, 1 boreo.si, 1 boresmail.ru, 1 borgmestervangen.xyz, 1 @@ -20532,6 +20871,7 @@ borjalucero.es, 1 borlangefk.tk, 1 borman.biz, 1 born2bounce.co.uk, 1 +born2dance.tk, 1 bornaandishan.ir, 1 bornandgrazed.com, 1 bornbabies.com, 1 @@ -20552,6 +20892,7 @@ borysek.net, 1 borysenko.se, 1 borza.blog, 0 borzaresearch.com, 1 +borzov.tk, 1 bosabosa.org, 0 bosanski-forum.com, 1 bosanskinovi.tk, 1 @@ -20570,6 +20911,7 @@ bosekarmelitky.cz, 1 bosengineering.be, 1 bosiquanao.vn, 1 boskant.tk, 1 +bosnia-online.tk, 1 bosonogka.tk, 1 bospiraat.tk, 1 bospor.tk, 1 @@ -20584,6 +20926,7 @@ boston-sailing.com, 1 bostonadvisors.com, 0 bostonaoii.com, 1 bostonblockchainassociation.org, 1 +bostonews.tk, 1 bostonivy.co, 1 bostonprocleaning.com, 1 bostonsportsmedicinemd.com, 1 @@ -20596,6 +20939,7 @@ botcop.de, 1 botcore.ai, 1 botdiril.com, 1 botealis.ch, 0 +botelegram.tk, 1 botezdepoveste.ro, 0 botguard.net, 1 bothive.io, 1 @@ -20603,6 +20947,7 @@ boticadiservicio.com, 1 botija.tk, 1 botika.online, 1 botikadiservisio.com, 1 +botipedia.tk, 1 botlabs.host, 1 botmaker.tk, 1 botmanager.pl, 1 @@ -20813,6 +21158,7 @@ boxintense.com, 0 boxlitepackaging.com, 0 boxmail.cn, 1 boxmania.tk, 1 +boxofficebengal.tk, 1 boxofninjas.ca, 1 boxoptions.com, 1 boxpirates.to, 1 @@ -20821,6 +21167,7 @@ boxspringbett-160x200.de, 1 boxtub.com, 1 boxturtlesaspets.com, 1 boxview.com, 1 +boyard.tk, 1 boydcorp.com, 1 boydstree.com, 1 boydwi.gov, 1 @@ -20835,6 +21182,7 @@ boyscouts.tk, 1 boyscoutschile.tk, 1 boyson.tech, 1 boysontech.com, 1 +boysorebro.tk, 1 boywife.space, 1 bozdech.eu, 1 bozdoz.com, 1 @@ -20923,6 +21271,7 @@ brain.gov, 1 brainatwork.it, 1 brainball.fr, 0 brainboxai.com, 1 +brainburger101.tk, 1 braindiamond.com, 1 braindiamonds.com, 1 brainefive.com, 1 @@ -20935,9 +21284,11 @@ brainmade.tk, 1 brainobeat.com, 1 brainotony.com, 1 brainoutlevel.com, 1 +brainrush.ga, 1 brainserve.ch, 0 brainserve.com, 0 brainserve.swiss, 0 +brainshare.tk, 1 brainshit.fr, 1 brainsik.net, 1 brainsoftict.nl, 0 @@ -20963,6 +21314,7 @@ bramfri.dk, 1 bramhallsamusements.com, 1 bramhopetails.uk, 1 bramming-fysio.dk, 1 +bramois.tk, 1 bramptonaikikai.tk, 1 bramptonscrapcarremoval.com, 1 bramsikkens.be, 1 @@ -20986,7 +21338,6 @@ brandarkitekt.com, 1 brandathon.be, 1 brandathon.nl, 1 brandbags.gr, 1 -brandbil.dk, 1 brandbook.io, 1 brandcodestyle.com, 0 brandfactory.ml, 1 @@ -21101,6 +21452,7 @@ bravelychoc.com, 1 bravenboer.tk, 1 bravewiki.tk, 1 bravga.com, 1 +bravica.tk, 1 bravo.bi, 1 bravoasociados.com, 1 bravobet.et, 1 @@ -21226,6 +21578,7 @@ brest-brest.tk, 1 brest-news.tk, 1 brest-region.tk, 1 brest24.tk, 1 +brestnews.tk, 1 brestradio.tk, 1 bret-mcgee.me.uk, 0 bretcarmichael.com, 1 @@ -21320,6 +21673,7 @@ bridal.tk, 1 bridalfabrics.ru, 1 bridalgallerysalem.com, 1 bridalshoes.com, 1 +bridalweddingshow.ga, 1 bride.vn, 1 bridebook.com, 1 bridesbouquet.ml, 1 @@ -21329,6 +21683,7 @@ bridge-online.cloud, 1 bridge-to-knowledge.nl, 1 bridge.nl, 1 bridgedigest.cf, 1 +bridgedigest.tk, 1 bridgedigestest.ga, 1 bridgedirectoutreach.com, 1 bridgefield.de, 1 @@ -21394,6 +21749,7 @@ brigidaarie.com, 1 brigittaseasons.com, 1 brigittaspromise.org, 1 brigittebutt.tk, 1 +brigittefontaine.tk, 1 brilalux.pe, 1 brilliant-minds.tk, 1 brilliantbouncyfun.co.uk, 1 @@ -21433,6 +21789,7 @@ briskbase.com, 1 bristebein.com, 1 bristolandwestonsuperbounce.com, 1 brit-thoracic.org.uk, 1 +britania.tk, 1 britanniapandi.com, 1 britelocate.com, 1 britishbee.org.uk, 1 @@ -21673,6 +22030,7 @@ brushcreekyachts.com, 1 brusselsbe.tk, 1 brusselsexpolive.ga, 1 brusselsexpoloft.ga, 1 +brusselsexpostudio.ga, 1 brusselslouisepenthouse.ga, 1 brusselslouisestudio.ga, 1 brusselsmidiapartment.ga, 1 @@ -21787,6 +22145,7 @@ bt85.cn, 0 bt9.cc, 0 btarts.com.br, 1 btc-alpha.com, 1 +btc-doge.ga, 1 btc-wallet.tk, 1 btcanalyse.com, 1 btcarg.com.ar, 1 @@ -21871,6 +22230,7 @@ buchholz-coaching.de, 1 buchwegweiser.com, 1 buck-hydro.de, 1 buck.com, 1 +bucket.tk, 1 buckethead.tk, 1 buckfast.tk, 1 buckglobal.com, 1 @@ -22061,7 +22421,9 @@ bulentcirakli.tk, 1 bulgakov.ga, 1 bulgakov.ml, 1 bulgakov.tk, 1 +bulgariablog.tk, 1 bulgarianhouse.tk, 1 +bulgariya.cf, 1 bulhost.com, 1 bulindir.tk, 1 bulkowespacerkowo.nl, 1 @@ -22123,7 +22485,6 @@ bundesvvehr.de, 1 bundlejs.com, 1 bune.city, 1 bungalowseljardin.com, 1 -bungaspa.com, 1 bungee.pw, 1 bungeeireland.tk, 1 bungotai.ga, 1 @@ -22257,6 +22618,7 @@ burtrum.me, 1 burtrum.name, 1 burtrum.org, 1 burunucu.ga, 1 +buryat-mongol.cf, 1 buryatia.tk, 1 burybox.co.uk, 1 burz.eu.com, 1 @@ -22282,6 +22644,7 @@ buscatea.com, 1 buscatodo.tk, 1 buschavdar.tk, 1 buscolu.tk, 1 +buselefante.tk, 1 buserror.cn, 1 buses.co.uk, 1 busesurbanoschile.tk, 1 @@ -22300,6 +22663,8 @@ business-explosion-fortune.tk, 1 business-garden.com, 1 business-secreti.cf, 1 business-secreti.ga, 1 +business-secreti.gq, 1 +business-secreti.tk, 1 business.facebook.com, 0 business.gov, 0 business.medbank.com.mt, 1 @@ -22474,6 +22839,7 @@ businessother.ga, 1 businessouter.ga, 1 businessparis.tk, 1 businesspart.ga, 1 +businesspartner.tk, 1 businesspassport.ga, 1 businesspatch.ga, 1 businesspeace.ga, 1 @@ -22541,6 +22907,7 @@ busnews.tk, 1 busold.ws, 1 buspark.com, 1 buspark.cz, 1 +busphotos.tk, 1 busqnet.com, 1 bussinesconsulting.tk, 1 bussinesinsurance.tk, 1 @@ -22562,6 +22929,7 @@ bustmovesest.ga, 1 busty-milf.net, 1 bustybombastic.com, 1 busuttil.org.uk, 1 +buswiki.ml, 1 busyon.cloud, 1 but-it-actually.work, 1 butarque.es, 1 @@ -22575,6 +22943,7 @@ butikvip.ru, 1 butl.nl, 1 butlaroo.com, 1 butlercountyne.gov, 1 +butlercountyogs.org, 1 butlerdisposal.com, 1 butlerfm.dk, 1 butorkarpitos.com, 0 @@ -22619,6 +22988,7 @@ buy-camera-cases.ga, 1 buy-cozaar.tk, 1 buy-decadron.tk, 1 buy-deltasone.tk, 1 +buy-essay-online.ga, 1 buy-human-hair-extension.tk, 1 buy-indocin.cf, 1 buy-jeansbiz.tk, 1 @@ -22636,6 +23006,7 @@ buy-stuffed-toys.tk, 1 buy-terramycin.gq, 1 buy-topamax.tk, 1 buy-zimulti.ga, 1 +buy-zofran.ga, 1 buyaccessible.gov, 1 buyaccutane.gq, 1 buyacompliaonline.ga, 1 @@ -22658,6 +23029,7 @@ buycbd.store, 1 buycheapandlow.tk, 1 buycheapshirts.com, 1 buycialissmx.tk, 1 +buycitalopram.ga, 1 buyclaritin.ml, 1 buycook.shop, 1 buycostarica.tk, 1 @@ -22668,6 +23040,8 @@ buydegree.info, 1 buydeltasone.ga, 1 buydeltasone.ml, 1 buydiamox.cf, 1 +buydiflucan.ga, 1 +buydiflucan.ml, 1 buydissertations.com, 1 buyeba.xyz, 1 buyebook.xyz, 1 @@ -22686,6 +23060,8 @@ buyingtvsers.ga, 1 buyingtvsest.ga, 1 buyitmalta.online, 1 buyjewel.shop, 1 +buylasix.ml, 1 +buylevaquin.tk, 1 buymetforminonline.tk, 1 buymobic.ml, 1 buymyvoip.com, 1 @@ -22708,9 +23084,11 @@ buypurenature.ga, 1 buyr.com, 1 buyretinamicro.cf, 1 buyrimonabant.cf, 1 +buyrogaine.ga, 1 buyru.net, 1 buyshine.com, 1 buyshoe.org, 1 +buysildenafil.ml, 1 buystromectol.cf, 1 buystromectol.ml, 1 buysuisse.shop, 1 @@ -22840,6 +23218,7 @@ byeskille.no, 1 byfare.com, 1 byfeldt.dk, 1 byggindrustrin.ga, 1 +byggonline.ga, 1 bygningsregistrering.dk, 1 bygogmiljoe.dk, 1 bygonegames.com, 1 @@ -23062,6 +23441,7 @@ cabeceirasdebasto.pt, 0 cabecera-descendimiento.tk, 1 cabelgrano.tk, 1 cabezadeframontanos.tk, 1 +cabezadelcaballo.tk, 1 cabina-photobooth.ro, 1 cabincrewcareercenter.com, 1 cabineritten.nl, 1 @@ -23111,6 +23491,7 @@ cactusarium.tk, 1 cactusdentrepair.com, 1 cactusgreen.com.br, 1 cactuspedia.cf, 1 +cactuspedia.ga, 1 cactuspedia.gq, 1 cactuspedia.ml, 1 cad-noerdlingen.de, 1 @@ -23135,6 +23516,7 @@ cadetsge.ch, 0 cadflow.pt, 1 cadiar.tk, 1 cadici.ga, 1 +cadifit.ga, 1 cadillacfairview.com, 1 cadillacitalia.it, 1 cadiskitchen.ca, 1 @@ -23199,6 +23581,7 @@ cafelandia.net, 1 cafemadrid.tk, 1 cafemandala.hu, 0 cafemodi.cz, 0 +cafenix.tk, 1 cafenoorderzon.tk, 1 cafeobscura.nl, 1 cafepress.com.au, 1 @@ -23313,6 +23696,7 @@ calcedge.com, 1 calcettomania.com, 1 calcinacci.com, 1 calcinacci.roma.it, 1 +calcioragusa.tk, 1 calconcontractors.com, 1 calcoolator.pl, 1 calcsoft.tk, 1 @@ -23512,6 +23896,7 @@ camerahire.com.au, 1 cameraman.tk, 1 cameramark.nl, 1 camerashot.tk, 1 +cameraslyphotography.tk, 1 camerata.com, 1 cameraviva.com.br, 1 cameria.tk, 1 @@ -23536,7 +23921,6 @@ camilaporto.tk, 1 camilat.tk, 1 camileonline.tk, 1 camilia.io, 1 -camilomodzz.net, 1 caminoneocatecumenal.tk, 1 caminreal.tk, 1 camionerosdecoslada.tk, 1 @@ -23730,6 +24114,7 @@ candlelightediting.com, 1 candlemakingexplained.com, 1 candlepro.cf, 1 candlevn.com, 1 +candorhealthed.org, 1 candy-pop.tk, 1 candyalexa.net, 1 candyboulevard.tk, 1 @@ -23885,6 +24270,7 @@ capitalgyan.com, 1 capitalibre.com, 1 capitalism.party, 1 capitalism.rip, 1 +capitalist.cf, 1 capitaliz.io, 1 capitalmarkets.online, 1 capitalmatters.cf, 1 @@ -23971,6 +24357,7 @@ car-forums.com, 1 car-keys.tk, 1 car-market.tk, 1 car-seats-store.ga, 1 +car-speed.tk, 1 car-touch.tk, 1 car.info, 1 car24.de, 1 @@ -24051,6 +24438,7 @@ cardexaminerest.ga, 1 cardexchangesolutions.com, 0 cardiaccane.com, 1 cardiagnose.nl, 1 +cardiagnostics.tk, 1 cardinauto.fr, 1 cardingforum.co, 1 cardington.tk, 1 @@ -24108,6 +24496,7 @@ carekleen.com.au, 1 carelancerportfolio.ga, 1 careloco.tk, 1 caremad.io, 1 +carepan.ga, 1 carepassport.com, 1 caresco.nl, 1 carescorp.com, 1 @@ -24139,6 +24528,7 @@ caribbeancinemas.com, 1 caribbeanexams.com, 1 caribbeansolutionslab.com, 1 caribeeficiente.com.co, 1 +caribuku.tk, 1 caricature.fr, 1 carien.eu, 0 cariki.gq, 1 @@ -24215,6 +24605,7 @@ carls-fallout-4-guide.com, 1 carlsbadluxuryhotels.ga, 1 carlssoninnovation.se, 1 carltonelitetravel.ga, 1 +carltontownfc.tk, 1 carmageddon.tk, 1 carmarthenradiocontrolledcarclub.tk, 1 carmela.tk, 1 @@ -24258,11 +24649,13 @@ caroli.com, 1 caroli.info, 1 caroli.name, 1 caroli.net, 1 +carolicious.tk, 1 carolina.cz, 1 carolinacybercenter.com, 1 carolinaharboe.baby, 1 carolinaharboe.com, 1 carolinalamujerdehoy.com.gt, 1 +carolinaoliveira.tk, 1 carolinasaddictionfellows.com, 1 carolinavarletaarriagada.tk, 1 carolinavein.com, 1 @@ -24277,6 +24670,7 @@ carollmed.ro, 1 carolmolinari.tk, 1 carontetourist.hr, 1 carontetouristisoleminori.it, 1 +carousel.ga, 1 carouselbuses.co.uk, 1 carouselinsights.com, 1 carp-world.tk, 1 @@ -24300,6 +24694,8 @@ carplus.es, 1 carplus.net, 1 carprice.auction, 1 carpticon.tk, 1 +carpuya.ga, 1 +carrabiners.tk, 1 carre-jardin.com, 1 carre-lutz.com, 1 carrecovery.co.uk, 1 @@ -24328,6 +24724,7 @@ carrozziere.roma.it, 1 carry.luxe, 1 carryvanbruggen.tk, 1 cars4salecy.com, 1 +carsales.com.ng, 1 carseatchecks.ca, 1 carshippingcarriers.com, 1 carsinsuranceis.com, 1 @@ -24674,6 +25071,7 @@ casinorobots.com, 1 casinosblockchain.io, 1 casinospesialisten.net, 1 casinospilnu.dk, 1 +casinotokelau.tk, 1 casinotopplistan.com, 1 casinotopplisten.com, 1 casinotopsonline.com, 1 @@ -24715,6 +25113,7 @@ castan-dichtungstechnik.de, 1 castaneatownshippa.gov, 1 castaneda.tk, 1 castella.tk, 1 +castellet.tk, 1 castelletto.tk, 1 casteloinformatica.com.br, 1 castelsardo.tk, 1 @@ -24767,6 +25166,7 @@ catalog-lingerie.tk, 1 catalog-lingeries.tk, 1 catalog-serverov.ml, 1 catalog-serverov.tk, 1 +catalog-underwear.tk, 1 catalog.beer, 1 catalogador.ml, 1 catalogcomputerhardware.tk, 1 @@ -25000,7 +25400,6 @@ cbw.sh, 1 cbxp.in, 1 cby.im, 0 cc-customer.de, 1 -cc.ag, 1 cc.edu.rs, 1 cc.hn, 1 cc00228.com, 0 @@ -25078,7 +25477,6 @@ ccsource.org, 1 ccsrv.eu, 1 ccsys.com, 1 cctf-m.com, 0 -cctld.com, 1 cctv-camera.cf, 1 cctv-supraveghere.ro, 1 cctv-systems.tk, 1 @@ -25901,7 +26299,7 @@ chartkick.com, 1 chartlands.org, 1 chartpixel.com, 1 chartsy.de, 1 -charuni.ru, 0 +charuni.ru, 1 charuru.moe, 1 chasafilli.ch, 1 chascrazycreations.com, 1 @@ -26039,6 +26437,7 @@ cheapmessengersest.cf, 1 cheapmessengersest.ga, 1 cheapmixesers.ga, 1 cheapnolvadex.ml, 1 +cheapsmall.tk, 1 cheapspecialistsers.ga, 1 cheapspecialistsest.ga, 1 cheapsshop.tk, 1 @@ -26099,6 +26498,7 @@ checkmarx.com, 1 checkme.gq, 1 checkme.ml, 1 checkmedia.org, 1 +checkmin.cf, 1 checkmyessay.com, 1 checkmyhttps.net, 1 checkmypsoriasis.com, 1 @@ -26152,11 +26552,13 @@ chelema.xyz, 1 chellame.fr, 1 chellescourt.tk, 1 chelmsz.ml, 1 +chelpogoda.tk, 1 chelsea98.com, 1 chelseafs.co.uk, 1 chelseahgaul.com, 1 cheltenhambouncycastles.co.uk, 1 cheltik.ru, 1 +chelyaba.tk, 1 chem.digital, 1 chema.ga, 1 chemgenes.com, 1 @@ -26317,6 +26719,7 @@ chickencoop.ml, 1 chickenfarms.tk, 1 chicki.tk, 1 chickteam.tk, 1 +chicofc.tk, 1 chicospanico.tk, 1 chicurrichi.com, 1 chief.tools, 1 @@ -26396,6 +26799,7 @@ chimpanzee.cf, 1 chimpanzee.net, 1 chimpmatic.com, 1 china-midas.net, 1 +china-online-news.tk, 1 china-week.com, 1 chinabgj.com, 1 chinablows.com, 1 @@ -26534,6 +26938,7 @@ chocolatier-tristan.ch, 0 chocolatos.tk, 1 chocolay.gov, 1 chocolytech.info, 1 +chocope-peru.tk, 1 chocorp.net, 1 chocudan.tk, 1 chodaczek.pl, 1 @@ -26763,6 +27168,7 @@ chriswiggin.ml, 1 chriswilding.co.uk, 1 chrisx.xyz, 1 chriszarb.tk, 1 +chrixonline.tk, 1 chromaitaly.com, 1 chromaphile.tk, 1 chromarea.fr, 1 @@ -26879,6 +27285,7 @@ chuspace.com, 1 chutisant.tk, 1 chuvash-republic.tk, 1 chuvash.tk, 1 +chuvashia.tk, 1 chuvashiya.tk, 1 chuyentien247.com.vn, 1 chuying.ltd, 0 @@ -26997,6 +27404,7 @@ cinegore.tk, 1 cinelandia.tk, 1 cinema-rulem.tk, 1 cinemaclub.co, 1 +cinemadoma.tk, 1 cinemafrix.cf, 1 cinemaperto.tk, 1 cinemarxism.com, 1 @@ -27307,6 +27715,7 @@ cityvision.nz, 1 cityvision.org.nz, 1 citywalkr.com, 1 citywidealarms.com, 1 +citywisdom.tk, 1 cityworksonline.com, 1 ciubotaru.tk, 1 ciuciucadou.ro, 1 @@ -27427,8 +27836,10 @@ clan-behh.tk, 1 clan-destin.tk, 1 clan-doom.tk, 1 clan-finaldestination.tk, 1 +clan-hosting.tk, 1 clan-ogm.tk, 1 clan-ready4war.tk, 1 +clan-wars.ml, 1 clan-ww.com, 1 clan-zone.dk, 1 clancrazy.tk, 1 @@ -27549,6 +27960,7 @@ claudiney.eti.br, 1 claudiney.id, 1 claudiney.info, 1 claudiohdz.com, 1 +claumarservice.com, 1 claus-bahr.de, 1 claus-cremer.tk, 1 clauseriksen.net, 1 @@ -27740,6 +28152,7 @@ clickcollect.boutique, 1 clickdebateest.ga, 1 clickdocs.ca, 1 clickenergy.com.au, 1 +clickforum.cf, 1 clickhost.com.au, 1 clickhouse.tech, 1 clickinfo.tk, 1 @@ -27749,10 +28162,12 @@ clickkon.ml, 1 clickmeeting.com, 1 clickopenhuis.com, 1 clickpeak.digital, 1 +clickphobia.ga, 1 clickpool-server.de, 1 clickpress.tk, 1 clickrecados.tk, 1 clickrising.com, 1 +clicks.co.za, 1 clicks24.cf, 1 clicksengage.com, 1 clickstart.ml, 1 @@ -27782,6 +28197,7 @@ climatechange2021.org, 1 climatecrafters.com, 1 climateinteractive.org, 1 climatejustice.nyc, 1 +climatgate.tk, 1 climatizzatore.it, 0 climatizzatore.roma.it, 1 climatizzatoriprezzi.it, 1 @@ -27959,6 +28375,7 @@ cloudimproved.com, 1 cloudimprovedtest.com, 1 cloudindex.io, 1 cloudinfinit.com, 1 +cloudix.cf, 1 cloudlandmark.com, 1 cloudlessdreams.com, 0 cloudlfront.net, 1 @@ -27980,7 +28397,6 @@ cloudone.co.il, 1 cloudoptimizedsmb.com, 1 cloudoptimus.com, 1 cloudpagesforwork.com, 1 -cloudpath.global, 1 cloudpengu.in, 1 cloudpipes.com, 1 cloudplan.nl, 1 @@ -28070,6 +28486,8 @@ club-climate.com, 1 club-creole.com, 1 club-dieta.ru, 1 club-duomo.com, 1 +club-eclipse.tk, 1 +club-leondehuanuco.tk, 1 club-night.tk, 1 club-premiere.com, 1 club-reduc.com, 1 @@ -28080,9 +28498,11 @@ club.zj.cn, 1 club10x.com, 1 clubanimal.cl, 1 clubapk.com, 1 +clubatleticonacionalpotosi.tk, 1 clubbers-comtois.tk, 1 clubcorsavenezuela.com, 0 clubcupido.com.br, 1 +clubdeportivocieza.tk, 1 clubdeslecteurs.net, 1 clubeamizade.com, 1 clubeamizade.com.pt, 1 @@ -28099,6 +28519,7 @@ clubeighteen.tk, 1 clubempleos.com, 1 clubeohara.com, 1 cluberiks.cf, 1 +cluberiks.ga, 1 clubetravel.biz, 1 clubetravel.com, 1 clubetravel.com.br, 1 @@ -28131,6 +28552,7 @@ clubon.space, 1 clubpeugeot405.tk, 1 clubserveers.ga, 1 clubsuccessjapan.com, 1 +clubtamarugal.tk, 1 clubtecknocore.tk, 1 clubtraining.com.au, 1 clubtravel.com.pt, 1 @@ -28237,6 +28659,7 @@ cngvp.org, 1 cni-certing.it, 1 cni.net.id, 1 cnil.fr, 1 +cnki.com, 1 cnlic.com, 1 cnmi.gov, 1 cnmilaw.gov, 1 @@ -28252,10 +28675,8 @@ cntraveller.com, 1 cnvt.fr, 1 co-founder-stuttgart.de, 1 co-yutaka.com, 1 -co.fo, 1 co.lu, 1 co.search.yahoo.com, 0 -co.td, 1 co2eco.cn, 0 co2fr.ee, 0 coach-enligne.fr, 1 @@ -28413,6 +28834,7 @@ codegirl.tk, 1 codehangar.io, 1 codeheroes.fr, 1 codehupy.org.py, 1 +codeidea.ga, 1 codein.ca, 0 codeine.co.uk, 1 codeit.guru, 1 @@ -28451,6 +28873,7 @@ codersatlas.co, 1 codersatlas.xyz, 1 coderus.com, 1 codes.pk, 1 +codesgroup.tk, 1 codeslaw.com, 1 codesplain.in, 1 codesport.io, 1 @@ -28617,6 +29040,7 @@ cokisiregar.com, 1 cokomi.com, 1 col-head.com, 1 col.la, 0 +cola-host.tk, 1 colaborame.tk, 1 colaborativa.tv, 1 colabug.com, 1 @@ -28741,6 +29165,7 @@ collegestationhomes.com, 1 collegium-musicum-bocholt.de, 0 collepietra.it, 1 collerosso.com, 1 +colley.tk, 1 collierlunaire.fr, 1 colliervotes.gov, 1 collin.xyz, 1 @@ -28773,7 +29198,6 @@ colombian.cam, 1 colombian.dating, 1 colombianas.webcam, 1 colombiasobreruedas.com, 1 -colombiawebs.com, 1 colombyinai.ga, 1 coloniae.de, 1 colonialbeachva.gov, 1 @@ -28844,7 +29268,6 @@ colyakoomusic.com, 1 com-b.vn, 1 com-news.io, 1 com.cc, 1 -com.fo, 1 comactor.com, 1 comactor.fr, 1 comagexinvoice.com, 1 @@ -28915,7 +29338,6 @@ comfy.cafe, 0 comfy.gay, 1 comfypc.com, 1 comhack.com, 1 -comic-kunstbilder.de, 1 comical.ml, 1 comicsans.tk, 1 comicsanshouse.ddns.net, 1 @@ -28937,7 +29359,6 @@ comitesaustria.at, 0 comlipa.gq, 1 comm.cx, 1 commagere.com, 1 -commander-in-she.com, 1 commanderx.cf, 1 commanderx.ml, 1 commanderx.tk, 1 @@ -28986,6 +29407,7 @@ communicate2lead.com, 1 communication-services.tk, 1 communiques.info, 1 communiquons.org, 1 +communist-party.tk, 1 community-pro.de, 1 community-pro.net, 1 community-services.cz, 0 @@ -29105,6 +29527,7 @@ complt.xyz, 1 complyadvantage.com, 1 componentcore.com, 1 composersforum.org, 1 +compositedevtec.tk, 1 compostelle-bouddha.fr, 1 compoundingrxusa.com, 1 compra-deuna.com, 1 @@ -29137,6 +29560,7 @@ compucorner.tk, 1 compudoc.tk, 1 compufix.ml, 1 compunetwor.com, 1 +compusrit.tk, 1 compustore.pe, 1 compustuff.tk, 1 computec.ch, 1 @@ -29180,6 +29604,7 @@ computingessentials.tk, 1 computingsociety.co.uk, 1 computingwarehouse.com, 1 computop.com, 1 +computron.ga, 1 comquadro.com.br, 1 comradesofmight.tk, 1 comswp.com, 1 @@ -29204,6 +29629,7 @@ comw.cc, 1 comyuno.com, 0 con-con.nl, 1 conall.io, 1 +conalpedis.tk, 1 conatus.ai, 1 conbida.co, 1 conbrio.tk, 1 @@ -29217,7 +29643,6 @@ conceptcompany.com, 1 conceptec.de, 1 conceptground.com, 1 concern.cloud, 1 -concern.co.nz, 1 concert.ga, 1 concert.solutions, 1 concertcrushers.ga, 1 @@ -29316,6 +29741,7 @@ confirmit.ca, 1 confirmit.com, 1 confirmit.com.au, 1 confirmit.de, 0 +confiscate.ga, 1 confiscation.tk, 1 confiseriedubonheur.com, 1 confiwall.de, 1 @@ -29460,6 +29886,7 @@ consiliumvitae.ch, 1 consill.com, 1 consoe.com, 1 console.rest, 1 +consoleuniverse.tk, 1 consolezone.tk, 1 consommateuraverti.com, 1 consommation-locale.fr, 1 @@ -29495,6 +29922,7 @@ construction-group.ga, 1 construction-student.co.uk, 1 constructioncleanupinfortworth.com, 1 constructionstudent.uk, 1 +construred.tk, 1 construyetuempresa.com, 1 consul-coton.ru, 1 consul.io, 0 @@ -29631,7 +30059,6 @@ conv2pdf.com, 1 convent-mensing.de, 1 convergence.fi, 1 convergencela.com, 1 -convergent.tn, 1 convergnce.com, 1 conversationexchange.com, 1 converser.tk, 1 @@ -29772,6 +30199,7 @@ copyshop-witten.de, 1 copyshrug.ca, 1 copysyncest.ga, 1 copytext.ml, 1 +copywriting-on-demand.tk, 1 coqiptv.com, 1 coral-study.eu, 1 coralreef.blue, 1 @@ -29869,6 +30297,7 @@ cornerstonenorthwest.com, 1 corniche.com, 1 corningcu.org, 1 cornishcamels.com, 0 +cornitek.tk, 1 cornmachine.com, 1 cornodo.com, 1 cornwallct.gov, 1 @@ -29937,6 +30366,7 @@ corridorsands.com.au, 1 corriere.roma.it, 1 corrigan.xyz, 1 corruptcatz.com, 1 +corruptos.tk, 1 cors-proxy.cf, 1 cors.one, 1 corsa-b.uk, 1 @@ -30005,7 +30435,6 @@ cosmetify.com, 1 cosmetiqua.com, 1 cosmetiquesvegans.com, 1 cosmetix-ndsf.fr, 1 -cosmetology.co.za, 1 cosmiatria.pe, 1 cosmic-relations.co.jp, 1 cosmic-service.com, 1 @@ -30020,7 +30449,9 @@ cosmohit.ua, 1 cosmohosting.site, 1 cosmoiler.com, 1 cosmonaut.tk, 1 +cosmos-indirekt.de, 1 cosmos-ink.net, 1 +cosmos-software.tk, 1 cosmoschaos.net, 1 cosmosdogbakery.com, 1 cosmosearch-azerbaijan.tk, 1 @@ -30290,6 +30721,7 @@ cpu.biz.tr, 1 cpu.wiki, 1 cpucheu.com, 1 cpufanshop.ga, 1 +cpy.pt, 1 cqn.ch, 0 cqoicebordel.tk, 1 cqradio.tk, 1 @@ -30349,9 +30781,11 @@ craftmeow.com, 1 craftmeow.support, 1 craftngo.hu, 1 craftottawa.ca, 1 +craftshiponline.tk, 1 craftsmandruggets.com, 1 craftsmany.net, 1 craftsofcleo.com, 1 +crafttalk.tk, 1 craftwmcp.xyz, 1 craftychameleonbar.com, 1 craftydev.design, 1 @@ -30362,6 +30796,7 @@ crag.com.tw, 1 craig-mullins.com, 1 craigary.net, 1 craigbates.co.uk, 0 +craigdavis.ga, 1 craigfrancis.co.uk, 1 craigheadcountyar.gov, 1 craigleclaireteam.com, 1 @@ -30429,6 +30864,7 @@ crazycube.tk, 1 crazydude.tk, 1 crazyfly.tk, 1 crazyfrog.com, 1 +crazygifts.cf, 1 crazyhost.ga, 1 crazymadness.tk, 1 crazymarvin.com, 1 @@ -30485,9 +30921,9 @@ create-ls.jp, 1 createbeauty.tk, 1 createbeing.com, 1 createcode.pt, 1 -createconline.de, 1 createcos.com, 1 createcpanama.com, 1 +creategyx.ga, 1 createwithcynthia.com, 1 creati.me, 1 creatiefcoaching.nl, 1 @@ -30520,6 +30956,9 @@ creativelaw.eu, 1 creativeliquid.com, 1 creativelysustainable.com, 1 creativemindslms.tk, 1 +creativephysics.ml, 1 +creativesectors.tk, 1 +creativesmm.com.ua, 1 creativestories.me, 1 creativetechsolution.in, 1 creativeweb.biz, 1 @@ -30543,9 +30982,11 @@ credello.com, 1 credentsys.cloud, 0 credex.bg, 1 credit-10.com, 1 +credit-default-swaps.tk, 1 creditcard.run, 1 creditcardgenerator.money, 1 credithelpinfo.com, 1 +creditif.tk, 1 creditjunkie.com, 1 creditkarma.ca, 1 creditkarma.com, 1 @@ -30554,6 +30995,7 @@ credito360.pt, 1 creditoconsolidado.pt, 1 creditopessoal.pt, 1 creditor.ga, 1 +creditor.tk, 1 creditorapido.pt, 1 creditos-rapidos.com, 1 creditozen.es, 0 @@ -30577,7 +31019,6 @@ crem.in, 0 cremalleradenuria.tk, 1 cremedigital.com, 1 cremepassion.de, 1 -crena.ch, 1 crepa.ch, 0 crepusculofansmexico.tk, 1 crescent-moon.tk, 1 @@ -30661,6 +31102,7 @@ criptoinvest.pt, 1 criptomonedas365.com, 1 criptomonedasworld.com, 1 criptomonedaz.com, 1 +criptomoneylite.tk, 1 cris2006.com, 1 crisantacademy.com, 1 crisisactual.com, 1 @@ -30679,10 +31121,12 @@ crisssmanmix.tk, 1 cristalerencontres.fr, 1 cristaleslitios.com.mx, 1 cristalgema.ga, 1 +cristals.ga, 1 cristaltercos.com.br, 1 cristau.org, 1 cristiandumitru.tk, 1 cristianhares.com, 1 +cristianonascimento.ml, 1 cristianuibar.com, 1 cristiengoller.ga, 1 cristiengoller.gq, 1 @@ -30700,6 +31144,7 @@ critical.software, 1 criticalcaredvm.com, 1 criticalculture.gq, 1 criticalculture.ml, 1 +criticalgenesis.tk, 1 criticalmention.com, 1 criticalrace.org, 1 criticalsurveys.co.uk, 1 @@ -30757,6 +31202,7 @@ cropwizarders.ga, 1 croquetgolf.tk, 1 croquis.tk, 1 crosbug.com, 1 +cross-culture.tk, 1 cross-games.tk, 1 cross-led-sign.com, 1 cross-x.com, 1 @@ -30764,6 +31210,7 @@ crosscom.ch, 1 crossconnected.co.uk, 1 crossdresscontest.com, 1 crossedwires.net, 1 +crossfiremovies.tk, 1 crossfitbesafe.com, 1 crossfitblau.com, 1 crossformer.com, 1 @@ -30992,6 +31439,7 @@ crystalsky.tk, 1 crystalspringsms.gov, 1 crystone.me, 1 cryz.ru, 1 +cs-algeria.tk, 1 cs-bot.tk, 1 cs-colorscreed-betongulve.dk, 1 cs-escom.tk, 1 @@ -31099,6 +31547,7 @@ csrtech.com, 1 csru.net, 1 css-krebs.ch, 1 css-tricks.com, 1 +css-tricks.tk, 1 css.direct, 1 cssai.eu, 1 cssaunion.com, 1 @@ -31207,6 +31656,7 @@ cubic-lynx.com, 1 cubiclands.com, 1 cubicle.tk, 1 cubiest.com, 1 +cubigames.tk, 1 cubikus.fr, 1 cubile.xyz, 1 cubing.net, 1 @@ -31218,6 +31668,7 @@ cubsbestteaminbaseball.com, 1 cubsradio.tk, 1 cubyhome.com, 1 cucabot.tk, 1 +cucaracha.tk, 1 cuchichi.es, 1 cuckold-secrets.tk, 1 cuckoldjungle.com, 1 @@ -31256,9 +31707,11 @@ cultrix.co.uk, 1 cultrixdigital.co.uk, 1 culturaanarquista.tk, 1 culturaarabe.tk, 1 +culturabrasilia.tk, 1 culturaeuropea.tk, 1 culturahack.tk, 1 culturalmaninhos.tk, 1 +culturalparadiso.tk, 1 culturama.tk, 1 cultureetsoft.tk, 1 culturehatti.com, 1 @@ -31408,6 +31861,7 @@ cusfit.com, 1 cusgpwoerden.nl, 1 cushlaofgullion.com, 1 cushytushiediapers.com, 1 +custer.tk, 1 custercounty-co.gov, 1 custercountymt.gov, 1 custercountymttransit.gov, 1 @@ -31438,6 +31892,7 @@ customizeyourshower.com, 0 custompac.co.uk, 1 custompapers.com, 1 custompoolsbydesign.com, 1 +customradio.tk, 1 customromlist.com, 1 customshort.link, 1 customsportsocks.com, 1 @@ -31459,7 +31914,9 @@ cutephil.com, 1 cuthe.re, 1 cuties.chat, 1 cutimbo.ovh, 1 +cutlinks.ml, 1 cutme.fr, 1 +cutmylink.gq, 1 cutner.co, 1 cutout.ml, 1 cutpasteprofit.tk, 1 @@ -31510,6 +31967,7 @@ cvtemplatemaster.com, 1 cvv.cn, 1 cw-bw.de, 0 cw.center, 1 +cwaclub.tk, 1 cwallpapersheb.tk, 1 cwaurora.top, 1 cwbc-bearing.com, 1 @@ -31604,7 +32062,9 @@ cyberfebrio.tk, 1 cyberforensics.com, 1 cyberforge.ml, 1 cyberfruit.tk, 1 +cybergame-host.tk, 1 cybergordon.com, 1 +cybergroup.cf, 1 cyberguerrilla.org, 1 cyberhazard.eu, 0 cyberhelden.nl, 1 @@ -31619,6 +32079,7 @@ cyberlin.org, 1 cyberlocos.tk, 1 cyberlounge.ga, 1 cybermall.ga, 1 +cybermaniac.tk, 1 cyberme.sh, 1 cybermeldpunt.nl, 1 cybermonday.org.il, 1 @@ -31629,15 +32090,18 @@ cybernode.host, 1 cyberogism.com, 1 cyberon.it, 1 cyberoptic.de, 1 +cyberpanel.cf, 1 cyberpanelsetup.com, 1 cyberpathogen.me, 1 cyberpcforum.com, 1 cyberpedia.wiki, 1 +cyberphoenix.tk, 1 cyberplus.net.id, 1 cyberpro.co.uk, 1 cyberproducciones.tk, 1 cyberpubonline.com, 1 cyberpunk.guru, 1 +cyberquest.cf, 1 cyberregister.nl, 1 cyberregister.org, 1 cyberrepair.de, 1 @@ -31767,6 +32231,7 @@ cyrusdaily.tk, 1 cysi.in, 1 cysmo.de, 1 cyson.tech, 1 +cytat.tk, 1 cytech.com.tr, 1 cytegic-update-packages.com, 1 cythereaxxx.com, 1 @@ -31813,7 +32278,6 @@ d-consultant.ru, 1 d-day.tk, 1 d-eisenbahn.com, 1 d-ku.de, 1 -d-loop.de, 1 d-macindustries.com, 1 d-parts.de, 1 d-parts24.de, 1 @@ -31975,6 +32439,7 @@ dadosch.de, 0 dadrian.io, 1 daduke.org, 1 daemen.org, 1 +daemon-hentai.tk, 1 daemon.xin, 1 daemonslayer.net, 1 daemwool.ch, 1 @@ -32238,6 +32703,7 @@ daniel-baumann.ch, 1 daniel-beilharz.com, 1 daniel-beilharz.de, 1 daniel-cholewa.de, 1 +daniel-leblanc.tk, 1 daniel-milnes.co.uk, 1 daniel-milnes.uk, 1 daniel-ruf.de, 1 @@ -32355,6 +32821,7 @@ dannycairns.com, 1 dannydiamondsconcrete.com, 1 dannygaidateraelgar.com, 1 dannyhoekstra.tk, 1 +dannyjota.tk, 1 dannymoran.com, 1 dannyoficial.tk, 1 dannyroh.de, 1 @@ -32410,6 +32877,7 @@ danwolff.se, 1 danya.ml, 1 danyabanya.com, 1 danzavila.com, 1 +danzka.tk, 1 dao.spb.su, 1 daofficers.com, 1 daoplattunhien.com.vn, 1 @@ -32456,11 +32924,13 @@ darioturchetti.me, 1 dariusheghbali.tk, 1 darix.tk, 1 dark-archive.com, 1 +dark-crystal.tk, 1 dark-dreams.tk, 1 dark-infection.de, 1 dark-lake.com, 1 dark-legion.tk, 1 dark-nova.me, 1 +dark-nova.tk, 1 dark-programs.com, 1 dark-vision.cz, 1 dark-wolf.tk, 1 @@ -32570,6 +33040,7 @@ darylwilcher.tk, 1 das-efx.tk, 1 das-forum24.de, 1 das-mediale-haus.de, 1 +das-pna.ao, 1 das-sommercamp.de, 1 dasabomobil.de, 1 dasble.com, 1 @@ -32649,6 +33120,7 @@ datacenternews.us, 1 datacentrenews.eu, 1 datacloud.gq, 1 datacommissioner.gov.au, 0 +datacool.tk, 1 datadoghq.com, 1 datadorf.de, 1 datadraugen.no, 1 @@ -32705,6 +33177,7 @@ datatube.tk, 1 datatypes.net, 1 datavizable.org, 1 datawar.tk, 1 +datawow.io, 1 datax-cloud.de, 1 dataxl.net, 1 datazoo.com, 1 @@ -32724,7 +33197,6 @@ datenreiter.gq, 1 datenreiter.org, 1 datenretter.tk, 1 datensalat.info, 1 -datenschutz-consult.de, 1 datenschutz-gruenwald.de, 1 datenschutz-individuell.de, 1 datenschutz-isny.de, 1 @@ -33016,6 +33488,7 @@ dbmtv.news, 1 dbnext.de, 1 dboptical.com, 1 dborcard.com, 0 +dbox.ga, 1 dbplanview.com, 1 dbq.com, 1 dbradley771.com, 1 @@ -33044,6 +33517,7 @@ dc585.info, 1 dc7342.im, 1 dcain.me, 1 dcards.in.th, 1 +dcareer.tk, 1 dcave.net, 1 dcbouncycastles.co.uk, 1 dcc.cat, 1 @@ -33125,6 +33599,7 @@ ddog-gov.com, 1 ddos-mitigation.co.uk, 1 ddos-mitigation.info, 1 ddoscyber.com, 1 +ddosguard.cf, 1 ddosolitary.org, 1 ddproxy.cf, 1 ddracepro.net, 1 @@ -33171,6 +33646,7 @@ deaf.dating, 1 deaf.eu.org, 1 deafsound.tk, 1 deaktualisierung.org, 0 +deal-runners.cf, 1 deal45.ga, 1 dealandgo.co.il, 1 dealapp.nl, 1 @@ -33231,6 +33707,7 @@ debarrasnanterre.com, 1 debashishsahu.com, 1 debatereport.com, 1 debattinnlegg.no, 1 +debauchery.ml, 1 debbiesblog.nl, 1 debbiessieraden.tk, 1 debedstedanskecasinoer.dk, 1 @@ -33351,6 +33828,7 @@ dedg3.com, 1 dedge.org, 1 dedicatedtowomenobgyn.com, 1 dedirten.com, 0 +dedmoroz.ga, 1 dedmoroz.gq, 1 dedmorozrzn.ru, 0 dedoho.pw, 1 @@ -33453,6 +33931,7 @@ defiant.com, 1 defietsambassade.be, 1 defietsambassade.gent, 1 defietsambassadegent.be, 1 +defifa.ga, 1 defiler.tk, 1 defimetier.fr, 1 define-atheism.com, 1 @@ -33538,6 +34017,7 @@ deinewebsite.de, 1 deinfoto.ch, 1 deinjoghurt.de, 1 deinsparen24.de, 1 +deionized.ga, 1 deitec-global.com, 1 deitti.net, 1 deja-lu.de, 1 @@ -33612,6 +34092,7 @@ delifoodbar24.com, 1 delijan24.ir, 1 delika.io, 1 delikom.de, 1 +delio.tk, 1 delirecetas.com, 1 delirio.tk, 1 delistudio.cf, 1 @@ -33646,6 +34127,7 @@ delprete.me, 1 delta-data.ch, 1 delta-games.tk, 1 delta-hawks.tk, 1 +delta-host.ml, 1 delta-market.ru, 1 delta-wings.net, 1 delta.ai, 1 @@ -33717,12 +34199,14 @@ demilovatomexico.tk, 1 demine.freeboxos.fr, 1 deminormaastricht.tk, 1 demiranda.com, 1 +demirdokum.tk, 1 demisch-tim.de, 1 demischtim.de, 1 demish.tk, 1 demmer.one, 1 demo.sb, 1 demo.swedbank.se, 1 +democracy-news.tk, 1 democracychronicles.com, 1 democracydirect.com, 1 democracyineurope.eu, 1 @@ -33733,6 +34217,7 @@ demodoka.ddns.net, 1 demografia.tk, 1 demolandia.net, 1 demomanca.com, 1 +demonbuster.tk, 1 demondms.com, 1 demoniak.ch, 0 demonicademorte.tk, 1 @@ -33744,6 +34229,7 @@ demonstrably.live, 1 demontage.tk, 1 demonwav.com, 1 demonwolfdev.com, 1 +demopanel.tk, 1 demostweb.ga, 1 demotennis.com, 1 demotivatorbi.ru, 1 @@ -33772,6 +34258,8 @@ denbkh.ru, 0 dencel.lv, 1 dendi.tk, 1 dendibanget.tk, 1 +denegmnogo.tk, 1 +denejki.tk, 1 denet.pro, 1 dengg.name, 1 dengisam.ru, 1 @@ -33926,6 +34414,7 @@ depilacioncon.com, 1 depilazione.roma.it, 1 depilestil.es, 1 depistage-bejune.ch, 1 +depleteduranium.tk, 1 deplorablesdaily.com, 1 depokcity.tk, 1 depone.net, 0 @@ -33957,6 +34446,7 @@ der-lan.de, 1 der-rohrstock.club, 1 derailer.org, 1 derakkers.tk, 1 +derango.tk, 1 deratisation-prix.fr, 1 deratisation.paris, 1 derattizzazione.name, 1 @@ -34125,6 +34615,7 @@ desipandora.com, 1 desiplex.tk, 1 desiree-lauber.de, 0 desirememory.cf, 1 +desish.cf, 1 desivideos.tk, 1 desk-yogi.com, 1 deskaservices.com, 1 @@ -34218,13 +34709,16 @@ deti-online.com, 1 deti-vse.ml, 1 deti.ga, 1 detiklife.com, 1 +detiks.cf, 1 detishki.ga, 1 +detki.cf, 1 detki24.ru, 0 detodojuegos.com, 1 detoxic.vn, 1 detoxtorehab.com, 1 detrapdoor.com, 1 detrazioni.it, 1 +detreannamaria.tk, 1 detrimental.tk, 1 detroit-english.de, 1 detroit.gov, 1 @@ -34237,6 +34731,7 @@ detuinmuze.nl, 1 detusmascotas.com, 1 detweedekans.tk, 1 detyamobuv.tk, 1 +detyobuv.tk, 1 detype.nl, 1 deu.sh, 1 deuchnord.fr, 1 @@ -34326,6 +34821,7 @@ devillers-occasions.be, 0 devilmaycry.ga, 1 devilmaycry.tk, 1 devilrecords.tk, 1 +devils-co.tk, 1 devils-point.de, 1 devilshakerz.com, 1 devilsophie.net, 1 @@ -34417,6 +34913,7 @@ dexerto.fr, 0 dexign.ro, 1 dexigner.com, 1 dexlex.nl, 1 +dexonrest.azurewebsites.net, 1 dexonservicedeskws.azurewebsites.net, 1 dextermarket.com, 1 dexterseries.ru, 1 @@ -34486,6 +34983,7 @@ dg68.cc, 0 dgangsta.net, 1 dgbouncycastlehire.com, 1 dggb.co.in, 1 +dggm.ru, 1 dgl-24.de, 1 dgli.org, 1 dgmutual.co.uk, 1 @@ -34802,6 +35300,7 @@ diferenca.com, 1 diff-speed.de, 0 different.cz, 1 differenta.ro, 1 +differentgirleveryday.ml, 1 differenziare.it, 1 diffnow.com, 1 diflucanonline.tk, 1 @@ -34826,6 +35325,7 @@ digi-typa.fi, 1 digiaika.com, 1 digiaika.fi, 1 digiarc.net, 1 +digib.co.uk, 1 digibean.com.au, 1 digibild.ch, 1 digibook.id, 1 @@ -34874,6 +35374,7 @@ digitaal-atelier.tk, 1 digitaaltalent.be, 1 digitador.tk, 1 digitai.net, 1 +digital-agency360.com, 1 digital-compounds.com, 1 digital-cs.tk, 1 digital-eastside.de, 1 @@ -35092,6 +35593,7 @@ dimiskovska.de, 1 dimism.eu, 1 dimitrihomes.com, 1 dimitris.tk, 1 +dimitrovi.tk, 1 dimmersagourahills.com, 1 dimmerscalabasas.com, 1 dimmersdosvientos.com, 1 @@ -35198,8 +35700,10 @@ directorioempresarial.com.co, 1 directoriomedico.com.co, 1 directorios.tk, 1 directoriostelefonicos.com, 1 +directorioz.com, 1 directorwebseo.tk, 1 directory-sunglasses.tk, 1 +directorydashboard.ga, 1 directorydisc.cf, 1 directorydisc.ga, 1 directoryg.com, 1 @@ -35218,7 +35722,6 @@ direktvermarktung-schmitzberger.at, 1 diretonoponto.gq, 1 direwolfsoftware.ca, 1 dirhami.com, 1 -diriya.lk, 0 dirk-dogs.tk, 1 dirk-weise.de, 1 dirkdoering.de, 1 @@ -35253,6 +35756,7 @@ disabilitydischarge.com, 1 disabled-world.com, 1 disabled.dating, 1 disableipv4.se, 1 +disabuse.cf, 1 disadattamentolavorativo.it, 1 disain.tk, 1 disanteimpianti.com, 0 @@ -35408,6 +35912,9 @@ disisto.de, 1 disk.do, 1 diskbit.com, 1 diskbit.nl, 1 +diskdoctors.tk, 1 +disketa.cf, 1 +disketteetikette.tk, 1 diskgem.info, 1 disking.co.uk, 1 diskonsepatu.ga, 1 @@ -35418,6 +35925,7 @@ dislepsia.tk, 1 dismail.de, 1 dismed.fr, 1 disney-stitch.com, 1 +disneywallpapers.tk, 1 disoluto.tk, 1 disougstroy.com.ua, 1 disparada.com.br, 1 @@ -35426,7 +35934,7 @@ dispatchitsolutions.com, 1 dispatchitsolutions.io, 1 dispel-photo.com, 1 dispemec.com, 0 -dispensarygta.com, 0 +dispensarygta.com, 1 displayenergycertificate.co.uk, 1 displayrd.com, 1 disposable.link, 1 @@ -35444,6 +35952,7 @@ dist-it.com, 1 dist.torproject.org, 0 distance-learning-courses.co.uk, 1 distancelove.cf, 1 +distancelove.ml, 1 distancelove.tk, 1 distant.land, 1 distelbentelo.nl, 1 @@ -35495,8 +36004,10 @@ disturbedwarriors.tk, 1 dit.moe, 1 ditdot.hr, 1 ditec.sk, 1 +diterzafra.tk, 1 ditex.ddns.net, 1 ditfiorinicamargo.com.ar, 0 +dities.tk, 1 ditissaskia.nl, 1 dittvertshus.no, 1 div12.org, 1 @@ -35525,6 +36036,7 @@ diversovariable.tk, 1 divertidores.tk, 1 divewithfrank.com, 1 divi-experte.de, 1 +dividedstates.tk, 1 dividendosfiis.com.br, 1 dividendz.net, 1 divider.tk, 1 @@ -35537,6 +36049,7 @@ divinedecay.tk, 1 divinegames.studio, 1 divinemercyparishvld.com, 1 divinerooms.com, 1 +divinho.com.br, 1 divinitas.tk, 1 divinoafeto.com.br, 1 divinoaffetto.com.br, 1 @@ -35544,6 +36057,7 @@ divisuite.com, 1 diviworx.com, 1 divizja.tk, 1 divjak.at, 1 +divo-remont.tk, 1 divorce.com, 1 divorceattorneyschicago.com, 1 divorceattorneyshouston.com, 1 @@ -35572,6 +36086,7 @@ diycc.org, 1 diycraft.ga, 1 diycrafts.ml, 1 diyeat.com, 1 +diyeta.cf, 1 diyeventhire.co.nz, 1 diygeek.com, 1 diymediahome.org, 1 @@ -35582,6 +36097,7 @@ diyzealot.com, 1 dizainkyhni.ml, 1 dizapra.de, 1 dizayn-cheloveka.ru, 1 +dizayner.tk, 1 dizihastasi.com, 1 dizkartes.nl, 1 dizkofloor.com, 1 @@ -35590,6 +36106,7 @@ dizmatt.tk, 1 dizzidecalz.com.au, 1 dizzie.org, 1 dizzieforums.com, 1 +dizzyskills.tk, 1 dizzythewizard.co.uk, 1 dj-ac.com, 1 dj-damm.tk, 1 @@ -35598,6 +36115,7 @@ dj-eran.tk, 1 dj-guillaume.tk, 1 dj-iliri.tk, 1 dj-jackson.tk, 1 +dj-kupidon.gq, 1 dj-leszwolle.nl, 1 dj-morfu.tk, 1 dj-ocean.tk, 1 @@ -35618,12 +36136,14 @@ djakuza.tk, 1 djalberto.tk, 1 djalessandrobrain.tk, 1 djamelkokene.com, 1 +djamiroquai.tk, 1 djang.tk, 1 django.city, 1 django.cyou, 1 djangobirthday.com, 0 djangogolf.com, 1 djangoproject.com, 1 +djangoproject.tk, 1 djangosnippets.org, 1 djangowebstudio.com, 1 djanneli.tk, 1 @@ -35632,10 +36152,12 @@ djarman.tk, 1 djattack.com, 1 djawabna.ga, 1 djax.tk, 1 +djazair.ml, 1 djazair.tk, 1 djazim.tk, 1 djbardhi.tk, 1 djbell.tk, 1 +djbessi.tk, 1 djbobbytables.com, 1 djboekingskantoor.nl, 1 djboi.tk, 1 @@ -35644,13 +36166,16 @@ djboris.com, 1 djbrixx.tk, 1 djc.me, 1 djcaz.tk, 1 +djcezar.tk, 1 djcheka.tk, 1 djcirce.tk, 1 djconde.tk, 1 +djconker.tk, 1 djcontact.tk, 1 djcritikal.tk, 1 djcursuszwolle.nl, 1 djdan.tk, 1 +djdarkz.tk, 1 djdavid98.art, 1 djddt.tk, 1 djdebayanofficial.ga, 1 @@ -35679,6 +36204,7 @@ djhozby.tk, 1 djhypnoticstate.tk, 1 djichtus.tk, 1 djieno.com, 1 +djinstinct.tk, 1 djipanov.com, 1 djjacs.tk, 1 djjonimix.tk, 1 @@ -35694,6 +36220,7 @@ djlinux.cz, 1 djlive.ga, 1 djlmk.tk, 1 djlogic.tk, 1 +djlove.tk, 1 djluca.tk, 1 djmafia.tk, 1 djmanikbd.gq, 1 @@ -35706,9 +36233,11 @@ djmissynthia.tk, 1 djmoremusic.ng, 0 djmullet.tk, 1 djmus.tk, 1 +djnandoalmenara.tk, 1 djnash.tk, 1 djnasvatbuzlin.cz, 1 djnefret.tk, 1 +djnext.tk, 1 djnr.agency, 1 djnr.love, 1 djogani.tk, 1 @@ -35730,9 +36259,11 @@ djroynomden.nl, 1 djrunaway.tk, 1 djrush134.tk, 1 djsamurai.tk, 1 +djsciencecollege.tk, 1 djsearch.tk, 1 djselo.tk, 1 djsetitalia.tk, 1 +djshivbabu.tk, 1 djshox.tk, 1 djsina.tk, 1 djsk.nl, 1 @@ -35833,6 +36364,7 @@ dlt.green, 1 dluxelab.com, 1 dlyabega.tk, 1 dlyaribalki.tk, 1 +dlyatepla.ml, 1 dlyl888.com, 1 dm-drogeriemarkt.ba, 0 dm-drogeriemarkt.bg, 0 @@ -35914,6 +36446,7 @@ dmshynk.com, 1 dmvhomesgroup.com, 1 dmwall.cn, 1 dmwaste.com, 0 +dmwclan.tk, 1 dmx.xyz, 1 dmxclan.tk, 1 dmxledlights.com, 1 @@ -35929,6 +36462,7 @@ dnakids.co.uk, 1 dnalounge.com, 1 dnapagamentos.com.br, 1 dnapizza.com, 1 +dnash.tk, 1 dnb.co.in, 1 dnc.org.nz, 1 dndblog.tk, 1 @@ -35937,6 +36471,7 @@ dndr.se, 1 dndtools.net, 1 dnel.me, 1 dneprfilm.top, 1 +dnepropetrovck.tk, 1 dneprovski.tk, 1 dnestr.tk, 1 dnfc.rocks, 1 @@ -35999,6 +36534,7 @@ do.search.yahoo.com, 0 do13.net, 1 do67.de, 1 do67.net, 1 +doanhai.tk, 1 dobavki.club, 1 dobbshvac.com, 1 dobledemichaeljackson.tk, 1 @@ -36123,7 +36659,9 @@ docusign.jp, 1 docusign.mx, 1 docusign.nl, 1 docxtemplater.com, 1 +doczlo.tk, 1 doda.space, 1 +dodacommunity.tk, 1 dodard.link, 1 doddridgecountywv.gov, 1 dodds.cc, 1 @@ -36248,7 +36786,6 @@ doklinik.com, 1 dokonline.tk, 1 dokspot.cf, 1 dokspot.ga, 1 -doktererectie.com, 1 doku-gilde.de, 1 dokuboard.com, 1 dokudu.com, 1 @@ -36332,6 +36869,7 @@ domainevanina.fr, 1 domainexpress.de, 0 domainforfree.gq, 1 domainhacks.io, 1 +domainhostingcompany.tk, 1 domainics.ml, 1 domainmonitor.net, 1 domainoo.com, 1 @@ -36365,6 +36903,7 @@ domein-direct.nl, 1 domeindns.nl, 1 domekklimkowka.com, 1 domen-reg.ru, 1 +domenaru.ga, 1 domenic.me, 1 domenicam.com, 1 domenick-lieneweg.de, 1 @@ -36373,6 +36912,7 @@ domenicods.tk, 1 domessraw.cz, 1 domfee.com, 1 domhaase.me, 1 +domhos.tk, 1 domialt.de, 1 domian.cz, 1 dominanta-law.com, 1 @@ -36381,6 +36921,7 @@ dominationgame.co.uk, 1 dominctheroofguy.com, 1 dominguezchiropractic.com, 1 dominicana-lux.cf, 1 +dominicandfelixroco.tk, 1 dominicanisimo.tk, 1 dominicanosenpr.com, 1 dominichoward.tk, 1 @@ -36470,6 +37011,7 @@ donalblaney.gq, 1 donaldduck.nl, 1 donaldjenkins.com, 1 donaldm.co.uk, 1 +donaldtrump.ga, 1 donaldwarner.com, 1 donamflor.com, 1 donarmany.online, 1 @@ -36614,7 +37156,6 @@ doreyaromatherapy.com, 1 dorfbrunnen.eu, 1 dorfkultur.net, 1 dorfpark-falkenburg.de, 1 -dorfrock.com, 1 dorfzittig.de, 1 doriangardes.fr, 1 doriangirod.ch, 0 @@ -36740,6 +37281,7 @@ doubled.ml, 1 doubledranch.tk, 1 doublefriverranch.com, 1 doublefun.net, 1 +doubleness.gq, 1 doublestat.me, 1 doubleup.com.au, 1 doubleupgaming.tk, 1 @@ -36801,12 +37343,14 @@ downbook.org, 1 downestan.ga, 1 downfall-records.tk, 1 downgratis.tk, 1 +download-knigi.gq, 1 downloadabc.cf, 1 downloadapk.co.id, 1 downloadapkpure.tk, 1 downloadasik.com, 1 downloadbestapps.com, 1 downloadcounter-strike16.com, 1 +downloadfiles.cf, 1 downloadforum.ml, 1 downloadforum.tk, 1 downloadhindimovie.com, 1 @@ -36832,11 +37376,13 @@ dox-box.eu, 1 doxa.tk, 1 doxal.ro, 1 doxcelerate.com, 1 +doxepin1.gq, 1 doxyciclin.ga, 1 doxyciclin.gq, 1 doxycycline-online.cf, 1 doxycycline1.gq, 1 doxycyclinehyclate100mgcap.cf, 1 +doxycyclineprices.cf, 1 doyarki.ga, 1 doyleshamrock.com, 1 doylestownborough.net, 1 @@ -36852,6 +37398,7 @@ dozecloud.com, 1 dozens.com, 1 dozepharmacy.com, 1 dozor.ga, 1 +dozor.gq, 1 dp-clan.tk, 1 dp.cx, 1 dpangerl.de, 0 @@ -36915,7 +37462,7 @@ drach.xyz, 1 dracheisolation.tk, 1 drachenleder.de, 1 dracisvet.cz, 1 -dracoon.team, 1 +dracoon.team, 0 dracox.com, 0 dracula.city, 1 draemar.com, 1 @@ -37059,6 +37606,7 @@ dreadnews.ga, 1 dreads-expert.com, 1 dream-domain.tk, 1 dream-factory.tk, 1 +dream-pools.cf, 1 dreamaholic.club, 1 dreamawake.tk, 1 dreambbs.tk, 1 @@ -37068,6 +37616,7 @@ dreamcartransport.be, 1 dreamcast-world.tk, 1 dreamcatchers-events.com, 1 dreamcleaningservice.com, 1 +dreamcrack.tk, 1 dreamdestine.com, 1 dreamdivers.com, 1 dreamelegant.ml, 1 @@ -37103,6 +37652,7 @@ dreamsystems.tk, 1 dreamtapestry.ga, 1 dreamweavers.live, 1 dreamwork.financial, 1 +dreamworldstudio.tk, 1 dreamytheatre.com, 1 dreamz-staging.zone, 1 dreamz.com, 1 @@ -37172,7 +37722,6 @@ drhathazi.hu, 1 drheibel.com, 1 drherndonent.com, 1 drhildebrand.net, 1 -drhopeson.com, 1 drhowardaubert.com, 1 drhyler.com, 1 drianpublishing.tk, 1 @@ -37261,6 +37810,7 @@ drivestarfreight.com, 1 drivetonortheast.com, 1 driveyouradblockcounterup.com, 1 driving-lessons.co.uk, 1 +drivingacademy.tk, 1 drivinginstruction.tk, 1 drivingsupport.org, 1 drivinhors.com, 1 @@ -37417,12 +37967,14 @@ drugtestingsupplies.com, 1 drugwars.tk, 1 drugzone.tk, 1 druides.tk, 1 +druko.cf, 1 drum-majo-ijsselstrand.tk, 1 drumbe.at, 1 drummer.cf, 1 drummondframing.com, 1 drumnbass.tk, 1 drunkcalc.com, 1 +drunkendropkes.tk, 1 drupal.org, 1 drupalspb.org, 0 drusantia.net, 1 @@ -37594,6 +38146,7 @@ dubairecipes.com, 1 dubaishoppingcity.com, 1 dubaitalents.com, 1 dubaivisa.net, 1 +dubaizone.cf, 1 dubbingkursus.dk, 1 dubcowa.tk, 1 dubious-website.com, 1 @@ -37610,6 +38163,7 @@ dubreuilville.ca, 1 dubridgeweb.be, 1 dubrovnik.tours, 1 dubrovnikfoodtours.com, 1 +dubrovskiy.cf, 1 dubrovskiy.net, 1 dubrovskiy.pro, 1 dubslow.tk, 1 @@ -37746,6 +38300,7 @@ dungeonedraghi.it, 1 dungeonline.com, 1 dungkieu.com, 1 dunia-news.tk, 1 +dunkelmann.eu, 1 dunkerhosting.nl, 1 dunklau.fr, 1 dunkle-seite.org, 1 @@ -37789,6 +38344,7 @@ durandeau.org, 1 durangoaldezaharra.tk, 1 durangoenergyllc.com, 1 durbanlocksmiths.co.za, 1 +durcal.tk, 1 durchblick-shop.de, 1 durcoin.com, 1 durcoin.org, 1 @@ -38079,6 +38635,7 @@ dzsibi.com, 1 dzsula.hu, 1 dzu.fund, 1 dzu.life, 1 +dzus.tk, 1 dzworld.com, 1 dzyabchenko.com, 0 dzyszla.pl, 1 @@ -38102,6 +38659,7 @@ e-colle.info, 1 e-copys.com, 1 e-cottage.com.br, 1 e-daftar.com, 1 +e-diabolo.tk, 1 e-diasporan.cf, 1 e-diasporan.ga, 1 e-diasporan.gq, 1 @@ -38114,6 +38672,7 @@ e-estonia.com, 1 e-estonians.ee, 1 e-facture.net, 1 e-fireplaces.tk, 1 +e-fishing.tk, 1 e-fitnes.tk, 1 e-games-board.tk, 1 e-gc.de, 1 @@ -38125,6 +38684,7 @@ e-homebiz.tk, 1 e-house.tk, 1 e-id.ee, 1 e-ideamagazine.ga, 1 +e-informatyk.tk, 1 e-instalator.pl, 1 e-interactivenet.tk, 1 e-interview.tk, 1 @@ -38155,6 +38715,7 @@ e-node.net, 1 e-node.ru, 1 e-otdyx.tk, 1 e-peeling.tk, 1 +e-peets.tk, 1 e-placement.tk, 1 e-pns.com, 1 e-pokupki.eu, 1 @@ -38208,6 +38769,7 @@ e-webos.com, 1 e-wish.tk, 1 e-wishlist.net, 1 e-worksmedia.com, 0 +e-yachts.tk, 1 e.gg, 1 e.ki, 0 e.mail.ru, 1 @@ -38625,6 +39187,7 @@ earth-quake.tk, 1 earthbound.tk, 1 earthbox.com, 1 earthcore.com, 1 +earthcorporation.cf, 1 eartheld.tk, 1 earthpixz.com, 1 earthpoints.org, 1 @@ -38699,6 +39262,7 @@ easydumpsterrental.com, 0 easyenrollment.net, 1 easyescortwebsites.com, 1 easyfiles.ch, 1 +easyfiles.gq, 1 easyfm.cz, 1 easyfoto.tk, 1 easygrow.tk, 1 @@ -38708,6 +39272,7 @@ easyit.ga, 1 easyit.tk, 1 easyjumping.tk, 1 easykonto.de, 1 +easylogics.tk, 1 easymotionskin-japan.jp, 1 easymun.com, 1 easynm.cn, 1 @@ -38727,6 +39292,7 @@ easyradio.gq, 1 easyreal.ru, 1 easyretro.io, 1 easyserver.io, 1 +easyshare.gq, 1 easysignup.com, 1 easyska.tk, 1 easyslide.be, 1 @@ -38737,8 +39303,10 @@ easytestonline.tk, 1 easytext.ga, 1 easytokill.tk, 1 easytrackghana.com, 1 +easytube.ga, 1 easywebhosting.tk, 1 easyweenies.com, 1 +easywin.ml, 1 easywio.com, 1 easywords.org, 1 eat, 1 @@ -38766,6 +39334,7 @@ eatz-and-treatz.com, 1 eauclairecounty.gov, 1 eaucube.com, 1 eaugalliediscountpharmacy.com, 1 +eaugenethomas.cf, 1 eauto-cash.de, 1 eautocash.de, 1 eautocollision.com, 1 @@ -38834,11 +39403,11 @@ ebjork.se, 1 ebki-nsn.gov, 1 eblan.gq, 1 eblog.cf, 1 -eblog.ink, 1 ebola-hosting.cz, 1 ebolacharts.ga, 1 ebonyriddle.com, 1 eboocker.de, 1 +ebookabc.tk, 1 ebookdep.com, 1 ebooki.eu.org, 1 ebooknetworking.net, 1 @@ -38916,6 +39485,7 @@ echosnature.fr, 1 echosystem.fr, 1 echotango.fr, 1 echoteam.eu.org, 1 +echoteam.gq, 1 echoteam.ml, 1 echotone.tk, 1 echoworld.ch, 0 @@ -38939,6 +39509,7 @@ eclectiv.com, 1 eclinic.vet, 1 eclipse-cross.info, 1 eclipse4academia-startups.com, 1 +eclipseforum.tk, 1 eclipsegame.tk, 1 eclipseinspectionservices.co.uk, 1 ecn.ir, 1 @@ -39030,6 +39601,7 @@ econstitution.bg, 1 econsumer.gov, 1 ecoon.net, 1 ecopak.org, 1 +ecopark.asia, 1 ecorak.de, 1 ecored.pl, 1 ecos-ev.de, 1 @@ -39088,6 +39660,7 @@ ecvma.fr, 1 ecxforum.com, 1 ecyy.net, 1 ed-medications.ml, 1 +ed-studios.tk, 1 ed.gs, 1 eda.gov, 1 edacasa.com.br, 1 @@ -39123,6 +39696,7 @@ edel-suff.de, 1 edelveiys.tk, 1 edelweiskapel.tk, 1 edelweiss-pinzolo.com, 1 +eden-project-insight.tk, 1 eden.bz, 1 eden.co.uk, 1 edenaya.com, 0 @@ -39139,6 +39713,7 @@ edfinancial.com, 1 edgarcountyillinois.gov, 1 edgarsonderwaterwereld.tk, 1 edgarwi.gov, 1 +edgarz.tk, 1 edgebilisim.com, 1 edgecase.ru, 1 edgeconnectnj.net, 1 @@ -39240,13 +39815,14 @@ eduardochang.tk, 1 eduardofranco-luthier.tk, 1 eduardomaio.net, 1 eduardosuarez.tk, 1 +eduart.tk, 1 edubase.net, 1 edubirdie.com, 1 +edublognews.tk, 1 educa2.es, 1 educabis.tk, 1 educacionnm.ml, 1 educacionvirtual.com.ar, 1 -educaenvivo.com, 1 educaestado.com, 1 educampus.cl, 1 educanada.in, 1 @@ -39263,6 +39839,8 @@ educationet.tk, 1 educationevolving.org, 1 educationfutures.com, 1 educationgov.tk, 1 +educationhighquality.ml, 1 +educationism.tk, 1 educationmalaysia.co.uk, 1 educationone.ml, 1 educationportal.ga, 1 @@ -39273,6 +39851,7 @@ educationsupport.org.uk, 0 educationtopics.tk, 1 educationtree.tk, 1 educationtrust.tk, 1 +educationweek.tk, 1 educative.io, 1 educator-one.com, 1 educatorretirementsolutions.com, 1 @@ -39336,6 +39915,7 @@ edwinmattiacci.com, 1 edwinroelvink.tk, 1 edxg.de, 0 edxn.de, 1 +edyhenry.tk, 1 edzilla.info, 0 edzo.dk, 1 ee-terminals.com, 1 @@ -39516,6 +40096,7 @@ egiftcards.be, 1 egins.tk, 1 egipet-tiz.tk, 1 egiptwakacje.tk, 1 +egitim.academy, 1 egittophilia.tk, 1 egles.eu, 1 eglinlife.net, 1 @@ -39527,9 +40108,11 @@ ego4u.de, 1 egoclan.tk, 1 egold-keeper.com, 1 egomania.tk, 1 +egomaniaque.tk, 1 egonews.ga, 1 egonix.de, 1 egophobia.tk, 1 +egorazarkevich.ga, 1 egorka.ml, 1 egoroskope.tk, 1 egoscolumn.tk, 1 @@ -39561,6 +40144,7 @@ egypthomemaintenance.com, 1 egyptian.gq, 1 egyptianhak.tk, 1 egyptour.com, 1 +egytimes.tk, 1 egzotique.com, 1 eh-huebner-stiftung.de, 1 ehaccp.it, 1 @@ -39814,6 +40398,7 @@ elauricielo.tk, 1 elaxy-online.de, 1 elayog.bt, 1 elazafran.com, 1 +elazighaber.tk, 1 elb500ttl.nl, 1 elba-elba.tk, 1 elba-hotel.tk, 1 @@ -39882,6 +40467,7 @@ electr0sheep.com, 1 electra.co.nz, 1 electrafk.cl, 1 electragirl.com, 1 +electras.cf, 1 electric-fencingjohannesburg.co.za, 1 electric-vault.co.uk, 1 electricagoura.com, 1 @@ -39975,6 +40561,7 @@ electromec.eu, 1 electromec.info, 1 electromec.net, 1 electromec.org, 1 +electromenager.tk, 1 electrominati.com, 1 electromotor.tk, 1 electronic-ignition-system.com, 1 @@ -40005,6 +40592,7 @@ eleganceperfumes.com.br, 1 elegant-techno.com, 1 eleganta.ga, 1 elegantfamilyhotelsandresorts.com, 1 +elegantlatex.tk, 1 elegantly-clean.co.uk, 1 elegantperfume.com, 1 eleganza.ga, 1 @@ -40060,6 +40648,7 @@ elektropost.org, 1 elektroprom.tk, 1 elektroruoff.de, 1 elektrosety.com.ua, 1 +elektrotango.tk, 1 elektrotechnik-heisel.de, 1 elektrotechnik-kaetzel.de, 1 elektrotechnik-schreck.de, 1 @@ -40094,6 +40683,7 @@ elena-soset.cf, 1 elena-soset.ga, 1 elena-soset.ml, 1 elena-soset.tk, 1 +elenagherta.ga, 1 elenamuerza.com, 1 elenapulizieroma.it, 1 elenaristeska.tk, 1 @@ -40231,7 +40821,6 @@ elinternadolagunanegra.tk, 1 eliolita.com, 1 eliott.cc, 1 eliottlavier.com, 1 -eliquid-manufaktur.de, 1 elisa.ee, 0 elisabeth-kostecki.de, 1 elisabeth-raendel.de, 1 @@ -40248,6 +40837,7 @@ elisetriestocook.com, 1 elit-fitnes.tk, 1 elit-host.tk, 1 elitatasehirescort.com, 1 +elite-design.tk, 1 elite-enc.tk, 1 elite-forums.tk, 1 elite-nakhodka.tk, 1 @@ -40355,6 +40945,7 @@ elmeson.tk, 1 elmion.cloud, 1 elmo.ee, 1 elmod.com, 1 +elmolar.tk, 1 elmolist.tk, 1 elmresan.ir, 1 elmundodeloso.tk, 1 @@ -40437,7 +41028,6 @@ elshadaysemijoias.com.br, 1 elshop1eu.com, 1 elshou.com, 1 elskling.no, 1 -elstopstelten.nl, 0 elstravato.com, 1 elsuccionador.com, 1 elsvanderlugt.nl, 1 @@ -40568,6 +41158,7 @@ emchat.cloud, 0 emchatnetwork.com, 1 emcspotlight.com, 1 emdadkhodrokaraj.ir, 1 +emdadulislam.tk, 1 emdbonlinehelp.tk, 1 emdep.com, 1 emdesigns.tk, 1 @@ -40708,6 +41299,7 @@ emocionestlp.com, 1 emocionypensamiento.com, 1 emocje.com, 1 emocto.com, 1 +emoforum.tk, 1 emoji.web.tr, 1 emojiteka.pl, 1 emolafarm.com, 1 @@ -40798,6 +41390,7 @@ emptypath.com, 1 emptysmile.tk, 1 empyrean-advisors.com, 1 emrah.io, 1 +emreaydinfan.tk, 1 emrecicekmuhendislik.com, 1 emresaglam.com, 1 emrgnc.co.uk, 1 @@ -40923,6 +41516,7 @@ endingthedocumentgame.gov, 1 endless.pet, 1 endlessdiy.ca, 1 endlessvideo.com, 1 +endlesswebsite.tk, 1 endofevolution.com, 1 endofinternet.goip.de, 1 endoflife.date, 1 @@ -40985,8 +41579,6 @@ energiecentrale.gent, 1 energieconsultonline.nl, 1 energiekeurplus.nl, 1 energielabelbinneneenweek.nl, 1 -energieportal-ava-qa-app.azurewebsites.net, 1 -energieportal-shn-qa-app.azurewebsites.net, 1 energija-visiems.lt, 1 energikompetens.se, 1 energoproff.com, 1 @@ -41035,6 +41627,7 @@ eneroths.se, 1 enersaveapp.org, 1 enerte.ru, 1 eneryetika.com, 1 +enerypa.tk, 1 enescrackmerkezi.tk, 1 enet-navigator.de, 1 enett.team, 1 @@ -41102,6 +41695,7 @@ engl-server.de, 1 engl-systems.de, 1 englandairportcars.com, 1 englandbeach.com, 1 +englandschool.tk, 1 english-training.tk, 1 englishbulgaria.net, 1 englishcast.com.br, 1 @@ -41109,6 +41703,7 @@ englishclassworksheets.com, 1 englishcompany-mobile.jp, 1 englishcompany.jp, 1 englishdirectory.de, 1 +englishfamilyzone.tk, 1 englishforums.com, 1 englishll.com, 1 englishlol.com, 1 @@ -41176,6 +41771,7 @@ enns-photography.com, 1 enocstaging.azurewebsites.net, 1 enodais.gr, 1 enofmusic.com, 1 +enoisdaturma.tk, 1 enomada.net, 1 enoou.com, 1 enorekcah.com, 1 @@ -41192,8 +41788,10 @@ enotovil.ru, 1 enotrosmundos.tk, 1 enpalmademallorca.info, 1 enpasenerji.com.tr, 1 +enputu.tk, 1 enquetebeteiligung.de, 1 enquos.com, 1 +enrack.tk, 1 enrega.com, 1 enrich.email, 1 enriched.news, 1 @@ -41322,11 +41920,13 @@ envydesigns.tk, 1 envygeeks.io, 1 envysmile.com, 1 envywe.com, 1 +enwikipedia.tk, 1 enwillyado.tk, 1 enxadahost.com, 1 enzofardone.ga, 1 enzosoares.com, 1 enzyme-sensor.net, 1 +eo-literaturo.tk, 1 eocservices.co.uk, 1 eod.su, 1 eoitek.com, 1 @@ -41500,6 +42100,7 @@ equifaxobjection.com, 1 equilibratura.roma.it, 1 equilibrium.med.br, 1 equine-dentistry-endoscope.com, 1 +equine-dentistry-scope.com, 1 equinecoaching.ca, 1 equinenow.com, 1 equinesalacia.com, 1 @@ -41544,6 +42145,7 @@ erasmo.info, 1 erasmusantoine.tk, 1 erasmusbari.tk, 1 erasmusplusrooms.com, 1 +erasure.tk, 1 erasyou.com, 1 erate.fi, 1 erath.fr, 0 @@ -41566,6 +42168,7 @@ erector.cf, 1 eredmenye.xyz, 1 erefredag.se, 1 eregma.tk, 1 +erektion1.gq, 1 eremex.ru, 1 eremnews.com, 1 erenvakfi.org, 1 @@ -41628,6 +42231,7 @@ ericvaughn-flam.com, 1 ericwie.se, 0 eridan.me, 1 eridanus.uk, 1 +eridas.ml, 1 erider.bg, 1 eriecountyohioboe.gov, 1 erigrid.eu, 1 @@ -41684,6 +42288,7 @@ eromon.net, 1 eron.info, 1 eropics.to, 1 erosbeautyandwellness.com, 1 +eroscomixitalia.tk, 1 eroticgirlfriend.com, 1 eroticlist.com, 1 eroticmassagevegas.com, 1 @@ -41701,6 +42306,7 @@ erp.band, 1 erpband.ru, 1 erpcargo.com, 0 erpelstolz.at, 1 +erperium.com, 1 erperium.nl, 1 erpollo.com, 1 erpsolutionsmart.com, 1 @@ -41860,6 +42466,7 @@ escorts.works, 1 escortsontop.co.uk, 1 escortz.gq, 1 escoteiros.tk, 1 +escovator-records.tk, 1 escritoresdelcomahue.tk, 1 escritoriodearte.com, 0 escrocratie.tk, 1 @@ -41868,6 +42475,7 @@ escspain.tk, 1 escuda.eu, 1 escuelabiblica.com, 1 escuelacaninalatejera.es, 1 +escueladego.tk, 1 escueladelsabor.com, 1 escueladeministerioytecnologia.com, 1 escuelaelretamo.cl, 1 @@ -41927,6 +42535,7 @@ eslint.org, 0 eslove.jp, 1 esm.run, 1 esmart.ro, 1 +esmejor.tk, 1 esmincg2t1.com, 1 esmoker.bg, 1 esnekkaucuk.com, 1 @@ -41946,7 +42555,7 @@ esoterikerforum.de, 1 espace-caen.fr, 0 espace-gestion.fr, 1 espace-habitat-francais.fr, 1 -espace-orenda.ch, 1 +espace-orenda.ch, 0 espace-vet.fr, 1 espace.network, 1 espace.spb.ru, 0 @@ -41977,6 +42586,7 @@ espejocofrade.tk, 1 espeleogel.tk, 1 espenandersen.no, 1 espeo.eu, 1 +esperantio.tk, 1 esperanto.co, 1 espgg.org, 1 espigol.org, 1 @@ -42017,6 +42627,7 @@ essayforum.com, 0 essayhave.com, 1 essayjob.com, 1 essaylib.com, 1 +essaymaker.gq, 1 essaynews.com, 1 essaypro.net, 1 essays.me, 1 @@ -42095,6 +42706,7 @@ estoense.com, 1 estomp.de, 1 estonia.ee, 0 estonia.net, 1 +estoniananonymous.tk, 1 estoniantrade.ee, 1 estonoentraenelexamen.com, 1 estopero.tk, 1 @@ -42325,6 +42937,7 @@ euexia.fr, 1 eugenegamelan.org, 1 eugeniocorso.com, 1 eugenioperez.tk, 1 +eugostodefilmesbrasileiros.tk, 1 eugster.se, 1 eujuicers.bg, 1 eujuicers.com, 1 @@ -42346,6 +42959,7 @@ eujuicers.si, 1 eujuicers.sk, 1 eulenschmiede.de, 1 eulessplumbers.com, 1 +euman.ml, 1 eumananc.ro, 1 eung.ga, 1 eupay.de, 1 @@ -42419,6 +43033,8 @@ europatour2005.tk, 1 european-accreditation.org, 1 european-agency.org, 1 european-hospital.ga, 1 +european-hospital.ml, 1 +european-hospital.tk, 1 european-village.com, 1 europeananomalouswave.tk, 1 europeancuisine.tk, 1 @@ -42439,6 +43055,7 @@ eurorecambios24.com, 1 euroroad17.dk, 1 euroscot.de, 1 euroshop.or.at, 1 +euroshop.tk, 1 euroskano.nl, 1 eurospecautowerks.com, 1 eurosquad.tk, 1 @@ -42455,6 +43072,7 @@ eurovision-romania.tk, 1 eurovision.ie, 1 eurseo.com, 1 euruni.edu, 1 +eusarse.tk, 1 eusebiu.com, 1 euskalstakepool.win, 1 eusou.ml, 1 @@ -42475,6 +43093,7 @@ eva.cz, 1 eva24h.tk, 1 eva42.com, 1 evaali.fi, 1 +evaalordiah.tk, 1 evaberg.net, 1 evacs.net, 1 evacs.org, 1 @@ -42557,6 +43176,7 @@ event1teamstore.com, 0 event4fun.no, 1 eventact.com, 0 eventaro.com, 1 +eventblog2017.tk, 1 eventcore.tk, 1 eventerlebnis.ch, 1 eventide.space, 1 @@ -42566,6 +43186,7 @@ eventnexus.co.uk, 1 eventosbgp.com, 1 eventosdeluchalibre.tk, 1 eventosenmendoza.com.ar, 1 +eventosformativos.tk, 1 eventprazdnik.ru, 1 events.bt, 1 eventsbytma.com, 1 @@ -42602,6 +43223,7 @@ evermed.au, 1 evermed.com.au, 1 evernaut.com, 1 everpcpc.com, 1 +everready.tk, 1 eversightwealth.com, 1 evertonarentwe.com, 1 evertradeelectronics.com, 1 @@ -42664,6 +43286,7 @@ eviadc.com, 1 eviamv.com, 1 eviction.cf, 1 evidecor.com.br, 1 +evidencebased.net, 1 evidenceusa.com.br, 1 evidenciamidiasdigitais.com.br, 1 evidencija.ba, 1 @@ -42729,6 +43352,7 @@ evonet.co.za, 1 evony.eu, 1 evonys.com, 1 evopack.net, 1 +evoplay.gq, 1 evoqion.se, 1 evosyn.com, 1 evote-ch.ch, 1 @@ -42738,8 +43362,10 @@ evoting-test.ch, 1 evoting.ch, 1 evrial.com, 1 evromandie.ch, 1 +evronews.ga, 1 evscicats.com, 1 evscstudentwifi.com, 1 +evsinemasistemleri.tk, 1 evstatus.com, 1 evtasima.name.tr, 1 evthing.se, 0 @@ -42774,6 +43400,8 @@ ewizmo.com, 1 eworkflow.ca, 1 eworksmedia.com, 0 eworldmedia.ml, 1 +eworldmedia.tk, 1 +ewoutpool.tk, 1 ewritingservice.com, 1 ewrk.se, 0 ewsfeed.com, 1 @@ -42809,6 +43437,7 @@ exampleessays.com, 1 examroll.com, 1 examroll.fr, 1 examroll.io, 1 +examsite.tk, 1 examsmate.in, 1 examticket.tk, 1 exaplac.com, 1 @@ -42820,6 +43449,8 @@ exashop.tn, 1 exatmiseis.net, 0 excaliburmatrix.tk, 1 excaliburtitle.com, 0 +excavation.ga, 1 +exceed-clan.tk, 1 exceed.global, 1 excel-group.com, 1 excel-mechanical.com, 1 @@ -42833,6 +43464,7 @@ excella.me, 1 excellence-eventos.com, 1 excellence-redefined.org, 1 excellence.corsica, 1 +excellentrencontrer.tk, 1 excellentsurferers.ga, 1 excellentsurferest.ga, 1 excelnutritional.com.br, 1 @@ -42858,6 +43490,7 @@ exchangeview.ga, 1 exchangevisits.tk, 1 exchaser.com, 1 excite.co.id, 1 +exciters.tk, 1 excitingbulgaria.com, 0 excitingdevelopment.com, 1 excitoninteractive.com, 1 @@ -42868,6 +43501,7 @@ exclusivebouncycastles.co.uk, 1 exclusivedesignz.com, 1 exclusivelyuk.co.uk, 1 exclusivityglobal.tech, 0 +excluzive.ml, 1 excoins.biz, 1 excontinuum.de, 1 excursiones.tk, 1 @@ -42895,9 +43529,12 @@ exercisekingers.ga, 1 exercisekingest.ga, 1 exerforge.com, 1 exerforge.net, 1 +exerpm.tk, 1 +exesoft.ml, 1 exeunt.tk, 1 exexcarriers.com, 1 exeypanteleev.com, 1 +exforo.tk, 1 exfuga.com, 1 exhumationindia.tk, 1 exiled.land, 1 @@ -42917,7 +43554,9 @@ exmoe.com, 1 exo-chanyeol.tk, 1 exocen.com, 0 exodiac.ph, 1 +exodium.tk, 1 exogenous.ga, 1 +exomind.cf, 1 exomind.gq, 1 exon.io, 1 exonip.de, 1 @@ -42928,6 +43567,7 @@ exoscale.ch, 1 exoscale.com, 1 exoten-spezialist.de, 1 exotic-animals.tk, 1 +exotic-bengal-cattery.ml, 1 exotic.report, 1 exoticads.com, 1 exotical.tk, 1 @@ -42959,6 +43599,7 @@ exper.gr, 1 experienceoz.com.au, 1 experiment-626.tk, 1 experimentalguruji.cf, 1 +experimentaltheatreclub.tk, 1 experimentator.cz, 1 experimentoscongaseosa.tk, 1 experimentrak.com, 1 @@ -42967,8 +43608,10 @@ experise.fr, 1 experpento.tk, 1 expert-batiment-rouen.fr, 1 expert-korovin.ru, 1 +expert-voronezh.tk, 1 expert.cz, 1 expert96.cf, 1 +expertclub.tk, 1 expertcomics.com, 1 experteasy.com.au, 1 expertestate.org, 1 @@ -43017,21 +43660,26 @@ explorelocaltravel.tours, 1 exploretsp.gov, 1 exploring-memory.org, 1 exploringmorocco.tours, 1 +explorium.tk, 1 explosion-cs.tk, 1 explosionstereo.tk, 1 expo-larionov.org, 1 +expo58.tk, 1 expobeds.com, 1 expodom.hu, 1 expodom.ro, 1 expodom.sk, 1 expodum.cz, 1 expoesiavisual.tk, 1 +expoexports.tk, 1 expoline.ua, 1 expomac.tk, 1 exponentialnews.net, 1 exponentialsoft.cf, 1 exponentialsoft.ga, 1 +exponentialsoft.gq, 1 exponline.ga, 1 +exponline.tk, 1 expoort.co.uk, 1 expoort.com, 1 expoort.com.br, 1 @@ -43108,6 +43756,7 @@ externer-datenschutzbeauftragter-bochum.de, 1 externevoorzitter.nl, 1 extienso.com, 1 extinctionrebellion.de, 1 +extirosli.ga, 1 extmatrix.com, 0 extra.kiev.ua, 1 extrabits.pt, 1 @@ -43142,12 +43791,16 @@ extrememusclepump.com, 1 extremepeptides.com, 1 extremeprojects.tk, 1 extremeservicesandrestoration.com, 1 +extremesports.tk, 1 extremetunedcars.tk, 1 +extremfrank.tk, 1 extremovirtual.com, 1 extrolife.ml, 1 extromail.de, 1 extua.pw, 1 exudestudios.tk, 1 +exum.tk, 1 +exvisits.tk, 1 exvs.org, 1 exwaiti.com, 1 exway.com, 1 @@ -43165,6 +43818,7 @@ eye-vet.co.uk, 1 eye.do, 1 eye.security, 1 eyeandfire.com, 1 +eyeball.ml, 1 eyebrowsmicroblading.co.uk, 1 eyecandy.gr, 1 eyecare-center.com, 1 @@ -43188,6 +43842,7 @@ eyep.me, 1 eyes-berg.com, 0 eyesandearsrescue.org, 1 eyesaveopticalinc.com, 1 +eyescratch.tk, 1 eyesee.fr, 1 eyesfans.com, 1 eyeshield-informatique.tech, 1 @@ -43197,6 +43852,7 @@ eyesurgery.tk, 1 eyetelligence.nl, 1 eyetooth.ga, 1 eyfari.com, 1 +eyktasarim.tk, 1 eylif.is, 1 eynio.com, 1 eyona.com, 1 @@ -43223,6 +43879,7 @@ ezhub.de, 1 ezidox.com, 1 ezifin.com, 1 ezifund.com, 1 +ezik-ido.tk, 1 ezinezone.tk, 1 ezinternet.com.au, 1 ezitech.com, 1 @@ -43233,6 +43890,7 @@ ezorgportaal.nl, 1 ezpb.com, 1 ezpzdelivery.com, 1 ezrafashiondesign.com, 1 +ezrent.tk, 1 ezrohi.ru, 1 ezsavers.ga, 1 ezsaversers.ga, 1 @@ -43275,9 +43933,11 @@ f1nalboss.de, 1 f1pr.com, 1 f1report.net, 1 f1sh.de, 1 +f1simulator.tk, 1 f1solutionslb.com, 1 f1sport.tk, 1 f1tv-streams.live, 1 +f1worldwide.tk, 1 f2h.io, 1 f36533.com, 1 f3r.xyz, 1 @@ -43386,7 +44046,6 @@ f88vip54.com, 1 f88vip58.com, 1 f88vip6.cc, 1 f88vip6.com, 1 -f88vip66.com, 1 f88vip67.com, 1 f88vip70.com, 1 f88vip712.com, 1 @@ -43438,6 +44097,7 @@ faasviddy.nl, 1 faazmusic.com, 1 fabbro-roma.org, 1 fabbro.roma.it, 1 +fabelturen.tk, 1 faber.org.ru, 0 faberoclub.tk, 1 fabfrenchinsurance.com, 1 @@ -43457,6 +44117,7 @@ fabianfranke.de, 1 fabianfrisch.de, 1 fabiankaindl.de, 1 fabiankoeppen.com, 1 +fabianni.tk, 1 fabickcat.com, 1 fabien-eigenmann.ch, 1 fabien-hebuterne.fr, 1 @@ -43522,6 +44183,7 @@ facebylouise.co.uk, 1 facedack.com, 1 facedaily.tk, 1 facedeplook.tk, 1 +faceegypt.tk, 1 facekhande.tk, 1 facekungfu.com, 0 facelimousin.fr, 1 @@ -43539,6 +44201,7 @@ facevietpro.tk, 1 facevitalityers.ga, 1 fach-journalist.de, 1 fachfusspflege-exner.de, 1 +fachim.tk, 1 fachiri.tk, 1 fachowisko.pl, 1 fachschaften.org, 0 @@ -43547,6 +44210,7 @@ fachschaftslisten.org, 1 fachversand-hennes.de, 1 facialcare.tk, 1 facialexercising.com, 1 +facialparalysisnetwork.ga, 1 facialplasticsurgeryofaustin.com, 1 facil.services, 0 facilbrasil.com, 1 @@ -43589,6 +44253,7 @@ factoryalimentos.com.br, 1 factorypartsdirect.com, 1 factozia.tk, 1 facts-about-bees.ml, 1 +factslider.tk, 1 factsvision.sr, 1 factua.nl, 1 factum-info.net, 1 @@ -43634,7 +44299,6 @@ fagott.pw, 1 fagus.hopto.org, 1 fahadbook.com, 1 faharas.net, 1 -fahmed.de, 0 fahnamporn.com, 1 fahrenwal.de, 1 fahrenwalde.de, 1 @@ -43644,6 +44308,7 @@ fahrzeug-talk.de, 1 faidanoi.it, 1 faidatefacile.it, 1 faieurope.it, 1 +fail.cf, 1 failforward.tech, 1 failover.de, 1 failover.eu, 1 @@ -43651,6 +44316,9 @@ failoverplan.it, 1 faimdevoyages.com, 1 fairbairnrealty.com, 1 fairbill.com, 1 +fairbot.cf, 1 +fairbot.gq, 1 +fairbot.ml, 1 fairbot.tk, 1 fairchildband.tk, 1 fairchildfun.com, 1 @@ -43697,11 +44365,14 @@ fairviewfcss.com, 0 fairviewmotel-simcoe.com, 1 fairwork.gov.au, 1 fairyani.me, 1 +fairyballet.ga, 1 fairydust.space, 1 +fairyth.tk, 1 faisia.tk, 1 faithadvisorers.ga, 1 faithadvisorest.ga, 1 faithblog.org, 1 +faithbulletin.tk, 1 faithcentercogop.net, 1 faithfuladvisor.com, 1 faithfulfaye.nl, 1 @@ -43713,11 +44384,13 @@ faixaazul.com, 1 faizan.net, 1 faizan.xyz, 1 faizanullah.com, 1 +fajarafriansh.cf, 1 fajarilahi.sch.id, 1 fajita.party, 1 fajnshop.sk, 1 fajode.net, 1 fakat.tk, 1 +fake-show.ga, 1 fake.creditcard, 1 fakeaddress.net, 1 fakeapple.nl, 1 @@ -43729,6 +44402,7 @@ fakeframes.ga, 1 fakeframesers.ga, 1 fakeframesest.ga, 1 fakehouse.tk, 1 +fakel.ga, 1 fakemoney.ga, 1 fakeout.no, 1 fakerli.com, 1 @@ -43737,6 +44411,7 @@ fakes-ru.tk, 1 fakhrudin.tk, 1 fakinga.tk, 1 fakt.io, 1 +fakt.tk, 1 faktenfaktenfakten.tk, 1 faktotum.tech, 0 fakturi.com, 1 @@ -43802,6 +44477,7 @@ famdouma.nl, 1 fame.news, 1 fameng.nl, 1 famep.gov, 1 +fameslook.tk, 1 fameus.fr, 1 fameuxhosting.co.uk, 1 famfi.co, 1 @@ -43830,6 +44506,7 @@ familienoase-koenigstein.de, 1 familienportal.de, 1 familiereimann.com, 0 familietandarts.nl, 1 +familievisscher.tk, 1 familjenm.se, 1 familledessaint.fr, 1 familleenfete.fr, 1 @@ -43852,6 +44529,7 @@ famion.eu, 1 famlefeber.nl, 1 fammamtl.com, 1 famonitor.com, 1 +famosas.cf, 1 famous-models.tk, 1 famousandfaded.com, 1 famousbirthdays.com, 1 @@ -43859,20 +44537,25 @@ famouschilirecipes.com, 1 famoushostels.com, 1 famousit.nl, 1 famousmodels.tk, 1 +famouspdf.gq, 1 famre.de, 1 famvsomeren.nl, 1 fan.gov, 1 fan4all.de, 1 fanactu.com, 1 +fanaticamandafans.tk, 1 fanaticosdehectorlavoeenperu.tk, 1 +fanatka.tk, 1 fanbike.de, 1 fanboi.ch, 1 +fanclubblackhills.tk, 1 fanclubmariaciobanu.tk, 1 fanclubs.tk, 1 fancy-bridge.com, 1 fancy.org.uk, 1 fancygaming.dk, 1 fancypanty.cf, 1 +fandeev.tk, 1 fander.it, 1 fandomservices.com, 1 fandt.me, 1 @@ -43886,14 +44569,18 @@ fangd.net, 1 fangkehou.eu.org, 1 fangkehou.tk, 1 fangs.ink, 1 +fanidrakopoulou.tk, 1 fanjingbo.com, 1 fanjoe.be, 1 fanniemaeloans.tk, 1 +fanning.tk, 1 +fannyips.tk, 1 fanohus.de, 1 fanohus.dk, 1 fanorama.tk, 1 fanosak.tk, 1 fans-darkangel.tk, 1 +fans-lily-allen.tk, 1 fansale.de, 1 fanschic.com, 1 fansided.com, 1 @@ -43904,6 +44591,7 @@ fantasea.pl, 1 fantasiapainter.com, 1 fantasiatravel.hr, 1 fantasmesexuel.info, 1 +fantasmma.tk, 1 fantasticcleaners.com.au, 1 fantasticcleanersbristol.co.uk, 1 fantasticgrassers.ga, 1 @@ -43932,13 +44620,13 @@ fantasyfoot.tk, 1 fantasyforever.tk, 1 fantasymina.de, 1 fantasypartyhire.com.au, 1 -fantasypartyrental.com, 1 fantasyprojections.com, 1 fantasyrooms.com, 1 fantasyspectrum.com, 1 fantasysports.tk, 1 fantasysportsnews.org, 1 fantgames.com, 1 +fantinisfantasy.cf, 1 fantinishop.com, 1 fantom.foundation, 1 fantraxhq.com, 1 @@ -43948,6 +44636,7 @@ fanyina.com, 1 fanyue123.tk, 1 fanz.pro, 1 fanzade.com, 1 +fanzapers.ga, 1 fanzine-nimbus.tk, 1 fanzlive.com, 1 fap.link, 1 @@ -43964,6 +44653,9 @@ faq.lookout.com, 0 faqbite.com, 1 faqexchangeest.ga, 1 faqin-hr.info, 1 +faqiteam.tk, 1 +far-east.tk, 1 +far3link.tk, 1 fara.gov, 1 faradji.nu, 1 faradome.ws, 1 @@ -43983,6 +44675,7 @@ farcecrew.de, 0 farda.gov, 1 fardinarafat.tk, 0 fareast.cf, 1 +fareast.ga, 1 fareast.gq, 1 fareast.tk, 1 fareastpornhub.com, 1 @@ -43995,6 +44688,7 @@ faretrotter.com, 1 farexpress.it, 1 farfallapets.com.br, 1 farfallina.nl, 1 +farfor.tk, 1 farhadexchange.com, 1 farhandanish.tk, 1 farian.tk, 1 @@ -44010,6 +44704,8 @@ farleybrass.com.au, 1 farleymetals.com.au, 1 farleysworlds.com, 1 farlezz.de, 1 +farm-catalog.ga, 1 +farm-dogecoin.tk, 1 farm-vacations.com, 1 farm24.co.uk, 1 farmaceuticainternazionale.it, 1 @@ -44063,6 +44759,7 @@ fasad.eu, 1 fasam.edu.br, 1 fascat.com, 1 fashion-buttons.tk, 1 +fashion-family.cf, 1 fashion-stoff.de, 1 fashion-swimwear.tk, 1 fashion-world.tk, 1 @@ -44136,20 +44833,27 @@ fashionunited.pt, 1 fashionunited.ru, 1 fashionunited.se, 1 fashionunited.uk, 1 +fashionusa.gq, 1 +fashionweb.ml, 1 +fashionweek.tk, 1 fashionweekweb.com, 1 fashionworlds.ml, 1 +fashionxmas.gq, 1 fasmaritime.com, 1 faspirits.co.uk, 1 faspirits.com, 1 fassaden-selleng.de, 1 fassadenverkleidung24.de, 1 fassi-sport.it, 1 +fast-cargo.ml, 1 fast-drops.cf, 1 fast-events.eu, 1 fast-host.gq, 1 fast-host.net, 1 +fast-mobile.tk, 1 fast-pro.co.jp, 1 fast-rabbit.tw, 1 +fast-silver.tk, 1 fast4ever.tk, 1 fastaim.de, 1 fastamundi.com, 1 @@ -44159,9 +44863,14 @@ fastbackmbg.be, 1 fastbackmbm.be, 1 fastbizcards.com, 1 fastblit.com, 1 +fastbob.cf, 1 +fastbob.ga, 1 fastbob.gq, 1 +fastbob.ml, 1 +fastbob.tk, 1 fastburg.com, 1 fastcash.com.br, 1 +fastcast.ga, 1 fastcats.tk, 1 fastcomcorp.net, 1 fastcommerce.org, 1 @@ -44182,6 +44891,8 @@ fastfox.tk, 1 fastgamingro.tk, 1 fasthost.com.br, 1 fastighetsekonomi.com, 0 +fastknighki.ga, 1 +fastknigi.ml, 1 fastmail.com, 0 fastmeet.tk, 1 fastonline.ro, 1 @@ -44235,8 +44946,11 @@ fatturaelettronica-app.it, 1 fattyink.com, 1 fatumagro.bg, 1 fatvalley.at, 1 +fau-bremen.tk, 1 fau8.ml, 1 fauceton.cf, 1 +fauceton.tk, 1 +faucetslist.tk, 1 faulkner2020.com, 1 faulknercountyar.gov, 1 faultlines.org, 1 @@ -44273,16 +44987,17 @@ faxfarmest.ga, 1 faxitron.com, 1 faxreader.net, 1 faxvorlagen-druckvorlagen.de, 1 +fayamovies.tk, 1 fayettecountyillinois.gov, 1 fayettecountyoh.gov, 1 fayettecountywv.gov, 1 fayettemopd.gov, 1 fayettevillewv.gov, 1 faymoshub.com, 1 -fayntic.com, 1 faysalabdi.fi, 1 fazal.tv, 1 fazet.tk, 1 +fazhion.tk, 1 fazo.gq, 1 fazrin.tk, 1 fazz.id, 1 @@ -44315,6 +45030,7 @@ fbthirdpartypixel.com, 1 fburl.com, 1 fbwat.ch, 1 fbwifi.com, 1 +fc-corvinul.tk, 1 fc8882.net, 1 fca-tools.com, 1 fcapartsdb.com, 1 @@ -44411,6 +45127,7 @@ fedefutbol.tk, 1 fedel.tk, 1 fedema.com, 1 federacaoanarquista.com.br, 1 +federaciocatalanapipaclubs.tk, 1 federacionanarquista.net, 1 federalbus.ga, 1 federalbusers.ga, 1 @@ -44469,6 +45186,7 @@ feedough.com, 1 feedstringer.com, 1 feedthebot.com, 1 feedthefood.com, 1 +feedthegreek.tk, 1 feedtube.com, 1 feeg-wage.gc.ca, 1 feegg.com.br, 1 @@ -44513,6 +45231,7 @@ fehlerqultur.net, 1 fehngarten.de, 1 fehr-online.eu, 1 feigling.net, 0 +feignandfolly.tk, 1 feiki.tk, 1 feildel.fr, 1 feilen.de, 1 @@ -44537,6 +45256,7 @@ feld.saarland, 1 feldbogenclub-hamburg.de, 1 feldgut.de, 1 feldhousen.com, 1 +feldkirchen.tk, 1 feldmangallery.com, 1 felett.es, 1 felger-times.fr, 1 @@ -44550,6 +45270,7 @@ felipesexto.tk, 1 felipesuri.com, 0 feliratok.eu, 1 felis.com.mx, 1 +feliscatus.tk, 1 felistirnavia.sk, 1 felix-amez.tk, 1 felix-hirner.de, 1 @@ -44558,6 +45279,7 @@ felixadr.com, 0 felixaufreisen.de, 1 felixbarta.de, 1 felixbrand.de, 1 +felixbroekhuizen.tk, 1 felixc.at, 1 felixcabrol.com, 1 felixcrux.com, 1 @@ -44571,6 +45293,7 @@ felixmendez.com, 1 felixsanchez.tk, 1 felixschuermeyer.de, 1 felixseele.de, 1 +felixsworld.tk, 1 felixturgeon.ca, 1 felixvelarde.com, 1 felixweb.tk, 1 @@ -44612,6 +45335,7 @@ femmes.gc.ca, 1 femmesaupluriel.com, 1 femtomind.com, 1 fena.jp, 1 +fenagav.ga, 1 fenatrigo.com.br, 1 fence-stlouis.com, 1 fencekirkwood.com, 1 @@ -44629,15 +45353,18 @@ fengyi.tel, 1 fengying.co, 1 fenhl.net, 1 fenichelar.com, 1 +fenitriatnica.tk, 1 fenix-site.tk, 1 fenix-zone.tk, 1 fenixcorporative.tk, 1 fenixhost.com.br, 1 +fenixmetal.tk, 1 fenj.nl, 1 fenn.moe, 1 fennet.rentals, 1 fenns.co.za, 1 fennydewit.nl, 1 +fenom.ga, 1 fenotipo.com, 1 fenris.ovh, 1 fenritec.eu, 1 @@ -44646,6 +45373,8 @@ fenschui.ru, 1 fenster-bank.at, 1 fenster-bank.de, 1 fensterbau-mutscheller.de, 1 +feodosiya.cf, 1 +feodosiya.tk, 1 ferad.net, 1 feras-alhajjaji.com, 1 feraz.com.mx, 1 @@ -44661,6 +45390,7 @@ feridun.tk, 1 feriehus-danmark.no, 1 ferien-haus-mittelpunkt.de, 1 ferien-netzwerk.de, 1 +ferien-zweibruecken.tk, 1 ferienhaeuser-krummin.de, 1 ferienhaus-danemark-hund.de, 1 ferienhaus-danemark-privat.de, 1 @@ -44684,6 +45414,7 @@ ferluxilluminazione.it, 1 fermabel.com.br, 1 fermanacuratampaparts.com, 1 fermanaghomagh.com, 1 +fermastore.cf, 1 fermastore.tk, 1 fermateh.com.ua, 1 fermemarineau.com, 1 @@ -44691,11 +45422,13 @@ fermenting.studio, 0 fermier-mag.ro, 1 fernandes.org, 1 fernandezvilar.es, 1 +fernandoalonso.tk, 1 fernandob.com, 1 fernandobarata.pt, 1 fernandobarillas.com, 1 fernandomiguel.net, 1 fernandomorientes-zone.tk, 1 +fernandosuarez.cf, 1 fernatura.tk, 1 fernheim.com.py, 1 fernhowe.co.uk, 1 @@ -44746,25 +45479,33 @@ feseev.ml, 1 fespad.org.sv, 1 festaprylar.se, 1 festar.tk, 1 +festesuniversitaries.tk, 1 festin.tk, 1 festival-tipps.com, 1 festival-transform.com, 1 festival365.ml, 1 +festivaldays.tk, 1 festivaldecinedemallorca.tk, 1 festivaldelumieresgand.be, 1 festivaldelumieresgand.com, 1 festivaldimouamaroussiou.gr, 1 festivalesargentina.com, 1 +festivalfumo.tk, 1 festivalgourmet.com, 1 festivaljapon.com, 1 +festivalpopayan.tk, 1 +festivalsalmondeoro.tk, 1 +festivalsrit.tk, 1 festivitas.tk, 1 festrentcar.pl, 1 festx.co.za, 1 fetanbus.com, 1 +fetawerelddans.tk, 1 fetchease.com, 1 fetchmag.com, 1 fetchmonitors.com, 1 fetclips.se, 1 +fetichedecaramelo.tk, 1 fetih1453.tk, 1 fetish-x.com, 1 fetishbazar.cz, 1 @@ -44800,6 +45541,7 @@ fewo-thueringer-wald.de, 1 fewo-wildrosenpfad.de, 1 fewo32.de, 1 fexopay.com, 1 +fey-web.tk, 1 feyenoordrotterdam.tk, 1 feyenoordsite.tk, 1 feyenoordvakz.tk, 1 @@ -44950,15 +45692,18 @@ fietskr.at, 1 fietsvakman.nl, 1 fietsvierdaagsen.nl, 1 fifaaddict.com, 1 +fifacup.ga, 1 fifadimensions.tk, 1 fifafans.tk, 1 fifashions.com, 1 +fifastars.tk, 1 fifatournament.tk, 1 fifaultimatemod.tk, 1 fifemedicalgroup.co.uk, 1 fifr.nl, 1 fiftynorth.eu, 1 fiftyseven.media, 1 +fiftyshadesofgreyfullmovie.ga, 1 fiftyshadesofluca.ml, 1 fiftytalk.com, 1 fig.ms, 1 @@ -44968,6 +45713,8 @@ fightape.cf, 1 fightape.ga, 1 fightape.gq, 1 fightape.ml, 1 +fighter-planes.tk, 1 +fighting-turtle.tk, 1 fightinggobbler.com, 1 fightingshit.tk, 1 fightsupplies.co.uk, 0 @@ -44982,6 +45729,7 @@ figurasdelinguagem.com.br, 1 figure.nz, 1 figuro.la, 1 figuurzagers.nl, 0 +fihatest.ml, 1 fihclawgroup.com, 1 fiilr.com, 1 fiix.io, 1 @@ -45009,6 +45757,7 @@ filaretihairlove.gr, 1 filcosplay.tk, 1 file-cloud.eu, 1 file-pdf.it, 0 +file24.tk, 1 filebox.one, 1 filecopa.com, 1 filedesc.com, 1 @@ -45019,6 +45768,7 @@ filehorsefile.com, 1 filehosted.net, 1 fileio.io, 1 filejet.io, 1 +filek.ga, 1 fileon.com, 1 fileplanet.com, 1 filepunks.com, 1 @@ -45045,6 +45795,8 @@ filiotech.com, 1 filip-prochazka.com, 0 filipdima.ro, 0 filipi.no, 1 +filipinasdailynews.tk, 1 +filipinochinese.tk, 1 filipinostaff.uk, 1 filippo.io, 1 filippoberio.co.uk, 1 @@ -45064,6 +45816,7 @@ filmarchiv-sachsen.de, 1 filmatiporno.xxx, 1 filmbabasi.net, 1 filmbasar.com, 1 +filmbest.tk, 1 filmcorner.tk, 1 filmdates.co.uk, 1 filmdirectingtips.com, 1 @@ -45075,6 +45828,7 @@ filmfog.ga, 1 filmisfun.com, 1 filmisfun.net, 1 filmitis.com, 1 +filmizleindir.tk, 1 filmkode.com, 1 filmnet.pl, 1 filmnetz.tk, 1 @@ -45088,9 +45842,11 @@ filmserver.de, 1 filmsidan.tk, 1 filmsite-studio.com, 1 filmtheaternieuwegein.tk, 1 +filmwallpapers.ml, 1 filobot.xyz, 1 filokiralama.name.tr, 1 filosofare.tk, 1 +filosofia.tk, 1 filoxenia.io, 1 filpromer.com, 1 filstop.com, 1 @@ -45102,6 +45858,7 @@ filthyapartmenters.ga, 1 filthyapartmentest.ga, 1 filtr.me, 1 fimfiction.net, 1 +fimozin.ga, 1 fimp.pt, 1 fimsquad.com, 1 fina-foxy.com, 1 @@ -45112,6 +45869,7 @@ final-x.com, 1 finalashes.tk, 1 finalfate.tk, 1 finalfoursteam.tk, 1 +finalfourstream.tk, 1 finalgambit.band, 1 finalleopard.tk, 1 finalmenteazul.pt, 1 @@ -45165,6 +45923,7 @@ finanzwende-recherche.de, 1 finapi.io, 1 finaster.com.br, 1 finax.eu, 1 +finbio.cf, 1 fincas-ruiz.com, 1 finch.am, 1 finch.ga, 1 @@ -45172,11 +45931,13 @@ finchi.de, 1 finchkeeper.com, 1 finchnest.co.uk, 1 fincitegroup.com, 1 +fincities.tk, 1 find-mba.com, 1 findahero.com.au, 1 findairconditioningers.ga, 1 findairconditioningest.ga, 1 findapinball.com, 1 +findautoloan.ml, 1 findbalancedliving.com, 1 findcanary.com, 1 findcasinos.net, 1 @@ -45200,6 +45961,7 @@ finditez.com, 1 findlayohio.gov, 1 findlimitsers.ga, 1 findlocalproduce.co.uk, 1 +findmail.ga, 1 findme.partners, 1 findmentalhealth.co.uk, 1 findmespot.com, 1 @@ -45213,6 +45975,7 @@ findoon.de, 1 findpetproducts.com, 1 findrejsepartner.dk, 1 findsalmonest.ga, 1 +findsingledating.ml, 1 findstorenearme.ca, 1 findstorenearme.co.uk, 1 findstorenearme.us, 1 @@ -45240,6 +46003,8 @@ finesoon.net, 1 finestblingers.ga, 1 finestblingest.ga, 1 finestinfo.com, 1 +finestrabatalera.tk, 1 +finestreview.cf, 1 finestrina.net, 1 finex.by, 1 finexo.ch, 1 @@ -45248,6 +46013,7 @@ finfleet.id, 1 finform.ch, 1 fingerscrossed.style, 1 fingertight.ga, 1 +finhelp.ga, 1 fini-de-jouer.ch, 0 finilaviolence.gc.ca, 1 finion.com, 1 @@ -45270,6 +46036,7 @@ finnjumping.tk, 1 finnkupongkoder.no, 1 finnwea.com, 0 finom.co, 1 +finpomosh.gq, 1 finprison.net, 1 finpt.com, 0 finqk.nl, 1 @@ -45306,6 +46073,7 @@ fiosgenomics.com, 1 fioulmarket.fr, 1 fipackaging.com, 1 fipo.life, 1 +fipq.tk, 1 fir.ch, 1 firatcakir.com.tr, 1 firatofm.tk, 1 @@ -45321,6 +46089,7 @@ firebaseio.com, 1 firebirdrangecookers.com, 1 firebounty.com, 1 fireboxfood.com, 1 +firebrandchurch.com, 1 firecask.com, 1 firechip.cc, 1 firechip.srl, 1 @@ -45351,6 +46120,7 @@ fireoakstrategies.com, 1 fireplex.co.uk, 1 fireportal.cz, 1 fireportal.sk, 1 +fireradio.tk, 1 firerain.me, 1 fireservicerota.co.uk, 1 fireshellsecurity.team, 1 @@ -45392,6 +46162,7 @@ firmground.nl, 1 firmkernel.tk, 1 firmware.science, 1 firobe.fr, 1 +firouz.tk, 1 firsov.gq, 1 first-aid-kit.net, 0 first-house.no, 1 @@ -45402,6 +46173,7 @@ first-time-offender.com, 1 first.org, 1 first4it.com, 1 firstbaptistchurchofchrist.org, 1 +firstbooks.ml, 1 firstcentralsavings.com, 1 firstchoicebouncycastlehire.co.uk, 1 firstchoicefriseur.at, 1 @@ -45410,9 +46182,11 @@ firstchurchmn.org, 1 firstclass.com.kh, 1 firstclasscastles.com, 1 firstclassleisure.co.uk, 1 +firstclassnuisance.tk, 1 firstclinic.tk, 1 firstcoastsir.com, 1 firstcoastteaco.com, 1 +firstcolonyengraving.com, 1 firstcontact.cf, 1 firstderm.com, 1 firstdry.com.br, 1 @@ -45421,12 +46195,15 @@ firstfinca.de, 1 firstgov.gov, 1 firstgradeframeofmind.com, 1 firstlayout.net, 1 +firstlightinspirations.tk, 1 firstload.tk, 1 firstmall.de, 1 firstmarket.tech, 1 firstname.tk, 1 firstnet.gov, 1 +firstnetwork.cf, 1 firstphilec.com, 1 +firstplace.ga, 1 firstq.xyz, 1 firstqa.com, 1 firstresponder.gov, 1 @@ -45436,6 +46213,7 @@ firsttimeround.tk, 1 firsttimeshopperers.ga, 1 firsttimeshopperest.ga, 1 firstversionist.com, 1 +firstwebring.tk, 1 firtreetechnology.co.uk, 1 fis.io, 1 fisa.net.za, 1 @@ -45456,7 +46234,9 @@ fishbattle.io, 1 fishbattle.net, 1 fishcorp.dk, 1 fishergo.ml, 1 +fishergo.tk, 1 fishermailbox.net, 1 +fisherman-union.ml, 1 fishermansbend.apartments, 1 fishermansbendcorporation.com.au, 1 fishermansbendtownhouses.com.au, 1 @@ -45476,6 +46256,7 @@ fishtacos.blog, 1 fishtank.ga, 1 fishycam.com, 1 fishygames.ml, 1 +fishyscans.tk, 1 fishystuff.cf, 1 fisinfomanagerdr.com, 1 fisiobox.eu, 1 @@ -45508,6 +46289,7 @@ fite.family, 0 fitecleaningservices.com, 1 fitekin.com, 1 fitequilibrio.com.br, 1 +fitflaop.ga, 1 fitfocusau.com.au, 1 fitfoodfab.nl, 1 fitgirl-repacks.site, 1 @@ -45517,8 +46299,9 @@ fitkram.cz, 1 fitleads.nl, 1 fitmeat.at, 1 fitmommyinheels.com, 1 -fitmybike.eu, 1 +fitmybike.eu, 0 fitness-challenge.co.uk, 1 +fitness-world.ga, 1 fitness.gov, 1 fitnessbest.com, 1 fitnesshaber.com, 1 @@ -45556,6 +46339,7 @@ fivetecnologia.com, 1 fivethirtyeight.com, 1 fiveyearsahead.com, 1 fix-css.com, 1 +fix-ru.ga, 1 fix-the-timeline.com, 1 fix-the-timeline.org, 1 fix.mk, 1 @@ -45656,6 +46440,7 @@ flagpedia.net, 1 flagriculture.gov, 1 flagspot.net, 0 flagstone-magazin.ro, 0 +flagyl-500-mg.ga, 1 flair.nl, 1 flairfindr.com, 1 flam.io, 1 @@ -45664,9 +46449,11 @@ flamehaze.tk, 1 flamencoexplained.com, 0 flamencoshoes.tk, 1 flamengopi.tk, 1 +flamentecnic.tk, 1 flameofthoughts.tk, 1 flamer-scene.com, 0 flamet.eu, 0 +flameviper.tk, 1 flamingcow.tv, 1 flaminggorgefireandems.gov, 1 flamingkeys.com, 1 @@ -45689,15 +46476,19 @@ flarewalker.com, 1 flarewalker.eu, 1 flarewalker.net, 1 flarewalker.org, 1 +flart.tk, 1 flarumtr.com, 1 flasaki.gr, 1 +flash-games.tk, 1 flashback.org, 1 +flashbackband.tk, 1 flashbaggie.com, 1 flashbeat.tk, 1 flashcardsmobile.com, 1 flashcover.com.br, 1 flashcrasher.com, 1 flasheschile.tk, 1 +flashgamedev.tk, 1 flashgot.net, 1 flashigra.tk, 1 flashissue.com, 1 @@ -45742,6 +46533,7 @@ flawed.world, 1 flawedworld.com, 1 flawless-gaming.tk, 1 flawlesscowboy.xyz, 1 +flawlessly.tk, 1 flawlessweddings.nl, 1 flayla.tk, 1 flblog.top, 0 @@ -45791,11 +46583,13 @@ fleshtone.tk, 1 fleshwound.tk, 1 fletcherdigital.com, 1 fletcherdoescrime.com, 1 +fletchmusic.tk, 1 fletesymudanzasbaratas.com, 1 flets-ms.com, 1 fleurdelune.it, 1 fleurenplume.fr, 1 fleurette.me, 1 +fleuromance.ga, 1 fleursdesoleil.fr, 0 fleursdujour.ph, 1 fleuryfleury.com, 1 @@ -45809,6 +46603,7 @@ flexi-dance.pl, 1 flexiblenetflow.com, 1 flexibsd.com, 1 flexicano.nl, 1 +flexicurity.tk, 1 fleximus.org, 0 flexingpro.com, 1 flexinvesting.fi, 0 @@ -45826,7 +46621,9 @@ flfl.de, 1 flhealthcharts.gov, 1 fliacuello.com.ar, 1 flibanserina.com, 1 +flicerdowneh.cf, 1 flicke.red, 1 +flickor.tk, 1 flicks2click.com, 1 flie.co.jp, 1 flieger-funk-runde.de, 1 @@ -45836,6 +46633,8 @@ flightacademy-memmingen.com, 1 flightcheapfares.com, 1 flightdiary.cf, 1 flightdiary.ga, 1 +flightdiary.gq, 1 +flightjackets.tk, 1 flightscarhire.com, 1 flightschoolbooking.com, 1 flightschoolcandidates.gov, 1 @@ -45850,6 +46649,7 @@ fliino.info, 1 fliino.net, 1 fliino.org, 1 flikmsg.co, 1 +flimnet.tk, 1 flinch.io, 1 fling.dating, 1 flingflong.com, 1 @@ -45860,13 +46660,16 @@ flip-flop.tk, 1 flip.kim, 1 flip.lease, 1 flipin.ga, 1 +flipmusic.tk, 1 flipneus.net, 1 flipos.be, 0 flipperkast.tk, 1 +flipphotography.ga, 1 flipping.land, 0 flipsidevr.com, 1 fliptable.org, 1 flipthebrain.com, 1 +flipweb.tk, 1 flirt-norden.de, 1 flirtbox.tk, 1 flirtee.net, 1 @@ -45888,6 +46691,7 @@ flixstats.com, 1 floart.tk, 1 floatationlocations.com, 1 floaternet.com, 1 +floatifnghotel.cf, 1 floatifnghotel.ga, 1 floatifnghotel.tk, 1 floating-holidays.co.uk, 1 @@ -45912,6 +46716,7 @@ flomeyer.de, 1 floneo.fr, 1 flonharmonymassage.space, 1 floobits.com, 1 +floodboss.ml, 1 flooddoctorva.com, 1 floodguypro.com, 1 floodheroessaltlakecity.com, 1 @@ -45931,6 +46736,7 @@ floort.net, 1 floosak.co, 1 flop.tk, 1 floppomoppo.ml, 1 +floppy.tk, 1 floqast.com, 1 flora-nova.tk, 1 floraclick.net, 1 @@ -45946,6 +46752,7 @@ floravino.de, 1 floreg.com, 1 florencecountywi.gov, 1 florencewi.gov, 1 +florenciaextrema.tk, 1 florenciasabio.com, 1 florent-tatard.fr, 1 floresastrid.tk, 1 @@ -45968,6 +46775,7 @@ florianstroeger.tk, 1 floriantanner.ch, 1 florianysantiago.com, 1 florida-estetica.com, 1 +florida-online.tk, 1 florida-prep.org, 1 floridaagriculture.gov, 1 floridaconsumerhelp.gov, 1 @@ -45991,6 +46799,7 @@ floridastatefairauthority.com, 1 floridaweightlossdoctors.com, 1 floriebriand.com, 1 floriimorii.tk, 1 +floris.tk, 1 florismouwen.com, 1 florismouwen.nl, 1 floristik-online.com, 1 @@ -46023,6 +46832,7 @@ flowdise.com, 1 flowercare.tk, 1 flowercityflavor.com, 1 flowerdelivery.tk, 1 +flowerdesign.tk, 1 flowerpassword.com, 1 flowerpictures.tk, 1 flowers-city.com.ua, 0 @@ -46086,8 +46896,10 @@ fluidpicturesinc.com, 1 fluids.ac.uk, 1 fluig.com, 1 fluitbeurt.nl, 1 +flukestar.tk, 1 flumble.nl, 1 flunschi.goip.de, 1 +fluoxetin.ga, 1 fluoxetin.gq, 1 fluoxetin.tk, 1 fluoxetine.ml, 1 @@ -46102,6 +46914,7 @@ fluxforge.com, 1 fluxi.fi, 1 fluxnet.tk, 1 fluxoid.com, 1 +flvyingeagle.ga, 1 flwrightwichita.org, 1 flws.cl, 1 fly, 1 @@ -46126,15 +46939,19 @@ flyfifer.co.uk, 1 flygexpo.tk, 1 flygon.pink, 1 flyhealthy.gov, 1 +flying-angels.tk, 1 flying-dudes.de, 1 flying-press.com, 1 +flyingangels.cf, 1 flyingbasicsest.ga, 1 flyingcolours.tk, 1 flyingdoggy.net, 1 flyingdreamers.com, 1 +flyingdutchman.tk, 1 flyinghigh.co.jp, 1 flyinghigh.tk, 1 flyinglions.tk, 1 +flyingmonkeys.tk, 1 flyingpackets.net, 1 flyingpotatoes.tk, 1 flyingspaghettimonsterdonationsfund.nl, 1 @@ -46153,6 +46970,7 @@ flypuntoazul.gq, 1 flyseasons.com, 1 flyserver.co.il, 1 flyspace.ga, 1 +flyspace.ml, 1 flyss.net, 1 flyssh.net, 1 flyswoop.com, 1 @@ -46162,10 +46980,12 @@ flythecopter.tk, 1 flytoadventures.com, 1 flytrap.in, 1 flyupture.com, 1 +flywind.ml, 1 flyxll.com, 1 flyzone.tk, 1 flyzoomattzir.com, 1 fm-digitize.de, 1 +fm-online.tk, 1 fm-panel.tk, 1 fm.ie, 1 fmamfg.org, 1 @@ -46201,6 +47021,7 @@ fndout.com, 1 fneon.eu, 1 fnerk.org, 1 fnet.gr, 1 +fnews.tk, 1 fnh-expert.net, 1 fnka.de, 1 fnkr.net, 1 @@ -46217,6 +47038,7 @@ foard.biz, 1 foard.us, 1 fob-china-moscow.ru, 1 focalforest.com, 1 +focalpoint.tk, 1 focalpointvr.com, 1 focanamoda.com.br, 1 focanocliente.com.br, 1 @@ -46231,6 +47053,9 @@ focusgroup.tk, 1 focushm.com, 1 focusministries1.org, 1 focusoptimization.com, 1 +focusproductions.tk, 1 +focustec.tk, 1 +focustuningclub.tk, 1 fodder.ga, 1 foej-aktiv.de, 1 foej.net, 1 @@ -46258,6 +47083,8 @@ fokep.no, 1 fokos.de, 0 fokus.ag, 1 fol.tf, 1 +folar.ga, 1 +folclore.tk, 1 foldcle.com, 1 foldnfly.com, 1 foleon.com, 1 @@ -46345,13 +47172,16 @@ foodbody.ga, 1 foodbounce.ga, 1 foodboy.com, 1 foodbrowse.ga, 1 +foodbrowser.ga, 1 foodbuddies.ga, 1 foodbuller.ga, 1 foodcamel.ga, 1 +foodcaster.ga, 1 foodcheaper.ga, 1 foodcheapest.ga, 1 foodclearance.ga, 1 foodclient.ga, 1 +foodcollections.ga, 1 foodcollector.ga, 1 foodcorporation.ga, 1 foodcourier.ga, 1 @@ -46377,6 +47207,7 @@ foodev.de, 1 foodexcel.ga, 1 foodfalcon.ga, 1 foodfeature.ga, 1 +foodflower.ga, 1 foodfriek.nl, 1 foodgecko.ga, 1 foodglamour.ga, 1 @@ -46398,6 +47229,7 @@ foodjaguar.com, 1 foodjoker.ga, 1 foodkayak.ga, 1 foodlast.ga, 1 +foodless.ga, 1 foodlicious.ml, 1 foodlightning.ga, 1 foodlimited.ga, 1 @@ -46410,10 +47242,12 @@ foodlucky.ga, 1 foodmatche.ga, 1 foodmeasure.ga, 1 foodmillions.ga, 1 +foodminer.ga, 1 foodnachos.com, 1 foodnations.ga, 1 foodnature.ga, 1 foodnature.tk, 1 +foodnight.ga, 1 foodoffline.ga, 1 foodomega.ga, 1 foodonbook.com, 1 @@ -46430,12 +47264,14 @@ foodpermanent.ga, 1 foodplatinum.ga, 1 foodplum.ga, 1 foodpresident.ga, 1 +foodprestige.ga, 1 foodpronto.ga, 1 foodquantum.ga, 1 foodrainforest.ga, 1 foodrapid.ga, 1 foodrates.ga, 1 foodremarkable.ga, 1 +foodrex.ga, 1 foodrhino.ga, 1 foodrings.ga, 1 foodrips.com, 1 @@ -46464,10 +47300,12 @@ foodsurreal.ga, 1 foodsustain.ga, 1 foodtable.at, 1 foodtimeline.org, 1 +foodtrekker.tk, 1 foodtruck.ai, 1 foodtruckconnections.com, 1 foodtrucksnorthwest.com, 1 foodtummy.com, 1 +foodurban.ga, 1 foodusa.cf, 1 foodusa.ga, 1 foodusa.gq, 1 @@ -46475,6 +47313,7 @@ foodverde.ga, 1 foodwaterfront.ga, 1 foodwidget.ga, 1 foodwise.marketing, 1 +foodwish.ga, 1 foodyankee.ga, 1 foodylab.it, 1 foodzpace.com, 1 @@ -46488,18 +47327,27 @@ fooster.io, 1 foot.fr, 1 foot2rue.tk, 1 footasse.com, 1 +football-news.gq, 1 +football-world.tk, 1 football.de, 1 footballcelebrationsers.ga, 1 footballforum.de, 1 footballmessi.tk, 1 +footballrussia.cf, 1 +footballscores.ga, 1 footballsrit.tk, 1 footballtips.tk, 1 +footbolka.tk, 1 +footbolki.ml, 1 footchronique.tk, 1 footdoctorpodiatristnyc.com, 1 footlettuce.xyz, 1 footmercato.net, 1 +footwear-catalogue.tk, 1 footytalk.tk, 1 +for-testing.tk, 1 for.care, 1 +forabrokenrobot.tk, 1 forat.tk, 1 foray-jero.me, 1 foraz.tk, 1 @@ -46548,8 +47396,11 @@ forefrontcloud.com, 1 foreign-language-colleges.com, 1 foreignpharmacydirectory.com, 1 foreignxchange.com.au, 1 +foremail.tk, 1 forenschmiede.tk, 1 forensic-system.com, 0 +forensicsciencecentral.tk, 1 +forensicsinfo.ga, 1 forensicsinfoest.ga, 1 forensischepsychiatrie.tk, 1 forers.com, 1 @@ -46563,6 +47414,7 @@ foresthaven.tk, 1 forestparkga.gov, 1 forestraven.net, 1 foresttownrcwi.gov, 1 +forever.gq, 1 foreverbreak.com, 1 forevermuslim.in, 1 foreverpontiac.com, 1 @@ -46572,12 +47424,15 @@ foreversummertime.com, 1 forevertoday.nl, 1 foreverydream.com, 1 forewordreviews.com, 1 +forex-arabia.tk, 1 forex-giants.com, 1 forex-site.com, 1 forex-trading-tutorial.tk, 1 +forex-up.cf, 1 forex.ee, 1 forexarby.com, 1 forexchef.de, 1 +forexcity.cf, 1 forexclubteam.com, 1 forexcomreview.co, 1 forexee.com, 1 @@ -46586,12 +47441,14 @@ forexinthai.com, 0 forexmarketsm.tk, 1 forexnew.org, 1 forexox.com, 1 +forexpattern.tk, 1 forexplay.com, 1 -forexsignalroom.com, 1 forexsignals7.com, 1 forextickler.com, 1 forextraders.com, 1 forexwine.com, 1 +forexworld.cf, 1 +forfeit.ga, 1 forfeiture.gov, 1 forfortcollins.com, 1 forfunssake.co.uk, 1 @@ -46615,6 +47472,7 @@ forkurd.ml, 1 forlitoday.it, 1 formacao.org.br, 1 formador.tk, 1 +formalgrammar.tk, 1 formalist.cz, 1 formality.one, 1 forman.store, 1 @@ -46638,6 +47496,7 @@ formforger.com, 1 formhub.ru, 1 formi9.com, 1 formingequipment.tk, 1 +formini.dz, 1 formio.nl, 1 formodernkids.com, 1 formommiesbymommy.com, 1 @@ -46669,18 +47528,22 @@ forodebanfield.tk, 1 forodeespanol.com, 1 forodieta.com, 0 foroenguera.tk, 1 +forojovensanfernando.tk, 1 forologikidilosi.com.gr, 1 foromasters.tk, 1 foropl.com, 0 forosdelmisterio.tk, 1 forourselves.com, 1 +forowarhammer.tk, 1 forrestheller.com, 1 forrestwalkbarbershop.com.au, 1 forro.berlin, 1 forro.info, 1 +forsaken.tk, 1 forsakenplanet.tk, 1 forsakenstoners.tk, 1 forsakringsarkivet.se, 1 +forsaleacameras.tk, 1 forsaleelectronics.tk, 1 forsaleinedmonton.ca, 1 forsat.ga, 1 @@ -46708,6 +47571,7 @@ fortdeposital.gov, 1 fortdodgeradio.com, 1 fortebet.rw, 1 fortebet.ug, 1 +fortepiano.tk, 1 fortesanshop.it, 1 forthenrycustomknives.com, 1 forthetoys.com, 1 @@ -46741,6 +47605,7 @@ fortuna-loessnitz.de, 1 fortuna-s.com, 1 fortuna.co.ua, 1 fortunabuilders.tk, 1 +fortunacigarettes.tk, 1 fortunahamburg.tk, 1 fortune-healing.com, 1 fortunebazar.tk, 1 @@ -46749,20 +47614,29 @@ fortunenames.ga, 1 fortunenamesers.ga, 1 fortunenamesest.ga, 1 fortwinn.gov, 1 +forty-two.ml, 1 forty-two.nl, 1 forty.sh, 1 forty8creates.com, 1 fortygordy.com, 1 fortytwo.cloud, 1 +fortytwo.tk, 1 forum-4.de, 1 forum-batteries.com, 1 +forum-egypte.tk, 1 forum-expert.tk, 1 forum-finansowo.pl, 1 forum-gilee.cf, 1 forum-kinozal-tv.appspot.com, 1 forum-mercury.tk, 1 forum-noginska.tk, 1 +forum-reklamowe.cf, 1 +forum-tutorapide.ml, 1 +forum-tw.tk, 1 +forum-washington.tk, 1 +forum24.ml, 1 forumblanes.tk, 1 +forumcarriocity.tk, 1 forumchiase.com, 1 forumdabeleza.com.br, 1 forumdimo.fr, 1 @@ -46775,10 +47649,13 @@ forumistudentore.tk, 1 forumix.tk, 1 forumoff.com, 1 forumofld.in, 1 +forumotion.cf, 1 forumotomobil.com, 0 forumpakistan.tk, 1 forumpenaguru.com, 1 forumrowerowe.org, 1 +forums4everyone.tk, 1 +forumsampdoria.tk, 1 forumsearch.tk, 1 forumsrussia.ga, 1 forumstandaardisatie.nl, 1 @@ -46788,7 +47665,7 @@ forve.cf, 1 forvisualdesign.com, 0 forward-fly-fishing.ch, 0 forward-proxy.email, 1 -forward.com, 1 +forward.com, 0 forwardemail.net, 1 forwardfever.tk, 1 forwardfinancingest.ga, 1 @@ -46819,10 +47696,14 @@ foster.ga, 1 fosteringconsultant.com, 1 fosters.ky, 1 fosterwiki.com, 1 +fotbal-dubina.tk, 1 +fotbalclubcaracal.tk, 1 fotella.com, 1 foter.tk, 1 fotikpro.ru, 1 fotklinikenvarnamo.se, 1 +foto-forum.tk, 1 +foto-gallery.tk, 1 foto-huwi.ch, 1 foto-janvanaefst.nl, 1 foto-leitner.com, 1 @@ -46831,6 +47712,7 @@ foto-na-doc.ru, 1 foto-robitsch.at, 1 foto-roma.ru, 1 foto-verslui.lt, 1 +foto-znakomstva.ml, 1 foto.by, 1 fotoallerlei.com, 1 fotoblog.nrw, 1 @@ -46849,6 +47731,7 @@ fotografechristha.nl, 1 fotografessa.pl, 1 fotografiadellalucerossa.com, 1 fotografiarte.com.es, 1 +fotografies.tk, 1 fotografija.tk, 1 fotografoivanalmeida.com.br, 1 fotohiking.com, 1 @@ -46857,12 +47740,15 @@ fotojenico.com, 1 fotokomorkomania.pl, 1 fotokorner.com, 1 fotokurskalmar.se, 1 +fotolectura.tk, 1 fotoleitner.com, 1 fotoleitner.de, 1 +fotomodel.cf, 1 fotomodels.tk, 1 fotomonza.com, 1 fotontechnik.pl, 1 fotonza.ru, 1 +fotopalacedigitalstudio.tk, 1 fotopremium.cz, 1 fotopro.tk, 1 fotorecull.tk, 1 @@ -46870,9 +47756,11 @@ fotostravestisbr.com, 1 fotostudio-leitner.com, 1 fotostudio-leitner.de, 1 fotostudio-schweiz.ch, 1 +fotostudiobasic.tk, 1 fotosubmarina.tk, 1 fototjansterkalmar.se, 1 fototutorial.tk, 1 +fotovsibiri.ml, 1 fotowand.ml, 1 fotowettbewerb.co, 0 fotowolfy.com, 1 @@ -46925,9 +47813,11 @@ fourstrategy.de, 1 fourwaysplumber24-7.co.za, 1 fourwaysrubbleremovals.co.za, 1 fousekis.tk, 1 +fousetmoney.tk, 1 foutrelis.com, 1 fouwels.com, 1 fovndry.com, 1 +fowlmanor.tk, 1 fowlsmurf.net, 1 fowos.de, 1 fox-zulu.de, 1 @@ -46937,9 +47827,11 @@ foxbenjaminfox.com, 1 foxbnc.co.uk, 1 foxbnc.uk, 1 foxcav.es, 1 +foxcloud.tk, 1 foxcon.tk, 1 foxdemos.ml, 1 foxdev.co, 1 +foxdirectory.tk, 1 foxes.no, 1 foxesofleicester.com, 1 foxeworks.net, 1 @@ -46958,9 +47850,11 @@ foxroy.com, 1 foxsburg.xyz, 1 foxscribbler.com, 1 foxstreetcomms.co.za, 0 +foxstyle.gq, 1 foxtransportables.com.au, 1 foxtrials.com, 1 foxtrotcharlie.ovh, 1 +foxtrotfm.tk, 1 foxxylove.net, 1 foxydaisy.love, 1 foxyslut.com, 1 @@ -46978,6 +47872,7 @@ fpgamania.com, 1 fpgaretro.com, 1 fpki.sh, 1 fpline.jp, 1 +fpnet.tk, 1 fppp.fr, 1 fprinnovaciones.es, 1 fprojects.lv, 1 @@ -47009,6 +47904,9 @@ fragara.com, 1 fragclub.tk, 1 fragdenstaat.de, 1 frageboegen-martini-klinik.de, 1 +fragilesolar.cf, 1 +fragmentation.ml, 1 +fragments.ga, 1 fragmentspuren.de, 1 fragmentus.tk, 1 fragnation.tk, 1 @@ -47018,6 +47916,7 @@ fraho.eu, 1 frahub.com, 1 frail.gq, 1 fralef.me, 0 +fralippolippi.tk, 1 frama.link, 1 frama.site, 1 frama.wiki, 1 @@ -47088,7 +47987,9 @@ francabellarsi.tk, 1 francaispornofilm.com, 1 france-cartouches.fr, 1 france-hotellerie-restauration.com, 1 +france-news.cf, 1 france-orchidees.org, 1 +franceactivetravel.cf, 1 franceactivetravel.ml, 1 francebattery.com, 1 francelight.fr, 1 @@ -47100,6 +48001,7 @@ francescorandazzo.tk, 1 francescorenna.tk, 1 francescosbistro.com, 1 francescosiciliano.tk, 1 +francesfluente.cf, 1 franceskivillas.tk, 1 francetraceur.fr, 1 franchini.email, 1 @@ -47199,6 +48101,7 @@ franziskaherbert.de, 1 franzknoll.de, 1 franzoni.eu, 1 franzt.ovh, 1 +franzters.tk, 1 fraor.org, 1 fraplaster.com, 1 frappant.cc, 1 @@ -47233,9 +48136,11 @@ fratreunionest.ga, 1 frattaroli.org, 1 frau-pusteblu.me, 1 frau-sucht-bauer.de, 1 +frau.gq, 1 fraud.sbs, 1 fraudpoders.ga, 1 fraudpodest.ga, 1 +fraudswatch.tk, 1 frauen-etappenrennen.de, 1 frauenaerztin-wedel.de, 1 frauenarzt-zinke.de, 1 @@ -47299,6 +48204,7 @@ fredbarboo.ml, 1 freddieleeman.nl, 1 freddieonfire.tk, 0 freddo.tk, 1 +freddyhasderyk.tk, 1 freddyjs.com, 1 freddythechick.net, 1 freddyvasquez.com, 1 @@ -47308,7 +48214,9 @@ fredericfrancois.com, 1 frederickearlstein.com, 1 frederickmd.gov, 1 frederikbethkeviolins.com, 1 +frederikugarte.tk, 1 frederikvig.com, 1 +fredhook.tk, 1 fredjanssen.tk, 1 frednet.tk, 1 fredoum.fr, 1 @@ -47321,8 +48229,10 @@ fredz.eu, 1 free-barcode-generator.net, 1 free-bitco.ml, 1 free-cms.tk, 1 +free-generate.tk, 1 free-lancer.ml, 1 free-nation.tk, 1 +free-obmen.ml, 1 free-ppp.jp, 1 free-quotes.info, 1 free-rein.net, 1 @@ -47334,6 +48244,7 @@ free-traff.cf, 1 free-watching.ga, 1 free-webtv.tk, 1 free4allsw.com, 1 +free6to12yo.gq, 1 free8.xyz, 1 freeadvertisingexchange.com, 1 freeaf.gq, 1 @@ -47341,9 +48252,11 @@ freeagent.tk, 1 freeartico.ga, 1 freeassange.net, 1 freeauction.tk, 1 +freeauroraoperations.tk, 1 freebacklinksforyoudirectory.tk, 1 freebasics.com, 1 freebcard.com, 1 +freebegames.tk, 1 freeben666.fr, 1 freebetoffers.co.uk, 1 freebetonthegrandnational.com, 1 @@ -47369,9 +48282,11 @@ freecookies.nl, 1 freecorner.tk, 1 freecottage.fr, 1 freecoursepage.net, 1 +freecrypt.ga, 1 freedatesite.ml, 1 freedatesites.cf, 1 freedatingonline.ml, 1 +freedeals4u.ga, 1 freedev.cz, 1 freediomatiq.com, 0 freedirectory.tk, 1 @@ -47396,10 +48311,12 @@ freedomrahoitus.fi, 1 freedomsaukwi.gov, 1 freedomtoolkit.com, 1 freedomvote.nl, 1 +freedomwill.tk, 1 freedomworldoutreach.com, 1 freeebooksblog.com, 1 freeenglishhelp.com, 1 freeexampapers.com, 1 +freefallproductions.tk, 1 freefilesync.org, 1 freefincal.com, 1 freefonts.ga, 1 @@ -47410,7 +48327,6 @@ freegutters.com, 1 freehdporn.tv, 1 freehotline.ru, 1 freehqporno.com, 1 -freeiconspng.com, 1 freeinet.cf, 1 freeinet.tk, 1 freeinfos.fr, 1 @@ -47432,6 +48348,8 @@ freelanceunleashed.com, 0 freelancewebprogrammer.com, 1 freelansir.com, 1 freeliferp.de, 1 +freemagi.ga, 1 +freeman-online.tk, 1 freeman-toyota.com, 1 freemania.nl, 1 freemanlogistics.com, 1 @@ -47443,8 +48361,11 @@ freemazes.tk, 1 freemchosting.tk, 1 freeme.gq, 1 freemilf.org, 1 +freeminecraftmaps.tk, 1 freeministryresources.org, 1 freemomhugs.org, 1 +freemotion.tk, 1 +freemovieonline.ga, 1 freemyipod.org, 1 freend.me, 0 freenetflow.com, 1 @@ -47453,6 +48374,7 @@ freenome.com, 1 freenome.net, 1 freenomyoulilb.tk, 1 freeo.cf, 1 +freeonlinearticles.tk, 1 freeonplate.com, 1 freeparks.co.uk, 1 freepastlife.com, 1 @@ -47469,10 +48391,12 @@ freepornxxxvids.com, 1 freepro.fr, 1 freepron.xyz, 1 freeradical.zone, 1 +freereal.ml, 1 freerealincest.com, 1 freergform.org, 1 freertomorrow.com, 1 freerun.cn, 0 +freeschool.cf, 1 freesexvideo.pro, 1 freesexvidz.com, 1 freeshell.de, 1 @@ -47490,13 +48414,16 @@ freesourcestl.org, 1 freespace.info, 1 freespanlift.com, 1 freespeech.org, 1 +freesports.ml, 1 freesquare.net, 1 freesteam.net, 1 freesteam.org, 1 freestylemartialarts.tk, 1 freesunday.tk, 1 +freetagboards.tk, 1 freetamco.com, 1 freetaxusa.com, 1 +freetelegraph.ga, 1 freetelegraphers.ga, 1 freetext.org, 1 freethetv.ie, 1 @@ -47506,8 +48433,10 @@ freethought.org, 1 freeths.co.uk, 1 freetimefun.tk, 1 freetokill.tk, 1 +freetrung.tk, 1 freetsa.org, 1 freeuseporn.org, 1 +freevisits.tk, 1 freewarez.org, 1 freewebh0st.tk, 1 freeweibo.com, 1 @@ -47526,6 +48455,7 @@ freezerrepairaustin.com, 1 freezoneplan.com, 1 freezvon.com, 1 frei.social, 1 +freibesetzt.tk, 1 freiboth.ddns.net, 1 freie-software.net, 1 freifahrt.de, 1 @@ -47549,6 +48479,7 @@ freizeitpark.tk, 1 freizeitplaza.de, 1 frejasdal.dk, 1 frekans.tk, 1 +frekat.tk, 1 fremontcountyia.gov, 1 fremontfire.gov, 1 fremonthills.gov, 1 @@ -47561,19 +48492,24 @@ frenchmac.com, 1 frenchmusic.fr, 1 frenchtownmi.gov, 1 frenchvandal.com, 0 +frendamos-roleplay.ml, 1 frendle.tech, 1 frenetic.lv, 1 frente-popular.tk, 1 frenzel.dk, 1 frequencebanane.ch, 0 frequencymc.cc, 1 +frequentlyaskedquestions.cf, 1 frequenttraveller.com.au, 1 freres-marchand.fr, 1 fresadora.online, 1 fresadorasytornos.com, 1 fresar-engineering.nl, 1 frescamezcla.tk, 1 +frescobol.tk, 1 fresh-hotel.org, 1 +fresh-info.cf, 1 +fresh-info.tk, 1 fresh-networks.net, 1 fresh.co.il, 1 fresh4.co.uk, 1 @@ -47585,8 +48521,11 @@ freshdesignweb.com, 0 freshdesk-apps-by-invantive.com, 1 freshdns.nl, 1 freshempire.gov, 1 +freshersworld.ml, 1 +fresherwalkins.tk, 1 freshfishdelivery.com, 1 freshgujarat.com, 0 +freshhosting.tk, 1 freshinsport.fr, 1 freshmail.com, 1 freshmans-pizza.de, 1 @@ -47644,6 +48583,7 @@ friedstechnology.nl, 1 friedstechnology.online, 1 friedzombie.nl, 1 friedzombie.online, 1 +friendbot.ml, 1 friendick.jp, 1 friendindeed.com, 1 friendku.tk, 1 @@ -47659,6 +48599,7 @@ friendplay.net, 1 friends-online.tk, 1 friends.cafe, 1 friendscapital.co.uk, 1 +friendsforeverrecords.tk, 1 friendshipismagicsquad.com, 1 friendsinfilm.com, 0 friendsnew.com, 1 @@ -47693,8 +48634,10 @@ frikandelmoord.nl, 1 friker.tk, 1 frikilinks.tk, 1 frikimasters.es, 1 +frikipedia.tk, 1 frikiteca.tk, 1 frikizone.tk, 1 +frikotv.tk, 1 frilima.com.br, 1 friller.com.au, 1 frillip.com, 0 @@ -47739,6 +48682,7 @@ froh.co.jp, 1 frokenblomma.se, 1 frolova.org, 1 from-the-net.com, 1 +from.ga, 1 from.network, 0 from.tk, 1 fromager.net, 1 @@ -47752,9 +48696,11 @@ fromm-projects.de, 1 frommars.tk, 1 frommyhands.tk, 1 fromoldbooks.org, 1 +fromrestaurants.tk, 1 fromscratch.rocks, 1 fromtheboxoffice.com, 1 fromthecave.tk, 1 +fromthecountsplace.tk, 1 fromthemonks.com, 1 fromthesoutherncross.com, 1 fromtinythings.com, 0 @@ -47765,6 +48711,7 @@ frontbaydevices.tk, 1 fronteers.nl, 0 fronteimoveis.com.br, 1 frontendmentor.io, 1 +fronterasblog.tk, 1 frontier.bet, 1 frontierbrasil.tk, 1 frontiernetworks.co.uk, 1 @@ -47795,6 +48742,7 @@ froxt.com, 1 frozen-gaming.tk, 1 frozen-geek.net, 1 frozen-solid.net, 1 +frozencuisine.ga, 1 frozencuisineers.ga, 1 frozencuisineest.ga, 1 frozendurian.club, 1 @@ -47818,6 +48766,8 @@ frugaldateest.ga, 1 frugalfamilyhome.com, 1 frugro.be, 1 fruit-farm.tk, 1 +fruit.ga, 1 +fruit.ml, 1 fruition.co.jp, 1 fruitlandmi.gov, 1 fruitlawers.ga, 1 @@ -47842,6 +48792,7 @@ fs-rozmarija.tk, 1 fs-w.org, 1 fs-world.org, 1 fs1.hopto.org, 1 +fsalmeron.tk, 1 fsapubs.gov, 0 fsavc.org.uk, 1 fsbn.eu, 1 @@ -47907,6 +48858,7 @@ ftg-ru.ga, 1 ftgeufyihreufheriofeuozirgrgd.tk, 1 ftgho.com, 1 fthat.link, 1 +ftl-gaming.tk, 1 ftl13.com, 1 ftm.wiki, 1 ftmc.tk, 1 @@ -47914,6 +48866,7 @@ ftmwiki.com, 1 ftmwiki.net, 1 ftmwiki.org, 1 ftng.se, 1 +ftpmovement.tk, 1 ftprivacy.cloud, 1 ftptest.net, 1 ftrac.com.br, 1 @@ -47966,6 +48919,8 @@ fuelbyte.sg, 1 fuelgalicia.tk, 1 fuelingfilms.com, 1 fuelingyourdreams.com, 0 +fuembellida.tk, 1 +fuenferrada.tk, 1 fuentenaturasalud.com, 1 fuentesdeleon.tk, 1 fuer-gerechte-steuern.at, 1 @@ -48032,9 +48987,11 @@ fullhub.ru, 1 fullinsiderers.ga, 1 fullinsiderest.ga, 1 fullintel.com, 1 +fullmetalconsulting.tk, 1 fullmoondesignhouse.tk, 1 fullmoonhentai.tk, 1 fullpaisa.com, 1 +fullsize.ml, 1 fullsizefordclub.tk, 1 fullstack.love, 1 fulltextarchive.com, 1 @@ -48066,6 +49023,7 @@ funadvisorfrance.com, 1 funandbounce.com, 1 funandfriends.tk, 1 funatic.nl, 1 +funatic.tk, 1 funboards.cz, 1 funboat.tk, 1 funbuynet.com.br, 1 @@ -48116,6 +49074,7 @@ fungalforager.com, 1 fungame.eu, 1 fungaming.bet, 1 fungit.org, 0 +fungomoscow.cf, 1 fungosdemexico.tk, 1 funguana.com, 1 funhiking.tk, 1 @@ -48173,6 +49132,7 @@ funidelia.sg, 1 funidelia.si, 1 funidelia.sk, 1 funidos.tk, 1 +funinfo.tk, 1 funkazoid-radio.com, 1 funken-networks.de, 1 funkfernbedienung-industrie.de, 1 @@ -48197,11 +49157,15 @@ funmobiles.tk, 1 funmountaincanyon.com, 1 funnelsforbricks.io, 1 funniestclip.com, 1 +funny-boy.tk, 1 funny-rates.tk, 1 funny-wedding.ga, 1 +funnyanimalvideos.ml, 1 funnybee.tk, 1 funnybikini.com, 1 funnybubu.ro, 1 +funnychristianjokes.tk, 1 +funnycommercials.ga, 1 funnylinks.cf, 1 funnymedia.tk, 1 funnymetals.com, 1 @@ -48393,6 +49357,7 @@ fuzzi.es, 1 fuzzing-project.org, 1 fuzzlemann.de, 1 fuzzy.domains, 1 +fuzzylogic.tk, 1 fvap.gov, 1 fvdm.com, 1 fveevaete.com, 1 @@ -48458,8 +49423,10 @@ fyretrine.com, 1 fyroeo.fr, 0 fysio-ict.nl, 1 fysiotherapie-ict.nl, 1 +fysiotherapie.tk, 1 fysiotherapieapeldoornzuid.nl, 1 fysiotherapiesimons.nl, 1 +fyss.ga, 1 fysuite.com, 1 fytorio-pasxalis.gr, 1 fzbrweb.cz, 1 @@ -48469,6 +49436,7 @@ fzx750.ru, 1 fzxx.eu.org, 1 fzxx.xyz, 1 g-c-z.cc, 1 +g-center.tk, 1 g-ds.de, 1 g-electricity.ml, 1 g-equip.ru, 1 @@ -48536,6 +49504,7 @@ gabapentin.gq, 1 gabbeh.jp, 1 gabby-online.tk, 1 gabby.vn, 1 +gabbyer.ga, 1 gabbyer.gq, 1 gabbyer.ml, 1 gabe.house, 1 @@ -48561,13 +49530,16 @@ gabodesign.tk, 1 gaborg.hu, 1 gabraham.tk, 1 gabriel.to, 1 +gabrielaebruno.cf, 1 gabrielafriasfanclub.tk, 1 gabrielcury.tk, 1 gabriele-kluge.de, 1 gabriele.tips, 1 +gabrielemarino.tk, 1 gabrielflores.tk, 1 gabrielgn.com.br, 0 gabrielgroup.com, 1 +gabriella.cf, 1 gabriellabastos.tk, 1 gabriellearruda.com, 1 gabrielrm.dynu.net, 1 @@ -48620,6 +49592,7 @@ gadse.games, 1 gadzilla.tk, 1 gae123.com, 1 gaea-field.com.vn, 1 +gaelico.tk, 1 gaemsofyesterday.com, 1 gaengler.com, 1 gaestehaus-leipzig.de, 1 @@ -48637,9 +49610,11 @@ gagarin.ga, 1 gagekroljic.com, 1 gagesmith.tk, 1 gagne.tk, 1 +gagnerenfant.tk, 1 gagnerplusdargent.info, 1 gagniard.org, 1 gagor.pl, 0 +gagramore.cf, 1 gagygnole.ch, 0 gaiafood.co, 1 gaiavanderzeyp.com, 0 @@ -48702,6 +49677,7 @@ galaxy.edu.pe, 1 galaxyeuropemusic.com, 1 galaxymedia.tk, 1 galaxymusicpromo.com, 1 +galaxyplex.tk, 1 galaxyscientific.com, 1 galaxystaking.space, 1 galaxysweeper.com, 1 @@ -48713,6 +49689,7 @@ galenreasoner.com, 1 galepaal.tk, 1 galeria-reisen.de, 1 galeria42.com, 1 +galeriabunkers.tk, 1 galeriakobylarz.pl, 1 galeriarr.pl, 1 galerias-xamoralarte.cf, 1 @@ -48728,6 +49705,7 @@ galganoboutique.com, 1 galgoafegao.com.br, 1 galgoingles.com.br, 1 galgopersa.com.br, 1 +galiciasensual.tk, 1 galilahiskye.com, 1 galilei.tk, 1 galileicompara.com, 1 @@ -48737,6 +49715,8 @@ galim.org.il, 1 galina.ga, 1 galinas-blog.de, 1 galinos.gr, 1 +galive.ga, 1 +galizae-sports.tk, 1 galj.info, 1 gallagherperformance.com, 1 gallaghertownshippa.gov, 1 @@ -48775,6 +49755,7 @@ gamanlu.com, 1 gamberorosso.menu, 1 gamberorotto.com, 1 gambetti.fr, 1 +gambiafishing.tk, 1 gambiapagina.tk, 1 gambinotrasporti.it, 1 gambipedia.com, 1 @@ -48790,6 +49771,7 @@ gamblerspick.com, 1 gambling-business.club, 1 gamblingaffiliatevoice.com, 1 gamboahinestrosa.info, 1 +gamburger.tk, 1 gamcore.com, 1 game-club.me, 1 game-dominion.tk, 1 @@ -48814,14 +49796,18 @@ gamecarddelivery.com, 1 gamecdn.com, 0 gamechefpummarola.eu, 1 gamechurch.de, 1 +gameclimax.cf, 1 +gameclimax.tk, 1 gameclue.jp, 1 gamecollector.be, 1 gameconservation.org.uk, 1 gameconsole.co.nz, 1 +gamecs.tk, 1 gamecss.ml, 1 gamedaim.com, 1 gameday.org.uk, 1 gamedealsnow.com, 1 +gameexpress.tk, 1 gamefarm.ru, 1 gamefear.ga, 1 gamefear.tk, 1 @@ -48830,6 +49816,7 @@ gamefreek.tk, 1 gamegainlx.cf, 1 gamegear.club, 0 gamegix.com, 1 +gamegoddess.cf, 1 gamegoddess.tk, 1 gamegoone.tk, 1 gamegossips.com, 1 @@ -48846,6 +49833,7 @@ gamekeybox.tk, 1 gamekiller.ga, 1 gameloft.ga, 1 gamelok.ga, 1 +gamemakers.tk, 1 gamemodding.com, 1 gamenerd.net, 1 gamenew.tk, 1 @@ -48885,18 +49873,25 @@ gamereactor.pt, 1 gamereactor.se, 1 gamereader.de, 1 gamerepository.ga, 1 -gamerepublic.hu, 1 gameres.com, 1 gamering.cf, 1 gamerkings.tk, 1 +gamers-community.tk, 1 +gamers-paradise.tk, 1 gamersedge.tk, 1 +gamersheaven.tk, 1 +gamersplace.tk, 1 gamerspost.ga, 1 gamerstudiozinc.tk, 1 +gamersuniverse.tk, 1 +gamersweb.ga, 1 gamertelligence.com, 1 +gamertrashers.ga, 1 gamerturk.tk, 1 gamerwater.com, 1 gamerwelfare.com, 1 gamerzdot.com, 1 +games-station.tk, 1 games2kids.net, 1 games4theworld.org, 1 gamesalia.com, 1 @@ -48906,6 +49901,7 @@ gamescore.tk, 1 gamescum.ru, 1 gamesdepartment.co.uk, 0 gamesector.tk, 1 +gameserver-admin.ga, 1 gameserver-sponsor.me, 1 gameserver.fun, 1 gamesgalaxy.it, 1 @@ -48915,6 +49911,8 @@ gameship.ga, 1 gameshopsrbija.com, 1 gameshowchallenge.ie, 1 gamesided.com, 1 +gamesmagic.tk, 1 +gamesone.tk, 1 gamespark.ga, 1 gamespark.tk, 1 gamespider.tk, 1 @@ -48946,6 +49944,7 @@ gaming-club.tk, 1 gaming-dice.tk, 1 gaming-life.tk, 1 gaming-news.tk, 1 +gaming-online.tk, 1 gamingaktier.com, 1 gamingblogx.com, 1 gamingboard.eu, 1 @@ -48964,6 +49963,7 @@ gamingregulation.com, 1 gamingtech.es, 1 gamingterritory.com, 1 gamingthingz.com, 1 +gamingtilltheend.cf, 1 gamingtoday.ga, 1 gamingtopbox.ga, 1 gaminguniverse.pl, 1 @@ -48977,6 +49977,7 @@ gamishou.fr, 1 gamivo.com, 1 gammabrossfrance.fr, 1 gammaknife.com, 1 +gammaphibeta.tk, 1 gamonacci.com, 1 gamster.tv, 1 gan.wtf, 1 @@ -49088,6 +50089,7 @@ gariganshi.ml, 1 garito3pa.tk, 1 garlandcountyar.gov, 1 garmonia.ml, 1 +garmonia.tk, 1 garnetnv.com, 1 garnierna.it, 1 garnuchbau.de, 1 @@ -49192,6 +50194,7 @@ gatherling.com, 1 gathu.co.ke, 1 gatilagata.com.br, 1 gatilhoarmas.com.br, 1 +gatlink.tk, 1 gatolovers.es, 1 gatomix.net, 1 gatoslivres.org, 1 @@ -49258,6 +50261,7 @@ gazetefutbol.de, 1 gazetekarinca.com, 1 gazette.govt.nz, 1 gazette365.com, 1 +gazizov.tk, 1 gazoakley.com, 1 gazobeton-don.ru, 1 gazor.tk, 1 @@ -49388,6 +50392,7 @@ gedlingtherapy.co.uk, 1 gedon.org, 1 geecrat.com, 1 geek-hub.de, 1 +geek-rooms.tk, 1 geek.ch, 1 geek1.de, 1 geekabit.nl, 1 @@ -49428,6 +50433,7 @@ geeksontap.com.au, 1 geekspace.gq, 1 geeksquadforums.tk, 1 geekstreet.fr, 1 +geekstuff.tk, 1 geekstyle.cz, 1 geektarven.com, 1 geektechsolutions.com.au, 1 @@ -49461,7 +50467,6 @@ geertswei.nl, 1 geestelijkgezondgent.be, 1 geesthof.de, 1 gefeuert.de, 1 -gefire.com, 1 gefolge.org, 1 gegeco.ch, 0 gegevensdelen.nl, 1 @@ -49582,6 +50587,7 @@ genejournal.blog, 1 genelhaberler.tk, 1 genemesservwparts.com, 1 genemon.at, 1 +genen.ga, 1 generace-id.org, 1 generacionmoderatto.tk, 1 generador-electrico.com, 1 @@ -49613,13 +50619,17 @@ generatormusic.tk, 1 generic-noroxin.ml, 1 generic-plavix.ga, 1 generic-sildenafil-citrate.cf, 1 +generic-tadalafil.cf, 1 generic-tenormin.gq, 1 genericabana.gq, 1 genericaccutaneonline.ml, 1 genericaceon.tk, 1 +genericacomplia.ga, 1 genericadvaironline.ml, 1 +genericazithromycin.tk, 1 genericazulfidine.gq, 1 genericcalan.gq, 1 +genericcelebrex.tk, 1 genericclaritin.ga, 1 genericcolchicine.ml, 1 genericdevelopment.nl, 1 @@ -49631,6 +50641,7 @@ genericlevaquin.tk, 1 genericlexaprocost.cf, 1 genericlexaprocost.tk, 1 generico.in, 0 +genericprevacidlansoprazole.tk, 1 genericrhinocort.ga, 1 genericuroxatral.gq, 1 genericvytorin.ml, 1 @@ -49643,7 +50654,6 @@ genesisgold.com, 1 genesisgrade.com, 1 genesismachina.ca, 1 genesisplay.tk, 1 -genesisray.com, 1 genesistoday.org, 1 genesistrading.com, 0 genetargetsolutions.com.au, 1 @@ -49785,6 +50795,7 @@ geo-files.tk, 1 geo-industrie.fr, 1 geo-portale.it, 1 geoactivism.org, 1 +geoarchive.tk, 1 geocar.com, 1 geocod.tk, 1 geocoin2016.dk, 1 @@ -49792,6 +50803,7 @@ geocommunicator.gov, 1 geocompass.at, 1 geoconvention.ga, 1 geodesic-tents.com, 1 +geodesign.tk, 1 geoenvironconsult.ga, 1 geofabrika.ru, 1 geoffanderinmyers.com, 1 @@ -49819,6 +50831,7 @@ geology-schools.com, 1 geomac.gov, 1 geomadrid.ga, 1 geomagne.tk, 1 +geoman.tk, 1 geomatic.tk, 1 geometra.roma.it, 1 geometra24.it, 1 @@ -49848,6 +50861,7 @@ georgecolgrove.com, 1 georgedesign.ch, 1 georgegachara.tk, 1 georgehotz.tk, 1 +georgekaraoglanis.tk, 1 georgelucas.tk, 1 georgemaschke.com, 1 georgemaschke.net, 1 @@ -49867,9 +50881,11 @@ georgiaautoglass.net, 1 georgiabonepc.com, 1 georgiacriminaldefense.com, 1 georgiaglassrepair.com, 1 +georgiainfo.ga, 1 georgiajetcharter.com, 1 georgianews.ml, 1 georgiangames.gq, 1 +georgianhistory.tk, 1 georgiaparks.org, 1 georgiastuartyoga.co.uk, 0 georgiaurologist.com, 1 @@ -49908,7 +50924,6 @@ gep.ch, 1 gepassociati.cloud, 1 gepe.ch, 1 gepetoauth.herokuapp.com, 1 -gepetoservices.herokuapp.com, 1 gepgroup.gr, 1 gepps.de, 1 geppy.im, 1 @@ -49921,6 +50936,7 @@ gerard-klooster.net, 1 gerardinden.nl, 1 gerardozamudio.mx, 1 gerards-abenteuer.de, 1 +gerbang-singkolo.ga, 1 gerber-construction.com, 1 gerbil.tk, 1 gerbils.tk, 1 @@ -49948,6 +50964,8 @@ germanssky.de, 1 germantownpolicewi.gov, 1 germantownwi.gov, 1 germantrip.tk, 1 +germanytravel.ga, 1 +germanytravelguide.ml, 1 germanzero-nv.de, 1 germfr.ee, 1 germinalekeren.tk, 1 @@ -50053,6 +51071,7 @@ getdash.io, 1 getdeclutter.com, 1 getdinghy.com, 1 getdishnow.tk, 1 +getdoges.tk, 1 getdone.club, 1 getdownon.it, 1 geteducation.tk, 1 @@ -50122,6 +51141,7 @@ getontop.club, 1 getonyx.com, 1 getoxley.com, 1 getpagespeed.com, 1 +getpaidclub.tk, 1 getpaidtocode.com, 1 getpaidtodesign.com, 1 getpaidtodev.com, 1 @@ -50177,6 +51197,7 @@ getvdownloader.com, 1 getveer.io, 1 getwemap.com, 1 getwisdom.io, 1 +getwork.tk, 1 getwsodo.com, 1 getyeflask.com, 1 getyou.onl, 0 @@ -50226,6 +51247,7 @@ gfoss.eu, 1 gfoss.gr, 1 gfourmis.co, 1 gfournier.ca, 1 +gfronline.tk, 1 gftwy.com, 1 gfx.cards, 1 gfxbench.com, 1 @@ -50321,6 +51343,8 @@ ghostridersclan.tk, 1 ghostruler.com, 1 ghosts-to-you.tk, 1 ghostsnote.tk, 1 +ghostsquad.tk, 1 +ghostutils.tk, 1 ghostwritershigh.com, 1 ghotokbaba.com, 1 ghou.me, 1 @@ -50351,6 +51375,7 @@ giantslipandslide.co.uk, 1 giantsquid.cf, 1 giantsquid.ga, 1 giantsquid.gq, 1 +giantsquid.tk, 1 gianttree.de, 1 gianturl.net, 1 giardinaggio.milano.it, 1 @@ -50423,19 +51448,20 @@ gifzilla.net, 0 gig.com, 1 gig.ru, 0 gig40.com, 1 -giga.is, 1 giga.nl, 1 gigabitz.pw, 1 gigacloud.org, 1 gigacomputer.cz, 1 gigagaaf.nl, 1 gigagroup.cf, 1 +giganet.tk, 1 gigantar.com, 1 gigantism.com, 1 gigaone.pl, 1 gigarange.xyz, 1 gigasoft.tk, 1 gigatags.tk, 1 +gigatop.ga, 1 gigatron.tk, 1 gigawa.lt, 1 gigawattz.com, 1 @@ -50453,6 +51479,7 @@ gil.gg, 1 gil.re, 1 gilandrad.tk, 1 gilangcp.com, 1 +gilbertosimoni.tk, 1 gilbertsvilleny.gov, 1 gildenhost.de, 1 gileadpac.com, 1 @@ -50513,8 +51540,10 @@ giordano.com, 1 giordanomultiservice.it, 1 giorgia.tk, 1 giorgiosite.tk, 1 +giovannarossi.tk, 1 giovannibattistadagnino.eu, 1 giovannicellini.com, 1 +giovannisantini.tk, 1 giovinco.tk, 1 gip-carif-idf.net, 1 gip-carif-idf.org, 1 @@ -50523,8 +51552,10 @@ giper.ga, 1 giperfast.tk, 1 gipernn.ru, 0 gipfelbuch.gr, 1 +gipl.tk, 1 gippert-klein.de, 1 gipsplitka.ru, 1 +gipuzkoabasket.tk, 1 giraffeduck.com, 1 giraffenland.de, 1 giraffes.org, 1 @@ -50571,8 +51602,10 @@ gisher.org, 1 gisher.video, 1 gishiko.net, 1 gishpo.tk, 1 +gisma.tk, 1 gistportal.com, 1 gistr.io, 1 +git-stuff.tk, 1 git.ac.cn, 1 git.co, 1 git.io, 1 @@ -50606,6 +51639,7 @@ gitns.io, 1 gitns.net, 1 gitns.nl, 1 gitns.org, 1 +gitstuff.tk, 1 gittigidiyor.com, 1 gittr.ch, 1 giuem.com, 0 @@ -50631,6 +51665,8 @@ givemeaverse.com, 1 givemebeer.tk, 1 givemeyour.cc, 1 givemylife.cf, 1 +givemylife.ga, 1 +givemylife.gq, 1 givemylife.ml, 1 given2.blog, 1 given2.com, 1 @@ -50669,6 +51705,7 @@ gjengset.com, 1 gjnoonan.co.uk, 1 gjspunk.de, 0 gjung.com, 0 +gkconsultancy.tk, 1 gkdk.se, 1 gkdworld.com, 1 gkdworld.xyz, 1 @@ -50759,6 +51796,7 @@ gld.re, 1 gle, 1 gleam.tk, 1 gleanview.com, 1 +glebov.tk, 1 gleesongs.tk, 1 gleich-aluminium-shop.de, 1 gleisner.law, 1 @@ -50844,6 +51882,7 @@ globalbusinessrisk.com, 1 globalcancer.tk, 1 globalchemlab.ga, 1 globalconsultant.tk, 1 +globaldataline.ml, 1 globaldefensa.tk, 1 globaldestruction.tk, 1 globaleducationservices.net, 1 @@ -50879,6 +51918,7 @@ globalmetropolis.tk, 1 globalmobilityjourneys.com, 1 globalnewsdaily.cf, 1 globalnewsdaily.tk, 1 +globalnewsnetwork.tk, 1 globalnewssystems.tk, 1 globalno.me, 1 globalnomadvintage.com, 1 @@ -50902,6 +51942,7 @@ globalsensationsest.ga, 1 globalseo.ga, 1 globalseo.ml, 1 globalshares.com, 1 +globalshippinglimited.ga, 1 globalsign.com.ru, 1 globalspeed.tk, 1 globalstar.com, 1 @@ -50921,6 +51962,7 @@ globalwarmingis.science, 1 globalwidemedia.com, 1 globalwire.fi, 1 globalwitness.org, 0 +globalzone.tk, 1 globe-brasil.tk, 1 globecollege.nl, 1 globedx.exchange, 1 @@ -50977,6 +52019,7 @@ gluecksmomente.boutique, 1 gluedtomusic.com, 1 gluhov-ss.ru, 1 gluit.de, 1 +glutenfreeandtasty.com, 1 glutenfreehomemaker.com, 1 glutenfreelife.co.nz, 1 glutenfreeonashoestring.com, 0 @@ -50984,6 +52027,7 @@ glutenfreevr.com, 1 gluto.tk, 1 glxnet.com, 1 glyam.nl, 1 +glyburidemetformin.tk, 1 glykofridis.nl, 1 glyph.ws, 1 glyptodon.com, 1 @@ -51077,6 +52121,7 @@ go-datasecurity.de, 1 go-down.tk, 1 go-embedded.de, 1 go-go.link, 1 +go-healthy.herokuapp.com, 1 go-kuwait.tk, 1 go-life.com.tw, 1 go-mail.me, 1 @@ -51112,6 +52157,7 @@ goatbot.xyz, 1 goathub.io, 1 goatlord.tk, 1 goatstore.ca, 1 +goaudits.com, 1 gobarrelroll.com, 1 gobetweenfilms.com, 1 gobeyondtheimpossible.com, 1 @@ -51259,6 +52305,7 @@ golden-jackass.com, 1 golden-kamuy.com, 1 golden-sea.tk, 1 golden-squad.com, 1 +goldenage.tk, 1 goldenagefoundation.tk, 1 goldenbadger.de, 0 goldencircle.ga, 1 @@ -51293,6 +52340,7 @@ goldfelt.com, 1 goldfmromania.ro, 1 goldloeckchen159.net, 1 goldmancarpetcare.com, 1 +goldminer.ga, 1 goldnbraces.com, 1 goldpreisfinder.at, 1 goldschmiede-suessenguth.de, 1 @@ -51345,6 +52393,7 @@ golnet.hu, 1 goloa.fr, 1 goloborodko.net, 1 golosbots.tk, 1 +golosok.ml, 1 golovbuh.online, 1 golser-schuh.at, 1 golser.info, 1 @@ -51387,6 +52436,7 @@ gonepal.com, 1 gongik.info, 1 gongjianwei.com, 1 gongjuhao.com, 1 +gonortheast.co.uk, 1 gonorthwest.co.uk, 1 gonumber.ga, 1 gonx.dk, 0 @@ -51523,6 +52573,7 @@ gorod74.ru, 0 gorodabakan.ml, 1 gorodivanovo.tk, 1 gorodrabot.ru, 1 +gorodrostov.tk, 1 gorodshinspb.ru, 1 goroscop.ga, 1 goroscop.tk, 1 @@ -51561,6 +52612,7 @@ gosskupka.ru, 1 gostaffer.com, 1 gostargazing.co.uk, 1 gostatera.com, 1 +gosti-dom.ga, 1 gostles.ru, 1 gostomaisdecarrosdoquechocolates.com, 1 gostudy.net, 1 @@ -51632,12 +52684,14 @@ goudsbloemonline.nl, 1 goudt.nl, 1 gouforit.com, 1 goug0.com, 1 +gougeaway.tk, 1 gougeul.org, 1 goukon.ru, 1 gouplinkit.com, 1 gourgouli.com, 1 gourmetfestival.de, 1 gourmetspalencia.com, 1 +gourmetvitamins.ga, 1 gouthiere.com, 1 goutsmits-tegelwerken.nl, 1 gov.tc, 1 @@ -51703,6 +52757,7 @@ gpolanco.com, 1 gpony.fr, 1 gppro.com, 0 gpremium.cl, 1 +gps-fleettracking.ga, 1 gps-track-sys.info, 1 gps.com.br, 1 gps4net.com, 1 @@ -51716,9 +52771,11 @@ gpsolarpanels.com, 1 gpspolis.nl, 1 gpsroomers.ga, 1 gpsvideocanada.com, 1 +gpswebsoft.ml, 1 gpu.nu, 1 gpwaconference.com, 1 gpwmd-portal.org, 1 +gpz500s.tk, 1 gq-magazine.co.uk, 1 gqmstore.com.br, 1 gqyyingshi.com, 0 @@ -51782,6 +52839,7 @@ grafia.ink, 1 graficagesa.com.br, 1 graficasantana.com.br, 1 graficoywebvalencia.tk, 1 +grafik.gq, 1 grafimagenpublicidad.com, 1 grafittikontroll.cf, 1 grafmag.pl, 1 @@ -51803,6 +52861,7 @@ grahamcarruthers.co.za, 1 grahamcluley.com, 0 grahamedgecombe.com, 1 grahameger.com, 1 +grahamleeonline.com, 1 grahamsmith.tech, 1 grailify.com, 1 grain-feature-branch.co, 1 @@ -51854,6 +52913,7 @@ grandesign.pt, 1 grandfallscamp.com, 1 grandfieldok.gov, 1 grandfootball.tk, 1 +grandisco.tk, 1 grandkids-toys.com, 1 grandlineshop.com, 1 grandmasfridge.org, 0 @@ -51911,6 +52971,7 @@ graphic-schools.com, 1 graphic-shot.com, 1 graphicbuffet.co.th, 1 graphicdesignresources.net, 1 +graphicdream.tk, 1 graphicnab.com, 0 graphicwallet.com, 0 graphicz.ml, 1 @@ -51965,7 +53026,6 @@ gratschwirt.com, 1 grattan.co.uk, 1 grattecenne.com, 1 graumeier.de, 1 -grauwasser-blog.de, 1 gravedad-zero.tk, 1 gravedigger.tk, 1 gravelshooters.com, 1 @@ -52057,6 +53117,7 @@ greek.dating, 1 greeklish.gr, 1 greekmusic.academy, 1 greeknewspapers.tk, 1 +greeks.tk, 1 greekweb.tk, 1 greeleycountyne.gov, 1 green-adn.com, 1 @@ -52101,12 +53162,14 @@ greendessertest.ga, 1 greendiscussionsers.ga, 1 greendotcc.com, 1 greendotcredit.com, 1 +greendrive.tk, 1 greendvorik.com.ua, 1 greenearthlawns.com, 0 greenecountyny.gov, 1 greenecountyohio.gov, 1 greenecountytn.gov, 1 greenecountytnsheriffsdept.gov, 1 +greenews.ga, 1 greenface.it, 1 greenfever.pl, 1 greenfieldlaxwi.gov, 1 @@ -52155,6 +53218,7 @@ greensilllatam.com, 1 greensmartplanet.com.my, 1 greensmartplanet.my, 1 greensph.tk, 1 +greensquare.tk, 1 greenstation.no, 1 greenstreethammers.com, 1 greensurpriseers.ga, 1 @@ -52194,7 +53258,6 @@ gregbonner.com, 1 gregbrimble.com, 1 gregdf.com, 1 greger.me, 1 -gregfoat.co.uk, 1 greggsfoundation.org.uk, 1 greghouse.tk, 1 gregmartyn.com, 1 @@ -52220,6 +53283,7 @@ greice.de, 1 greiner-it.de, 1 greinerj.de, 1 greizer.tk, 1 +grekiskagudar.tk, 1 grekos.com.pl, 1 gremagol.xyz, 1 gremlinsmountain.tk, 1 @@ -52293,6 +53357,7 @@ griegshipbrokers.com, 1 griegshipbrokers.no, 1 grienenberger.eu, 1 griesser2.de, 1 +griffinsrfc.tk, 1 griffioenconsulting.com, 1 griffithobservatory.org, 1 griffophotography.tk, 1 @@ -52335,6 +53400,7 @@ grishavirus.cf, 1 grissianerhof.com, 1 griswoldia.gov, 1 grit3.com, 1 +grittherapeutic.com, 1 griyadenature.tk, 1 griyo.online, 1 grizz.gdn, 1 @@ -52488,6 +53554,7 @@ grueberstein.de, 1 gruelang.org, 1 gruenderlehrstuhl.de, 1 gruene-im-rvr.de, 1 +gruene-linde-schwimmen.tk, 1 gruene-wattenscheid.de, 1 gruener-salon-bochum.de, 1 gruenerpass.co.at, 1 @@ -52516,12 +53583,15 @@ grunwaldzki.center, 1 grunwasser.fr, 1 grunzgrunz.com, 1 grupatvogzivota.tk, 1 +grupdedansa.tk, 1 gruphepsi.tk, 1 +grupo-famia.tk, 1 grupo-zoom.com, 1 grupoalpi.com, 1 grupoauxteclic.com, 1 grupocata.com, 1 grupodcasa.tk, 1 +grupodecoroinhaspnsa.tk, 1 grupodepasajeros.tk, 1 grupodes.com.br, 1 grupoellatu.tk, 1 @@ -52555,10 +53625,12 @@ gruwa.net, 1 gruz0.ru, 1 gruzchiki.ml, 1 gruzinfo.tk, 1 +gruzoperevozki.ml, 1 gruzoperevozki.tk, 1 grwebdesigns.gr, 1 gryffin.ga, 1 gryffin.ml, 1 +gryffin.tk, 1 gryphzia.cf, 1 gryte.tk, 1 grytics.com, 1 @@ -52593,7 +53665,6 @@ gsmsale.nl, 1 gsmtool.tk, 1 gsmvermist.tk, 1 gsoc.se, 1 -gsomfamily.com, 1 gsp.com, 1 gspcreations.com, 1 gspilar.tk, 1 @@ -52769,6 +53840,7 @@ guillaumematheron.fr, 1 guille.tk, 1 guillemagullo.tk, 1 guillemaud.me, 0 +guillen.tk, 1 guillouxinformatique.fr, 1 guiltyfox.ca, 1 guiltyfox.com, 1 @@ -52778,7 +53850,9 @@ guinchoesteticcar.com.br, 1 guineapigmustach.es, 1 guinguetteclovis.com, 1 guirossler.com.br, 1 +guise.tk, 1 guitar-strings-online.tk, 1 +guitarangel.tk, 1 guitards.tk, 1 guitarefacile.tk, 1 guitarfreak.tk, 1 @@ -52874,6 +53948,7 @@ gus.moe, 1 gusar.by, 1 gusli.net, 1 gusmiller.org, 1 +guso.gq, 1 gustaff.de, 1 gustarfsberg.cf, 1 gustarfsberg.ga, 1 @@ -52918,13 +53993,16 @@ guykokken.tk, 1 guypearce.co.uk, 1 guyretreaters.ga, 1 guyretreatest.ga, 1 +guys-reviews.ml, 1 guysauto.com, 1 guysroulette.com, 1 guytarrant.co.uk, 1 guythomasevans.co.uk, 1 guzdek.co, 1 +guzelforum.tk, 1 guzelkadinlar.tk, 1 guzellikmerkezleri.tk, 1 +guzelresim.tk, 1 guzelsozlerim.tk, 1 guzelvideo.tk, 1 guzey.me, 1 @@ -52940,6 +54018,7 @@ gveh.de, 1 gvenglish.com, 1 gvi-timing.ch, 0 gvip.xyz, 1 +gvitebsk.cf, 1 gvitiming.ch, 0 gvobgyn.ca, 1 gvoetbaldagenalcides.nl, 1 @@ -53000,6 +54079,7 @@ gymnaserenens.ch, 0 gymnasium-farmsen.de, 1 gymnasium-hittfeld.de, 1 gymnastic.cf, 1 +gymnastic.ga, 1 gymnastic.gq, 1 gymnastic.ml, 1 gymnastic.tk, 1 @@ -53127,6 +54207,7 @@ habersitesikur.tk, 1 haberton.com, 1 habesha.bet, 1 habilcondominios.com.br, 1 +habitable.ga, 1 habitacionesalquiler.com, 1 habitat-domotique.fr, 1 habitatberks.org, 1 @@ -53230,6 +54311,7 @@ hacksecu.re, 1 hacksoc.co.uk, 1 hackthat.tk, 1 hackthecat.com, 1 +hackthehacker.ml, 1 hackthissite.org, 1 hacktic.info, 1 hacktivis.me, 1 @@ -53278,6 +54360,7 @@ haggeluring.su, 1 haggisofnorway.tk, 1 hagiati.gr, 1 hagiaweb.com, 1 +hagix.tk, 1 hagoyvivo.com, 1 hagskold.se, 1 hagtingius.nl, 1 @@ -53322,6 +54405,7 @@ hairhumanextensions.tk, 1 hairlissage.be, 1 hairloss.com, 1 hairlossadvice.tk, 1 +hairpins.tk, 1 hairsalon-wish.com, 1 hairstyles-salon.tk, 1 haislipcorp.com, 1 @@ -53353,6 +54437,7 @@ hakatabijin-mind.com, 1 hake.me, 1 haker24.tk, 1 hakiminvestment.com, 1 +hakimova.tk, 1 hakkarihaberi.tk, 1 hakkarihaberleri.tk, 1 hakkariradyo.tk, 1 @@ -53396,6 +54481,7 @@ halifaxma.gov, 1 halilova.ga, 1 halilova.ml, 1 halilova.tk, 1 +halilweb.tk, 1 halilyagcioglu.tk, 1 halimjr.com, 1 halkakoop.com, 1 @@ -53421,6 +54507,7 @@ hallopstyling.com, 1 halloway.tk, 1 halloweenmusic.org, 1 hallspumpandwellservice.net, 1 +halltrends.tk, 1 hallucinogen.com, 1 hallucinogens.org, 1 hallways.tk, 1 @@ -53441,6 +54528,7 @@ halyul.com, 1 hamacho-kyudo.com, 1 hamali.bg, 1 hamamatsu-kotsu.co.jp, 1 +hamarimarriage.tk, 1 hamartrophy.cf, 1 hamave.nl, 1 hamburg40grad.de, 1 @@ -53458,6 +54546,7 @@ hamiltonpdnj.gov, 1 hamiltonsalestraining.com, 1 hamiltonvotesfl.gov, 1 hamiltonweather.ca, 1 +hamiltonzinelibrary.cf, 1 hamiltonzinelibrary.ga, 1 hamiltonzinelibrary.gq, 1 hamiltonzinelibrary.ml, 1 @@ -53483,6 +54572,7 @@ hampshiretechservices.co.uk, 1 hamptonroads.gov, 1 hampus.lol, 1 hampuskraft.com, 1 +hamsaranjavan.tk, 1 hamsokhan.tk, 1 hamsterchines.tk, 1 hamsteriousgift.com, 1 @@ -53558,7 +54648,6 @@ hanfoot.tk, 1 hanfox.co.uk, 0 hanfverband-erfurt.de, 1 hang333.moe, 1 -hangar.hosting, 1 hangar4.es, 1 hangarbox.de, 1 hangardasaves.com.br, 1 @@ -53694,6 +54783,7 @@ happylifeacademy.eu, 1 happylifestyle.com, 1 happymine.nl, 1 happymondayclub.com, 1 +happymothersday.tk, 1 happynight.tk, 1 happyplantparent.com, 1 happyretail.ai, 1 @@ -53716,6 +54806,7 @@ hapticmedia.io, 1 hapvm.com, 1 harabar.ga, 1 harabar.gq, 1 +harabar.ml, 1 harabe.ga, 1 harahanla.gov, 1 haraj.com.sa, 1 @@ -53790,6 +54881,7 @@ hardweb.it, 1 hardwickvt.gov, 1 hardworm.tk, 1 hardy.bz, 1 +hardyboyplant.com, 1 hardyhaberland.com, 1 harelmallac.com, 0 harem.tk, 1 @@ -53964,6 +55056,7 @@ hassans.tk, 1 hassclan.tk, 1 hasselbach-dellwig.de, 1 hasseplatslageri.se, 1 +hassiba-abderaouf.tk, 1 hassmelden.de, 0 hassra.org.uk, 1 hasstopped.com, 1 @@ -53978,6 +55071,7 @@ hasznosithato.tk, 1 hatachan.site, 1 hatake.tk, 1 hatarisecurity.co.ke, 1 +hatcher.cloud, 1 hate.tk, 1 hatemarga.tk, 1 hatematerial.tk, 1 @@ -54120,6 +55214,7 @@ hb5197.com, 0 hb6729.com, 1 hb8522.com, 1 hb9397.com, 1 +hbaa.ml, 1 hbag.org, 1 hbauer.net, 1 hbbet.com, 1 @@ -54215,7 +55310,6 @@ hdtvblogsers.ga, 1 hdtvblogsest.ga, 1 hdtvboarders.ga, 1 hdtvboardest.ga, 1 -hdtwinks.com, 1 hdv.paris, 1 hdv12.horse, 1 hdvburs.nl, 1 @@ -54274,6 +55368,7 @@ health4life.tk, 1 healthabundant.ga, 1 healthactive.co, 0 healthadaptive.ga, 1 +healthalbuquerque.tk, 1 healthalternativemedicine.tk, 1 healthamazing.ga, 1 healthand-beautynews.net, 1 @@ -54295,6 +55390,7 @@ healthblender.ga, 1 healthblod.ga, 1 healthbolton.tk, 1 healthbordelonville.tk, 1 +healthboston.tk, 1 healthboulevard.ga, 1 healthbounce.ga, 1 healthbrisbane.tk, 1 @@ -54330,6 +55426,8 @@ healthclassy.ga, 1 healthclearance.ga, 1 healthclyman.tk, 1 healthcollect.ga, 1 +healthcolumbia.tk, 1 +healthcolumbus.tk, 1 healthcommission.ga, 1 healthcompany.tk, 1 healthconfluence.tk, 1 @@ -54347,6 +55445,7 @@ healthcupid.ga, 1 healthcurious.ga, 1 healthdaily.cf, 1 healthdaily.ga, 1 +healthdallas.tk, 1 healthdata.gov, 1 healthdelta.ga, 1 healthdenver.tk, 1 @@ -54419,6 +55518,7 @@ healthlowprice.ga, 1 healthlucky.ga, 1 healthmagazines.tk, 1 healthmanager.ml, 1 +healthmanchester.tk, 1 healthmatchapp.com, 1 healthmeasure.ga, 1 healthmedcost.com, 1 @@ -54433,6 +55533,7 @@ healthmetric.ga, 1 healthmiami.tk, 1 healthmillions.ga, 1 healthmilwaukee.tk, 1 +healthmilwaukie.tk, 1 healthmotivation.ml, 1 healthmountolive.tk, 1 healthmuscle.ga, 1 @@ -54489,14 +55590,17 @@ healthrivergrove.tk, 1 healthrule.ga, 1 healthrunners.ga, 1 healths-tips.ml, 1 +healthsacramento.tk, 1 healthsalvage.ga, 1 healthsample.ga, 1 healthsanantonio.tk, 1 +healthsanjose.tk, 1 healthsanluisobispo.tk, 1 healthsantaana.tk, 1 healthsantaclara.tk, 1 healthscience.tk, 1 healthseason.ga, 1 +healthseattle.tk, 1 healthsession.ga, 1 healthshadow.ga, 1 healthsleuth.ga, 1 @@ -54506,6 +55610,7 @@ healthsone.com, 1 healthsouthfield.tk, 1 healthsparkle.ga, 1 healthspencer.tk, 1 +healthspringfield.tk, 1 healthstar-dev.io, 1 healthstar.io, 1 healthstrick.ga, 1 @@ -54518,6 +55623,7 @@ healthtacoma.tk, 1 healththoroughfare.com, 1 healthtimes.ga, 1 healthtips4you.ml, 1 +healthtoledo.tk, 1 healthtreats.ga, 1 healthtrio.com, 1 healthtrust.tk, 1 @@ -54571,6 +55677,7 @@ healthyrun.tk, 1 healthysanfrancisco.org, 1 healthysouthdakota.tk, 1 healthyspirituality.org, 1 +healthystyle.tk, 1 healthysuperhuman.com, 1 healthyteame.com, 1 healthytipsdiet.tk, 1 @@ -54583,6 +55690,7 @@ heanbian.com, 1 heap.zone, 1 heardcountyathletics.com, 1 hearfool.cc, 1 +hearingclinicgroup.com, 1 hearingshofar.com, 1 hearingthecall.org, 1 hearkener.com, 1 @@ -54745,6 +55853,7 @@ heidisheroes.org, 1 heidiwoodgate.com, 1 heidns.cn, 1 heighton.com.au, 1 +heightselectrical.com.au, 1 heijdel.nl, 1 heijmans.blog, 1 heijmans.email, 1 @@ -54801,6 +55910,7 @@ helagotaland.ga, 1 helagotaland.gq, 1 helali.me, 1 helastel.com, 1 +helbreath.tk, 1 helden-spielen.de, 1 heldenhalde.de, 1 helder.tk, 1 @@ -54866,6 +55976,7 @@ hellhammer.tk, 1 hellhavens.tk, 1 hello-papaye.com, 1 helloacm.com, 1 +helloafrica.ga, 1 helloappservices.com, 1 hellobarestore.com, 1 hellobee.com, 1 @@ -54886,6 +55997,7 @@ hellolove.sg, 1 hellomookie.com, 1 hellomouse.cf, 1 hellomouse.net, 1 +hellomouse.tk, 1 hellomunnar.in, 1 hellomyword.tk, 1 helloneu.com, 1 @@ -55266,6 +56378,7 @@ hevoapp.com, 1 hevodata.com, 1 hevoiq.com, 1 hevrishut.cf, 1 +hewavitharanamv.tk, 1 hewlettbayparkny.gov, 1 hex.nl, 1 hexagon-e.com, 1 @@ -55312,7 +56425,6 @@ heyghost.io, 1 heyitgirl.com, 1 heyitsfree.net, 1 heyjournal.com, 1 -heymoney.de, 0 heyomg.com, 1 heyplay.eu.org, 1 heysora.net, 1 @@ -55407,7 +56519,9 @@ hiddenhillsexteriorlighting.com, 1 hiddenhillslandscapelighting.com, 1 hiddenhillslighting.com, 1 hiddenhillsoutdoorlighting.com, 1 +hiddenimage.ml, 1 hiddenmalta.net, 1 +hiddenpalms.tk, 1 hiddenredknights.tk, 1 hiddenrefuge.eu.org, 1 hiddens.tk, 1 @@ -55427,6 +56541,7 @@ hidra.tk, 1 hidrolimpiadora.com.es, 1 hidrolimpiadorasprofesionales.org, 1 hidroshoping.com.br, 1 +hieisuki.ga, 1 hielscher.com, 1 hien.cf, 1 hierden-bosch.nl, 1 @@ -55537,7 +56652,9 @@ hikingmonthlyers.ga, 1 hikingmonthlyest.ga, 1 hikka.ru, 1 hilahdih.cz, 1 +hilalnews.ga, 1 hilaolu.com, 1 +hilarious.ga, 1 hilaryhutler.com, 1 hilarymundial.tk, 1 hilde.link, 1 @@ -55569,6 +56686,7 @@ hilnu.com, 1 hilomrm.com, 1 hiltonhylandluxurycondos.com, 1 hiltonsydney.com.au, 1 +hilunetan.tk, 1 himachalgraminbank.org, 1 himalaya-masala.at, 1 himalayanoutback.com, 1 @@ -55653,6 +56771,7 @@ hirecities.ml, 1 hirecitiesers.ga, 1 hirecitiesest.ga, 1 hireinsight.io, 1 +hirel.gq, 1 hirelisting.com, 1 hireprofs.com, 1 hiresteve.ca, 1 @@ -55700,6 +56819,7 @@ hisregistries.org, 1 histalek.de, 1 histhist.ru, 1 histkult.ml, 1 +histkult.tk, 1 histogames.com, 1 histoire-cite.ch, 0 histoires.tk, 1 @@ -55735,7 +56855,9 @@ hitel.tk, 1 hiteshchandwani.com, 1 hitflow.fr, 1 hitflow.net, 1 +hitfm.ml, 1 hitfm.tk, 1 +hitfront.com, 1 hitham.tk, 1 hithouse.tk, 1 hitiles.tk, 1 @@ -55744,6 +56866,7 @@ hititleers.ga, 1 hititleest.ga, 1 hitkey.tk, 1 hitleap.com, 1 +hitmaker.ga, 1 hitmaker.tk, 1 hitmanstat.us, 1 hitmen.tk, 1 @@ -55765,6 +56888,7 @@ hitrueauthentic.com, 1 hitter-lauzon.com, 1 hitter.family, 1 hitterfamily.com, 1 +hittop.tk, 1 hiv-symptome.de, 1 hiv.com.tw, 1 hiv.gov, 1 @@ -55833,7 +56957,6 @@ hkl-gruppe.de, 1 hklbgd.org, 1 hkmap.co, 1 hkmap.com, 1 -hkmap.live, 1 hkmap.net, 1 hkno.it, 1 hkr.at, 1 @@ -56130,6 +57253,7 @@ holyghost-church.org, 1 holygrove.tk, 1 holyhiphopdatabase.com, 1 holymartyrschurch.org, 1 +holyriders.cf, 1 holyrosary.com.au, 1 holyscriptur.es, 1 holyspiritpalmyra.com, 1 @@ -56358,7 +57482,6 @@ homelion.ga, 1 homeloanprequalify.com, 1 homelove.tk, 1 homelovehome.tk, 1 -homem-viril.com, 0 homemadetips.ga, 1 homemadetipsers.ga, 1 homemadetipsest.ga, 1 @@ -56501,12 +57624,14 @@ hong.com.br, 1 hongbomiao.com, 1 hongfumall88.com, 1 hongjun.li, 1 +hongki.tk, 1 hongkongliberate.com, 1 hongkongwillwin.com, 1 hongnguyen.tk, 1 hongo-ganka.com, 1 hongocha.tk, 1 hongorw.tk, 1 +hongosdemexico.tk, 1 honguyensy.tk, 1 hongyun-rent.com, 1 honigconte.com, 1 @@ -56595,6 +57720,7 @@ horairetrain.lu, 1 horairetrain.nl, 1 horamesianica.tk, 1 horcajadadelatorre.tk, 1 +horclan.tk, 1 hord.ca, 1 horde-entertainment.tk, 1 horecaapparatuurkobezuijen.nl, 1 @@ -56675,6 +57801,7 @@ hose.ga, 1 hoshimaq.com.br, 1 hoshimaquinas.com.br, 1 hoshinplan.com, 1 +hosiery.tk, 1 hosieryexpoers.ga, 1 hosieryexpoest.ga, 1 hosoi-tax.com, 1 @@ -56886,6 +58013,7 @@ hotelsinncoventry.com, 1 hotelsolinebrela.com, 1 hotelsonline.tk, 1 hotelsrejber.cz, 1 +hotelsrit.tk, 1 hotelsthisweekend.com, 1 hotelv.com, 1 hotelvalena.com, 1 @@ -57144,7 +58272,6 @@ hr-intranet.com, 0 hr-nielsen.tk, 1 hr-praemien-santander.de, 1 hr-tech.shop, 1 -hr-tech.store, 1 hr-toys.shop, 1 hr98.tk, 1 hrabogados.com, 1 @@ -57431,6 +58558,7 @@ hugodubois.ch, 1 hugofs.com, 1 hugolegrand.fr, 1 hugolynx.fr, 0 +hugomilano.ga, 1 hugonote.cf, 1 hugonote.ga, 1 hugonote.gq, 1 @@ -57497,6 +58625,7 @@ humanewolf.com, 1 humanexperiments.com, 1 humanhairgo.tk, 1 humanhealth.pl, 1 +humanidad.tk, 1 humanistgruppen.tk, 1 humanit.com.au, 1 humanlocation.net, 1 @@ -57746,6 +58875,8 @@ hydrometrixtechnologies.com, 1 hydronicheatingaustralia.com.au, 1 hydronium.cf, 1 hydronium.ga, 1 +hydronium.ml, 1 +hydronium.tk, 1 hydroponicglobal.com.au, 1 hydrosight.com, 1 hydrosila.com, 1 @@ -57760,7 +58891,6 @@ hyk.me, 1 hyland.com, 1 hylians.com, 1 hyllie.net, 1 -hymn.com, 1 hymnsandverses.com, 1 hyncice.com, 1 hyndax.com.ar, 0 @@ -57862,6 +58992,7 @@ i-connect.ie, 0 i-cyber.gov.ua, 1 i-fastnet.net, 1 i-forum.ga, 1 +i-house.gq, 1 i-hoz.ru, 1 i-learnerisa.com, 1 i-li.com, 1 @@ -57970,6 +59101,7 @@ iamlzh.com, 0 iamokay.nl, 1 iamreally.cool, 1 iamsainknight.tk, 1 +iamsamaskom.tk, 1 iamtheib.me, 1 iamtonyarthur.com, 1 iamtrainsafe.co.uk, 1 @@ -58117,12 +59249,13 @@ icecontrol.ro, 1 icecreamandclara.co.uk, 1 icecutethings.com, 1 icedox.ga, 1 -icedream.tech, 1 +icedream.tech, 0 icedterminal.com, 1 icedterminal.me, 1 icedude.tk, 1 icefoxtee.com, 1 icegate.gov.in, 1 +iceheart.tk, 1 icekiller.ga, 1 icelandic.cf, 1 icelook.tk, 1 @@ -58136,6 +59269,7 @@ icepharmaceuticals.com, 1 icerinkwarehouse.com, 1 icerockproperties.com, 1 icesemulator.com, 1 +iceshadow.tk, 1 icetechworld.com, 1 icetiger.eu, 1 icetravellers.com, 0 @@ -58155,9 +59289,11 @@ ichibot.trade, 1 ichibot.vip, 1 ichigo.university, 1 ichijoh.co.jp, 1 +ichisound.ml, 1 ichitaka.tk, 1 ichitaso.com, 1 ichtroje.tk, 1 +ici-freewares.tk, 1 ici.ac.nz, 1 ici.ms, 1 ici.net.au, 1 @@ -58287,6 +59423,7 @@ ideal-reality.com, 1 ideal-social.com, 1 ideal.shop, 1 idealadvogadosbh.com.br, 1 +idealbody.cf, 1 idealbody.gq, 1 idealconsertosbh.com.br, 1 idealcontabilidade.net, 0 @@ -58559,7 +59696,9 @@ igmus.org, 1 ignaciolacruz.com, 1 ignacjanskiednimlodziezy.pl, 1 ignat-mag.com, 1 +ignat-torcov.tk, 1 ignat.by, 1 +ignatij.tk, 1 ignatovich.by, 1 ignatovich.me, 1 ignaziobalboa.tk, 1 @@ -58695,6 +59834,7 @@ ikall.com, 1 ikall.net, 1 ikall.org, 1 ikama.cz, 1 +ikari-san.tk, 1 ikaria.com.gr, 1 ikasgela.com, 1 ikazumitsu.tk, 1 @@ -58896,6 +60036,7 @@ iltombolo.tk, 1 iltuogiardino.org, 1 ilug-ktm.tk, 1 iluman.tk, 1 +ilumantio.tk, 1 ilunion.tk, 1 ilusionesopticas.net, 1 ilusionistas.tk, 1 @@ -58936,6 +60077,7 @@ imagen891.tk, 1 imagenenmama.org, 1 imagenesdedibujosalapizfacilesdehacer.com, 1 imageproductions.ga, 1 +imagerecall.tk, 1 imagerive.ch, 0 imageshare.web.id, 1 imagesport.fr, 1 @@ -58982,6 +60124,7 @@ imaya.tk, 1 imbdagency.com, 1 imbianchino.roma.it, 1 imbit.tk, 1 +imboom.tk, 1 imbrian.org, 1 imbunatatiri-logan.tk, 1 imbushuo.net, 1 @@ -59288,6 +60431,7 @@ inalvittile.ga, 1 inalvittile.ml, 1 inalvittile.tk, 1 inanaji.ga, 1 +inanam.tk, 1 inanan.cf, 1 inanec.gq, 1 inaned.ga, 1 @@ -59314,6 +60458,7 @@ incentivi.it, 1 incert.cn, 1 incertint.com, 1 inchcape-fleet-autobid.co.uk, 1 +inchealth.org, 1 inchenaim.com, 1 inchidi.id, 1 incident.dk, 1 @@ -59353,6 +60498,7 @@ ind.ie, 1 indasun.com, 1 indatable.com, 1 indecente.tk, 1 +indeksonline.tk, 1 independenceliveers.ga, 1 independenceliveest.ga, 1 independencerecovery.com, 1 @@ -59390,6 +60536,7 @@ indianaberry.com, 1 indianafoundationpros.com, 1 indianahealth.tk, 1 indianamoldrepairpros.com, 1 +indianapolisnews.ml, 1 indianapolispsychologistsers.ga, 1 indianapolispsychologistsest.ga, 1 indianapolisrestorations.com, 1 @@ -59409,12 +60556,14 @@ indianlakepa.gov, 1 indianmasala4u.tk, 1 indianporn2.xxx, 1 indianriver.gov, 1 +indiantechhunter.tk, 1 indianvirginhumanhair.tk, 1 indianwarriors.tk, 1 indianwomen.cf, 1 indiatourhelp.tk, 1 indiatravel.ml, 1 indiawise.co.uk, 1 +indiaworlddigital.tk, 1 indico.tk, 1 indie.dog, 1 indiecat.tk, 1 @@ -59432,6 +60581,7 @@ indignes-strasbourg.tk, 1 indigo.pet, 1 indigo.tk, 1 indigoblack.com.au, 1 +indigobooks.gq, 1 indigojewelers.com, 1 indigopaints.be, 1 indigosakura.com, 1 @@ -59495,6 +60645,7 @@ ineardisplay.com, 0 inebula.it, 1 ineedmore.domains, 1 ineffect.net, 1 +inefin.tk, 1 ineight.com, 1 ineko.cc, 1 inertianetworks.com, 1 @@ -59606,6 +60757,7 @@ info-o-zbozi.cz, 1 info-obzor.ga, 1 info-reason.cf, 1 info-screen.me, 1 +info-sys.tk, 1 info-tech.tk, 1 info-usaha.tk, 1 info.gov, 1 @@ -59656,6 +60808,7 @@ infoislamharian.tk, 1 infojeunes.fr, 1 infojmp.com, 1 infokesehatan.ga, 1 +infoland.ml, 1 infolatin.com, 1 infolead.tk, 1 infolearn.ir, 1 @@ -59686,6 +60839,7 @@ informace-zbozi.cz, 1 informaciondeciclismo.com, 1 informasi-teknologi.com, 0 informasidumay.gq, 1 +informat.ga, 1 informaticapremium.com, 0 informaticien.tk, 1 informaticmousset.tk, 1 @@ -59705,6 +60859,7 @@ informationsaveest.ga, 1 informator.tk, 1 informelles.tk, 1 informnapalm.org, 1 +informspb.tk, 1 inforok.tk, 1 inforopub.tk, 1 infortheride.com, 1 @@ -59736,6 +60891,7 @@ infotekno.co.id, 1 infoternet.com.pl, 1 infotics.es, 1 infotune.nl, 1 +infotype.ga, 1 infovb.org, 1 infovision-france.com, 1 infowaywebsolutions.com, 1 @@ -59842,6 +60998,7 @@ ingenium.si, 1 ingeniumsociety.tk, 1 ingenius.ws, 1 ingerhy.com, 1 +ingermany.ml, 1 ingeseratlantica.es, 1 ingestion.life, 1 ingfreelancer.com, 1 @@ -59849,6 +61006,7 @@ inghamcountymi.gov, 1 ingjobs.ch, 1 inglebycakes.co.uk, 1 inglesatutiempo.com, 1 +inglesencanada.cf, 1 inglesfoco.com.br, 1 inglesnarede.com.br, 1 inglessantacruz.tk, 1 @@ -59972,6 +61130,7 @@ innermostparts.org, 1 innerpeace.tk, 1 innersafe.com, 1 innertrip.co.kr, 1 +innico.cf, 1 inniger.be, 1 innio.com, 1 inno.ch, 0 @@ -60087,6 +61246,7 @@ inserzioniticino.ch, 1 inshapenutrition.com.br, 1 inshared.nl, 1 inshop.hu, 1 +insiberia.tk, 1 inside-m2m.de, 1 inside-the-outside.com, 1 insideastronomy.tk, 1 @@ -60216,7 +61376,6 @@ instituto18denoviembre.tk, 1 institutoessencia.com, 1 institutogiuseppe.com, 1 institutogiuseppe.com.ar, 1 -institutolancaster.com, 1 institutomaritimocolombiano.com, 1 institutomarketingdigital.net, 1 instocktho.cc, 1 @@ -60298,7 +61457,6 @@ intelalumni.org, 1 intelghost.com, 1 intelhost.com.br, 1 intelhost.net, 1 -intelics.com.au, 1 intelius.cf, 1 intellar.com, 1 intelldynamics.com, 1 @@ -60433,6 +61591,7 @@ internet-aukcion.info, 1 internet-israel.com, 1 internet-meesters.nl, 0 internet-pornografie.de, 0 +internet-tv4u.tk, 1 internet.org, 1 internet42.tk, 1 internet4all.gov, 1 @@ -60452,6 +61611,7 @@ internetional.nl, 1 internetk.tk, 1 internetkunskap.se, 1 internetline.tk, 1 +internetmagaz.tk, 1 internetmarketingprofitscenter.com, 1 internetmarkets.net, 1 internetmedia.si, 1 @@ -60519,6 +61679,7 @@ intihalprogrami.com, 1 intima-mente.com, 1 intimastoreatacado.com.br, 1 intimidad.tk, 1 +intimznakomstvo.tk, 1 intmissioncenter.org, 0 into-the-mountain.com, 1 inton.biz, 1 @@ -60818,6 +61979,7 @@ ipconsulting.se, 1 ipcontolsite.ga, 1 ipcontolsite.tk, 1 ipcstore.com, 1 +ipdental.tk, 1 ipdfreedom.me, 1 ipeeworld.com, 1 ipemcomodoro.com.ar, 1 @@ -60843,6 +62005,7 @@ iphoneunlock.nu, 1 iphostreputation.com, 1 ipid.me, 1 ipidkun.com, 1 +ipigri.tk, 1 ipinfo.tw, 1 ipioneer.ga, 1 iplaycraft.ru, 1 @@ -60877,7 +62040,6 @@ iprice.ph, 1 iprice.sg, 1 iprice.vn, 1 ipricethailand.com, 1 -iprim.ru, 1 iproducemusic.com, 1 iproductrepair.com, 1 iproskills.com, 1 @@ -60926,13 +62088,16 @@ iqteksolutions.com, 1 iraanswersers.ga, 1 iraanswersest.ga, 1 iraf.de, 1 +irajsingh.tk, 1 iramellor.com, 1 iran-oil.tk, 1 iranactua.tk, 1 +irandex.ga, 1 irandex.gq, 1 irandm.club, 1 irando.co.id, 1 irandroid.ml, 1 +iranfilmcity.tk, 1 irangeodesy.tk, 1 iranian.lgbt, 1 iranianholiday.com, 1 @@ -60948,6 +62113,7 @@ iranturkey.info, 1 iranvisa24.com, 1 iranwiki.ovh, 1 iraq4u.tk, 1 +iraqinews.ga, 1 iraqmartialarts.tk, 1 iraqtop.tk, 1 irareturners.ga, 1 @@ -60968,6 +62134,7 @@ iready.ro, 1 iredellcountync.gov, 1 iregister.al, 1 ireiguam.org, 1 +ireland.gq, 1 irelandforukraine.ie, 1 irelandinternetstuffs4u.tk, 1 irelandondemand.ie, 1 @@ -61056,6 +62223,7 @@ ironmongery.cf, 1 ironmountainsolutions.com, 1 ironpeak.be, 1 ironraven.ch, 1 +ironraven.ml, 1 ironridgewi.gov, 1 ironscales.com, 0 ironstar.tk, 1 @@ -61192,15 +62360,18 @@ iskurturkiye.cf, 1 iskurturkiye.ga, 1 islam-net.tk, 1 islam.si, 1 +islamabadcourt.tk, 1 islamantarih.tk, 1 islamerkantho.com, 0 islamfirst.ml, 1 islamicacademy.tk, 1 islamicarchitecturalheritage.com, 1 +islamicnews.tk, 1 islamicsolution.tk, 1 islaminbremen.de, 0 islamipages.tk, 1 islamiyet.tk, 1 +islamnewss.tk, 1 islamo.tk, 1 islamonline.net, 1 islamparafriendsclub.ml, 1 @@ -61247,7 +62418,6 @@ iso.fr, 1 iso27001.dk, 1 iso27032.com, 1 isobook.ml, 1 -isofartak.com, 1 isognattori.com, 1 isoindonesiacenter.com, 0 isoip.org, 1 @@ -61297,6 +62467,7 @@ israelcareersest.ga, 1 israelimtovim.co.il, 1 israelitas.tk, 1 israelmesianico.tk, 1 +israelnewswire.tk, 1 israelpalestineconfederation.org, 1 israelportalk.cf, 1 israelportalk.ga, 1 @@ -61416,10 +62587,10 @@ it-zt.at, 1 it.com.eg, 0 it.search.yahoo.com, 0 it1b.com, 1 -it4sure.nl, 1 it76.tk, 1 it82.com, 1 it9.bar, 1 +itabenar.tk, 1 itactiq.com, 1 itactiq.info, 1 itad.top, 1 @@ -61448,6 +62619,7 @@ italianweddingmusicians.com, 1 italianweddingvideographers.com, 1 italiaserie.org, 1 italiataxi.ru, 1 +italiatopnews.tk, 1 italiensk-tolk.dk, 1 italik.co.uk, 1 italjet-tuning.tk, 1 @@ -61651,6 +62823,7 @@ itsupportguys.com, 1 itsynergy.co.uk, 1 itt-shop.bg, 1 itt-shop.com, 1 +ittgame.tk, 1 ittreservations.com, 1 ittspangdahlem.com, 1 itur.co.il, 1 @@ -61667,7 +62840,7 @@ itwofm.com, 1 itwolfcl.tk, 1 itworks.agency, 1 itworks.nyc, 1 -itwozi.cc, 1 +itwozi.cc, 0 itwozi.com, 1 itxartu.tk, 1 itxlatam.com, 1 @@ -61677,8 +62850,10 @@ itzamnaxelahomestay.tk, 1 itzap.com.au, 1 itzer.de, 1 itzine.ru, 1 +itzkavin.tk, 1 itzlive.tk, 1 iua.com.au, 1 +iubuniversity.tk, 1 iurisnovagestion.es, 0 iurisnow.com, 1 iuspenal.com, 1 @@ -61686,6 +62861,7 @@ iv-vr.com, 1 iv2.com, 1 iv4khd.com, 1 iv4kiso.com, 1 +ivahbbiz.tk, 1 ivampiresp.com, 1 ivan-maliy.tk, 1 ivan-popov.tk, 1 @@ -61791,7 +62967,6 @@ iwtsd.gov, 1 iww.me, 1 iww.mx, 1 iww.org.nz, 1 -ix.run, 1 ix8.ru, 0 ixiatiao.com, 1 ixit.cz, 1 @@ -61839,6 +63014,7 @@ izmir-media.ga, 1 izmir-organizasyon.tk, 1 izmirarabakiralama.name.tr, 1 izmirarackiralama.name.tr, 1 +izmirescort.tk, 1 izmirotokiralama.name.tr, 1 izmirprotestan.org, 1 izmirrentacar.name.tr, 1 @@ -61999,6 +63175,7 @@ jackob.tk, 1 jackops.com, 1 jackpothappy.com, 1 jackripper.tk, 1 +jackrussel.tk, 1 jackrusselterrier.com.br, 1 jacksanalytics.com, 1 jacksball.com, 1 @@ -62035,7 +63212,6 @@ jacobi-server.de, 1 jacobian.org, 1 jacobjangles.com, 1 jacobo.tk, 1 -jacobphono.com, 1 jacobs-implantate.at, 1 jacobsenarquitetura.com, 1 jacobsmeubels.nl, 1 @@ -62095,6 +63271,7 @@ jahit.tk, 1 jahner.xyz, 1 jahubar.tk, 1 jaialdi.tk, 1 +jaiestate.com, 1 jaiho-zeetoz1server.ga, 1 jailbait.ml, 1 jailbreakingisnotacrime.org, 1 @@ -62264,7 +63441,6 @@ janbennink.com, 1 janbilek.cz, 1 janbjerke.no, 1 janbretschneider.de, 1 -janbrodda.de, 1 janbruckner.de, 1 jandenhertog.nl, 1 jandenul.com, 1 @@ -62277,6 +63453,8 @@ jands.co.id, 1 janduchene.ch, 1 jane.com, 1 janelauhomes.com, 1 +janelle-jamer.tk, 1 +janellequintana.tk, 1 janenwouter.tk, 1 janescottceramics.com, 1 janetandjohns.tk, 1 @@ -62396,7 +63574,6 @@ jarroba.com, 1 jarrods.tech, 1 jarsater.com, 0 jarski.eu, 1 -jas-ac.com, 1 jas-team.net, 1 jasawebbisnis.com, 0 jasch.tk, 1 @@ -62487,6 +63664,7 @@ javiergddw.com, 1 javierguandalini.com, 1 javierjurado.tk, 1 javierlorente.es, 0 +javiermascherano.tk, 1 javiscoffee.com, 1 javitron.tk, 1 javleech.com, 1 @@ -62565,7 +63743,6 @@ jcadg.com, 1 jcaicedo.com, 1 jcaicedo.tk, 1 jcb.com, 1 -jcbgolfandcountryclub.com, 1 jccars-occasions.be, 1 jccrew.org, 1 jcdenast.tk, 1 @@ -62654,6 +63831,7 @@ jdlt.co.uk, 1 jdm.elk.pl, 1 jdm.pl, 1 jdmgarage.com.au, 1 +jdncr.com, 1 jdoi.pw, 1 jdpleisure.co.uk, 1 jdproofing.com, 1 @@ -62827,6 +64005,7 @@ jennifermason.eu, 1 jennifermorrisonart.com, 1 jennifersauer.nl, 1 jenniferschmidt.com.au, 1 +jennifertilly.tk, 1 jenningsbet.com, 1 jenniwiltz.com, 1 jennyjones.tk, 1 @@ -62898,6 +64077,7 @@ jerseyjumpingbeans.co.uk, 1 jerseylvi2013.org, 1 jerseyplantsdirect.com, 0 jerusalem.estate, 1 +jerusalempersonals.ml, 1 jerusalempersonalsers.ga, 1 jerusalempersonalsest.ga, 1 jerusalemplus.tv, 1 @@ -62925,6 +64105,7 @@ jesseklaver.nl, 1 jessem.fr, 1 jessenaser.net, 1 jessenaser.org, 1 +jesseonline.tk, 1 jessesjumpingcastles.co.uk, 1 jessetrebil.com, 1 jessetrebilfoundationsystems.com, 1 @@ -62953,6 +64134,7 @@ jesuscnasistente.com, 1 jesusda.tk, 1 jesusdenazaret.com, 1 jesusthegoodshepherd.org, 1 +jesusvasquez.tk, 1 jetable.org, 1 jetaninchina.com, 1 jetapi.org, 1 @@ -62990,6 +64172,7 @@ jeurissen.co, 1 jeuxerotiques.net, 1 jevel-mag.tk, 1 jevisite.ca, 1 +jewadvert.ml, 1 jewaedv.de, 1 jeweet.net, 1 jewelcaddesigns.com, 1 @@ -63019,7 +64202,9 @@ jf-madalena.tk, 1 jf886.cc, 1 jfbst.net, 1 jfcare.dk, 1 +jfgselbitztal.tk, 1 jfhr.de, 1 +jfhr.me, 1 jfjtransport.com, 1 jfklibrary.gov, 1 jfmdevelopment.ml, 1 @@ -63051,6 +64236,7 @@ jhmrcm.com, 1 jhollandtranslations.com, 1 jhoncampos.com, 1 jhonesmarcos.tk, 1 +jhonmurillo.ml, 1 jhost.gq, 1 jhuang.me, 1 jhw3d.com, 1 @@ -63154,6 +64340,7 @@ jingmi.com.tw, 1 jinja.ai, 1 jinjun.top, 1 jinliming.ml, 1 +jino.gq, 1 jintaiyang123.org, 1 jiogo.com, 1 jiotvdth.com, 1 @@ -63196,6 +64383,7 @@ jjhampton.com, 1 jjj.blog, 1 jjlvk.nl, 1 jjsguitarpickups.com, 1 +jjsmaccountants.com, 1 jjspartyhire.co.uk, 1 jjsummerboatparty.co.uk, 1 jjzmaj.tk, 1 @@ -63210,6 +64398,7 @@ jkessen.de, 1 jkest.cc, 1 jkfindings.com, 1 jkg.tw, 1 +jki.io, 1 jkinteriorspa.com, 1 jkloli.tk, 1 jkmoving.com, 1 @@ -63366,7 +64555,6 @@ jobs4sales.ch, 1 jobscore.com, 1 jobseekeritalia.it, 1 jobsindemedia.nl, 1 -jobsinwales.net, 1 jobsisbrown.com, 1 jobsjj.com, 1 jobskilled.co.za, 1 @@ -63388,7 +64576,6 @@ jobvoyager.com, 1 jobwinner.ch, 1 jobynet.tk, 1 jobzcorner.tk, 1 -jobzninja.com, 1 jocafil.com, 1 jocata.com, 1 jocelynjenkins.com, 1 @@ -63671,11 +64858,13 @@ jonferwerda.net, 1 jonfor.net, 1 jong030.nl, 1 jongbloed.nl, 1 +jongcaxent.tk, 1 jongcs.com, 1 jongenstromp.tk, 1 jongenwijs.gent, 1 jongerenkring.tk, 1 jongpay.com, 1 +jongtonghapkido.tk, 1 jonilar.com, 1 jonin.tk, 1 jonin2.tk, 1 @@ -63740,6 +64929,7 @@ jordanmetal.tk, 1 jordannight.net, 1 jordanp.engineer, 1 jordanprice.ml, 1 +jordanprogrammer.tk, 1 jordanrey.net, 1 jordans.co.uk, 1 jordanscorporatelaw.com, 1 @@ -63773,9 +64963,13 @@ josannedesign.tk, 1 josc.com.au, 1 joscares.com, 1 jose-alexand.re, 1 +jose-latino.tk, 1 jose-lesson.com, 1 +jose-manuel-benito-alvarez.tk, 1 +joseenriquegonzalez.tk, 1 joseetesser.nl, 1 josef-lotz.de, 1 +josefernandomorilloardila.tk, 1 josefinagrau.tk, 1 josefjanosec.com, 1 joseflegal.com, 1 @@ -63883,6 +65077,7 @@ jouwpaardenbak.nl, 1 jouwsongteksten.tk, 1 jouwzorgjob.be, 1 jovanmarkovic.ga, 1 +jovenescontraelaburrimiento.tk, 1 joviam.com, 1 jovic.hamburg, 1 jovisa.com.tw, 1 @@ -64100,6 +65295,7 @@ jucelo.de, 1 juchheim-methode.de, 1 juchit.at, 1 jucktehkeinen.de, 1 +jucocauca.tk, 1 judc-ge.ch, 1 jude.eu.org, 1 judge.ga, 1 @@ -64163,6 +65359,7 @@ julenetxaniz.eus, 1 julenlanda.com, 0 julesfrans.be, 1 julesroovers.nl, 1 +julia-clarete.tk, 1 julia-jones.org, 1 julia-pink.org, 1 julia.school, 1 @@ -64290,6 +65487,7 @@ junglememories.co.uk, 1 jungleworks.com, 1 junglist.org, 1 jungschuetzen.tk, 1 +jungyonghwa.tk, 1 juniet.net, 1 juniku.tk, 1 juniorchamber.international, 1 @@ -64320,10 +65518,13 @@ junyan.ga, 1 juozasveza.lt, 1 jupiteram.com, 1 jupiterchiropractic.com, 1 +juppy.tk, 1 jura-reiseschutz.de, 1 +juragan.ga, 1 juraganhp.com, 1 jurancic.com, 1 jurassicbarkharrogate.co.uk, 1 +jurassicworldfilmen.cf, 1 jurena.sk, 1 jurex-cup.cz, 1 jurex.cz, 1 @@ -64355,6 +65556,7 @@ jusquauxdents.tk, 1 just-a-clanpage.de, 1 just-bees.de, 1 just-heberg.fr, 1 +just-keep-swimming.tk, 1 just-muh.de, 1 just-pools.co.za, 1 just-vet-and-drive.fr, 1 @@ -64371,6 +65573,7 @@ justbelieverecoverypa.com, 1 justbookexcursions.com, 1 justbooktransfers.com, 1 justboom.co, 1 +justcalm.tk, 1 justchunks.net, 1 justement.ch, 1 justfashionnow.com, 1 @@ -64395,6 +65598,7 @@ justindianporn.me, 1 justinellingwood.com, 1 justinfreid.com, 1 justinho.com, 1 +justinmanders.nl, 1 justinsinkula.com, 1 justinstago.com, 1 justinstandring.com, 1 @@ -64417,6 +65621,7 @@ justor.ru, 1 justpaste.it, 1 justpdf.cf, 1 justpractice.ca, 1 +justquoteme.ga, 1 justrighthsc.com, 1 justsa.co.za, 1 justsandro.tk, 1 @@ -64772,6 +65977,7 @@ kadix.com.br, 1 kado-ya.jp, 1 kadolis.com, 1 kadro.com.pl, 1 +kadvi.tk, 1 kadykchanskiy.ml, 1 kaeme.com, 1 kaeptns-sechser.de, 1 @@ -64804,6 +66010,7 @@ kahane.org, 1 kahvakiekkotalkoot.fi, 1 kai-justin.de, 1 kai-ratzeburg.de, 1 +kai-ruecker.tk, 1 kai.cool, 0 kaibinyang.com, 1 kaibo.cz, 1 @@ -64857,6 +66064,7 @@ kajirakuda.com, 1 kajlovo.cz, 1 kajzonnebeke.tk, 1 kak-pishetsa.ru, 1 +kak-pohudet-legko.ml, 1 kak-prygotovyt.ru, 1 kak-sarabotatj.ru, 1 kak-sdelatj.ru, 1 @@ -64903,9 +66111,11 @@ kalambur.gq, 1 kalambur.ml, 1 kalami.nl, 1 kalamos-psychiatrie.be, 1 +kalamos.tk, 1 kalamotownship-mi.gov, 1 kalapatec.id, 1 kalashcards.com, 1 +kalashnikov.ml, 1 kalaskvintetten.tk, 1 kalaspuffar.se, 1 kalastus.com, 1 @@ -64919,12 +66129,14 @@ kalevlamps.co.uk, 1 kalhufvudet.se, 1 kaliaa.fi, 1 kalian.cz, 1 +kaliboairport.tk, 1 kaliforniya.tk, 1 kalilinux.tech, 1 kalimantan.tk, 1 kalimari.tk, 1 kalimat.gq, 1 kalina.ml, 1 +kaliningrad.gq, 1 kaliningrad.ml, 1 kalinka-shop.tk, 1 kaliocommerce.com, 1 @@ -64946,6 +66158,7 @@ kaloix.de, 1 kalolina.farm, 0 kalombo.ru, 1 kalpavriksh.org, 1 +kalsa.ga, 1 kalsbouncies.com, 1 kaltenbrunner.it, 1 kalterersee.ch, 1 @@ -65045,7 +66258,6 @@ kandianshang.com, 1 kandofu.com, 1 kandra.com.br, 1 kandrahechiceravudu.com, 1 -kandwliquor.com, 1 kanecastles.com, 1 kanecountyil.gov, 1 kanehisa.xyz, 1 @@ -65104,13 +66316,13 @@ kanz.jp, 1 kanzashi.com, 1 kanzlei-hhh.de, 1 kanzlei-oehler.com, 1 -kanzlei-sixt.de, 1 kanzshop.com, 1 kaohongshu.blog, 1 kaosintesta.tk, 1 kap-kirche.de, 1 kap.pe, 1 kapanlagi.gq, 1 +kapelya.gq, 1 kapilarya.com, 1 kapiorr.duckdns.org, 1 kapital-kredit.cf, 1 @@ -65191,6 +66403,7 @@ karelia.cf, 1 karelia.ga, 1 karelia.ml, 1 karelin.tk, 1 +kareltrans.tk, 1 karelvanhecke.com, 1 karen-homestay.tk, 1 karencatering.com, 1 @@ -65210,6 +66423,7 @@ karikatur.ga, 1 karikatur.ml, 1 karikatur.tk, 1 karimova.tk, 1 +karimsaadati.tk, 1 karina.gd, 1 karinahh.net, 1 karinheinenmaassen.nl, 1 @@ -65349,7 +66563,9 @@ kataiszilveszter.hu, 0 katalog-parfyum.tk, 1 katalog-serverof.ml, 1 katalog-serverov.cf, 1 +katalog-serverov.ga, 1 katalog-serverov.tk, 1 +katalog-tovarov.tk, 1 katalogbutikker.dk, 1 katalogharga.cf, 1 katalogkapsli.pl, 1 @@ -65380,7 +66596,9 @@ kateryan.tk, 1 kateryantv.tk, 1 katewrightmba.com, 1 katex.org, 1 +kateysagal.tk, 1 kathakkachakkar.com, 1 +katherineswynford.tk, 1 kathleendeisher.com, 1 kathless.com, 1 kathmandupost.com, 1 @@ -65449,6 +66667,7 @@ kausharach.tk, 1 kausta.me, 1 kaustubhk.com, 1 kavalasite.gr, 1 +kavatasygarety.tk, 1 kaverti.com, 1 kavik.no, 1 kavin.rocks, 1 @@ -65698,7 +66917,6 @@ kein-hindernis.de, 1 kein-vergessen.tk, 1 keinanung.nl, 1 keinefilterblase.de, 1 -keingeldbezahlt.de, 1 keio-bizplaza.jp, 1 keio-formula.com, 1 keiralewis.co.uk, 1 @@ -65774,6 +66992,7 @@ kellyosbourne.tk, 1 kellyskastles.co.uk, 1 kellyssportsbarandgrill.com, 1 kellyswordshop.com, 1 +kellyvoice.tk, 1 kellywebcam.tk, 1 kelm.me, 1 keln.net, 1 @@ -65791,10 +67010,13 @@ kemanai.akita.jp, 1 kemand.com, 1 kemandirian.com, 1 kemeha.tk, 1 +kemerovo.gq, 1 +kemerovo.ml, 1 +kemerovo.tk, 1 +kemerovo42.tk, 1 kemet-international.com, 1 kemet.co.uk, 1 kemet.com.au, 1 -kemoiptv.com, 0 kemono.party, 1 kempkens.io, 1 kempnertx.gov, 1 @@ -65803,9 +67025,11 @@ kemptonparkplumbing.co.za, 1 kemptown.co.uk, 1 kemptown.com, 1 kemptown.net, 1 +kemsa.ga, 1 kemsamnhatban.cf, 1 kemsamnhatban.ga, 1 kemsamnhatban.gq, 1 +kemsamnhatban.ml, 1 kemsamnhatban.tk, 1 ken-electric.com.br, 1 ken.fm, 1 @@ -65819,12 +67043,14 @@ kendernet.com, 1 kendev.com, 1 kendinyapurunleri.com, 1 kendle.tk, 1 +kendrick.tk, 1 kendu.si, 0 kenedytx.gov, 1 kenedytxedc.gov, 1 kenforeman.com, 1 kenhgiamgia.net, 1 keniasfamilychildcare.com, 1 +keniff.gq, 1 kenkoelectric.com, 0 kenlewis.com, 1 kenmartin.ru, 1 @@ -65839,6 +67065,7 @@ kennethandersen.com, 1 kennethlim.me, 1 kenneths.org, 1 kennethsentillas.com, 1 +kennewell.tk, 1 kennfixx.com, 1 kennfixx.de, 1 kennis.ga, 1 @@ -65852,6 +67079,8 @@ keno.tk, 1 kenockeetownshipmi.gov, 1 kenokallinger.at, 1 kenoschwalb.com, 1 +kenpobolivia.tk, 1 +kenpotalca.tk, 1 kenrick95.org, 1 kens.pics, 0 kensbouncycastles.co.uk, 1 @@ -65892,6 +67121,7 @@ kerb.com, 1 kerbin.org, 1 kercovaparty.tk, 1 kerebro.com, 1 +kerforhome.com, 0 keridos.de, 1 kerijacoby.com, 1 kerimusta.com, 1 @@ -65918,11 +67148,13 @@ kerrcountytx.gov, 1 kerrnel.com, 1 kerroscale.in, 1 kerryconsulting.com, 1 +kerrydavisguitars.tk, 1 kerrynbutlergardens.co.nz, 1 kersmexico.com, 1 kerstboomkantenklaar.nl, 1 kerstpagina.tk, 1 kersvers.agency, 1 +kertis.tk, 1 kerus.net, 1 kescher.at, 1 kescher.gay, 1 @@ -65948,8 +67180,10 @@ keszulektervezes.hu, 0 ketabbashi.com, 1 ketamine.co.uk, 1 ketemulagi.com, 1 +ketgioisu.tk, 1 ketoanvietnam.tk, 1 ketocanine.ca, 1 +ketoconazole.gq, 1 ketoliv.dk, 1 ketopower.club, 1 ketotadka.com, 1 @@ -66035,6 +67269,7 @@ keyesrobot.cn, 1 keyfortech.com, 1 keygen.sh, 1 keygenguru.com, 1 +keyhani.tk, 1 keyholdingservices.co.uk, 1 keyhomechecker.com, 1 keyihao.cn, 1 @@ -66058,6 +67293,7 @@ keytomyq.com, 1 keyua.org, 1 keywalker.co.jp, 1 keywaysconsulting.co.uk, 1 +keyworth-meadow.tk, 1 keyyek.com, 0 keziah.de, 1 kezmanweb.tk, 1 @@ -66068,12 +67304,10 @@ kf068.com, 1 kf196.com, 0 kf199.com, 0 kf2525.com, 1 -kf6636.com, 1 kf66888.com, 0 kf6820.com, 1 kf688.com, 1 kf7676.com, 0 -kf7joz.com, 1 kf88666.com, 1 kf8954.com, 0 kf8955.com, 0 @@ -66111,21 +67345,28 @@ kha.com, 1 khabar24.tk, 1 khachhangvietnam.tk, 1 khadishalatina.com, 1 +khakasiya.ml, 1 khakasiya.tk, 1 khakassia.cf, 1 +khakassia.ga, 1 khakassia.gq, 1 khakassia.tk, 1 +khaki.ga, 1 khakiblossom.com, 1 khakim.gq, 1 +khakim.tk, 1 khaledkhan.ml, 1 khaleesi.tk, 1 khalidalnajjar.com, 1 +khalidmail.tk, 1 khaliinfo.tk, 1 khalti.com, 1 khanacademy.org, 1 khankandi.tk, 1 khanovaskola.cz, 1 +khanyisacentre.co.za, 1 khaotipthai.se, 1 +kharatinoil.ml, 1 kharkiv.tk, 1 kharkov.tk, 1 kharris.info, 1 @@ -66150,6 +67391,7 @@ khodromedic.com, 1 khojhealth.com, 1 khorne.me, 1 khosroblog.ir, 1 +khoteyev.tk, 1 khouloud.de, 1 khoury-dulla.ch, 0 khouryalexandre.com, 0 @@ -66160,6 +67402,7 @@ khs1994.com, 1 khslaw.com, 1 khste-ceciliamoorsel.tk, 1 khudothiswanpark.vn, 1 +khukhrain.tk, 1 khusal.tk, 1 khushiandjoel.com, 1 khwezifinancialservices.co.za, 1 @@ -66177,6 +67420,7 @@ kiapartsnow.com, 1 kiapps.ovh, 1 kiarayoga.com, 1 kiarey.net, 1 +kiasarnews.tk, 1 kiasystems.com, 1 kibea.net, 1 kibersalon.com, 1 @@ -66281,7 +67525,9 @@ kiesjeplek.nl, 1 kiesmedia.com, 1 kiesuwarbeidsrechtadvocaat.nl, 1 kiesuwkerstkaart.nl, 1 +kietblog.tk, 1 kieutruong.com, 1 +kiev-live.tk, 1 kievanrus.tk, 1 kievholod.in.ua, 1 kievkiralikotel.com, 1 @@ -66308,6 +67554,7 @@ kilianvalkhof.com, 1 kiliframework.org, 1 kilimstyle.com, 1 kilkennyaccountingservices.ie, 1 +kilkimzaibu.tk, 1 killaraapartments.com.au, 1 killarnee.org, 1 killborn.tk, 1 @@ -66321,9 +67568,12 @@ killerrobots.com, 1 killerwebsites.com.au, 1 killharmonic.tk, 1 killme.rocks, 1 +killmebaby.ml, 1 +killmenow.tk, 1 killtv.me, 1 killua-website.tk, 1 killymoonbouncycastles.com, 1 +kilo-files.tk, 1 kilobyte22.de, 1 kilogram.nl, 1 kiloklubi.fi, 1 @@ -66394,6 +67644,7 @@ kinaesthetics.pl, 1 kinaesthetics.ro, 1 kinaesthetics.ru, 1 kinaesthetik-verein.de, 1 +kinanbudotenero.tk, 1 kinanta.com, 1 kinautas.com, 1 kinbev.com, 1 @@ -66443,6 +67694,7 @@ kinfule.tk, 1 king-of-the-castles.com, 1 kingant.net, 1 kinganywhere.eu, 1 +kingbot.tk, 1 kingchess.vip, 1 kingclass.cn, 1 kingcourriel.fr, 1 @@ -66461,6 +67713,8 @@ kingjamesbibleonline.org, 1 kingjamesgospel.com, 1 kingkongxo.com, 1 kinglaksa.com, 0 +kinglier.ga, 1 +kingliey.ga, 1 kingmakers.academy, 1 kingmakers.eu, 1 kingofshooting.com, 1 @@ -66503,6 +67757,7 @@ kinnikinnick.com, 0 kino-boom.tk, 1 kino-dom.tk, 1 kino-doma.tk, 1 +kino-room.ga, 1 kino-zavr.tk, 1 kinobag.tk, 1 kinobarashka.ga, 1 @@ -66511,12 +67766,17 @@ kinocheck.com, 1 kinocheck.de, 1 kinodrom.kiev.ua, 1 kinodrom.tk, 1 +kinofest.tk, 1 kinofile.tk, 1 +kinofilmionline.tk, 1 kinogold.tk, 1 +kinograd.tk, 1 kinohi.tk, 1 kinohled.cz, 1 kinokub.tk, 1 +kinolex.ml, 1 kinology.tk, 1 +kinomagia.cf, 1 kinomangas.ml, 1 kinomangas.tk, 1 kinomaniac.tk, 1 @@ -66524,10 +67784,14 @@ kinomoto.ovh, 0 kinos.nl, 0 kinoscope.tk, 1 kinoserver.ml, 1 +kinosha.tk, 1 kinoshkahd.tk, 1 +kinoshki.ga, 1 kinovam.tk, 1 +kinovsem.ml, 1 kinowork.tk, 1 kinozal-me.appspot.com, 1 +kinozone.tk, 1 kinschots.eu, 1 kinsei.jp, 1 kinshipnd.com, 1 @@ -66581,6 +67845,7 @@ kirchengemeinde-markt-erlbach.de, 1 kircp.com, 1 kirei.se, 1 kiret.tk, 1 +kirgistan.tk, 1 kiriani.me, 1 kirie-photos.tk, 1 kirig.ph, 1 @@ -66605,6 +67870,8 @@ kirkwoodfencing.com, 1 kirkwoodoutdoors.com, 1 kiropraktorvard.se, 1 kirov.ml, 1 +kirovcity.tk, 1 +kirovgrad.tk, 1 kirrie.pe.kr, 1 kirs.is, 1 kirsch-gestaltung.de, 1 @@ -66642,6 +67909,8 @@ kisstube.tv, 1 kistenmacher.net, 1 kistipro.tk, 1 kisulki.tk, 1 +kisumuterraceapartments.tk, 1 +kisvasut.tk, 1 kita-freie-schule.de, 1 kita-sun.com, 1 kitabat.com, 1 @@ -66768,6 +68037,7 @@ kk9297.co, 1 kk9721.com, 1 kk9728.co, 1 kka.vc, 1 +kkangeli.tk, 1 kkaramela.eu, 1 kkc.com, 1 kkcinemas.in, 1 @@ -66824,6 +68094,7 @@ klart.se, 1 klassen.tk, 1 klassiekballet.tk, 1 klassika.cf, 1 +klassika.tk, 1 klatschreime.de, 1 klaudialeszczynska.pl, 1 klauke-enterprises.com, 1 @@ -66868,6 +68139,7 @@ kleintransporte.net, 1 kleinwenner.eu, 1 kleise.gr, 1 kleki.com, 1 +klementijgerta.tk, 1 klemkow.net, 1 klemkow.org, 1 klempin.co.uk, 1 @@ -66948,6 +68220,8 @@ kloza.tk, 1 kls-platform.com, 1 klssn.com, 1 klu.io, 1 +klub-zajmov.ga, 1 +klub.tk, 1 klubcajovna.cz, 1 kluberphoto.hu, 1 klubfitness.pl, 1 @@ -67014,6 +68288,7 @@ kngk-transavto.ru, 1 kngkng.com, 1 kniga-ru.tk, 1 kniga.market, 0 +knigareceptov.cf, 1 knigareceptov.tk, 1 knighki-knighki.ml, 1 knighkidoma.tk, 1 @@ -67024,6 +68299,7 @@ knighulki.cf, 1 knigi-free.cf, 1 knigi-market.ml, 1 knigi-na-dom.cf, 1 +knigi-zdes.gq, 1 knigifast.ga, 1 knigiunass.tk, 1 knihovnajablonne.cz, 1 @@ -67062,6 +68338,7 @@ knownsec.cf, 1 knowpanamatours.com, 1 knowrentalsers.ga, 1 knowrentalsest.ga, 1 +knowthebus.cf, 1 knowthebus.ga, 1 knowthebus.gq, 1 knowyour.place, 1 @@ -67084,6 +68361,7 @@ knulle.me, 1 knurps.de, 1 knuterikskare.no, 1 knuthildebrandt.de, 0 +knuwiki.tk, 1 knxstore.cz, 1 knyawningrenovation.com, 1 knygos.lt, 1 @@ -67124,6 +68402,7 @@ kocherev.org, 1 kochereva.com, 1 kocheshkov.cf, 1 kochhar.net, 1 +kochi-death.ml, 1 kochinke.com, 1 kochinke.us, 1 kochrezepte.tk, 1 @@ -67141,6 +68420,7 @@ kode-it.de, 1 kode.ch, 0 kodecat.com, 1 kodeholic.me, 1 +kodexplorer.ml, 1 kodifirestick.info, 1 kodify.net, 1 kodigo.me, 1 @@ -67185,6 +68465,7 @@ kofler.info, 1 kogak.ninja, 1 kogax.com, 0 kogi.fr, 1 +kogotok.gq, 1 kogotok.ml, 1 kogro.de, 1 kogudesi.com, 1 @@ -67210,7 +68491,7 @@ kojiishikawa.com, 1 kojipkgs.fedoraproject.org, 1 koka-shop.de, 1 kokakiwi.net, 1 -kokanbite.com, 1 +kokanbite.com, 0 kokankart.com, 1 kokensupport.com, 1 koketteriet.se, 1 @@ -67220,7 +68501,6 @@ kokoiroworks.com, 1 kokomo.cloud, 1 kokona.ch, 1 kokoroheart.cf, 1 -kokotaj.de, 1 kokotaru.com, 1 kokteili.tk, 1 koktelparty.tk, 1 @@ -67233,7 +68513,6 @@ kolaci.tech, 1 kolaczek.cz, 1 koladeogunleye.com, 1 kolakamal.tk, 1 -kolakweb.com, 1 kolania.com, 1 kolania.de, 1 kolania.net, 1 @@ -67245,6 +68524,7 @@ kolbeinsson.se, 1 kolcsey.eu, 1 koldanews.com, 0 kolfan.tk, 1 +kolhozik.ml, 1 kolibrikapp.com, 1 kolibrisolutions.nl, 1 kolin.org, 1 @@ -67281,6 +68561,7 @@ komakogemus.ee, 1 komalgandhi.tk, 1 komall.net, 1 komarex.pl, 1 +komarh.tk, 1 komatsuforklift.com, 1 komehyo.co.jp, 1 komelin.com, 0 @@ -67296,10 +68577,12 @@ komiksbaza.pl, 1 kominfo.go.id, 0 kominki-sauny.pl, 1 komintek.ru, 1 +komintern43.tk, 1 komischkeszeug.de, 1 komitur.tk, 1 komlangs.nl, 1 kommaer.dk, 1 +komment.ml, 1 kommerciya.cf, 1 kommerciya.ml, 1 kommotiv.nl, 0 @@ -67307,6 +68590,7 @@ kommune42.org, 1 kommunermeddnssec.se, 1 kommunermedipv6.se, 1 kommunikation-czw.de, 1 +kommunistienliitto.tk, 1 kommx.de, 1 komodolabs.com, 1 komoju.com, 1 @@ -67346,6 +68630,7 @@ kondou-butsudan.com, 1 konducars.nl, 1 konectbus.co.uk, 1 konetsu.tk, 1 +konf.ga, 1 konfekcjonowanie.com, 1 konfiskator.online, 1 konflikte-als-chance.de, 1 @@ -67372,6 +68657,7 @@ konnai.jp, 1 konnitanaka.com, 1 konoex.com, 1 konoka.top, 1 +kononenko.ml, 1 konopizza.at, 1 konpyuta.nl, 1 konser.co.uk, 1 @@ -67379,27 +68665,34 @@ konsertoversikt.no, 1 konservy.tk, 1 konskowola.info.pl, 1 konst.se, 1 +konstanz.tk, 1 konstitucia.com, 1 konstructdigital.com, 1 konsul.ga, 1 konsul.tk, 1 +konsultacii-buhgaltera.ga, 1 konsultaciya-astrologa.cf, 1 konsultaciya-astrologa.ga, 1 +konsultaciya-astrologa.gq, 1 konsultaciya-astrologa.ml, 1 +konsultaciya-astrologa.tk, 1 konsultation.nu, 1 konsultermedipv6.se, 1 kontabilitet.tk, 1 kontaxis.org, 1 kontenido.net, 1 kontikifinance.com, 1 +kontikiindustries.tk, 1 kontist.com, 1 kontorhaus-schlachte.de, 1 kontorhaus-stralsund.de, 1 kontracovid.ph, 1 kontracrew.tk, 1 kontrapolis.info, 1 +kontrastonline.tk, 1 kontrolapovinnosti.cz, 1 kontur-extern.ru, 0 +kontur.tk, 1 konuhaber.com, 0 konus.tk, 1 konventa.net, 1 @@ -67438,11 +68731,14 @@ koot.nl, 1 kooxdiving.com, 1 koozal.de, 1 kop-papierrestauratie.nl, 1 +kopany.tk, 1 kopatych.tk, 1 kopb.tk, 1 +kopeechka.ml, 1 kopenenvergelijken.nl, 1 koperek.pl, 0 kopeyka.cf, 1 +kopfgeld.tk, 1 kopfkrieg.org, 1 kopfsalat.eu, 0 kopfschaschlik.de, 1 @@ -67464,6 +68760,8 @@ kor.ovh, 1 kora-go.tk, 1 kora-pluss.com, 0 korabi.tk, 1 +korablino.tk, 1 +korancode.tk, 1 koranseruya.com, 1 korbel-loziska.cz, 1 korben.info, 1 @@ -67487,22 +68785,26 @@ koreanure.tk, 1 koredia.com, 1 koreisai.tech, 1 koresageart.com, 1 +korespondent.tk, 1 koretech.nl, 1 korfbalinformatie.nl, 1 korhonen.cc, 1 korkortet.tk, 1 korkortonline.se, 1 kormmi.ru, 1 +korn-klan.tk, 1 kornmesser-goldankauf.at, 1 korofilms.com, 1 koroleva.ml, 1 korolevstvo-movie.ml, 1 +koroli.tk, 1 koroshkabir.tk, 1 korr.com, 1 korrelzout.nl, 1 korst.tk, 1 korstanjebouw.nl, 1 korstanjetimmerwerken.nl, 1 +kortarsmagyarfesto.tk, 1 kortgebyr.dk, 1 korund.tk, 1 korusautos.com, 1 @@ -67515,6 +68817,8 @@ koscielniak-nieruchomosci.pl, 1 kose.edu.ee, 1 koseven.ga, 1 kosgebkredisi.com, 1 +koshakovo.ga, 1 +koshechka.tk, 1 koshercutleryers.ga, 1 koshercutleryest.ga, 1 koshereducationers.ga, 1 @@ -67529,9 +68833,11 @@ kosmetykifm.pl, 1 kosmonavt.tk, 1 kosmopoisk-orel.tk, 1 kosmoprolet.tk, 1 +kosmosfestival.tk, 1 kosmosradio.tk, 1 koso.me, 1 kosovitolinks.tk, 1 +kosovo.gq, 1 kost-magazin.de, 1 kostarikanamiru.cz, 1 kostavro.eu, 1 @@ -67539,7 +68845,13 @@ kostecki.com, 1 kostecki.org, 1 kostecki.tel, 1 kostenlosepornos.online, 1 +kostenloses-forum.tk, 1 kosterenpartners.com, 1 +kostroma-city.tk, 1 +kostroma.cf, 1 +kostroma.gq, 1 +kostroma.ml, 1 +kostroma.tk, 1 kostube.tk, 1 kosturk.ru, 1 kostya.ws, 1 @@ -67548,6 +68860,7 @@ kosuzu.moe, 1 kot.gay, 1 kotaartsklan.com, 1 kotabogor.org, 1 +kotaev.tk, 1 kotajakarta.info, 1 kotak.us, 1 kotakoo.id, 1 @@ -67556,6 +68869,7 @@ kotatgent.be, 1 kother.org, 1 kotidevidevta.org, 1 kotilinkki.fi, 1 +kotka.ml, 1 kotly-marten.com.ua, 1 kotmale.com, 1 kotobox.net, 1 @@ -67564,6 +68878,7 @@ kotok.tk, 1 kotomei.moe, 1 kotonoha.cafe, 1 kotonozaka.xyz, 1 +kotoopros.tk, 1 kotori.love, 1 kotorimusic.ga, 1 kottbulle.net, 1 @@ -67609,6 +68924,7 @@ kozgi.com, 1 kozhzamenitely.tk, 1 kozitsyn.name, 1 kozlekedes.info, 1 +kozlov.cf, 1 kozmetikus.tk, 1 kozuch.biz, 1 kozune.com, 1 @@ -67618,6 +68934,7 @@ kp0809.com, 1 kpfanworld.com, 1 kpinvest.eu, 1 kpk.edu.ee, 1 +kplastics.in, 1 kplasticsurgery.com, 1 kplnet.net, 1 kpmgccc.co.nz, 0 @@ -67653,6 +68970,7 @@ krafciarka.pl, 1 kraft.blog, 1 kraft.im, 1 kraft.lol, 1 +kraftek.cf, 1 kraftzeiten.de, 1 krag.be, 1 kraga.sk, 1 @@ -67664,6 +68982,10 @@ kraken-ttt.com, 1 kraken.io, 0 kraken.site, 1 krakenrobotik.de, 1 +krakozyabra.ga, 1 +krakozyabra.gq, 1 +krakozyabra.tk, 1 +kralenparadijs.tk, 1 kralik.io, 1 kralovskapradelna.cz, 1 kram.nz, 1 @@ -67676,14 +68998,21 @@ krang.org.uk, 1 kranjnakolo.ml, 1 krankenpflege-haushaltshilfe.de, 1 krankenpflege.ch, 1 +kranservice-alzey.tk, 1 krapiva.tk, 1 +krasa.tk, 1 krasavchik.by, 1 krasivye-foto.ru, 1 +kraski.tk, 1 krasnaya-nit.ga, 1 krasnodar-pravoved.ru, 1 krasnodar.one, 1 +krasnodar24.tk, 1 krasnodarkrai.tk, 1 +krasnoyarsk-24.tk, 1 krasnoyarsk24.tk, 1 +krasotkafirm.tk, 1 +krasotki.ml, 1 kratochvilovi.net, 1 krattk.de, 1 krauseent.com, 0 @@ -67728,6 +69057,9 @@ kreditkarten-forum.de, 1 kreditkoll.nu, 1 kreditmegasolusi.com, 1 kredito.pt, 1 +kreditonline.ml, 1 +kreditor.gq, 1 +kreditovnet.tk, 1 kreditsystem.net, 1 kreditvergleich.org, 1 kreditzirkus.de, 1 @@ -67746,6 +69078,7 @@ kremer-sonnenschutzsysteme.de, 1 kreno.tech, 1 krenstetter.at, 1 kreolis.net, 1 +kresimir-blazevic.tk, 1 krestanskydarek.cz, 1 kretaforum.dk, 1 kretschmann.consulting, 1 @@ -67764,6 +69097,7 @@ kriegstopp.jetzt, 1 kriener.photography, 1 krillz.se, 1 krilotek.com, 1 +krilov.tk, 1 krimikiosk.de, 1 krimzeta.com, 1 krinetzki.de, 0 @@ -67771,8 +69105,10 @@ kringla.xyz, 1 kringloopwinkels.tk, 1 krings.nl, 1 krinnovations.ie, 1 +kripa.tk, 1 kriptodede.com, 1 kriptomat.io, 1 +kriptopodgon.tk, 1 kriptosec.com, 1 kriptoworld.hu, 1 krisboeckmans.tk, 1 @@ -67780,6 +69116,7 @@ krise-chance.ch, 1 krisenintervention-deutschland.de, 1 kriseninterventiondeutschland.de, 1 krisftp.fr, 1 +krishin.tk, 1 krishnakalisaha.com, 1 krishnendu.com, 1 krishnenduayur.org, 1 @@ -67804,6 +69141,7 @@ kristjanrang.eu, 0 kristofba.ch, 1 kristofdv.be, 0 kristoffer.is, 1 +kriston.tk, 1 kristymiley.com, 1 kristyvonkashyyyk.net, 1 kriswauters.tk, 1 @@ -67817,11 +69155,13 @@ krmela.com, 1 krmeni.cz, 0 kroczynski.net, 1 kroell.net, 1 +krok.gq, 1 krokedil.se, 1 kroliczki.tk, 1 kroll.tk, 1 kromamoveis.com.br, 1 kromberg.tk, 1 +kromciri.gq, 1 kromonos.net, 1 kromozottrud.hu, 1 krona.ddns.net, 1 @@ -67836,7 +69176,10 @@ krony.de, 1 kronych.cz, 1 kroon.email, 1 kropkait.pl, 1 +krosovki-nike.tk, 1 +krossakorven.tk, 1 krouzkyliduska.cz, 0 +krovatka.tk, 1 krovlya911.ru, 1 kroy.io, 1 kroyou.com, 0 @@ -67847,6 +69190,7 @@ krsvrs.nl, 1 krti.com.ua, 1 krtl.eu.org, 1 krtl.top, 1 +krubik.tk, 1 krudel.tk, 1 krug-munroe.wedding, 1 krugerengelbrecht.co.za, 1 @@ -67865,10 +69209,11 @@ krumpf.de, 1 kruno.ooo, 1 krup.com.ua, 1 krupa.net.pl, 0 -kruselegal.com.au, 1 +kruselegal.com.au, 0 krusesec.com, 1 krusic22.com, 1 krustyland.net, 1 +krutilka.ga, 1 krutka.cz, 1 kruu.de, 1 kruvesh.tk, 1 @@ -67888,9 +69233,10 @@ kryptomodkingz.com, 1 kryptonowosci.pl, 1 kryptorebels.com, 1 kryptux.xyz, 1 +kryshodel.ml, 1 +krystal-framework.ml, 1 krytykawszystkiego.com, 1 krytykawszystkiego.pl, 1 -kryx.de, 1 krzeslaonline.pl, 1 ks-19.com, 1 ks-39.com, 1 @@ -68025,6 +69371,10 @@ kscds.gov, 1 ksdot.gov, 1 kselenia.ee, 1 kselien.gov, 1 +ksem.tk, 1 +kseniya.tk, 1 +kseniyakoroleva.tk, 1 +ksenomorf.tk, 1 ksero.center, 0 ksero.wroclaw.pl, 0 kserownia.eu, 1 @@ -68034,6 +69384,7 @@ kshlm.in, 1 kshop.gr, 1 kshpage.in, 1 ksiegarniabk.pl, 1 +ksk-raduga.tk, 1 ksm-soccer.de, 1 ksm.co.in, 1 ksnl.net, 1 @@ -68065,6 +69416,7 @@ kt-studio.com.ua, 0 kt3i.com, 1 ktbnetbank.com, 1 ktd-design.com, 1 +kteatras.tk, 1 kthnxbai.xyz, 1 ktinta.es, 1 ktk-pc.de, 1 @@ -68074,6 +69426,7 @@ kts-thueringen.de, 1 ktsofas.gr, 1 ktty.net, 1 ktube.yt, 1 +ktuluweb.tk, 1 ktupad.web.id, 1 ktw.lv, 0 ku-7.club, 1 @@ -68119,11 +69472,13 @@ kuchen-am-stiel.de, 1 kucnibudzet.com, 1 kucukayvaz.com, 0 kucukcekmececilingir.gen.tr, 1 +kucukkaymakli.tk, 1 kuda-poexatj.ru, 1 kudelskisecurity.com, 1 kudinilam.tk, 1 kuditel.net, 1 kudofoto.com, 1 +kudoran.tk, 1 kudoway.com, 1 kuechler.info, 1 kuehndel.org, 1 @@ -68131,6 +69486,7 @@ kuehnel-online.eu, 1 kuemmerlin.eu, 1 kuemmling.eu, 1 kuepper.nrw, 1 +kuepper.tk, 1 kuestensiegel.de, 1 kugelblitz.co, 1 kuhakukawa.ml, 1 @@ -68149,6 +69505,7 @@ kukiulpindo.com, 1 kuko-crews.org, 1 kukuku.fun, 1 kukuma.tk, 1 +kukutza.tk, 1 kulakov.cf, 1 kulakov.tk, 1 kulde.net, 1 @@ -68158,16 +69515,20 @@ kuliahpendidikan.com, 1 kulikov.tk, 1 kulinarika.net, 1 kulinaristi.fi, 1 +kulinariya.tk, 1 kulivps.com, 1 kultham.ml, 1 kulthist.tk, 1 +kultur-werkstatt-wulfen.tk, 1 kultur1.se, 1 kulturbiljetter.se, 1 +kulturistika.tk, 1 kulturmel.ch, 1 kuma-it.de, 1 kumachan.biz, 1 kumalog.com, 1 kumanovo.tk, 1 +kumaraguruparan.tk, 1 kumasanda.jp, 1 kumi.website, 1 kumilasvegas.com, 1 @@ -68179,6 +69540,7 @@ kumuwiki.de, 1 kunadomowa.pl, 1 kunalchakate.tk, 1 kunaldesai.blog, 1 +kunashir.tk, 1 kuncrypto.com, 1 kunda.ovh, 1 kundenerreichen.com, 1 @@ -68212,6 +69574,7 @@ kupi-ceresit.ru, 1 kupibilet.ru, 1 kupil.ru, 1 kupinska.pl, 1 +kupipled.cf, 1 kupislivki.tk, 1 kupitmtz.gq, 1 kupitnedorogo.com, 0 @@ -68221,6 +69584,7 @@ kupka.tech, 1 kupkabn.de, 1 kupleno.com, 1 kuplukover.by, 1 +kuponmail.tk, 1 kuponydoher.cz, 1 kupriy-coach.ru, 1 kupschke.net, 1 @@ -68231,10 +69595,17 @@ kurafuto.homeip.net, 1 kurani.tk, 1 kuraraynoritake.eu, 1 kurashino-mall.com, 1 +kurd-yogurt.tk, 1 kurdigrafya.com, 1 kurdinfo.tk, 1 kurdishcommunityofottawa.tk, 1 +kurdishphotography.tk, 1 kurdjokes.tk, 1 +kurenivka.tk, 1 +kurgan-city.tk, 1 +kurgan.cf, 1 +kurgancity.cf, 1 +kurido-anime.tk, 1 kurierwilenski.lt, 1 kurirplus.tk, 1 kuritsa.tk, 1 @@ -68246,6 +69617,7 @@ kuroisalva.xyz, 0 kuroit.com, 1 kurona.ga, 1 kuronekogaro.com, 1 +kuropatina.tk, 1 kurosawa-yakkyoku.com, 1 kurrende.nrw, 0 kurs-dron.pl, 1 @@ -68255,6 +69627,7 @@ kurs-wordpress.pl, 1 kurschies.de, 1 kurserne.dk, 1 kursk-otoplenie.ru, 1 +kursk.cf, 1 kurspmr.ru, 0 kurssertifikasi.com, 1 kurswahl-online.de, 1 @@ -68283,12 +69656,14 @@ kuschku.de, 1 kuscu.de, 1 kushner-cpa.co.il, 1 kushwanthreddy.com, 1 +kuslink.tk, 1 kusmuhendisi.com, 1 kusochi.eu, 1 kustarnik.tk, 1 kustod.io, 1 kustom-kitchens.com, 1 kustomcorner.com.au, 1 +kustosija.tk, 1 kustus.com.br, 1 kustvissen.tk, 1 kutahyaciniyapitasarim.com.tr, 1 @@ -68313,9 +69688,13 @@ kuzbass-pwl.ru, 1 kuzelky-cb.cz, 1 kuzeyegehaber.com, 1 kuzh.tk, 1 +kuzik.tk, 1 +kuzinea.tk, 1 kuzmik.net, 1 kuzmik.org, 1 kuzmiks.com, 1 +kuznica.tk, 1 +kuzov-plus.tk, 1 kuzovkin.ml, 1 kv-genebos.tk, 1 kvadratnimeter.si, 1 @@ -68324,6 +69703,8 @@ kvalhe.im, 1 kvalitetsaktiepodden.se, 1 kvalitetskatalog.tk, 1 kvarta.tk, 1 +kvartira-grad.tk, 1 +kvartiragrad.tk, 1 kvasta.se, 1 kvdekolk.tk, 1 kvest-v-moskve.ga, 1 @@ -68335,6 +69716,7 @@ kvhile.com, 1 kvhv-brussel.be, 1 kvhv.brussels, 1 kvilt.dk, 1 +kviskoteka.tk, 1 kvitlyr.tk, 1 kvm.ovh, 1 kvn.tf, 1 @@ -68358,6 +69740,7 @@ kwikmed.eu, 0 kwjx2.ga, 1 kwoll.de, 1 kwonghei.net, 1 +kwork-garand.tk, 1 kwx.gg, 1 kwyxz.org, 1 kx197.com, 1 @@ -68416,6 +69799,7 @@ kylese.com, 1 kylewentworth.com, 1 kylianvermeulen.com, 0 kylianvermeulen.nl, 1 +kylie-pomada.tk, 1 kylinj.com, 0 kylinseating.in, 1 kylttimax.fi, 1 @@ -68436,8 +69820,10 @@ kyosyo-jungle.com, 1 kyoto-sake.net, 1 kyoto-tomoshibi.jp, 1 kyrabanx.org, 1 +kyrgizion.tk, 1 kyriakidisship.gr, 1 kyrjy.com, 1 +kyrylych.tk, 1 kys.host, 1 kysil.org, 1 kysounds.com, 1 @@ -68445,6 +69831,7 @@ kyujin-office.net, 1 kyunyuki.com, 1 kyusyu.org, 1 kyvosinsights.com, 1 +kyzyl-senir.ml, 1 kz.search.yahoo.com, 0 kzar.co.uk, 1 kzforce.tk, 1 @@ -68463,6 +69850,7 @@ l214.com, 1 l2dragonland.tk, 1 l2guru.ru, 1 l2news.ga, 1 +l2relax.ml, 1 l2support.tk, 1 l33roy.com, 1 l33te.net, 1 @@ -68496,6 +69884,7 @@ la-kaz-a-velo.fr, 1 la-laitonnerie.com, 1 la-maison.ch, 0 la-manufacture-du-nettoyage.com, 1 +la-paco.tk, 1 la-petite-entreprise.com, 1 la-retraite-info.com, 0 la-sc.com, 1 @@ -68517,6 +69906,8 @@ lab-recherche-environnement.org, 1 labacanisima.tk, 1 labadusa.com, 1 labambi.pl, 1 +labandadelamente.tk, 1 +labandadelexpreso.tk, 1 labande-annonce.fr, 1 labanochjonas.se, 1 labanskoller.se, 1 @@ -68535,6 +69926,7 @@ laberkosmos.tk, 1 labiblioafronebrulepas.com, 0 labin.tk, 1 labinsights.com, 1 +labirint.cf, 1 labittar.com.br, 1 lablic-beta.work, 1 lablnet.tk, 1 @@ -68570,6 +69962,7 @@ laboxfaitsoncinema.com, 1 labrat.mobi, 1 labroma.tk, 1 labs-is.com, 1 +labs.directory, 1 labs.ro, 1 labsector.com, 1 labsitserviss.lv, 1 @@ -68610,9 +70003,11 @@ lachlan.com, 1 lachlanallison.com, 0 lachlanb.me, 1 lachyoga-schwieberdingen.de, 1 +laciana.tk, 1 lacicloud.net, 1 lacienciadelpanico.tk, 1 lacity.gov, 1 +lackan.tk, 1 lackawannanypolicecorruption.org, 1 lackfer.tk, 1 lackierereischmitt.de, 1 @@ -68647,8 +70042,11 @@ lacuna-vermoegen.de, 1 lacyc3.eu, 1 lacylynn.net, 1 lad-china.com, 0 +lada-granta.tk, 1 +lada-plus.tk, 1 ladadate.com, 1 ladakhtrip.tours, 1 +ladanivabelgium.tk, 1 ladanmokhtari.tk, 1 ladbroke.net, 1 ladeboks.dk, 1 @@ -68659,12 +70057,15 @@ ladenzeile.de, 1 ladies-shoes.tk, 1 ladiescode.tk, 1 ladiesofvietnam.net, 1 +ladiesrapide.tk, 1 ladinvestment.ml, 1 ladisko.tk, 1 ladislavbrezovnik.com, 1 lado.ltd, 1 lado.site, 1 ladocdn.com, 1 +ladocs.tk, 1 +ladocu.cf, 1 ladotech.cn, 1 ladotech.com, 1 ladraiglaan.com, 1 @@ -68692,10 +70093,13 @@ ladylatoria.net, 1 ladylikeit.com, 1 ladymakeup.com.ua, 1 ladymakeup.eu, 1 +ladymayonline.tk, 1 ladymeli.org, 1 ladyofhopeparish.org, 1 ladyofsongstv.com, 1 ladyoxytocin.com, 1 +ladysecrets.cf, 1 +ladysecrets.ga, 1 ladysybella.net, 1 ladytron.tk, 1 ladyvampira.com, 1 @@ -68707,7 +70111,9 @@ laedia.com, 1 laembajadamexico.com, 1 laemen.com, 0 laemen.nl, 0 +laemiliafutbol.tk, 1 laempresa.tk, 1 +laencina.tk, 1 laermschmiede.de, 1 laerted.ga, 1 laeryn.com, 0 @@ -68715,6 +70121,7 @@ laesisvefurinn.is, 1 laeva.edu.ee, 1 laextra.mx, 1 lafamiliallc.com, 1 +lafansite.tk, 1 lafantasticatravel.com, 1 lafattoriadiclotilde.it, 1 lafayette-rushford.com, 1 @@ -68771,11 +70178,13 @@ lagunadiosdalmatians.tk, 1 lagunakitchenandbath.com, 1 lagunaklub.tk, 1 laguscei.com, 1 +laguterbaru.gq, 1 lahabra.gov, 1 lahacker.net, 1 laharilais.fr, 1 lahermandad.tk, 1 lahipotesisgaia.com, 1 +lahirusblog.tk, 1 lahmer.ma, 1 lahoguera.tk, 1 lahoratunante.tk, 1 @@ -68790,10 +70199,14 @@ laindonleisure.co.uk, 1 lainoa.eus, 1 laipert.com, 1 lairdutemps-bbe.fr, 1 +laity.gq, 1 laiweiyi.com, 1 laizhongliuxue.com, 1 +lajarana.tk, 1 +lajauria.tk, 1 lajetlingerie.nl, 1 lajijonencadebarbera.com, 1 +lajme-shqip.gq, 1 lajornadafilipina.com, 1 lajusta.tk, 1 lak-berlin.de, 0 @@ -68843,6 +70256,7 @@ lakiernictwo.auto.pl, 1 lakkt.de, 1 lakle.com, 1 lakonia.com.br, 1 +lakorona.tk, 1 lakspuiterijmosman.nl, 1 lakupaavi.tk, 1 lalagunachalate.tk, 1 @@ -68857,7 +70271,6 @@ lalegria.tk, 1 lalelal.me, 1 laleli.biz, 1 lalibella.co.uk, 1 -lallybroch.com.au, 1 lalokura.tk, 1 lalucepulsata.it, 1 lalucha.tk, 1 @@ -68868,11 +70281,13 @@ lamafioso.com, 1 lamai-crochets.fr, 1 lamaisonfantastique.fr, 1 lamakat.de, 1 +lamalapalabra.tk, 1 lamaletademano.com, 1 lamaletarural.es, 1 lamaline.tk, 1 lamalleauxsaveurs-aubigny.com, 1 lamarieealhonneur.com, 0 +lamasacre.tk, 1 lamaturitadidaniele.ml, 1 lambassadors.com, 1 lambauer.com, 1 @@ -68899,6 +70314,7 @@ lamigoshevora.pt, 1 lamikvah.org, 1 laminaatdealer.nl, 1 laminine.info, 1 +laminsaho.tk, 1 lamisionband.tk, 1 lamleybrothers.co.uk, 1 lammersmarketing.com, 1 @@ -68908,11 +70324,13 @@ lamminhquang.com, 1 lamnea.se, 1 lamontre.ru, 1 lamorera.tk, 1 +lamorralla.tk, 1 lamp.re, 0 lamp24.se, 1 lampade.it, 1 lampara.es, 1 lamparassevilla.com, 1 +lampbooks.gq, 1 lampco.com, 1 lampegiganten.dk, 1 lampegiganten.no, 1 @@ -68962,7 +70380,6 @@ lancerm.com, 1 lanceyip.com, 1 lanchong.tk, 1 lancyvbc.ch, 0 -land-schlachterei-reinke.de, 1 land.nrw, 0 landart.tk, 1 landassessmentservices.com, 1 @@ -68980,6 +70397,7 @@ landhuisweekend.nl, 1 landinfo.no, 1 landing-phillipferreira.herokuapp.com, 1 landingear.com, 1 +landloperfm.tk, 1 landlordy.com, 1 landofelves.net, 0 landofmerlin.tk, 1 @@ -69018,6 +70436,7 @@ landsearch.com, 1 landsforsale.co.il, 1 landslide.tk, 1 landtrack.com.au, 1 +landware.cf, 1 landzicht.tk, 1 lane.computer, 1 lanefinder.com, 1 @@ -69062,6 +70481,7 @@ lanna.io, 1 lannainnovation.com, 1 lannamontessori.com, 1 lannatefl.com, 1 +lanny.ga, 1 lanodan.eu, 1 lanomina.net, 1 lanostrasalute.it, 1 @@ -69101,6 +70521,7 @@ laobayy.com, 1 laoctavadireccion.tk, 1 laodongkynghi.info, 1 laolaweb.tk, 1 +laoliang.ml, 1 laoriginalfm.com, 1 laorquestadelamemoria.tk, 1 laos.dating, 1 @@ -69124,6 +70545,7 @@ lapcameradongnai.com, 1 lapcamerahochiminh.com, 1 lapcoversers.ga, 1 lapcoversest.ga, 1 +lapdance.tk, 1 lapelpinsandcoins.com, 0 laperfumista.es, 1 laperla-chemnitz.de, 1 @@ -69176,8 +70598,10 @@ laraeph.com, 1 larafabian.tk, 1 larafoxx.org, 1 laralove.org, 1 +laramewa.tk, 1 laramiecountywy.gov, 1 laranjada.org, 1 +larasm.tk, 1 laravelcommunity.asia, 1 larawoodarts.com, 1 larax.tk, 1 @@ -69196,6 +70620,7 @@ larenas.com, 1 larepublicacultural.es, 1 larete.ch, 1 largescaleforums.com, 1 +largest-soldiers.cf, 1 largeviewer.com, 1 laricameche.com, 0 larifari.ch, 1 @@ -69209,6 +70634,7 @@ larmenta.tk, 1 laro.tk, 1 larobba.ddns.net, 1 laromlab.tk, 1 +larondenet.tk, 1 larondinedisinfestazione.com, 1 larosadelosvientos.tk, 1 larousse-edu.fr, 1 @@ -69231,6 +70657,7 @@ larseriksson.es, 1 larsi.org, 1 larsklene.nl, 1 larsklint.com, 1 +larsnittve.tk, 1 larsvontrier.tk, 1 lartduportrait.fr, 1 laruecountyky.gov, 1 @@ -69250,7 +70677,9 @@ lascana.co.uk, 1 lascandalistas.org, 1 laschoolpolice.gov, 1 lascruces.gov, 1 +lasdelgadas.tk, 1 lasept.com.ua, 1 +laser-toners.tk, 1 lasercareestetica.com.br, 1 lasercloud.ml, 1 laserena.tk, 1 @@ -69260,6 +70689,7 @@ laserplaza.de, 1 laserplaza.net, 1 laserpunch.tk, 1 lasersandbacon.com, 1 +lasersolutions.tk, 1 lasertalk.org, 1 lasfolladoras.com, 1 lasik-safely.com, 1 @@ -69272,6 +70702,7 @@ lask.in, 1 laskorealestate.com, 1 laslilas.tk, 1 lasmallbizonline.gov, 1 +lasmesas.tk, 1 lasmoarquitectos.com, 1 lasmorfianapoletana.com, 1 lasofertas.tk, 1 @@ -69297,6 +70728,7 @@ lassesworld.se, 1 lassovideos.com, 1 lasst-uns-beten.de, 1 last-strike.org, 1 +lastallaexotics.com, 1 lastbooks.gq, 1 lastenrad-gifhorn.de, 1 lastingmarksers.ga, 1 @@ -69304,6 +70736,8 @@ lastingmarksest.ga, 1 lastingsmiles.org, 1 lastkaj14.tk, 1 lastlowtest.tk, 1 +lastmile.ml, 1 +lastmohicans.tk, 1 lastorder.icu, 1 lastorderguild.tk, 1 lastorders.tk, 1 @@ -69329,7 +70763,10 @@ latahcountyid.gov, 1 latakuta.com, 1 latanadelpolpo.it, 1 latardeurbana.cf, 1 +latardeurbana.ga, 1 latardeurbana.gq, 1 +latardeurbana.ml, 1 +latardeurbana.tk, 1 latchplus.com, 1 late.am, 0 lateams.ml, 1 @@ -69343,10 +70780,12 @@ latefeeking.org, 1 lateliercantaldeco.fr, 1 lateliercreationbougie.fr, 1 latemarch.com, 1 +laten.tk, 1 latenitefilms.com, 0 lateral.dog, 1 lateralsecurity.com, 1 lateraltrust.com, 1 +laterremotodealcorcon.tk, 1 latestairfaredeals.com, 1 latestbitcoinnews.io, 1 latestcoin.tk, 1 @@ -69359,10 +70798,12 @@ lathamlabs.com, 1 lathamlabs.net, 1 lathamlabs.org, 1 latherjacket.com, 1 +latia.tk, 1 latiamona.com, 1 latiendawapa.com, 1 latifolia.com, 1 latinatoday.it, 1 +latinmusiccollection.tk, 1 latino.dating, 1 latinooutdoors.org, 1 latintoy.com, 0 @@ -69381,6 +70822,7 @@ latviaonline.tk, 1 latymer.co.uk, 1 laubacher.io, 1 laube-school.com, 1 +laubo.tk, 1 lauchundei.at, 1 laud.io, 1 laudableapps.com, 1 @@ -69411,6 +70853,7 @@ laurable.com, 1 lauracookeconsulting.com, 1 lauraenvoyage.fr, 1 laurahausmann.de, 1 +laurainnes.tk, 1 laurakashiwase.com, 1 lauralaurant.tk, 1 lauralinde.de, 1 @@ -69419,6 +70862,7 @@ laurasplacefamilysupport.org.au, 1 laurateen.net, 1 lauravaindumentaria.com, 1 laureadesigns.com, 1 +laureaty.tk, 1 laurelblack.com, 1 laurelcountycorrectionsky.gov, 1 laurelcountysheriff.gov, 1 @@ -69453,6 +70897,7 @@ lavaggio.it, 1 lavaggista.it, 1 lavaldostana.es, 1 lavalledelgusto.it, 1 +lavalon.tk, 1 lavamine.tk, 1 lavamob.com, 1 lavanderia.it, 1 @@ -69463,14 +70908,17 @@ lavdiazofficial.tk, 1 laveg.edu.ee, 1 lavenderx.org, 1 laventura.tk, 1 +lavhire.tk, 1 laviaregia.com, 1 laviedalex.ovh, 1 lavinaec.com, 1 lavinya.net, 1 laviro.tk, 1 lavita.de, 1 +lavitagarden.tk, 1 lavka.cf, 1 lavkatsvetov.ru, 0 +lavki.tk, 1 lavocedelviolino.it, 1 lavochka.tk, 1 lavoieducoeur.be, 1 @@ -69480,6 +70928,7 @@ lavolte.net, 0 lavoniaga.gov, 1 lavontx.gov, 1 lavote.gov, 1 +lavozdelamusicachilena.tk, 1 lavozderanquil.tk, 1 lavril.fr, 1 lavval.com, 0 @@ -69539,6 +70988,7 @@ lawsuitconsultanters.ga, 1 lawsuitconsultantest.ga, 1 lawtreeclub.com, 1 lawvize.com, 1 +lawyer.cf, 1 lawyerboksburg.co.za, 1 lawyerdigital.co.bw, 1 lawyermidrand.co.za, 1 @@ -69547,6 +70997,7 @@ lawyerscredentialsest.ga, 1 lawyerscreenerers.ga, 1 lawyerscreenerest.ga, 1 lawyersofmissouri.com, 1 +lawzakon.tk, 1 lawzana.com, 1 lawzava.com, 1 laxaf.com, 1 @@ -69564,10 +71015,12 @@ laythetable.com, 1 lazarus.es, 1 lazarusalliance.com, 1 lazell.de, 1 +lazer.cf, 1 lazerepilasyonankara.tk, 1 lazerinitiative.org, 1 lazerus.net, 1 lazerus.pw, 1 +lazibeach.tk, 1 lazisbaiturrahman.org, 0 lazistance.com, 1 lazo.futbol, 1 @@ -69733,6 +71186,7 @@ lclarkuhl.com, 1 lcrehlingen.de, 1 lcrmscp.gov, 1 lcs.wiki, 1 +lcsoftware.tk, 1 lcsomo.gov, 1 lcti.biz, 1 lcvip3.com, 1 @@ -69790,9 +71244,12 @@ leaboucher.fr, 1 lead2022.academy, 1 leadbook.ru, 1 leadbox.cz, 1 +leadercreative.ga, 1 +leaderfreight.tk, 1 leaderinnetflow.com, 1 leaderoftheresistance.com, 0 leaderoftheresistance.net, 0 +leadersaudit.ga, 1 leadership-conference.net, 1 leadership-insight.nz, 1 leadfrp.com, 1 @@ -69803,6 +71260,7 @@ leadmusic.nl, 1 leadonvale-stemcell.co.uk, 1 leadplan.ru, 0 leadquest.nl, 1 +leadsformoney.tk, 1 leadsguru.ru, 0 leadsonline.com, 1 leafandseed.co.uk, 1 @@ -69827,10 +71285,12 @@ leales.org, 1 lealove.net, 1 lealuestern.com, 1 leamsigc.com, 0 +lean-consulting.cf, 1 leanclub.org, 1 leandre.cn, 1 leandrebergeron.com, 1 leandri-campana-avocat.fr, 1 +leandromarcolino.tk, 1 leandromoreno.co, 1 leanovent.cloud, 1 leanovent.de, 1 @@ -69901,6 +71361,7 @@ leatherfurnitureexpo.com, 1 leathergoods.tk, 1 leathership.co, 1 leathersofacleaning.co.uk, 1 +leatherstreet.tk, 1 leatherwill.com.ua, 1 leatherwood.nl, 1 leavealink.tk, 1 @@ -69922,6 +71383,7 @@ lebendige-heilkunst.de, 1 lebenpflegen-march.ch, 1 lebenpflegen.ch, 1 lebens-fluss.at, 1 +lebensinselparaguay.tk, 1 lebensraum-fitness-toenisvorst.de, 1 lebesis.tk, 1 lebihan.pl, 1 @@ -69961,7 +71423,9 @@ lecheng88.com, 1 lecheng88.net, 0 lecheng888.com, 1 lecheng98.com, 1 +lechenietravami.cf, 1 lechiennoir.net, 1 +lechite.ga, 1 lechocolatier.com, 1 lechompenchaine.fr, 1 lechuanginu.ru, 1 @@ -69979,6 +71443,7 @@ led-jihlava.cz, 1 led-sk.ru, 1 led.xyz, 0 ledburyvets.co.uk, 1 +leddeluxe.ml, 1 leddingplasticsurgery.com, 1 ledebergleeft.be, 1 ledecologie.com.br, 1 @@ -70007,6 +71472,7 @@ leebiblestudycentre.net, 1 leebiblestudycentre.org, 1 leebladon.com, 1 leebruce.tk, 1 +leech.ga, 1 leech.tk, 1 leeclemens.net, 0 leecountyfl.gov, 1 @@ -70042,6 +71508,7 @@ leetizia.net, 1 leetsaber.com, 1 leetsuliangkkproduction.tk, 1 leevealdc.com, 1 +leeyoungaeph.tk, 1 lefaivre-ferry.ca, 1 lefarsankids.com.br, 1 lefcoaching.nl, 1 @@ -70066,6 +71533,8 @@ lefucine.com, 1 lega-dental.com, 1 legacktem.com, 1 legacy.bank, 1 +legacygame.ga, 1 +legacygame.gq, 1 legacyofkain.tk, 1 legacysoft.ml, 1 legacyumc.com, 1 @@ -70076,6 +71545,7 @@ legaillart.fr, 1 legal-aid.tk, 1 legal-eye.co.uk, 1 legal.farm, 1 +legalagenda.ga, 1 legalanchor.ga, 1 legalatlanta.com, 1 legalatlantic.ga, 1 @@ -70083,11 +71553,14 @@ legalband.club, 1 legalbeast.ga, 1 legalbetcanada.com, 1 legalcalculator.ga, 1 +legalcanal.ga, 1 legalcellar.ga, 1 legalcircus.ga, 1 +legalclearance.ga, 1 legalco.tk, 1 legalcollector.ga, 1 legalconstruct.ga, 1 +legalcorporation.ga, 1 legalcrunch.ga, 1 legalcrystal.ga, 1 legalcustom.ga, 1 @@ -70109,7 +71582,9 @@ legalgrace.ga, 1 legalhandy.ga, 1 legalhotrod.ga, 1 legalhusky.ga, 1 +legalintergrity.ga, 1 legalisierung.tk, 1 +legaliz.ml, 1 legalizeit.tk, 1 legaljewel.ga, 1 legaljoker.ga, 1 @@ -70120,6 +71595,7 @@ legalmillions.ga, 1 legalnations.ga, 1 legalne-kasyna.com, 1 legalnews.cf, 1 +legalnews.ml, 1 legalnorthamerican.ga, 1 legaloriginal.ga, 1 legalphase.ga, 1 @@ -70166,6 +71642,7 @@ legendary-royale.net, 1 legendblogers.ga, 1 legendblogest.ga, 1 legendesdechine.ch, 0 +legendgrafix.tk, 1 legendofkrystal.com, 1 legendofmi.com, 1 legends-game.ru, 0 @@ -70173,6 +71650,7 @@ legendtourism.com, 1 legendwiki.com, 1 legentic.com, 1 leger-voertuigen.tk, 1 +leggyeggy.ga, 1 legible.es, 1 legilimens.de, 1 legiofte.com, 1 @@ -70190,6 +71668,7 @@ legitcorp.com, 1 legitedelaguiole.com, 1 legitedeprecy.com, 1 legjobblogo.hu, 1 +legkie-recepty.tk, 1 legko-pohudet.cf, 1 legko-pohudet.ml, 1 legko-pohudet.tk, 1 @@ -70246,6 +71725,7 @@ leismann.tel, 1 leismann.uk, 1 leisure-blog.com, 1 leisure-supplies-show.co.uk, 1 +leisure.cf, 1 leisure.ga, 1 leisure.tk, 1 leisurecooker.co.uk, 1 @@ -70322,6 +71802,7 @@ lenagroben.de, 1 lenalio.fr, 1 lenamorino.net, 1 lenaneva.ru, 0 +lenardoips.tk, 1 lenasophie.net, 1 lence.net, 1 lencia.ga, 1 @@ -70422,6 +71903,7 @@ leonplast.tk, 1 leontic.es, 1 leontiekoetter.de, 1 leontworzy.pl, 1 +leontyev.tk, 1 leonvermunt.com, 1 leonvermunt.nl, 1 leonvotes.gov, 1 @@ -70467,7 +71949,7 @@ lequerceagriturismo.com, 1 lequest.dk, 1 lequocthai.com, 1 ler3.com, 1 -lereporter.ma, 1 +lereporter.ma, 0 leretour.ch, 0 lerika.tk, 1 lerku.com, 1 @@ -70505,6 +71987,7 @@ lesatelierskosto.com, 1 lesberger.ch, 0 lesbi-porno-video.ru, 1 lesbianfacesitting.com, 1 +lesbianlovers.tk, 1 lesbicas.com.pt, 1 lesblogueuses.fr, 1 lesbonzoms.alwaysdata.net, 1 @@ -70567,6 +72050,7 @@ letableaunoir.fr, 1 letaman.tk, 1 letao18.com, 0 letchikleha.tk, 1 +letdownloads.tk, 1 letechgranby.com, 1 leteckedarky.cz, 1 letemps.ch, 1 @@ -70577,6 +72061,7 @@ lethalgaming.tk, 1 lethosdesigns.co.uk, 1 lethosdesigns.com, 1 leticia.com.tw, 1 +leticia.ml, 1 letiloulous.fr, 1 letipweb.tk, 1 letitfly.me, 1 @@ -70720,6 +72205,7 @@ lexico.pt, 1 lexicography.online, 1 lexicore.ga, 1 lexifax.ga, 1 +lexikon24.tk, 1 lexington-credit-repair.com, 1 lexingtonok.gov, 1 lexis.ml, 1 @@ -70739,12 +72225,13 @@ leyeslaboralesdecolorado.gov, 1 leylalewis.com, 1 leylalips.org, 1 leymaritima.com, 1 +leytron.tk, 1 lez.gent, 1 lez2020.be, 1 lez2020.gent, 1 lezdomsm.com, 1 lezen.tk, 1 -lezwatchtv.com, 1 +lezwatchtv.com, 0 lfashion.eu, 1 lfaz.org, 1 lfcnsv.de, 1 @@ -70756,6 +72243,7 @@ lfmosqueira.com.br, 1 lfnaturopathie.com, 1 lforum.tk, 1 lfrconseil.com, 1 +lfyhokk.tk, 1 lg-obchod.cz, 1 lg-store.sk, 1 lg-world.cz, 1 @@ -70798,6 +72286,7 @@ lhr.wiki, 1 lhsj28.com, 1 lhsj68.com, 1 lhsj78.com, 1 +li-de.tk, 1 li-ke.co.jp, 1 li-n.net, 1 li-project.com, 1 @@ -70888,6 +72377,7 @@ librairiezbookstore.com, 1 libramedia.ru, 1 libranet.eu, 1 libraries.vic.gov.au, 1 +librarium.tk, 1 library-quest.com, 1 libraryofcode.org, 1 libraryofcode.us, 1 @@ -71013,6 +72503,7 @@ lienhuyghebaert.tk, 1 lier.link, 1 lier.tk, 1 lieren4x4.nl, 1 +lierohell.tk, 1 liesbethkeijzer.nl, 1 lieuu.com, 0 lifamily.xyz, 1 @@ -71107,6 +72598,7 @@ liftie.info, 1 liftyourgame.com, 1 lig.ink, 0 liga.ng, 1 +liga99.tk, 1 ligacontrachetos.tk, 1 ligadelconsorcista.org, 1 ligadosgames.com, 1 @@ -71239,6 +72731,7 @@ lilidarcek.sk, 0 lilie.fr, 1 lilievabien.fr, 1 lilighazaryan.tk, 1 +lilimusic.tk, 1 lilisg.tk, 1 lilith-magic-molds.com, 1 lilith-magic-ua.com, 1 @@ -71278,6 +72771,7 @@ limap.ch, 1 limatolavvocati.it, 1 limatownshipmi.gov, 1 limawi.io, 1 +limbaido.tk, 1 limberg.me, 1 limbo-online.tk, 1 limbra.tk, 1 @@ -71336,6 +72830,7 @@ linawinter.com, 1 linawinter.net, 1 lincasonline.tk, 1 lincdavis.com, 1 +lince-bonares.tk, 1 lincnaarzorg.nl, 1 lincolnadamscountywi.gov, 1 lincolnbrokerage.com, 1 @@ -71404,6 +72899,7 @@ linedance.tk, 1 lineinchina-enterprise.tw, 1 linejuby.dk, 1 linernotekids.com, 1 +lineshop.ml, 1 linestep.jp, 1 linfadenopatia.com, 1 linfamilygc.com, 1 @@ -71414,6 +72910,7 @@ lingerie.com.br, 1 lingeriecollect.ga, 1 lingeriesilhouette.com, 1 lingolia.com, 0 +lingros-test.tk, 1 lingshan.tk, 1 lingua.tk, 1 lingualeo.com, 1 @@ -71431,6 +72928,7 @@ link-list.tk, 1 link-live.com, 1 link-man.net, 1 link-medital.com, 1 +link-net.ga, 1 link-sanitizer.com, 1 link24.tk, 1 link26.tk, 1 @@ -71467,6 +72965,7 @@ linklocker.co, 1 linkmauve.fr, 1 linknaarlinux.tk, 1 linknavigator.tk, 1 +linko-pomoika.tk, 1 linkonaut.net, 1 linkopia.com, 1 linkportal.tk, 1 @@ -71480,6 +72979,7 @@ linkscloud.org, 1 linksextremist.at, 1 linksite.tk, 1 linksmatrix.tk, 1 +linkspace.tk, 1 linksphotograph.com, 1 linkst.co, 0 linkstagr.am, 1 @@ -71489,6 +72989,7 @@ linkthisstatus.ml, 1 linktio.com, 1 linkto.cf, 1 linku.com, 1 +linkuva.tk, 1 linkview.tk, 1 linkwater.org, 1 linky.tk, 1 @@ -71545,6 +73046,7 @@ linux-help.org, 1 linux-mint-czech.cz, 1 linux-pc.ml, 1 linux-share.tk, 1 +linux-taganrog.tk, 1 linux-techie.com, 1 linux-tips.us, 1 linux-vme.org, 1 @@ -71587,6 +73089,7 @@ linuxlounge.net, 1 linuxmalta.tk, 1 linuxnetflow.com, 1 linuxnews.de, 1 +linuxonline.tk, 1 linuxsecurity.expert, 1 linuxtech.ru, 1 linuxwerkstatt.net, 1 @@ -71598,6 +73101,7 @@ lion3star.store, 1 lionchita.tk, 1 lionessport.com, 1 lionhosting.nl, 1 +lionland.tk, 1 lionlyrics.com, 1 lionsk.tk, 1 lioprog.com, 1 @@ -71638,9 +73142,12 @@ liquidinternet.co, 1 liquiditeit.wiki, 1 liquidradio.pro, 1 liquidwarp.net, 1 +liquidweb.tk, 1 liquipedia.net, 1 +liquiritia.tk, 1 liquor.my, 1 lirelesgens.com, 1 +liress.gq, 1 lirico.ca, 1 lirion.de, 1 lirlandais.ch, 0 @@ -71660,6 +73167,7 @@ lisanshizmetleri.com, 1 lisapo.info, 1 lisas.ml, 1 lisasack.net, 1 +lisasc.gq, 1 lisaschubert.net, 1 lisasworkshop.co.uk, 1 lisavrobinson.tk, 1 @@ -71676,6 +73184,7 @@ lishup.com, 1 lisiano.eu, 1 lisieuxarquitetura.com.br, 1 lisinphotography.com, 1 +lisius.ga, 1 liskgdt.net, 1 lislan.org.uk, 1 lisowski-development.com, 0 @@ -71789,6 +73298,7 @@ littlehide.gq, 1 littlehoop.edu, 1 littlelife.co.uk, 1 littlemaple.tk, 1 +littlemaster.tk, 1 littlenicky.org, 1 littlenina.nz, 0 littleorangecookbook.com, 1 @@ -71809,7 +73319,9 @@ littleskin.cn, 1 littleson.com.br, 1 littlesouls.ml, 1 littlewatcher.com, 1 +littleyokohamakennel.tk, 1 liturgical.net, 1 +liturkey.tk, 1 litvideoserver.de, 1 litz.ca, 1 litzenberger.ca, 1 @@ -71887,6 +73399,7 @@ liveitlogical.in, 1 liveitmerck.ca, 1 livejasmin-online.com, 1 livejasmin.dk, 1 +livejh.tk, 1 livekaarten.be, 1 livekaarten.nl, 1 livekarten.de, 1 @@ -71933,6 +73446,7 @@ livestrana.tk, 1 livesure.com, 1 liveteachers.in, 1 livethereservega.com, 1 +livetopknigi.gq, 1 livetoride.co.za, 1 livewirecommunications.co.uk, 1 livezrejstejna.cz, 1 @@ -71968,6 +73482,7 @@ livli.sk, 1 livnev.me, 1 livnev.xyz, 1 livogeva.dk, 1 +livornonellarete.tk, 1 livornotoday.it, 1 livrariaatlantico.com, 1 livrariacoad.com.br, 1 @@ -72047,6 +73562,7 @@ lldy88.com, 1 lleidanoticies.com, 1 llemoz.com, 1 lligwy.co.uk, 0 +llinternational.tk, 1 llm-guide.com, 1 lloretparty.de, 1 lloyd-day.me, 1 @@ -72183,6 +73699,7 @@ localspot.pl, 1 localstartupfest.id, 1 localstudio.tk, 1 localtexasnews.com, 1 +localtownhouses.ga, 1 locape.com.br, 1 locapos.com, 1 locas.me, 1 @@ -72233,6 +73750,7 @@ locknlock.com.br, 1 locknlockbrasil.com.br, 1 lockoutgroup.com, 1 lockpick.nl, 1 +lockpicks.se, 1 lockr.jp, 1 locksmith-durbannorth.co.za, 1 locksmith-pasadenatx.com, 1 @@ -72279,6 +73797,7 @@ locomotiveworks.co.uk, 1 locoserver.net, 1 locus-dashboard.com, 1 locus.ml, 1 +locus.tk, 1 locusmap.eu, 1 locutusvader.com, 1 lodash.com, 0 @@ -72294,7 +73813,6 @@ lodni.site, 1 lodongxu.com, 1 lodosswar.tk, 1 lodus.io, 1 -loe.lviv.ua, 1 loekkoopmans.tk, 1 loeklommers.nl, 1 loenshotel.de, 1 @@ -72340,6 +73858,7 @@ logic8.ml, 1 logical-invest.com, 1 logicchen.com, 1 logiccircle.ir, 0 +logicdream.tk, 1 logiciel-entreprise-seurann.fr, 1 logicio.ch, 0 logicio.de, 0 @@ -72523,6 +74042,7 @@ lollipopo69.net, 1 lolly.cc, 1 lollybrown.com, 1 lollypop.tk, 1 +lollyteam.tk, 1 lolmania.tk, 1 lolnet.tk, 1 lolnews.cf, 1 @@ -72534,8 +74054,10 @@ lolware.net, 1 loma.ml, 1 lomahs.nyc, 1 lomaster.tk, 1 +lomayko.ml, 1 lombardiaeconomy.it, 1 lombri-agro.com, 1 +lomex.tk, 1 lomgo.cf, 1 lomgo.ga, 1 lomgo.gq, 1 @@ -72546,6 +74068,7 @@ lomza.tk, 1 lon-so.com, 1 lona.io, 1 lonasdigital.com, 1 +lonavla.tk, 1 loncarlyonjenkins.com, 1 london-transfers.com, 1 london.dating, 1 @@ -72763,6 +74286,7 @@ los11mandamientos.tk, 1 losangelesduiattorney.com, 1 losangelesprivatejets.com, 1 losangelestown.com, 1 +losaucas.tk, 1 losbandidosdelahoya.tk, 1 losblancosalbania.cf, 1 losbunkerschile.tk, 1 @@ -72785,6 +74309,7 @@ losfugitivos.tk, 1 losfuocos.tk, 1 losgringos.tk, 1 loshalcones.tk, 1 +loshogares.mx, 1 losjardines.tk, 1 losjuegosdemesa.online, 1 losless.fr, 1 @@ -72887,6 +74412,7 @@ louisvillecarguys.com, 1 louisvillefibroids.com, 1 louisvillefilmfestival.org, 1 louisvillene.gov, 1 +louiza.tk, 1 loujaxx.net, 1 loukas-stoltz.fr, 1 loukkos.ma, 1 @@ -72904,6 +74430,8 @@ louwlemmer.com, 1 louyu.cc, 1 lov4affiliate.com, 1 love-books.ga, 1 +love-navigator.tk, 1 +love-planeta.tk, 1 love-sent.com, 1 love-spells-tarot.com, 1 love4musik.com, 1 @@ -73221,6 +74749,7 @@ ludofantasy.fr, 1 ludogogy.co.uk, 1 ludogue.net, 1 ludomo.de, 1 +ludotech.tk, 1 ludothek-burgdorf.ch, 1 ludovic-frank.fr, 1 ludovic-muller.fr, 1 @@ -73229,7 +74758,6 @@ ludum-polus.xyz, 1 ludum.pl, 1 ludunwayoo.com, 1 ludwig.im, 1 -ludwiggrill.de, 1 ludwigjohnson.se, 1 ludwigpro.net, 1 luedeke-bremen.eu, 1 @@ -73246,6 +74774,7 @@ luftfilterbegehren.at, 1 luftreiniger.biz, 1 lufu.io, 1 lugandbezel.com, 1 +lugaresturisticosdeguatemala.ga, 1 luggagecare.com, 1 luggagechoices.com, 1 luggagehero.com, 1 @@ -73326,6 +74855,7 @@ lukesbouncycastlehire.com, 1 lukestert.com, 1 lukesutton.info, 1 lukezweb.tk, 1 +lukin.ga, 1 lukinno.ml, 1 lukka.tk, 1 lukloveswhisky.pl, 1 @@ -73601,6 +75131,7 @@ lxx77.com, 1 lyam.fr, 1 lyax.be, 1 lycan.me, 1 +lycaonsec.com, 1 lychankiet.name.vn, 0 lyclub.vn, 1 lycly.me, 1 @@ -73663,6 +75194,8 @@ lyricfm.ie, 1 lyricheaven.com, 1 lyricsforyou.gq, 1 lyricsroll.com, 0 +lyricsupdater.tk, 1 +lyriksidan.ga, 1 lys.ch, 0 lysbed.com, 1 lyscnd.com, 1 @@ -73671,6 +75204,7 @@ lysergion.com, 1 lyst.co.uk, 1 lyteclinic.com, 0 lytkins.ru, 1 +lyuda.tk, 1 lyukaacom.ru, 1 lyuks-parfyum.tk, 1 lyuly.com, 1 @@ -73682,10 +75216,12 @@ lzcreation.com, 1 lzqii.cn, 1 lzwc.nl, 1 lzzr.me, 1 +m-16.ml, 1 m-22.com, 1 m-a-i-l.us, 1 m-a-s.cc, 1 m-ast.de, 1 +m-beshr.tk, 1 m-ch.ml, 1 m-chemical.com.hk, 1 m-em.co.jp, 1 @@ -73758,6 +75294,7 @@ ma-canne-a-peche.fr, 1 ma-eir.nl, 1 ma-paroisse.ch, 1 ma-queue.com, 1 +ma-ze-linux.tk, 1 ma109.org, 1 ma110.org, 1 ma162.org, 1 @@ -73804,6 +75341,7 @@ macappstudio.com, 1 macappstudiobridge.com, 1 macappstudioprojects.com, 1 macaque.io, 0 +macaroonshindig.tk, 1 macarthuradr.com, 1 macautocouture.gq, 1 macautocouture.ml, 1 @@ -73816,6 +75354,7 @@ macbach.com, 0 macbparis.com, 1 maccabi-dent.com, 1 macchinetedesche.it, 1 +macdj.tk, 1 macdonaldplasticsurgery.ca, 1 macedonian-hotels.com.mk, 1 macedonian-hotels.mk, 1 @@ -73955,6 +75494,7 @@ madisoncountyne.gov, 1 madisonent-facialplasticsurgery.com, 1 madisonsjewelersorlando.com, 1 madisonsquarerealestate.com, 1 +madkids.ga, 1 madknight.tk, 1 madlandezboard.tk, 1 madluging.tk, 1 @@ -73983,6 +75523,7 @@ madridagency.com, 1 madridartcollection.com, 1 madride.tk, 1 madscientistwebdesign.com, 1 +madskauts.tk, 1 madskill.tk, 1 madsklitgaard.dk, 1 madskristensen.dk, 1 @@ -73993,6 +75534,7 @@ maduexclusive.com, 1 maduracion.com, 1 maduradas.info, 1 maduradas.net, 1 +madviewer.tk, 1 madwarlock.com, 1 mae-berlinistanbul.com, 1 maedacolo.com.br, 1 @@ -74010,6 +75552,7 @@ maes.eu.org, 1 maeterlinck100.be, 1 maev.si, 1 maevelyfotografia.com, 1 +maewmoo.com, 1 maff.co.uk, 1 maff.scot, 1 mafia-penguin.club, 1 @@ -74034,6 +75577,8 @@ magasinsalledebains.be, 1 magasinsalledebains.fr, 1 magasinsenfrance.com, 1 magaviva.com, 1 +magazilla.ga, 1 +magazinecards.ga, 1 magazinedabeleza.net, 1 magazinedotreino.com.br, 1 magazinhaberi.tk, 1 @@ -74154,6 +75699,7 @@ magneticarrow.com, 1 magneticarrowdev.com, 1 magneticattraction.com.au, 1 magneticmoney.de, 1 +magnetoscopio.tk, 1 magnetoterapiapertutti.com, 1 magnetpass.uk, 1 magnets.jp, 1 @@ -74184,6 +75730,7 @@ magsdata.com, 1 magu.kz, 1 mague.org, 1 maguire.email, 1 +maguire.tk, 1 maguroalmare.com.br, 1 maguspace.com, 0 magwin.co.uk, 1 @@ -74273,6 +75820,7 @@ mailgun.com, 1 mailhardener.com, 1 mailinabox.email, 1 mailinabox.ml, 1 +mailinaitor.tk, 1 mailingproduct.tk, 1 mailinizer.com, 1 mailinyzer.com, 1 @@ -74282,20 +75830,26 @@ maillotfoot.tk, 1 mailmag.net, 1 mailmaid.de, 1 mailman.ml, 1 +mailmaster.tk, 1 mailmerc.com, 1 mailmum.io, 1 mailnara.co.kr, 1 mailnerds.de, 1 +mailon.ga, 1 mailosaur.com, 1 mailpenny.com, 1 mailsac.com, 1 +mailsend.ml, 1 +mailstart.ga, 1 mailstation.de, 1 mailsupport.cz, 1 mailtelligent.com, 1 +mailtobiz.tk, 1 mailum.org, 0 mailw.com, 1 mailwala.tk, 1 mailway.io, 1 +mailxpress.ga, 1 maimaiyeuem.tk, 1 maimea.net, 1 main1.host, 1 @@ -74412,6 +75966,7 @@ makeupillusion.com, 1 makeuplove.nl, 1 makeuppleasure.it, 1 makeurbiz.com, 1 +makeurl.ml, 1 makewebbetter.com, 1 makfra.com, 0 makhmudov.net, 1 @@ -74464,6 +76019,7 @@ malaysiainternship.my, 1 malaysian.dating, 1 malaysianews.ga, 1 malaysianews.gq, 1 +malaysianews.ml, 1 malaysianews.tk, 1 malaysianhairextensions.tk, 1 malaysiasentral.com, 1 @@ -74573,6 +76129,7 @@ mamacoolinar.bg, 1 mamadoma.com.ua, 1 mamaisonsherby.ca, 1 mamamoet.ru, 1 +mamanakormit.tk, 1 mamanecesitaungintonic.com, 1 mamanetplus.fr, 1 mamaplus.net, 1 @@ -74602,6 +76159,7 @@ mamospienas.lt, 1 mamot.fr, 1 mamradost.sk, 1 mamsds.com, 1 +mamtapark.tk, 1 mamuko.nl, 1 man-stuff.co.uk, 1 man-trailer.com, 1 @@ -74655,6 +76213,7 @@ mandanudes.ae, 1 mandarinplay.tk, 1 mandcbouncycastlehire.co.uk, 1 mandediary.com, 1 +mandela-effect-wiki.tk, 1 manderstam.com, 1 mandiblackburnphoto.com, 1 mandilabeachhotel.com, 1 @@ -74688,6 +76247,7 @@ manfredschafer.ch, 1 manfree.tk, 1 manga18.art, 1 mangabond.tk, 1 +mangaboxes.ml, 1 mangadex.org, 1 mangaesp.tk, 1 mangagaga.tk, 1 @@ -74696,6 +76256,7 @@ mangalindustries.com, 1 mangamonde.fr, 1 manganimefan.tk, 1 mangapoi.com, 1 +mangareactor.tk, 1 mangarosa.pt, 1 mangatafestas.com.br, 1 mangeeaudio.com, 1 @@ -74705,7 +76266,6 @@ mangga.cloud, 1 mangio.co.uk, 1 mangnhuapvc.com.vn, 1 mango-zajm.gq, 1 -mango3.io, 1 mangomercado.com, 1 mangotwoke.co.uk, 1 manguyen.de, 0 @@ -74725,6 +76285,7 @@ maniasoft.pl, 1 manicbouncycastles.co.uk, 1 manicminers.tk, 1 manicode.com, 1 +manicur-salon.tk, 1 manicuradegel.com, 1 manicuradegel.es, 1 manikinuk.tk, 1 @@ -74780,6 +76341,7 @@ mansoorkhan.tk, 1 mansora.co, 1 mansora.io, 1 mansour.io, 1 +mansurov.tk, 1 mantachiepharmacy.com, 1 mantalak.com, 1 mantalksmanrules.com, 1 @@ -74826,6 +76388,7 @@ manueldossantos.tk, 1 manuelefior.tk, 1 manuelefysiotherapeut.nl, 1 manueljirado.tk, 1 +manuelosorio.me, 1 manuelperujo.ch, 1 manuelraimo.cf, 1 manuelrueger.de, 0 @@ -74839,6 +76402,7 @@ manumagnum.com, 1 manuscript.com, 1 manuscripteditorial.com, 1 manuscriptlink.com, 1 +manusiasosial.tk, 1 manutenzionegiardini.it, 1 manuth.life, 1 manwork.tk, 1 @@ -74851,7 +76415,6 @@ manyproservices.com, 1 manytubes.ga, 1 manyzero.ml, 1 manzanita-nsn.gov, 1 -manzoorahmed.com, 1 manzunadh.com, 1 maomihz.com, 1 maone.net, 1 @@ -74969,6 +76532,7 @@ marcelkooiman.com, 1 marcellenatureza.com, 1 marcellodomenis.com, 1 marcelmarnitz.com, 1 +marcelofernandez.tk, 1 marcelois.me, 1 marcelpreuss.de, 1 marcelsiegert.com, 1 @@ -75006,6 +76570,7 @@ marcositaliandeli.co.uk, 1 marcosocio.com, 1 marcossamerson.com, 1 marcossan.com, 1 +marcosteixeira.tk, 1 marcotolk.com, 1 marcsello.com, 1 marcsferraripage.tk, 1 @@ -75159,6 +76724,7 @@ mariskax.net, 1 marismenos.tk, 1 maritiemshertogenbosch.nl, 1 maritime-mea.com, 1 +maritlarsen.tk, 1 marius-schmalz.de, 1 mariusschulz.com, 1 mariviolin.com, 1 @@ -75200,6 +76766,7 @@ marketcavalli.it, 1 marketespace.fr, 0 marketfeed.news, 1 marketforce.com, 1 +marketgrid.ml, 1 marketgrid.tk, 1 marketia.ml, 1 marketing-2.de, 1 @@ -75220,6 +76787,7 @@ marketingforfood.com, 1 marketinghaters.com, 1 marketingmd.com, 1 marketingmind.in, 1 +marketingpalace.tk, 1 marketingproducts.review, 1 marketingprofesszorok.hu, 1 marketingseo.fr, 1 @@ -75229,10 +76797,12 @@ marketingwelt-lipp.de, 1 marketingypublicidaddigital.com.mx, 1 marketio.ai, 1 marketizare.ro, 1 +marketking.ga, 1 marketmakers.se, 1 marketmotion.com.au, 1 marketplace.org, 1 marketplace.tf, 1 +marketsearch.ga, 1 marketsosyali.tk, 1 marketvalue.gq, 1 marketyourcup.com, 1 @@ -75258,6 +76828,7 @@ markkusilvennoinen.fi, 1 marklauman.ca, 0 marklehane.com, 1 markllego.com, 1 +markmetcalfe.io, 1 markocloud.com, 1 markoglou.com.gr, 1 markoh.co.uk, 1 @@ -75317,6 +76888,7 @@ marmelo.digital, 1 marmista.roma.it, 1 marmo.tk, 1 marmotte.love, 1 +marmuif.fr, 0 marmurmedical.com, 1 marneetgondoireathletisme.fr, 1 marny.eu, 1 @@ -75334,6 +76906,7 @@ maroochydorecitycenter.com.au, 1 maroochydorecitycentre.com, 1 maroochydorecitycentre.net.au, 1 maroquineriepirlot.be, 0 +maroussia.tk, 1 marouviere.fr, 1 marpa-wohnen.de, 1 marqperso.ch, 1 @@ -75373,6 +76946,7 @@ marsicano.tk, 1 marsikelektro.cz, 1 marsilioblack.tk, 1 marsmediavideo.com, 1 +marta-chat.ga, 1 marta.uz, 0 martacooks.com, 1 martasibaja.com, 1 @@ -75398,7 +76972,6 @@ martian.community, 1 martian.tk, 1 martide.com, 1 martijnschreuders.tk, 1 -martin-burger.net, 1 martin-caslavsky.tk, 1 martin-loewer.de, 1 martin-mattel.com, 1 @@ -75430,6 +77003,7 @@ martinhalpropertysales.com, 1 martinhalresidences.com, 1 martinhalsagres.com, 1 martinhaunschmid.com, 0 +martinho.tk, 1 martinishotpodcast.com, 1 martinkunc.tk, 1 martinkus.eu, 1 @@ -75572,6 +77146,7 @@ masoncountywaelections.gov, 1 masoncountywv.gov, 1 masonkysheriff.gov, 1 masquerade.site, 0 +masqueradecostumes.tk, 1 masrud.com, 1 masrur.org, 1 mass.pt, 1 @@ -75716,6 +77291,7 @@ matejgroma.com, 1 matejkosiarcik.com, 1 matel.org, 1 matematik-ozel-ders.tk, 1 +matematikkulubu.tk, 1 matematyka.wiki, 1 matemonsac.com, 1 materasocial.live, 1 @@ -75900,7 +77476,6 @@ matthiasott.ch, 1 matthiasott.com, 1 matthiasschwab.de, 1 matthiasweiler.de, 0 -matthieu-munoz.fr, 1 matthieuschlosser.fr, 1 matthijssen.info, 1 matthijsvos.com, 1 @@ -75939,7 +77514,6 @@ mau.fi, 1 mau.life, 1 mau.lu, 1 mau.photos, 1 -mauaagora.com.br, 1 maubot.xyz, 1 maudfourier.com, 1 mauditeboisson.tk, 1 @@ -76079,6 +77653,7 @@ maxportal.tk, 1 maxprog.com, 1 maxrandolph.com, 1 maxrickettsuy.com, 1 +maxrider.tk, 1 maxroganov.tk, 1 maxs.com, 1 maxtruxa.com, 1 @@ -76146,6 +77721,7 @@ mazik.tk, 1 mazken.tk, 1 mazloum.adv.br, 1 mazternet.ru, 1 +mazurlabs.tk, 1 mazury-invest.pl, 1 mazzotta.me, 1 mb-demo.net, 1 @@ -76231,6 +77807,7 @@ mcdowellcountyncboe.gov, 1 mcdowellcountywv.gov, 1 mcdreamcity.com, 1 mcdsg.net, 1 +mcduff.ga, 1 mce.eu, 1 mce.nyc, 1 mce55.eu, 1 @@ -76367,6 +77944,7 @@ mdf-bis.com, 0 mdf-nakladki.kiev.ua, 1 mdinstituteplasticsurgery.com, 1 mdinvest.nz, 1 +mdir.tk, 1 mditsa.de, 1 mdiv.pl, 1 mdl.co.ua, 1 @@ -76432,6 +78010,7 @@ mebelconcept.tk, 1 mebelipalitra.ru, 0 mebelisk.com.br, 1 mebelnik.pro, 1 +mebeloffice.com.ua, 1 mec010.com, 1 mec020.com, 1 mec021.com, 1 @@ -76774,7 +78353,6 @@ med360.at, 1 medaboutme.ru, 1 medali21.tk, 1 medalofvalor.gov, 1 -medavante-prophase.com, 1 medbiocompany.com, 1 medbiocompany.ml, 1 medbreaker-friends.at, 1 @@ -77002,6 +78580,7 @@ medusa.wtf, 1 meduza.io, 1 medved1.ru, 1 medvedikorenka.cz, 1 +medvedivka.tk, 1 medvedkovo-hovrino.ru, 1 medvesajt.hu, 1 medvet.com.es, 1 @@ -77022,7 +78601,7 @@ meeo7.tk, 1 meepbot.net, 1 meepbot.org, 1 meepbot.pro, 1 -meer-der-ideen.de, 0 +meer-der-ideen.de, 1 meereskunst.de, 1 meerman.nl, 1 meerutcake.com, 1 @@ -77067,6 +78646,7 @@ megaflix.nl, 1 megaflowers.ru, 1 megagame.zapto.org, 1 megagifs.de, 1 +megaherz.tk, 1 megaimpressao3d.com.br, 1 megainflatables.co.uk, 1 megainformatyk.pl, 1 @@ -77162,7 +78742,6 @@ meilleursjeuxporno.fr, 1 meilleurstrucs.com, 1 meima.cc, 1 meimeistartup.com, 1 -mein-domizil.at, 1 mein-gehalt.at, 1 mein-muehlhausen.bayern, 1 mein-neuer-garten.de, 1 @@ -77322,6 +78901,7 @@ meme.fi, 1 meme.institute, 1 mememan.org, 1 memememememememe.me, 1 +memento-mori.cf, 1 memepasmal.org, 1 memetrash.co.uk, 1 memind.net, 1 @@ -77354,7 +78934,6 @@ menazimkhan.tk, 1 menchez.me, 1 menddie.com, 1 mendekuitxua.tk, 1 -mendelsphotography.com, 0 menden.com, 1 mendipbouncycastles.co.uk, 1 mendix-apps.com, 1 @@ -77400,6 +78979,7 @@ menlosecurity.jp, 1 menlotraining.com, 1 menlotraining.net, 1 menlotraining.org, 1 +menn.tk, 1 menno.cloud, 0 menno.me, 1 menole.com, 1 @@ -77416,6 +78996,7 @@ mensagemaniversario.com.br, 1 mensagemdaluz.com, 1 mensagensaniversario.com.br, 1 mensagensdeconforto.com.br, 1 +mensagensperfeitas.com.br, 0 mensajeurbano.tk, 1 mensajitos.tk, 1 mensarena.gr, 1 @@ -77428,6 +79009,7 @@ menselijkembryo.tk, 1 menshealthcollective.au, 1 menspeak.ga, 1 mental-check.jp, 1 +mentalcalculations.tk, 1 mentalcraft.tk, 1 mentalevolution.tk, 1 mentalhealthmn.org, 1 @@ -77502,7 +79084,7 @@ mercadolibre.com.sv, 1 mercadolibre.com.uy, 1 mercadolibre.com.ve, 1 mercadolivre.com.br, 1 -mercadopago.cl, 1 +mercadopago.cl, 0 mercadopago.com, 1 mercadopago.com.ar, 1 mercadopago.com.br, 1 @@ -77613,6 +79195,7 @@ meshok.ru, 1 meshotes.com, 1 meskdeals.com, 1 meskimonos.fr, 1 +meskiukas.tk, 1 meslekkursu.com, 1 mesmer.tk, 1 mesologie-soesterberg.nl, 1 @@ -78095,6 +79678,7 @@ michelbenita.com, 1 michelcoumes.com, 1 michele.ml, 1 micheleandkeith.com, 1 +michelgolfier.ml, 1 michelkok.tk, 1 michellavat.com, 1 michelledonelan.co.uk, 0 @@ -78248,7 +79832,6 @@ migrainereliefplan.com, 1 migrantskillsregister.org.uk, 1 migraplus.ru, 1 migrinfo.fr, 1 -miguel-platteel.fr, 1 miguel.pw, 1 miguelalonso.tk, 1 miguelcollections.com, 1 @@ -78447,7 +80030,6 @@ militaryfetish.tk, 1 militaryonesource.mil, 1 militarypumps.com, 1 miliumnet.tk, 1 -miljotankar.se, 1 milk.games, 1 milkaalpesiutazas.hu, 1 milkagyengedseg.hu, 1 @@ -78539,6 +80121,8 @@ mimonia.gq, 1 mimorin.tk, 1 mimovrste.com, 1 mimoza.tk, 1 +mimscellaneous.com, 1 +mimsonlineweddingshop.com, 1 mimumimu.net, 1 mimundodxn.com, 1 mimusic.cf, 1 @@ -78576,6 +80160,7 @@ mindbox.cat, 1 mindbuild.com, 1 mindcms.nl, 1 mindcoding.ro, 1 +mindcraft.ga, 1 minddistortion.tk, 1 mindenitt.ga, 1 mindequityinternational.com, 1 @@ -78624,6 +80209,7 @@ minecraftgta5.ml, 1 minecraftjustone.ga, 1 minecraftnewserie.tk, 1 minecraftonlinesfull.tk, 1 +minecraftrealgold.gq, 1 minecraftrealgold.ml, 1 minecraftruns.ml, 1 minecrafts.gq, 1 @@ -78925,6 +80511,7 @@ misspoliticsaustralia.gq, 1 misspoliticsaustralia.ml, 1 misstika-bijoux.com, 1 missualready.com, 1 +missuniverse.tk, 1 missycosmeticos.com.br, 1 missycraindance.com, 1 missyjay.tk, 1 @@ -79424,6 +81011,7 @@ mobincube.com, 1 mobincube.es, 1 mobincube.mobi, 1 mobinet.tk, 1 +mobinst.ml, 1 mobio.net, 1 mobiproj.com, 1 mobisaar-cloud.de, 1 @@ -79438,6 +81026,7 @@ mobogeniemax.com, 1 mobolight.ml, 1 mobot.sg, 1 mobox.health, 1 +mobsitin.tk, 1 mobtop.ga, 1 mobtop.ml, 1 mobycoders.com, 1 @@ -79476,7 +81065,6 @@ modbom.com.tw, 1 modcover.com, 1 modd.com.au, 1 modded-minecraft-server-list.com, 1 -moddedphones.com, 1 modderday.com, 1 moddescargas.com, 0 modding-forum.com, 1 @@ -79578,6 +81166,7 @@ moe.ci, 1 moe.tools, 1 moe4sale.in, 1 moeali.com, 1 +moeblog.cn, 1 moeblog.top, 1 moec.top, 1 moechel.com, 1 @@ -79612,6 +81201,7 @@ mof.gov.ws, 1 mofbinsurance.com, 1 mofohome.dyndns.org, 1 mogamugi.com, 1 +mogica.tk, 1 mogomix.cf, 1 mogradus.com, 1 moguls.tv, 1 @@ -79667,6 +81257,7 @@ mojizuri.com, 1 mojizuri.jp, 1 mojkragujevac.net, 1 mojleksikon.com, 1 +mojnet.net, 1 mojo.az, 1 mojo.so, 1 mojoco.co.za, 1 @@ -79695,6 +81286,7 @@ mokutovo.tk, 1 molb.org, 1 moldova-online.ml, 1 moldovainformata.ro, 1 +moldovanka.tk, 1 moldovawall.tk, 1 moldsearchers.ga, 1 molecularbiosystems.org, 1 @@ -79715,6 +81307,7 @@ mollyringworm.tk, 1 mollysun.net, 1 mollyview.com, 1 molodechno-mk.by, 1 +molodost.ga, 1 molodost.gq, 1 molodost.tk, 1 molokaibreeze.com, 1 @@ -79883,6 +81476,7 @@ monkeybusiness.agency, 1 monkeyhill.us, 1 monkeymills.ga, 1 monkeys.pt, 1 +monkeysorce.tk, 1 monkeytek.ca, 1 monkeyttack.net, 1 monlissagebresilien.com, 1 @@ -80103,7 +81697,9 @@ mor-charpentier.com, 1 mora.pl, 1 moracont.com, 1 moradali.tk, 1 +moralcenter.cf, 1 moralcompass.ga, 1 +moraldehornuez.tk, 1 moraliswimwear.com, 1 morandofora.com.br, 0 moranyachts.com, 1 @@ -80190,6 +81786,7 @@ morningchew.com, 1 morningcurve.com, 0 morninggarden.com, 1 morningstar.moe, 1 +moroccanews.tk, 1 moroccomiami.com, 1 moroccotodaynews.ga, 1 morogoro.tk, 1 @@ -80219,6 +81816,7 @@ morse-ti.net, 1 morselife.org, 1 mortaltorment.tk, 1 morten-harket.de, 1 +mortengamstpedersen.tk, 1 mortezaafri.tk, 1 mortgagecalculator.biz, 1 mortgagetranslations.gov, 1 @@ -80263,6 +81861,7 @@ mosin.org, 1 moskeedieren.nl, 1 moskva-kamen.ru, 1 mosmirmebeli.com, 1 +mosnews.tk, 1 moso.io, 1 mosobl.tk, 1 mosquito-code.com, 1 @@ -80367,6 +81966,7 @@ motorring.ru, 1 motorslopers.tk, 1 motorsplus.com, 0 motortecbrasil.com.br, 1 +motortg.it, 1 motortrend.com, 1 motorways.tk, 1 motoryachtclub-radolfzell.de, 1 @@ -80393,6 +81993,7 @@ motstats.co.uk, 1 mott.pe, 1 motte.tattoo, 1 motto-iikoto.com, 1 +motun.ga, 1 moube.fr, 1 mouche.fr, 1 moucloud.cn, 1 @@ -80482,6 +82083,7 @@ movinglogistics.nl, 0 movingoklahoma.org, 1 movingschoolsforward.com, 1 movingtohttps.com, 1 +movio.ga, 1 moviro.net, 1 movlib.org, 1 movnest.com, 1 @@ -80698,6 +82300,7 @@ mserve.ddns.net, 1 mservers.cz, 1 msetalk.fr, 1 msfishingcharter.com, 1 +msgallery.tk, 1 msgmon.com, 1 msha.gov, 1 mshemailmarketer.com.au, 1 @@ -80851,7 +82454,6 @@ mu-wi.gov, 1 mu.search.yahoo.com, 0 mu00.org, 1 mu105.cc, 1 -mu3e.com, 1 mu3on.com, 1 muabannhanh.com, 0 muac-innolab.eu, 1 @@ -80865,7 +82467,6 @@ muchbetterthancash.com, 1 muchisimos.com, 1 muchohentai.com, 1 muchoruidoacademy.com, 1 -muckingabout.eu, 1 muclan.tk, 1 mucmail.de, 1 mudanzasjuniorh.com, 1 @@ -80990,6 +82591,7 @@ multiplies.tk, 1 multipotential-labo.com, 1 multirep.ch, 0 multiroom-streaming.de, 1 +multischool.tk, 1 multisite.ovh, 1 multispaninc.com, 1 multitec.nl, 1 @@ -81186,6 +82788,7 @@ musicmasala.tk, 1 musicnotesroom.com, 1 musicompare.com, 1 musicradar.co.il, 1 +musicradio.ga, 1 musicradio.gq, 1 musicradio.tk, 1 musicrooz.tk, 1 @@ -81377,6 +82980,7 @@ mxtm.de, 1 my-aftershave-store.co.uk, 1 my-azov.tk, 1 my-best-wishes.com, 1 +my-bratsk.tk, 1 my-calend.ru, 0 my-clubpenguin.tk, 1 my-contract.ch, 0 @@ -81423,6 +83027,7 @@ my-store.ch, 1 my-stories.ml, 1 my-stuff-online.com, 1 my-town.tk, 1 +my-tunisia.tk, 1 my-visualforce.com, 1 my-web.xyz, 1 my-webcloud.at, 1 @@ -81518,7 +83123,6 @@ mychamberlain.co.nz, 1 mychamberlain.com, 1 mychamberlain.com.au, 1 mychamberlain.eu, 1 -mycharlestontherapist.com, 1 mychemromance.tk, 1 mychicken.info, 1 mychicken.nl, 1 @@ -81544,7 +83148,6 @@ mycodes.com.au, 1 mycofairtrade.com, 0 mycoins.gallery, 1 mycoldjet.com, 1 -mycollegebag.in, 1 mycolorado.gov, 1 mycompanion.cz, 1 mycompanysite.host, 1 @@ -81764,6 +83367,7 @@ mykolhoz.tk, 1 mykonos-island.tk, 1 mykontool.de, 1 mykumedir.com, 1 +mykursumlija.tk, 1 mylastchapter.tk, 1 mylatestnews.org, 1 mylearners.vic.gov.au, 1 @@ -81906,6 +83510,7 @@ mypathologos.gr, 1 mypay.fr, 1 mypdns.org, 0 mypeace.tk, 1 +mypenza.tk, 1 mypeople.co.in, 1 myperfecthome.ca, 1 myperks.in, 1 @@ -81940,6 +83545,7 @@ mypskov.tk, 1 mypsy.online, 1 mypvhc.com, 1 myqservices.com, 1 +myraboats.tk, 1 myradnetconnect.com, 1 myrandomtips.com, 1 myrants.org, 1 @@ -82262,6 +83868,7 @@ n95s.tech, 1 n9721.com, 0 n9728.co, 1 na-agency.com, 1 +na-kipre.tk, 1 na-n.xyz, 1 na-school.nl, 1 na.nl, 1 @@ -82276,9 +83883,11 @@ naaronstoe.nl, 1 nab-services.ml, 1 nabaleka.com, 1 nabboon.com, 1 +nabeez.cf, 1 nabidka.net, 1 nabidkydnes.cz, 1 nabitrix.tk, 1 +nabokov.tk, 1 nabosoft.tk, 1 nabytek-valmo.cz, 1 nabzgroup.com, 1 @@ -82300,6 +83909,7 @@ nacin.com, 1 nacionaltelha.com.br, 1 nacktetatsachen.at, 0 nackwallpapers.ml, 1 +nacocu.cf, 1 nacom.tk, 1 nacres.tk, 1 nacsonline.tk, 1 @@ -82429,6 +84039,7 @@ nakluky.cz, 1 nako.blog, 1 nako.kr, 1 nako.no, 1 +nakthongkham.cloud, 1 nakthongkham.com, 1 nakupi.online, 1 nalenders.com, 1 @@ -82506,6 +84117,7 @@ nanco.co.jp, 1 nanco.jp, 1 nancytelford.com, 1 nancytutors.com, 1 +nancyzone.tk, 1 nandakumar.co.in, 1 nandakumar.org, 1 nandapanithota.xyz, 1 @@ -82513,6 +84125,7 @@ nandedam.com, 1 nandemo.tk, 1 nanderson.me, 1 nandertga.ddns.net, 1 +nandito.tk, 1 nanfangstone.com, 1 nange.cn, 1 nangluongxanhbinhphuoc.com, 1 @@ -82579,6 +84192,7 @@ naplestotalgarage.com, 1 napo.tk, 1 napolinissanctparts.com, 1 napolitoday.it, 1 +napominanie.ml, 1 napoveda.online, 1 nappywashing.ga, 1 naprapativast.se, 1 @@ -82636,6 +84250,7 @@ narrow.one, 1 narthollis.net, 1 narushil-pdd.cf, 1 narushil-pdd.gq, 1 +naruto-best.tk, 1 narutodelivery.com.br, 1 narutolimits.tk, 1 narutoshippuden.tk, 1 @@ -82704,6 +84319,7 @@ nasvyazi.ga, 1 naszymzdaniem.pl, 1 nat-neocron.tk, 1 nat.ac, 1 +nataez.tk, 1 nataldigital.com, 1 natalia-shablo.ru, 1 natalia-venezuela.tk, 1 @@ -82717,6 +84333,7 @@ natanaelys.com, 1 nataniel-perissier.fr, 1 natarius.tk, 1 natasa-theodoridou.tk, 1 +natasabekvalac.tk, 1 natasasavija.tk, 1 nataschaskraamzorg.nl, 1 natashacampos.com.br, 1 @@ -82815,6 +84432,7 @@ naturabuy.fr, 1 naturalbeautyhacks.com, 1 naturalbijou.com, 1 naturalbladdercontrol.tk, 1 +naturalcosmetics.cf, 1 naturalezafengshui.com, 1 naturalflowerpower.com, 1 naturalkitchen.co.uk, 1 @@ -82905,6 +84523,7 @@ nayna.tk, 1 nayr.us, 1 naz-sciaves.eu, 1 nazad.com.br, 1 +nazarenoviso.tk, 1 nazevfirmy.cz, 1 nazimogluinsaat.com, 1 nazuna.blue, 1 @@ -83080,7 +84699,6 @@ near.social, 1 nearbi.com.mx, 1 nearby.in.th, 1 nearbyprinter.com, 1 -nearestbusiness.com, 1 nearlist.com, 1 nearnorthmassage.com, 1 neartothesky.com, 1 @@ -83102,6 +84720,7 @@ nebelheim.de, 1 nebenbeiblog.ch, 1 nebix.tk, 1 nebogame.com, 1 +neboley.cf, 1 nebra.io, 1 nebracy.com, 1 nebul.at, 0 @@ -83148,7 +84767,6 @@ neeerd.org, 1 neel.ch, 1 neemdetijd.nl, 0 neemo.nz, 1 -neemzy.org, 1 neenahwi.gov, 1 neero.fr, 1 nees.ga, 1 @@ -83345,6 +84963,7 @@ neotiv-care.com, 1 neotiv.com, 1 neotracker.io, 0 neovapo.com, 1 +neoverso.tk, 1 neovote.com, 1 neowa.tk, 1 neowin.net, 1 @@ -83583,6 +85202,7 @@ netor.ga, 1 netpraetor.com, 1 netpreneur.co.za, 1 netprofile.com.au, 0 +netrabota.tk, 1 netracks.ga, 1 netradyne.com, 1 netraising.com, 1 @@ -83643,7 +85263,7 @@ netwerkmanager.nl, 0 netwidow.com, 1 netwire.tk, 1 netwiseprofits.com, 1 -networds.ro, 1 +networds.ro, 0 networg.cz, 1 networg.pl, 1 network-au-qa-api.azurewebsites.net, 1 @@ -83693,7 +85313,6 @@ netzklad.de, 1 netzona.org, 1 netzspielplatz.de, 0 netzsv.website, 1 -netztest.at, 1 netzvieh.de, 1 netzwerk-lq.com, 1 netzwerk-sozialliberal.de, 1 @@ -83760,6 +85379,7 @@ never.pet, 1 neveraquemola.ml, 1 neverasquemola.ml, 1 neverendingrejection.tk, 1 +nevergirl.tk, 1 nevergonnatouchit.tk, 1 nevergreen.io, 1 neverhood-tv.tk, 1 @@ -83884,6 +85504,7 @@ newholland.tk, 1 newhomedesign.tk, 1 newhope.me, 1 newhopeplacement.com, 1 +newillusion.tk, 1 newind.info, 1 newinf.at, 1 newjerseyvideography.com, 1 @@ -83894,8 +85515,10 @@ newlegalsteroid.com, 1 newlifefund.org, 1 newlifehempoil.com, 1 newlight.net.br, 1 +newlovers.ga, 1 newlovers.gq, 1 newlynamed.com, 1 +newlytricks.ml, 1 newman.ga, 1 newmansown.co.uk, 1 newmarketbouncycastlehire.co.uk, 1 @@ -83928,11 +85551,13 @@ news-police.tk, 1 news-sy.cf, 1 news-technology.ml, 1 news-zp.tk, 1 +news123.ga, 1 news12elite.tk, 1 news17.tk, 1 news24rus.tk, 1 news29.tk, 1 news47ell.com, 0 +news53today.tk, 1 news54.tk, 1 news60.tk, 1 news89.cf, 1 @@ -83944,8 +85569,10 @@ newsaroma.com, 1 newsarticle.ml, 1 newsasia7.com, 1 newsauto.tk, 1 +newsbali.tk, 1 newsbay.gr, 1 newsbomba.ml, 1 +newsbusiness.cf, 1 newsbytesapp.com, 1 newscenter.gr, 1 newscheck.tk, 1 @@ -83966,7 +85593,10 @@ newshour.media, 1 newsig.com, 1 newsignature.com, 1 newsinformer.ga, 1 +newsinkansas.ml, 1 newsinpenn.ml, 1 +newsinpolitics.ga, 1 +newsireland.tk, 1 newskinlasercenter.com, 1 newslanes.com, 1 newslanka.tk, 1 @@ -83985,7 +85615,9 @@ newsticker.tk, 1 newstj.ml, 1 newstone-tech.com, 1 newstraveltoday.gq, 1 +newsuk.tk, 1 newsupdatesdaily.ga, 1 +newsvideo.tk, 1 newsvoice.com, 1 newsworld247.tk, 1 newsxp.tk, 1 @@ -84016,6 +85648,7 @@ newyorkcoffeejobs.com, 1 newyorkdiscountattractions.com, 1 newyorkhiltonmidtown.com, 1 newyorkland.forsale, 1 +newyorknews.tk, 1 newyorkrp.tk, 1 newyoushampoo.com, 1 newzashitnik.tk, 1 @@ -84189,7 +85822,6 @@ nguonnha.vn, 1 nguru.net, 1 ngutek.com, 1 nguyendanghung.com, 1 -nguyenfamily.tk, 1 nguyenminhhung.com, 1 nguyensuu.tk, 1 nguyenvankhoi.com, 1 @@ -84397,6 +86029,7 @@ nicolaszambetti.ch, 1 nicolaw.uk, 1 nicole-richie.info, 1 nicolemathew.com, 1 +nicoleta-prestescu.tk, 1 nicolettajennings.com, 1 nicolettevandervalk.nl, 1 niconico.ooo, 1 @@ -84517,6 +86150,7 @@ niit-mts.com, 1 niit.com, 1 niitfoundation.org, 1 niituniversity.in, 1 +niituva.ga, 1 nij.gov, 1 nijiero-ch.com, 0 nijikata.com, 1 @@ -84541,6 +86175,7 @@ nikhilnimiya.love, 1 nikimix.com, 0 nikitacartes.xyz, 0 nikitagukov.ru, 1 +nikitenko.tk, 1 nikitin.photo, 1 nikkasystems.com, 1 nikkila.me, 1 @@ -84554,10 +86189,10 @@ niko-mapping-studio.tk, 1 niko-vfx.com, 0 nikolaev.ml, 1 nikolahost.tk, 1 +nikolai-schmidt.tk, 1 nikolaipribylski.tk, 1 nikolaj-platoshkin.cf, 1 nikolasbradshaw.com, 1 -nikomo.fi, 0 nikonlibrary.co.uk, 1 nikonnps.co.uk, 1 nikonschool.co.uk, 1 @@ -84606,6 +86241,7 @@ nimnadasl.tk, 1 nimnordic.com, 1 nin.to, 1 nina-laaf.de, 1 +nina-woerz.tk, 1 ninaafenehjelm.com, 1 ninadeissler.de, 1 ninadevil.org, 1 @@ -84706,7 +86342,6 @@ nitrohorse.com, 0 nitrokey.com, 1 nitromaster.tk, 1 nitropanel.com, 0 -nitropur.com, 1 nitropur.de, 1 nitrous-networks.com, 0 nitschinger.at, 1 @@ -84904,6 +86539,7 @@ nocrm.io, 1 noctinus.tk, 1 noctisphoto.tk, 1 nocturnos.tk, 1 +nocturnus.tk, 1 noctys.com, 1 nocyclopedia.tk, 1 nodecdn.net, 1 @@ -84930,6 +86566,7 @@ noedidacticos.com, 1 noefio-software.com, 1 noel.wf, 1 noel.yt, 1 +noelblog.ga, 1 noelclaremont.com, 1 noellabo.jp, 1 noellimpag.me, 0 @@ -84947,7 +86584,6 @@ nogfw.org, 1 nogfw.pro, 1 nogfwsite.com, 1 nogger.nl, 1 -nogoononstick.com, 1 nogradhont.hu, 1 nohats.ca, 1 nohkan.fr, 0 @@ -84985,6 +86621,7 @@ nokono.com, 1 noktadedektor.com, 1 noktaradyo.com, 1 nokumbaya.com, 1 +nokya.tk, 1 nokzedoc.tv, 1 nolanpoe.me, 1 nolanpowellisaho.com, 1 @@ -85043,6 +86680,7 @@ nonprofit.info, 1 nonsa.pl, 1 nonstopjob.ga, 1 nontonanimeid.one, 1 +nontonfilem.ml, 1 nonuplebroken.com, 1 nonx.pro, 1 nony.no, 1 @@ -85087,6 +86725,7 @@ nooverviewavailable.com, 1 noozy.org, 1 nopagefound.com, 1 nopaincenter.ro, 0 +nopajam.tk, 1 nopaste.eu, 1 nopaynocure.com, 1 nophelet.com, 1 @@ -85100,6 +86739,7 @@ norad.sytes.net, 1 noradevot.com, 1 noradevot.org, 1 noradrenalina.com, 1 +norala.tk, 1 noralku.net, 1 norazpublicservice.gov, 1 norbertorabinovichblog.com, 0 @@ -85120,6 +86760,7 @@ nordicirc.com, 1 nordico.club, 1 nordicsemi.com, 1 nordicsolutionsgroup.com, 1 +nordicsrit.tk, 1 nordinfo.fi, 1 nordlandverliebt.de, 1 nordlayer.com, 1 @@ -85206,7 +86847,6 @@ northernflame.tk, 1 northerngate.net, 1 northernhamsterclub.com, 1 northernpowertrain.com, 1 -northernselfstorage.co.za, 1 northfayettepa.gov, 1 northfayettepapolice.gov, 1 northfieldmn.gov, 1 @@ -85215,6 +86855,7 @@ northflightaeromed.org, 1 northhampton-nh-pd.gov, 1 northhudsonwi.gov, 1 northkenthypnotherapy.com, 1 +northkoreainsider.tk, 1 northlinkferries.com, 1 northlinkferries.net, 1 northmountliquor.ca, 1 @@ -85323,7 +86964,6 @@ notcompletelycorrect.com, 1 notcurses.com, 1 notdankmemer.lol, 1 note.ms, 1 -note.wf, 1 note1024.tk, 1 note7forever.com, 1 notebin.xyz, 1 @@ -85345,7 +86985,6 @@ nothing.net.nz, 1 nothing.org.uk, 1 noti.tg, 1 noticiaelmundo.com, 1 -noticias7.org, 1 noticiasdeautos.site, 1 noticiasdetv.com, 1 noticiasdocambio.com.br, 1 @@ -85392,6 +87031,7 @@ nottawatwpisabellami.gov, 1 notube.net, 1 notyour.chat, 1 notyouraverageamerican.com, 0 +nou9ta.tk, 1 noudjalink.nl, 1 nougat-anduze.fr, 1 noumeet.com, 1 @@ -85470,6 +87110,7 @@ novogradnje.si, 1 novogrudok.tk, 1 novojet.cl, 1 novokurovka.tk, 1 +novokuznetsk.tk, 1 novonegoc.io, 1 novoodesabibl.tk, 1 novopromo.ru, 1 @@ -85495,6 +87136,7 @@ novysvit.com.ua, 1 novyzelandnamiru.cz, 1 now.gg, 1 now.sh, 1 +now101atm.tk, 1 nowaesthetic.com, 1 nowaovivo.com.br, 1 nowar72.info, 1 @@ -85598,6 +87240,7 @@ nsepapa.com, 1 nsfw-story.com, 1 nshepp-dct-development.azurewebsites.net, 0 nshipster.cn, 1 +nshipster.co.kr, 1 nshipster.com, 1 nshipster.es, 1 nsics.co.jp, 1 @@ -85733,11 +87376,11 @@ nullbit.tk, 1 nullbox.co, 1 nulldev.org, 1 nulle-part.org, 1 -nulleddown.com, 1 nullificatr.tk, 1 nullnix.gr, 1 nullonerror.org, 1 nullroute.com, 1 +nullscripts.tk, 1 nullsechs.tk, 1 nulltime.net, 1 nullxsec.net, 1 @@ -85751,6 +87394,7 @@ numbercult.net, 1 numbermunchers.net, 1 numberonebc.com, 1 numberzero.org, 1 +numericall.gq, 1 numerik-games.ch, 0 numeritelefonici.it, 1 numerli.com, 1 @@ -85832,7 +87476,6 @@ nutriclub.co.id, 1 nutrienti.eu, 1 nutrifyyourself.com, 1 nutrijets.com, 1 -nutrimedcn.com, 1 nutriment.co.uk, 1 nutripedia.gr, 1 nutrisidangym.com, 1 @@ -86096,7 +87739,6 @@ oaktree-realtors.com, 1 oaktreelodge.org.uk, 1 oakwood-park.tk, 1 oandareview.co, 1 -oapks.com, 1 oase-fuer-wohlbefinden.ch, 1 oasegroen.nl, 1 oasiristorantebagno.it, 1 @@ -86129,6 +87771,7 @@ obdlink.com, 1 obdolbacca.ru, 1 obec-krakovany.cz, 1 obecvinodol.tk, 1 +obed-doma.tk, 1 obejo.tk, 1 obejor.com.ng, 1 obelisco.tk, 1 @@ -86139,7 +87782,6 @@ obereg.ml, 1 oberg.co, 1 oberg.us, 1 oberhofdrinks.com, 1 -oberhofjuice.com, 1 obermeiers.eu, 1 oberoi.de, 1 obery.com, 1 @@ -86182,16 +87824,20 @@ oblik.press, 1 oblikdom.ru, 0 oblinvest.org, 1 oblitsov.ru, 1 +oblivious.ml, 1 +oblojka.tk, 1 oblondata.io, 0 obmen-viz.tk, 1 obmen-vizitami.ml, 1 obmenka.tk, 1 obmennik.tk, 1 obnalichka.cf, 1 +obnalichka.ga, 1 +obnalichka.gq, 1 obnalichka.tk, 1 obocat.tk, 1 oboivam.ru, 1 -obolo4ka.ru, 1 +obomne.tk, 1 obozrevatel.tk, 1 obra.com.br, 1 obrabotka-zakazow.tk, 1 @@ -86225,6 +87871,7 @@ obxlistings.com, 1 obyna3.pl, 1 obyvateleceska.cz, 1 obzor-znakomstv.tk, 1 +obzory-evgeny.tk, 1 oc-minecraft.com, 1 oc-sa.ch, 0 ocacnews.net, 1 @@ -86243,18 +87890,26 @@ occhelps.gov, 1 occrp.org, 1 occu.lt, 1 occult-magick.ga, 1 +occult-magick.gq, 1 +occult-magick.ml, 1 occulter.fr, 1 +occultism.tk, 1 +occultisme.tk, 1 occultumproductions.tk, 1 occupational-therapy-colleges.com, 1 +occupations.org.ru, 1 occupy4elephants.tk, 1 +occupybakersfield.tk, 1 occupymedia.org, 1 occupynightlife.com, 1 ocd2016.com, 1 ocdadmin.com, 1 ocdhub.co.za, 1 ocealy.com, 1 +ocean-of-love.ml, 1 oceanaway.tk, 1 oceanborn.ml, 1 +oceanborn.tk, 1 oceanbreezehomes.com, 1 oceancrew.org, 1 oceandns.eu, 1 @@ -86270,6 +87925,7 @@ oceanofapk.com, 1 oceanofpdf.com, 1 oceanohost.com, 1 oceanpark.vn, 1 +oceanshaman.cf, 1 oceanshaman.ga, 1 oceanshaman.gq, 1 oceanshaman.ml, 1 @@ -86362,6 +88018,7 @@ octohedralpvp.tk, 1 octolopagon.games, 1 octopoos.com, 1 octopoos.org, 1 +octopub.tk, 1 octopus-apps.be, 1 octopus-code.org, 1 octothorpe.club, 1 @@ -86404,6 +88061,7 @@ odensc.com, 1 odensc.me, 1 odenvilleal.gov, 1 odeonentertainment.co.uk, 1 +odessalove.tk, 1 odezdaotto.tk, 1 odhosc.ca, 1 odiall.co, 1 @@ -86421,6 +88079,7 @@ odiris.lk, 1 odishainfo.tk, 1 odisseo.io, 1 odlicomul.ga, 1 +odnostranichnik.tk, 1 odo-pro.ru, 1 odolbeau.fr, 1 odonata-editions.fr, 1 @@ -86488,6 +88147,7 @@ ofertastop.es, 1 ofertaviva.com.br, 1 ofertino.es, 1 ofertolino.fr, 1 +off-rabota.tk, 1 off.net.mk, 1 offandonagain.org, 1 offbeat-music.com, 1 @@ -86515,6 +88175,7 @@ office-basilique.notaires.fr, 1 office-de-tourisme.net, 0 office-dolmetscher-scharnagl.de, 1 office-furniture-direct.co.uk, 1 +office-house.tk, 1 office-mizutani.jp, 1 office-op.tk, 1 office-ruru.com, 1 @@ -86526,11 +88187,13 @@ officedivvy.co, 1 officedivvy.com, 1 officedivvy.company, 1 officeefficient.de, 1 +officeface.cf, 1 officeforstudents.org.uk, 1 officefundays.co.uk, 1 officeinteriors.co.nz, 1 officemovepro.com, 1 officerjones.tk, 1 +officert.ga, 1 officevibe.com, 1 official-sensitive.org, 1 officialdbay.com, 1 @@ -86554,10 +88217,12 @@ offlineauthentication.com, 1 offpages.cf, 1 offpages.gq, 1 offpages.ml, 1 +offpageseopro.tk, 1 offroadhoverboard.net, 1 offsetservices.co.uk, 1 offshoot.rentals, 0 offshoreclamp.com, 1 +offshoremoney.tk, 1 offshoretravelsest.ga, 1 offshorewfs.com, 1 offshorewindwatchdog.com, 1 @@ -86581,6 +88246,8 @@ ofo.moe, 1 ofo2.com, 0 ofogh.co, 1 oformi.net, 1 +oformit-zajm-kruglosutochno.ga, 1 +oformlaj.ga, 1 ofrion.lu, 1 ofsetas.lt, 1 oftamedic.com, 0 @@ -86588,6 +88255,7 @@ oftn.org, 1 ofuquemalitaestoy.tk, 1 oga.fit, 0 ogamerezine.tk, 1 +ogarkovo.ml, 1 ogatsu-cho.com, 1 ogdensburgnj.gov, 1 oge.ch, 0 @@ -86602,12 +88270,18 @@ oglen.ca, 1 oglix.com.br, 1 ogmworld.tk, 1 ognedoor.ru, 1 +ognemet.net, 1 +ognyan.tk, 1 +ogo-knigi.ml, 1 +ogogo-knigi.ml, 1 ogolnotematyczny.pl, 1 +ogorod-money.tk, 1 ogot.org, 1 ogrenciyurtlari.tk, 1 ogretmenimsanat.com, 0 ogui.de, 1 ogunquit.gov, 1 +ogurishun.tk, 1 oguya.ch, 1 ogyaa.jp, 0 ogznet.com, 1 @@ -86648,6 +88322,7 @@ ohne-name.de, 1 ohnonotme.com, 1 ohol.se, 1 ohoreviews.com, 1 +ohrange-music.tk, 1 ohreally.de, 1 ohrus.mx, 1 ohsohairy.co.uk, 1 @@ -86660,13 +88335,16 @@ ohype.gq, 1 oi-wiki.org, 1 oiahe.org.uk, 1 oic-ci.gc.ca, 1 +oidrava.tk, 1 oikontroloi.tk, 1 oikosweb.com, 1 oil-heaters.tk, 1 oilfieldinjury.attorney, 1 +oilman.ml, 1 oilpaintingsonly.com, 1 oilsan.com, 1 oilyouneed.co.id, 1 +oimexico.tk, 1 oinimod.com, 1 oinky.ddns.net, 1 oirealtor.com, 1 @@ -86692,6 +88370,7 @@ okaidi.fr, 1 okaidi.ro, 1 okaidi.si, 1 okakuro.org, 1 +okanaybek.tk, 1 okash.it, 1 okashi.me, 1 okay.cf, 1 @@ -86699,10 +88378,12 @@ okay.coffee, 1 okayloser.com, 1 okazoo.eu, 1 okburrito.com, 1 +okcasino.ga, 1 okchousebuyer.com, 1 okeeferanch.ca, 1 okemahok.gov, 1 okeydeyim.com, 1 +okhanvatansever.tk, 1 okhrana.agency, 1 okib.ca, 1 okiefrog.org, 1 @@ -86710,6 +88391,7 @@ okinawa-mag.net, 1 okinawa-seaside.com, 1 okinawan-lyrics.com, 1 okkhor52.com, 1 +okkultemysterier.tk, 1 okkur.community, 1 okkur.dev, 1 okkur.io, 1 @@ -86731,12 +88413,14 @@ okna-tm.kz, 1 okna-vek.com.ua, 1 okna.ua, 1 oknarating.ru, 1 +oknavdom.tk, 1 oknopvh.ml, 1 okobojitech.com, 1 okonto.com, 1 okoris.net, 1 okotelecom.ml, 1 okotoksbeach.ca, 1 +okpo.tk, 1 okqubit.net, 1 okr.pub, 1 okremarketing.com, 1 @@ -86774,24 +88458,34 @@ olasderisa.tk, 1 olasouris.com, 0 olastrafford.org, 1 olatiferreira.com, 1 +olax.tk, 1 olbat.net, 1 olcayanar.com, 1 olcbrookhaven.org, 1 +old-times.ga, 1 old-tomsk.tk, 1 old-wheelers.tk, 1 +oldaine.tk, 1 +oldbkcom.tk, 1 oldbones.tk, 1 oldbrookinflatables.co.uk, 1 oldbrookmarqueehire.co.uk, 1 oldcars.tk, 1 oldcastle.tk, 1 oldcc.gov, 1 +oldcity.tk, 1 oldcitysmokehouse.com, 1 oldcold.co, 1 +olddisk.ml, 1 oldenzaal.tk, 1 older-racer.com, 1 oldertarl.ddns.net, 1 oldfarming.tk, 1 +oldfieldmusic.tk, 1 +oldfriends.tk, 1 oldhouse.tk, 1 +oldiesmusicguide.tk, 1 +oldiesradio.tk, 1 oldinnpub.tk, 1 oldita.ru, 1 oldno07.com, 1 @@ -86811,6 +88505,7 @@ oldsql.tk, 1 oldsticker.com, 1 oldstmary.com, 1 oldtacomamarine.com, 1 +oldtavern.tk, 1 oldtimer.tk, 1 oldtimerclub.tk, 1 oldtimerparts.de, 0 @@ -86836,9 +88531,12 @@ oleodecopayba.com.br, 1 olepiraatti.fi, 1 olerogas.xyz, 1 oles-hundehaus.de, 1 +olesaradio.tk, 1 olffi.com, 1 olfnewcastle.com, 1 olfsecane.org, 1 +olgallery.tk, 1 +olgaserebrennikova.tk, 1 olgcc.net, 1 olgiati.org, 0 olgui.net, 0 @@ -86852,6 +88550,7 @@ oligenesi.it, 1 olightstore.ro, 1 olimpicmoradebre.tk, 1 olimpikfit.com, 1 +olimpoao.tk, 1 olinux.fr, 1 oliode.tk, 1 olisius.com, 1 @@ -86884,9 +88583,12 @@ oliverwenz.de, 1 olivetbgc.org, 1 olivetchurch.org.uk, 1 olivetownship-mi.gov, 1 +olivia.cf, 1 +olivialufkin.tk, 1 olivier-giroud.tk, 1 olivier-rochet.com, 1 olivierberardphotographe.com, 0 +oliviercreation.tk, 1 olivierdurand.tk, 1 olivierpieters.be, 1 oliviervaillancourt.com, 1 @@ -86906,6 +88608,7 @@ olliespage.com, 1 olliespage.net, 1 olliespage.uk, 1 ollning.com, 1 +ollo.ga, 1 olltechjob.com, 1 olmari.fi, 1 olmc-nutley.org, 1 @@ -86944,6 +88647,7 @@ olympia-blerick.tk, 1 olympia-londerzeel.tk, 1 olympiads.ca, 1 olympiaduilawyers.com, 1 +olympiamanzanilla.tk, 1 olympic-lodge.com, 1 olympic-research.com, 1 olympicfitness.com.mx, 1 @@ -86958,7 +88662,9 @@ omaharoofpros.com, 1 omahcoin.com, 1 omandatapark.com, 1 omangrid.com, 1 +omanhr.cf, 1 omanmegadeals.com, 1 +omaosurveys.org, 0 omarans.com, 1 omarbaba.shop, 1 omarov.tk, 1 @@ -86976,6 +88682,7 @@ omdesign.cz, 0 omdnotarissen.nl, 1 omedita.lt, 1 omega-intranet.com, 1 +omegachess.tk, 1 omegahosting.net, 1 omegalan.tk, 1 omegamc.ua, 1 @@ -86992,6 +88699,7 @@ omert.tk, 1 omerta.tk, 1 omertabeyond.com, 1 omertabeyond.net, 1 +omestudios.tk, 1 ometepeislandinfo.com, 1 omexcables.com, 1 omezahblog.com, 1 @@ -87080,6 +88788,7 @@ onbettertech.com, 1 once.eu.org, 1 oncecocuklar.org.tr, 1 oncemorearoundeternity.com, 1 +onceuagain.tk, 1 onceuponachicken.com, 1 onceuponarainbow.co.uk, 1 oncf.asso.fr, 1 @@ -87089,6 +88798,7 @@ oncore-eurofins.com, 1 oncotarget.ru, 1 ond-inc.com, 1 ond-inc.jp, 1 +ondajoven.tk, 1 ondasalfa.com.br, 1 ondato.com, 1 ondav.com, 1 @@ -87128,18 +88838,23 @@ onebanc.ai, 1 onebelo.tk, 1 onebigcow.com, 1 onebiz.tk, 1 +onebookstore.ml, 1 onebreadcrumb.com, 1 onebreadcrumb.com.au, 1 onecharge.biz, 1 onechoice.co.nz, 1 onechronos.com, 1 onecinema.ru, 1 +oneclick2books.cf, 1 oneclickbooks.gq, 1 +oneclickbooks.ml, 1 oneclickjailbreak.com, 1 +oneclickmoney.cf, 1 +oneclickmoney.ml, 1 +oneclickmoney.tk, 1 oneclub.ua, 1 onedaygrandcanyonrafting.com, 1 onedeal.com.ua, 1 -onedigitize.com, 1 onedoc.ch, 1 onedot.nl, 1 onedrive.com, 0 @@ -87170,6 +88885,7 @@ oneminute.io, 0 oneminutetomindfulness.com, 1 onemodel.com.au, 1 onemodel.us, 1 +onemonthcamera.tk, 1 onemoonmedia.de, 1 onemorecenter.com, 1 onenetcdn.com, 1 @@ -87193,9 +88909,12 @@ onespan.com, 0 onesports.cz, 1 onestarclassics.com, 1 onestasolar.com, 1 +onestepbooks.gq, 1 +onestepbooks.ml, 1 onestopcastles.co.uk, 1 onestopirrigationservice.com.au, 1 onestopmedicalsupplies.com, 1 +onestopshop.ml, 1 onestpasdesanges.fr, 1 onetakeonehit.tk, 1 onetap.com, 1 @@ -87208,6 +88927,7 @@ onetly.com, 1 onetonline.org, 1 onetouchrevealplus.com, 1 onetouchtour.com, 1 +onetown.gq, 1 onetranslations.com.br, 1 onetrust.com, 1 onetwentyseven001.com, 1 @@ -87224,6 +88944,7 @@ onewebdev.info, 1 onewyo.gov, 1 onezero24.net, 1 onfaloc.tk, 1 +onfilm.tk, 1 onfireonboarding.nl, 1 onformative.net, 1 ongea.io, 1 @@ -87234,6 +88955,7 @@ onhub1.com, 1 oni.nl, 1 onice.ch, 1 onicore.cf, 1 +onidesign.tk, 1 onilacare.com, 1 oninpresento.ga, 1 onionbot.ga, 1 @@ -87251,13 +88973,16 @@ onix.eu.com, 1 onixcco.com.br, 1 onkentessegertdij.hu, 1 onkfaktor.de, 0 +onkologiya.ga, 1 onlanka.com, 1 onld.de, 1 onlfait.ch, 0 +online-bookmakers.ru, 1 online-bouwmaterialen.nl, 1 online-calculator.com, 1 online-calculator.xyz, 1 online-car-show.com, 1 +online-carhire.tk, 1 online-clothing-store.tk, 1 online-consulting-corp.com, 1 online-diary.tk, 1 @@ -87266,15 +88991,19 @@ online-eikaiwa-guide.com, 1 online-english.tk, 1 online-fix.me, 1 online-health-insurance.com, 1 +online-jobs.cf, 1 online-learning.bg, 1 online-lernprogramme.de, 1 online-mobile-phone-shop.tk, 1 +online-news-usa.tk, 1 +online-pochta.ml, 1 online-pr.at, 1 online-scene.com, 1 online-shop-equipment.tk, 1 online-sql-editor.com, 1 online-stopwatch.com, 1 online-store-phones.tk, 1 +online-taxes.tk, 1 online-tesis.com, 1 online-textil.com, 1 online-textil.cz, 1 @@ -87293,6 +89022,7 @@ onlinebiller.com, 1 onlinebookmarks.tk, 1 onlinebrides.tk, 1 onlinebs.tk, 1 +onlinebupropion.gq, 1 onlinebusiness.law, 1 onlinecarstyling.nl, 1 onlinecasinoerdk.com, 1 @@ -87305,6 +89035,8 @@ onlinecasinotrend.nl, 1 onlinechallenge.nl, 1 onlinecollegeessay.com, 1 onlinecosmeticsstore.tk, 1 +onlinecrafts.tk, 1 +onlinedapoxetina.gq, 1 onlinedemo.hu, 1 onlinedivorce.com, 1 onlinedoctors24.com, 1 @@ -87314,6 +89046,7 @@ onlineformatter.net, 1 onlinefurniture.us, 1 onlinegallery.cf, 1 onlinegames4free.tk, 1 +onlinegamesforgirls.tk, 1 onlinehartha.com, 1 onlinehashfollow.com, 1 onlineinfographic.com, 1 @@ -87335,6 +89068,7 @@ onlinemarketingmuscle.com, 1 onlinemarketingtraining.co.uk, 1 onlinenewspaperclassifieds.com, 1 onlinepay.tk, 1 +onlinepaydayloans365.tk, 1 onlineplay.ml, 1 onlineporno.cc, 1 onlineprogrammingbooks.com, 1 @@ -87348,29 +89082,38 @@ onlineschipaanpak.nl, 1 onlinesearningstips.ga, 1 onlineshopsatkhira.tk, 1 onlinesmsbox.com, 1 +onlinesorusor.cf, 1 onlinesports.cf, 1 onlinestoresite.com.au, 1 onlinesudoku.tk, 1 onlinesystem.jp, 1 +onlinetadacip.gq, 1 onlinetextil.cz, 1 onlineth.com, 1 onlinetrainer.co.za, 1 onlinetravelmoney.co.uk, 1 onlineunitedcountry.com, 1 +onlinevardenafil.gq, 1 onlineverdienen.tk, 1 onlinevergidanismani.com, 1 onlineviewers.tk, 1 onlinevisa.ru, 1 +onlinevoting.tk, 1 onlinewallpapers.tk, 1 onlineweblearning.com, 1 onlineworkshops.tk, 1 onlinewot.ru, 1 +onlinews.ml, 1 onlinexl.nl, 1 +onlineyearbook.tk, 1 onlineyos.ru, 1 +onlinezaim.ml, 1 onlinezonneschermen.nl, 1 only.bible, 1 only.lc, 1 only.sh, 1 +only4free.tk, 1 +onlybooks.gq, 1 onlycrumbsremain.com, 1 onlyesb.net, 1 onlyfans.com, 1 @@ -87378,12 +89121,15 @@ onlyfitgear.com, 1 onlyhunters.org, 1 onlyincentivesest.ga, 1 onlyjesus.net, 1 +onlylithiumhere.gq, 1 +onlylovastatin.gq, 1 onlymammoths.com, 1 onlysim.nl, 1 onlysmoker.com, 1 onlystars.news, 1 onlystay.ga, 1 onlyu.eu, 1 +onlyveg.tk, 1 onlyvintagewatches.com, 1 onmaps.de, 1 onmarketbookbuilds.com, 1 @@ -87484,14 +89230,15 @@ oomnitza.com, 1 oomph-delikatessen.tk, 1 oomuj.info, 1 oonne.com, 1 +ooo-santal.ml, 1 ooo.xxx, 1 oooh.events, 1 ooonja.de, 1 ooooo.cz, 1 -ooove.ru, 1 oopsis.com, 1 oorbellen.nl, 1 oortcast.com, 1 +oositk.tk, 1 oosm.org, 1 oosolutions.nl, 1 oostendevooranker.be, 0 @@ -87499,11 +89246,13 @@ oostenrijkautohuur.nl, 1 op11.co.uk, 0 op3racional.eu, 1 op3y.com, 1 +opaco.tk, 1 opadaily.com, 1 opale-concept.com, 1 opalesurfcasting.net, 1 opalhunter.at, 1 opalternative.tk, 1 +oparamo.tk, 1 oparideal.com.br, 1 oparl.org, 1 opatowice.tk, 1 @@ -87554,10 +89303,12 @@ openbook.net, 1 openbriefing.org, 1 openbsd.cz, 1 openbsdhosting.com, 1 +openbusiness.tk, 1 opencache.uk, 1 opencartbot.com, 1 openchronicles.net, 1 opencircuit.nl, 1 +opencity.spb.ru, 1 openclima.com, 1 openclub24.ru, 1 opencom.hu, 1 @@ -87590,6 +89341,7 @@ openlitecache.com, 1 openmail.ml, 1 openmarkets.com.au, 1 openmarkets.group, 1 +openmind.ga, 1 openmindsec.com, 1 openmindsec.de, 1 openmirrors.cf, 1 @@ -87598,9 +89350,9 @@ openmtbmap.org, 1 opennet.fund, 1 opennippon.com, 1 opennippon.ru, 1 -openpictures.ch, 1 openpolicing.org, 1 openproject.com, 1 +openproton.cf, 1 openprovider.nl, 0 openqnx.com, 1 openquery.com.au, 1 @@ -87621,12 +89373,14 @@ openscience.ml, 1 openscreen.lu, 1 opensecurity.in, 1 opensim.tk, 1 +openslava.tk, 1 opensource-cms.nl, 1 opensource-training.de, 1 opensource.fund, 1 opensourcecombat.com, 1 opensourcesoftware.rocks, 1 opensourcesurvey.org, 1 +opensourcex.tk, 1 openspa.webhop.info, 1 openspot.tk, 1 openssl.org, 1 @@ -87651,6 +89405,7 @@ operacionlimpieza.com, 1 operad.fr, 1 operadotejo.org, 1 operanavigation.ro, 1 +operatic.gq, 1 operationforever.com, 1 operationkiwi.work, 1 operationlifeline.ca, 1 @@ -87682,22 +89437,29 @@ opioids.co.uk, 1 opioids.com, 1 opioids.gov, 1 opioneers.ga, 1 +opioneers.tk, 1 opiskelijaradio.com, 1 opiskelijaradio.fi, 1 +opisrael.tk, 1 opium.io, 0 opix.fr, 1 opl.bz, 1 oplane.io, 1 +oplata-mvd.ga, 1 +oplata-vklike.tk, 1 oplata.uz, 1 oplatki-charistia.pl, 1 oplop.appspot.com, 1 opm.gov, 1 opnx.dk, 1 opop.cz, 1 +opopulechki.tk, 1 oportunidadeganhos.tk, 1 oportunidadinfinita.tk, 1 +opos.cf, 1 oposicionescastillayleon.com, 1 oposicionescorreos.es, 1 +oposicionesprofesores.tk, 1 opp.moe, 1 oppabet.com, 1 oppada.com, 1 @@ -87762,12 +89524,14 @@ optimale.co.uk, 1 optimalrehab.se, 1 optimaner.pl, 1 optimausa.com, 1 +optimed.tk, 1 optimised.cloud, 1 optimised.io, 1 optimisedlabs.co.uk, 1 optimisedlabs.info, 1 optimisedlabs.net, 1 optimisedlabs.uk, 1 +optimism.ru, 1 optimist.bg, 1 optimizationanalyticsest.ga, 1 optimize-jpeg.com, 1 @@ -87793,6 +89557,7 @@ optique-morice.com, 1 optiqueh.ca, 1 optiqueh.com, 1 optischmopti.de, 1 +optisell.ga, 1 optmos.at, 1 optogenics.com, 1 optomaeurope.com, 1 @@ -87829,6 +89594,7 @@ oracolo.tk, 1 oraklinika.tk, 1 oraldigital.com.br, 1 oralemiraza.com, 1 +oralight.ml, 1 orang-utans.com, 1 orangeacademy.cz, 1 orangecityfl.gov, 1 @@ -87840,10 +89606,12 @@ orangelandgaming.com, 1 orangenj.gov, 1 orangenuts.in, 1 orangepages.ga, 1 +orangerock.tk, 1 orangeshop.ee, 1 orangesquash.org.uk, 0 orangesquirrelevents.co.uk, 1 orangetexas.gov, 1 +orangtua.tk, 1 orangutan.org, 1 oranjee.net, 0 oranjerie.tk, 1 @@ -87858,6 +89626,7 @@ orbesurgeons.com.au, 1 orbik.com, 1 orbit.church, 1 orbitabaja.com, 1 +orbitaclub.cf, 1 orbital3.com, 1 orbitcleaning.com.au, 1 orbitdefence.co.uk, 1 @@ -87872,10 +89641,12 @@ orca.pet, 0 orcada.co, 1 orcahq.com, 1 orcamais.com.br, 1 +orcamarine.tk, 1 orcas.tk, 1 orcawiki.nl, 1 orchardnh.org, 1 orchestra-ppm.io, 1 +orchestra.tk, 1 orchestredechambredulanguedoc.com, 1 orchidee-mariage.com, 1 orchidee-massage.tk, 1 @@ -87898,6 +89669,8 @@ order-of-hope.com, 1 order-tools.io, 1 order.catering, 1 order.online, 1 +ordercipro.gq, 1 +orderdiflucan.ga, 1 orderessay.net, 1 ordermore.cloud, 1 ordermygear.com, 1 @@ -87905,6 +89678,7 @@ orderomnicef.gq, 1 orderpizza.tk, 1 orderseason.digital, 1 orderteethest.ga, 1 +ordervaltrexonlines.ga, 1 ordevanoranjenassau.nl, 1 ordigame.com, 1 ordilo.org, 1 @@ -87921,9 +89695,12 @@ oregon2020census.gov, 1 oregonenergysaver.com, 1 oregonmenshealth.com, 1 oreka.online, 1 +orel-city.ml, 1 orel-sait.tk, 1 orel.ga, 1 orelblog.tk, 1 +orelnet.tk, 1 +orenburg-life.tk, 1 orendamebliv.com.ua, 1 orendatattoo.bg, 1 orenohatake.com, 1 @@ -87941,6 +89718,7 @@ orf-kartentausch.at, 0 orfelios.com, 1 orfeo-engineering.ch, 1 orfininumeister.it, 1 +org-css.tk, 1 organaqsis.com, 1 organdonor.gov, 1 organica.co.za, 1 @@ -87949,6 +89727,7 @@ organicappraisalers.ga, 1 organicindiausa.com, 1 organicossuliani.com.br, 1 organicpoint.in, 1 +organicrootsfestival.tk, 1 organicseo4u.com, 1 organictanningest.ga, 1 organisatieteam.nl, 1 @@ -87970,6 +89749,9 @@ oricejoc.com, 0 orido.org, 1 oriental-events.net, 1 orientalart.nl, 1 +orientalcollege.tk, 1 +orientalcuisine.tk, 1 +orientalgadgets.tk, 1 orientaltrends.com.br, 1 orientelectronic.net, 1 orientir.tk, 1 @@ -87977,7 +89759,7 @@ orientravelmacas.com, 1 oriflakesku.com, 1 oriflamesamara.tk, 1 oriflameszepsegkozpont.hu, 1 -orifonline.ro, 1 +orifonline.ro, 0 origami.to, 1 origamiii.me, 1 origamiking.wiki, 1 @@ -88007,6 +89789,7 @@ orilon.fr, 1 orimex-mebel.ru, 1 orimono.ga, 1 oriolcarbonell.tk, 1 +orion-rentals.tk, 1 orion-universe.com, 1 orioncokolada.cz, 0 orioneclipse.com, 1 @@ -88073,11 +89856,13 @@ orthodontiste-geneve-docteur-rioux.com, 0 orthodoxy.lt, 0 orthogennix.com, 1 orthograph.ch, 1 +orthopedic-shoes.tk, 1 orthopedicsalon.tk, 1 orthotes.com, 1 orthotrafficest.ga, 1 ortigueira.ga, 1 ortizmario.com, 1 +ortocraft.tk, 1 ortoemangiato.it, 1 ortoinnovapanama.com, 1 ortop.ua, 1 @@ -88099,6 +89884,7 @@ osac.gov, 1 osacrypt.studio, 1 osagecounty-ok.gov, 1 osagenation-nsn.gov, 1 +osagokasko.ga, 1 osaka-hero-project.com, 0 osakaevoce.com.br, 1 osakagasaustralia.com.au, 1 @@ -88108,6 +89894,8 @@ osaki.fr, 1 osallistuvavantaa.fi, 1 osamabook.tk, 1 osamakhalid.com, 1 +osamatoon.ml, 1 +osankj.tk, 1 osano.com, 1 osateam.tk, 1 osau.com, 1 @@ -88124,6 +89912,8 @@ osburn.com, 1 osc.gov, 1 oscar.ms, 1 oscarmartinez.tk, 1 +oscars-web.tk, 1 +oscarsalas.tk, 1 oscarspatiobar.com, 1 oscarvk.ch, 1 osceolacountyfl.gov, 1 @@ -88141,10 +89931,13 @@ oseido.tk, 1 osepideasthatwork.org, 1 osereso.tn, 1 oses.mobi, 1 +osetia.tk, 1 +osetinskie-pirogi.ga, 1 +osetiya.gq, 1 +osetiya.ml, 1 osez-l-odyssee.fr, 1 osgroup.tk, 1 oshayr.com, 1 -oshea.cc, 1 oshens.com, 1 oshkibeginnings.org, 1 osholife.tk, 1 @@ -88180,6 +89973,7 @@ osmosis.org, 1 osmt.cc, 1 osnova.cz, 1 osobniterapeutka.cz, 1 +osobnyak.tk, 1 osolutionscorp.com, 1 osom.finance, 1 osomagicmountain.com, 1 @@ -88230,11 +90024,13 @@ ostrov8.com, 1 ostrovseocitra.cf, 1 ostrovseocitra.ga, 1 ostrovseocitra.gq, 1 +ostrovseocitra.ml, 1 ostylelimo.com, 1 osuarez3.com, 1 osuszanie-krakow.pl, 1 osuszanie-radom.pl, 1 osuszanie-warszawa.pl, 1 +osvaldocontreras.tk, 1 osveld.com, 1 oswaldlabs.com, 1 oswalds.co.uk, 1 @@ -88244,9 +90040,11 @@ oswegoil.gov, 1 oswegony.gov, 1 osworx.net, 1 oszri.hu, 1 +ot-vinta.tk, 1 otakaroltd.co.nz, 1 otako.pl, 0 otakubox.de, 1 +otakuie.tk, 1 otakurepublic.com, 1 otakurumi.de, 1 otakuzonefanzine.tk, 1 @@ -88255,6 +90053,7 @@ otchecker.com, 1 otd-dentalcare.com, 1 otdel16.tk, 1 otdelka76.tk, 1 +otdelochnik.tk, 1 otdih-krim.tk, 1 otdyh-v-abhazii.tk, 1 otellio.it, 1 @@ -88280,6 +90079,7 @@ otogeworks.com, 1 otokirala.com, 1 otokiralama.name.tr, 1 otoma.tk, 1 +otomania.tk, 1 otomekaito.xyz, 1 otomny.fr, 1 otomobilforumu.com, 1 @@ -88303,9 +90103,12 @@ ots.gov, 1 otsfreestyle.jp, 1 otsu.beer, 1 ottens.tk, 1 +otterpops.tk, 1 ottertailcountymn.gov, 1 otterupdate.com, 1 ottervillemo.gov, 1 +ottmarliebert.tk, 1 +ottomanbedsuk.tk, 1 ottoproject.io, 0 ottorinoferilli.com, 1 ottoversand.at, 1 @@ -88338,6 +90141,7 @@ ounage.de, 1 ouowo.gq, 1 our-box.de, 1 our-box.net, 1 +our-little-secret.tk, 1 our-store.ml, 1 ourai.ws, 1 ourayco.gov, 1 @@ -88363,7 +90167,7 @@ ourladyqueenofmartyrs.org, 1 ourlink.tk, 1 ourls.win, 0 ourmarket.live, 1 -ouroboros.world, 1 +ournewsindia.ga, 1 ourocg.cn, 1 ouronyx.com, 0 ourpharmacynetwork.com, 1 @@ -88379,6 +90183,7 @@ ourwits.com, 1 ourworldindata.org, 1 ourworldspeaks.com, 1 oust.ch, 1 +out-of-england.cf, 1 out-of-england.ga, 1 out-of-england.gq, 1 out-of-england.ml, 1 @@ -88409,6 +90214,7 @@ outdoormanufaktur.com, 0 outerface.net, 1 outerlimitsdigital.com, 1 outernet.tk, 1 +outerspace.ga, 1 outervision.com, 1 outetc.com, 1 outfaced-dancestudio.de, 1 @@ -88419,6 +90225,7 @@ outgrow.co, 1 outhwaite.com, 1 outincanberra.com.au, 1 outinnationalsecurity.org, 1 +outlaw-star.tk, 1 outletapex.com, 1 outline.ski, 1 outline.vn, 1 @@ -88461,10 +90268,13 @@ oven.media, 1 ovenapp.io, 1 ovenrepairaustin.com, 1 overa.net, 1 +overallscanners.tk, 1 overboosted.de, 1 overca.sh, 1 overcached.com, 1 +overcame.cf, 1 overcasthq.com, 1 +overclockers.ga, 1 overclockers.ge, 1 overcomers.tk, 1 overdrive-usedcars.be, 0 @@ -88479,6 +90289,7 @@ overener.us, 1 overframe.gg, 1 overgear.tk, 1 overground.tk, 1 +overheek.tk, 1 overlevers.tk, 1 overlook.tk, 1 overlord.network, 1 @@ -88487,12 +90298,14 @@ overnetfaq.tk, 1 overnetworld.tk, 1 overnightglasses.com, 1 overps.cf, 1 +overrated.ga, 1 overratedtech.com, 1 overrun.tk, 1 overs.jp, 1 oversea.com.br, 1 overseamusic.de, 1 overseasstudenthealth.com, 1 +overside.ml, 1 oversight.garden, 1 oversight.nz, 1 oversightboard.com, 1 @@ -88501,6 +90314,7 @@ overstemmen.nl, 1 overstockpromote.com, 1 overthecloud.it, 1 overthegate.tk, 1 +overtunes.tk, 1 overture.london, 1 overwall.org, 1 overwatchss.club, 1 @@ -88516,6 +90330,7 @@ oviser.ml, 1 ovisy.com, 1 ovnrain.com, 1 ovochi.tk, 1 +ovodakadarkut.tk, 1 ovpn.com, 1 ovpn.to, 1 ovuk.ru, 1 @@ -88539,6 +90354,7 @@ owlandbee.co.uk, 1 owlandbee.eu, 1 owlandbee.uk, 1 owlandrabbitgallery.com, 1 +owlazy.com, 1 owlbee.be, 1 owlbee.de, 1 owlbee.es, 1 @@ -88574,6 +90390,7 @@ owrt-risk.dedyn.io, 1 owyheecounty.gov, 1 ox.restaurant, 1 oxalato.com, 1 +oxaliz.gq, 1 oxanababy.com, 1 oxborrow.ca, 1 oxbridge.eu, 1 @@ -88590,6 +90407,8 @@ oxialive.fr, 1 oxiame.eu, 1 oxidescooters.co.uk, 1 oxidized.org, 1 +oxigenoinformatica.tk, 1 +oximedia.ga, 1 oximoron.tk, 1 oxinails.salon, 1 oxinarf.pt, 1 @@ -88606,6 +90425,7 @@ oxwebdevelopment.com.au, 1 oxxoshop.com, 0 oxydac.com, 1 oxygames.tk, 1 +oxygenated.cf, 1 oxygenforchennai.com, 1 oxygenserv.com, 1 oxygin.net, 0 @@ -88639,6 +90459,7 @@ oyungg.net, 0 oyunmadeni.tk, 1 oyunnetwork.com, 1 oyunnext.com, 1 +oyunoynuyalim.tk, 1 oz-artfocus.com, 1 oz-style.com, 1 ozarkinspected.com, 1 @@ -88646,6 +90467,7 @@ ozaukeecounty.gov, 1 ozaymotor.com, 1 ozbolt.eu, 1 ozcreatives.tech, 1 +ozel-ders.tk, 1 ozelgitardersi.tk, 1 ozelguvenlik.com.tr, 1 ozellaruck.tk, 1 @@ -88659,6 +90481,7 @@ ozone-medical.fr, 1 ozonitron.com, 1 ozonitron.de, 1 ozonitron.eu, 1 +ozonstyle.ga, 1 ozonytron.com, 1 ozonytron.de, 1 ozonytron.eu, 1 @@ -88736,7 +90559,6 @@ paarberatung-hn.de, 1 paardenhulp.nl, 1 paardensportbak.nl, 1 paarissohail.tk, 1 -paas-inf.net, 1 paaspasst.de, 1 paass.net, 0 paazmaya.fi, 1 @@ -88765,12 +90587,14 @@ pabloarteaga.science, 1 pabloarteaga.tech, 1 pabloarteaga.uk, 1 pabloarteaga.xyz, 1 +pablocamino.tk, 1 pablocelorio.com, 1 pablofain.com, 1 pablofonta.es, 1 pablomachado.tk, 1 pablomolina.tk, 1 pablomoreno.tk, 1 +pablonadiecomotu.tk, 1 pabloroblesminister.com, 1 pablosaraiva.com, 1 pabpunk.tk, 1 @@ -88786,6 +90610,7 @@ pacecounsel.com, 1 paceda.nl, 1 paceinvestmentclub.com, 1 pacelink.de, 1 +pacemakers.ml, 1 pacenterforhearingandbalance.com, 1 pachaiyappas.org, 1 pachalingo.tk, 1 @@ -88799,6 +90624,7 @@ pacificautobody.net, 1 pacificbeachpub.com, 1 pacificcashforcars.com.au, 1 pacificcoast.com, 1 +pacificcycling.ga, 1 pacificgynsurgicalgroup.com, 1 pacifichospitalists.com, 1 pacificocooler.com, 1 @@ -88863,6 +90689,7 @@ paddestoelen-encyclopedie.tk, 1 paddleshifterz.com, 1 paddy.rocks, 1 padichota.tk, 1 +padisahbilisim.tk, 1 padle.ml, 1 padmagroup.com, 1 padovaoggi.it, 1 @@ -88898,6 +90725,7 @@ pagbitcoin.com, 1 page, 1 page-audit.com, 1 page-audit.ru, 1 +page-engine.tk, 1 page-speed.ru, 1 page12.tk, 1 pageboard.fr, 1 @@ -88930,6 +90758,7 @@ paguponku.com, 1 pagure.io, 1 pagure.org, 1 pahealthbilling.com, 1 +pahira.gq, 1 pahom.gq, 1 pahrumpnv.gov, 1 paide.edu.ee, 1 @@ -88959,6 +90788,7 @@ paint4.life, 1 paintball-ljubljana.si, 1 paintball-shop.sk, 1 paintballer.co, 1 +paintbrush.ga, 1 paintcolorsbysue.com, 1 painted-designs.tk, 1 paintersgc.com.au, 1 @@ -88993,7 +90823,10 @@ pakforces.tk, 1 pakho.xyz, 1 pakingas.lt, 1 pakistan24.tk, 1 +pakistanblogger.tk, 1 +pakistanheadline.tk, 1 pakistani.dating, 1 +pakistanientertainers.ga, 1 pakistanmusic.tk, 1 pakistanpost.ga, 1 pakitakso.ee, 1 @@ -89010,6 +90843,8 @@ pakmarkas.lt, 1 pakmedia.tk, 1 paknetworking.org, 1 pakonshorelng.com, 1 +pakostane-apartments.tk, 1 +pakpak.tk, 1 pakremit.com, 1 paksui-ne.tk, 1 paktolos.net, 0 @@ -89039,6 +90874,7 @@ paleodietfoodlist.com, 1 paleodietrecipes.com, 1 paleografie.tk, 1 paleonora.tk, 1 +paleontologiadebagua.tk, 1 paleorecipepro.com, 1 paleoself.com, 1 paleoso.com, 1 @@ -89077,12 +90913,13 @@ palmedconsultants.com, 1 palmedconsultants.org, 1 palmen-apotheke.de, 1 palmfan.com, 1 +palmiye.tk, 1 palmofinfinity.tk, 1 palmoilpledge.id, 1 -palmosradio.gr, 1 palms.fitness, 1 palner.eu, 1 paloma.tk, 1 +palomalopez.tk, 1 palomardisplays.com, 1 palominorp.tk, 1 palonhs.tk, 1 @@ -89140,7 +90977,9 @@ panaxis.biz, 1 panaxis.ch, 1 panaxis.li, 1 panda-community.com, 1 +panda-craft.tk, 1 panda-lang.net, 1 +panda-life.tk, 1 panda.tf, 1 pandacbd.com, 1 pandahut.net, 1 @@ -89148,6 +90987,7 @@ pandakid.tk, 1 pandaltd.nl, 0 pandapsy.com, 1 pandascrow.io, 1 +pandelys.tk, 1 pandemicflu.gov, 1 pandit.tech, 1 pandjes.com, 1 @@ -89160,6 +91000,7 @@ pandoramutiara.id, 1 pandorarox.com, 1 pandorum.cf, 1 pandymic.com, 1 +panel-stroy.cf, 1 paneldewelopera.pl, 1 paneldoorsolutions.com, 1 paneldoorsolutions.de, 1 @@ -89167,6 +91008,7 @@ panele-fotowoltaiczne.pl, 1 paneljobsers.ga, 1 panetolikos.gr, 1 paneu.de, 1 +panezai.tk, 1 pang.ga, 1 pangea-it.com, 1 pangeaservices.com, 1 @@ -89195,9 +91037,11 @@ pannovate.com, 1 pano-guru.com, 1 pano.ie, 1 panoramacambios.com, 1 +panoramaphoto.cf, 1 panoramaresidence-moesern.at, 1 panoramica.tk, 1 panoramique.tk, 1 +panoramiquesorganya.tk, 1 panoramixbycallens.eu, 1 panoti.com, 0 panpa.ca, 1 @@ -89220,6 +91064,7 @@ pantheoncrafters.com, 1 pantherage.co.uk, 1 panthi.lk, 1 pantiesless.com, 1 +pantingly.tk, 1 pantographe.info, 0 pantou.org, 0 pants-off.xyz, 0 @@ -89229,6 +91074,7 @@ pantuflas.tk, 1 pantypit.com, 1 panzdravi.cz, 1 panzer72.ru, 1 +panzers.tk, 1 panzerscreen.dk, 1 panzerwarmodsru.tk, 1 pao.moe, 1 @@ -89294,6 +91140,7 @@ pappu.tk, 1 paprikas.fr, 1 papuzkija.pl, 1 par-allel.ru, 1 +parabellum-barakaldo.tk, 1 parabolaeditorial.com.br, 1 paraborsa.net, 1 paracels.tk, 1 @@ -89313,6 +91160,7 @@ paradiscapacitados.site, 1 paradise-engineer.com, 1 paradise-engineering.com, 1 paradise-travel.net, 1 +paradise-world.ml, 1 paradisecreekbrewery.com, 1 paradiselost.com, 0 paradisend.tk, 1 @@ -89329,12 +91177,14 @@ paragallosfino.online, 1 paragon-consult.com, 1 paragonie.com, 0 paragonremodeling.com, 0 +paragonsigns.tk, 1 paragontasarim.com, 1 paragreen.net, 1 paraguay.tk, 1 parakazanmafikirleri.com, 1 paralellesjuridiques.com, 1 parallel-creative.co.uk, 1 +parallel-worlds.tk, 1 parallelpython.com, 1 paraluman.be, 1 paramapa.com.py, 1 @@ -89392,6 +91242,7 @@ parentsintouch.co.uk, 1 parenttheirpassion.com, 1 paretoit.com, 1 paretorule.cf, 1 +parfumi.tk, 1 parfumtester-100.ml, 1 parhelionaerospace.com, 1 pari-vinci.org, 1 @@ -89448,7 +91299,6 @@ parkers.ml, 1 parkers.tk, 1 parketsn.ru, 1 parkettdielen.net, 1 -parketvloerenverliefde.be, 1 parking4less.com, 0 parkinginparis.fr, 1 parkingmasters.be, 1 @@ -89477,6 +91327,7 @@ parmatoday.it, 1 parmels.com.br, 1 parmoli.tk, 1 parnassys.net, 1 +parniplus.com, 1 parnizaziteksasko.cz, 1 parodesigns.com, 1 paroisses-theix-surzur.com, 1 @@ -89822,7 +91673,6 @@ paul.reviews, 1 paulahot.tk, 1 paulandmadge.com, 1 paulanet.tk, 1 -paulasilvasvensson.eu, 1 paulbaily.com, 1 paulbdelaat.nl, 1 paulborza.com, 1 @@ -90061,7 +91911,6 @@ pcchin.com, 1 pccomc.tk, 1 pcdbank.com, 1 pcdekegel.nl, 1 -pcdienstenschede.nl, 1 pcdocjim.com, 1 pcdomain.com, 1 pcdroid.ga, 1 @@ -90428,7 +92277,6 @@ pentaqu.in, 1 pentaquin.com, 1 pentaquin.net, 1 pentatonik.tk, 1 -pentekdograma.com, 1 pentest.blog, 1 pentesterlab.com, 1 pentestit.com, 1 @@ -90545,7 +92393,7 @@ perfectsmilesdentistry.net, 1 perfectsnap.co.uk, 1 perfectsoft.tk, 1 perfectweb.today, 1 -perfei.com, 1 +perfei.com, 0 perfekt-style.com, 1 perfektesgewicht.com, 1 perferxprecision.com, 1 @@ -90639,6 +92487,7 @@ perrycountytn.gov, 1 perryvilleky.gov, 1 pers-hr.tk, 1 perscore.tk, 1 +perseo.tk, 1 persephone.gr, 1 persey.tk, 1 persian-clan.tk, 1 @@ -90972,7 +92821,6 @@ pgmtechnologies.com, 1 pgnetwork.net, 1 pgp.fail, 1 pgp.lol, 1 -pgp.network, 1 pgp.org.au, 1 pgpaintanddesign.com, 1 pgpmail.cc, 1 @@ -91081,6 +92929,7 @@ phil-phillies.com, 1 phil.red, 1 phil.tw, 1 philanima.com, 1 +phildevient.tk, 1 phildonaldson.com, 1 phileas-psychiatrie.be, 1 philia-sa.com, 0 @@ -91219,6 +93068,7 @@ photoblock.tk, 1 photobooth-romania.ro, 1 photobooth.id, 1 photobyzachary.tk, 1 +photoclothing.tk, 1 photocode.co.rs, 1 photoconferenceers.ga, 1 photoconferenceest.ga, 1 @@ -91514,7 +93364,6 @@ pigfox.com, 0 pigop.com, 1 pigslv.com, 1 pigzilla.co, 1 -pihaar.de, 1 pii.bz, 1 pijamasbichopreguica.com.br, 1 pijuice.com, 1 @@ -91562,6 +93411,7 @@ pilotcareercenter.com, 1 pilotgrowth.com, 1 pilotknobmo.gov, 1 pilotpov.com, 1 +pilotproject.tk, 1 pilotshop.com, 1 pilsen.fun, 1 pilvi.pw, 1 @@ -91736,6 +93586,7 @@ pirate-proxy.pw, 1 pirate.gq, 0 piraten-basel.ch, 1 piraten-kleinbasel.ch, 1 +piraten-recording.tk, 1 piratenlogin.de, 0 pirateparty.org.uk, 1 piratepay.io, 0 @@ -91769,7 +93620,6 @@ pirxpilot.me, 1 pisaggni.ch, 1 pisanpeikot.tk, 1 pisatoday.it, 1 -piscesdwarf.com, 1 piscestrade.com, 1 piscine.roma.it, 1 piseach.be, 1 @@ -92180,6 +94030,7 @@ play3niu66.com, 1 play3niu68.com, 1 play3niu8.com, 1 play3niu88.com, 1 +playabalares.ga, 1 playandwin.co.uk, 1 playanka.com, 1 playapex.cn, 1 @@ -92652,6 +94503,7 @@ poemwall.ml, 1 poemwallers.ga, 1 poemwallest.ga, 1 poenhub.xyz, 1 +poetasmenores.tk, 1 poeticplanetimagery.com, 1 poetics.tk, 1 poetry.ge, 1 @@ -92661,9 +94513,10 @@ poezja.com.pl, 1 poezjagala.pl, 1 poffenhouse.ddns.net, 0 pogera.com, 0 +pogljad-brest.tk, 1 +pogodavolgograd.tk, 1 pogodok.tk, 1 pogomate.com, 1 -pogoswine.com, 1 pogotowie-komputerowe.tk, 1 pogotowiekomputeroweolsztyn.pl, 1 pogrebisky.net, 1 @@ -92672,6 +94525,7 @@ pohica.com, 1 pohlmann.io, 1 pohoron.ru, 1 poi-radary.eu, 1 +poimel.ga, 1 poimenidou.eu, 1 poimenidou.gr, 1 poimenidou.info, 1 @@ -92688,6 +94542,7 @@ pointforwardinc.net, 1 pointhost.de, 1 pointiswunderland.de, 1 pointmaquininha.com, 0 +pointpalace.tk, 1 pointpleasantbeachnj.gov, 1 points-pote.com, 1 points4unitedway.com, 1 @@ -92697,7 +94552,13 @@ pointzip.cf, 1 pointzipers.ga, 1 pointzipest.ga, 1 poiru.net, 1 +poisk-books.ml, 1 poisk.kharkov.ua, 1 +poiskdru.ga, 1 +poiskkladov.tk, 1 +poiskrus.ml, 1 +poisoncolombia.tk, 1 +poisonget-rid-ofac.tk, 1 poitiers-ttacc-86.eu.org, 1 pojer.me, 1 pokalsocial.de, 1 @@ -92707,11 +94568,14 @@ pokedexer.com, 1 pokefarm.com, 1 pokeforest.io, 1 pokeinthe.io, 1 +pokelens.tk, 1 pokeli.de, 1 pokemmo.com, 1 pokemmo.eu, 1 pokemonargentina.tk, 1 pokemondb.net, 1 +pokemonforums.tk, 1 +pokemongoclub.tk, 1 pokemongosearch.com, 1 pokemongostatus.org, 1 pokemonguide.tk, 1 @@ -92764,7 +94628,9 @@ pokl.cz, 1 pokoiki.pl, 1 pokpok.tk, 1 pokrowcecardo.pl, 1 +pokupkionline.tk, 1 polaire.org, 1 +polak-import.tk, 1 polanda.com, 1 polandb2b.directory, 1 polandtownship.gov, 1 @@ -92781,6 +94647,7 @@ pole.net.nz, 1 poleartschool.com, 0 poleasingowy.net, 1 polebarn.com, 1 +polemik.tk, 1 polenautohuur.nl, 1 polerka.tk, 1 polestar.com.tw, 1 @@ -92801,6 +94668,7 @@ polifisio.com.br, 1 poliground.com, 1 polimer39.ml, 1 polimur.com, 1 +polina-gagarina.gq, 1 polinet.de, 1 polioptics.com, 1 polis.or.at, 1 @@ -92832,6 +94700,7 @@ politeka.net, 1 politex.tk, 1 politic.org.ua, 1 political-science-schools.com, 1 +politicalasylum.tk, 1 politicalscore101.com, 1 politicaprivacidade.com, 1 politiciancompare.com, 1 @@ -92922,6 +94791,7 @@ pomocallegro.info, 1 pomockypredeti.sk, 1 pomocniczy.eu.org, 1 pomogi-mne.tk, 1 +pomogidrugu.tk, 1 pomogite.ml, 1 pomonaca.gov, 1 pomorskibereg.ml, 1 @@ -92965,6 +94835,7 @@ ponydesignclub.nl, 1 ponyfoo.com, 1 ponyhof-muensterland.de, 1 ponytail.fr, 1 +poobert.tk, 1 poochpark.tk, 1 poodleassassin.com, 1 poodlefan.net, 1 @@ -93006,6 +94877,7 @@ popecountymn.gov, 1 popeducation.ga, 1 popfitclothing.com, 1 popflow.cf, 1 +popflow.gq, 1 popines.tk, 1 popinga.es, 1 popinga.it, 1 @@ -93017,8 +94889,11 @@ popka.sk, 1 popki.tk, 1 popkins.cf, 1 popkins.ga, 1 +popkins.gq, 1 popkins.ml, 1 +popkins.tk, 1 poplargrove-il.gov, 1 +poplavok77.tk, 1 poplite.xyz, 1 popmagz.com, 1 popmundoforum.tk, 1 @@ -93030,16 +94905,18 @@ popoway9.ml, 1 poppersareus.com, 1 poppersy.ml, 1 poppersy.tk, 1 +poppingdance.tk, 1 poppinsholidays.com, 1 poppinspayroll.com, 1 poppsylvie.com, 1 poppylala.com, 1 poprostuakwarystyka.pl, 1 -poprumor.com, 1 poptattoo.tk, 1 poptavka.net, 1 +popular-male-kitten-names.tk, 1 popularcar.com, 1 popularculturegaming.tk, 1 +populardiets.tk, 1 populardogs.ga, 1 populardogs.ml, 1 popularhairstyles.org, 1 @@ -93074,12 +94951,15 @@ porcelanosamallorca.com, 1 porchdaydreamer.com, 1 porcore.com, 1 porelcorazon.com, 1 +porelsam.ml, 1 porevo.tk, 1 porg.es, 1 poriadok.eu, 1 porinnuotiopojat.tk, 1 pork.org.uk, 1 +porka.gq, 1 porkbun.com, 1 +porkmart.ga, 1 porkpiesonline.co.nz, 1 porlote.com, 1 porm.club, 1 @@ -93131,7 +95011,6 @@ pornogo.tube, 1 pornohypnosis.tk, 1 pornojimo.com, 1 pornokran.com, 1 -pornolab.su, 1 pornomens.be, 1 pornomovies.mobi, 1 pornomovieshd.com, 1 @@ -93169,16 +95048,20 @@ port5060.net, 1 port67.org, 1 port80.hamburg, 0 portable-games.tk, 1 +portablespeakers.tk, 1 portablespeakersfinder.com, 1 portafoliodenegocios.com.mx, 1 portagecounty-oh.gov, 1 portagein.gov, 1 portail-partenariats.fr, 1 portail-rh.fr, 1 +portal-books.ga, 1 portal-ekologia.pl, 1 portal-news.tk, 1 +portal-ru.tk, 1 portal-uang.com, 1 portal.tirol.gv.at, 0 +portaladictos.tk, 1 portalcarriers.com, 1 portalchega.pt, 1 portaldamizade.com, 1 @@ -93188,6 +95071,7 @@ portaleldense.tk, 1 portalexpressservices.com, 1 portalm.tk, 1 portalmundo.xyz, 1 +portalpandalandia.tk, 1 portalplatform.net, 0 portalsmdc.com, 1 portalutil.com.br, 1 @@ -93216,6 +95100,7 @@ portofala.pt, 1 portofedmonds.gov, 1 portofephrata.gov, 1 portofnenana.gov, 1 +portokalliali.tk, 1 portonfus.com, 1 portorchardwa.gov, 1 portosonline.pl, 1 @@ -93232,6 +95117,7 @@ portsona.com, 1 portugal-a-programar.org, 1 portugal-a-programar.pt, 1 portugalbycar.com, 1 +portugalivre.tk, 1 portugalsko.net, 1 portugalsurflessons.com, 1 portusidades.com.pt, 1 @@ -93254,11 +95140,13 @@ poseidonwaterproofing.org, 1 poseidonworld.tk, 1 posh.tech, 1 poshcastles.co.uk, 1 +poshe.tk, 1 poshlashes.se, 1 poshmark.com, 1 poshsecurity.com, 1 poshvine.com, 1 posicionament.tk, 1 +posied.ga, 1 posijson.stream, 1 positionus.io, 1 positivastudios.tk, 1 @@ -93280,9 +95168,11 @@ posoco.in, 1 posowetuite.ru, 1 pospisilik.eu, 1 pospisilikovi.cz, 1 +post-anon.tk, 1 post-darwinian.com, 1 post-darwinism.com, 1 post-health.net, 1 +post-office.tk, 1 post-victoria.com, 1 post.com.ar, 1 post.io, 1 @@ -93341,11 +95231,14 @@ postimages.org, 1 postimg.cc, 1 postlifepreps.com, 1 postlogistic.tk, 1 +postman.ga, 1 +postmarka.tk, 1 postmaster.boats, 1 postmatescode.com, 1 postmerkezi.tk, 1 postmistress.email, 1 postmoderns.info, 1 +postmusicologia.tk, 1 postn.eu, 1 postnext.com, 1 postolia.cf, 1 @@ -93366,6 +95259,7 @@ posturography.training, 1 posturologie.info, 1 posturologo.roma.it, 1 posukovskaschola.cz, 1 +posutochno.ml, 1 posutochno.tk, 1 posvq.de, 1 potatiz.com, 1 @@ -93395,12 +95289,15 @@ pothuarivu.tk, 1 potion.ai, 1 potionlabs.de, 1 potlytics.com, 1 +potolok-brest.tk, 1 potolok.am, 1 potomac.cf, 1 potomacurology.com, 1 potomania.cz, 1 +potosi-bolivia.tk, 1 potosivlgwi.gov, 1 potosiwi.gov, 1 +potrahushki.tk, 1 potreningu.pl, 1 potrillionaires.com, 1 potsandplanters.com.au, 1 @@ -93409,16 +95306,21 @@ pottawatomiecountyok.gov, 1 pottcountyks.gov, 1 potteranderson.com, 1 potterish.com, 0 +potterperfect.tk, 1 +pottershouse.tk, 1 +potterybroker.ga, 1 pottshome.co.uk, 1 pottsvillepa.gov, 1 potty.party, 1 potvorka.tk, 1 potwin.tk, 1 potworowski.de, 1 +potz.tk, 1 pouchulu.tk, 1 poudlard.fr, 1 pouets.ovh, 1 poulade-design.com, 1 +poun.tk, 1 poundgatepark.co.uk, 1 poupardinheiro.com.br, 1 poupee.me, 1 @@ -93429,6 +95331,7 @@ pousadamaremata.com.br, 1 pouwels-oss.nl, 1 povar.ru, 1 povarenok.cf, 1 +povareshka.tk, 1 povmacrostabiliteit.nl, 1 povomo.online, 1 pow.jp, 1 @@ -93444,6 +95347,7 @@ powderspraymachine.com, 1 powelljones.co.uk, 1 power-coonies.de, 1 power-flowengineer.com, 1 +power-magnetic.ml, 1 power-of-interest.com, 1 power-tools24.com, 1 power2prevent.gov, 1 @@ -93451,6 +95355,8 @@ poweramazon.tk, 1 poweranalitica.com, 1 powerapp.nl, 1 powerb.ch, 1 +powerbalance.tk, 1 +powerball.cf, 1 powerball.club, 1 powerbi.istanbul, 1 powerbux.tk, 1 @@ -93460,11 +95366,13 @@ powercomputers.nl, 1 poweredbyiris.nl, 1 powerentertainment.tv, 1 powerfiler.com, 1 +powerforpeople.tk, 1 powerfortunes.com, 1 powergridess.com, 0 powergroup.tk, 1 powerhousegym.co, 1 powerinboxperformance.com, 1 +powerlifting.tk, 1 powermeter.at, 1 powernw.com, 1 powerofsocialtech.com, 1 @@ -93515,6 +95423,7 @@ powershellmagic.com, 1 powersolusa.com, 1 powerspeaking.com, 1 powersport.lt, 1 +powersubmitter.tk, 1 powersurgedatasystems.com, 1 powertecno.ml, 1 powertoolsrater.net, 1 @@ -93528,6 +95437,7 @@ powerwheels.tk, 1 powerzonewrestling.tk, 1 poylabo.com, 1 poynter.net, 1 +pozarevac.tk, 1 pozd.tk, 1 pozdravlyalka.gq, 1 pozemedicale.org, 1 @@ -93535,11 +95445,13 @@ pozharnyi.tk, 1 pozitiffchik.ga, 1 pozitiffchik.ml, 1 pozitiffchik.tk, 1 +pozitiv.gq, 1 pozitone.com, 1 poziworld.com, 1 poznaj-siebie.pl, 1 poznajrynek.pl, 1 poznannoe-nepoznannoe.ru, 1 +poznavatelno.ml, 1 pozzitiv.ro, 1 pp3345.net, 1 pp5197.co, 1 @@ -93613,11 +95525,12 @@ praemoveo.net, 1 praeparation-keppner.de, 1 praetzlich-hamburg.de, 1 pragatiparasguesthouse.co.in, 1 +prageeth-niranjan.tk, 1 pragma-messenger.ch, 1 -pragma-solution.com, 1 pragmatist.nl, 1 pragrimsby.co.uk, 1 pragser-tal.net, 1 +pragtravel.cf, 1 prague-swim.cz, 1 praguepsychology.com, 1 praguepsychology.cz, 1 @@ -93649,6 +95562,7 @@ pranita-schals.de, 1 pranita.cz, 1 pranita.sk, 1 prankawards.ga, 1 +pranksearch.ml, 1 prankstercompany.com, 1 prashantcafe.tk, 1 prasinoscomputers.ml, 1 @@ -93658,7 +95572,6 @@ prateep.io, 1 pratelloshop.tk, 1 pratemarkets.com, 1 praticienmedecinechinoise.be, 1 -pratikorganizasyon.com, 1 pratiquefitness.com.br, 1 prato-allo-stelvio.org, 1 pratopronto.org, 1 @@ -93667,9 +95580,12 @@ pratosirunin.ga, 1 pravac.de, 1 pravagolosa.cf, 1 pravagolosa.ga, 1 +pravagolosa.gq, 1 praveenawstest1.tk, 1 praveenravichandran.xyz, 1 +pravlife.ru, 1 pravnisistem.rs, 1 +pravo-brest-belarus.tk, 1 pravo911.tk, 1 pravokonsul.com.ua, 1 prawnikdlaanglii.co.uk, 1 @@ -93685,11 +95601,15 @@ praxis-waedicity.ch, 1 praxisbiel.de, 1 praxisfilms.org, 1 praxistipp24.com, 1 +prayag.tk, 1 prayerrequest.com, 1 prayum.com, 1 +prazdnik-volgodonsk.tk, 1 prazdniki-sait.tk, 1 +prazdniktost.tk, 1 prazeremamamentar.com.br, 1 prc.gov, 1 +prcarrier.tk, 1 prcsurvey.com, 1 prdashboard.tk, 1 pre-commit.ci, 1 @@ -93700,6 +95620,7 @@ precedencemedia.com, 1 precedenceum.com, 1 precept.uk.com, 1 preci0.com, 1 +preciadictos.tk, 1 preciofishbone.com, 1 preciofishbone.de, 1 preciofishbone.dk, 1 @@ -93729,13 +95650,18 @@ precisionvaccinations.com, 1 precutppf.store, 1 predalco.be, 1 predatoria.tk, 1 +predatorworld.tk, 1 predckazanie.ru, 1 predication.ch, 1 predilife.com, 1 predkosci.pl, 1 predmetnyj-fotograf.by, 1 +prednisolone1.gq, 1 predoiu.ro, 1 +predskazanie.cf, 1 +predskazanie.ml, 1 predskazanie.tk, 1 +predstavitelstvo-v-sude.tk, 1 preejaculation.ga, 1 prefabricadosdelcaribe.com, 1 prefabrik-ev.com, 1 @@ -93743,6 +95669,7 @@ preferredathlete.com, 1 preferredreverse.com, 1 prefix.eu, 1 prefontaine.name, 1 +pregen.tk, 1 pregnancytips.tk, 1 preguntasdeciudadania.com, 1 preguntasmasfrecuentes.com, 1 @@ -93756,6 +95683,7 @@ preissler.co.uk, 0 prek.se, 1 prekladyher.eu, 1 prekladysanca.cz, 1 +prelesti.tk, 1 prelist.org, 1 preloaded-hsts.badssl.com, 1 prelogica.com.br, 1 @@ -93780,6 +95708,7 @@ premierdisco.co.uk, 1 premieresloges.ca, 0 premierevents.ie, 1 premierheart.com, 1 +premierleague.gq, 1 premiermortgageservices.com, 1 premierokchomebuyers.com, 1 premierpups.com, 1 @@ -93796,6 +95725,7 @@ premiumcbd.cz, 1 premiumcredit.am, 1 premiumdesign.hr, 1 premiumimmoneuf.com, 1 +premiumlegalsupport.ga, 1 premiumpaymentmanager.com, 1 premiumpeaches.com, 1 premiumpictureframing.com, 1 @@ -93824,10 +95754,13 @@ prepedia.org, 1 prepfba.com, 1 preppertactics.com, 1 preprodfan.gov, 1 +prepscouts.tk, 1 +prepsiedy.cf, 1 presail.com, 1 presbee.com, 1 presbvm.org, 1 presbyterian-colleges.com, 1 +preschoole.gq, 1 presdesdunes.com, 1 presence-relation.fr, 0 presenciainternet.com, 1 @@ -93852,6 +95785,7 @@ presidio.gov, 1 presidiotunneltops.gov, 1 presly.org, 1 presnetter.de, 1 +presnya.tk, 1 presov.ml, 1 press-edge.tk, 1 press-presse.ca, 1 @@ -93903,6 +95837,7 @@ prestonapp.com, 1 prestonbrant.com, 1 prestopizzas63.fr, 1 prestudenta.sk, 1 +prestupniki.tk, 1 pretabelamodas.com.br, 1 pretalx.com, 1 prethost.com, 1 @@ -93911,6 +95846,7 @@ pretor-sa.com, 1 prettier.fun, 1 pretty-liars.tk, 1 pretty.hu, 1 +prettycities.ga, 1 prettycloud.net, 1 prettycloud.org, 1 prettycobs.com, 1 @@ -93987,6 +95923,7 @@ primarysector.space, 1 primates.com, 1 primaveradesign.com.br, 1 primbit.ru, 1 +prime-host.ml, 1 prime42.net, 1 primeauconsultinggroup.com, 1 primecursos.com.br, 1 @@ -94009,6 +95946,7 @@ primetechpa.com, 1 primetimepokerparties.com, 1 primeview.com, 1 primglaz.ru, 1 +primitiv.tk, 1 primitivehuman.com, 1 primordialsnooze.com, 1 primorus.lt, 1 @@ -94020,12 +95958,15 @@ princebazawule.com, 1 princedavidlodge.org.uk, 1 princelishan.com, 1 princelishan.com.tw, 1 +princemathew.tk, 1 +princemolak.ga, 1 princes-st.org.nz, 1 princess-vip-escort.com, 1 princess.software, 1 princessbackpack.de, 1 princesscarly.com, 0 princessefoulard.com, 1 +princesspawg.tk, 1 princetonnassaupediatrics.com, 1 princetonradiationoncology.com, 1 princevikal.cf, 1 @@ -94043,6 +95984,7 @@ principia-online.de, 1 princovi.cz, 1 prinesec.com, 1 prinice.org, 1 +print-street.tk, 1 print.dk, 1 printbase.cz, 1 printbigjournal.tk, 1 @@ -94062,6 +96004,8 @@ printler.com, 1 printmet.com, 1 printmet.ru, 1 printmijn3dmodel.be, 1 +printmydesigns.ml, 1 +printpoint.tk, 1 printrr.ca, 1 printshopbd.com, 1 printus.pro, 1 @@ -94103,6 +96047,7 @@ prisonerresource.com, 1 pristinegrace.org, 1 pristinepotty.com, 1 prisync.com, 1 +pritchi.tk, 1 priv.gc.ca, 1 priv.im, 1 priv.moe, 1 @@ -94124,6 +96069,7 @@ privacychick.io, 1 privacycloud.nl, 1 privacydesign.ch, 1 privacyend.com, 1 +privacyget.tk, 1 privacyinternational.org, 1 privacymanatee.com, 1 privacynow.eu, 1 @@ -94182,6 +96128,7 @@ priveadressen.tk, 1 privelust.nl, 1 priverify.com, 1 privilegevisa.fr, 1 +privorot.cf, 1 privu.me, 1 privw.com, 1 privy-staging.com, 1 @@ -94207,6 +96154,8 @@ pro-esb.net, 1 pro-furgoleros.tk, 1 pro-ing.com, 0 pro-israel.tk, 1 +pro-kemerovo.ml, 1 +pro-kolhoz.tk, 1 pro-laser.com, 1 pro-lq.at, 1 pro-lq.ch, 1 @@ -94229,6 +96178,7 @@ pro4x4.com.ua, 0 proacksecurity.com, 1 proact-it.co.uk, 1 proactive.run, 1 +proactivenews.ml, 1 proactivestructuresolutions.com, 1 proadvanced.com, 1 proagile.se, 1 @@ -94253,6 +96203,8 @@ problemstate.com, 1 problemstate.de, 1 problemstate.net, 1 problemstate.org, 1 +probonus.tk, 1 +probooks.gq, 1 procalc.be, 1 procarservices.com, 1 procarswoking.com, 1 @@ -94310,6 +96262,7 @@ producerwereld.nl, 1 productbarcodes.com, 1 productboard.com, 1 productdesignsoftware.com.au, 0 +productfurniture.ga, 1 production.vn, 1 productionscime.com, 1 productiv.com, 1 @@ -94318,6 +96271,7 @@ productivemachine.net, 1 productosdeteruel.es, 0 productosquimicosrd.com, 1 productpeo.pl, 1 +products-for-health.tk, 1 products4more.at, 1 productsafety.gov.au, 1 productsblockbuster.com, 1 @@ -94328,6 +96282,7 @@ productsonsale.com.au, 1 productum.eu, 1 productupdates.org, 1 produform.it, 1 +produkt.cf, 1 produkttest-online.com, 1 produktum.eu, 1 produra.nl, 1 @@ -94350,21 +96305,27 @@ profchristophergoh.com.sg, 1 profection.biz, 1 profession.email, 1 professionalbeautyshop.it, 1 +professionalblog.tk, 1 professionalbussines.tk, 1 +professionaleducation.tk, 1 +professionallawyer.tk, 1 professionalportfolio.ga, 1 professionalrakeback.com, 1 professions.org.ru, 1 professor-d.ga, 1 professors.ee, 1 +professorwidget.tk, 1 proficio.cz, 1 proficiodigital.com, 1 proficiodigital.sk, 1 profidea.cz, 1 +profielektrik.tk, 1 profigen.com.br, 1 profil-doors.spb.ru, 1 profile.ooo, 1 profile.tf, 1 profiles.google.com, 1 +profilewatcher.ga, 1 profilib.top, 1 profilmonline.cn, 1 profilmonline.com, 1 @@ -94374,6 +96335,7 @@ profinetz.de, 1 profinvestment.com, 1 profisee.com, 0 profiservis.info, 1 +profissionalstool.ga, 1 profit24.ml, 1 profitable-textilien.ch, 1 profitablewebprojects.com, 1 @@ -94387,22 +96349,25 @@ profmatheus.com, 1 profmetod.com, 1 proformer.io, 1 proformi.com, 1 -proforo.co, 1 profritual.ru, 1 profsaranya.com, 1 profservice.it, 1 proft.eu, 1 profumeria.roma.it, 1 +profuntime.tk, 1 profusion.io, 0 profvideo.kharkov.ua, 1 profwald.4lima.de, 1 +prog-d.tk, 1 prog-mailolder.tk, 1 prog.olsztyn.pl, 1 prog24.net, 1 +progamehackers.tk, 1 progarm.org, 1 progaudio.be, 1 progenda.be, 1 progeon.nl, 1 +proger.ga, 1 proger.ml, 1 progeste.pt, 1 progettoforme.eu, 1 @@ -94413,8 +96378,10 @@ proggersession.com, 1 proggersession.de, 1 progiscad.com, 0 proglib.io, 1 +prognozis.cf, 1 progolfjourney.com, 1 progolfnow.com, 1 +progon.cf, 1 prograce.info, 1 program-and.work, 1 programadaaninha.com.br, 1 @@ -94426,9 +96393,11 @@ programaticon.tk, 1 programer21.com, 1 programlama.tk, 1 programmaticmagic.com, 1 +programme-launch28-code854-com.ml, 1 programme-neuf-toulouse.com, 1 programmervibe.com, 1 programmes-neufs-corse.fr, 1 +programming-solutions.tk, 1 programnews.tk, 1 programsareproofs.com, 1 programtracker.net, 1 @@ -94438,9 +96407,11 @@ progresion.co, 1 progresivoptic.ro, 1 progress-linux.org, 1 progress.photos, 1 +progressive.ml, 1 progressivecfo.co.nz, 1 progressiveplanning.com, 1 progressivestreetdance.tk, 1 +progressm.tk, 1 progressnet.nl, 1 progressonderwijs.nl, 1 progressportaal.nl, 1 @@ -94449,7 +96420,9 @@ progresswww.nl, 1 progresszivnyomda.hu, 1 progrillcleaning.com, 1 progtime.net, 1 +prohelpers.tk, 1 prohibition.tk, 1 +prohost24.tk, 1 prohrcloud.com, 1 proibidoler.com, 1 proiceresurfacer.com, 1 @@ -94458,6 +96431,7 @@ proitsecurity.cl, 0 proj.org.cn, 1 proj3ct.me, 1 proj6.site, 1 +project-forum.tk, 1 project-ice.org, 1 project-merlin.co.uk, 1 project-novis.org, 1 @@ -94483,6 +96457,7 @@ projecthosting.nl, 1 projectimagine.com, 1 projectinferno.tk, 1 projectinnovation.org, 1 +projection.gq, 1 projectionpictures.com, 0 projectl1b1t1na.tk, 1 projectlarix.com, 1 @@ -94530,7 +96505,9 @@ projetootaku.net, 1 projetsvl.com, 1 prokaza.tk, 1 proklimat.pro, 1 +prolens-lankaran.tk, 1 prolinos.de, 1 +prolocofrascarolo.tk, 1 prologic.bg, 1 promajna.tk, 1 promax.nl, 1 @@ -94554,6 +96531,8 @@ prommontag.com, 1 promo-brille.at, 0 promo-brille.ch, 0 promo-brille.de, 0 +promo-code.tk, 1 +promo-kodi.tk, 1 promo.lc, 1 promobit.com.br, 1 promobo.fr, 1 @@ -94571,6 +96550,7 @@ promods.store, 1 promods.web.tr, 1 promohulp.nl, 1 promohunt.ru, 0 +promokodi.tk, 1 promolover.com, 1 promopony.com, 1 promorder.ru, 1 @@ -94578,6 +96558,7 @@ promoscuola.net, 1 promosjungle.com, 1 promosolucoes.tk, 1 promotech.pro, 1 +promoteiq.com, 1 promoterms.com.au, 1 promoteroute.com, 1 promotioncentre.co.uk, 1 @@ -94602,6 +96583,7 @@ propacquisitions.com, 1 propagandablog.de, 0 propagationtools.com, 1 propanesale.cf, 1 +propecia.ml, 1 propeld.com.au, 1 propermatches.com, 1 propershave.com, 1 @@ -94610,6 +96592,8 @@ properticons.com, 1 properties.org.il, 1 propertiesmiami.com, 1 property-catalogue.eu, 1 +property-tax.cf, 1 +property-tax.ga, 1 property-tax.gq, 1 propertyauctionaction.co.uk, 1 propertycareincorporated.com, 1 @@ -94630,16 +96614,20 @@ propertyone.mk, 1 propertyprofilereport.com, 1 propertyroad.co.uk, 1 propertysales-almeria.com, 1 +propertyselling.ga, 1 propertyupdate.com.au, 1 propertyworkshop.com, 1 prophitt.me, 1 propipesystem.com, 1 propiteer.com, 1 propiteercapitalplc.com, 1 +propolisturkiye.tk, 1 proporcer.tk, 1 proposalonline.com, 1 proposeinspain.net, 1 propr.no, 1 +propranolol.cf, 1 +propranololgeneric.ml, 1 proprietairesmaisons.fr, 1 propseller.com, 1 propshub.com, 1 @@ -94681,9 +96669,12 @@ prospreads.com, 1 prostaglandina.com, 1 prostavropol.cf, 1 prostecheat.xyz, 1 +prostitutka.cf, 1 +prostitutka.ml, 1 prostitytki-nijnevartovsk.club, 1 prosto-dengi.tk, 1 prostocash.com, 1 +prostodengi.ml, 1 prostogame.ga, 1 prostohobby.ru, 1 prostoporno.fun, 1 @@ -94696,13 +96687,18 @@ prostoporno.sexy, 1 prostoporno.video, 1 prostoporno.vip, 1 prostoporno.zone, 1 +prostor.cf, 1 prostoskidki.ml, 1 +prostozaim.ml, 1 prostye-recepty.com, 1 prosurveillancegear.com, 1 prosvet.tk, 1 prosveta1901.tk, 1 prosvita.dp.ua, 1 protaaltar.com, 1 +protanki.ml, 1 +protanki.tk, 1 +protapnews.tk, 1 proteccaocivil.com, 1 proteccaocivil.net, 1 proteccaocivil.org, 1 @@ -94715,6 +96711,7 @@ protectem.de, 1 protecti.com, 1 protection-plexi.com, 1 protection-plexi.fr, 1 +protection.ga, 1 protectionformula.com.ua, 1 protectwrap.ml, 1 protege.moi, 1 @@ -94727,6 +96724,9 @@ proteogenix.science, 1 protestantsegemeentekaag.nl, 1 protesthongkong.com, 1 proteus-eretes.nl, 1 +protez.ga, 1 +protez.ml, 1 +protez.tk, 1 protic.online, 1 protic.pt, 1 protiksana.gr, 1 @@ -94742,6 +96742,7 @@ protonmail.ch, 1 protonmail.com, 1 protonpix.com, 1 protonvpn.com, 1 +prototayl.gq, 1 prototype.bg, 1 prototypefund.de, 1 protoxin.net, 0 @@ -94758,7 +96759,11 @@ proveits.me, 0 provence-appartements.com, 0 provencemckinney.com, 1 provent.io, 1 +provera10mg.tk, 1 +proverennie-kursi.gq, 1 +proverennie-kursi.ml, 1 proverennie-kursi.tk, 1 +provereno-rabotaet.gq, 1 provereno-rabotaet.tk, 1 provide-your-image.de, 1 providence.org, 1 @@ -94779,6 +96784,7 @@ prowpcare.com, 1 prowrestlingevents.tk, 1 prox.ru, 1 proximasrl.eu, 1 +proximity.ga, 1 proximityradio.fr, 1 proximo.tk, 1 proximoconcurso.com.br, 1 @@ -94805,6 +96811,7 @@ proyectoarq.cl, 1 proyectosinelec.com, 1 proyectostep.tk, 1 prozapchast24.ru, 1 +prozorlivec.tk, 1 prpferrara.it, 1 prpr.cat, 1 prpr.cloud, 1 @@ -94821,6 +96828,7 @@ pruchovi.tk, 1 pruebapg.cl, 1 pruma.com.br, 1 pruna.org, 1 +prushka.ml, 1 pruve.it, 1 prvcy.one, 1 prvnirodinna.cz, 1 @@ -94854,6 +96862,7 @@ ps8318.com, 1 psa-travel-care.com, 1 psacertified.org, 1 psalivenews.ml, 1 +psalmer.tk, 1 psasines.pt, 1 psau.edu.sa, 1 psauthority.org.uk, 1 @@ -94878,11 +96887,13 @@ pseek.com, 1 pself.net, 1 pservicer.com.mx, 1 pseta.ru, 1 +psevdonim.ga, 1 psezalla.es, 1 psg-calw.de, 1 psge.ps, 1 pshar.ma, 1 pshostpk.com, 1 +pshweb.tk, 1 psi-tv.tk, 1 psicanalista.milano.it, 1 psici.eu, 1 @@ -94941,6 +96952,7 @@ psoppc.org, 1 psoriasischecker.com, 1 pspapershow.ga, 1 pspenvases.es, 1 +psphp.tk, 1 psplus.ml, 1 psplus.tk, 1 psreturn.com.au, 1 @@ -94961,6 +96973,7 @@ psw-training.de, 1 psw.net, 1 pswatcher.com, 1 psy-web.fr, 1 +psycenter.tk, 1 psychcare.cz, 1 psychedelia.com, 1 psychedelics.org, 1 @@ -94980,6 +96993,7 @@ psycho.space, 1 psychoactive.com, 1 psychoco.net, 0 psychologbruksela.be, 1 +psychologi.cf, 1 psychologie-hofner.at, 1 psychologischepraktijkphilips.nl, 1 psychologist.ga, 1 @@ -95037,6 +97051,7 @@ ptab2pt.ga, 1 ptal.eu, 1 ptasiepodroze.eu, 1 ptbi.org.pl, 1 +ptcbooks.gq, 1 ptcdogpark.com, 1 ptcit.com, 1 ptczone.tk, 1 @@ -95145,6 +97160,7 @@ pujd3.gq, 1 puka.edu.ee, 1 pukfalkenberg.dk, 1 pula-site.tk, 1 +pulcinella.tk, 1 puli.com.br, 1 pulinkai.eu.org, 1 pulinkai.xyz, 1 @@ -95288,6 +97304,7 @@ purrfectmembersclub.com, 1 purrfectswingers.com, 1 purroy.tk, 1 purse-les.com, 1 +pursuehappiness.tk, 1 pursuingoutdoors.com, 1 purtahan.tk, 1 purupuru-shibuya.school, 1 @@ -95313,6 +97330,7 @@ pustak.tk, 1 put.moe, 1 put.re, 1 putanaru.gq, 1 +putany.tk, 1 putasdelporno.com, 1 putasenvalencia.es, 1 putatara.net, 1 @@ -95417,6 +97435,7 @@ pycckue.tk, 1 pychef.com, 1 pycrc.org, 1 pycrypto.org, 1 +pycycle.info, 1 pydotamisa.tk, 1 pydrocsid.ml, 1 pygarage.com, 0 @@ -95986,6 +98005,7 @@ quimica.science, 1 quimsertek.com, 0 quin.md, 1 quinder.tk, 1 +quinmedia.tk, 1 quinnbet.com, 1 quinnlabs.com, 0 quinnlawcenters.com, 1 @@ -96247,6 +98267,7 @@ radiantwonder.com, 1 radiation-oncologist.gr, 1 radiationserviceswa.com.au, 1 radiatorendiscounter.nl, 1 +radicaldream.tk, 1 radicalhapa.tk, 1 radicallycanadian.com, 1 radicaloptimism.org, 1 @@ -96256,6 +98277,7 @@ radio-amezi.tk, 1 radio-angelos.tk, 1 radio-beer.tk, 1 radio-bladel.tk, 1 +radio-brest.tk, 1 radio-club.ml, 1 radio-delmare.tk, 1 radio-fly.tk, 1 @@ -96283,8 +98305,10 @@ radioar.tk, 1 radioarzua.tk, 1 radioazioni.tk, 1 radiobandung.tk, 1 +radioborges.tk, 1 radiobucarica.cf, 1 radiobunker.ru, 1 +radiocartel.tk, 1 radiocc.ddns.net, 1 radiocentrafrique.cf, 1 radiochilac.tk, 1 @@ -96302,6 +98326,7 @@ radiodarkwolf.tk, 1 radiodetali-gold.ru, 1 radiodeutsch.com, 1 radiodevrijheid.tk, 1 +radiodiagonal.tk, 1 radioduepuntozero.it, 1 radioelectronic.tk, 1 radioenam.tk, 1 @@ -96394,6 +98419,7 @@ radium.group, 1 radiumcode.com, 1 radiumone.io, 1 radiusmethod.com, 1 +radixsalon.tk, 1 radixweb.com, 1 radlina.com, 1 radnas.com, 1 @@ -96629,6 +98655,7 @@ ramsor-gaming.de, 1 ramt.tk, 1 ramtechmodular.com, 1 ramydent.no, 1 +ran-drunken.tk, 1 ran-sama.ddns.net, 1 rana.realestate, 1 rana.shop, 1 @@ -96640,7 +98667,6 @@ rancowar.com, 1 randallbollig.com, 1 randallcounty.gov, 1 randallso.gov, 1 -randburgplumber-247.co.za, 1 randburgplumbing.co.za, 1 randc.org, 1 randolf.ca, 1 @@ -96661,6 +98687,7 @@ randomforum.tk, 1 randomkoalafacts.com, 1 randompasswordgenerator.fun, 1 randomquotesapp.com, 1 +randomsearching.ml, 1 randomserver.pw, 1 randomserver.xyz, 1 randomsnapshots.tk, 1 @@ -96710,7 +98737,6 @@ ranson.com.au, 1 rantalaholcomb.tk, 1 rantamplan.tk, 1 rantanda.com, 1 -rante.com, 1 ranters.nl, 1 ranyeh.co, 1 ranyeh.com, 1 @@ -96753,10 +98779,13 @@ raps.org, 1 raptechpk.com, 1 raptorsrapture.com, 1 rapu.nz, 1 +rapwoyska.tk, 1 raqoo.jp, 1 +raquelmolinacases.tk, 1 rar.moe, 1 rarbgmirror.com, 1 rarbgproxy.com, 1 +rarece.cf, 1 raregems.io, 1 rarename.tk, 1 rarlab.com, 1 @@ -96913,6 +98942,7 @@ razakhanimazhab.tk, 1 razalabs.gr, 1 razberry.kr, 1 razborpoletov.cf, 1 +razborpoletov.ml, 1 razborpoletov.tk, 1 razborpoletovsite.cf, 1 razborpoletovsite.ga, 1 @@ -97535,6 +99565,7 @@ redsiege.com, 1 redsis.com, 1 redsolutor.gq, 1 redsquarelasvegas.com, 1 +redstarpictures.tk, 1 redstarsurf.com, 1 redstonehomekits.com, 1 redstoner.com, 1 @@ -97556,6 +99587,7 @@ redwater.co.uk, 1 redwaymu.cf, 1 redweek.com, 1 redwhey.com, 1 +redwiki.tk, 1 redwillowcountyne.gov, 1 redzonedaily.com, 1 reececustom.com, 1 @@ -97603,6 +99635,7 @@ reflecton.io, 1 refletindosaude.com.br, 1 reflets.info, 1 reflexions.co, 1 +reflexionspain.tk, 1 reflexive-engineering.com, 1 reflexive.xyz, 1 refluxogastroesofagico.ga, 1 @@ -97845,6 +99878,7 @@ relationshipsandprivatestuff.com, 1 relationsproblem.nu, 1 relatory.nl, 1 relatosypoesias.tk, 1 +relax.hn, 1 relaxcenternederland.nl, 1 relaxdata.eu, 1 relaxhavefun.com, 1 @@ -97873,7 +99907,6 @@ reliant3sixty.com, 1 reliantpropertygrpri.com, 1 relieftn.com, 1 religious-life.com, 1 -relijon.com, 1 relikt.tk, 1 relisten.nl, 1 relocatefeds.gov, 1 @@ -97935,6 +99968,7 @@ remonline.ru, 1 remont-45.tk, 1 remont-kazan.tk, 1 remont-kvartirvmoskve.ga, 1 +remont-naushnikov.tk, 1 remont-rollet-izgotovlenie.cf, 1 remont-rukami.tk, 1 remontada.net, 0 @@ -98174,6 +100208,7 @@ reroboto.org, 1 reroll.tv, 1 rerumu.com, 1 resama.eu, 1 +resanebartar.tk, 1 resbi.tk, 1 resc.la, 1 rescatec.com, 1 @@ -98315,6 +100350,7 @@ restlesslegs.tk, 1 resto-renaissance.be, 1 restomojo.tk, 1 restoran-radovce.me, 1 +restoran.cf, 1 restorationphotos.tk, 1 restorethegulf.gov, 1 restoruns.com, 1 @@ -98425,8 +100461,10 @@ reuterhall.se, 1 rev-crew.info, 1 revaio.com, 1 revalidatiekennisnet.nl, 1 +revaloriza.cf, 1 revapost.fr, 1 revayd.net, 1 +revconnect.tk, 1 revcord.com, 1 reveal-sound.com, 1 reveal11.cloud, 1 @@ -98447,6 +100485,7 @@ reverse1999.wiki, 1 reverseaustralia.com, 1 reversecanada.com, 1 reversecrucifixkm.altervista.org, 1 +reversedns.tk, 1 reverseloansolutions.com, 1 reverselookupphone.us, 1 reversemortgageguides.com, 1 @@ -98459,6 +100498,7 @@ review247.ga, 1 reviewbestseller.com, 1 reviewbrokers.online, 1 reviewchecker.nl, 1 +reviewdetector.ml, 1 reviewengin.com, 1 reviewfy.in, 0 reviewgeek.com, 1 @@ -98468,10 +100508,12 @@ reviewku.id, 1 reviewninja.net, 1 reviewpipe.com, 1 reviews.anime.my, 0 +reviewsonline.ml, 1 reviewu.ca, 1 reviquimicos.com, 1 revis-online.cf, 1 revis-online.gq, 1 +revis-online.ml, 1 revis-online.tk, 1 revisione.it, 1 revisionnotes.xyz, 1 @@ -98496,10 +100538,18 @@ revivalinhisword.com, 1 revivalprayerfellowship.com, 1 revivemoment.com, 1 reviveplumbingmelbourne.com.au, 1 +reviviendolavilla.tk, 1 revivingtheredeemed.org, 1 +revizor-online.cf, 1 +revizor-online.ga, 1 +revizor-online.gq, 1 revizor-online.tk, 1 +revizor.ml, 1 +revizoronline.tk, 1 revolution.net.nz, 1 revolutionary.tk, 1 +revolutionaryaim-vienna.tk, 1 +revolutionaryireland.cf, 1 revolutionaryireland.ga, 1 revolutionaryireland.gq, 1 revolutionaryireland.ml, 1 @@ -98507,6 +100557,7 @@ revolutionengine.tk, 1 revolutionenkommer.dk, 1 revolutionhealth.ca, 1 revolutionofbeauty.tk, 1 +revolutionofgaming.tk, 1 revolware.com, 1 revosoft.de, 1 revres.info, 1 @@ -98547,13 +100598,16 @@ rezept-planer.de, 1 rezevu.com, 1 rezidencezdanice.cz, 1 rezio.io, 0 +rezistor.tk, 1 rezka-burenie.cf, 1 rezni.cz, 1 reznik.tk, 1 rezultant.ru, 1 rezun.cloud, 1 +rf-gamer.gq, 1 rf.studio, 1 rfasafedrop.org, 1 +rfbcnet.tk, 1 rfbz.ca, 1 rfdirectory.tk, 1 rfeif.org, 1 @@ -98562,8 +100616,10 @@ rfgadvisory.com, 1 rfgadvisorywealth.com, 1 rfid-schutz.org, 1 rfn.cz, 1 +rfnews.tk, 1 rfoard.com, 1 rfodistribution.co.za, 1 +rfomega.ga, 1 rfs-zbpe.net, 1 rftoon.com, 1 rfvigo.com, 1 @@ -98574,6 +100630,7 @@ rgbinnovation.com, 1 rgbpty.com, 1 rgc.com.co, 0 rgcomportement.fr, 0 +rgdt.tk, 1 rgf.be, 1 rgfundraising.com, 1 rggraphics.mx, 1 @@ -98599,7 +100656,6 @@ rheijmans.io, 1 rheijmans.nl, 1 rheimsandcohen.ltd, 1 rhein-liebe.de, 1 -rhein-web.com, 1 rheinturm.nrw, 1 rhese.net, 1 rhetorical.ml, 0 @@ -98633,6 +100689,7 @@ rhubarb.land, 1 rhumblineadvisers.com, 1 rhwebdesigns.co.uk, 1 rhwonline.de, 1 +rhye.tk, 1 rhyme.com, 1 rhymesofreason.com, 1 rhymeswithmogul.com, 1 @@ -98646,6 +100703,7 @@ riaki.net, 1 riaktiv.tk, 1 rial.space, 1 rialto.co.nz, 1 +rian.gq, 1 riared.net, 1 riared.org, 1 riaszto-szereles.eu, 1 @@ -98659,26 +100717,28 @@ rib-ims.ch, 1 rib-ims.com, 1 rib-ims.de, 1 rib-leipzig.com, 1 +ribafs.tk, 1 ribapo.com, 1 ribccs.com, 1 ribdigital.com, 0 ribella.net, 1 riberasalines.cat, 1 -ribes.design, 0 +ribes.design, 1 ribims.de, 1 ribit4u.co.il, 1 ribmountainwi.gov, 1 +ribolov.tk, 1 ribtours.co, 1 ric-rac.org, 1 ricardojsanchez.com.ar, 1 ricardopq.com, 1 +ricardoquaresma.tk, 1 ricardotaakehb.tk, 1 ricaud.me, 1 riccardopiccioni.it, 1 riccy.org, 1 riceadvice.info, 1 ricecountymn.gov, 1 -ricettesemplicieveloci.altervista.org, 1 rich-good.com, 0 richadams.me, 1 richandsteph.co.uk, 1 @@ -98749,7 +100809,6 @@ rickhoekman.com, 1 ricki-z.com, 0 rickmakes.com, 1 rickmartensen.nl, 0 -rickroll-inside.ml, 1 rickrongen.nl, 1 rickscastles.co.uk, 1 ricksdailytips.com, 1 @@ -98781,6 +100840,7 @@ ridegravel.ch, 1 rideintaxi.com, 1 rident-estetic.ro, 1 riderchris.com, 1 +riders.ga, 1 rides-japan.jp, 1 ridetour.ru, 1 rideyourdamn.bike, 1 @@ -98804,6 +100864,7 @@ riffable.com, 1 riffnation.tk, 1 riffreporter.de, 0 rift.pictures, 1 +rifugioselvabella.tk, 1 rigabeerbike.com, 1 rigabeerbike.lv, 1 rigart-michael.be, 1 @@ -98813,6 +100874,7 @@ riggosrag.com, 1 riggsmarkham.com, 1 righettod.eu, 1 righini.ch, 0 +rightblog.tk, 1 rightbraingroup.com, 1 rightducks.com, 1 rightfold.io, 1 @@ -98904,6 +100966,7 @@ riostones.com, 1 riovizela.pt, 1 rip-sport.cz, 1 rip.ie, 1 +ripadores.tk, 1 ripaton.fr, 1 ripcityproject.com, 1 ripcorddesign.com, 1 @@ -98934,6 +100997,7 @@ risalatconsultants.com, 1 riscascape.net, 1 risco.ro, 1 riscone.info, 1 +riscoshardware.tk, 1 rise-technologies.com, 1 rise.africa, 1 rise.com, 1 @@ -98974,6 +101038,7 @@ ristrutturazione.roma.it, 1 ristrutturazioneappartamenti.milano.it, 1 ristrutturazioneappartamento.roma.it, 1 ristrutturazioniappartamentinapoli.it, 1 +risunki.ga, 1 risxx.com, 1 rit.space, 1 ritaohio.gov, 1 @@ -99040,6 +101105,7 @@ rivoflor.it, 1 rivolta.tk, 1 rivoniaplumber24-7.co.za, 1 rivus.net, 1 +riweco.ga, 1 riwers.io, 1 rix.ninja, 1 rixcloud.moe, 1 @@ -99059,6 +101125,7 @@ rje-hub.net, 1 rjfedor.com, 1 rjfedor.ddns.net, 1 rk-box.ru, 1 +rk-links.ml, 1 rk-mediawork.de, 0 rk12.de, 1 rkabworks.uk, 1 @@ -99068,6 +101135,7 @@ rkfp.cz, 1 rkkerkjoppe.nl, 1 rkmedia.no, 1 rkmns.edu.in, 1 +rknews.tk, 1 rkowalewski.de, 1 rkstudio.com, 1 rl3.de, 1 @@ -99087,6 +101155,7 @@ rm2brothers.cc, 1 rmb.li, 1 rmbs.org, 1 rmcbs.de, 1 +rmdb.tk, 1 rmdhnreza.my.id, 1 rmdscreen.com, 1 rme.li, 0 @@ -99114,9 +101183,9 @@ rmyachting.com, 1 rn29.me, 1 rnag.ie, 1 rnb-storenbau.ch, 1 -rnbjunk.com, 1 rncc.mx, 1 rndtool.info, 1 +rnews.tk, 1 rngmeme.com, 1 rnmkrs.co, 1 rnoax.com, 1 @@ -99128,6 +101197,7 @@ roach.nz, 1 road-safety.cz, 1 road-trips.fr, 1 roadaccident.tk, 1 +roadandtransport.ga, 1 roadbikes.tk, 1 roaddoc.de, 1 roadguard.nl, 0 @@ -99143,8 +101213,10 @@ roams.mx, 1 roanboute.be, 1 roar.com.br, 1 roarsocial.co.uk, 1 +roaster.ga, 1 rob006.net, 1 robandjanine.com, 1 +robaxin750mg.ml, 1 robben.io, 1 robbertt.com, 0 robbie.bio, 1 @@ -99160,6 +101232,7 @@ robbyzworld.cf, 1 robdavidson.network, 1 robersonaudio.tk, 1 robert-adam.de, 1 +robert-ewert.tk, 1 robert-flynn.de, 1 robert-foster.com, 1 robert-reisemobil.de, 1 @@ -99173,10 +101246,12 @@ robertayamashita.com.br, 1 robertbln.com, 1 robertg.me, 1 robertglastra.com, 1 +robertgonzalez.tk, 1 roberthurlbut.com, 1 robertkrueger.de, 1 robertlowdon.com, 1 robertlysik.com, 1 +robertmusil.ml, 1 robertocasares.no-ip.biz, 0 robertodegroot.tk, 1 robertoentringer.com, 0 @@ -99240,8 +101315,10 @@ roboland.ga, 1 roboonline.tk, 1 roboraptor.tk, 1 robot-invest.cf, 1 +robot-invest.ml, 1 robot.car, 1 robotask.in, 1 +robotbattle.tk, 1 robotcoral.de, 1 robotdecocinaya.com, 1 roboth.am, 1 @@ -99260,8 +101337,10 @@ robspeed.rocks, 1 robtatemusic.com, 1 robtex.com, 1 robu.in, 1 +robust.ga, 1 robustac.com, 1 robuxemporium.com, 1 +robuxkingz.ml, 1 robwas.me, 1 roc-reo.tk, 1 roc-taiwan.su, 1 @@ -99275,6 +101354,7 @@ rochesternh.gov, 1 rochesterwi.gov, 1 rochow.me, 1 rocis.gov, 1 +rock-base.tk, 1 rock-zottegem.be, 1 rock4life.be, 1 rocka.me, 1 @@ -99303,11 +101383,13 @@ rocketmill.co.uk, 1 rocketnet.ml, 1 rocketr.net, 1 rocketsandtutus.com, 1 +rocketsworld.tk, 1 rockfallsil.gov, 1 rockfax.com, 1 rockfordnetworks.com, 1 rockfordtow.com, 1 rockfreshmanyear.com, 1 +rockfs.ml, 1 rockinit.tk, 1 rockinronniescastles.co.uk, 1 rockislandcountyil.gov, 1 @@ -99331,6 +101413,7 @@ rocksoundradio.tk, 1 rockspringswi.gov, 1 rocktontownshipil.gov, 1 rockvocalconsulting.com, 1 +rockworldteam.tk, 1 rockyford-co.gov, 1 rockymountaininsurancecenter.com, 1 rockymountainspice.com, 1 @@ -99346,6 +101429,7 @@ roddis.net, 1 rodehutskors.net, 1 rodelstein.eu, 1 rodeobull.biz, 1 +rodeodrive.tk, 1 rodeohire.com, 1 rodeoimport.com, 1 rodeosales.co.uk, 1 @@ -99359,6 +101443,7 @@ rodinka.tk, 1 rodinnebyvanie.eu, 1 rodinneodpoledne2018.cz, 1 rodirik.de, 1 +roditely.cf, 1 rodneybrooksjr.com, 1 rodnikbel.tk, 1 rodobike.com.br, 1 @@ -99371,6 +101456,7 @@ rodrigoacevedo.com.uy, 1 rodrigoamozu.com, 1 rodrigoarriaran.com, 1 rodrigocarvalho.blog.br, 1 +rodrigodematos.tk, 1 rodrigosalascolque.com, 1 rodriguezsanchezabogados.es, 1 rody-design.com, 1 @@ -99384,6 +101470,7 @@ roeljoyas.com, 1 roellcapital.com, 1 roelmagdaleno.com, 1 roelof.io, 1 +roelonline.tk, 1 roelsworld.eu, 1 roemhild.de, 1 roenhorst.net, 0 @@ -99397,11 +101484,14 @@ rofl.com.ua, 1 rofrank.space, 1 rogacevo.tk, 1 rogagym.com, 1 +rogaineforwomen.ga, 1 rogard.fr, 0 rogarden.ro, 1 roge.pw, 1 rogeiro.net, 0 +rogell.tk, 1 rogerdat.ovh, 1 +rogerdeflor.tk, 1 rogerdumas.com, 1 rogerhub.com, 1 rogerkunz.ch, 1 @@ -99410,6 +101500,7 @@ rogersaam.ch, 0 rogersvilletn.gov, 1 rogersvilleumc.org, 1 roggebroek.nl, 1 +rogiershikes.tk, 1 rogin.tk, 1 rognhaugen.no, 1 rogo.cz, 1 @@ -99426,6 +101517,7 @@ roh.one, 1 rohal.tk, 1 rohanbassett.com, 1 rohankondvilkar.com, 1 +rohansingh.cf, 1 rohde.de, 0 rohedaten.de, 1 rohitagr.com, 1 @@ -99436,6 +101528,7 @@ rohlik.cz, 1 rohrreinigung-zentrale.de, 1 roi-project.be, 1 roi-project.eu, 1 +roiblozyxfswe.ga, 1 roidsstore.com, 1 rointe.online, 1 roishopper.com, 1 @@ -99464,6 +101557,9 @@ rolc.org.sg, 1 rolecontj.com, 1 roleplayhome.com, 1 rolibo.com, 1 +roligh.cf, 1 +roligt.tk, 1 +roliki.ml, 1 roll-bakery.com.tw, 1 roll.hockey, 1 rollatorweb.nl, 1 @@ -99484,6 +101580,7 @@ rolnikowie.pl, 1 rolotrans.ga, 1 rolotrans.gq, 1 rolotrans.ml, 1 +rolstoelappartementen.tk, 1 rolzzandik.cf, 1 roma-servizi.it, 1 romab.com, 1 @@ -99498,11 +101595,13 @@ romanceamor.com.pt, 1 romancerecipes.com, 1 romancoinsforsale.org, 0 romancy.tk, 1 +romania-film.ml, 1 romaniacompany.com, 1 romanian.cam, 1 romankozak.cz, 1 romanmichel.de, 1 romano.guru, 1 +romanos.tk, 1 romanovka.ml, 1 romanpavlodar.kz, 1 romantelychko.com, 1 @@ -99517,7 +101616,11 @@ romanticschemer.com, 1 romanticschemermovie.com, 1 romanticsexshopguatemala.com, 1 romanticvillas.com.au, 0 +romantik-fm.ml, 1 +romantik-fm.tk, 1 romantik.cf, 1 +romantik.tk, 1 +romapk.tk, 1 romarin.es, 1 romaservicegroup.it, 1 romashka.tk, 1 @@ -99535,6 +101638,7 @@ romegapolice.gov, 1 romeoferraris.com, 1 romeoijulio.tk, 1 rometoptentravel.com, 1 +rommelhuntermusic.tk, 1 rommelmark.nl, 1 rommelwood.de, 1 romo-holidays.de, 1 @@ -99547,6 +101651,7 @@ ron2k.za.net, 1 ronaldcantor.com, 1 ronaldvanassen.nl, 1 ronan-hello.fr, 1 +ronan.cf, 1 ronanrbr.com, 1 ronasit.com, 1 ronbongamis.com, 1 @@ -99581,6 +101686,7 @@ roofingandconstructionllc.com, 1 roofingmaterials.tk, 1 roofingomaha.com, 1 roofonline.com, 1 +roofpost.gq, 1 roofride.com, 1 roohanionlinespiritualhelp.co.uk, 1 rooiratel.red, 1 @@ -99597,13 +101703,17 @@ room362.com, 1 room3b.eu, 1 room45.tk, 1 roombase.nl, 1 +roomcube.tk, 1 roomhub.jp, 1 +roomonline.tk, 1 roomoutside.com, 1 roomsatevents.eu, 1 roopakv.com, 1 roorda-schilders.nl, 1 roosabels.nl, 0 roosterpets.com, 1 +root-books.gq, 1 +root-books.ml, 1 root-couture.de, 1 root-space.eu, 1 root.bg, 1 @@ -99647,16 +101757,20 @@ roozbeh.tk, 1 rop.cx, 1 ropd.info, 1 roppit.nl, 1 +roques.tk, 1 rorelseprojektet.se, 1 roromendut.online, 1 rorr.im, 1 roryneville.com, 1 rosabellas.co.uk, 1 +rosabrasiv.ga, 1 rosaflorbijoux.com.br, 1 rosahijab.com, 1 rosakkreditatsiya-forum.ru, 1 rosalindturner.co.uk, 1 +rosalopezcortes.tk, 1 rosamystica.tk, 1 +rosanerolife.tk, 1 rosaquest.ru, 0 rosaserra.es, 1 rosbass.ru, 1 @@ -99677,8 +101791,10 @@ roselinlin.com, 1 roseluna.com, 1 rosemariefloydballet.com, 1 rosemountmn.gov, 1 +rosenberg-fansite.tk, 1 rosenberggard.se, 1 rosenheimsingles.de, 1 +rosenkavalier.tk, 1 rosenkeller.org, 1 roseon.net, 1 roseparkhouse.com, 1 @@ -99708,12 +101824,15 @@ rosme.it, 1 rosoft.tk, 1 rososa.com, 1 rosound.cz, 1 +rosrabota.tk, 1 ross-mitchell.com, 0 rosscountyohiocasa.gov, 1 rosscountyohiocourts.gov, 1 rosset.me, 1 rosset.net, 1 rossfrance.com, 1 +rossia.ga, 1 +rossiyskaja.cf, 1 rosskopfs.de, 1 rosslug.org.uk, 1 rossome.org, 1 @@ -99728,13 +101847,19 @@ rosten.tk, 1 rostirolla.se, 0 rostlau.be, 1 rostov-aikido.tk, 1 +rostov-arena.ml, 1 rostov-avia.ru, 0 +rostov.cf, 1 +roswellcity.tk, 1 roszdravnadzor.gov.ru, 1 rot256.io, 1 rot47.net, 1 rotamap.net, 1 +rotanaval.tk, 1 rotaracthelmond.tk, 1 rotary.org.ru, 1 +rotaryceuta.tk, 1 +rotaryfunds.ga, 1 rotas-turisticas.com, 1 rotasgastronomicas.com, 1 rotasgastronomicas.pt, 1 @@ -99775,6 +101900,7 @@ rouair.com, 1 rouamatfashion.gr, 1 roueneternalmagic.fr, 1 rougechocolat.fr, 1 +rougeetblanc.tk, 1 roughcopy.com.au, 1 roughgrain.com, 1 roughnex.tk, 1 @@ -99840,6 +101966,7 @@ roxiesbouncycastlehire.co.uk, 1 roxville.tk, 1 royal-flowers.dp.ua, 1 royal-knights.tk, 1 +royal-life.tk, 1 royal-rangers.de, 1 royal5858.com, 1 royal6868.com, 1 @@ -99910,9 +102037,11 @@ royalgroup.msk.ru, 1 royalhosting.ch, 1 royalkitchensandfurniture.co.ug, 1 royalmarinesassociation.org.uk, 1 +royalmech.tk, 1 royalnissanparts.com, 0 royaloz.ma, 1 royalpainters.co, 1 +royalrace.tk, 1 royalsleeping.com, 1 royalstylefit.com, 1 royaltonvt.gov, 1 @@ -99926,9 +102055,11 @@ royalyule.com, 1 royaume-des-chats.fr, 1 royaume-smoke.com, 1 royaumesoublies.com, 1 +roycampbell.tk, 1 royceandsteph.com, 1 roycewilliams.net, 1 roychan.org, 1 +royger.tk, 1 roynuesca.com, 1 royrevell.com, 1 roys.design, 1 @@ -99945,6 +102076,8 @@ rozemaandag.tk, 1 rozhodce.cz, 1 rozprodat.cz, 1 rp-idskenhuizen.nl, 1 +rp-megapolis.tk, 1 +rp-murk.tk, 1 rpa.gov, 1 rpadonline.com, 1 rpattisonroofing.co.uk, 1 @@ -100024,8 +102157,10 @@ rsc.by, 1 rsc.wiki, 1 rscturmoil.com, 1 rsdisedezzari.it, 1 +rsdns.ml, 1 rse-reporting.com, 1 rsec.kr, 1 +rsecure.tk, 1 rsgcard.com, 1 rsingermd.com, 1 rsl.gd, 1 @@ -100099,6 +102234,7 @@ rtkbe.com, 1 rtl.de, 1 rtlspiele.de, 1 rtmoran.org, 1 +rtparket.ga, 1 rtsak.com, 1 rtsr.ch, 0 rttreservations.com, 1 @@ -100108,16 +102244,24 @@ rttvvip.com, 1 rtveen.nl, 1 rtvslos.nl, 1 rtwcourse.com, 1 +ru-acyclopedia.cf, 1 +ru-adv.tk, 1 +ru-auto.tk, 1 ru-e-business.com, 1 ru-robot.tk, 1 +ru-sale.tk, 1 ru-sprachstudio.ch, 1 ru.search.yahoo.com, 0 +ru251.tk, 1 rua.ink, 0 ruangangkasa.com, 1 ruanglaptop.com, 1 ruanmi.de, 1 ruanwen168.com, 1 ruavan.com, 1 +rubashki-opt.ml, 1 +rubashki.tk, 1 +rubber.cf, 1 rubberband.com, 1 rubberchicken.net, 1 rubberduckit.com, 1 @@ -100152,6 +102296,7 @@ rubenslikkarchive.com, 1 rubensvrouwen.tk, 1 ruber.cf, 1 rubia.ca, 1 +rubiales.tk, 1 rubic.tk, 1 rubiconwi.gov, 1 rubidium.ml, 1 @@ -100163,11 +102308,16 @@ rubinchyk.tk, 1 rubinnadlan.co.il, 1 rubirubli.tk, 1 rublacklist.net, 1 +rublev.tk, 1 +rubooks.gq, 1 +rubreklama.tk, 1 ruby-auf-schienen.de, 1 rubymediagroup.com, 1 +rubyonline.tk, 1 rubyonremote.com, 1 rubyquincunx.com, 1 rubyquincunx.org, 1 +rubystore.ga, 1 rucinski.ch, 1 rucinski.eu, 1 rucinski.uk, 1 @@ -100186,9 +102336,12 @@ rudibora.ml, 1 rudimentalluxury.com, 1 rudloff.pro, 1 rudnikas.com, 1 +rudolf.gq, 1 rudolph.life, 1 rudovasky.com, 1 rudrastyh.com, 1 +rudy.ga, 1 +rudymendoza.tk, 1 rue-de-la-vieille.fr, 1 rueckbeil.com, 1 rueckert-gymnasium-blog.de, 1 @@ -100221,6 +102374,7 @@ rugstorene.co.uk, 1 rugugu.jp, 1 ruha.co.in, 1 ruhigehand.de, 1 +ruhimustafa.tk, 1 ruhnke.cloud, 0 ruhproject.kz, 1 ruhrdurst.tk, 1 @@ -100233,6 +102387,7 @@ ruimoreira.co.uk, 1 ruimtevoor.gent, 1 ruimtevoorgent.be, 1 ruin.one, 1 +ruinme.tk, 1 ruinone.com, 1 ruinsofchaos.com, 1 ruiruigeblog.com, 1 @@ -100257,7 +102412,6 @@ rumah123.com, 1 rumahcodingtest.tk, 1 rumahkristal.tk, 1 rumahminimalisoi.com, 1 -rumahmurahbtn.co.id, 1 rumahpropertigratis.com, 1 rumahresep.cf, 1 rumartinez.es, 1 @@ -100269,7 +102423,9 @@ rumbleline.ga, 1 rumdulhospital.com, 1 rumeli.edu.tr, 1 rumenka.tk, 1 +ruminecraftru.tk, 1 rumix.ga, 1 +rumix.tk, 1 rumlager.de, 1 rumlife.co.uk, 1 rummage4property.co.uk, 1 @@ -100281,6 +102437,9 @@ run-it-direct.co.uk, 1 runagain.ch, 0 runar-data.de, 1 runbo-australia.ga, 1 +runbo-new-zealand.ga, 1 +runbo-nz.ga, 1 +runboaustralia.ga, 1 runcarina.com, 1 runcitadel.space, 1 rundesign.it, 1 @@ -100293,16 +102452,21 @@ runebet.com, 1 runeblog.ru, 1 runecaster.tk, 1 runementors.com, 0 +runes.cf, 1 runescape.wiki, 1 +runescapelordsconquest.tk, 1 runesforbeginners.com, 1 runet.cf, 1 runetracker.org, 1 +runeworldforums.tk, 1 +runews.cf, 1 runfitcoaching.com, 1 rungie.com, 1 rungstedhave.dk, 1 rungutan.com, 1 runicspells.com, 1 runklesecurity.com, 1 +runlet.gq, 1 runlevel3.de, 1 runmyqubit.com, 1 runmyqubit.de, 1 @@ -100323,10 +102487,18 @@ ruobiyi.com, 0 ruobr.ru, 1 ruonavaara.fi, 1 ruoskachile.tk, 1 +rupeespeaks.tk, 1 rupeevest.com, 1 rupom.me, 1 +rupool.tk, 1 rupostel.com, 1 +rupressa.tk, 1 +ruprivorot.tk, 1 +rupture-skate.tk, 1 +ruqbnsmokebbq.ga, 1 ruquay.com, 1 +ruquiz.tk, 1 +rural-house.tk, 1 rural.gov, 1 ruralink.com.ar, 1 ruralis.it, 1 @@ -100336,11 +102508,14 @@ rurian-gyohen.com, 1 ruris.bg, 1 ruro.tk, 1 rurouni.tk, 1 +rus-blog.tk, 1 +rus-manual.tk, 1 rus-trip.ru, 0 rusakov.tk, 1 rusdigisolutions.com, 1 ruse.church, 1 ruseartgallery.tk, 1 +rusenemas.tk, 1 rusexmany.ml, 1 rushashkyfond.com, 1 rushbmedia.com, 1 @@ -100352,17 +102527,23 @@ rushter.com, 1 rushtonparay.com, 1 rushyo.com, 1 rusi-ns.ca, 1 +rusichi.tk, 1 rusien-den.com, 1 rusificatio.tk, 1 rusifikator.tk, 1 +rusiptv.cf, 1 ruska-modra.cz, 1 ruskamodra.cz, 1 ruskcountytx.gov, 1 ruski.tk, 1 ruslandautohuur.nl, 1 rusmir.tk, 1 +rusmodel.tk, 1 rusmolotok.ru, 1 rusnalog.ru, 1 +rusnicolas.cf, 1 +rusposuda.cf, 1 +russ-portal.tk, 1 russandol.eu, 1 russchooljordan.tk, 1 russell-tech.co.uk, 1 @@ -100373,9 +102554,13 @@ russellmeek.net, 1 russellshobby.com, 1 russellupevents.co.uk, 1 russia-furniture.tk, 1 +russia-knigi.ga, 1 russia-rp.tk, 1 russia.dating, 1 russia.wtf, 1 +russiahockey.tk, 1 +russiahunting.tk, 1 +russialife.gq, 1 russian-artist.tk, 1 russian-fur.tk, 1 russian-knights.ru, 1 @@ -100383,13 +102568,17 @@ russian-page.tk, 1 russianbearsmotorsport.tk, 1 russianbluecatsguide.com, 1 russianbrides.cf, 1 +russianbristol.tk, 1 russianews.cf, 1 russianews.ga, 1 russianpunkrock.tk, 1 russianrandom.ru, 1 russiantranslation.tk, 1 +russisch.tk, 1 +russograffix.tk, 1 rust.mn, 1 rust.pm, 0 +rustambek.tk, 1 rustamkhanko.gq, 1 rustbyexample.com, 0 rustfanatic.com, 1 @@ -100404,6 +102593,7 @@ rustonla.gov, 1 rustyrambles.com, 0 rustytub.com, 1 rusunion.org, 1 +ruswomen.tk, 1 rut2.tk, 1 ruta-66.tk, 1 rutadelastermitas.tk, 1 @@ -100439,12 +102629,14 @@ ruwhof.com, 1 ruwhof.net, 1 ruxit.com, 0 ruya.com, 1 +ruyana.tk, 1 ruyatabirleri.com, 1 ruzaevka.tk, 1 rv-jpshop.com, 1 rva-asbestgroep.nl, 1 rva.gov, 1 rvaneijk.io, 1 +rvantwembeke.tk, 1 rvender.cz, 1 rvf6.com, 1 rvfit.dk, 1 @@ -100484,6 +102676,7 @@ rxo.com, 1 rxtx.pt, 1 rxxx.ml, 1 ry88url.com, 1 +ryan-13.tk, 1 ryan-design.com, 1 ryan-gehring.com, 1 ryan-goldstein.com, 1 @@ -100506,9 +102699,12 @@ ryanteck.uk, 1 ryanwordpress.com, 1 ryazagro.ru, 1 ryazan-region.ru, 1 +ryazancity.tk, 1 rybakova.coach, 1 rybalku.ru, 1 rybarski.com, 1 +rybinsk.ga, 1 +rybnitsa.cf, 1 rybnitsa.ga, 1 rybnitsa.gq, 1 rybnitsa.tk, 1 @@ -100525,6 +102721,7 @@ rygh.no, 1 rygy.com.br, 1 rylin.net, 1 rylore.com, 1 +rymanow.tk, 1 rymdweb.com, 1 rymergames.tk, 1 rynekpierwotny.pl, 1 @@ -100544,6 +102741,7 @@ rzeczy-silene.pl, 1 rzegocki.pl, 1 rzentarzewski.net, 1 rzero.com, 1 +rzero.tk, 1 rzhv1.cf, 1 rzr.supplies, 1 s-4.host, 1 @@ -100651,12 +102849,16 @@ saatchiart.com, 1 saathi.asia, 1 sab.id, 1 saba-piserver.info, 1 +saba-shop.tk, 1 sabachat.tk, 1 sabahattin-gucukoglu.com, 1 sabaikonotes.com, 1 +sabaland.tk, 1 sabatikirooms.com, 1 sabba.uk, 1 +sabbat-wildfire.tk, 1 sabbottlabs.com, 1 +sabedinovski.tk, 1 saber-nyan.com, 1 saberhortifruti.com.br, 1 sabghijewelers.com, 1 @@ -100665,7 +102867,9 @@ sabhijobs.com, 1 sabine-forschbach.de, 1 sabineforschbach.de, 1 sablanout.com, 1 +sable.gq, 1 sabmobile.pk, 1 +saborcaribe.tk, 1 sabranie.com, 1 sabrina-auer.tk, 1 sabrinajoias.com.br, 1 @@ -100674,6 +102878,8 @@ sabrinajoiasvarejo.com.br, 1 sabrinamiskiewicz.tk, 1 sabrinarus.tk, 1 sabrinazeidan.com, 1 +sabrine.tk, 1 +sabworldtricks.tk, 1 sac-shoes.fr, 1 sacademica.tk, 1 sacaentradas.com, 1 @@ -100692,12 +102898,14 @@ sachsenflug.de, 1 sachsenlady.com, 1 sachte-restaurant.de, 1 sacians.tk, 1 +sacibo.ga, 1 sackers.com, 1 sackmesser.ch, 1 saclier.at, 1 sacodealegria.com, 1 sacprincesse.com, 1 sacramentocounty.gov, 1 +sacramentum.tk, 1 sacred-destinee.tk, 1 sacred-knights.net, 1 sacredart-murals.co.uk, 1 @@ -100705,6 +102913,7 @@ sacredheart-cliftonheights.net, 1 sacredheartbath.org, 1 sacredsecondhandbooks.com.au, 1 sacrome.com, 1 +sacrosanctus.tk, 1 sacwellness.com, 1 sad-berezka.ru, 0 sadbox.es, 1 @@ -100718,6 +102927,7 @@ sadhana.cz, 1 sadhanaclub.de, 1 sadhawkict.org, 1 sadiejanehair.com, 1 +sadiestavern.cf, 1 sadiestavern.ga, 1 sadiestavern.gq, 1 sadiestavern.ml, 1 @@ -100750,6 +102960,7 @@ safara.host, 1 safarimasaimara.com, 1 safataviationgroup.com, 1 safatech.me, 1 +safc.tk, 1 safeacs.com, 1 safeadmin.ga, 1 safeandsecureserver.com, 1 @@ -100765,9 +102976,11 @@ safebits.de, 1 safebits.eu, 1 safebits.fr, 1 safebits.it, 1 +safeboard.ml, 1 safebus.io, 1 safebuyerscheme.co.uk, 1 safecar.gov, 1 +safecso.cf, 1 safedrivepod.com, 1 safeers.tk, 1 safefreehost.gq, 1 @@ -100791,6 +103004,7 @@ safeplay.co, 1 safepool.com.br, 1 safeporn.org, 1 safeprint.pt, 1 +safer-software.tk, 1 safercar.gov, 1 saferchildren.eu, 0 saferedirectlink.com, 1 @@ -100834,12 +103048,14 @@ safewaysecurityscreens.com.au, 1 saffron.com, 1 safijourney.com, 1 safiosolutions.com, 1 +safirakbar.tk, 1 safire.ac.za, 1 safkgroup.com, 1 safnah.com, 0 safungerar.se, 1 sagacioussuricata.com, 1 sagagardencentre.co.uk, 1 +sagan.tk, 1 sagareserve.com, 1 sagargandecha.com.au, 0 sageclinic.org, 1 @@ -100858,10 +103074,14 @@ sagicorlife.com, 1 sagicorlifeusa.com, 1 sagitta.hr, 1 saglik-haberleri.tk, 1 +saglikhaber.tk, 1 sagliklidegisim.com, 1 sagnette.xyz, 1 sago.group, 1 +sagomedia.tk, 1 sahajbooks.com, 1 +sahalin.tk, 1 +sahalinskiy.gq, 1 sahar.io, 1 saharacloud.com, 1 sahararun.tk, 1 @@ -100915,8 +103135,10 @@ saint-ssd.org, 1 saintaardvarkthecarpeted.com, 1 saintanne.net, 1 saintanthonylakin.org, 1 +saintaugustineschool.tk, 1 saintbernardpetcare.com, 1 saintefoy-tarentaise.fr, 1 +saintereso.tk, 1 sainteugenechurch.net, 1 sainteugeneschurch.com, 1 saintfrancescabrini.net, 1 @@ -100937,12 +103159,14 @@ saintmaryscathedral-trenton.org, 1 saintmichaelpress.tk, 1 saintpatrick-norristown.net, 1 saintpetersburg.ga, 1 +saintpetersburg.ml, 1 saintphilipneri.org, 1 saintpius.net, 1 saintpolycarp.org, 1 saintseiya-temple.tk, 1 saintsrowmods.com, 1 sainttheresahome.org.sg, 1 +saintvincent.tk, 1 saintw.com, 0 sainzderozas.com, 1 saipariwar.com, 1 @@ -100967,6 +103191,7 @@ saitas.net, 1 saitechgroups.com, 1 saito-koken.co.jp, 1 saitrance.com, 1 +saitschool.ml, 1 saitv.net, 1 saitv.org.in, 1 saiwebtv.com, 1 @@ -100998,6 +103223,7 @@ sakura-paris.org, 1 sakuracdn.com, 1 sakuradata.com, 1 sakuramarketingdigital.com.br, 1 +sakurapalace.tk, 1 sakustar.com, 1 salaamgateway.com, 1 saladgo.id, 1 @@ -101010,6 +103236,7 @@ salamence.tk, 1 salandalairconditioning.com, 1 salariominimo.com.co, 1 salarycalculatoruk.co.uk, 1 +salas.cf, 1 salas.tk, 1 salasbanquetes.cl, 1 salati.tk, 1 @@ -101019,6 +103246,7 @@ sald.us, 1 saldanda.ml, 1 salde.net, 1 salduero.tk, 1 +sale-internet.cf, 1 sale-sokuho.com, 1 sale4ru.ru, 1 saleaks.org, 1 @@ -101036,6 +103264,7 @@ saleduck.fi, 1 saleduck.se, 1 saledump.nl, 1 saleem.cf, 1 +salegor.tk, 1 saleh4unraid.cyou, 1 salekaz.ru, 1 salemma.gov, 1 @@ -101044,6 +103273,7 @@ salento-nostro.tk, 1 salentocab.com, 1 salerno-on-line.tk, 1 salernotoday.it, 1 +salery.ga, 1 sales-experience.nl, 1 sales-respect.nl, 1 salesdesign.vn, 1 @@ -101061,6 +103291,7 @@ salesmd.com, 1 salesoutcomes.com, 1 salesprocessing.gq, 1 saletodo.com, 1 +saleturs.tk, 1 saletzki.de, 1 salexy.kz, 1 salibandy.tk, 1 @@ -101081,6 +103312,7 @@ salledebainmontreal.gq, 1 sallisawok.gov, 1 sally-secret.com, 1 sallyandruss.ca, 1 +sallyangeli.tk, 1 sallycooke.co.uk, 1 sallydowns.name, 1 sallyheerenveen.nl, 1 @@ -101122,8 +103354,10 @@ salsa-straubing.de, 1 salsa.berlin, 1 salserocafe.com, 0 salt-documentary.blog, 1 +salt-travel.cf, 1 salt.fish, 1 saltbythesea.com, 0 +saltcave.gq, 1 saltedfish.network, 1 saltedge.com, 1 salter.com.tr, 1 @@ -101153,7 +103387,9 @@ saludmas.site, 1 saludnutrivida.com, 1 saludsis.mil.co, 1 saluels.servemp3.com, 1 +salukinet.tk, 1 salussafety.io, 1 +salut-butovo.cf, 1 salutenaturale.com.br, 1 salutes.tk, 1 salutethefish.com, 1 @@ -101161,8 +103397,11 @@ salutethegrains.com, 1 salutethepig.com, 1 salva.re, 1 salvaalocombia.com, 1 +salvadoralevin.tk, 1 +salvadorcorriols.tk, 1 salvadorinfantil.tk, 1 salvalartesicilia.it, 1 +salvameblog.tk, 1 salverainha.org, 1 salzamt.tk, 1 salzburg-erfahren.at, 1 @@ -101178,13 +103417,16 @@ samabest.tk, 1 samalderson.co.uk, 1 samalova-chata.cz, 0 samandavani.com, 1 +samandcatonline.tk, 1 samandej.ir, 1 samandroscosrestaurant.com, 1 samanexports.in, 1 samangel.org, 1 samanthabiggers.com, 1 samanthasmith.tk, 1 +samar-leyte.tk, 1 samara-avia.ru, 1 +samara-hosting.tk, 1 samarhotel.com, 1 samaritainsmeyrin.ch, 0 samarpanfurniture.com, 1 @@ -101207,6 +103449,7 @@ samepage.io, 1 samesound.ru, 1 sametcanaz.tk, 1 sameteem.com, 1 +sametimetomorrow.tk, 1 sameworks.com, 1 samhall.se, 1 samhsa.gov, 1 @@ -101233,6 +103476,9 @@ sammyservers.com, 1 sammyservers.net, 1 samoacollege.edu.ws, 1 samodel.ml, 1 +samodel.tk, 1 +samogonka.tk, 1 +samokhin.cf, 1 samorazvitie.ru, 1 samosad.tk, 1 samotorsporttyres.com.au, 1 @@ -101249,10 +103495,10 @@ samri.pt, 1 samroelants.com, 1 samscollection.in, 1 samsebe.ml, 1 +samsebe.tk, 1 samshouseofspaghetti.net, 1 samskaar.in, 1 samsonnetworks.org, 1 -samsreseller.com, 1 samstudios.tk, 1 samsunghalfmarathon.com, 1 samtalen.nl, 1 @@ -101304,6 +103550,8 @@ sanasport.pl, 1 sanasport.sk, 1 sanates.cz, 1 sanatfilan.com, 0 +sanatori-elochka.tk, 1 +sanatori-teterev.tk, 1 sanatorii-sverdlovskoy-oblasti.ru, 1 sanatorionosti.com.ar, 1 sanatstore.ir, 1 @@ -101317,6 +103565,9 @@ sanctio.tk, 1 sanctskin.com, 1 sanctum.geek.nz, 0 sanctumwealth.com, 0 +sanctus-de.tk, 1 +sand-and-mercury.tk, 1 +sand-craft.ml, 1 sand-stoneinc.com, 1 sand66.cc, 1 sand66.com, 1 @@ -101338,6 +103589,7 @@ sandiegoluxuryhomes.org, 1 sandiegotaxpreparation.com, 1 sandiegotown.com, 1 sandipmukherjee.tk, 1 +sandiuno.ml, 1 sandlerpartners.com, 1 sandmanintel.com, 1 sandmarc.cz, 1 @@ -101353,6 +103605,7 @@ sandramargolesmd.com, 1 sandramorrone.tk, 1 sandras-hobbystueble.de, 1 sandrasturm.net, 1 +sandrinesite.tk, 1 sandro.sk, 1 sandrolittke.de, 1 sandrproperty.com, 1 @@ -101381,10 +103634,12 @@ sanfranciscotours.org, 1 sangamonil.gov, 1 sangheon.com, 1 sangina.eu, 1 +sangiovannilipioni.tk, 1 sanglierhurlant.fr, 1 sangowen.xyz, 1 sangreytinta.tk, 1 sangriasenorial.com, 1 +sangwanbeach.tk, 1 sangyoui.health, 1 sanhotel.ml, 1 sanidadnaval.cl, 1 @@ -101412,6 +103667,7 @@ sanjosecolorectal.com, 1 sanjosecostarica.org, 1 sanjoweb.tk, 1 sanjuanchamelco.tk, 1 +sanjuandeabajo.tk, 1 sanjuanerita.com, 1 sanketsu.ml, 0 sanki.tk, 1 @@ -101426,9 +103682,12 @@ sanmonjiya-kimono.com, 1 sanmuding.com, 1 sannefoltz.com, 1 sannesfotklinikk.no, 1 +sannikfk.gq, 1 sanodent.com.ua, 1 sanook69.com, 1 sanooktiew.com, 0 +sanpablo.tk, 1 +sanpancrazio.tk, 1 sanpatigroup-beautysalon.jp, 1 sanpatigroup-recruit.jp, 1 sanpatigroup.jp, 1 @@ -101450,6 +103709,8 @@ santacruzca.gov, 1 santacruzstudio.com.mx, 1 santafesilversaddlemotel.com, 1 santaijia.com, 0 +santamargarita.tk, 1 +santamariadelaisla.tk, 1 santamariaretreats.co.uk, 1 santamariaretreats.uk, 1 santamonicapost123.org, 1 @@ -101464,7 +103725,9 @@ santarosaca.gov, 1 santarosanm.gov, 1 santasofiastereo.tk, 1 santaynezchumash-nsn.gov, 1 +santegra.tk, 1 santehart.by, 1 +santehnica.ml, 1 santehnik-dnepr.dp.ua, 1 santehnik-home.ru, 1 santehnika-tut.ru, 1 @@ -101491,6 +103754,7 @@ santong.tk, 1 santoscarmelitas.tk, 1 santosdecordoba.tk, 1 santoshpandit.com, 1 +santugon.tk, 1 santv.cc, 0 sanukarlos.tk, 1 sanweb.info, 1 @@ -101543,7 +103807,11 @@ saqara.com, 1 saracenmarkets.com, 1 sarae.id, 0 sarafanchik.tk, 1 +sarafani.tk, 1 sarafrazan.tk, 1 +sarafshop.tk, 1 +sarah-brown.tk, 1 +sarah-harding.tk, 1 sarah-jane.nl, 1 sarahbaker.co.nz, 1 sarahfuerstenberg.com, 1 @@ -101556,6 +103824,7 @@ sarahmodel.tk, 1 sarahneumann.tk, 1 sarahplusdrei.de, 1 sarahshabrina.tk, 1 +sarahvanessen.tk, 1 sarahwellington.com, 1 sarahwikeley.co.uk, 1 saraleebread.com, 0 @@ -101582,10 +103851,12 @@ sard.ro, 1 sardacompost.it, 1 sardegnarifiuti.it, 1 sardegnatirocini.it, 1 +sardine.tk, 1 sardinianvillas.co.uk, 1 sardinianvillas.com, 1 sardinianvillas.ru, 1 sardoche.lol, 1 +sarecords.tk, 1 sarella.org, 1 saresegur.com, 1 sargar.tk, 1 @@ -101606,8 +103877,10 @@ sarkchat.cf, 1 sarkisianbuilders.com, 1 sarkom.tk, 1 sarkvideos.cf, 1 +sarmpel.tk, 1 sarndipity.com, 1 sarny.at, 1 +sarogiw.tk, 1 saropa.com, 1 sarouel.fr, 1 sarox.com.au, 0 @@ -101622,6 +103895,7 @@ sarv.com, 1 sarvaappstage.com, 1 sarzamintarh.ir, 1 sas-snowboarding.sk, 1 +sasakala.tk, 1 sasapost.co, 1 sascha-brockel.de, 1 sascha.io, 1 @@ -101631,7 +103905,9 @@ saschaeggenberger.com, 1 sascorp.co.uk, 1 sascorp.es, 1 sash.pw, 1 +sashabognibov.tk, 1 sashaclothing.tk, 1 +sashakrasnoyarsk.tk, 1 sashascollections.com, 1 sashka.com.ua, 1 sashleighaust.com, 1 @@ -101640,6 +103916,7 @@ saskiadhont.be, 1 saskiafarell.net, 1 saskialund.de, 1 sasrobotics.xyz, 1 +sasroli.tk, 1 sastamalandemarit.fi, 1 sastd.com, 1 sasyabapi.com, 1 @@ -101686,6 +103963,7 @@ satmd.de, 1 sato-legaloffice.jp, 1 satoshilabs.com, 1 satoshinumbers.com, 1 +satpersian.tk, 1 satplay.host, 1 satradio.tk, 1 satramana.org, 1 @@ -101693,6 +103971,7 @@ sats4.me, 1 satselect.tk, 1 satserwis.xyz, 1 satsukii.moe, 1 +satsumi.tk, 1 satta-company.tk, 1 sattamatka420.mobi, 0 sattamatkamobi.com, 1 @@ -101755,6 +104034,7 @@ savannapro.vn.ua, 1 savant-dagen.nl, 1 savantcare.com, 1 savasanadam.com, 1 +savatha.tk, 1 savbus.com, 1 savbus.net, 1 savbus.ws, 1 @@ -101780,17 +104060,20 @@ savetech.tk, 1 savethedogfishfoundation.org, 1 savetheinternet.eu, 1 savetomp3.net, 1 +saveusfromavril.tk, 1 savewildcats.eu, 1 savewildcats.foundation, 1 savewildcats.life, 1 savewithtrove.com, 0 savewithupgrade.com, 1 +saveworldpets.ga, 1 saveyourhouse.tk, 1 savicki.co.uk, 1 savicki.cz, 1 savicki.sk, 1 saviezvousque.net, 1 savilleassessment.com, 1 +savin.ga, 1 savinggoliath.com, 1 savinglivesatbirth.net, 1 savingsbondwizard.gov, 1 @@ -101829,6 +104112,7 @@ saxojoe.co.uk, 1 saxojoe.de, 1 saxol-group.com, 1 saxoncreative.com, 1 +saxophone.tk, 1 saxotex.de, 1 saxotrader.com, 1 saxynele.tk, 1 @@ -101863,6 +104147,7 @@ sb.ax, 1 sb.im, 1 sb.sb, 1 sb0.io, 1 +sbabeshin.tk, 1 sbanken.no, 1 sbaten.nl, 1 sbblog.cn, 1 @@ -101903,11 +104188,13 @@ sbmlogistik.com, 0 sbmsite.cf, 1 sbmsite.ml, 1 sbmsitelist.ml, 1 +sbmsitelist.tk, 1 sbmsmartaccounting.co.uk, 1 sbmt.cc, 1 sbo.no, 1 sbodewissel.tk, 1 sbond.co, 1 +sborka.ml, 1 sbpk.fr, 1 sbpropman.co.uk, 1 sbrouwer.org, 1 @@ -101942,6 +104229,7 @@ scale.at, 1 scale.milano.it, 1 scale.roma.it, 1 scalecalculation.ml, 1 +scalemodeling.tk, 1 scalesbiolab.com, 1 scaligerorooms.it, 1 scaling.solutions, 0 @@ -101955,7 +104243,10 @@ scambistimaturi.com, 1 scamblockplus.org, 1 scan.co.uk, 1 scan.computer, 1 +scanamed.tk, 1 +scanbetting.ga, 1 scandalindo.ml, 1 +scandalpunk.tk, 1 scandata.cf, 1 scandata.tk, 1 scandesk.com, 1 @@ -101963,6 +104254,7 @@ scandicom.fi, 1 scandinavia.dating, 1 scandinavia.ga, 1 scandinaviancorner.tk, 1 +scaner.ga, 1 scangeo.net, 1 scanigma.com, 1 scanmailx.com, 1 @@ -101995,6 +104287,7 @@ scatteredcode.net, 1 scatters.com, 1 scatterscasino.com, 1 scavalentenx.duckdns.org, 1 +scavenged.ga, 1 scbdh.org, 1 sccd.co.uk, 1 sccoaching.io, 1 @@ -102008,6 +104301,7 @@ scenastu.pl, 1 scene.mx, 1 scenefense.tk, 1 scenester.tv, 1 +scenetv.ga, 1 scenicbyways.info, 1 scenicpathways.com, 1 scented-delights.co.uk, 1 @@ -102034,7 +104328,6 @@ schattenwoelfe.tk, 1 schatzibaers.de, 1 schauergroup.com, 1 schaumburgil.gov, 1 -schaumstoff-meister.de, 1 schauraum.tk, 1 schauspielbuehnen.de, 1 schausteller.de, 1 @@ -102052,6 +104345,7 @@ scheidsrechtersinfo.nl, 1 scheinerhaus.at, 1 scheinlichter.de, 1 scheldestromen.nl, 1 +schelkovo.tk, 1 schella.network, 1 schellevis.net, 0 schemingmind.com, 1 @@ -102074,6 +104368,7 @@ schildbach.de, 1 schilderennummers.nl, 1 schildermaxe.de, 1 schillers-friedberg.de, 1 +schiltron.tk, 1 schimmel-test.info, 1 schimmelnagelspecialist.nl, 0 schipholwatch.nl, 1 @@ -102150,8 +104445,10 @@ schokoladensouffle.eu, 1 scholar.group, 0 scholar.pk, 1 scholar.site, 0 +scholarbaze.cf, 1 scholarchip.com, 1 scholarconnect.com, 1 +scholareducation.tk, 1 scholarly.com.ph, 1 scholarly.ph, 1 scholarnet.cn, 1 @@ -102160,19 +104457,29 @@ scholarsclub.club, 1 scholarships.ga, 1 scholarships.link, 1 scholarstyle.com, 0 +scholenlijst.tk, 1 scholenprogrammagroningen.nl, 1 scholieren.com, 1 scholingua.com, 1 schollbox.de, 0 scholledev.com, 1 +scholohost.tk, 1 scholtensupport.nl, 1 scholz-kallies.de, 1 schonstedt.com, 1 schont.org, 1 +school-22.tk, 1 +school-27-lpr.tk, 1 +school-33.tk, 1 +school-adventures.tk, 1 school-id.co.uk, 1 +school-project.tk, 1 school-register.co.za, 1 school.in.th, 1 +school16-tob.tk, 1 +school173.tk, 1 school32.tk, 1 +school43.tk, 1 school91.ml, 1 schoolantwoorden.tk, 1 schoolbag.gq, 1 @@ -102194,6 +104501,7 @@ schoolninja.net, 1 schoolofequineshiatsu.com, 1 schoolofphilosophy.org.au, 1 schoolotzyv.ru, 1 +schoolrumble.tk, 1 schoolsafety.gov, 1 schoolsonice.nl, 1 schooluniform.com.au, 1 @@ -102256,6 +104564,7 @@ schulfotograf-deinfoto.ch, 1 schulhomepage.de, 1 schull.ch, 0 schum.world, 0 +schuman.tk, 1 schumanandmonnet.eu, 1 schummar.de, 0 schunako.ch, 1 @@ -102325,9 +104634,13 @@ scienceroads.com, 1 sciences-world.com, 1 scienceschool.ml, 1 sciencesolutions.eu, 1 +sciencetechworld.tk, 1 sciencetram.tk, 1 +scienceweb.tk, 1 sciencex.com, 1 sciencexpo.org.za, 1 +scientia.ga, 1 +scientific-socialism.cf, 1 scientific-socialism.ga, 1 scientific-socialism.ml, 1 scientificwomen.net, 1 @@ -102400,6 +104713,7 @@ scott.today, 1 scottainslie.me.uk, 1 scottandtammy.com, 1 scottashley.tk, 1 +scottbot.tk, 1 scottcoil.gov, 1 scottcountyva.gov, 1 scottdayman.com, 1 @@ -102408,6 +104722,7 @@ scotthelme.co.uk, 1 scotthelmesucks.com, 1 scottipc.com, 1 scottish-fold-cats.com, 1 +scottish-paranormal.tk, 1 scottishcca.co.uk, 1 scottishcu.org, 1 scottishseniorsgolf.com, 1 @@ -102415,6 +104730,7 @@ scottjbeigelmemorialfund.com, 1 scottlanderkingman.com, 1 scottmay.id.au, 1 scottniven.tk, 1 +scottpilgrim.tk, 1 scottrae.me.uk, 1 scotts-restaurant.com, 1 scottsbluffcountyne.gov, 1 @@ -102438,7 +104754,9 @@ scoutingtungelroy.nl, 1 scoutingvilsteren.tk, 1 scoutnation.tk, 1 scoutnet.de, 1 +scoutreinosa.tk, 1 scoutsanbartolome.tk, 1 +scoutsanpieropatti.tk, 1 scoutsberg.be, 0 scoutsdeldesierto.tk, 1 scouttrails.com, 1 @@ -102472,10 +104790,12 @@ scrapfly.io, 1 scrapmartine.tk, 1 scrapmycarperth.com.au, 1 scratch-ppp.jp, 1 +scratchbot.tk, 1 scratchzeeland.nl, 1 scrawn.net, 1 scrayos.net, 1 scrc.gov, 1 +screamager.tk, 1 scredible.com, 0 screefox.de, 1 screen-fox.de, 1 @@ -102491,6 +104811,7 @@ screenpublisher.com, 1 screensizemap.com, 1 screenstotaalshop.nl, 1 screenwalker.de, 1 +screenwriter.tk, 1 screenzy.io, 1 screvencountyga.gov, 1 scribbler.tk, 1 @@ -102502,6 +104823,8 @@ scripter.co, 1 scriptgates.ru, 0 scripthost.org, 1 scriptjunkie.us, 1 +scriptline.ga, 1 +scriptmaker.tk, 1 scriptolab.com, 1 scriptrock.com, 1 scriptsrus.tk, 1 @@ -102510,7 +104833,9 @@ scrod.me, 1 scroll-to-top-button.com, 1 scroll.com, 1 scroll.in, 1 +scroollocker.tk, 1 scrubcorpo.net, 1 +scruffy.ga, 1 scruffymen.com, 1 scrum.org, 1 scrumplex.net, 1 @@ -102535,6 +104860,7 @@ scul.net, 1 sculptaestheticsclinic.co.uk, 1 sculpteo.com, 1 sculpture.support, 1 +sculpturesworldwide.tk, 1 sculpturos.com, 1 scuolaguidalame.ch, 0 scuolamazzini.livorno.it, 1 @@ -102583,10 +104909,12 @@ sdpokieswiry.tk, 1 sdruzeniprovltavu.cz, 1 sds-marburg.de, 0 sdsi.us, 1 +sdsite.tk, 1 sdsmanagement.me, 0 sdsmt.engineering, 1 sduconnect.nl, 0 sduoxminty.cn, 1 +sdut.gq, 1 sdvigpress.org, 0 sdvx.net, 0 sdxcentral.com, 1 @@ -102599,6 +104927,7 @@ se.com, 1 se.gg, 1 se.search.yahoo.com, 0 se2.com, 1 +sea-airinternational.tk, 1 sea-godzilla.com, 1 sea-man.org, 1 sea.zapto.org, 1 @@ -102626,6 +104955,7 @@ seanbright.net, 1 seanchaidh.org, 1 seanchristian.tk, 1 seandawson.info, 1 +seangunter.net, 1 seanholcroft.co.uk, 1 seankilgarriff.com, 0 seanmeedevworld.com, 1 @@ -102639,7 +104969,9 @@ search-engine-optimization.xyz, 1 search-net.tk, 1 search.gov, 1 search.yahoo.com, 0 +searchable.ml, 1 searchbar.co.za, 1 +searchbyai.com, 1 searchcandy.nl, 1 searchcandy.uk, 1 searchdatalogy.com, 1 @@ -102652,8 +104984,8 @@ searchgurus.ca, 1 searchmore.dk, 1 searchpartners.dk, 1 searchperfumes.ga, 1 -searchshops.com, 1 searchtechnology.tk, 1 +searchwork.tk, 1 searchzone.ch, 0 seareelfiji.com, 1 searena.ga, 1 @@ -102669,7 +105001,6 @@ searx.ru, 1 searx.run, 1 searx.space, 1 searx.xyz, 1 -searxng.cf, 1 searxng.com, 1 seashkey.com, 1 seasidestudios.co.uk, 1 @@ -102689,6 +105020,7 @@ seattleduiattorneys.com, 1 seattlemesh.net, 1 seattlewalkinbathtubs.com, 1 seavancouver.com, 1 +seaview.gq, 1 seaviewkohchang.com, 1 seb-mgl.de, 1 seb.surf, 1 @@ -102696,6 +105028,9 @@ seb8iaan.com, 1 sebald.com, 1 sebald.org, 1 sebandroid.com, 1 +sebar-iklan.gq, 1 +sebariklanmassal.gq, 1 +sebarin.tk, 1 sebastiaandouma.co.uk, 1 sebastiaanwijnimport.nl, 1 sebastian-bravo.com, 1 @@ -102712,6 +105047,7 @@ sebastiandarhoi.cf, 1 sebastianelectric.org, 1 sebastianforst.de, 1 sebastianhofmann.legal, 1 +sebastiantroncoso.tk, 1 sebastianungureanu.com, 1 sebastiaperis.com, 1 sebastien-meric.com, 1 @@ -102727,6 +105063,7 @@ sebi.org, 1 sebjacobs.com, 1 seblod.com, 1 seboluo.com, 1 +seboreia.tk, 1 sebster.com, 1 seby.io, 1 sec-research.com, 1 @@ -102774,6 +105111,8 @@ secpoc.online, 1 secre.cy, 1 secrecion.com, 1 secret-bases.co.uk, 1 +secret-queen.ga, 1 +secret-queen.ml, 1 secret.garden, 1 secretar.is, 1 secretary-schools.com, 1 @@ -102783,12 +105122,17 @@ secretgardendesigns.shop, 1 secrethub.io, 1 secretimports.com.br, 1 secretmap.ml, 1 +secretmolodosti.ga, 1 +secretmolodosti.ml, 1 +secretmolodosti.tk, 1 secretofanah.com, 1 +secretosbolivia.tk, 1 secretpanties.com, 1 secrets-marketing.tk, 1 secretsdujeu.com, 1 secretserveronline.com, 1 secretsofuniverse.in, 1 +secretstomartialarts.tk, 1 secretzone.bg, 1 secrium.io, 1 secs.london, 1 @@ -102837,7 +105181,6 @@ secureapplicationaccess.com, 1 securebot.ga, 1 securebuildingaccess.com, 1 securecloudplatform.nl, 1 -securecomms.cz, 1 secureddocumentshredding.com, 1 securedrop.org, 1 securefiletransfer.nl, 1 @@ -102940,6 +105283,7 @@ sedoexpert.nl, 1 sedoexperts.nl, 1 sedro-woolley.gov, 1 see22.de, 1 +seearmenia.tk, 1 seebetterlab.com, 1 seedandleisure.co.uk, 1 seedboite.ovh, 1 @@ -102957,6 +105301,7 @@ seejay.me, 1 seekfirstthekingdom.ca, 1 seekingalpha.com, 1 seeks.ru, 1 +seeksupply.ga, 1 seekthe.net, 1 seekweb.com, 1 seeme.ai, 1 @@ -103058,12 +105403,15 @@ sekko2.jp, 1 sekkom.com, 1 sekoia.io, 1 sekoya.org, 1 +sekreti-biznesa.cf, 1 seks-znakomstva.tk, 1 +sektor-news.tk, 1 sektor.ro, 1 sektor.tech, 1 sektor41.com, 1 sektorgaza.su, 1 sekurak.pl, 1 +sekusi-tochiki.tk, 1 selaparangpost.com, 1 selayar.vacations, 1 selber-coden.de, 1 @@ -103071,6 +105419,7 @@ selco-himejiminami.com, 1 selcusters.nl, 1 selea.design, 1 selea.se, 1 +selebrita.ml, 1 selectables.tk, 1 selectanderect.com, 1 selectbusteni.tk, 1 @@ -103102,6 +105451,7 @@ selfiehome.cz, 1 selfishness.com, 1 selfloath.in, 1 selfmade4u.de, 1 +selfrealize.ga, 1 selfretire.cf, 1 selfserverx.com, 0 selftech.tk, 1 @@ -103159,6 +105509,7 @@ sembyotic.com, 1 semcensurabrag.com.br, 1 semeia.io, 1 semena-ua.ml, 1 +semenov.ml, 1 semenov.su, 1 semenserang.com, 1 sementes.gratis, 1 @@ -103172,12 +105523,14 @@ seminariruum.ee, 1 seminarraum-isny.de, 1 seminolecountyoklahoma.gov, 1 semiotical.com, 0 +semiotika.tk, 1 semira.tk, 1 semirben.de, 1 semiread.com, 1 semiweb.ca, 1 semmuhely.tk, 1 semobr.cf, 1 +semops.gq, 1 semox.de, 1 semparar.com.br, 1 semplicementelight.com, 1 @@ -103230,6 +105583,7 @@ senf-kren.at, 1 senfcall.de, 1 senffabrik.com, 1 senhorst.com, 1 +senhost.tk, 1 seni-beladiri.tk, 1 seniorem.eu, 1 seniorhomexchange.com, 1 @@ -103297,6 +105651,7 @@ sentry.io, 1 sentry.nu, 1 sentrybay.com, 1 sentworks.com, 1 +senu.pro, 1 senzaparole.de, 1 senzei.tk, 1 seo-analyse.com, 1 @@ -103306,6 +105661,7 @@ seo-linz.at, 1 seo-portal.de, 1 seo-promox.cf, 1 seo-promox.tk, 1 +seo-reality.cf, 1 seo-reklama.tk, 1 seo-smo.ml, 1 seo-smo.tk, 1 @@ -103363,6 +105719,7 @@ seopost.ga, 1 seoprnews.cf, 1 seoproof.tk, 1 seoquero.com, 1 +seorus.cf, 1 seorus.ml, 1 seoruse.com, 0 seoscribe.net, 1 @@ -103371,6 +105728,7 @@ seosergio.com, 1 seoshanti.ru, 1 seosof.com, 1 seosos.ml, 1 +seospecialist.ma, 0 seostrit.tk, 1 seotip.top, 1 seotipster.com, 1 @@ -103751,6 +106109,7 @@ sexoclicker.com, 1 sexoclicker.net, 1 sexoclicker.org, 1 sexocomgravidas.com, 1 +sexologist.cf, 1 sexonwax.com, 1 sexoyrelax.com, 1 sexpay.net, 1 @@ -103901,10 +106260,12 @@ shadesofgraylaw.com, 1 shadex.net, 1 shadhoc.com, 1 shadigee.org, 1 +shadikhan.tk, 1 shadowandy.net, 1 shadowcp.eu, 1 shadowfight2.tk, 1 shadowfox.tk, 1 +shadowguardian507.tk, 1 shadowkingdomrecords.com, 1 shadowkitsune.net, 1 shadowknight.tk, 1 @@ -103977,6 +106338,7 @@ shalyapin.by, 1 sham-rock.tk, 1 shamaev.me, 1 shamami.ml, 1 +shamans.ga, 1 shambhu.info, 1 shamed.tk, 1 shamimahmed.tk, 1 @@ -104054,6 +106416,7 @@ shariahlawcenter.com, 1 shariahlawcenter.org, 1 sharialawcenter.com, 1 sharialawcenter.org, 1 +sharik.ml, 1 sharine.nl, 1 sharing-kyoto.com, 1 sharingcolombia.com, 1 @@ -104065,6 +106428,7 @@ sharkblog.tk, 1 sharkey.tk, 1 sharkeyscuba.com, 1 sharkie.org.za, 1 +sharking.gq, 1 sharko.tk, 1 sharkpaint.tk, 1 sharks.football, 1 @@ -104103,6 +106467,7 @@ shawarmapressfranchise.com, 1 shawcentral.ca, 0 shawclan.id.au, 1 shawfamily.id.au, 1 +shawiah.tk, 1 shawnaleighdesigns.com, 1 shawnalucey.com, 1 shawnee-nsn.gov, 1 @@ -104225,6 +106590,7 @@ shethbox.com, 1 shetshivar.com, 1 shevans.com, 1 shevenmed.com, 1 +shevet-achim.tk, 1 shft.cl, 1 shg-pornographieabhaengigkeit.de, 0 shgroup.xyz, 1 @@ -104285,6 +106651,7 @@ shikimori.org, 1 shikiryu.com, 1 shileo.de, 1 shilled.tk, 1 +shilpaonline.tk, 1 shima1.net, 1 shimi.blog, 1 shimi.guru, 1 @@ -104351,7 +106718,6 @@ shiqishidai.cc, 1 shiqisifu.cc, 1 shiraikuroko.com, 1 shirao.jp, 1 -shiraz-coffee.com, 1 shiresvets.com, 1 shireyishunjian.com, 1 shireyishunjian.group, 1 @@ -104377,6 +106743,7 @@ shitcountries.org, 1 shitdick.tk, 1 shitfest.net, 1 shitmybradsays.com, 1 +shitnikovo.tk, 1 shitposter.io, 1 shitposts.se, 1 shitproductions.org, 1 @@ -104401,6 +106768,7 @@ shkola1.ml, 1 shkolamishlenia.tk, 1 shkolladigjitale.com, 1 shkololo.cf, 1 +shkololo.ml, 1 shlemenkov.by, 1 shlink.cc, 1 shlmail.info, 1 @@ -104500,6 +106868,7 @@ shopminut.com, 1 shopnguyenlieumypham.com, 1 shopocratic.com, 1 shopofturkey.com, 1 +shoponlinedeals.tk, 1 shoposal.com, 1 shoppe561.com, 1 shopperexperts.com, 1 @@ -104707,6 +107076,7 @@ shortwave.tk, 1 shoruihokan.com, 1 shoshin-aikido.de, 1 shoshin.technology, 1 +shossain.tk, 1 shota-sekkotsuin.com, 1 shota.pictures, 1 shota.vip, 1 @@ -104939,6 +107309,7 @@ siepietnica.tk, 1 siepomaga.net, 1 sierom.net, 1 sierpinska.eu, 1 +sierramusic.tk, 1 siesapps.com, 1 sietejefes.com.ar, 1 sieulog.com, 1 @@ -105082,9 +107453,11 @@ silicon-north.com, 1 silicon-vision.com, 1 siliconheartlandohio.gov, 1 siliton.pl, 1 +silken-madame.tk, 1 silkky.cloud, 1 silklogistics.com.au, 1 silklogisticsholdings.com.au, 1 +silkon.net, 1 silkproducts.tk, 1 sillisalaatti.fi, 1 sillyli.com, 0 @@ -105322,6 +107695,7 @@ simpleinout.com, 1 simpleinvoices.io, 1 simpleit.services, 1 simpleline.studio, 1 +simplelinux.tk, 1 simplelogin.co, 1 simplelogin.com, 1 simplelogin.fr, 1 @@ -105417,6 +107791,7 @@ sinapuros.tk, 1 sinatralegal.com, 1 sinavcevaplan.com, 1 sinavelvet.com, 1 +sinavyo.ml, 1 sincelockdown.co.uk, 1 sincemydivorce.com, 1 sinceschool.com, 1 @@ -105572,6 +107947,7 @@ siriuspup.com, 1 sirma.com, 1 sirmoffat.com, 1 sirnakhaber.tk, 1 +siro.gq, 1 sirovatka.tk, 1 sirplus.com.ar, 1 sirpsycho.tk, 1 @@ -105603,6 +107979,7 @@ siseed.io, 1 siselectrom.com, 1 siseministeerium.ee, 0 sisiengineers.gq, 1 +sisirbatu.tk, 1 sismit.es, 1 sisqo.tk, 1 sisqualwfm.com, 1 @@ -105693,7 +108070,6 @@ situsbandarq.ml, 1 situsbandarq.tk, 1 sitypro.com, 1 sitz.ch, 1 -sitzpolster24.de, 1 sitzungsdienst.net, 1 siulam-wingchun.org, 1 siusto.com, 1 @@ -105773,6 +108149,7 @@ skateswagger.com, 1 skatingchina.com, 1 skatn.de, 1 skautibrno.cz, 1 +skazka.ml, 1 skazka.ru, 1 skbexteriorcleaningsolutions.com, 1 skbilisim.tk, 1 @@ -105812,6 +108189,7 @@ skiforlight.ca, 1 skifttiljutlanderbank.dk, 1 skigebied.nl, 1 skigebiete-test.de, 1 +skiingnewsletter.cf, 1 skiingnewsletter.ga, 1 skiingproperty.com, 1 skiinstructor.services, 1 @@ -105845,6 +108223,7 @@ skimbo.tk, 1 skin-cosmetic.eu, 1 skinbet.co, 1 skincare-note.com, 1 +skincareagent.cf, 1 skindb.net, 1 sking.io, 1 skinmarket.co, 1 @@ -106130,6 +108509,7 @@ slechtereview.nl, 1 sledgeroofing.com, 1 sleeklounge.com, 0 sleep-go.info, 1 +sleepawaycampseries.tk, 1 sleepet.tw, 1 sleepig.com, 1 sleepily.tk, 1 @@ -106209,6 +108589,7 @@ slobrowink.com, 1 slobsbeer.com, 1 sloeproeienalmere.nl, 1 sloepverhuur-roggebroek.nl, 1 +slogan.tk, 1 slogancreator.com.au, 1 slogix.in, 1 sloneczni.pl, 1 @@ -106268,6 +108649,7 @@ slunecnice.cz, 1 slunyavchik.tk, 1 sluo.org, 1 slushpool.com, 1 +slutty-girls.cf, 1 slwilde.ca, 1 slxh.eu, 1 slxh.nl, 1 @@ -106423,6 +108805,8 @@ smartpolicingplatform.com, 1 smartpos.net.br, 1 smartproductguide.com, 1 smartpti.net, 1 +smartrak.co.nz, 1 +smartrak.com, 1 smartrecruiters.com, 1 smartrentacar.ro, 1 smartriotour.com.br, 0 @@ -106470,6 +108854,7 @@ smeetsengraas.com, 1 smelly.cloud, 1 smeso.it, 1 smetak.cz, 1 +smetana.pro, 1 smetbuildingproducts.com, 1 smexpt.com, 1 smeys.be, 1 @@ -106487,6 +108872,7 @@ smileback.co.uk, 1 smilecare.ae, 1 smilechic.com, 1 smilecliniq.com, 1 +smilecon.cf, 1 smiledirectsales.com, 1 smilemantra.clinic, 1 smilenwa.com, 1 @@ -106538,7 +108924,7 @@ smmpanelbul.com, 1 smmpanelweb.com, 1 smmpropaganda.ru, 1 smnz.de, 1 -smoe.cc, 0 +smoe.cc, 1 smoivez.tk, 1 smokeanddram.org, 1 smokeandmirrors.agency, 1 @@ -106697,6 +109083,7 @@ sniderman.org, 1 sniderman.pro, 1 sniderman.xyz, 1 sniep.net, 1 +sniffing.gq, 1 snight.co, 1 snille.com, 1 snip.city, 1 @@ -106797,6 +109184,7 @@ soaringtoglory.com, 1 soat.fr, 1 soatplus.com, 1 soax.com, 1 +sobakasite.tk, 1 sobatiment.fr, 1 sobchak.blog, 1 sobersys.com, 1 @@ -107009,6 +109397,7 @@ software-voor-projecten.nl, 1 software.rocks, 1 softwarebeveiligingtestdomein.be, 1 softwarechris.com, 1 +softwarecloud.ml, 1 softwareclub.tk, 1 softwaregeek.nl, 1 softwarepara.net, 1 @@ -107071,6 +109460,7 @@ solarbattery.ga, 1 solarbynatureinc.com, 1 solareagricola.it, 1 solarfaa.ir, 1 +solarfever.ga, 1 solarhome.tk, 1 solariilacheie.ro, 1 solarium.gov, 1 @@ -107161,6 +109551,7 @@ solomo.pt, 1 solomonsklash.io, 1 solongandthanksforallthe.fish, 1 soloparaguas.com, 1 +soloparati.cf, 1 soloprivacidad.com, 1 soloproductos.top, 1 soloreti.com, 1 @@ -107221,6 +109612,7 @@ somedial.ch, 1 somedomain.tk, 1 somefe.pt, 1 somehowsomeday.com, 1 +somehsara.tk, 1 somerm.com, 1 somerprints.co.uk, 1 somersetscr.nhs.uk, 1 @@ -107307,6 +109699,7 @@ sonia.ai, 1 sonia.com, 1 sonia.com.au, 1 soniaai.com, 1 +soniaferrer.tk, 1 sonic.ddns.net, 1 sonic.sk, 0 sonic.studio, 1 @@ -108020,9 +110413,12 @@ spicerack.uk, 1 spiceywraps.co.uk, 1 spicture.in, 1 spicydog.org, 1 +spicydog.tk, 1 spicymatch.com, 1 spicywombat.com, 1 +spidercrabs.tk, 1 spidergymrotterdam.tk, 1 +spidermail.tk, 1 spidermanitalia.tk, 1 spidernet.tk, 1 spideroak.com, 1 @@ -108050,7 +110446,9 @@ spigotdesign.com, 1 spikar.gr, 1 spike-com.be, 1 spike.sh, 1 +spikejeon.tk, 1 spikelands.com, 1 +spilka-dyplomativ.tk, 1 spillbasen.no, 1 spillefuglen.com, 1 spillersfamily.net, 0 @@ -108133,6 +110531,7 @@ spokaneexteriors.com, 1 spokesly.com, 1 spolekatelier.cz, 1 spolshy.com.ua, 1 +spoluck.ca, 1 spolwind.de, 1 spom.net, 1 sponc.de, 1 @@ -108197,12 +110596,14 @@ sportposch.com, 1 sportprint.hr, 1 sports-colleges.com, 1 sports-equipmen.tk, 1 +sports-online.cf, 1 sports.dating, 1 sportsandnews.tk, 1 sportsbookpromocodes.com, 1 sportscanada.tk, 1 sportschoolgeelhoed.nl, 1 sportsdans.tk, 1 +sportsdeck.tk, 1 sportsgraphing.com, 1 sportskibat.tk, 1 sportsmagy.com, 1 @@ -108234,7 +110635,6 @@ spotlabs.uk, 1 spotlessohio.com, 1 spotlightsrule.com, 1 spotonlive.dk, 1 -spotpetins.com, 0 spotsee.io, 0 spotsolutions.com, 1 spotswoodvet.com, 1 @@ -108369,7 +110769,6 @@ sqrl.ch, 1 sqroot.eu, 1 sqsd.xyz, 1 squad.fr, 1 -squadronprotectiveservices.net, 1 squality2.xyz, 1 squardllc.ml, 1 square-gaming.org, 0 @@ -108457,18 +110856,22 @@ srilankan-hope-for-children.nl, 1 srimakc.com, 1 srinivasan.io, 1 sriramdigital.tk, 1 +sriravana.tk, 1 sritafrican.tk, 1 sritbeauty.tk, 1 sritbrazil.tk, 1 sritclassic.tk, 1 srithunters.tk, 1 +sritidaho.tk, 1 sritspanish.tk, 1 +sritvermont.tk, 1 srkarra.com, 1 srkb.net, 1 srle.tk, 1 srmi.biz, 1 srnl.gov, 1 sro.fi, 1 +srochnozaim.gq, 1 srochnyj-zajm.ga, 1 sroma.tk, 1 srorisksolutions.tk, 1 @@ -108532,6 +110935,7 @@ ssh.in.ua, 1 sshbox.tk, 1 sshd.site, 1 sshool.at, 1 +sshwiki.tk, 1 sshx.top, 1 ssk.ovh, 1 sskb-ey.tech, 1 @@ -108688,6 +111092,7 @@ stairfallgames.com, 1 stairlin.com, 0 stairmaster.tk, 1 stairwayrecovery.com, 1 +stajka.tk, 1 stakedate.com, 1 stakestrategy.com, 1 stako.jp, 1 @@ -108701,6 +111106,7 @@ stalder.work, 1 stalevski.tk, 1 stalgeraardsbergen.tk, 1 stalin.tk, 1 +stalker-eyes.ga, 1 stalker-shop.com, 1 stalker-source.tk, 1 stalkerteam.pl, 1 @@ -108831,6 +111237,7 @@ starman.agency, 1 starmtech.fr, 1 staroch.name, 1 starorusing.com, 0 +starover.tk, 1 starpeak.org, 1 starphotoboothsni.co.uk, 1 starpoles.com, 1 @@ -108841,6 +111248,7 @@ starprime.net, 1 starrace.eu, 1 starred.com, 1 starretest.nl, 1 +starreview.tk, 1 starrosesandplants.com, 1 starry.blue, 1 starryvoid.com, 1 @@ -108855,7 +111263,6 @@ starsoft.io, 1 starsportstours.com, 0 starsub.com.au, 1 start-nadlan.co.il, 1 -start-school.by, 1 start-school.online, 1 start.ag, 1 start.biz.id, 1 @@ -109029,6 +111436,7 @@ stealsaga.net, 1 stealth.net, 1 stealthbinders.tk, 1 stealthmodel.fi, 1 +steam-rewards.tk, 1 steam-route-saxony.com, 1 steamcarddelivery.com, 1 steamcars.be, 1 @@ -109049,6 +111457,7 @@ steamsprays.tk, 1 steamstat.us, 1 steamstatus.cn, 1 steamtrades.com, 1 +stebenkov.tk, 1 steborio.pw, 1 steckel.cc, 1 stecos.co.uk, 1 @@ -109080,6 +111489,7 @@ steemworld.org, 1 steemyy.com, 1 steenkampskraal.com, 1 steenwijkerland.nl, 1 +steering-wheel.tk, 1 steeve-legal-photographie.fr, 1 steevels.nl, 1 stefamedia.com, 1 @@ -109130,7 +111540,6 @@ steinibox.de, 1 steinmassl.org, 1 steinmetz.cloud, 1 stekelenburg.me, 1 -steklein.de, 1 stekosouthamerica.com, 1 stelfox.net, 1 stelga.ca, 1 @@ -109184,9 +111593,11 @@ steparovi.cz, 1 steph.ninja, 1 steph3n.me, 1 stephan-matthiesen.de, 1 +stephanao.tk, 1 stephandriessen.tk, 1 stephaniecalahan.com, 1 stephaniedeady.ie, 1 +stephanieleonidasfan.tk, 1 stephanieschreiber.com, 1 stephenbakalian.com, 1 stephencorp.com, 1 @@ -109270,6 +111681,7 @@ stevegrav.es, 1 stevejcraig.com, 1 stevejobsfollowers.tk, 1 stevemario.com, 1 +stevemason.tk, 1 stevemonteyne.be, 1 steven-klix.de, 0 steven.photos, 1 @@ -109336,6 +111748,7 @@ stichtingsticky.nl, 0 stichtingwwtoegankelijk.nl, 1 stick2bike.de, 1 stickandpoketattookit.com, 1 +stickeramoi.com, 1 stickerparadise.me, 1 stickers-garage.com, 1 stickertrade.me, 1 @@ -109525,6 +111938,7 @@ stoinov.com, 1 stoketalent.com, 1 stokl.com.au, 0 stokrotkadelikatesy.pl, 1 +stolarka.tk, 1 stolarstvi-jiriholy.cz, 1 stolbart.com, 1 stolin.info, 1 @@ -109564,6 +111978,7 @@ stonemanbrasil.com.br, 1 stoneocean.net, 1 stoneproperty.ie, 1 stonesgarden.pl, 1 +stonetribute.tk, 1 stonewallwcidtx.gov, 1 stonewuu.com, 1 stoningtonboroughct.gov, 1 @@ -109584,6 +111999,7 @@ stoomtreinreizen.com, 1 stoomtreinreizen.eu, 1 stoomtreinreizen.nl, 1 stoomtreinreizen.org, 1 +stop-activ.ga, 1 stop-bankrotstvu.ru, 1 stop-microsoft.org, 1 stop-russia.tk, 1 @@ -109607,7 +112023,6 @@ stopthemoss.com, 1 stoptheperio.com, 1 stopthethyroidmadness.com, 1 stopthinkconnect.jp, 1 -stoptrading.co.uk, 1 stopvirus.in, 1 stor-guard.com, 1 storage-base.de, 1 @@ -109633,6 +112048,7 @@ storeforward.eu, 1 storeforward.net, 1 storeforward.nl, 1 storeforward.org, 1 +storefront.gq, 1 storeinstallieren.com, 1 storeisrael.co.il, 1 storeit.co.uk, 1 @@ -109656,10 +112072,12 @@ stormairsoft.tk, 1 stormboost.cz, 1 stormdamages.claims, 1 stormfest.tk, 1 +stormhub.ml, 1 stormi.io, 1 stormlab.tk, 1 stormrider.tk, 1 stormwatcher.org, 1 +stormylegions.tk, 1 storspillercasino.com, 1 storungssuche.com, 1 storvann.net, 1 @@ -109767,7 +112185,6 @@ strategicemailservices.com, 1 strategicenvironmentalassessment.gov.scot, 1 strategiclivingblog.com, 1 strategicmedconsult.com, 1 -strategicmind.com, 1 strategicpartnersmedia.com, 1 strategie-zone.de, 1 stratego-belgie.tk, 1 @@ -109799,6 +112216,7 @@ strauss.tirol, 1 stravato.com, 1 stravato.net, 1 stravers.shoes, 1 +strawberries.tk, 1 strawberry-laser.gr, 1 strawberry.tw, 1 strawberrydreadlocks.tk, 1 @@ -109901,6 +112319,7 @@ striperite.com, 1 stripped-anarchy.xyz, 1 striptizer.tk, 1 strixmusic.com, 1 +strl-tunis.tk, 1 strm.pl, 1 strmgt.com, 1 strn.pl, 1 @@ -109914,6 +112333,7 @@ strogov.me, 1 strogova.me, 1 stroifenix.ru, 1 stroigid.tk, 1 +stroimvse.ml, 1 stroiproect.tk, 1 strojmaster.tk, 1 stroke-of-luck.com, 1 @@ -110004,7 +112424,9 @@ studentaid.gov, 1 studentenmobiliteit.be, 1 studentenplaza.tk, 1 studenterguiden.dk, 1 +studentexpat.com, 1 studentforums.biz, 1 +studenti.tk, 1 studentinaneta.com, 1 studentingent.be, 1 studentite.bg, 1 @@ -110152,6 +112574,8 @@ stupendousproduce.com, 1 stupidcupid.tk, 1 stupidest.org, 1 stupidstatetricks.com, 1 +stupidthoughts.tk, 1 +stupino-stroy.cf, 1 stut.tk, 1 stutelage.com, 1 stutsmancounty.gov, 1 @@ -110185,6 +112609,7 @@ styleci.io, 1 styleclub.tk, 1 stylecollective.us, 1 styledbysally.com.au, 1 +styleelite.tk, 1 styleetvieperfumes.com, 1 styleflow.nl, 1 stylepixo.com, 1 @@ -110224,7 +112649,6 @@ subanelvolumen.tk, 1 subarupartsdeal.com, 1 subastasdecarros.net, 1 subbl.co, 1 -subdev.org, 1 subdivider.tk, 1 subestan.tk, 1 subic.ga, 1 @@ -110293,6 +112717,8 @@ sucsses.ga, 1 sucsses.gq, 1 sucyshop.fr, 1 sudabaus.com, 1 +sudametrica.tk, 1 +sudanell.tk, 1 sudanindependent.com, 1 sudanindependent.net, 1 sudaraka.org, 0 @@ -110310,6 +112736,7 @@ sudoschool.com, 1 sudosu.fr, 1 sudtirol.com, 1 sudya-dredd.ru, 1 +suecaunitedfc.tk, 1 suedtirolerhotels.it, 1 suelyonjones.com, 1 suempresa.cloud, 1 @@ -110350,6 +112777,7 @@ sugos.gq, 1 sugos.ml, 1 suhaildawood.com, 1 suhost.com.br, 1 +suicide.gq, 1 suicidepreventioncenter.tk, 1 suike.com, 1 suikerspinnetje.nl, 1 @@ -110394,6 +112822,7 @@ sumatphoto.com, 1 sumatrabarat.cf, 1 sumatrabarat.ga, 1 sumatrabarat.gq, 1 +sumatrabarat.ml, 1 sumatrabarat.tk, 1 sumatraselatan.cf, 1 sumatraselatan.ga, 1 @@ -110405,6 +112834,7 @@ sumatrautara.gq, 1 sumatrautara.ml, 1 sumatrautara.tk, 1 sumatriptan365.tk, 1 +sumcrevillent.tk, 1 sumecho.com, 1 sumit.blog, 1 sumit.sh, 1 @@ -110413,6 +112843,7 @@ sumitchahal.com, 1 sumiyakimatsu.com, 1 sumkunado.ru, 1 summa.eu, 0 +summarized.gq, 1 summer.ga, 1 summer.today, 1 summerbo.at, 1 @@ -110534,6 +112965,7 @@ sunsetmusic.tk, 1 sunsetnelson.com, 1 sunsetweb.fr, 1 sunsetwx.com, 1 +sunshilin.tk, 1 sunshine-cleaners.com.au, 1 sunshinelife.tk, 1 sunshinelocksmith.com, 1 @@ -110596,6 +113028,7 @@ superbugs.nl, 1 superbuy.com.tw, 1 supercalorias.com, 1 supercarpets.ru, 1 +supercarrot.tk, 1 supercastlesadelaide.com.au, 1 supercastlesbrisbane.com.au, 1 supercastlesmelbourne.com.au, 1 @@ -110661,12 +113094,14 @@ superlight.tk, 1 superlisa.nl, 1 superlog.tk, 1 supermae.pt, 1 +supermagna.tk, 1 supermarkets.ga, 1 supermarx.nl, 1 supermedia.cool, 1 supermercadosdia.com.ar, 1 supermercato24.it, 1 supermil.ch, 1 +supermustang.tk, 1 supern0va.net, 0 supernatural-fans.tk, 1 supernaturalbrand.com, 1 @@ -110680,6 +113115,7 @@ superraclette.fr, 1 supersahnetorten.de, 1 supersandro.de, 1 superseguros.gob.do, 1 +superservers.ml, 1 supershrooms.nl, 1 supersocial.net, 1 supersole.net, 0 @@ -110687,6 +113123,7 @@ supersolenoid.tk, 1 supersonicsoft.com, 1 superspeller.ng, 1 superstargossip.com, 1 +superstarhost.tk, 1 supersteosbouncycastles.com, 1 superstone.diamonds, 1 superstropdas.nl, 1 @@ -110694,6 +113131,7 @@ supersu.kr, 1 superswingtrainer.com, 1 supertasker.org, 1 supertoc.com, 1 +supertrade.tk, 1 supertrophy.de, 1 supertutorial.com.br, 1 supervasan.se, 1 @@ -110742,7 +113180,9 @@ supreme-council.me, 1 supremestandards.com, 1 supriville.com.br, 1 supweb.ovh, 0 +suranganet.tk, 1 surasak.org, 1 +surasak.tk, 1 suravi.in.net, 1 suraya.online, 1 sure-it.de, 1 @@ -110864,6 +113304,7 @@ suzannejauchius.com, 1 suzi3d.com, 1 suziekovner.com, 1 suziepachecoart.com, 1 +suzikogsm.tk, 1 suzukiarindo.co.id, 1 suzukibali.id, 1 suzukicintadamai.co.id, 1 @@ -110878,6 +113319,7 @@ suzukitradajatim.co.id, 1 suzukiumc.co.id, 1 sv-1966-medenbach.de, 0 sv-bachum-bergheim.de, 1 +sv-ec-ditzingen.de, 1 sv-schody.cz, 1 sv-turm-hohenlimburg.de, 1 sv.search.yahoo.com, 0 @@ -110960,6 +113402,7 @@ svodjapan.info, 1 svoi-ugolok.tk, 1 svoimi-slovami.tk, 1 svorcikova.cz, 1 +svorkmofotball.tk, 1 svpe.de, 1 svpe.eu, 1 svrx.one, 1 @@ -111020,6 +113463,7 @@ swdevteam.com, 1 swe77.com, 1 swe777.com, 1 sweak.net, 1 +sweat-shirts.tk, 1 sweatercon.com, 1 swecha.org, 1 swedbank.se, 1 @@ -111132,7 +113576,6 @@ swisservers.com, 1 swissfreshaircan.ch, 0 swissfreshaircan.com, 0 swissgrid.ch, 1 -swissid.ch, 1 swissinternationalva.com, 1 swisslifestyletips.ch, 1 swisslinux.org, 1 @@ -111230,6 +113673,7 @@ sykepleien.no, 0 sykiotis.com, 1 sykorp.com, 1 sylaps.com, 1 +sylencegsm.com, 1 sylfie.net, 1 sylino.tk, 1 syllogi.xyz, 1 @@ -111258,6 +113702,7 @@ symbridge.com, 1 symdevinc.com, 1 symeda.de, 1 symeonchen.com, 1 +symetrix.tk, 1 symetryk.tk, 1 symflower.com, 1 symfora-meander.nl, 1 @@ -111355,7 +113800,6 @@ sys-state.de, 1 sys-tm.com, 1 sys.pub, 0 sysadmin.pm, 1 -sysadmin.xyz, 1 sysadmin21.tk, 1 sysadmins.ro, 1 sysadvisors.pl, 1 @@ -111579,6 +114023,7 @@ ta-soest.nl, 0 ta65.com, 1 taabe.net, 1 taaltaal.nl, 1 +taanishsaifu.gq, 1 taapk.com, 1 taartbesteld.nl, 1 taartenvankoenie.tk, 1 @@ -111658,10 +114103,12 @@ tacticalsquare.com, 0 tacticalvote.co.uk, 1 tacticalwebmedia.com, 1 tad.ua, 1 +tadalafilindia.gq, 1 taddiestales.com, 1 tadinfos.fr, 1 tadj-mahalat.com, 0 tadjiki.tk, 1 +tadjikistan.tk, 1 tadluedtke.com, 1 tadtadya.com, 1 tadu.de, 1 @@ -111688,6 +114135,7 @@ tagesmutter-in-bilm.de, 1 taggedpdf.com, 0 taggermedia.com, 1 taggeru.com, 1 +taggigkaktus.tk, 1 taghit.tk, 1 tagid.ga, 1 tagid.tk, 1 @@ -111729,6 +114177,7 @@ taidu.news, 1 taifun-software.de, 1 taiga-aikidojo.tk, 1 taigalaloca.net, 1 +taihesy.tk, 1 taijul.tk, 1 taikhoanfree.com, 1 taikodom.tk, 1 @@ -111793,6 +114242,7 @@ takehomepay.uk, 1 takeitback.tk, 1 takeiteasyy.com, 1 takemydodgecoins.com, 1 +taken.cf, 1 taken.pl, 1 takeomi.jp, 1 takepicturesleavefootprints.com, 1 @@ -111920,6 +114370,7 @@ tamayahousing.com, 1 tambayology.com, 1 tambo.es, 1 tamboa.com, 1 +tambov.tk, 1 tambovcity.tk, 1 tambre.ee, 1 tamchunho.com, 1 @@ -111936,6 +114387,7 @@ tammie.ga, 1 tammiku.edu.ee, 1 tammy.pro, 1 tamoxifen-citrate.gq, 1 +tamoxifen-citrate.ml, 1 tamoxifenformen.ga, 1 tampa.gov, 1 tampabaybusinesslistings.com, 1 @@ -112071,6 +114523,7 @@ taqun.club, 1 tarabici.tk, 1 tarabooks.com, 1 tarahancenter.com, 1 +tarakan-klopik.tk, 1 taranagar.tk, 1 tarantino.tk, 1 tarantul.org.ua, 1 @@ -112101,6 +114554,7 @@ targoncavasarlas.hu, 1 tarife.at, 1 tariff.cc, 1 tarihvakti.com, 1 +tarija.tk, 1 tarik.io, 1 tarikigaru.ga, 1 tarimaferial.com, 1 @@ -112141,6 +114595,7 @@ tarugo.net.br, 1 taruntarun.net, 1 tarus.gq, 1 tarvoo.com, 1 +tarzanka.ml, 1 tas.best, 1 tas2580.net, 0 tasarimgazetesi.com, 1 @@ -112152,6 +114607,7 @@ tasefiling.gov, 1 tashicell.com, 1 tasintrip.com, 1 taskforce.eu, 1 +taskhorizon.audio, 1 taskin.me, 1 taskman.london, 1 taskotron.fedoraproject.org, 1 @@ -112188,12 +114644,14 @@ tataria.tk, 1 tatarin.ga, 1 tataru.it, 1 tatarworld.tk, 1 +tatary.tk, 1 tate.com, 1 tateishi-ip.com, 1 tatercraft.org, 1 taters.org, 1 tatfan.com, 1 tathanhson.com, 1 +tatiana-kpb.tk, 1 tatildukkani.com, 1 tatjana-young.net, 1 tatler.com, 1 @@ -112203,6 +114661,7 @@ tatort-fanpage.de, 1 tatsidou.gr, 1 tatsumi-air.com, 1 tatteredatlastales.com, 1 +tattoo-art.tk, 1 tattoo.dating, 1 tattoo.roma.it, 1 tattoocorina.tk, 1 @@ -112217,10 +114676,10 @@ taubenartikel.de, 1 taubin.cc, 1 tauedu.org, 1 taufers.info, 1 -taug2d.xyz, 1 tauntongolf.co.uk, 1 taunusstein.net, 1 tauran.net, 1 +tauriscia.tk, 1 taurusgaming.com, 1 tauschen.info, 1 tava.tk, 1 @@ -112246,6 +114705,7 @@ taxhawk.com, 1 taxhunter.com.au, 1 taxi-chamonix.fr, 0 taxi-collectif.ch, 0 +taxi-domzale.tk, 1 taxi-doudoune.fr, 1 taxi-edessas.gr, 1 taxi-jihlava.cz, 1 @@ -112264,6 +114724,7 @@ taxicollectif.ch, 0 taxid-k.be, 1 taxihungary.com, 0 taxikraken.tk, 1 +taximinvody.ml, 1 taximovies.gq, 1 taxipool.co.il, 1 taxis-collectifs.ch, 0 @@ -112360,7 +114821,6 @@ tcb-b.org, 1 tcbdarts.nl, 1 tccb.gov.tr, 1 tccc.org.tw, 1 -tcckonsult.com, 1 tccmb.com, 1 tccportal.com, 1 tcdn.tech, 1 @@ -112544,6 +115004,7 @@ teampz.com, 1 teamr3set.com, 1 teamrecess.com, 1 teamredfox.tk, 1 +teamrevolution.tk, 1 teamroom.jp, 1 teams.microsoft.us, 1 teamsakura.net, 1 @@ -112588,6 +115049,7 @@ teaser-trailer.com, 1 teasers.ga, 1 teatrarium.com, 1 teatroutopia.tk, 1 +teazer.tk, 1 teb-akademia.pl, 1 tebebo.com, 1 tebian.tk, 1 @@ -112703,6 +115165,7 @@ techindiana.tk, 1 techinet.pl, 1 techinsurance.com, 1 techiseasy.it, 1 +techisfake.ga, 1 techitalk.ga, 1 techitsol.tk, 1 techiwant.com, 1 @@ -112744,11 +115207,13 @@ technicalhelps.org, 1 technicalhub.tk, 1 technicallyeasy.net, 1 technicalmarine.solutions, 1 +technicalproblem.tk, 1 technicaltrainer.co.za, 1 technicalustad.com, 1 technicodelabels.com, 1 techniqueelevage.ddns.net, 0 technisys.com, 1 +technochat.in, 1 technodance.tk, 1 technodemarkt.bg, 1 technodevelopmentera.tk, 1 @@ -112796,6 +115261,7 @@ technolution.tk, 1 technomagia.tk, 1 technomix.tk, 1 technorthdakota.tk, 1 +technosapien.ml, 1 technosorcery.net, 1 technospeakco.com, 1 technostone.tk, 1 @@ -112807,6 +115273,7 @@ technotoday.com.tr, 1 technotronikcanada.ca, 0 technovisioneng.com, 1 technowikis.com, 1 +technowise.tk, 1 technowiz.tk, 1 technoyl.com, 1 technuggets.io, 1 @@ -112826,6 +115293,7 @@ techsalot.com, 1 techsat.tk, 1 techsaviours.online, 1 techsaviours.org, 1 +techserve.ml, 1 techsharetx.gov, 1 techshift.eu, 1 techshift.nl, 1 @@ -112853,6 +115321,7 @@ techvigil.org, 1 techvillian.com, 1 techvision.tk, 1 techvoice.tk, 1 +techwalker.cf, 1 techwallet.tk, 1 techwithcromulent.com, 1 techwolf12.nl, 1 @@ -112862,6 +115331,7 @@ techzero.cn, 1 techzhou.com, 1 techzjc.com, 0 tecit.ch, 1 +tecke.tk, 1 teckgeekz.com, 1 tecknobox.fr, 1 tecknologg.website, 1 @@ -112943,6 +115413,7 @@ teensexgo.com, 1 teenslesbian.com, 1 teenviet.ga, 1 teenwebcams.ml, 1 +teenwolfturkey.tk, 1 teenworlds.tk, 1 teeqq.com, 1 teerer.tk, 1 @@ -113087,6 +115558,7 @@ telenovelas-france.tk, 1 teleogistic.net, 1 telepedia.pl, 1 telephonedirectories.us, 1 +telephoni-cdma.tk, 1 telepilote-academy.fr, 1 telepok.com, 1 telepons.com, 1 @@ -113095,6 +115567,7 @@ teleport.sh, 1 teleport.video, 1 teleportart.gq, 1 teleportweb.com.br, 1 +teleradio.tk, 1 telesales.guru, 1 teleshkronja.ml, 1 teleshop.be, 1 @@ -113162,6 +115635,7 @@ temp37c.com, 1 tempa.com.ua, 1 tempdatalogger.com, 1 tempdomain.ml, 1 +tempdomain.tk, 1 temperodojuca.com.br, 1 tempestsoft.com, 1 tempfiles.ninja, 1 @@ -113169,6 +115643,7 @@ templars.army, 1 template-help.fr, 1 templated.ga, 1 templeandalucia.tk, 1 +templete.tk, 1 tempmail.ninja, 1 tempo.co, 1 tempocams.com, 1 @@ -113178,6 +115653,7 @@ tempoprimo.com, 1 temporalmotivation.com, 1 temporaris.com, 1 temporaryair.com, 1 +temporarysanity.tk, 1 tempsdexpo.com, 1 tempsoundsolutions.tk, 1 tempus-aquilae.de, 1 @@ -113304,9 +115780,9 @@ terborg600.nl, 1 tercelonlinelat.tk, 1 tercosdemaria.com.br, 1 terence2008.info, 1 +terengganudaily.tk, 1 terento.org, 1 tereotech.net, 1 -teriiphotography.com, 1 teritwarsj.org, 1 teriyakisecret.com, 1 term-master.ru, 1 @@ -113366,6 +115842,7 @@ terrapay.com, 1 terrapinstationmd.com, 1 terraquercus.tk, 1 terrariatr.tk, 1 +terrarium.tk, 1 terrariumcare.com, 1 terrasandcooking.nl, 1 terrasearcher.tk, 1 @@ -113382,6 +115859,7 @@ terres-et-territoires.com, 1 terresmagiques.com, 0 territoriya.tk, 1 terrorbilly.com, 1 +terrorblast.tk, 1 terrorism.lol, 1 terrty.net, 1 terryburton.co.uk, 1 @@ -113396,6 +115874,7 @@ tervolina.tk, 1 tesche.biz, 1 tescoirelandpayslips.com, 1 tescoludia.sk, 1 +tesdrole.tk, 1 tesharp.com, 1 teskaassociates.com, 1 teskalabs.com, 1 @@ -113411,7 +115890,10 @@ tessla.org, 1 test-coz.online, 1 test-do.space, 1 test-eligibilite-isolation.com, 1 +test-iq.gq, 1 test-na-beremennost.tk, 1 +test-online.tk, 1 +test-school.ml, 1 test-sev-web.pantheonsite.io, 1 test-textbooks.com, 1 test-zahnzusatzversicherung.de, 1 @@ -113435,6 +115917,7 @@ testenopreis.nl, 1 testeri.fi, 1 testermerch.pl, 1 testeveonline.com, 1 +testforce.tk, 1 testfra.me, 1 testgeomed.ro, 1 testic.com, 1 @@ -113471,6 +115954,7 @@ testsitefortask.xyz, 1 testsnelcovid.nl, 1 testspsicotecnicos.org, 1 testsuite.org, 1 +testthis.cf, 1 tetangers.tk, 1 tetedelacourse.ch, 1 tetete-no-te.com, 1 @@ -113555,6 +116039,7 @@ textiles.tk, 1 textinmate.com, 1 textlinktausch.tk, 1 textonly.email, 1 +textpages.tk, 1 textpattern.com, 1 textpro.xyz, 1 textprotocol.org, 1 @@ -113651,12 +116136,14 @@ thaigirls.cf, 1 thaihomecooking.com, 1 thaihong.co.th, 1 thaihong.com, 1 +thaihotmodels.tk, 1 thailandguru.properties, 1 thailandhotel.tk, 1 thailandtrends.com, 1 thaimega.club, 1 thaiorchidpetoskey.com, 1 thaipbspodcast.com, 1 +thaiportal.gq, 1 thairad.com, 1 thaisurveys.com, 1 thaitonic.de, 1 @@ -113677,6 +116164,7 @@ thalikkunushivatemple.tk, 1 thalliman.com, 1 thallinger.me, 1 thalmann.fr, 0 +thambaru.com, 1 thamesfamilydentistry.com, 1 thamesvalleybuses.com, 1 thammachartconnect.com, 1 @@ -113707,6 +116195,7 @@ thca.ca, 1 thda.org, 1 the-ace.tk, 1 the-archive.io, 1 +the-archive.ml, 1 the-azad.com, 1 the-bermanns.com, 1 the-big-bang-theory.com, 1 @@ -113751,6 +116240,7 @@ the-world.tk, 1 the-zenti.de, 1 the12by12.com, 1 the3musketeers.biz, 1 +the51news.ga, 1 the5th.nl, 1 the8rules.co.uk, 1 thea-team.net, 1 @@ -113774,6 +116264,7 @@ thealonas.cf, 1 thealonas.ga, 1 thealonas.gq, 1 thealonas.ml, 1 +thealonas.tk, 1 theamandatappingclub.tk, 1 theamandatappingcontest.tk, 1 theangelgivingtree.com, 1 @@ -113799,6 +116290,7 @@ theataraxiazine.tk, 1 theater.cf, 1 theaterbyte.com, 1 theatergroep-o.nl, 1 +theaterreichenhall.tk, 1 theatersydney.com, 1 theatheistbook.com, 1 theathletic.com, 1 @@ -113818,6 +116310,7 @@ thebabelog.gq, 1 thebabypassport.com, 1 thebacksplashcompany.com, 1 thebackstage.tk, 1 +thebacteriafight.gq, 1 thebakersbuddy.co.uk, 1 thebakery2go.de, 1 thebannerstore.com, 1 @@ -113923,6 +116416,7 @@ thecandidforum.com, 1 thecandystore.tk, 1 thecardcloset.com, 1 thecarolingconnection.com, 1 +thecarpenters.tk, 1 thecarphunter.tk, 1 thecarriagerooms.com, 1 thecatbowl.com.au, 1 @@ -114007,6 +116501,7 @@ thedark.ga, 1 thedark1337.com, 1 thedarkages.tk, 1 thedarkartsandcrafts.com, 1 +thedarkfusion.tk, 1 thedarksidesoftwaresecurity.ga, 1 thedarkteam.tk, 1 thedave.link, 1 @@ -114116,6 +116611,7 @@ theformtool.com, 1 thefox.com.fr, 1 thefoxstrousers.co.nz, 0 thefoxtalk.com, 0 +thefreebay.tk, 1 thefrenchconnection.tk, 1 thefridaycinema.com, 1 thefriedzombie.com, 1 @@ -114263,7 +116759,6 @@ thejukebox.tk, 1 thejump.live, 1 thejunctionstudios.com, 1 thejunkfiles.com, 1 -thekanis.com, 1 thekapi.xyz, 1 thekev.in, 1 thekeymusic.com, 1 @@ -114276,11 +116771,14 @@ thekitchenprofessor.com, 1 thekitchngic.com, 1 thekittivibe.com, 1 thekliniquehotdeal.com, 1 +theknockout.tk, 1 theknowitguy.com, 1 +thekonsulthub.tk, 1 thekovnerfoundation.org, 1 thekuwayama.net, 1 thelafayettecompany.com, 1 thelaimlife.com, 1 +thelakedistrict.tk, 1 thelanscape.com, 1 thelansingjournal.com, 1 thelapine.ca, 1 @@ -114291,6 +116789,7 @@ thelazyfox.xyz, 1 thelazysre.com, 1 thelbc.io, 0 theleaves.tk, 1 +thelegaldirector.co.uk, 1 thelegionshirley.co.uk, 1 thelematics.com, 1 thelemonlawcalifornia.com, 1 @@ -114422,6 +116921,7 @@ theoc4ever.tk, 1 theocharis.org, 1 theocoffee.com, 1 theocracy.tk, 1 +theocratic.cf, 1 theocratic.tk, 1 theocrazzolara.tk, 1 theodorahome.co, 1 @@ -114458,6 +116958,7 @@ theory.org, 1 theoryofmind.tk, 1 theoscure.eu, 1 theosforum.org, 1 +theosophic.ga, 1 theosophie-afrique.org, 1 theotherconcept.be, 0 theotherside.tk, 1 @@ -114477,6 +116978,7 @@ thepaul.tk, 1 thepaulagcompany.com, 0 thepavilionbanbury.co.uk, 1 thepaymentscompany.com, 1 +thepcweb.tk, 1 thepeak.com, 1 thepenguinconspiracy.tk, 1 thepennyjar.com, 1 @@ -114514,7 +117016,10 @@ theprimetalks.com, 0 theprincegame.com, 1 thepriorybandbsyresham.co.uk, 1 theprivacysolution.com, 1 +theproject.cf, 1 +theprojectx.tk, 1 thepromisemusic.com, 1 +theptclist.tk, 1 theptpractitioner.com.au, 1 thepulpit.tk, 1 thepuppetdolls.tk, 1 @@ -114550,6 +117055,7 @@ therealcost.gov, 1 therealcountrydancers.tk, 1 thereaper.net.au, 1 thereaper.tk, 1 +theredsgazette.tk, 1 thereisnocloud.fr, 1 thereload.com, 1 therenderingmachine.com, 1 @@ -114617,6 +117123,7 @@ theseofarm.com, 1 theseoframework.com, 1 theseosystem.com, 1 thesepticgroup.com, 1 +theserpent.tk, 1 theserver.ml, 1 theserver201.tk, 1 theserviceyouneed.com, 1 @@ -114711,6 +117218,7 @@ thetipo01.tk, 1 thetogbox.cf, 1 thetomharling.com, 1 thetopflight.com, 1 +thetopmovie.gq, 1 thetorlock.com, 1 thetotalemaildelivery.com, 1 thetoto.tk, 1 @@ -114745,6 +117253,7 @@ thevacweb.com, 1 thevalentineconstitution.com, 1 thevalleybucketeers.tk, 1 thevalueofarchitecture.com, 1 +thevanishedvoyager.ml, 1 thevegcat.com, 1 theveggietable.com, 1 theveils.net, 1 @@ -114871,6 +117380,7 @@ thijsvanderveen.net, 1 thikkodi.tk, 1 thilko.com, 1 thilobuchholz.de, 1 +thimbros.tk, 1 thimic.net, 1 thimic.no, 1 thinair.co, 1 @@ -114988,6 +117498,7 @@ thomaspic.com, 1 thomaspluschris.com, 1 thomass.tk, 1 thomasstevensmusic.com, 0 +thomastestor.tk, 1 thomastimepieces.com.au, 1 thomastonmaine.gov, 1 thomasverhelst.be, 1 @@ -115304,6 +117815,7 @@ tierparadies-muhrielle.org, 1 tierracenter.com, 1 tierradeayala.com, 1 tierrahost.com, 1 +tierraprohibida.net, 1 tierschutz-niederrhein.de, 1 tiestofan.tk, 1 tietew.jp, 1 @@ -115328,6 +117840,7 @@ tiga-design.com, 1 tiger-seo.com, 1 tigercam.cl, 1 tigerdile.com, 1 +tigerfm.tk, 1 tigergroup.tk, 1 tigernero.duckdns.org, 1 tigernode.com, 1 @@ -115342,6 +117855,7 @@ tigit.co.nz, 1 tiglitub.com, 1 tigreblanco.tk, 1 tigzirt.tk, 1 +tihvin.tk, 1 tii.audio, 1 tii.party, 1 tiihosen.fi, 1 @@ -115423,6 +117937,8 @@ timdemisch.email, 1 timdemisch.eu, 1 timdemisch.online, 1 timdoug.com, 1 +time-business.tk, 1 +time-hotel.cf, 1 time.cy, 1 time.gov, 1 time.ly, 1 @@ -115456,6 +117972,7 @@ timepassengers.tk, 1 timeprison.tk, 1 timepro.sk, 1 timer.fit, 0 +timerace.ml, 1 timeroll.ml, 1 timersuite.com, 1 timertomato.com, 1 @@ -115488,6 +118005,7 @@ timfiedler.net, 1 timgame.tk, 1 timhieuthuoc.com, 1 timi-matik.hu, 1 +timich.ga, 1 timilion.tk, 1 timing.com.br, 1 timjk.de, 0 @@ -115505,6 +118023,7 @@ timonline.tk, 1 timosfoodbar.nl, 1 timoso.de, 1 timotheeduran.com, 1 +timothy.tk, 1 timothybjacobs.com, 1 timowi.de, 1 timoxbrow.com, 1 @@ -115558,6 +118077,7 @@ tinlook.com, 1 tinmarin.org, 1 tinminnow.me, 1 tinneke.tk, 1 +tinnhanhvietnam.tk, 1 tinnitus.tirol, 1 tinte24.de, 1 tintenfix.net, 1 @@ -115607,6 +118127,7 @@ tippytoad.com, 1 tipranks.com, 1 tips4gamers.com, 1 tips4india.tk, 1 +tipsavvy.ca, 1 tipsforgamers.com, 1 tipslifetimefitness.gq, 1 tipsmake.com, 1 @@ -115630,6 +118151,7 @@ tirionnetwork.de, 1 tirlins.com, 1 tiroler-kupferschmiede.com, 1 tirs4ne.ch, 0 +tirteafuera.tk, 1 tirupatinightwear.co.in, 1 tis-mark.ru, 1 tischlerei-geher.at, 1 @@ -115653,7 +118175,6 @@ titanfile.com, 1 titanicauto.ro, 1 titaniumangel.com, 1 titaniumconsulting.co.uk, 1 -titanlinux.com, 1 titansized.com, 1 titantax.com, 1 titanwaterproofing.com.au, 1 @@ -115760,7 +118281,9 @@ tmberg.cf, 1 tmberg.eu.org, 1 tmberg.ga, 1 tmberg.gq, 1 +tmberg.ml, 1 tmberg.se.eu.org, 1 +tmberg.tk, 1 tmbergtmberg.cf, 1 tmbergtmberg.ga, 1 tmbergtmberg.gq, 1 @@ -115914,9 +118437,9 @@ todayer.ru, 1 todayfinance.news, 1 todayfinancial.news, 1 todaymeow.com, 1 -todaynewsafrica.com, 1 todayprice.ga, 1 todaysbestinsurance.com, 1 +todayupdates.ga, 1 toddcullumresearch.com, 1 toddexler.com, 1 toddfry.com, 1 @@ -116042,9 +118565,11 @@ toldos-en-stock.es, 1 toldos.curitiba.br, 1 toldosecoberturasbh.com.br, 1 toldosemcuritiba.com, 1 +toledo.tk, 1 toledoclassifieds.net, 1 toledoescorts.net, 1 toledotrainday.org, 1 +tolerance-zero.tk, 1 toleressea.fr, 1 toles-sur-mesure.fr, 1 tolibanana.com, 1 @@ -116169,6 +118694,7 @@ toms.ovh, 1 tomschlick.com, 1 tomsdevsn.me, 1 tomsick.it, 1 +tomsk.ml, 1 tomslawadvice.com, 1 tomsoft.hr, 1 tomspdblog.com, 1 @@ -116233,6 +118759,7 @@ tonkawaok.gov, 1 tonkayagran.ru, 1 tonnycat.com, 1 tono.us, 1 +tonorosario.tk, 1 tonsit.com, 1 tonsit.org, 0 tonton.cf, 1 @@ -116267,6 +118794,7 @@ tookan.tech, 1 tookhan.tk, 1 tool.lu, 1 toolbox.ninja, 0 +toolboxsoftware.tk, 1 toolineo.de, 1 toolip.gr, 1 toolkits.design, 1 @@ -116278,6 +118806,7 @@ toolsbit.com, 1 toolsense.io, 1 toolset.com, 1 toolsforbiblestudy.com, 1 +toolspain.tk, 1 toolsu.com, 1 tooltot.com, 1 toolzone.cz, 1 @@ -116298,9 +118827,11 @@ toool.nl, 1 toool.nyc, 1 toool.org, 1 toopita.com, 1 +toopopular.ga, 1 toot.center, 1 toothdoc.ca, 1 toothimplantsydney.com.au, 1 +toothpique.tk, 1 toothsearch.tk, 1 tooti.biz, 1 tootl.org, 1 @@ -116318,11 +118849,13 @@ top-kuwait.com, 1 top-maigrir.fr, 1 top-melody.ru, 1 top-messenger.com, 1 +top-mining.tk, 1 top-model.biz, 1 top-obaly.cz, 1 top-opakowania.pl, 1 top-rensner.de, 1 top-rezepte.de, 1 +top-russian.tk, 1 top-schools.tk, 1 top-shashlik.com.ua, 1 top-verhandlungstraining.de, 1 @@ -116334,6 +118867,7 @@ top100games.ml, 1 top10antivirus.review, 1 top10directory.tk, 1 top10list.tk, 1 +top10media.tk, 1 top10mountainbikes.info, 1 top4shop.de, 1 top6casinos.com, 1 @@ -116399,6 +118933,7 @@ topideipodarkov.ru, 1 topirishcasinos.com, 1 topjeans.ga, 1 topjobs.ch, 1 +topknot.gq, 1 topkorea.ml, 1 toplevel.mx, 1 toplifesaudaveis.com.br, 1 @@ -116452,6 +118987,7 @@ topshoptools.com, 1 topsnow.ru, 1 topspace.tk, 1 topspani.cz, 1 +topspin.tk, 1 topsteroidsonline.com, 1 topsvet.ru, 1 toptapety.cz, 1 @@ -116471,7 +119007,9 @@ toptravel.tk, 1 toptravelgram.com, 1 toptur.tk, 1 topupandearn.com, 1 +topurls.tk, 1 topvertimai.lt, 1 +topviet.ga, 1 topvision.es, 1 topvision.se, 1 topvpn.pl, 1 @@ -116500,6 +119038,7 @@ torfbahn.de, 1 torg-room.ru, 1 torg-ug.ru, 1 torgoborud.tk, 1 +torgopt.tk, 1 torgovaya.tk, 1 torgyug.ru, 1 torigaoka-dc.com, 1 @@ -116513,6 +119052,7 @@ torkware.com, 1 torlock.com, 1 torlock2.com, 1 tormentedradio.com, 0 +tormox.ml, 1 tornado-map.de, 1 tornadoarchiv.ml, 1 tornadoautos.com, 1 @@ -116527,6 +119067,7 @@ torontoaccesscontrol.com, 1 torontocorporatelimo.services, 1 torontogid.cf, 1 torontohealthcare.tk, 1 +torontonews.tk, 1 torontoplumbinggroup.ca, 1 torontopostcardclub.com, 1 torontopowerwalkers.ca, 1 @@ -116537,6 +119078,7 @@ toros.co, 1 torproject.org, 0 torproject.ovh, 1 torprojects.com, 1 +torrance.gq, 1 torreconta.pt, 1 torrededonmiguel.tk, 1 torremarsalou.com, 0 @@ -116658,7 +119200,7 @@ touch.mail.ru, 1 touch2ship.com, 1 touchanddraw.tk, 1 touchdown.co, 1 -touche-international.com, 1 +touchka.ga, 1 touchmark.tk, 1 touchoflife.in, 1 touchscreentills.com, 1 @@ -116693,6 +119235,7 @@ tourdewestwoud.nl, 1 tourfunnels.com, 1 tourgest.net, 1 touringinmorocco.com, 1 +tourism-exegetai.tk, 1 tourisme-castillonpujols.fr, 1 tourisme-dordogne-paysfoyen.com, 1 tourisme-fronsadais.com, 1 @@ -116736,6 +119279,7 @@ touyatakenaka.tk, 1 tovaglioli-di-carta.it, 1 tovanot.biz, 1 tovare.com, 1 +tovarypochtoj.tk, 1 toverland-tickets.nl, 1 tovp.org, 0 towandalibrary.org, 1 @@ -116747,6 +119291,7 @@ towers-kolomna.tk, 1 town-night.jp, 1 townforge.net, 1 townfremontwi.gov, 1 +townifi.ga, 1 townlaretsota.gq, 1 townofadamswi.gov, 1 townofavonwi.gov, 1 @@ -116897,12 +119442,14 @@ toyouiv.org, 1 toypoodlepet.com, 1 toys-robots.cf, 1 toys4education.com.au, 1 +toyschina.cf, 1 toysearcher.ml, 1 toyshowappeal.ie, 1 toyshowthemusical.co.uk, 1 toyshowthemusical.com, 1 toyshowthemusical.ie, 1 toysperiod.com, 1 +toysplace.ml, 1 toyventure.ga, 1 tozdev.com, 1 tp-genie.com, 1 @@ -116930,6 +119477,7 @@ tpp.chat, 1 tpplanning.fr, 1 tppleague.me, 0 tpr.hk, 1 +tpress.tk, 1 tprk.pl, 1 tpro.rocks, 1 tproger.ru, 1 @@ -116963,6 +119511,7 @@ tracer.gg, 1 traceroute.guru, 1 traceroute.link, 1 traceroute.network, 1 +tracesteps.ga, 1 tracetracker.com, 1 tracetracker.no, 1 traceur-france.fr, 1 @@ -116976,6 +119525,7 @@ tracker.com.ar, 1 trackerx.ga, 1 trackeye.dk, 1 trackify.tk, 1 +tracking-app.tk, 1 tracking.best, 1 trackingencomendas.com, 1 tracklist4u.com, 1 @@ -116999,10 +119549,12 @@ tracyrobbinsking.com, 1 trad-n-vo.com, 1 tradavenue.com, 1 trade-arcade.com, 1 +trade-platform.tk, 1 trade.gov, 1 trade247.exchange, 1 trade360solutions.com, 1 tradebot.cf, 1 +tradebotcompany.ml, 1 tradedesk.co.za, 1 tradedigital.co, 1 tradees.com, 1 @@ -117011,6 +119563,7 @@ trademarkregistration-coimbatore.com, 1 tradeonfx.com, 1 tradeplotter.com, 1 traderepublic.com, 1 +traderinside.ga, 1 traderjoe-cloud.de, 1 traderoots.com, 1 tradersclub.com.br, 1 @@ -117045,6 +119598,7 @@ trafarm.ro, 1 traffic.az, 1 trafficdirection.tk, 1 trafficgazelles.com, 1 +trafficgenerator.ga, 1 trafficmanager.com, 1 trafficmanager.ltd, 1 trafficmanager.xxx, 1 @@ -117054,6 +119608,7 @@ trafficpixel.tk, 0 trafficsafetymarketing.gov, 1 trafficsale.cf, 1 traffixdevices.com, 1 +trafic-wap.tk, 1 traficmusik.net, 1 trafik.tk, 1 trafiken.nu, 1 @@ -117127,6 +119682,7 @@ tralalashow.tk, 1 tralios.de, 1 tramadol.ga, 1 tramclub-basel.ch, 1 +tramikshop.ml, 1 tramitelegal.com.ar, 1 tramplin.tk, 1 tran.pw, 1 @@ -117134,6 +119690,7 @@ trance-heal.com, 1 trance-heal.de, 1 trance-heal.me, 1 trance-nation.tk, 1 +tranceattic.com, 1 tranceheal.com, 1 tranceheal.me, 1 trancehost.com, 1 @@ -117220,7 +119777,6 @@ transmutatie.nl, 1 transnexus.com, 1 transon.tk, 1 transpak-cn.com, 1 -transparencia.gob.do, 1 transparency.org.pk, 1 transparencyinadmissions.org, 1 transparencynj.com, 1 @@ -117243,6 +119799,7 @@ trantrongtri.info, 1 tranvia.info, 1 tranzact.net, 1 trapkitchen.ml, 1 +trappersoutfitters.tk, 1 traproulette.com, 1 trapsdirect.com, 1 trapsexy.com, 1 @@ -117253,6 +119810,7 @@ trarch.com, 1 trasatsatelital.com.ar, 1 trash2treasurecreations.co.za, 1 trashcanheroes.tk, 1 +trashcraft.tk, 1 trashexpert.ru, 1 trashnothing.com, 1 trashpanda.website, 1 @@ -117385,6 +119943,7 @@ travelovernight.ga, 1 travelpeace.ga, 1 travelpearl.ga, 1 travelpenguin.nl, 1 +travelphilippines.tk, 1 travelphoto.cc, 1 travelphotographycourse.com, 1 travelplatinum.ga, 1 @@ -117430,6 +119989,7 @@ travelurban.ga, 1 travelus.nl, 1 travelvacancy.tk, 1 travelvictory.ga, 1 +travelvisit.cf, 1 travelways.ml, 1 travelwithbender.com, 1 travely.nl, 1 @@ -117449,6 +120009,7 @@ travuscka.ru, 1 traxstage.com, 1 tray.io, 0 trayinc.com, 1 +trazodononline.gq, 1 trazs.com, 1 trbanka.com, 1 trcollaborative.com, 1 @@ -117516,6 +120077,7 @@ trend-shop.ga, 1 trendegypt.ml, 1 trendingaffords.com, 1 trendingdeals.ga, 1 +trendingeducation.tk, 1 trendingknow.tk, 1 trendingstory.tk, 1 trendkraft.de, 1 @@ -117558,7 +120120,6 @@ trespassing.com, 1 trespedia.com, 1 tresredatores.tk, 1 tressallure.com, 1 -tresscabelos.com.br, 1 tretail.net, 1 tretinoin.gq, 1 treurtransport.tk, 1 @@ -117597,18 +120158,23 @@ trianglewaverecords.tk, 1 tribac.de, 1 tribaldos.com, 0 tribaljusticeandsafety.gov, 1 +tribalwarsstyles.tk, 1 +tribalzone.tk, 1 tribe.rs, 1 tribecalawsuitloans.com, 1 tribefanaticsunited.tk, 1 tribesofneurot.tk, 1 tribetrails.com, 1 tribinary.tk, 1 +tribistovo.tk, 1 tribly.de, 1 tribunatv.ml, 1 tribunesia.ga, 1 tribut.de, 1 tributh.cf, 1 tributh.ga, 1 +tributh.gq, 1 +tributh.ml, 1 tributh.net, 1 tributh.tk, 1 tricare.mil, 1 @@ -117626,6 +120192,7 @@ triddi.com, 0 tridena.com, 1 trident-online.de, 1 trident1000logoi.gr, 1 +tridentmedia.gq, 1 tridnice.eu, 1 triedandtruebytrista.com, 1 triefenbach.com, 1 @@ -117647,6 +120214,7 @@ trigueros.tk, 1 trigular.de, 1 trihard.space, 1 trihunter6000.com, 1 +trik-komputer.tk, 1 trik.es, 0 trikeweb.com, 1 trilithsolutions.com, 1 @@ -117704,7 +120272,9 @@ tripleone.co.uk, 1 tripleone.uk, 1 triplepointliquidity.com, 1 triplesixdesigns.com, 1 +triplethreatband.tk, 1 triplevision.nl, 1 +triplicate.gq, 1 triploqal.com, 1 tripmakery.com, 1 tripoffice.com, 1 @@ -117811,6 +120381,7 @@ trosell.net, 1 trosinenko.com, 1 tross.tk, 1 trotec.com, 1 +trotter.cf, 1 troubles.ru, 1 troubleshooter.xyz, 1 troubleshooting.cz, 1 @@ -118009,6 +120580,7 @@ trustedpropertymanagement.net, 1 trustedtoolbox.com, 1 trustee.deals, 1 trustees.org, 1 +trusthook.tk, 1 trusthub.com, 1 trustnet.co.il, 0 trustology.io, 1 @@ -118057,6 +120629,7 @@ tryhard.cz, 1 tryhexadecimal.com, 1 tryin.cz, 1 tryingtotakeoversweden.tk, 1 +tryingtotakeovertheworld.tk, 1 tryitonline.net, 1 tryknow.com, 1 trymegadrol.com, 1 @@ -118277,7 +120850,6 @@ tuffsruffs.se, 1 tufilo.com, 0 tuftonboronh.gov, 1 tugadar.com, 1 -tugafm.eu.org, 1 tugesha.com, 1 tugnut.tk, 1 tuhoctainha.net, 1 @@ -118299,6 +120871,8 @@ tukebab.com, 1 tuketicidergisi.com, 1 tuketicihaklari.net, 1 tukiart.tk, 1 +tula-city.tk, 1 +tula-news.ga, 1 tulafarms.ga, 1 tulafarms.gq, 1 tulalip.gov, 1 @@ -118348,6 +120922,7 @@ tuningblog.eu, 0 tunisia-tech.tk, 1 tunisiana.tk, 1 tunisiangamers.tk, 1 +tunisiapress.tk, 1 tunnel-staging.googlezip.net, 1 tunnel.googlezip.net, 1 tunnel53.net, 1 @@ -118417,6 +120992,7 @@ turkcechat.tk, 1 turkcedizin.tk, 1 turkcoder.tk, 1 turkdevs.net, 1 +turkey-portal.tk, 1 turkeyfiles.tk, 1 turkeymistress.tk, 1 turkeysforlife.com, 1 @@ -118425,28 +121001,33 @@ turkhacks.com, 1 turkhalkmuzigi.tk, 1 turkiet.guide, 1 turkish.dating, 1 +turkishhackers.tk, 1 turkishyatirim.com, 1 turkiye.ai, 1 turkkarate.tk, 1 turkman.ml, 1 turkman.tk, 1 +turkmannews.tk, 1 turkmen.news, 1 turkmenbusiness.tk, 1 turkmenistanairlines.tm, 1 turkmens.tk, 1 turkmirc.tk, 1 +turkmistress.tk, 1 turkodon.com, 1 turkology.tk, 1 turkreno.com, 1 turkrock.com, 1 turkru.pro, 1 turksell.ru, 1 +turksite.tk, 1 turksiteleri.tk, 1 turktree.com, 1 turkup.ml, 1 turkuradyo.tk, 1 turkutitans.tk, 1 turl.pl, 1 +turlewicz.pl, 1 turm-umzuege.de, 1 turn-sticks.com, 1 turnali.tk, 1 @@ -118469,6 +121050,7 @@ tursiae.org, 1 turteka.com, 1 turtle.ai, 0 turtleduckstudios.com, 1 +turtlehead.tk, 1 turtles.ga, 1 turuncu-sepet.com, 1 turunculevye.com, 1 @@ -118494,6 +121076,7 @@ tutamail.com, 1 tutanota.com, 1 tutanota.de, 1 tutarot.club, 1 +tutdevki.tk, 1 tutiendabancor.com.ar, 1 tutiendadebdsm.com, 1 tutiendard.ga, 1 @@ -118506,6 +121089,7 @@ tutoragency.org, 1 tutorcruncher.com, 1 tutorial90.cf, 1 tutorialcoding.tk, 1 +tutorialdb.tk, 1 tutorialehtml.com, 1 tutorialforest.com, 1 tutorialhtml.tk, 1 @@ -118587,6 +121171,7 @@ tvlanguedoc.com, 1 tvleaks.se, 1 tvmounting-houston.com, 1 tvnow.de, 1 +tvoia-dietka.tk, 1 tvoistatusy.tk, 1 tvoyaknighka.ga, 1 tvoysad.ru, 0 @@ -118630,6 +121215,7 @@ tweetyconnect.com, 1 twelve-inch-classics.tk, 1 twelve.rocks, 1 twelve.today, 1 +twelvecolonies.tk, 1 twelvecornerspediatrics.com, 1 twem.ddns.net, 1 twenty.so, 1 @@ -118688,7 +121274,6 @@ two-step-verification.solutions, 1 twoandahalfvan.eu, 1 twobitbusker.com, 1 twobrothersbbq.com, 0 -twocatsinacaravan.xyz, 1 twocornertiming.com, 1 twodadsgames.com, 1 twoef.co.uk, 1 @@ -118777,13 +121362,13 @@ tycyc88.com, 1 tyedyeforever.com, 1 tygochrum.se, 1 tyinnovations.com, 1 -tyjuxin.com, 1 tykeplay.com, 1 tykoon.com, 1 tyl.io, 1 tyler.rs, 1 tylerdavies.net, 1 tylerdt.com, 1 +tylerdurden.ml, 1 tylergordonhill.com, 1 tylerharcourt.com, 0 tylerharcourt.net, 1 @@ -118856,6 +121441,7 @@ tyrulez.tk, 1 tysukakorrekt.ga, 1 tysye.ca, 1 tytod.com, 1 +tyumen.ga, 1 tyuning-avto.tk, 1 tyva.gq, 1 tyva.ml, 1 @@ -118925,7 +121511,6 @@ u9721.com, 0 u9728.co, 1 u9yy.net, 1 ua-autonews.tk, 1 -ua-fediland.de, 1 ua.search.yahoo.com, 0 ua5v.com, 1 uab.tv, 1 @@ -118933,6 +121518,7 @@ uachemlabs.com, 1 uae-company-service.com, 1 uaefiu.gov.ae, 1 uaemegadeals.com, 1 +ualove.tk, 1 uamxsociologia.tk, 1 uapp.win, 1 uareferat.tk, 1 @@ -118994,6 +121580,7 @@ ubonforageseeds.com, 1 ubonit.pl, 1 uborcare.com, 1 uborka-812.ru, 1 +uborka-kvartir-moskva.gq, 1 ubsolutions.hu, 1 ubun.kr, 1 ubun.net, 1 @@ -119041,6 +121628,7 @@ udaap.org, 1 udancy.com, 1 udaneprzepisy.pl, 1 udb.kr, 1 +udbina.tk, 1 uddate-linthdcp-3345app.com, 1 uddate-linthdcp-567app.com, 1 uddi.ng, 1 @@ -119051,6 +121639,7 @@ udenlandskecasinoer.dk, 1 udenlandskeonlinecasino.com, 1 udi.no, 1 udid.fyi, 1 +udien.tk, 1 udigital.nl, 1 udik.tk, 1 udilicitana.com, 1 @@ -119089,6 +121678,7 @@ ufindme.at, 1 ufo.moe, 0 ufocentre.com, 1 ufoch.com, 0 +ufologiahistorica.tk, 1 ufone.com, 1 ufone.net, 1 ufopaedia.org, 1 @@ -119188,7 +121778,6 @@ ukrainskie-konstrukcii.com.ua, 1 ukrapak.com.ua, 1 ukrcredit.net, 1 ukriate.com, 1 -ukrigging.net, 1 ukrn.io, 1 ukrnames.com, 1 ukrnet.co.uk, 1 @@ -119229,8 +121818,10 @@ ulsters.cf, 1 ultherasaopaulo.com, 1 ultima-ratio.at, 1 ultimadivisao.com.br, 1 +ultimate-fireworks.tk, 1 ultimate-uk.com, 1 ultimateappreviews.co, 1 +ultimatebabyshowergifts.ga, 1 ultimatebattle.tk, 1 ultimateclub.tk, 1 ultimatefilmpromotion.com, 0 @@ -119250,6 +121841,7 @@ ultra-pet.co.za, 1 ultra.law, 1 ultrabkk.com, 1 ultracentr.ml, 1 +ultrafine.cf, 1 ultralife.cf, 1 ultraman.tk, 1 ultramax.biz, 1 @@ -119348,7 +121940,9 @@ unblockit.name, 1 unblockit.onl, 1 unblockit.uno, 1 unblockit.ws, 1 +unbolt.cf, 1 unboundmoney.com, 1 +unboxed.cf, 1 unboxinspector.com, 1 unboxyou.com, 1 uncarved.com, 1 @@ -119382,6 +121976,7 @@ underdestruction.tk, 1 underdog.tk, 1 underfloorheating-uk.co.uk, 1 underground.jp, 1 +undergrounder.ga, 1 undergroundiron.tk, 1 undergroundmusic.tk, 1 underlilith.com, 1 @@ -119472,6 +122067,7 @@ unicornsoft.tk, 1 unicorntooling.eu, 1 unicreditbulbank.info, 1 unicul.tk, 1 +unicycle.ga, 1 unicycle.show, 1 unidadvirtual.com, 1 unidevgroup.ru, 1 @@ -119539,6 +122135,7 @@ uniquepress.biz, 1 uniquequilts.co.uk, 1 uniquestlye.ga, 1 uniqweb.ga, 1 +uniresbajdas.ml, 1 unis-pour-la-planete.com, 1 unis-pour-le-climat.com, 1 uniselectweb.com, 1 @@ -119574,6 +122171,7 @@ unitedkingdoms-guild.com, 1 unitedlisbon.school, 1 unitedpsychological.com, 1 unitedrestorationfl.com, 1 +unitedstables.tk, 1 unitedstudents.tk, 1 unitedstudios.ru, 1 uniteforrecovery.govt.nz, 1 @@ -119581,6 +122179,7 @@ unitefortherecovery.govt.nz, 1 unitehelivy.be, 1 uniteinhealth.org, 1 unitel2000.de, 0 +unitir.gq, 1 unitizer.com, 1 unityconsciousnessbooks.com, 1 unityor.gov, 1 @@ -119656,8 +122255,10 @@ unixauto.de, 1 unixauto.hu, 1 unixauto.ro, 1 unixauto.sk, 1 +unixer.tk, 1 unixforum.org, 1 unixfox.eu, 1 +unixhost.ga, 1 unixteam.de, 1 unixtime.date, 1 unk.gov, 1 @@ -119674,6 +122275,7 @@ unleashfido.com, 1 unleashyouridentity.com, 1 unli.xyz, 1 unlimiteddata.digital, 1 +unlimiteddsl.ga, 1 unlimitedheatingcooling.com, 1 unlimitedzone.tk, 1 unlock-my-sprint.mobi, 1 @@ -119707,6 +122309,7 @@ unoriginal.tk, 1 unosconotros.com, 1 unp.me, 1 unpkg.com, 1 +unpleasant.tk, 1 unpluggedjuice.dk, 1 unplugstore.it, 1 unply.com, 1 @@ -119825,7 +122428,6 @@ upgrade.com, 1 upgradeit.dk, 1 upgradeloans.com, 1 upgrades-and-options.com, 1 -upgraid.at, 1 upgraid.ru, 1 upguard.org, 1 uphabit.io, 1 @@ -119862,6 +122464,7 @@ uponsel.com, 1 uportal.tk, 1 upped.com.my, 1 upperskagittribe-nsn.gov, 1 +uppfinnarenc.tk, 1 upplevelse.com, 1 uppsala.tk, 1 upr.com.ua, 1 @@ -119916,6 +122519,7 @@ uradisam.rs, 1 uradvd.best, 1 uraimo.com, 1 urakn0x.tk, 1 +ural-emal.ga, 1 ural-travel.ml, 1 ural.cf, 1 uralscoin.ml, 1 @@ -120137,6 +122741,7 @@ useon.ru, 0 user-daitron.jp, 1 userbase.com, 1 usercentrics.com, 1 +usercompare.tk, 1 userhelp.tk, 1 userify.com, 1 username.nz, 1 @@ -120238,6 +122843,7 @@ utcast-mate.com, 1 utduc.com, 1 uteasybooki.com, 1 utensil.org, 1 +utevai.tk, 1 uthavi.org, 1 utiars.com, 1 uticagravel.com, 1 @@ -120276,6 +122882,7 @@ utterman.se, 1 uttnetgroup.fr, 0 utvbloggen.se, 1 utw.me, 1 +utwente.io, 1 utwf.org, 1 utzon.net, 1 uu5197.co, 1 @@ -120337,6 +122944,8 @@ uzayliyiz.biz, 1 uzbek-soft.tk, 1 uzbekkizlari.cf, 1 uzbekkizlari.gq, 1 +uzbekkizlari.tk, 1 +uzbektumblers.tk, 1 uze-mobility.at, 1 uze-mobility.ch, 1 uze-mobility.co, 1 @@ -120350,6 +122959,7 @@ uze.mobi, 1 uzemobility.de, 1 uzemobility.eu, 1 uzemobility.org, 1 +uzhas-uzhasny.ml, 1 uzhits.cf, 1 uzidesign.com, 1 uziregister.nl, 0 @@ -120536,7 +123146,6 @@ valedigitalservice.com.br, 1 valek.net, 1 valemountchamber.com, 1 valemountmuseum.ca, 1 -valemusicfest.com.br, 1 valencia-s-vikoy.ru, 1 valenciadevops.me, 1 valencianisme.tk, 1 @@ -120787,7 +123396,6 @@ vapetaclope.cf, 1 vapevine.ca, 1 vapex.pl, 1 vapezone.com.au, 1 -vaphone.co, 1 vapingdaily.com, 1 vapocial.com, 1 vapolik.fr, 1 @@ -120801,6 +123409,7 @@ varalaval.com, 1 varcare.jp, 1 varda.nl, 1 vardakeio.gov.gr, 1 +vardenafilhcl.gq, 1 vareillefoundation.fr, 0 vareillefoundation.org, 0 varela-electricite.fr, 1 @@ -120816,6 +123425,7 @@ varierchairs.com, 1 variomedia.de, 1 variusunum.com, 1 varizh.by, 1 +varjo.tk, 1 varjuring.tk, 1 varlex.cl, 1 varlin.tk, 1 @@ -120852,6 +123462,7 @@ vaselin.tk, 1 vases.tk, 1 vasficelik.com, 1 vashel.us, 1 +vasheradio.tk, 1 vashmatrass.ru, 1 vasileruscior.ro, 1 vasilev.wtf, 1 @@ -120872,6 +123483,7 @@ vasyharan.com, 1 vat-eu.com, 1 vat.direct, 1 vatav.eu, 1 +vatav.tk, 1 vatazhok.com, 1 vatman.tk, 1 vato.nl, 1 @@ -120914,6 +123526,7 @@ vbttc.com, 1 vbwinery.com, 1 vcacursus.nl, 1 vcanederland.nl, 1 +vcard.mx, 1 vcare.group, 1 vccmurah.net, 1 vccv.cc, 0 @@ -120996,7 +123609,6 @@ vegan-essen.tk, 1 vegan-kochen.tk, 1 vegan-pratique.fr, 1 veganantics.co.uk, 1 -veganculture.co, 1 vegandelivery.cz, 1 vegane-proteine.com, 1 veganenumbers.com, 1 @@ -121023,6 +123635,7 @@ vegepa.com, 1 vegetablegrowing.co.uk, 1 vegetarianfastfood.com, 1 vegetariantokyo.net, 1 +vegetarier-sind-moerder.tk, 1 veggie-einhorn.de, 0 vegoresto.fr, 1 vegtelenchat.tk, 1 @@ -121045,6 +123658,7 @@ vejersferie.de, 1 vejersferie.dk, 1 vekashka.gq, 1 vekenz.com, 1 +vektlofting.tk, 1 vektor.tk, 1 vektorparts.ru, 1 velassoltas.com, 1 @@ -121296,6 +123910,7 @@ versicherungen-werner-hahn.de, 1 verso.money, 1 verspai.de, 0 verstaanwiskunde.co.za, 1 +verstka.cf, 1 verstka.ga, 1 verstka.tk, 1 verstraetenusedcars.be, 1 @@ -121369,6 +123984,8 @@ vestibular.science, 1 vestibulartechnologies.com, 1 vestingbar.nl, 1 vestirsibene.shop, 1 +vestlundbolargen.tk, 1 +vestnik24.cf, 1 vestum.ru, 1 vesuvio.tk, 1 vet24hour.co.uk, 1 @@ -121519,6 +124136,7 @@ victora.com, 1 victorblomberg.se, 1 victorcalvez.com, 1 victorcanera.com, 1 +victorcarrasco.tk, 1 victorcarwasher.com, 1 victoreriksson.ch, 1 victoreriksson.co, 1 @@ -121573,7 +124191,6 @@ vidaxp.com, 1 vidb.me, 1 vidbooster.com, 0 vidbuchanan.co.uk, 1 -vidcloud.xyz, 1 vide-dressing.org, 0 vide-greniers.org, 0 vide-maisons.org, 0 @@ -121624,7 +124241,6 @@ videozv.tk, 1 viderma.com.br, 1 videt-son.ml, 1 videt-son.tk, 1 -vidimte.eu, 1 vidiobokep.xyz, 1 vidiproject.com, 1 vidister.de, 0 @@ -121670,6 +124286,7 @@ viega.si, 1 viega.sk, 1 viega.us, 1 viekelis.lt, 0 +vielleserin.de, 1 viemeister.com, 1 viemontante.be, 0 viennadancecrew.at, 1 @@ -121780,6 +124397,7 @@ vilantice.cz, 1 vilavilma.si, 1 vilavyhlidka.cz, 1 vilaydin.com, 1 +vildlaithailand.cf, 1 vildlaithailand.gq, 1 vildlaithailand.tk, 1 vilettecouvreur.fr, 1 @@ -121796,6 +124414,7 @@ villa-ottone.net, 1 villa-romantica-zillertal.at, 1 villa-toscana.berlin, 1 villablancaluarca.es, 1 +villablino.tk, 1 villaditirano.tk, 1 villafiore.com.br, 1 villafrancis.org.sg, 1 @@ -121946,6 +124565,7 @@ vinigas.com, 1 vinihk.com, 0 vinilosdecorativos.net, 1 vinistas.com, 1 +vinit.tk, 1 vinnellarabia.com, 1 vinner.com.au, 1 vinnie.gq, 1 @@ -121998,6 +124618,7 @@ vip-6132.com, 1 vip-agency-escort.com, 1 vip-escort-agency.com, 1 vip-it.pl, 1 +vip-moda.ga, 1 vip-sauna.tk, 1 vip-ssl.com, 1 vip-transfer.by, 1 @@ -122182,6 +124803,7 @@ visionsmind.xyz, 1 visionthroughknowledge.com, 1 visiontree-beta.eu, 1 visionwow.ai, 1 +visionxcreative.gq, 1 visionzeroreporting.com, 1 visit-sanbenedettodeltronto.it, 1 visit-thailand.tk, 1 @@ -122236,6 +124858,7 @@ vistec-support.de, 1 visual-cockpit.com, 0 visual-concept.net, 1 visual-conversion.com, 1 +visual-design.cf, 1 visual-dreams.de, 1 visualdrone.co, 1 visualetiquetas.art.br, 1 @@ -122306,7 +124929,6 @@ vitrado.de, 1 vitromex.tk, 1 vitron.ru, 1 vitsearch.link, 1 -vitsoft.by, 1 vitto.tk, 1 vittoria-conseil.com, 1 vittoria-web.com, 1 @@ -122496,6 +125118,7 @@ vmc.co.id, 1 vmccnc.com, 1 vmconnected.co.uk, 1 vmedia.ca, 1 +vmf365.tk, 1 vmgirls.com, 0 vmhomedesign.com, 0 vmhydro.ru, 0 @@ -122577,6 +125200,7 @@ vodpay.com, 1 vodpay.net, 1 vodpay.org, 1 voeding-en-fitness.nl, 1 +voetbalclubinfo.tk, 1 voetbalforum.tk, 1 voetbalindestad.be, 1 voetbalwedden.net, 1 @@ -122758,6 +125382,7 @@ vosges-tourisme.net, 1 vosgym.jp, 1 voshod.org, 1 vosjesweb.nl, 1 +vosky.fr, 1 vosn.de, 1 voss-klinik.com, 1 voss-zaehne.com, 1 @@ -122827,6 +125452,7 @@ vous-les-jeunnes.tk, 1 vov.furniture, 1 vovac.tk, 1 vovachka.tk, 1 +vovkamagazine.tk, 1 vovladikavkaze.ru, 1 vowsy.club, 0 vowyboeq.duckdns.org, 1 @@ -122914,6 +125540,7 @@ vredesregister.gent, 1 vreeken-selfstorage.tk, 1 vreeman.com, 1 vreklame.ml, 1 +vremyachko.tk, 1 vresonline.gr, 1 vretmaskin.se, 0 vreviewbestseller.com, 1 @@ -122958,6 +125585,7 @@ vs9911.com, 0 vs9977.com, 0 vsactivity.com, 1 vsamsonov.com, 1 +vsaratove.tk, 1 vsc-don-stocksport.de, 1 vscale.io, 0 vscm888.com, 0 @@ -122996,6 +125624,7 @@ vss-clan.ml, 1 vsscr.tech, 1 vsscrew.tk, 1 vssnederland.nl, 1 +vstavropole.tk, 1 vstrikovaci-lisy.cz, 1 vsund.de, 1 vsure.com.au, 1 @@ -123024,7 +125653,9 @@ vucdn.com, 1 vuelacaruru.com, 1 vuelosabajoprecio.net, 1 vuilelakens.be, 1 +vulcancycling.ga, 1 vuldb.com, 1 +vulgar-teens.tk, 1 vulkanprotektor.rs, 1 vulkanruhe.com, 1 vulkanruhe.de, 1 @@ -123116,6 +125747,7 @@ vyskocil.com, 1 vyskocil.eu, 1 vysoketatry.tk, 1 vysokij-istochnik.tk, 1 +vysokoe.tk, 1 vysotka.tk, 1 vysvetluju.cz, 1 vyturys.lt, 1 @@ -123284,6 +125916,7 @@ waelk.tech, 1 waelti.xxx, 1 waermekabine.org, 1 waf.hk, 1 +waf.ninja, 1 waf.sexy, 1 wafa4hw.com, 1 wafelland.be, 1 @@ -123590,6 +126223,7 @@ waronbrain.com, 1 warp-radio.net, 1 warpsubmitter.tk, 1 warr.ath.cx, 1 +warrantycontracts.ga, 1 warrantynowvoid.com, 1 warrencountyga.gov, 1 warrencountyia.gov, 1 @@ -123611,6 +126245,7 @@ warsonco.com, 0 warszawa-pranie-dywanow.pl, 1 warszawa19115.pl, 0 wartabank.com, 1 +wartalika.id, 1 wartegseberangsana.com, 1 warthog.ml, 1 wartimecontracting.gov, 1 @@ -123630,6 +126265,7 @@ wasd.ms, 1 wasema.com, 1 wasfestes.de, 1 wasfuereintheater.com, 1 +wash-house.tk, 1 washa.tv, 1 washabich.ch, 1 washburnclarkwi.gov, 1 @@ -123699,6 +126335,7 @@ watchtolearn.co, 1 watchweasel.com, 1 water-addict.com, 1 water-filters.tk, 1 +water-polo.tk, 1 water.com, 1 waterbassoon.eu.org, 1 waterborefiji.com, 1 @@ -123732,6 +126369,7 @@ waterpumps.xyz, 1 waterschaplimburg.nl, 1 waterside-inn.co.uk, 1 waterside-residents.org.uk, 1 +watersky.tk, 1 waterslide-austria.at, 0 watersoul.com, 1 watersource.ga, 1 @@ -123769,7 +126407,6 @@ wausharacountywi.gov, 1 wauwatosa.gov, 1 wauzaji.com, 1 wav-productions.com, 1 -wav.tv, 1 wave-inc.co.jp, 1 wave.is, 1 wave.red, 1 @@ -123962,6 +126599,7 @@ web-design.co.il, 1 web-desing.com.ua, 0 web-disaster.tk, 1 web-dl.cc, 1 +web-format.tk, 1 web-fox23.ru, 1 web-hotel.gr, 1 web-industry.pro, 1 @@ -123970,6 +126608,7 @@ web-it-entwicklung.de, 1 web-lab.ml, 1 web-log.ml, 1 web-masterok.ga, 1 +web-mastery.tk, 1 web-net.tk, 1 web-odyssey.com, 1 web-online.cf, 1 @@ -123985,6 +126624,7 @@ web-space.design, 1 web-station.tk, 1 web-style.tk, 1 web-tcapwebsite-dev.azurewebsites.net, 1 +web-test.gq, 1 web-treff.de, 1 web-view.ml, 1 web-warrior.de, 1 @@ -124032,6 +126672,7 @@ webbanquyen.com, 1 webbgro.com, 1 webbiz.co.uk, 1 webblawmaine.com, 1 +webbolivia.tk, 1 webbricks.ru, 1 webbuilder.de, 1 webbureauer.dk, 1 @@ -124044,6 +126685,7 @@ webcamyoung.tk, 1 webcaptive.com, 1 webcaptive.net, 1 webcarlosmartin.tk, 1 +webcase.tk, 1 webcatchers.nl, 0 webcazip.com, 1 webce.de, 1 @@ -124052,6 +126694,8 @@ webclimbers.ch, 0 webclymber.com, 0 webcoder.cf, 1 webcollect.org.uk, 1 +webcollector.ga, 1 +webcontrol.tk, 1 webconverge.nl, 1 webcookies.org, 1 webcover.fr, 1 @@ -124060,6 +126704,7 @@ webcreaciones.net, 1 webcreative.tk, 1 webcrm.com, 1 webcurtaincall.com, 1 +webdaddyit.ga, 1 webdating.tk, 1 webdemaestrias.com, 1 webdesign-kall.de, 1 @@ -124067,6 +126712,7 @@ webdesign-moellers.de, 1 webdesign-note.jp, 1 webdesign.gs, 1 webdesigncompanyindia.com, 1 +webdesignersinchennai.tk, 1 webdesignfenua.tk, 1 webdesignlabor.ch, 1 webdesignplay.com, 1 @@ -124150,6 +126796,7 @@ webhr.co, 1 webia.in.th, 1 webika.site, 1 webimagina.tk, 1 +webinator.tk, 1 webinformer.tk, 1 webini.co, 1 webinke.ga, 1 @@ -124181,6 +126828,7 @@ weblian.ml, 1 webliberty.ru, 1 weblibrary.cf, 1 weblightnovel.tk, 1 +weblights.ml, 1 webline.ch, 1 weblinkcity.tk, 1 weblistposting.com, 1 @@ -124200,6 +126848,7 @@ webmandesign.eu, 1 webmarcosmarquez.tk, 1 webmarketingfestival.it, 1 webmaster-infographiste-lyon.fr, 0 +webmaster16.ml, 1 webmasterblog.tk, 1 webmasterhall.com, 1 webmax.cloud, 1 @@ -124289,12 +126938,15 @@ websitebakers.eu, 1 websiteboost.nl, 1 websitecenter.tk, 1 websitecyber.com, 1 +websitedesignersmalappuram.ga, 1 +websitedesignprice.ga, 1 websiteforyou.nl, 1 websiteirani.tk, 1 websiteleichtgemacht.de, 1 websitemarketers.tk, 1 websiteout.ca, 1 websiteout.net, 1 +websitepromotion.ml, 1 websiterent.ca, 1 websites4business.ca, 1 websitesbybruce.com, 1 @@ -124304,6 +126956,7 @@ websitesdallas.com, 1 websitesdemos.tk, 1 websiteservice.pro, 1 websitesthatwork.biz, 1 +websitestudio.fr, 1 websize.me, 1 websmaniac.com, 1 websmartlink.tk, 1 @@ -124391,6 +127044,7 @@ wedcha.com, 1 wedding-dress-hire.tk, 1 wedding-e-dress.tk, 1 wedding-page.ga, 1 +wedding-page.tk, 1 wedding-transportation.com, 1 wedding-ua.tk, 1 weddingalbumsdesign.com, 1 @@ -124432,6 +127086,7 @@ weekendbus.pl, 1 weekendcandy.com, 1 weekendgolf.co, 1 weekendinitaly.com, 1 +weekendplayers.tk, 1 weekendstartup.ml, 1 weekly-residence.com, 1 weeklydcoupgen.com, 1 @@ -124474,6 +127129,7 @@ weibomiaopai.com, 1 weideheuvel.org, 1 weidmannfibertechnology.com, 0 weien.org, 1 +weightlosseasy.cf, 1 weightlossoutcome.com, 1 weihnachten-schenken.de, 1 weihua.life, 1 @@ -124548,7 +127204,6 @@ wellness-spa-suedtirol.com, 1 wellnesscheck.net, 1 wellnessever.com, 1 wellnesshotel-weimar.de, 1 -wellnessmassage-eitorf.de, 1 wellsolveit.com, 0 wellspringsga.com, 1 wellsprung.net, 1 @@ -124699,6 +127354,7 @@ wesselius.tk, 1 wessner.co, 0 west-contemporary.com, 1 west-nerica.de, 1 +west-raptors.tk, 1 west-wind.net, 1 westaf-edit.com, 1 westappin.com.au, 1 @@ -124938,7 +127594,6 @@ whereismyorigin.cf, 1 whereisthekeep.com, 1 whereiszakir.com, 1 wheresbuzz.com.au, 1 -whereuare.se, 1 whereveryougo.space, 1 whexit.nl, 1 whey-protein.ch, 1 @@ -125232,6 +127887,7 @@ wikidpedia.org, 1 wikidsystems.com, 0 wikiepdia.com, 1 wikiepdia.org, 1 +wikifamily.ga, 1 wikifamily.tk, 1 wikihelp.in, 1 wikihow.com, 1 @@ -125252,6 +127908,7 @@ wikileaks.ch, 1 wikileaks.com, 1 wikileaks.org, 1 wikilibrary.tk, 1 +wikilink.cf, 1 wikilink.tk, 1 wikilinux.xyz, 1 wikimania.com, 1 @@ -125313,6 +127970,7 @@ wikiquote.org, 1 wikiquote.pt, 1 wikiquotes.info, 1 wikiskripta.eu, 1 +wikisorg.tk, 1 wikisource.com, 1 wikisource.org, 1 wikisource.pl, 1 @@ -125441,7 +128099,7 @@ williamboundsltd.com, 1 williamfeely.info, 1 williamjohngauthier.net, 1 williamk.ga, 0 -williamle.com, 0 +williamlong.info, 1 williammcgill.co, 1 williammcgill.com, 1 williamparedes.tk, 1 @@ -125528,7 +128186,6 @@ wincasinowin.click, 1 winch-center.de, 1 winchat365.com, 1 winchendon-ma.gov, 1 -winchuan.com, 1 winckelmann2020.com, 1 wincoil.gov, 1 wind.moe, 0 @@ -125586,6 +128243,7 @@ winfar.co.za, 1 winfieldchen.me, 1 winfuture.de, 1 wing-tsun.cf, 1 +wing-tsun.ga, 1 wing-tsun.tk, 1 wingchun.edu.au, 1 wingchunboxtribe.com, 1 @@ -125613,6 +128271,7 @@ winnercivi.com, 1 winnersaffiliate.com, 1 winnery.tk, 1 winningattitudeawards.org, 1 +winnipegcomputerguy.tk, 1 winnlandscaping.com, 1 winona-area-scum.tk, 1 winoptical.com, 1 @@ -125703,6 +128362,7 @@ wischu.com, 1 wiscoinsulation.com, 1 wiscon.co, 1 wisconsinnet.tk, 1 +wisdom-nict.jp, 1 wisdomcue.com, 0 wisdomgarden-mr.com, 1 wisdomgeek.com, 1 @@ -125766,6 +128426,7 @@ witchhunt.tk, 1 witchthicktits.tk, 1 witeetam.com, 1 withdati.fr, 1 +wither.cf, 1 witheveryheartbeat.com.au, 1 withextraveg.net, 1 withfoundation.org, 1 @@ -125804,11 +128465,11 @@ wiz.farm, 1 wizadjournal.com, 1 wizard.gov, 1 wizardbouncycastles.co.uk, 1 -wizardit.com, 1 wizardk.tk, 1 wizardkami.tk, 1 wizardmeow.xin, 1 wizardofhomes.com, 1 +wizardschool.tk, 1 wizardwiz.com, 1 wizathon.com, 1 wizdomonwheels.com, 1 @@ -125949,6 +128610,7 @@ wolfgang-kloke.de, 1 wolfgang-ziegler.com, 1 wolfgang.space, 1 wolflabs.co.uk, 1 +wolflambert.tk, 1 wolfsburgwest.com, 1 wolfsense.nl, 1 wolfshoehle.eu, 1 @@ -126010,6 +128672,7 @@ wonderfulworldofwalliams.tk, 1 wonderhost.info, 1 wonderhowto.com, 1 wonderkind.de, 1 +wonderlab.ml, 1 wonderland-server.net, 1 wonderland.com.ua, 1 wonderlangkawi.com, 1 @@ -126175,6 +128838,7 @@ workfromhomemom.cf, 1 workfromhomeoptions.ml, 1 workfromhomeoptions.tk, 1 workfromhomesales.tk, 1 +workfromhomesites.ga, 1 workfromhomesites.ml, 1 workfromhometexas.tk, 1 workindia.ml, 1 @@ -126216,7 +128880,6 @@ workwelltoday.net, 1 workwithgo.com, 0 workwithusaid.gov, 1 worky.ph, 1 -world-avto.fun, 1 world-citizen-report.com, 1 world-education-association.org, 1 world-ir.international, 1 @@ -126287,6 +128950,8 @@ worldofarganoil.com, 1 worldofbelia.de, 1 worldofgeekstuff.com, 1 worldofghibli.id, 1 +worldofheroes.ml, 1 +worldoflegion.ml, 1 worldofparties.co.uk, 1 worldofwobble.co.uk, 1 worldpage.tk, 1 @@ -126309,6 +128974,7 @@ worldsweet.ru, 1 worldsy.com, 1 worldtalk.de, 1 worldtourismgroup.com, 1 +worldtravelmagazine.tk, 1 worldtreechocolate.ca, 1 worldupdatereviews.com, 1 worldviews-debattieren.de, 1 @@ -126324,6 +128990,7 @@ wormdisk.net, 1 wormhol.org, 1 wormhole.ga, 1 wormholevpn.net, 1 +wormincorporated.tk, 1 wormpress.com, 1 worms-cowclan.tk, 1 worongarymedical.com.au, 1 @@ -126378,6 +129045,7 @@ wowjs.co.uk, 1 wowjs.org, 1 wowjs.uk, 1 wowlegacy.ml, 1 +wowlove.tk, 1 wownskportal.tk, 1 wowpilates.com, 1 wowpolisa.pl, 1 @@ -126516,6 +129184,7 @@ writepro.net, 1 writer24.ru, 1 writerimranc.ca, 1 writerimranc.com, 1 +writers-club.tk, 1 writersblock.tk, 1 writesafer.com, 1 writestreak.team, 1 @@ -126615,13 +129284,16 @@ wuknet.net, 1 wulala.one, 1 wulala.us, 1 wulel.cn, 0 +wulfrun-invicta.tk, 1 wum.me, 1 wumai-p.cn, 1 wumbo.cf, 1 wumbo.co.nz, 1 +wumbo.ga, 1 wumbo.gq, 1 wumbo.kiwi, 1 wumbo.ml, 1 +wumbo.tk, 1 wuminhao.com, 1 wums.org, 1 wunder.io, 1 @@ -126652,6 +129324,7 @@ wv-n.de, 1 wvdn.com, 1 wvg.myds.me, 1 wvisser.nl, 1 +wvpbs.ml, 1 wvpbs.tk, 1 wvv-8522.com, 1 wvw-8522.com, 1 @@ -126798,6 +129471,7 @@ wwwindows.co.uk, 1 wwwithcarrie.com, 1 wwwn888.com, 0 wwww.nz, 1 +wwwwnews.tk, 1 wwx.duckdns.org, 1 wx37.ac.cn, 1 wx6688.cc, 0 @@ -126958,13 +129632,16 @@ xa.search.yahoo.com, 0 xa1.uk, 1 xab199.com, 1 xab678.com, 1 +xaba.tk, 1 xabifk.com, 1 +xacker.tk, 1 xacobeoexperience.com, 1 xad.ch, 1 xado-france.com, 1 xahbspl.com, 1 xajh.org, 1 xakep-slon.tk, 1 +xakepctbo.tk, 1 xalima.gq, 1 xamax.co.uk, 1 xampusolid.cat, 1 @@ -127161,6 +129838,7 @@ xelesante.jp, 1 xemod.pl, 1 xenfo.ro, 1 xenical-online.ga, 1 +xenical.tk, 1 xenicalpills.tk, 1 xenocide.tk, 1 xenomorph.tk, 1 @@ -127181,6 +129859,7 @@ xeonlab.de, 1 xeoxaz.net, 1 xerbisworks.com, 1 xerbo.net, 0 +xerezdeportivo.tk, 1 xerkus.pro, 1 xerownia.eu, 0 xertainty.com, 1 @@ -127230,7 +129909,6 @@ xiamenshipbuilding.com, 1 xiamuzi.com, 1 xiangblog.com, 1 xianguocy.com, 1 -xiangweiqing.co.uk, 1 xianjianruishiyouyiyuan.com, 1 xiao-sheng.gq, 1 xiaobai.pro, 0 @@ -127446,6 +130124,7 @@ xlfilippou.com, 1 xlink.com.pl, 1 xlmnews.today, 1 xloffice.se, 1 +xloud.cf, 1 xloutdoor.se, 1 xlribbon.ml, 1 xlshop.be, 1 @@ -127498,7 +130177,6 @@ xn----7sbmucgqdbgwwc5e9b.xn--p1ai, 1 xn----7sbq4auch5b4b.xn--p1ai, 1 xn----8hcdn2ankm1bfq.com, 1 xn----8sbfkobhgmxahfmmhe8b8c6ff.xn--p1ai, 1 -xn----8sbggtw.xn--p1ai, 1 xn----dtbhcpoeofgcvoic1s.xn--p1ai, 1 xn----itbkhngkr2a.xn--p1ai, 0 xn----ncfb.ws, 1 @@ -127883,6 +130561,7 @@ xn--v4q.ml, 1 xn--v6q426ishax2a.xyz, 1 xn--vck8crc010pu14e.biz, 1 xn--vck8crcu789ajtaj92eura.xyz, 1 +xn--w22a.jp, 1 xn--wby9t.xyz, 0 xn--whlefamilie-l8a.de, 1 xn--woistdermlleimer-rzb.de, 1 @@ -128123,6 +130802,7 @@ xuanmeishe.net, 0 xuann.wang, 1 xubo666.com, 1 xuc.me, 1 +xucha.ml, 1 xueanquan.com, 1 xuedianshang.com, 1 xuehao.net.cn, 1 @@ -128136,6 +130816,7 @@ xuming.studio, 1 xumm.me, 1 xuntaosms.com, 1 xuntier.ch, 1 +xurl.gq, 1 xurl.ltd, 1 xushuai.org, 1 xusqui.com, 1 @@ -128383,6 +131064,8 @@ yaghoobi.tk, 1 yagihiro.tech, 1 yagizhan.me, 1 yagliyurt.com, 1 +yagmursoft.tk, 1 +yagoda-malina.tk, 1 yagotour.cf, 1 yah-music.com, 1 yahan.tv, 1 @@ -128418,6 +131101,7 @@ yamacore.de, 1 yamadaya.tv, 1 yamagata-fujinka.jp, 1 yamaken.jp, 1 +yamal-online.ml, 1 yamanami.tokyo, 1 yamanobe-taro.jp, 1 yamashita-clinic.org, 1 @@ -128518,6 +131202,7 @@ yaravidasana.com, 1 yarcevostom.ru, 1 yarcom.ru, 0 yardandgardenguru.com, 1 +yardesign.tk, 1 yardhelp.ga, 1 yardley.digital, 1 yardthyme.com, 1 @@ -128686,6 +131371,7 @@ yemeksirketleri.tk, 1 yemektarifleri.com, 1 yemenat.tk, 1 yemenlink.tk, 1 +yenbainet.tk, 1 yengec.co, 1 yenidunya.org, 1 yeniehliyetsinavi.com, 1 @@ -128700,7 +131386,10 @@ yeptechnology.store, 1 yepu.cc, 1 yepu.ga, 1 yeram.org, 1 +yerbasbuenas.tk, 1 yert.pink, 1 +yes-money.cf, 1 +yes-money.gq, 1 yes.com, 1 yescool.cn, 0 yesfone.com.br, 1 @@ -128720,11 +131409,13 @@ yeste.tk, 1 yestees.com, 1 yesterford.com, 1 yesterplay.net, 0 +yesteryear-chronicle.cf, 1 yeswecan.co.bw, 1 yeswehack.com, 1 yetahost.com, 1 yeti.ca, 1 yeti.com, 1 +yeti.gq, 1 yetishirt.com, 0 yetivisite.ch, 1 yetkiliservisrehberi.com, 1 @@ -128854,7 +131545,6 @@ ymy.zone, 1 yn.org.nz, 1 ynamly.site, 1 ynode.com, 1 -ynrrsr.com, 1 yo-digital.ga, 1 yoa.st, 1 yoannlatzer.com, 1 @@ -128925,6 +131615,7 @@ yoloboatrentals.com, 1 yolocast.wtf, 1 yolocountyca.gov, 1 yolops.net, 1 +yolosh.se, 1 yoloyolo.top, 0 yombo.net, 1 yomena.in, 1 @@ -128952,6 +131643,7 @@ yoramvandevelde.net, 1 yorcom.nl, 0 yorcool.nl, 0 yorcybersec.co.uk, 0 +yordanisp.tk, 1 yore.tk, 1 yorganica.ga, 1 yorkacademy.ca, 1 @@ -128997,6 +131689,7 @@ youc.ir, 1 youcanbook.me, 0 youcanfinance.com.au, 1 youcanfuckoff.xyz, 1 +youcanhelp.tk, 1 youcanmakeit.at, 1 youcruit.com, 1 youcruit.jobs, 1 @@ -129027,6 +131720,7 @@ youiv4k.com, 1 youiv5.com, 1 youiv6.com, 1 youivc.com, 1 +youivh.com, 1 youivr.com, 1 youivt.com, 0 youivz.com, 1 @@ -129057,6 +131751,8 @@ youngguns.club, 1 younglabour.co.nz, 1 younglabour.nz, 1 younglabour.org.nz, 1 +younglions.cf, 1 +youngmodelsagency.tk, 1 youngpeopleunited.co.uk, 1 youngsook.org, 1 youngsophie.net, 1 @@ -129071,6 +131767,8 @@ youpickfarms.org, 1 your-computer-is-a-hero.tk, 1 your-dns.run, 1 your-fitness-coach.ch, 1 +your-forum.tk, 1 +your-greece.ga, 1 your-idc.tk, 1 your-kurs.tk, 1 your-melody.ru, 1 @@ -129143,8 +131841,10 @@ yourkit.com, 1 yourkrabivilla.com, 1 yourlanguages.de, 1 yourlifespirit.de, 1 +yourloan.gq, 1 yourlondon.wedding, 1 yourlovesong.com.mx, 1 +yourmagicstory.tk, 1 yourms.com, 1 yourname.xyz, 1 yournextagency.com, 1 @@ -129189,6 +131889,7 @@ youthclothing.tk, 1 youthingovernment.com, 1 youthink.jp, 1 youthmarketing.com, 1 +youthnews.tk, 1 youthopportunitieshub.com, 1 youthrules.gov, 1 youtous.me, 1 @@ -129375,6 +132076,7 @@ yukomgroup.com, 1 yukon.ca, 1 yukonconnector.com, 1 yukonlip.com, 1 +yukoslibrary.ga, 1 yuksinau.co.id, 1 yulaiz.com, 1 yule.hk, 1 @@ -129405,6 +132107,7 @@ yuntong.tw, 0 yunzhu.li, 0 yupug.com, 1 yupulse.be, 1 +yura.cf, 1 yuricarlenzoli.it, 1 yurikirin.me, 1 yuriland.xyz, 1 @@ -129530,7 +132233,6 @@ z6512.com, 1 z6519.com, 1 z6527.com, 1 z6529.com, 1 -z6539.com, 1 z6573.com, 1 z6587.com, 1 z6729.co, 1 @@ -129563,7 +132265,7 @@ z8079.com, 1 z8082.com, 1 z8083.com, 1 z8086.com, 1 -z8087.com, 1 +z8087.com, 0 z8089.com, 1 z8099.com, 1 z8106.com, 1 @@ -129664,9 +132366,11 @@ zachschneider.ca, 1 zachyang.cn, 1 zack.today, 0 zackattack.tk, 1 +zackiarfan.ml, 1 zaclys.com, 0 zacmi.com, 0 zadania.wiki, 1 +zadrot.tk, 1 zadroweb.com, 1 zaelkids.it, 1 zaem.tv, 1 @@ -129684,6 +132388,7 @@ zagi.net, 1 zagorod.spb.ru, 1 zagrabg.com, 1 zagranicablog.tk, 1 +zagruz.tk, 1 zahari.tk, 1 zahe.me, 1 zahirdanzavila.com, 1 @@ -129697,6 +132402,9 @@ zahnmedizinzentrum.com, 0 zahnraddruckerei.de, 1 zahrowski.com, 1 zaidan.pw, 1 +zaija.tk, 1 +zaim15min.cf, 1 +zaimdengi.tk, 1 zaimexpress.cf, 1 zaimponuj.pl, 1 zain-hasan.ml, 1 @@ -129709,10 +132417,12 @@ zajm-bez-poruchitelej.cf, 1 zajm-bez-spravok.tk, 1 zajm-ehkspress.ml, 1 zajm-na-kivi.cf, 1 +zajm-pod-raspisku.cf, 1 zajm-pod-zalog.gq, 1 zajmy-contact.cf, 1 zajmy-contact.ga, 1 zajmy-contact.gq, 1 +zajmy-contact.tk, 1 zajsoft.net, 1 zak.co.at, 1 zak.org.pl, 1 @@ -129720,7 +132430,9 @@ zakachat-brauzer.gq, 1 zakachat-temi.gq, 1 zakaria.website, 1 zakariya.blog, 1 +zakarotta.ga, 1 zakarpattya.fun, 1 +zakaz.cf, 1 zakcutner.com, 1 zakcutner.uk, 1 zakelijketaalcursus.nl, 1 @@ -129736,6 +132448,7 @@ zakpex.com, 1 zakr.es, 1 zakrentus-ostrus.space, 1 zakspartiesandevents.com, 1 +zala.ml, 1 zalaetavoleibol.tk, 1 zalamea.ph, 1 zalan.do, 1 @@ -129752,8 +132465,10 @@ zalure.com, 1 zam0th.tk, 1 zamalektoday.com, 1 zamarax.com, 1 +zambianewsforum.tk, 1 zambranopublicidadvideo.com, 1 zamecnikkladno.cz, 1 +zamenim.tk, 1 zametkin.tk, 1 zamki.tk, 1 zamok-love.tk, 1 @@ -129769,6 +132484,7 @@ zancompute.com, 1 zander.dk, 1 zandhuisjes.nl, 1 zandmhomes.com, 1 +zandra.cf, 1 zanellidesigns.co.uk, 1 zaneslaw.com, 1 zanettimateriais.com.br, 1 @@ -129789,11 +132505,14 @@ zanzo.cz, 1 zaoext.com, 1 zaorejas.tk, 1 zap-mag.ru, 1 +zapamini.ml, 1 zaparoh.com, 1 zapier.com, 1 zapmaster14.com, 1 zappbuildapps.com, 0 +zappingarahal.tk, 1 zappingcuraduria.tk, 1 +zapreaders.cf, 1 zaprefy.com, 1 zapzockt.de, 1 zar-kripto.tk, 1 @@ -129808,11 +132527,13 @@ zarabotok-veka.ga, 1 zarabotok24stavki.ru, 1 zarabotokvnet.tk, 1 zarabotokvseti.tk, 1 +zaracraft.tk, 1 zaraheating.co.uk, 1 zaramendez.net, 1 zaratan.fr, 0 zaratime.com, 1 zaraweb.net, 1 +zarbis.tk, 1 zarcik.pl, 1 zarezerwuj-nocleg.com, 1 zargescases.co.uk, 1 @@ -129824,6 +132545,7 @@ zarok.tv, 1 zaroktv.com.tr, 1 zaroktv.krd, 1 zarra.tk, 1 +zaruhi.ml, 1 zary.me, 1 zas4eku.tk, 1 zastenchivost.tk, 1 @@ -129842,8 +132564,10 @@ zawo-electric.de, 1 zayats.tk, 1 zayavka.cf, 1 zayavka.ml, 1 +zaympodzalog.ga, 1 zaympodzalog.ml, 1 zayzoh.com, 1 +zazaradio.tk, 1 zazza.tk, 1 zbanks.cn, 1 zberger.com, 1 @@ -129867,6 +132591,7 @@ zcom.tech, 1 zcon.nl, 1 zcore.org, 1 zcr.ca, 1 +zcrypto.ml, 1 zcwtl.com, 1 zczc.cz, 1 zd1010.com, 1 @@ -129944,6 +132669,7 @@ zdrapti.tk, 1 zdrave-konzultace.cz, 1 zdravekonzultace.cz, 1 zdravesteny.cz, 1 +zdraveziti.eu, 1 zdravkovic.tk, 1 zdravotnikurzy.cz, 1 zdravshop.sk, 1 @@ -129959,6 +132685,7 @@ zeal-and.jp, 1 zeal-interior.com, 1 zealandia.games, 1 zealworks.jp, 1 +zeanweb.tk, 1 zeb.fun, 1 zebbra.ro, 1 zebel.io, 1 @@ -129991,6 +132718,7 @@ zegarkidlakazdego.pl, 1 zegels-danst.tk, 1 zegluje.net, 1 zeglujemy.net, 1 +zegriesalmansa.tk, 1 zeguigui.com, 1 zehdenick-bleibt-bunt.de, 1 zehka.net, 1 @@ -130038,14 +132766,17 @@ zelt.in, 1 zelvar.cz, 1 zemli.tk, 1 zemlova.cz, 1 +zemlyaki.ga, 1 zemlyaki.ml, 1 zemlyaki.tk, 1 zemtime.com, 1 zen-solutions.io, 1 +zen-zone.tk, 1 zen3tech.com, 1 zenassociates.com, 1 zenavita.com, 1 zenbalans.nl, 1 +zenchain.com, 1 zencube.ga, 1 zendarhunters.tk, 1 zendev.ga, 1 @@ -130053,6 +132784,7 @@ zendev.tk, 1 zendrop.com, 1 zenerisprojekty.pl, 1 zenfusion.fr, 1 +zengdong.ren, 1 zenghuanmin.cn, 0 zengold.com, 1 zenideen.com, 1 @@ -130071,7 +132803,6 @@ zenlogic.com, 1 zenluxuryliving.com, 1 zenmail.ga, 1 zenmate.com.tr, 1 -zenmod.in.rs, 1 zeno-dev.com, 1 zenride.co, 1 zenrtal-online-russia.ml, 1 @@ -130094,6 +132825,7 @@ zeplin.io, 1 zeppelflix.de, 1 zeppelin.ml, 1 zepter.ga, 1 +zepter.gq, 1 zer0.de, 0 zercutie.com, 1 zerg.uk, 1 @@ -130101,6 +132833,7 @@ zergy.net, 1 zerm.eu, 1 zerm.link, 1 zero-0.org, 1 +zero-knigi.ml, 1 zero-link.com, 1 zero-skill.net, 1 zero-sum.xyz, 1 @@ -130190,6 +132923,7 @@ zgrep.org, 1 zgyl8.ml, 1 zh.fyi, 1 zh.search.yahoo.com, 0 +zhabababa.gq, 1 zhabagly.com, 1 zhabthra.com, 1 zhamolov.tk, 1 @@ -130232,6 +132966,7 @@ zhengzihan.com, 1 zhenic.ir, 1 zhenn.fr, 1 zhenyan.org, 1 +zhestokiemechtyi.tk, 1 zhestokijavtor.tk, 1 zhi.ci, 1 zhibo16.live, 1 @@ -130284,12 +133019,12 @@ zhukaev.ml, 1 zhuktrans.msk.ru, 1 zhunlink.com, 1 zhuqiang.com, 1 +zhurnalyu.ga, 1 zi.is, 1 zi5.net, 1 ziad87.net, 0 ziarajoias.com.br, 1 ziaulnmonzur.tk, 1 -zicsac.com, 1 zidanpainting.com, 1 ziegenhagel.com, 1 ziegler-heizung-frankfurt.de, 1 @@ -130342,6 +133077,8 @@ zimiao.moe, 1 zimkaru.ga, 1 zimmer-voss.de, 1 zimperium.com, 1 +zinabnews.tk, 1 +zinchenko.gq, 1 zindagilive.tk, 1 zindec.com, 1 zinewords.com, 1 @@ -130354,6 +133091,7 @@ zinniazorgverlening.nl, 1 zinnowitzer-ferienwohnung.de, 1 zinoui.com, 1 zinsserplasticsurgery.com, 1 +zion-craft.tk, 1 zionaesthetics.com.sg, 1 ziondrive.com.br, 1 zionnationalpark.net, 1 @@ -130382,6 +133120,7 @@ zistemo.com, 1 zitadel.ch, 1 zitadel.cloud, 1 zitadel.com, 1 +zithromaxstrepthroat.gq, 1 zitseng.com, 1 zitstabureau24.nl, 1 zivava.ge, 1 @@ -130463,6 +133202,7 @@ zl9696.com, 1 zl9898.com, 1 zlarin.tk, 1 zlatakus.cz, 1 +zlatan-ibrahimovic.tk, 1 zlatanonline.tk, 1 zlatnictvoadamas.sk, 1 zlatograd.bg, 1 @@ -130474,6 +133214,7 @@ zlima12.com, 1 zlogic.xyz, 1 zlogin.nl, 1 zlong6.net, 1 +zlotykameleon.tk, 1 zlotyslawecin.tk, 1 zloybot.tk, 1 zlr.hu, 1 @@ -130491,6 +133232,7 @@ zmartagroup.no, 1 zmartagroup.se, 1 zmc.com.sa, 1 zmessages.com, 0 +zmeya.tk, 1 zmiguel.me, 1 zmk.fr, 1 zmprjg.ml, 1 @@ -130506,18 +133248,22 @@ znachenie-sna.ml, 1 znachenie-sna.tk, 1 znaj.ua, 1 znajdzprzodka.pl, 1 +znakomim.cf, 1 znakomstva-2013.tk, 1 znakomstva.gq, 1 znakomstvablogs.tk, 1 znakomstvatochka.tk, 1 znakomstvo.tk, 1 znalec-okna.cz, 1 +znanie-sila.tk, 1 znaniya.cf, 1 +znanje.gq, 1 znation.nl, 1 znbr.com, 1 znd.jp, 1 zngay.com, 1 znhglobalresources.com, 1 +znich.tk, 1 znidar.org, 1 zning.net.cn, 1 znn.co.jp, 1 @@ -130532,6 +133278,7 @@ zocoxx.com, 1 zode.co, 1 zodgame.fun, 0 zodiacohouses.com, 1 +zodiak.tk, 1 zoedale.co.uk, 1 zoedijital.com, 1 zoefmasters.be, 1 @@ -130542,8 +133289,12 @@ zoepolitics.ml, 1 zof.kh.ua, 1 zoflora.co.uk, 1 zofoke.com, 1 +zofran-medication.cf, 1 zofran.ga, 1 zofran.gq, 1 +zofrancost.ga, 1 +zofrangeneric.ga, 1 +zofranprice.ga, 1 zofrex.com, 0 zofzpcb.com, 1 zogatest.tk, 1 @@ -130554,20 +133305,26 @@ zohra.ninja, 1 zoigl.club, 1 zoisfinefood.fr, 1 zojadravai.com, 1 +zok-ambicija.tk, 1 zoki.art, 1 +zoko.tk, 1 zokster.net, 0 zokuomthawn.tk, 1 zollernalbtour.de, 1 zollprozess.ch, 1 zoloft-medication.ml, 1 +zoloftmedication.gq, 1 zoloftpills.tk, 1 +zoloftprice.cf, 1 zolokar.xyz, 1 zolotie-ptichki.tk, 1 zolotistyi-kofe.gq, 1 zoloto-peterburg.ru, 1 zoloto-spb-skupka.ru, 1 +zolotoioasis.ml, 1 zolotopetrograd.ru, 1 zolucky.com, 1 +zolushka-1950.tk, 1 zolw.info, 1 zom.bi, 1 zombie-40th.com, 1 @@ -130588,6 +133345,7 @@ zonadjadoel.com, 1 zonagratisan.ga, 1 zonainuyasha.tk, 1 zonanews.tk, 1 +zonaperu.tk, 1 zonaquimica.tk, 1 zonarumbera.tk, 1 zonatelevision.tk, 1 @@ -130619,6 +133377,7 @@ zonewatcher.com, 1 zongboao.com, 1 zongheng3d.com, 1 zonglovani.info, 1 +zongzi.zone, 1 zonky.cz, 1 zonky.de, 1 zonneglossis.tk, 1 @@ -130626,6 +133385,7 @@ zonnigzieuwent.nl, 1 zontractors.com, 1 zoo-jewelry.com, 1 zoo24.de, 1 +zooforum.tk, 1 zoogbook.ml, 1 zooish.net, 1 zook.pw, 1 @@ -130666,6 +133426,7 @@ zorgnetwerkenabr.nl, 1 zorgonderwijsnu.nl, 1 zorig.ch, 1 zorium.org, 0 +zornica.tk, 1 zorntt.fr, 1 zorox.sex, 1 zorte.net, 1 @@ -130709,11 +133470,11 @@ zprogramming.tk, 1 zq.com.sg, 1 zqstudio.top, 0 zqwqz.org, 1 -zr-dienstleistungen.de, 1 zravyobrazky.cz, 1 zravypapir.cz, 1 zrejstejna.cz, 1 zrgmedical.com, 1 +zrinski.tk, 1 zrkr.de, 1 zrniecka-pre-sny.sk, 1 zrnieckapresny.sk, 1 @@ -130731,6 +133492,7 @@ zsi.com.tr, 0 zsien.cn, 1 zskomenskeho.cz, 1 zsofit.com.au, 1 +zsoltbereczki.tk, 1 zsoltsandor.me, 1 zsoltsandor.xyz, 1 zsombor.net, 1 @@ -130785,6 +133547,7 @@ zum-baur.de, 1 zum-ziegenhainer.de, 1 zumba-oostende.be, 1 zumba.com, 1 +zumberak.tk, 1 zummoricambi.com, 1 zumtaedanceschool.co.za, 1 zumturm.org, 1 @@ -130803,9 +133566,9 @@ zuppy.pm, 1 zurgl.com, 1 zurich.co.uk, 1 zurlin.de, 1 +zurmas-design.tk, 1 zuru.ml, 1 zuru.tk, 1 -zusammen-grossartig.de, 1 zusjesvandenbos.nl, 1 zuss.tk, 1 zusterjansen.nl, 1 @@ -130816,7 +133579,7 @@ zuzannastrycharska.pl, 0 zuzumba.es, 1 zvejonys.lt, 1 zverskij-site.tk, 1 -zvive.com, 1 +zvezdy-porno.ml, 1 zvps.uk, 1 zvrottal.de, 1 zvukipro.com, 1 @@ -130843,6 +133606,7 @@ zwy.ch, 0 zwyr157wwiu6eior.com, 1 zx1168.com, 0 zxe.com.br, 1 +zxfiles.tk, 1 zxity.co.uk, 1 zxity.ltd, 1 zxity.uk, 1 @@ -130861,6 +133625,7 @@ zydecozityradio.tk, 1 zydronium.com, 1 zydronium.nl, 1 zyex.vip, 1 +zygfrydadamski.tk, 1 zygozoon.com, 1 zylai.com, 1 zylai.net, 1 @@ -130871,8 +133636,10 @@ zypr.pw, 1 zyria.de, 1 zyrillezuno.com, 1 zyter.com, 1 +zythromax.ga, 1 zyul.ddns.net, 1 zywave.co.uk, 1 +zyx3d.tk, 1 zyzardx.com, 1 zyzsdy.com, 1 zz.gy, 1 diff --git a/services/settings/dumps/blocklists/addons-bloomfilters.json b/services/settings/dumps/blocklists/addons-bloomfilters.json index 498d2fa14f406..a689b972c2409 100644 --- a/services/settings/dumps/blocklists/addons-bloomfilters.json +++ b/services/settings/dumps/blocklists/addons-bloomfilters.json @@ -1,5 +1,20 @@ { "data": [ + { + "stash": { + "blocked": [ + "{113f6995-11f9-4ef3-8179-4a1730d881ce}:1.0.0", + "{113f6995-11f9-4ef3-8179-4a1730d881ce}:1.1.0", + "{5f8a1295-c541-45b7-8571-c9ab529da090}:4.5.1" + ], + "unblocked": [] + }, + "schema": 1660828068088, + "key_format": "{guid}:{version}", + "stash_time": 1660912508243, + "id": "aeba682d-cbc7-43f2-ac69-781a52ebd442", + "last_modified": 1660912649592 + }, { "stash": { "blocked": [ @@ -1291,5 +1306,5 @@ "last_modified": 1656333551168 } ], - "timestamp": 1660675044629 + "timestamp": 1660912649592 } diff --git a/services/settings/dumps/main/search-telemetry-v2.json b/services/settings/dumps/main/search-telemetry-v2.json index b2a3db34b32da..c2d140db0f144 100644 --- a/services/settings/dumps/main/search-telemetry-v2.json +++ b/services/settings/dumps/main/search-telemetry-v2.json @@ -1,7 +1,7 @@ { "data": [ { - "schema": 1659619721253, + "schema": 1660225143655, "taggedCodes": [ "MOZ2", "MOZ4", @@ -14,6 +14,7 @@ "MOZL", "MOZM", "MOZO", + "MOZR", "MOZT", "MOZW", "MOZSL01", @@ -40,7 +41,7 @@ "^https://www%5C%5C.bing%5C%5C.com/acli?c?k" ], "id": "e1eec461-f1f3-40de-b94b-3b670b78108c", - "last_modified": 1660225143613 + "last_modified": 1660832830989 }, { "schema": 1657989403056, @@ -153,5 +154,5 @@ "last_modified": 1643136933989 } ], - "timestamp": 1660225143613 + "timestamp": 1660832830989 }
This is an automated email from the git hooks/post-receive script.
richard pushed a commit to branch geckoview-102.3.0esr-12.0-1 in repository tor-browser.
commit c1d6badd2b55643034139489db8565051604d865 Author: Mozilla Releng Treescript release+treescript@mozilla.org AuthorDate: Mon Aug 22 14:38:10 2022 +0000
Update configs. IGNORE BROKEN CHANGESETS CLOSED TREE NO BUG a=release ba=release --- CLOBBER | 2 +- browser/config/version.txt | 2 +- browser/config/version_display.txt | 2 +- config/milestone.txt | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/CLOBBER b/CLOBBER index 06ed06e5d8d1a..fc27ef7d34477 100644 --- a/CLOBBER +++ b/CLOBBER @@ -22,4 +22,4 @@ # changes to stick? As of bug 928195, this shouldn't be necessary! Please # don't change CLOBBER for WebIDL changes any more.
-Merge day clobber 2022-07-25 \ No newline at end of file +Merge day clobber 2022-08-22 \ No newline at end of file diff --git a/browser/config/version.txt b/browser/config/version.txt index 54feb1125b2c5..200a06aef5331 100644 --- a/browser/config/version.txt +++ b/browser/config/version.txt @@ -1 +1 @@ -102.2.0 +102.3.0 diff --git a/browser/config/version_display.txt b/browser/config/version_display.txt index ac21259a9944a..2e1c64f4e8d71 100644 --- a/browser/config/version_display.txt +++ b/browser/config/version_display.txt @@ -1 +1 @@ -102.2.0esr +102.3.0esr diff --git a/config/milestone.txt b/config/milestone.txt index 98a0389d8f8aa..877883e46e649 100644 --- a/config/milestone.txt +++ b/config/milestone.txt @@ -10,4 +10,4 @@ # hardcoded milestones in the tree from these two files. #--------------------------------------------------------
-102.2.0 +102.3.0
This is an automated email from the git hooks/post-receive script.
richard pushed a commit to branch geckoview-102.3.0esr-12.0-1 in repository tor-browser.
commit a220c862e7c2d797d7799d016bbfc6dd599573b4 Author: Mozilla Releng Treescript release+treescript@mozilla.org AuthorDate: Tue Aug 23 12:45:31 2022 +0000
No bug - Tagging 3876d5327f44c991c9034c4112f33f147ab10ab9 with FIREFOX_102_2_0esr_RELEASE a=release CLOSED TREE DONTBUILD --- .hgtags | 1 + 1 file changed, 1 insertion(+)
diff --git a/.hgtags b/.hgtags index 55ab8a3954337..73bed14a12c74 100644 --- a/.hgtags +++ b/.hgtags @@ -3713,3 +3713,4 @@ ac17d3e21f82ce34b2b9f09f8a15b270cf41e91c FIREFOX_RELEASE_102_BASE 73db4126165f2a2eded92f48a6c81c8ece6d21ce FIREFOX_102_1_0esr_RELEASE 40d1412657291933cc2c9d65c3306927c1b332e1 FIREFOX_102_2_0esr_BUILD1 3876d5327f44c991c9034c4112f33f147ab10ab9 FIREFOX_102_2_0esr_BUILD2 +3876d5327f44c991c9034c4112f33f147ab10ab9 FIREFOX_102_2_0esr_RELEASE
This is an automated email from the git hooks/post-receive script.
richard pushed a commit to branch geckoview-102.3.0esr-12.0-1 in repository tor-browser.
commit 63bbb447e5a8dd41dee641fbc1b7e93a83bcb057 Author: ffxbld ffxbld@mozilla.com AuthorDate: Tue Aug 23 00:54:58 2022 +0000
No Bug, mozilla-esr102 repo-update HSTS HPKP remote-settings - a=repo-update r=RyanVM
Differential Revision: https://phabricator.services.mozilla.com/D155303 --- security/manager/ssl/StaticHPKPins.h | 2 +- security/manager/ssl/nsSTSPreloadList.inc | 2563 +++++++++++++++++++- .../dumps/blocklists/addons-bloomfilters.json | 15 +- services/settings/dumps/main/search-config.json | 750 +++--- .../settings/dumps/main/search-telemetry-v2.json | 76 +- .../dumps/security-state/intermediates.json | 38 +- 6 files changed, 2957 insertions(+), 487 deletions(-)
diff --git a/security/manager/ssl/StaticHPKPins.h b/security/manager/ssl/StaticHPKPins.h index ca6cc29b955cd..438d5eb8ace30 100644 --- a/security/manager/ssl/StaticHPKPins.h +++ b/security/manager/ssl/StaticHPKPins.h @@ -1125,4 +1125,4 @@ static const TransportSecurityPreload kPublicKeyPinningPreloadList[] = {
static const int32_t kUnknownId = -1;
-static const PRTime kPreloadPKPinsExpirationTime = INT64_C(1669633805906000); +static const PRTime kPreloadPKPinsExpirationTime = INT64_C(1669682734367000); diff --git a/security/manager/ssl/nsSTSPreloadList.inc b/security/manager/ssl/nsSTSPreloadList.inc index 4a13a9e0d1fff..b31c7771bf6fe 100644 --- a/security/manager/ssl/nsSTSPreloadList.inc +++ b/security/manager/ssl/nsSTSPreloadList.inc @@ -8,7 +8,7 @@ /*****************************************************************************/
#include <stdint.h> -const PRTime gPreloadListExpirationTime = INT64_C(1672053001842000); +const PRTime gPreloadListExpirationTime = INT64_C(1672101930001000); %% 0--1.de, 1 0-0.io, 1 @@ -1069,7 +1069,6 @@ const PRTime gPreloadListExpirationTime = INT64_C(1672053001842000); 168z6.com, 1 168zz.cc, 1 169xpj.com, 1 -16bei.com, 1 16megablast.tk, 1 16packets.com, 1 16qw.tk, 1 @@ -2078,6 +2077,7 @@ const PRTime gPreloadListExpirationTime = INT64_C(1672053001842000); 32bet365.com, 1 32h.de, 1 32kk.edu.ee, 1 +32y.ru, 1 33-couvreur.fr, 1 33-elagage.fr, 1 33-km.ru, 1 @@ -2452,7 +2452,7 @@ const PRTime gPreloadListExpirationTime = INT64_C(1672053001842000); 3957d.com, 1 3957f.com, 1 3957g.com, 1 -396228.com, 1 +396228.com, 0 396301.com, 0 396303.com, 0 396304.com, 0 @@ -5942,6 +5942,7 @@ academy-awards.ml, 1 academyof.com, 1 academyonlinetoyou.tk, 1 academytv.com.au, 1 +acadianapatios.com, 1 acadiate.com, 1 acaeum.com, 0 acalcio.ga, 1 @@ -6462,6 +6463,7 @@ adarsvidler.me, 1 adasbench.com, 1 adata.kz, 1 adativos.com.br, 1 +adauge.com, 1 adawolfa.cz, 1 adbexcavation.ca, 1 adblockextreme.com, 1 @@ -6800,7 +6802,6 @@ advaithbot.xyz, 1 advaithnikhi.ml, 1 advaithnikhi.tk, 1 advance.hr, 1 -advanced-fleet-services.com, 1 advanced-online.eu, 1 advanced.info, 0 advancedboilers.com, 1 @@ -7126,7 +7127,6 @@ afbrtv.com, 1 afbrunswick.com, 1 afbryt.com, 1 afc-capital.mx, 1 -afcmrs.org, 0 afcmrstest.org, 1 afcurgentcarelyndhurst.com, 0 afdah.se, 1 @@ -8311,6 +8311,7 @@ ajoliveira.com, 1 ajoliveira.net, 1 ajoliveira.org, 1 ajoneuvokeskitys.fi, 1 +ajorban.com, 1 ajramos.tk, 1 ajsb85.com, 1 ajscred.online, 1 @@ -9368,6 +9369,7 @@ allseasons-cleaning.co.uk, 1 allseasonschimney.com, 1 allseasonswaterproofing.com, 1 allset.ml, 1 +allshapes.co.nz, 1 allshousedesigns.com, 0 allsoftfree.com, 1 allsoulinc.com, 1 @@ -10269,6 +10271,7 @@ amphibo.ly, 1 amphora.jp, 1 amphora.tk, 1 amphost.tk, 1 +ampicillin.ga, 1 ampicillin.ml, 1 ampicilliniv.tk, 1 ampicillinonline.gq, 1 @@ -10351,6 +10354,7 @@ an-alles-gedacht.de, 1 an0ns.ru, 1 an0ns.tk, 1 an7hrax.se, 1 +anaal-nathrakh.tk, 1 anaaldea.tk, 1 anaalmeisjes.tk, 1 anaalnathrakh.tk, 1 @@ -10377,6 +10381,7 @@ anaethelion.fr, 1 anafranil.cf, 1 anafranil.ga, 1 anageorgia.com, 1 +anagir.tk, 1 anagramma.tk, 1 anahitascribe.tk, 1 anahwaftah.ga, 1 @@ -12388,7 +12393,6 @@ ariacreations.net, 1 ariadermspa.com, 1 ariag.tk, 1 ariajourney.com, 0 -ariamag.com, 1 ariaman.tk, 1 arian.io, 1 ariana.wtf, 1 @@ -12720,7 +12724,6 @@ art-voronov.tk, 1 art21tv-armenian.tk, 1 art30.ro, 1 artacadia.org, 1 -artadagroup.com, 1 artakids.tk, 1 artane.gq, 1 artbalsam.com, 1 @@ -16187,6 +16190,7 @@ baraxolka.ga, 1 baraxolka.ml, 1 barbaderespeito.com.br, 1 barbaleonecuador.com, 1 +barbara-bertagnolli.co.uk, 1 barbara-fuchs-gruene-fuerth.de, 1 barbarabowersrealty.com, 1 barbarabryce.com, 1 @@ -16957,6 +16961,7 @@ beauty2home.net, 1 beauty77.ch, 1 beautyandboutique.tk, 1 beautyandfashionadvice.com, 1 +beautyandthebeast.tk, 1 beautyanna.ga, 1 beautyanna.gq, 1 beautyarticles.tk, 1 @@ -17045,6 +17050,7 @@ bedofcorpses.tk, 1 bedouille.com, 1 bedrijfsfeesten.tk, 1 bedrijfsfotoreportages.nl, 1 +bedrockcommunity.ml, 1 bedrocklinux.org, 1 bedstecasinobonusser.dk, 1 bedtimeflirt.com, 1 @@ -17087,6 +17093,7 @@ beercast.co.uk, 1 beerdigung-hellersdorf.de, 1 beeremovalspretoria.co.za, 1 beergifts.tk, 1 +beerglasses.tk, 1 beerhouse.tk, 1 beerians.com, 1 beerians.info, 1 @@ -17189,6 +17196,7 @@ bejo.be, 0 bejo.by, 0 bejo.cl, 0 bejo.cn, 0 +bejo.com, 0 bejo.com.br, 0 bejo.com.mx, 0 bejo.cz, 0 @@ -17206,7 +17214,9 @@ bejo.vn, 0 bejogt.com, 0 bejoindia.in, 0 bejoindonesia.com, 0 +bejoitalia.it, 0 bejosamen.de, 0 +bejoseeds.com, 0 beka-eg.com, 1 bekabazar.cz, 1 bekeltetes.hu, 1 @@ -17447,6 +17457,7 @@ bengisureklam.com, 1 bengkelkeramik.tk, 1 bengou.tk, 1 bengt.org, 1 +benhamplateau.tk, 1 benhaney.com, 1 benhartmann.de, 0 benhocking.com, 1 @@ -17540,6 +17551,7 @@ benzin.tk, 1 benzonestore.tk, 1 benzou-space.com, 1 beonas.ddns.net, 1 +beonline.ml, 1 beospain.tk, 1 bep.gov, 1 bepayd.com, 1 @@ -17638,6 +17650,7 @@ bermudabathtub-retard.cf, 1 bermytraq.bm, 1 bern.bz, 1 berna.fr, 1 +bernack.ga, 1 bernadette.tk, 1 bernadetteanderes.ch, 0 bernama.com.my, 1 @@ -17742,6 +17755,7 @@ bessems.com, 1 bessems.eu, 1 besser-beissen.de, 1 besser-golfen.tk, 1 +besslavnye-ublyudki.tk, 1 bessmertie.ml, 1 best-accounting-schools.com, 1 best-art-colleges.com, 1 @@ -17768,6 +17782,7 @@ best-photobooth.ro, 1 best-pool-cleaner.com, 1 best-seminar.gq, 1 best-seminar.ml, 1 +best-software.tk, 1 best-survival-bag.com, 1 best-ticket.it, 1 best-tickets.co.uk, 1 @@ -17857,6 +17872,7 @@ bestinductioncooktop.us, 1 bestinfo.com.au, 1 bestinshowing.com, 1 bestinsider.net, 0 +bestinsulatedwaterbottle.tk, 1 bestinterior.fr, 1 bestinver.es, 0 bestitwork.tk, 1 @@ -18023,6 +18039,7 @@ besto.ga, 1 besto.tk, 1 bestofbooks.gq, 1 bestofjazz.org, 1 +bestoldmusic.tk, 1 bestoliveoils.com, 1 bestomania.tk, 1 bestparking.xyz, 1 @@ -18060,7 +18077,9 @@ bestwebcams.ml, 1 bestwebsite.gallery, 1 bestweleenbeetje.nl, 1 bestwigs.ga, 1 +bestwirelessdoorbell.ml, 1 bestwriterjobs.tk, 1 +bestzoo.tk, 1 besured.nl, 1 besv.com, 1 beszerzokozpont.hu, 1 @@ -18475,7 +18494,9 @@ bezdomny.tk, 1 bezemkast.nl, 0 bezin.ga, 1 bezlepkovamatka.cz, 1 +bezoek-benidorm.tk, 1 bezoomnyville.com, 1 +bezopasna-rabota.tk, 1 bezpecnostsiti.cf, 1 bezposrednio.net.pl, 1 bezpredel.tk, 1 @@ -18529,6 +18550,7 @@ bh.sb, 1 bhacit.com, 0 bhaiben.com, 1 bhanaphotography.co.nz, 1 +bharat-media.tk, 1 bharatanatyam-dancer.tk, 1 bharath-g.in, 1 bhat.vn, 1 @@ -18546,6 +18568,7 @@ bhpin.pl, 1 bhpropco.com, 1 bhrenovations.com, 1 bhserralheria.com.br, 1 +bhub.tk, 1 bhuntr.com, 1 bhuvanreddy.space, 1 bhvapers.com, 1 @@ -19651,6 +19674,7 @@ black-holes.org, 1 black-khat.com, 1 black-magic-love-spells.com, 1 black-mail.nl, 1 +black-market.ga, 1 black-pool.net, 1 black-raven.fr, 1 black-rider-studio.eu, 1 @@ -19669,6 +19693,7 @@ blackbbwvideos.com, 1 blackbean.tk, 1 blackbettybbq.com, 1 blackbird-whitebird.com, 1 +blackbirdproperties.tk, 1 blackboxcity.tk, 1 blackbrookwi.gov, 1 blackbyte.it, 1 @@ -19728,6 +19753,7 @@ blackmetalist.tk, 1 blackmetaller.tk, 1 blackminds.tk, 1 blackmistery.tk, 1 +blackmodelsusa.tk, 1 blacknova.io, 1 blackoutzone.tk, 1 blackpapermoon.de, 1 @@ -19737,6 +19763,7 @@ blackphoenix.de, 1 blackpi.dedyn.io, 1 blackportal.tk, 1 blackpurl.com, 1 +blackriverfalls.tk, 1 blackroadphotography.de, 1 blackrockvet.ie, 1 blackroses.tk, 1 @@ -19744,6 +19771,7 @@ blacksamantha.tk, 1 blackscytheconsulting.com, 1 blackseals.net, 1 blacksega.ga, 1 +blackshark.cf, 1 blacksheepsw.com, 1 blackslots.club, 1 blacksniffer.tk, 1 @@ -19751,6 +19779,7 @@ blackspark.tk, 1 blackspider.tk, 1 blacksport.ru, 1 blackstonehost.com, 1 +blackstonepress.tk, 1 blackstrapsecurity.com, 1 blackstump.xyz, 1 blacksuitmedia.com, 0 @@ -19762,6 +19791,8 @@ blacktemplars.tk, 1 blacktown.eu, 1 blacktownbuildingsupplies.com.au, 1 blacktubes.cf, 1 +blacktubes.ga, 1 +blacktubes.ml, 1 blacktype.bet, 1 blackwaterutilities.tk, 1 blackwidow.tk, 1 @@ -19779,6 +19810,8 @@ blagger.tk, 1 blaggo.com, 1 blago-sostoyanie.ga, 1 blago-sostoyanie.gq, 1 +blago-sostoyanie.ml, 1 +blago.tk, 1 blagosvet.ml, 1 blague.tk, 1 blahaj.eu, 1 @@ -19795,6 +19828,7 @@ blakekhan.com, 1 blakenichols.com, 1 blakescrepes.com, 1 blakezone.com, 1 +blako-squad.tk, 1 blakylle.de, 1 blan.tk, 1 blanboom.org, 1 @@ -19958,6 +19992,7 @@ blizko.tk, 1 blizora.com, 1 blk-booking.com, 1 blk-lunch.com, 1 +blk.me, 1 blkbx.eu, 1 blkj.com, 1 bllb.ru, 0 @@ -20273,6 +20308,7 @@ bluuglass.com, 1 bluware.com, 1 bluxus.com, 1 blv38.fr, 1 +blw-eschwege.de, 1 blw.moe, 0 blwsongs.net, 1 blyat.science, 1 @@ -20799,7 +20835,6 @@ boostitco.com, 1 boostplm.com, 1 boostport.com, 1 boostport.com.au, 1 -boostrpro.pl, 1 boostsafety.com, 1 boostup.ai, 1 booter.es, 1 @@ -21621,7 +21656,6 @@ bri.fyi, 1 bri.net.br, 1 brian-ormond.tk, 1 brian.gq, 0 -brianalaway.com, 1 brianalawayconsulting.com, 1 briandorey.com, 0 briandwells.com, 0 @@ -22090,7 +22124,6 @@ bsd.gay, 1 bsdes.net, 1 bsdfreak.dk, 1 bsdguru.net, 1 -bsdlab.com, 0 bsdracing.ca, 1 bsdug.org, 1 bsdunix.xyz, 1 @@ -22176,6 +22209,7 @@ btraviswrightmps.com, 1 btraviswrightmps.org, 1 btrb.ml, 1 btrfs.no, 1 +btsapem.com, 1 btsline.co.id, 1 btslr.co, 1 btsoft.eu, 1 @@ -24724,7 +24758,6 @@ carrozziere.roma.it, 1 carry.luxe, 1 carryvanbruggen.tk, 1 cars4salecy.com, 1 -carsales.com.ng, 1 carseatchecks.ca, 1 carshippingcarriers.com, 1 carsinsuranceis.com, 1 @@ -25384,6 +25417,7 @@ cbintermountainrealty.com, 1 cbiq.com.iq, 1 cblocallocksmiths.co.uk, 1 cbmanager.dk, 1 +cbmc.store, 1 cbmkenya.or.ke, 1 cbmusa.com, 1 cbncuritiba.com, 0 @@ -25630,6 +25664,7 @@ celebritypics.club, 1 celebrityscope.net, 1 celebritysrit.tk, 1 celebritytopnews.tk, 1 +celebslovebrand.com, 1 celebxx.com, 1 celectro-pro.com, 1 celendo.ga, 1 @@ -27805,6 +27840,7 @@ cl0ud.space, 1 claarycherry.com, 1 clacetandil.com.ar, 1 clad.cf, 1 +clague.moe, 1 claibornecountytn.gov, 1 claimconnect.com, 1 claimconnect.us, 1 @@ -27937,7 +27973,9 @@ classichost.gq, 1 classicmagazine.ml, 1 classicpattern.com, 1 classics.io, 1 +classicstories.tk, 1 classictheatrecumbria.co.uk, 1 +classificadostodaoferta.tk, 1 classificar.com.br, 1 classifiedspoint.tk, 1 classlastsforever.co.nz, 1 @@ -27960,7 +27998,6 @@ claudiney.eti.br, 1 claudiney.id, 1 claudiney.info, 1 claudiohdz.com, 1 -claumarservice.com, 1 claus-bahr.de, 1 claus-cremer.tk, 1 clauseriksen.net, 1 @@ -30059,6 +30096,7 @@ conv2pdf.com, 1 convent-mensing.de, 1 convergence.fi, 1 convergencela.com, 1 +convergent.tn, 1 convergnce.com, 1 conversationexchange.com, 1 converser.tk, 1 @@ -30672,6 +30710,7 @@ cp061.com, 0 cpa-ea.co.il, 0 cpadollar.cf, 1 cpaexamguy.com, 1 +cpagray.com, 1 cpanels.us, 1 cpaneltips.com, 1 cpap.com, 1 @@ -30926,7 +30965,6 @@ createcpanama.com, 1 creategyx.ga, 1 createwithcynthia.com, 1 creati.me, 1 -creatiefcoaching.nl, 1 creatieven.com, 1 creatingchange.us, 1 creation-photos.com, 1 @@ -30958,7 +30996,6 @@ creativelysustainable.com, 1 creativemindslms.tk, 1 creativephysics.ml, 1 creativesectors.tk, 1 -creativesmm.com.ua, 1 creativestories.me, 1 creativetechsolution.in, 1 creativeweb.biz, 1 @@ -32229,7 +32266,6 @@ cyrilstoll.ch, 1 cyrokx.com, 1 cyrusdaily.tk, 1 cysi.in, 1 -cysmo.de, 1 cyson.tech, 1 cytat.tk, 1 cytech.com.tr, 1 @@ -32681,7 +32717,6 @@ dandie.tk, 1 danduran.ca, 1 dandymodz.tk, 1 dandymrsb.com, 1 -daneiakartes.info, 0 danelska.pl, 1 danelski.pl, 1 daneshtools.tk, 1 @@ -33066,7 +33101,6 @@ dasignsource.com, 1 dasinternetluegt.at, 1 daskirschhaus.com, 1 dasler.eu, 1 -dasmailarchiv.ch, 1 dassolutions.eu, 1 dastchin.live, 1 dastchin.shop, 1 @@ -34890,7 +34924,6 @@ devurandom.tk, 1 devxify.com, 1 devyanijayakar.com, 1 devz.life, 1 -devzero.io, 1 dewalch.net, 1 dewapress.com, 1 dewereldvankina.be, 1 @@ -34919,7 +34952,6 @@ dextermarket.com, 1 dexterseries.ru, 1 dextra.tk, 1 deyaar-sl.com, 1 -deyanadeco.com, 1 deyute.com, 1 dezea.net, 1 dezeregio.nl, 1 @@ -35430,7 +35462,6 @@ digitaldeli.us, 1 digitaldeliarchive.com, 1 digitaldem.it, 1 digitaldesign.ga, 1 -digitaldruck-kw.de, 1 digitaldruck.info, 1 digitale-bibliothek.tk, 1 digitale-oekonomie.ch, 1 @@ -35944,7 +35975,6 @@ disrupters.ch, 0 disruption.tk, 1 dissectix.io, 1 dissertationhelp.com, 1 -dissidence.ovh, 1 dissident.host, 1 dissieux.com, 1 dissolution-sci.com, 1 @@ -36618,6 +36648,7 @@ doctorfox.co.uk, 1 doctoriko.tk, 1 doctoripfix.com, 1 doctorlab.am, 1 +doctormahamudul.tk, 1 doctormartinclavo.tk, 1 doctornaima.ml, 1 doctornet.ml, 1 @@ -36720,6 +36751,7 @@ dogforum.de, 1 dogfriendly.co.uk, 1 dogfriendlyplaces.eu, 1 dogft.com, 1 +doggingclub.tk, 1 doggo-staging.herokuapp.com, 1 doggo.cloud, 1 doggo.email, 1 @@ -36750,6 +36782,7 @@ dogsite.tk, 1 dogsnaturallymagazine.com, 1 dogsnow.com, 1 dogtowneastpowell.com, 1 +dogtrack.tk, 1 dogtrainermadison.com, 1 dogtrainerorangecounty.com, 1 dogtrainersreno.com, 1 @@ -36786,6 +36819,7 @@ doklinik.com, 1 dokonline.tk, 1 dokspot.cf, 1 dokspot.ga, 1 +doktorplyusheva.ml, 1 doku-gilde.de, 1 dokuboard.com, 1 dokudu.com, 1 @@ -36805,7 +36839,13 @@ dolciariasimonini.com, 1 dolciterapie.com, 1 doldersumenzoon.tk, 1 dolezalpartners.com, 1 +dolg.cf, 1 dolg.ga, 1 +dolg.gq, 1 +dolg.ml, 1 +dolg.tk, 1 +dolgopolova.ga, 1 +dolgorukovo.cf, 1 doli.se, 1 dolice.net, 1 dolinathome.com, 1 @@ -36818,6 +36858,7 @@ dollareast.tk, 1 dollarhero.ga, 1 dollarprofit.tk, 1 dollarrp.pl, 1 +dollarweb.cf, 1 dolle-shop.com.ua, 1 dolledout.co.ke, 1 dollemore.com, 1 @@ -36825,6 +36866,7 @@ dollestieren.tk, 1 dollhouseaustralia.com, 1 dollhousetoyo.com, 1 dolliesmaker.tk, 1 +dolly.ga, 1 dollylox.tk, 1 dollz-world.tk, 1 dollz.tk, 1 @@ -36851,6 +36893,8 @@ dom-riviere.tk, 1 dom.blog, 1 dom2news.gq, 1 dom2news.tk, 1 +dom2seychelles.tk, 1 +dom2tnt.tk, 1 doma.in, 1 domacikavarna.cz, 1 domadillo.com, 1 @@ -36894,6 +36938,7 @@ domarkperu.com, 1 domashnie-zhiwotnye.ru, 1 domashnij-pk.ru, 1 domashnijpk.ru, 1 +domashniy-server.tk, 1 domaxpoker.com, 1 domaza.gq, 1 domaza.ml, 1 @@ -36926,6 +36971,7 @@ dominicanisimo.tk, 1 dominicanosenpr.com, 1 dominichoward.tk, 1 dominicjackson.cf, 1 +dominicjackson.ga, 1 dominicjackson.gq, 1 dominicself.co.uk, 1 dominicself.com, 1 @@ -36945,6 +36991,7 @@ domino99.tk, 1 dominobot.ir, 1 dominobreaker.ml, 1 dominoknihy.cz, 0 +dominolessons.ga, 1 dominomatrix.com, 1 dominoz.tk, 1 domitori.tk, 1 @@ -36960,6 +37007,7 @@ domob.eu, 1 domodeco.fr, 1 domop.net, 1 domop.org, 1 +domostroiy.tk, 1 domostroydon.ru, 0 domostroynn.ru, 0 domostroyrf.ru, 0 @@ -37006,6 +37054,7 @@ donabeneko.jp, 1 donacarlota.net.br, 1 donacije.rs, 1 donaciondeorganos.gov, 1 +donalblaney.cf, 1 donalblaney.ga, 1 donalblaney.gq, 1 donaldduck.nl, 1 @@ -37039,6 +37088,7 @@ donghochinhhang.store, 1 donghua-europe.com, 1 dongjian.com, 1 dongngu.com, 1 +dongor.tk, 1 dongxuwang.com, 1 donhoward.org, 0 donia-almla3b.com, 1 @@ -37049,12 +37099,14 @@ donnaandscottmcelweerealestate.com, 1 donnabrothers.com, 1 donnacha.blog, 1 donnachie.net, 1 +donnapepe.tk, 1 donner-reuschel.de, 1 donnerhollenconstruction.com, 1 donnerwetter.tk, 1 donngle.com, 1 donnons.org, 0 donnoval.ru, 0 +donostiweb.tk, 1 donotdepart.com, 1 donotlink.it, 1 donpanda.cz, 1 @@ -37121,8 +37173,10 @@ doordecor.bg, 1 doorframe.com, 1 doorhandlese.com, 1 doorin.tk, 1 +doorlinekktc.tk, 1 doornmore.com, 1 doors-and-windows.tk, 1 +doorservice.ml, 1 doorshingekit.com, 1 doorswest.net, 1 doortim.nl, 1 @@ -37143,9 +37197,11 @@ dor-tak.ru, 1 dora.cat, 1 dora.moe, 1 doradocomputer.com, 1 +dorados.tk, 1 doradoscampeon.tk, 1 doradosystems.es, 1 doradosystems.ro, 1 +doraemonchile.tk, 1 dorama.gq, 1 doramamusic.gq, 1 doramiru.com, 1 @@ -37191,15 +37247,19 @@ dorth.nl, 1 dortmund.directory, 1 dorwartsgarage.com, 1 dorys.ga, 1 +dos-team.tk, 1 dosavor.com, 1 +dosbox.tk, 1 dosei.net, 1 dosenkiwi.at, 1 dosenpintar.com, 1 dosensosiologi.com, 1 +doserres.tk, 1 dosevue.com, 1 dosgratus.tk, 1 dosimabag.com, 1 dosimapress.com, 1 +dosite.gq, 1 dosje.org, 1 doska.by, 1 doska.cf, 1 @@ -37226,11 +37286,13 @@ dosvientoslighting.com, 1 dosvientosoutdoorlighting.com, 1 doswap.com, 1 doswo-design.at, 1 +dosyaa.tk, 1 dosyanet.cf, 1 dosyanet.tk, 1 doszkocs-zsuzsa.hu, 1 dot.sb, 1 dot42.no, 1 +dota2free.tk, 1 dota2huds.com, 1 dotadotaman.tk, 1 dotatic.com, 1 @@ -37242,6 +37304,7 @@ dotconnor.com, 0 dotfile.tk, 1 dotgov.gov, 1 dotheevolution.tk, 1 +dothegangnamstyle.tk, 1 dothesecurity.com, 1 dotjesper.com, 1 dotjesper.dk, 1 @@ -37250,6 +37313,7 @@ dotjs.party, 1 dotkniseandroida.cz, 1 dotkod.pl, 1 dotlakevillagecouncil-nsn.gov, 1 +dotless.tk, 1 dotlight.ga, 1 dotlimino.tk, 1 dotneko.net, 1 @@ -37305,6 +37369,7 @@ douglascustodio.com.br, 1 douglasmi.gov, 1 douglasresende.tk, 1 douglasrumbaugh.com, 0 +douglegomovie.tk, 1 dougley.com, 1 doujin-domain.cz, 1 doujin.nagoya, 1 @@ -37339,13 +37404,17 @@ dowling.nz, 1 dowling.tk, 1 down-load.dynu.net, 1 down.pm, 1 +downandouts.tk, 1 downbook.org, 1 downestan.ga, 1 downfall-records.tk, 1 +downfreak.tk, 1 downgratis.tk, 1 +download-image.ga, 1 download-knigi.gq, 1 downloadabc.cf, 1 downloadapk.co.id, 1 +downloadapkpokemongo.ga, 1 downloadapkpure.tk, 1 downloadasik.com, 1 downloadbestapps.com, 1 @@ -37362,6 +37431,7 @@ downloadsoftwaregratisan.com, 1 downloadsrc.com, 1 downloadvipgames.tk, 1 downrightcute.com, 1 +downset.tk, 1 downtimerobot.com, 1 downtoagony.tk, 1 downtownafrica.com, 1 @@ -37377,14 +37447,16 @@ doxa.tk, 1 doxal.ro, 1 doxcelerate.com, 1 doxepin1.gq, 1 +doxepinonline.gq, 1 doxyciclin.ga, 1 doxyciclin.gq, 1 +doxyciclin.tk, 1 +doxycyclin.gq, 1 doxycycline-online.cf, 1 doxycycline1.gq, 1 doxycyclinehyclate100mgcap.cf, 1 doxycyclineprices.cf, 1 doyarki.ga, 1 -doyleshamrock.com, 1 doylestownborough.net, 1 doyo.email, 1 doyo.tech, 1 @@ -37483,6 +37555,7 @@ draghive.tv, 1 dragon-aspect.com, 1 dragon-ballz.tk, 1 dragon-chem.eu, 1 +dragon-craft.tk, 1 dragon-hearts.co.uk, 1 dragon-hearts.com, 1 dragon-hearts.net, 1 @@ -37495,6 +37568,7 @@ dragon98.com, 1 dragonballzfigures.com, 1 dragonbike.by, 1 dragonboat.ph, 1 +dragonboatfestival.tk, 1 dragoncave.me, 1 dragoncityhack.tips, 1 dragonclean.gr, 1 @@ -37502,6 +37576,7 @@ dragonclicker.ml, 1 dragondekomodo.com, 1 dragonesymazmorras.tk, 1 dragonfly.co.uk, 1 +dragonflycms.cf, 1 dragonfosfor.be, 1 dragonheartsrpg.com, 1 dragonhill.tk, 1 @@ -37512,7 +37587,10 @@ dragonoid.tk, 1 dragonpi.ga, 1 dragonprogrammer.com, 1 dragonqueen.fi, 1 +dragonradar.tk, 1 +dragonraja.tk, 1 dragonreal.estate, 1 +dragonroost.tk, 1 dragonscale.tk, 1 dragonsgate.ml, 1 dragonshare.tk, 1 @@ -37533,19 +37611,26 @@ drainagedirect.com, 1 draintechnorthwest.net, 1 draintheswampparty.com, 1 drainwllc.com, 1 +drak.tk, 1 drake.partners, 1 drakecommercial.com, 1 drakeluce.com, 1 +drakencan.gq, 1 drakenprospero.com, 0 drakenson.de, 1 drakfot.se, 0 +drakiada.tk, 1 drakkarbilbao.com, 1 draknet.eu, 1 drakoraw.my.id, 1 draliabadi.com, 0 dralucilavolasco.com.br, 1 +drama.tk, 1 dramacooltv.org, 1 +dramakorea.tk, 1 dramaquarter.com, 1 +dramaslayer.ga, 1 +dramatherapie.tk, 1 dramaticpeople.com, 1 dramyalderman.com, 1 dranderle.com, 1 @@ -37570,6 +37655,7 @@ draw.uy, 1 drawchan.org, 1 drawesome.uy, 1 drawguess.fun, 1 +drawing.tk, 1 drawingcode.net, 1 drawtwo.gg, 1 drawvesly.ovh, 1 @@ -37592,6 +37678,7 @@ drclub.tk, 1 drcp.tokyo, 1 drcrhub.com, 1 drdavidricketts.com, 1 +drdeath.tk, 1 drdegenhart.de, 1 drdenisvincenzi.com.br, 1 drdibbus.nl, 1 @@ -37602,8 +37689,10 @@ dreadd.org, 1 dreadfully.cf, 1 dreadfulsanity.com, 1 dreadlocks.tk, 1 +dreadlord.tk, 1 dreadnews.ga, 1 dreads-expert.com, 1 +dream-design.tk, 1 dream-domain.tk, 1 dream-factory.tk, 1 dream-pools.cf, 1 @@ -37626,8 +37715,11 @@ dreamhack.com, 0 dreamhostremixer.com, 1 dreaminformatique.tk, 1 dreaming.solutions, 1 +dreaminjewelz.tk, 1 dreamlab.co.jp, 1 dreamlandmagic.com, 1 +dreamlifeproperty.cf, 1 +dreamlinks.tk, 1 dreamlordpress.it, 1 dreamlux.cz, 1 dreamlux.sk, 1 @@ -37636,15 +37728,19 @@ dreamofice.com, 1 dreampages.tk, 1 dreamphreak.com, 1 dreamqueen.tk, 1 +dreamreality.tk, 1 dreams-2-reality.com, 1 dreamsbythelake.com, 1 +dreamsea.tk, 1 dreamsinbits.com, 1 dreamsindigital.tk, 1 +dreamsjob.cf, 1 dreamsofalostsoul.tk, 1 dreamsolution.nl, 1 dreamsphere.tk, 1 dreamstarter.ml, 1 dreamstudio.com, 1 +dreamstudios.tk, 1 dreamsubmitting.tk, 1 dreamswelcome.com, 1 dreamsxxl.com, 1 @@ -37658,6 +37754,7 @@ dreamz-staging.zone, 1 dreamz.com, 1 dreatho.com, 1 dreax.win, 1 +dredwerkz.tk, 1 dreemurr.com, 1 drehabkhalifa.com, 1 drei01.com, 1 @@ -37672,6 +37769,7 @@ dreigold.de, 1 dreinulldrei.de, 1 dreischneidiger.de, 1 dreizwosechs.de, 0 +drema.tk, 1 drendermobilyaservisi.com, 1 drenergysaveror.com, 1 drenergysaverpdx.com, 1 @@ -37694,6 +37792,7 @@ dressingmaternity.fr, 1 dressrose.com, 1 dressshopboutique.com, 1 dresstique.in, 1 +dreumesshakira.tk, 1 drevoline.com.ua, 1 drew.beer, 1 drew.ga, 1 @@ -37731,6 +37830,7 @@ driesjtuver.nl, 1 driessoftsec.tk, 1 driestwegkerk.nl, 1 driftdude.nl, 1 +drifter.tk, 1 driftingruby.com, 1 driftkikker.tk, 1 driftsjournal.dk, 1 @@ -37811,6 +37911,7 @@ drivetonortheast.com, 1 driveyouradblockcounterup.com, 1 driving-lessons.co.uk, 1 drivingacademy.tk, 1 +drivingcalculator.ga, 1 drivinginstruction.tk, 1 drivingsupport.org, 1 drivinhors.com, 1 @@ -37866,6 +37967,7 @@ droidhere.com, 1 droidific.com, 1 droidtrix.ga, 1 droidtuto.com, 1 +droidwars.tk, 1 droidwiki.de, 1 droitalecole.org, 1 dromax.hu, 1 @@ -37876,6 +37978,7 @@ drone-laws.com, 1 drone-mapping.expert, 1 drone-traveller.com, 1 drone33.fr, 1 +dronebase.cf, 1 dronebl.org, 1 droneland.nl, 1 dronepanorama.net, 1 @@ -37883,6 +37986,7 @@ dronepanorama.nl, 1 dronepilotgeorgia.com, 1 dronepit.dk, 1 droneservices.com.fj, 1 +dronesquadcoptersales.ga, 1 droneup.pl, 1 droneways.tech, 1 droni.cz, 1 @@ -37913,6 +38017,7 @@ dropshipp.site, 1 dropshippers.gq, 1 dropsite.com.au, 1 droso.dk, 1 +drosophila.tk, 1 drost.la, 1 drown.photography, 1 drpa.ca, 1 @@ -37968,8 +38073,12 @@ drugwars.tk, 1 drugzone.tk, 1 druides.tk, 1 druko.cf, 1 +druko.ga, 1 +druko.gq, 1 drum-majo-ijsselstrand.tk, 1 +drum.tk, 1 drumbe.at, 1 +drummachines.ga, 1 drummer.cf, 1 drummondframing.com, 1 drumnbass.tk, 1 @@ -37986,6 +38095,7 @@ druzya.store, 1 drwang.group, 0 drweissbrot.net, 1 drwilfredbrown.com, 1 +dry-cleaning.tk, 1 dryashplasticsurgery.com, 1 dryasinakgul.com, 1 drybjed.net, 1 @@ -38113,10 +38223,12 @@ dtnx.eu, 1 dtnx.net, 1 dtnx.org, 1 dtnxny.com, 1 +dtrifonov.cf, 1 dtuaarsfest.dk, 1 dtune.me, 1 dtx.sk, 1 du-alex.ru, 1 +dual-universe.ga, 1 dual.cat, 1 dual.pw, 0 dualascent.com, 1 @@ -38155,6 +38267,7 @@ dubkov.org, 0 dubl.tk, 1 dublinhonda.com, 1 dublinmazda.com, 1 +dublinrail.tk, 1 duboisinternational.com, 1 duboisinvestissements.com, 1 dubolom.tk, 1 @@ -38239,6 +38352,7 @@ duka.bg, 1 duka.com.ro, 1 dukan-recepty.ru, 1 dukatek.cz, 1 +duke-nukem.tk, 1 dukeandduchessdrivingschool.co.uk, 1 dukegat.de, 0 dukeofmetal.tk, 1 @@ -38250,11 +38364,13 @@ dukun.de, 1 dulanic.com, 1 dulceysalado.tk, 1 dulcinea.eu.org, 1 +dulcinea.tk, 1 dulcinela.es, 1 dulei.si, 1 duleos.com.br, 1 dullapp.com, 1 duloxetinbestellen.gq, 1 +duloxetine.gq, 1 dulse.fr, 1 dum.moe, 1 dum.tw, 1 @@ -38279,9 +38395,11 @@ dunamiscommunity.com, 1 dunangel.com, 1 dunassyn.com, 1 dunatos.tk, 1 +dunberghof.tk, 1 duncancmt.com, 1 duncanfamilytrust.org, 1 duncanwinfrey.com, 1 +dunce.cf, 1 duncm.com, 1 dundalk.ie, 1 dundalkdonnie.com, 1 @@ -38297,6 +38415,7 @@ dungchata.com, 1 dungeon-bbs.de, 1 dungeoncity.com, 1 dungeonedraghi.it, 1 +dungeonfire.tk, 1 dungeonline.com, 1 dungkieu.com, 1 dunia-news.tk, 1 @@ -38307,6 +38426,7 @@ dunkle-seite.org, 1 dunlaptn.gov, 1 dunmanelectric.com, 1 dunmanpoolandspa.com, 1 +dunneworthy.com, 1 dunningtonaudio.co.uk, 1 dunyahalleri.com, 1 duo-tauceti.com, 1 @@ -38334,6 +38454,7 @@ dupuis.xyz, 1 duquess.com.br, 1 duquoinil.gov, 1 dura.si, 1 +durabletravailler.tk, 1 duraes.pt, 0 durakinesis.tk, 1 duramaximportaciones.com, 1 @@ -38366,6 +38487,8 @@ dusmomente.com, 1 dusnan.com, 1 dust.bio, 1 dust.tk, 1 +dust4you.tk, 1 +dustbox.tk, 1 dustinbrett.com, 1 dustman.tk, 1 dustpla.net, 1 @@ -38449,6 +38572,7 @@ dvdmania.ga, 1 dvdmusic.ga, 1 dvdrein.net, 1 dveretti.com, 1 +dveri-lugansk.tk, 1 dvgsites.com, 1 dvhosting.be, 1 dvipadmin.com, 1 @@ -38456,6 +38580,7 @@ dvkg.de, 1 dvmmoving.com, 1 dvn.pt, 1 dvnatura.ch, 0 +dvor.ml, 1 dvorek-karlin.cz, 1 dvorekkarlin.cz, 1 dvorupotocnych.sk, 1 @@ -38520,8 +38645,10 @@ dyeager.org, 1 dyingflame.tk, 1 dykebaby.tk, 1 dyktig.as, 1 +dylan-motorcross.tk, 1 dylancl.cf, 1 dylancl.fr, 1 +dylandeconinck.cf, 1 dylandulaney.com, 1 dylanhansch.net, 1 dylankatz.com, 1 @@ -38565,6 +38692,7 @@ dynamic-movie.com, 1 dynamic-networks.be, 1 dynamicasoft.com, 1 dynamicathletes.ga, 1 +dynamicbusinessconsultants.ga, 1 dynamicdesignuk.com, 1 dynamicdiesupply.com, 1 dynamiclogodesigns.com, 1 @@ -38608,8 +38736,10 @@ dyscalculia-blog.com, 1 dysco.tk, 1 dysgucymraeg.cymru, 1 dysthymia.com, 1 +dyuimovochka.tk, 1 dyve.me, 1 dyxe.me, 1 +dyykkarit.tk, 1 dyyn.de, 1 dyz.pw, 1 dz17.net, 1 @@ -38627,6 +38757,7 @@ dziscover.com, 1 dziseldra.com, 1 dziura.email, 0 dziurdzia.pl, 1 +dzmonarchie.tk, 1 dzndk.net, 1 dzndk.org, 1 dzomo.org, 0 @@ -38641,10 +38772,12 @@ dzyabchenko.com, 0 dzyszla.pl, 1 e-account.by, 1 e-alink.com, 1 +e-antikvar.tk, 1 e-arteria.pl, 1 e-bags.tk, 1 e-balloons.tk, 1 e-baraxolka.ru, 1 +e-belgia.tk, 1 e-bikesdirect.co.uk, 1 e-bodybuilding.tk, 1 e-boekhouden.nl, 1 @@ -38654,12 +38787,15 @@ e-boss.tk, 1 e-branchekoden.dk, 1 e-briancon.com, 0 e-buro.tk, 1 +e-classroom.tk, 1 e-coexist.com, 1 e-colle.info, 1 e-copys.com, 1 e-cottage.com.br, 1 e-daftar.com, 1 +e-dengi.tk, 1 e-diabolo.tk, 1 +e-diapers.tk, 1 e-diasporan.cf, 1 e-diasporan.ga, 1 e-diasporan.gq, 1 @@ -38677,6 +38813,7 @@ e-fitnes.tk, 1 e-games-board.tk, 1 e-gc.de, 1 e-generator.tk, 1 +e-geologia.tk, 1 e-guardian.com.br, 1 e-hair.tk, 1 e-havenotime.tk, 1 @@ -38688,10 +38825,12 @@ e-informatyk.tk, 1 e-instalator.pl, 1 e-interactivenet.tk, 1 e-interview.tk, 1 +e-islam.tk, 1 e-jackets.tk, 1 e-jewelrys.tk, 1 e-kartinki.tk, 1 e-klempir.cz, 1 +e-knitting.tk, 1 e-knitwear.tk, 1 e-kultura.tk, 1 e-lambre.com, 1 @@ -38705,26 +38844,29 @@ e-massage.tk, 1 e-matras.ua, 1 e-medicines.tk, 1 e-medycyna.net, 1 -e-michiganinsurance.com, 1 e-mieszkania.org.pl, 1 e-migration.ch, 0 e-nail.tk, 1 e-name.tk, 1 e-nanum.kr, 1 +e-nature.tk, 1 e-node.net, 1 e-node.ru, 1 e-otdyx.tk, 1 e-peeling.tk, 1 e-peets.tk, 1 e-placement.tk, 1 +e-planshet.tk, 1 e-pns.com, 1 e-pokupki.eu, 1 +e-polygraphy.tk, 1 e-privat.info, 1 e-promotion.tk, 1 e-ptn.com, 1 e-quip.cz, 1 e-random.com, 1 e-receta.cl, 1 +e-recruitment.tk, 1 e-referendum.cz, 1 e-repairs.tk, 1 e-resident.gov.ee, 1 @@ -38742,8 +38884,10 @@ e-smile.tk, 1 e-sneakers.tk, 1 e-standardstore.org, 1 e-streams.tv, 1 +e-student.tk, 1 e-styling.tk, 1 e-sushi.net, 1 +e-sweaters.tk, 1 e-tables.tk, 1 e-tablets.tk, 1 e-teacher.pl, 1 @@ -38752,6 +38896,7 @@ e-tech-solution.net, 1 e-technology.tk, 1 e-techsolution.com, 1 e-techsolutions.net, 1 +e-tires.tk, 1 e-tmf.org, 1 e-tonery.cz, 1 e-top.uz, 1 @@ -38760,6 +38905,7 @@ e-transformer.tk, 1 e-tresor.at, 1 e-trucking.tk, 1 e-typ.eu, 1 +e-umbrellas.tk, 1 e-underwear.tk, 1 e-vau.de, 0 e-verify.gov, 1 @@ -38770,6 +38916,7 @@ e-wish.tk, 1 e-wishlist.net, 1 e-worksmedia.com, 0 e-yachts.tk, 1 +e-zine.tk, 1 e.gg, 1 e.ki, 0 e.mail.ru, 1 @@ -39213,22 +39360,27 @@ eastcoastbubbleandbounce.co.uk, 1 eastcoastexports.tk, 1 eastcobbhoa.com, 1 eastcottvets.co.uk, 1 +eastdream.tk, 1 +eastendonline.tk, 1 easternmontanafair.gov, 1 easternsalesinc.com, 1 eastgreenwichnews.com, 1 eastgrmi.gov, 1 easthaddamct.gov, 1 +eastheaven.ml, 1 eastlothianbouncycastles.co.uk, 1 eastmaintech.com, 1 eastmedo.com, 1 eastmedo.pl, 1 eastnorschool.co.uk, 1 +easton.ga, 1 eastpeoria-il.gov, 1 eastping.com, 1 eastplan.co.kr, 1 eastportcorp.tk, 1 eastprovidenceri.gov, 1 eastshare.ml, 1 +eastside.tk, 1 eastsidecottages.co.uk, 1 eastsideroofingcontractor.com, 1 eastspencer.gov, 1 @@ -39241,6 +39393,7 @@ eastwindsorhistory.tk, 1 eastyorkshirebuses.co.uk, 1 easukasbestos.co.uk, 1 easy-affiliations.tk, 1 +easy-company.tk, 1 easy-design.tk, 1 easy-factures.fr, 1 easy-katka.ga, 1 @@ -39272,7 +39425,9 @@ easyit.ga, 1 easyit.tk, 1 easyjumping.tk, 1 easykonto.de, 1 +easylinker.tk, 1 easylogics.tk, 1 +easymeditation.tk, 1 easymotionskin-japan.jp, 1 easymun.com, 1 easynm.cn, 1 @@ -39280,6 +39435,7 @@ easynotary.ch, 1 easyocm.hu, 1 easyonlinetest.tk, 1 easypay.bg, 1 +easypayment.cf, 1 easypaymentnow.com, 1 easypayments.pro, 1 easypets.fr, 0 @@ -39296,7 +39452,9 @@ easyshare.gq, 1 easysignup.com, 1 easyska.tk, 1 easyslide.be, 1 +easysoft.tk, 1 easysport.lt, 1 +easysubmit.tk, 1 easytamil.tk, 1 easytechguides.com, 1 easytestonline.tk, 1 @@ -39343,6 +39501,7 @@ eauxdespleiades.ch, 0 eava.ga, 1 eazy.gr, 1 eazyfreight.co.uk, 1 +eazyg.tk, 1 eazyinvoice.tk, 1 eazyproject.net, 1 eazytailors.ga, 1 @@ -39405,10 +39564,12 @@ eblan.gq, 1 eblog.cf, 1 ebola-hosting.cz, 1 ebolacharts.ga, 1 +ebolavirus.tk, 1 ebonyriddle.com, 1 eboocker.de, 1 ebookabc.tk, 1 ebookdep.com, 1 +ebookdrive.tk, 1 ebooki.eu.org, 1 ebooknetworking.net, 1 ebookpdf.com, 1 @@ -39421,6 +39582,7 @@ ebooksgratis.tk, 1 ebooksgratuits.org, 1 ebooksinfocus.com, 1 ebooksmile.net, 1 +ebookspy.tk, 1 ebookweb.gq, 1 ebop.ch, 1 eboxgroup.tk, 1 @@ -39431,6 +39593,8 @@ ebrea.ch, 1 ebrnd.de, 1 ebru-gundes.tk, 1 ebrununkasnagi.com, 1 +ebuha.ga, 1 +ebuku.tk, 1 eburg.ml, 1 ec-baran.de, 1 ec-current.com, 1 @@ -39439,12 +39603,14 @@ ec.gov.sl, 1 ec.mine.nu, 1 ecamisetas.com.br, 1 ecampusontario.ca, 1 +ecarch.cf, 1 ecard.ml, 1 ecardoo.com, 1 ecardoo.de, 1 ecardoo.net, 1 ecardoo.org, 1 ecarscash.com, 1 +ecaterina.tk, 1 ecbt.co.il, 1 ecc.ee, 1 ecchidreams.com, 1 @@ -39547,6 +39713,7 @@ ecogen.com.au, 1 ecogen.net.au, 1 ecohaus-pinklao-salaya.com, 0 ecoheatcool.co.uk, 1 +ecohimdv.tk, 1 ecohomebuild.org, 1 ecohostingservices.uk, 1 ecoindia.tk, 1 @@ -39587,12 +39754,14 @@ econativa.pt, 1 econfia.cf, 1 econmarketingdigital.com, 1 economic-sanctions.com, 1 +economicnews.ga, 1 economicplan.gov.au, 1 economics-colleges.com, 1 economie2.alsace, 1 economie2.fr, 1 economiefidu.ch, 0 economies.ch, 0 +economixportal.tk, 1 economycarrentalscyprus.com, 1 economydiva.com, 1 economyroofingco.com, 1 @@ -39604,6 +39773,7 @@ ecopak.org, 1 ecopark.asia, 1 ecorak.de, 1 ecored.pl, 1 +ecorp-australia.tk, 1 ecos-ev.de, 1 ecos.srl, 1 ecosas.org, 1 @@ -39625,10 +39795,14 @@ ecotecelevator.com, 1 ecoteplo.net, 1 ecotrade-disinfestazioni.it, 1 ecotur.org, 1 +ecoturismo.tk, 1 +ecoupakovka.ga, 1 ecourbano.tk, 1 ecoute.tv, 1 ecovetawindoors.com, 1 ecowoman-armenian.tk, 1 +ecowoman-bengalian.tk, 1 +ecowoman-indonezian.tk, 1 ecowoman-turkey.tk, 1 ecowoman-ukraine.tk, 1 ecozip.it, 1 @@ -39650,6 +39824,7 @@ ectora.com, 1 ectpro.co.th, 1 ecuadorbienesraices.com, 1 ecuadorextremo.com, 1 +ecuadorlibrered.tk, 1 ecuadorwillana.com, 1 ecuashop.ec, 1 ecubr.com, 1 @@ -39679,6 +39854,7 @@ eddie.website, 1 eddmil.es, 1 eddokloosterman.com, 1 eddriesen.tk, 1 +eddsworld.tk, 1 eddy-vh.com, 1 eddyn.net, 0 eddysystem.tk, 1 @@ -39691,6 +39867,7 @@ ededdeddy.tk, 1 edefrutos.me, 1 edefrutos2020.com, 1 edegembicycleclub.tk, 1 +edegulkoyu.tk, 1 edehsa.com, 1 edel-suff.de, 1 edelveiys.tk, 1 @@ -39778,6 +39955,7 @@ edlinger.at, 1 edlinger.mobi, 1 edman007.com, 1 edmates.com, 1 +edmedications.tk, 1 edmedsonline.tk, 1 edmilia.tk, 1 edmoncu.com, 1 @@ -39793,6 +39971,7 @@ edragneainpuscarie.ro, 1 edrepay.com, 1 edrgroup.nl, 1 edrosd.cf, 1 +edrost.tk, 1 edsby.com, 0 edscolors.com, 1 edservicing.com, 1 @@ -39837,6 +40016,7 @@ educationconnect.tk, 1 educationdepartment.ml, 1 educationet.tk, 1 educationevolving.org, 1 +educationfirst.ml, 1 educationfutures.com, 1 educationgov.tk, 1 educationhighquality.ml, 1 @@ -39857,6 +40037,7 @@ educator-one.com, 1 educatorretirementsolutions.com, 1 educators.co.nz, 1 educatoys.com.br, 1 +educbook.ga, 1 educheck.tech, 1 educlove.com, 1 educnum.fr, 1 @@ -39870,6 +40051,7 @@ edukle.com, 0 edularidea.com, 1 edularism.com, 1 edulayer.net, 1 +edulinks.ml, 1 edumanage.tk, 1 edumaritime.net, 1 edumaster.pro, 1 @@ -39882,11 +40064,13 @@ edunoor.tk, 1 eduoneschool.tk, 1 edupedia.vn, 1 edupesa.com, 1 +eduproject.tk, 1 eduproquality.tk, 1 eduradiadores.com.br, 1 eduroam.no, 1 eduroam.uy, 1 edusanjal.com, 1 +eduschool.ml, 1 edusercontent.com, 1 eduson.pl, 1 edutour.ml, 1 @@ -39901,6 +40085,7 @@ edvgarbe.de, 1 edvision.ga, 1 edvmesstec.de, 1 edvsolutions.org, 1 +edward-tagle.tk, 1 edwardbrowninvestment.tk, 1 edwarddekker.nl, 1 edwardkong.top, 1 @@ -39909,13 +40094,16 @@ edwardscommercialcleaning.com, 1 edwardsgrounds.co.uk, 1 edwardwall.me, 1 edware.ga, 1 +edweb.tk, 1 edwellbrook.com, 1 edwinlinda.tk, 1 +edwinlugo.gq, 1 edwinmattiacci.com, 1 edwinroelvink.tk, 1 edxg.de, 0 edxn.de, 1 edyhenry.tk, 1 +edyou.org, 0 edzilla.info, 0 edzo.dk, 1 ee-terminals.com, 1 @@ -39997,12 +40185,14 @@ effdocs.com, 1 effe.ch, 0 effective-altruist.com, 1 effectivecoffee.com, 1 +effectivecommunication.tk, 1 effectivepapers.com, 1 effectory.com, 1 effectpointphotography.cf, 1 effectualness.co.za, 1 effer.me, 1 effex.ru, 1 +effexorgeneric.ml, 1 effiasoft.com, 0 effic.es, 1 efficientsolutions.tk, 1 @@ -40060,6 +40250,7 @@ egegesh.ru, 1 egekbb.org, 1 egekenthastanesi.com, 1 egeozcan.com, 0 +egevpare.tk, 1 egfl.org.uk, 1 egg-ortho.ch, 1 eggblast.com, 1 @@ -40086,6 +40277,7 @@ eggendorfer.wine, 1 eggert.org, 1 eggertsvillefiredistrict.gov, 1 egglestonyouthcenter.org, 1 +eggman.tk, 1 eggqvq.com, 1 eggrolls.ml, 1 eggy.com.au, 0 @@ -40093,6 +40285,7 @@ eggzr.com, 1 egh.ir, 1 eghotline.com, 1 egiftcards.be, 1 +egilopaseryh.tk, 1 egins.tk, 1 egipet-tiz.tk, 1 egiptwakacje.tk, 1 @@ -40139,12 +40332,17 @@ egyhometex.com, 1 egypt-tourism.ga, 1 egypt-tours.tk, 1 egyptamazing.com, 1 +egypte.tk, 1 egypten.net, 1 +egyptenet.tk, 1 +egypteweb.tk, 1 +egyptexposed.tk, 1 egypthomemaintenance.com, 1 egyptian.gq, 1 egyptianhak.tk, 1 egyptour.com, 1 egytimes.tk, 1 +egzekucija.tk, 1 egzotique.com, 1 eh-huebner-stiftung.de, 1 ehaccp.it, 1 @@ -40178,6 +40376,7 @@ ehsehk.com.ph, 1 ehtgov.org, 1 ehtnj.com, 1 ehtp.pt, 1 +ehtu.tk, 1 ehub.cz, 1 ehub.hu, 1 ehub.pl, 1 @@ -40317,6 +40516,7 @@ ekdoseis.gr, 1 ekeblock.com, 1 ekedc.com, 1 ekedp.com, 1 +ekhabar.ml, 1 ekho.tk, 1 ekimaeseitai.com, 1 ekimma.com, 1 @@ -40337,6 +40537,7 @@ ekokpandm.tk, 1 ekol-2001.tk, 1 ekole.shop, 1 ekologie.tk, 1 +ekologija.tk, 1 ekonbenefits.com, 1 ekong366.com, 1 ekonomika.tk, 1 @@ -40367,8 +40568,10 @@ ekyu.moe, 1 ekz-crosstour.ch, 1 ekzarta.ru, 0 ekzcrosstour.ch, 1 +ekzotika.tk, 1 el-cell.com, 1 el-hossari.com, 1 +el-mundo.tk, 1 el-tatwer.tk, 1 ela-n.de, 1 elaax.de, 0 @@ -40379,6 +40582,7 @@ eladalfassa.com, 1 elaheze.com, 0 elahuehuete.art, 1 elainerock.com, 1 +elakiri.cf, 1 elalmibar.com, 1 elana.lt, 1 elandador.com.mx, 1 @@ -40404,6 +40608,7 @@ elba-elba.tk, 1 elba-hotel.tk, 1 elbaal.gov, 1 elbaradei.com, 1 +elbersdometechniek.tk, 1 elbetech.net, 1 elbiaadmin.sk, 1 elbienestar.com, 1 @@ -40459,6 +40664,7 @@ elecfair.com, 1 elecpromo.com, 1 electerious.com, 1 electicofficial.com, 0 +electionpresidentiellegabon2009.ga, 1 electionrunners.com, 1 electionsbycounty.com, 1 electionsdatabase.com, 1 @@ -40468,7 +40674,9 @@ electra.co.nz, 1 electrafk.cl, 1 electragirl.com, 1 electras.cf, 1 +electric-clippers.tk, 1 electric-fencingjohannesburg.co.za, 1 +electric-samara.tk, 1 electric-vault.co.uk, 1 electricagoura.com, 1 electricagourahills.com, 1 @@ -40543,6 +40751,7 @@ electricmoorpark.com, 1 electricnewburypark.com, 1 electrico.tk, 1 electricoakpark.com, 1 +electricpower.tk, 1 electricsimivalley.com, 1 electricthousandoaks.com, 1 electricwestlakevillage.com, 1 @@ -40589,6 +40798,7 @@ elegance-sm.com, 1 elegance96.tk, 1 elegancecement.com, 1 eleganceperfumes.com.br, 1 +elegant-design.tk, 1 elegant-techno.com, 1 eleganta.ga, 1 elegantfamilyhotelsandresorts.com, 1 @@ -40666,6 +40876,7 @@ elementalrobotics.com, 1 elementalsoftware.net, 1 elementalsoftware.org, 1 elementarewatson.it, 1 +elementarium.cf, 1 elementarium.ga, 1 elementarty.com, 1 elementarywave.com, 1 @@ -40854,6 +41065,7 @@ elitegameservers.net, 1 elitegaragedoors247.com, 1 elitehouse.tk, 1 elitelandscapedesigns.ca, 1 +elitemud.tk, 1 elitenovice.tk, 1 elitepainmanagement.com, 1 elitephysiotherapy.com.au, 1 @@ -40918,6 +41130,7 @@ ellevit.ch, 0 ellhofen-peccioli.de, 1 elliboettcher.de, 1 ellierider.com, 1 +elligre.tk, 1 ellinaras.tk, 1 elliot.work, 1 elliot.wtf, 1 @@ -40930,6 +41143,7 @@ ellipticalmachine.tk, 1 elliquiy.com, 1 ellisamusements.co.uk, 1 ellisleisure.co.uk, 1 +ellisvanlaarhoven.tk, 1 elliteshop.vn, 1 elliyoung.com, 1 elloadingjr.ga, 1 @@ -41022,6 +41236,7 @@ elsadonaire.tk, 1 elsas.tk, 1 elsbouslanostraaficio.tk, 1 elsector7.tk, 1 +elsemanariodesalamanca.tk, 1 elsenzhafen.de, 1 elsg.co.uk, 1 elshadaysemijoias.com.br, 1 @@ -41068,10 +41283,12 @@ elvikom.co.uk, 1 elvikom.pl, 1 elviraszabo.com, 1 elvis-presley.tk, 1 +elvismania.tk, 1 elvispresley.net, 1 elvorti.bg, 1 elvorti.com, 1 elwave.org, 1 +elweronete.tk, 1 elwix.com, 1 elyazmusic.com, 1 elycoin.io, 1 @@ -41098,6 +41315,7 @@ emailalias.nl, 1 emailbusters.tk, 1 emailconfiguration.com, 1 emailexpress.ga, 1 +emailfreeshop.tk, 1 emailgonderim.tk, 1 emailhunter.co, 1 emailing.alsace, 1 @@ -41108,7 +41326,9 @@ emailmeform.com, 1 emailprivacytester.com, 1 emailprocessorpro.gq, 1 emailpursuits.com, 1 +emailservers.tk, 1 emailtemporal.org, 0 +emaks.tk, 1 emalm.com, 1 emancipator.com, 1 emanol.co.uk, 1 @@ -41217,6 +41437,7 @@ emilecourriel.com, 1 emileon.gr, 1 emilianomaccaferri.com, 1 emiliaromagnaeconomy.it, 1 +emiliederavinspain.tk, 1 emiliehouse.net, 1 emiliendevos.be, 1 emilieporte.fr, 1 @@ -41241,6 +41462,7 @@ emily-website.tk, 1 emily.moe, 1 emilybellydance.com.au, 1 emilyjohnson.ga, 1 +emilymarques.ga, 1 emilypennock.co.uk, 1 emilypennock.com, 1 emilywufaith.tk, 1 @@ -41331,6 +41553,7 @@ emperola.com, 1 emperor-penguin.com, 1 emperor-penguins.com, 1 emperor.blog, 1 +emperoranimeindo.tk, 1 emperors.net, 1 empese.com, 1 empherino.net, 1 @@ -41383,6 +41606,7 @@ empresa1.com.br, 1 empresa365.com, 1 empresautil.tk, 1 emprunterlivre.ci, 1 +emptiness.cf, 1 empty.host, 1 emptybox.org, 1 emptyfields.com, 1 @@ -41418,6 +41642,7 @@ emulsifier.ga, 1 emuma.com, 1 emunet.net, 1 emuser.tk, 1 +emusicuz.tk, 1 emvitals.com, 1 emvoiceapp.com, 1 emw3.com, 1 @@ -41476,6 +41701,7 @@ encrypt.org.uk, 1 encrypted.at, 1 encrypted.google.com, 1 encryptedaudience.com, 1 +encryptionweb.tk, 1 encryptmy.site, 1 encryptmycard.com, 1 encryptmysite.net, 1 @@ -41504,6 +41730,7 @@ enderandrew.com, 1 enderbycamping.com, 1 enderdrachelp.ddns.net, 1 enderhesap.com, 1 +enderhost.tk, 1 enderle.cloud, 1 enderman.eu, 1 enderszone.com, 0 @@ -41515,6 +41742,7 @@ endiana.ml, 1 endingthedocumentgame.gov, 1 endless.pet, 1 endlessdiy.ca, 1 +endlessfashion.tk, 1 endlessvideo.com, 1 endlesswebsite.tk, 1 endofevolution.com, 1 @@ -41610,16 +41838,21 @@ energyforum.tk, 1 energygenie.com.au, 1 energygroup.gq, 1 energygroup.tk, 1 +energyguru.tk, 1 energyhomeservice.ca, 1 energyhybrid.ga, 1 energylocal.com.au, 1 energylocals.com, 1 energylocals.com.au, 1 +energymedia.tk, 1 energysaveroregon.com, 1 +energysite.tk, 1 energysolutionstech.com, 0 energystar.gov, 1 energysystems.com, 1 +energytrust.tk, 1 energyuse.net, 1 +energywisdom.tk, 1 enerity.eu, 1 enerity.io, 1 enerot.com, 1 @@ -41645,6 +41878,7 @@ enforcement-trends-test.azurewebsites.net, 1 enforcement-trends.azurewebsites.net, 1 eng-erlangen.de, 0 eng3corp.com, 1 +eng4arab.tk, 1 engageapp.net, 1 engagebranding.com, 1 engagelogic.com, 1 @@ -41696,6 +41930,7 @@ engl-systems.de, 1 englandairportcars.com, 1 englandbeach.com, 1 englandschool.tk, 1 +english-to-russian-translation.tk, 1 english-training.tk, 1 englishbulgaria.net, 1 englishcast.com.br, 1 @@ -41707,6 +41942,7 @@ englishfamilyzone.tk, 1 englishforums.com, 1 englishll.com, 1 englishlol.com, 1 +englishouse.tk, 1 englishphonopass.com, 1 englishtofrench.eu, 1 englishwineproducers.co.uk, 1 @@ -41722,6 +41958,7 @@ engution.biz, 0 engvid.com, 1 engweld.co.uk, 1 engym.com.tw, 1 +enhanced-mail.tk, 1 enhancemedia.co.uk, 1 enia.com, 1 enigheten.tk, 1 @@ -41736,6 +41973,7 @@ enitso.de, 1 enity.tk, 1 eniwa-eye.com, 1 enixgaming.com, 1 +eniyicrmprogramlari.tk, 1 enizioshop.com, 1 enjin.io, 1 enjin.zone, 1 @@ -41754,6 +41992,7 @@ enkelpaamelding.no, 1 enker.tk, 1 enky.be, 1 enlace.vip, 1 +enlacesgranotas.tk, 1 enlamochiladeadri.com, 1 enlasnubes.tk, 1 enlaztravel.com, 1 @@ -41845,9 +42084,11 @@ enterprisey.enterprises, 1 enterprivacy.com, 1 entersoftsecurity.com, 1 entersynapse.com, 1 +entertaiment-news.tk, 1 entertainerzone.tk, 1 entertainmentblog.tk, 1 entertainmentformitzvahs.com, 1 +entertainmentsrit.tk, 1 enteweb.tk, 1 enthasso.gr, 1 entheogens.com, 1 @@ -41911,6 +42152,7 @@ environmental-colleges.com, 1 envirotecstructures.com.au, 1 envisionmedicalgroup.com, 0 envisionsproperty.com, 1 +envisolarvind.tk, 1 enviyatar.tk, 1 envoie.moi, 1 envoyez.moi, 1 @@ -41920,6 +42162,7 @@ envydesigns.tk, 1 envygeeks.io, 1 envysmile.com, 1 envywe.com, 1 +enweb.ml, 1 enwikipedia.tk, 1 enwillyado.tk, 1 enxadahost.com, 1 @@ -41933,6 +42176,7 @@ eoitek.com, 1 eol-team.tk, 1 eola.co, 1 eon.tech, 1 +eonclub.tk, 1 eongame.tk, 1 eonhive.com, 1 eons.io, 1 @@ -41979,6 +42223,8 @@ epica.tk, 1 epicapos.cz, 1 epiccdn.net, 1 epiccraft-mc.de, 1 +epicdesign1.tk, 1 +epicdesign2.tk, 1 epicdowney.com, 1 epicentar.mk, 1 epicenter.ga, 1 @@ -41995,6 +42241,7 @@ epicinflatables.co.uk, 1 epiclawnpro.com, 1 epiclegends.ml, 1 epiclub.com.au, 1 +epicmoney.tk, 1 epicmusicradio.ml, 1 epicnex.com, 1 epicpages.com, 1 @@ -42028,6 +42275,7 @@ epizentrum.work, 1 epizentrum.works, 1 eplayer.cz, 1 eplayer.sk, 1 +eplenet.tk, 1 epliar.com, 1 eplus.group, 1 epmcentroitalia.it, 1 @@ -42153,6 +42401,8 @@ eravurnet.tk, 1 erback.tk, 1 erboristeria.milano.it, 1 erboristeria.roma.it, 1 +erbt.tk, 1 +erciyesspor.tk, 1 erclab.kr, 1 erclaim.com, 1 ercnationwide.com, 1 @@ -42165,6 +42415,7 @@ erechimimoveis.com.br, 1 erectarack.com.au, 1 erectiepillenwinkel.nl, 1 erector.cf, 1 +erector.tk, 1 eredmenye.xyz, 1 erefredag.se, 1 eregma.tk, 1 @@ -42189,6 +42440,7 @@ erhvervsposten.dk, 1 erhydro.com, 1 eriador.io, 1 eric-huber.de, 1 +eric-kolelas.tk, 1 eric-masters.tk, 1 eric.jetzt, 1 eric1932.tk, 1 @@ -42209,6 +42461,7 @@ erichoekstra.nl, 1 erichollander.photography, 1 erichorstmanshof.nl, 1 erichuber.de, 1 +erichware.tk, 1 ericisaweso.me, 0 ericjohnltd.com, 1 erick.blog, 1 @@ -42239,6 +42492,7 @@ eriix.org, 1 erik-stomp.de, 1 erik.dedyn.io, 1 erik1erik1.com, 1 +erikaepedro.ga, 1 erikbraam.com, 1 erikdslater.com, 1 erikheemskerk.nl, 1 @@ -42283,12 +42537,14 @@ erogen.org, 1 erogen.su, 1 eroimatome.com, 1 erokat.ga, 1 +erolib.ga, 1 eromasajes.com, 1 eromon.net, 1 eron.info, 1 eropics.to, 1 erosbeautyandwellness.com, 1 eroscomixitalia.tk, 1 +erosofia.tk, 1 eroticgirlfriend.com, 1 eroticlist.com, 1 eroticmassagevegas.com, 1 @@ -42297,6 +42553,7 @@ eroticsochi.com, 0 erotiksexgeschichten.net, 1 erotikstahrtseite.cf, 1 erotikstahrtseite.ga, 1 +erotikstahrtseite.gq, 1 erotikstahrtseite.tk, 1 erotismo.co, 1 erotycznehistorie.pl, 1 @@ -42324,6 +42581,7 @@ error418.nl, 1 errortools.com, 1 ers35.com, 1 ersa-shop.com, 1 +ersdfaredsaeem.tk, 1 erseni.net, 1 ershiwo.com, 1 ersinbiltekin.tk, 1 @@ -42361,6 +42619,7 @@ erwinpaal.nl, 1 erwinschmaeh.ch, 1 erwinsite.tk, 1 erwinwensveen.nl, 1 +erythromycinonline.gq, 1 erythroxylum-coca.com, 1 eryxmail.de, 1 erzaehlwerkstatt-heilbronn.de, 1 @@ -42419,6 +42678,8 @@ esball888.com, 1 esball888.net, 1 esbgood.com, 1 esbuilders.co.nz, 0 +esc-romania.tk, 1 +esc-turkey.tk, 1 esc.gov, 1 escae.ml, 1 escalando.tk, 1 @@ -42482,6 +42743,7 @@ escuelaelretamo.cl, 1 escuelagobierno.org, 1 escuelainfantilpizcas.com, 1 escuelaparapapas.tk, 1 +escuelasargento.tk, 1 escuelitasansebastian.cl, 1 escuelotika-online.tk, 1 escyr.top, 1 @@ -42493,6 +42755,7 @@ esdiscuss.org, 1 eseances.ch, 1 esecuredata.com, 1 eservices-greece.com, 1 +eset.ml, 1 esexchange.ga, 1 esfiledecrypter.com, 1 esforces.com, 1 @@ -42523,6 +42786,7 @@ eskapi.fr, 1 eskdale.net, 1 eskiceviri.cf, 1 eskiegaming.com, 1 +eskimosboards.ga, 1 eskimuzikatolyesi.org, 1 eskisehirhaberleri.tk, 1 esko.bar, 1 @@ -42543,6 +42807,7 @@ esocite.la, 1 esoko.eu, 1 esolcourses.com, 1 esolitos.com, 1 +esomeprazole1.gq, 1 eson.eu, 1 esono.de, 1 esopticallabs.com, 1 @@ -42555,7 +42820,7 @@ esoterikerforum.de, 1 espace-caen.fr, 0 espace-gestion.fr, 1 espace-habitat-francais.fr, 1 -espace-orenda.ch, 0 +espace-orenda.ch, 1 espace-vet.fr, 1 espace.network, 1 espace.spb.ru, 0 @@ -42569,13 +42834,16 @@ espachavo.tk, 1 espacioantiguo.com, 1 espacioprofundo.com.ar, 0 espacioseideas.mx, 1 +espacioweb.tk, 1 espacoalimentoesaude.com.br, 1 espacosaudesuplementos.com.br, 1 espaiblancandorra.ga, 1 espaiblancandorra.gq, 1 +espaiblancandorra.ml, 1 espaider.com.br, 1 espairecer.pt, 1 espanol.search.yahoo.com, 0 +espanyoldebarna.tk, 1 espass.gq, 1 espci.fr, 1 especificosba.com.ar, 1 @@ -42609,6 +42877,7 @@ espub.org, 1 espyder.net, 1 esq, 1 esquelario.tk, 1 +esquirebrotherhood.tk, 1 esquirelawfirm.com, 1 esquirelawservices.com, 1 esquirou-trieves.fr, 0 @@ -42680,6 +42949,7 @@ estateways.com, 1 estcequemonordinateurestallume.fr, 1 estcequemontelephoneestallume.fr, 1 estcequonmetenprodaujourdhui.info, 1 +esteban-abadahs.tk, 1 estebanborges.com, 1 estebanoria.net, 1 estedafah.com, 1 @@ -42710,9 +42980,12 @@ estoniananonymous.tk, 1 estoniantrade.ee, 1 estonoentraenelexamen.com, 1 estopero.tk, 1 +estradiolbestellen.gq, 1 estreetshuffle.com, 1 estrella.tk, 1 estrietoit.com, 0 +estrogenonline.gq, 1 +estrogens.gq, 1 estruendo.tk, 1 estuarystudent.tv, 1 estudantetorcedor.com.br, 1 @@ -42727,6 +43000,7 @@ estudiomantis.tk, 1 estudionale.com, 0 estudionale.com.ar, 1 estudios-biblicos.tk, 1 +estudiosalmogavares.tk, 1 estudiosmart.com, 1 estudiovillaran.com, 1 estudosdavida.com.br, 1 @@ -42745,6 +43019,8 @@ esvaco.cf, 1 esw.com, 1 esy.nl, 1 esyoil.com, 1 +esys.ga, 1 +esystems.tk, 1 eszkola.pl, 1 et-inf.de, 1 et.al, 1 @@ -42793,6 +43069,7 @@ eternalsymbols.com, 1 eternegy.co, 1 eternit.roma.it, 1 eternitdesio.it, 1 +etestyonline.tk, 1 etf.nu, 1 etf2l.org, 1 etfacta.com, 1 @@ -42853,6 +43130,7 @@ ethiopian.dating, 1 ethitter.com, 1 ethnews.today, 1 ethniki-antistasi-dse.gr, 1 +ethnopsychoanalyse.tk, 1 ethosinfo.com, 1 ethotupala.tk, 1 ethzero.uk, 1 @@ -42958,9 +43236,11 @@ eujuicers.ru, 1 eujuicers.si, 1 eujuicers.sk, 1 eulenschmiede.de, 1 +euleres.tk, 1 eulessplumbers.com, 1 euman.ml, 1 eumananc.ro, 1 +eumk6.ml, 1 eung.ga, 1 eupay.de, 1 euphoriaonline.tk, 1 @@ -42985,6 +43265,7 @@ euroalter.com, 1 eurobadmaasbracht.nl, 1 eurobattle.tk, 1 eurobeaute.be, 1 +eurobilltracker.tk, 1 eurocars2000.es, 1 eurocertificazione.it, 1 eurococos.com.ua, 1 @@ -43006,6 +43287,7 @@ eurofire.tk, 1 euroflora.com, 1 euroflora.mobi, 1 euroflorist.cf, 1 +euroflorist.ga, 1 euroflorist.tk, 1 eurofoot.cf, 1 eurofrank.eu, 1 @@ -43049,8 +43331,11 @@ europeonline.tk, 1 europeontrack.org, 1 europeos.es, 1 europesearbeiders.be, 1 +europesrit.tk, 1 +europetraveler.tk, 1 europetravelservice.co.uk, 1 europop.com, 1 +europrise.ie, 0 eurorecambios24.com, 1 euroroad17.dk, 1 euroscot.de, 1 @@ -43060,6 +43345,7 @@ euroskano.nl, 1 eurospecautowerks.com, 1 eurosquad.tk, 1 eurostrategy.vn.ua, 1 +eurosun.tk, 1 euroswapper.tk, 1 euroteam.tk, 1 eurotest.tk, 1 @@ -43075,6 +43361,7 @@ euruni.edu, 1 eusarse.tk, 1 eusebiu.com, 1 euskalstakepool.win, 1 +euskaltzaleak.tk, 1 eusou.ml, 1 eustaquio.tk, 1 eusystemic.com, 1 @@ -43101,6 +43388,8 @@ evadi.ca, 1 evafernandez.tk, 1 evafojtova.cz, 1 evai.me, 1 +evaisanta-mariaalmudever.tk, 1 +evaisanta.tk, 1 evakuator-kharkov.kh.ua, 1 evakuator-tut.by, 1 evakuator.services, 1 @@ -43153,6 +43442,7 @@ eve0s.com, 1 eveapk.com, 1 evearly.com, 1 eveaz.com, 1 +eveco-mebel.ga, 1 evedanjailbreak.com, 1 eveetcie.com, 1 eveil-et-savoirs.com, 1 @@ -43178,7 +43468,9 @@ eventact.com, 0 eventaro.com, 1 eventblog2017.tk, 1 eventcore.tk, 1 +eventdays.tk, 1 eventerlebnis.ch, 1 +eventfun.tk, 1 eventide.space, 1 eventive.org, 0 eventmake.es, 1 @@ -43224,6 +43516,7 @@ evermed.com.au, 1 evernaut.com, 1 everpcpc.com, 1 everready.tk, 1 +everseo.tk, 1 eversightwealth.com, 1 evertonarentwe.com, 1 evertradeelectronics.com, 1 @@ -43250,6 +43543,7 @@ everyfad.com, 1 everyhq.com, 1 everykidoutdoors.gov, 1 everymanandhisdogvineyard.com, 1 +everyoneadmins.tk, 1 everyonefit.com, 1 everysaving.ae, 1 everysaving.ca, 1 @@ -43280,6 +43574,7 @@ eveshaiwu.com, 1 eveshamglass.co.uk, 1 eveswell.com, 1 evetech.net, 1 +evezqurbanli.tk, 1 evga.com, 1 evhoeft.com, 1 eviadc.com, 1 @@ -43293,6 +43588,7 @@ evidencija.ba, 1 evies.tk, 1 evil-empire.tk, 1 evilbeasts.ru, 1 +evilbrood.tk, 1 evilbunnyfufu.com, 1 evilcodes.tk, 1 evildarkness.tk, 1 @@ -43328,6 +43624,7 @@ evobox.store, 1 evoco.vc, 1 evodation.com, 1 evodation.org, 1 +evojska.tk, 1 evok.com.co, 1 evokepk.com, 1 evokewonder.com, 1 @@ -43335,6 +43632,7 @@ evolucioneducativa.com.ec, 1 evolucionestudios.com.bo, 1 evolucionradio.tk, 1 evolution-gaming.tk, 1 +evolution-host.ga, 1 evolution-x.org, 1 evolution.codes, 1 evolutionbiote.com, 1 @@ -43342,6 +43640,7 @@ evolutioninflatables.co.uk, 1 evolutionlending.co.uk, 1 evolutionosteopathy.co.uk, 1 evolutionpets.com, 1 +evolutive-records.tk, 1 evoluzione.fr, 1 evolvedevlabs.de, 1 evolvetechnologies.co.uk, 1 @@ -44007,7 +44306,9 @@ f88vip124.com, 1 f88vip125.com, 1 f88vip126.com, 1 f88vip127.com, 1 +f88vip128.com, 1 f88vip13.com, 1 +f88vip130.com, 1 f88vip136.com, 1 f88vip137.com, 1 f88vip138.com, 1 @@ -44585,7 +44886,6 @@ fansale.de, 1 fanschic.com, 1 fansided.com, 1 fansta.jp, 1 -fanstuff.ru, 1 fantacast.it, 1 fantasea.pl, 1 fantasiapainter.com, 1 @@ -44994,6 +45294,7 @@ fayettecountywv.gov, 1 fayettemopd.gov, 1 fayettevillewv.gov, 1 faymoshub.com, 1 +fayntic.com, 1 faysalabdi.fi, 1 fazal.tv, 1 fazet.tk, 1 @@ -45887,7 +46188,6 @@ financecontrol.tk, 1 financedepth.com, 1 financedraft.com, 1 financeguest.com, 1 -financehindi.com, 1 financeinterface.tk, 1 financejobs.ch, 1 financelong.com, 1 @@ -45948,7 +46248,7 @@ findedeinencoach.net, 1 findelahistoria.com, 1 findete.tk, 1 findeth.io, 1 -findheim.at, 1 +findheim.at, 0 findingawesome.com, 1 findinggenius.com, 1 findingimagesers.ga, 1 @@ -46090,6 +46390,7 @@ firebirdrangecookers.com, 1 firebounty.com, 1 fireboxfood.com, 1 firebrandchurch.com, 1 +firebugmusic.com, 1 firecask.com, 1 firechip.cc, 1 firechip.srl, 1 @@ -46299,7 +46600,7 @@ fitkram.cz, 1 fitleads.nl, 1 fitmeat.at, 1 fitmommyinheels.com, 1 -fitmybike.eu, 0 +fitmybike.eu, 1 fitness-challenge.co.uk, 1 fitness-world.ga, 1 fitness.gov, 1 @@ -47525,7 +47826,6 @@ forocio.tk, 1 forocoches.com, 1 forocristiano.tk, 1 forodebanfield.tk, 1 -forodeespanol.com, 1 forodieta.com, 0 foroenguera.tk, 1 forojovensanfernando.tk, 1 @@ -47835,7 +48135,6 @@ foxdirectory.tk, 1 foxes.no, 1 foxesofleicester.com, 1 foxeworks.net, 1 -foxghoul.com, 1 foxing.club, 1 foxly.de, 1 foxmailer.ml, 1 @@ -48859,7 +49158,6 @@ ftgeufyihreufheriofeuozirgrgd.tk, 1 ftgho.com, 1 fthat.link, 1 ftl-gaming.tk, 1 -ftl13.com, 1 ftm.wiki, 1 ftmc.tk, 1 ftmwiki.com, 1 @@ -49503,7 +49801,6 @@ gabaldon.nl, 1 gabapentin.gq, 1 gabbeh.jp, 1 gabby-online.tk, 1 -gabby.vn, 1 gabbyer.ga, 1 gabbyer.gq, 1 gabbyer.ml, 1 @@ -49710,7 +50007,6 @@ galilahiskye.com, 1 galilei.tk, 1 galileicompara.com, 1 galileo.io, 1 -galileohealth.com, 1 galim.org.il, 1 galina.ga, 1 galinas-blog.de, 1 @@ -50017,7 +50313,6 @@ gaojianli.tk, 1 gaon.network, 1 gaos.org, 1 gaozj.com, 1 -gapalmoil.com.ng, 1 gapdirect.com, 1 gapfa.org, 0 gapfa.ro, 1 @@ -51705,6 +52000,7 @@ gjengset.com, 1 gjnoonan.co.uk, 1 gjspunk.de, 0 gjung.com, 0 +gkbm.com, 1 gkconsultancy.tk, 1 gkdk.se, 1 gkdworld.com, 1 @@ -51882,11 +52178,13 @@ globalbusinessrisk.com, 1 globalcancer.tk, 1 globalchemlab.ga, 1 globalconsultant.tk, 1 +globalconsulting.ml, 1 globaldataline.ml, 1 globaldefensa.tk, 1 globaldestruction.tk, 1 globaleducationservices.net, 1 globalenergyinterconnection.com, 0 +globalentertainment.ga, 1 globalepsilon.com, 1 globalformat.de, 1 globalfuture.eu, 1 @@ -51979,6 +52277,8 @@ globotech.be, 1 globotur.de, 1 globowood.ml, 1 globuli-info.de, 1 +globus-plus.ml, 1 +globustrust.tk, 1 gloeckle-gruppe.de, 1 glofox.com, 1 gloning.name, 1 @@ -52107,12 +52407,14 @@ gnu.style, 1 gnuand.me, 1 gnucashtoqif.us, 1 gnulinux.gq, 1 +gnulinuxforum.tk, 1 gnupi.tk, 1 gnuplus.me, 1 gnush.cf, 1 gnush.ga, 1 gnush.gq, 1 gnusocial.jp, 1 +gnuworldorder.ml, 1 gnwp.eu, 1 gnylf.com, 1 go-away.xyz, 1 @@ -52176,9 +52478,11 @@ gockelsee.de, 1 gockhuatsuky.tk, 1 goclark.at, 1 gocleanerslondon.co.uk, 1 +goclix.ml, 1 gocornwallbus.co.uk, 1 gocphongthuy.net, 1 god-clan.hu, 1 +godalivetpalandet.tk, 1 godall.tk, 1 godalyan.com, 1 godan.tech, 1 @@ -52192,6 +52496,7 @@ goddamnwinnebago.com, 1 goddessacumen.com, 1 goddesslena.com, 1 godesigner.ru, 1 +godfilm.tk, 1 godiscovers.com, 1 godles.pl, 1 godmusicapp.com, 1 @@ -52246,6 +52551,7 @@ gofobo.com, 1 gofoiayourself.org, 1 gofoodservice.com, 1 goforcex.top, 0 +gofriends.cf, 1 gofundhourly.tk, 1 gofundme.com, 1 goge.ml, 1 @@ -52276,6 +52582,7 @@ goingawesomeplaces.com, 1 goinggreenshow.gq, 1 goingreen.com.au, 1 goiymua.com, 1 +goizalde.tk, 1 gojo.global, 1 gojoy.vn, 1 gokazakhstan.com, 1 @@ -52289,11 +52596,16 @@ golan.ml, 1 golang.org, 1 golang.zone, 1 golaw.ua, 1 +golayamadam.tk, 1 +gold-bird.tk, 1 gold-diamondltd.tk, 1 +gold-fm.ml, 1 gold-iptv.fr, 1 goldandgopher.com, 1 goldankauf1875.at, 1 +goldband.tk, 1 goldbar.com.hk, 1 +goldbug.ga, 1 goldchip.com, 1 goldclubcasino.com, 1 goldcoast-plumbing.com.au, 1 @@ -52301,6 +52613,7 @@ goldcoastasian.com, 1 goldcoastphotographycourses.com, 1 goldcoastplumbingcompany.com.au, 1 goldcoaststumpbusters.com, 1 +goldcreek.tk, 1 golden-jackass.com, 1 golden-kamuy.com, 1 golden-sea.tk, 1 @@ -52308,6 +52621,7 @@ golden-squad.com, 1 goldenage.tk, 1 goldenagefoundation.tk, 1 goldenbadger.de, 0 +goldenberg.tk, 1 goldencircle.ga, 1 goldenclub.ga, 1 goldendawnapersonalaffair.com, 1 @@ -52317,6 +52631,7 @@ goldeneyesantafe.com, 1 goldengatesports.com, 1 goldenhillsoftware.com, 1 goldenhost.ca, 1 +goldenhouse.ga, 1 goldenkeys.io, 1 goldenoaksgolfclub.com, 1 goldenowl.ca, 1 @@ -52330,6 +52645,7 @@ goldentech.ca, 1 goldentechelectronics.net, 1 goldentip.cf, 1 goldentriangletourindia.com, 1 +goldenwolrd.tk, 1 goldenworldec.com, 1 goldenyacca.co.uk, 1 goldenyacca.net, 1 @@ -52337,7 +52653,10 @@ goldenyacca.org, 1 goldex.tk, 1 goldfavela.com, 1 goldfelt.com, 1 +goldfingermusic.tk, 1 +goldfm1031.tk, 1 goldfmromania.ro, 1 +goldhill.ml, 1 goldloeckchen159.net, 1 goldmancarpetcare.com, 1 goldminer.ga, 1 @@ -52346,6 +52665,7 @@ goldpreisfinder.at, 1 goldschmiede-suessenguth.de, 1 goldsilver.org.ua, 1 goldspace.tk, 1 +goldstandardtrust.tk, 1 goldstein.rs, 0 goldstein.tel, 1 goldwater.gov, 1 @@ -52391,9 +52711,11 @@ golikes.ml, 1 golink.co, 0 golnet.hu, 1 goloa.fr, 1 +goloaninsurance.tk, 1 goloborodko.net, 1 golosbots.tk, 1 golosok.ml, 1 +golosovanye4you.tk, 1 golovbuh.online, 1 golser-schuh.at, 1 golser.info, 1 @@ -52411,7 +52733,9 @@ gomelphoto.com, 1 gomer.tk, 1 gometa.link, 1 gomezhvac.com, 1 +gomezites.tk, 1 gomiblog.com, 1 +gomicrophone.ml, 1 gomine.tk, 1 gommista.roma.it, 1 gomods.link, 1 @@ -52443,6 +52767,7 @@ gonx.dk, 0 gonzalesca.gov, 1 goo.gl, 1 gooch.io, 1 +good-cd.ml, 1 good-course.ga, 1 good-know.gq, 1 good-linux.cf, 1 @@ -52457,6 +52782,7 @@ gooddatingsites.ml, 1 goodday.finance, 1 gooddayatwork.co.uk, 1 gooddomainna.me, 1 +goodenglish.ga, 1 goodesign.su, 1 goodfeels.net, 1 goodfoodrussia.com, 1 @@ -52484,6 +52810,8 @@ goodmood.fr, 1 goodmoodsocken.de, 1 goodmorningapril.com, 1 goodontop.com, 1 +goodopportunity.ga, 1 +goodpeople.tk, 1 goodryb.top, 1 goodseed.nl, 1 goodsex4all.com.br, 1 @@ -52542,22 +52870,30 @@ gopnikman.cf, 1 gopornovideo.com, 1 gopostore.com, 1 goppold.net, 1 +gopri.tk, 1 goproallaccess.com, 1 +gopronow.ga, 1 goprozone.com, 1 gopuntaisla.com, 1 gopwhip.gov, 1 goquiq.com, 1 goquiqstatus.com, 1 +gorakhpurclassifieds.tk, 1 goranrango.ch, 1 gorazde.tk, 1 gorbatschow.tk, 1 gorbov.tk, 1 +gorby.tk, 1 +gordas.cf, 1 gordeijnsbouw.nl, 1 +gordion.tk, 1 gordon-reid.com, 1 gordonbeeming.xyz, 1 gordonhamilton.com, 1 +gordvorets.tk, 1 gordyf.com, 1 gordyforty.com, 1 +gorepriest.tk, 1 gorf.club, 1 gorgebelle.com, 1 gorgeouslyflawed.com, 1 @@ -52570,16 +52906,27 @@ gorky.media, 1 gorlani.com, 1 gorlani.net, 1 gorod74.ru, 0 +gorodabakan.cf, 1 +gorodabakan.ga, 1 +gorodabakan.gq, 1 gorodabakan.ml, 1 +gorodabakan.tk, 1 gorodivanovo.tk, 1 gorodrabot.ru, 1 gorodrostov.tk, 1 +gorodruza.tk, 1 gorodshinspb.ru, 1 +gorodyaroslavl.tk, 1 goroscop.ga, 1 +goroscop.ml, 1 goroscop.tk, 1 goroscope2011.tk, 1 +goroskop-sovmestimosti-znakov.tk, 1 +goroskop-sovmestimosti.ml, 1 +goroskop.gq, 1 goroskopnew.tk, 1 gorschenin.com, 1 +gorstom.ml, 1 gortaniza.tk, 1 gosaavd.tk, 1 gosarh.tk, 1 @@ -52626,6 +52973,7 @@ gotasdeconocimiento.ml, 1 gotcounterers.ga, 1 gotcounterest.ga, 1 goteleport.com, 1 +gotepisodes.tk, 1 gotforumers.ga, 1 gotgeeks.nl, 1 gotgenes.com, 0 @@ -52634,6 +52982,7 @@ gothic-world.tk, 1 gothic.dating, 1 gothiclandscape.com, 1 gothicmarketing.tk, 1 +gothicsite.tk, 1 gotikadesaldos.tk, 1 gotirupati.com, 0 gotit.com.tw, 1 @@ -52656,6 +53005,7 @@ gotonline.ml, 1 gotonline.tk, 1 gotorussia.tk, 1 gotovilekovi.tk, 1 +gotovka.ga, 1 gotovka.tk, 1 gotowebstore.com, 1 gotoxy.at, 1 @@ -52664,6 +53014,7 @@ gotravel.hu, 1 gotravel.us, 1 gotravelmexico.com.mx, 1 gotrek.com.au, 1 +gotriage.tk, 1 gotrustify.com, 1 gotscrapcar.com, 1 gotstreamingers.ga, 1 @@ -52697,12 +53048,16 @@ goutsmits-tegelwerken.nl, 1 gov.tc, 1 gov.uk, 0 govape.tk, 1 +governmentjob.gq, 1 governmentjobs.gov, 1 governorhub.com, 1 govindagiri.tk, 1 +goviralnow.ml, 1 govisitcostarica.co.cr, 1 govisitcostarica.com, 1 govisitsandiego.com, 1 +govno-site.tk, 1 +govnohosting.cf, 1 govnosite.tk, 1 govorenefekt.com, 1 govotecolorado.gov, 1 @@ -52734,6 +53089,7 @@ gpastore.com.br, 1 gpbdev.ru, 0 gpccp.cc, 1 gpcp.org, 1 +gpcs.ml, 1 gpcsolutions.fr, 1 gpdp.it, 1 gpfclan.de, 1 @@ -52787,6 +53143,7 @@ graandco.com, 1 graasp.net, 0 grabacabpa.com, 1 grabadolasermonterrey.com, 1 +graberbooks.gq, 1 grabi.ga, 1 grabnews.ga, 1 grabnews.tk, 1 @@ -52807,6 +53164,7 @@ graceradio.tk, 1 gracethrufaith.com, 1 gracetini.com, 1 gracia-club.tk, 1 +graciasmarvin.tk, 1 gracodesign.eu, 1 gradedblue.com, 1 gradelink.com, 1 @@ -52831,6 +53189,7 @@ graf-igor.ch, 1 graf.re, 1 grafcaps.com, 1 grafe.com, 1 +grafenberg.tk, 1 graffen.dk, 0 graffiti-street-art-ebook.tk, 1 graffitinetwerk.nl, 1 @@ -52890,8 +53249,10 @@ granby404.eu, 1 grancargo.com.br, 1 grancellconsulting.com, 1 grancordobahoy.com.ar, 1 +grand-books.cf, 1 grand-design.tk, 1 grand-house.gq, 1 +grand-knighki.gq, 1 grand-sity.ru, 1 grandbelgian.be, 1 grandcafeatpark.nl, 1 @@ -52913,6 +53274,7 @@ grandesign.pt, 1 grandfallscamp.com, 1 grandfieldok.gov, 1 grandfootball.tk, 1 +grandi-books.gq, 1 grandisco.tk, 1 grandkids-toys.com, 1 grandlineshop.com, 1 @@ -52925,6 +53287,7 @@ grandpad.biz, 1 grandpad.net, 1 grandpadusercontent.com, 1 grandrapidsmn.gov, 1 +grandstarcourier.ml, 1 grandtiresers.ga, 1 grandviewheights.gov, 1 grandwailea.com, 1 @@ -52937,6 +53300,7 @@ grani.gq, 1 granian.pro, 1 granica.tk, 1 granishe.com, 1 +granit-capital.ga, 1 graniteind.com, 1 granitestateproductions.tk, 1 grannys-stats.com, 1 @@ -52973,6 +53337,7 @@ graphicbuffet.co.th, 1 graphicdesignresources.net, 1 graphicdream.tk, 1 graphicnab.com, 0 +graphicspace.tk, 1 graphicwallet.com, 0 graphicz.ml, 1 graphiste-freelance-rouen.fr, 1 @@ -53011,6 +53376,7 @@ grast.jp, 1 graszoden.tk, 1 gratelin.ga, 1 gratis-app.com, 1 +gratis-hosting.cf, 1 gratis.market, 1 gratis4u.tk, 1 gratisfullalbum.tk, 1 @@ -53025,6 +53391,7 @@ gratiz.nl, 1 gratschwirt.com, 1 grattan.co.uk, 1 grattecenne.com, 1 +gratuitweb.tk, 1 graumeier.de, 1 gravedad-zero.tk, 1 gravedigger.tk, 1 @@ -53070,6 +53437,7 @@ graysonsmith.co.uk, 1 graysquare.com, 1 grayville-il.gov, 1 grazetech.com, 1 +grazhdanskij-advokat.tk, 1 grc.com, 0 grceurope.eu, 1 grday.com, 1 @@ -53077,6 +53445,7 @@ great-ajax.tk, 1 great-mom.tk, 1 great.nagoya, 1 greatagain.gov, 1 +greataltrock.tk, 1 greatbeginningsmi.com, 1 greatdanegrp.com, 1 greatepier.tk, 1 @@ -53089,6 +53458,7 @@ greatestwebsiteonearth.com, 0 greatfallsmt.gov, 1 greatfire.kr, 1 greatfire.org, 1 +greatgooglymoogly.tk, 1 greathairtransplants.com, 1 greatlakesden.net, 1 greatlakesintegrativemed.com, 1 @@ -53100,6 +53470,7 @@ greatpages.com.br, 0 greatplainsaustralia.com.au, 1 greatrenumbering.tk, 1 greatsankeypc.org.uk, 1 +greatscholars.tk, 1 greatscience.tk, 1 greatsittersers.ga, 1 greatsittersest.ga, 1 @@ -53162,6 +53533,7 @@ greendessertest.ga, 1 greendiscussionsers.ga, 1 greendotcc.com, 1 greendotcredit.com, 1 +greendragonsearch.tk, 1 greendrive.tk, 1 greendvorik.com.ua, 1 greenearthlawns.com, 0 @@ -53173,6 +53545,7 @@ greenews.ga, 1 greenface.it, 1 greenfever.pl, 1 greenfieldlaxwi.gov, 1 +greenforum.tk, 1 greenfy.de, 1 greengarden.tk, 1 greengates.co.uk, 1 @@ -53180,6 +53553,7 @@ greengo.shop.pl, 1 greengoblindev.com, 1 greengorych.ru, 1 greengov.gov, 1 +greengrocery.tk, 1 greenhats.de, 1 greenhillhosting.com, 1 greenholiday.tk, 1 @@ -53189,6 +53563,7 @@ greeningsremovalsandstorage.co.uk, 1 greenkey.gent, 1 greenkitchen.tk, 1 greenlakecountywi.gov, 1 +greenland-estate.tk, 1 greenleft.org.au, 1 greenlifetour.tk, 1 greenliquidsystem.com, 1 @@ -53287,10 +53662,12 @@ grekiskagudar.tk, 1 grekos.com.pl, 1 gremagol.xyz, 1 gremlinsmountain.tk, 1 +grenade.ga, 1 grenadiercorps-kaarst.de, 1 grenadiere-kaarst.de, 1 grenadierkorps-kaarst.de, 1 grenadierkorps.de, 1 +grend.gq, 1 grengine.ch, 1 grenlan.com, 1 grenlandkiropraktor.no, 1 @@ -53317,6 +53694,7 @@ greybeards.ca, 1 greycentre.com, 1 greycrane.net, 1 greydesign.tk, 1 +greyhackcentral.gq, 1 greyhash.se, 1 greyheads.cat, 1 greyline.tk, 1 @@ -53326,6 +53704,7 @@ greypanel.com, 0 greyrectangle.com, 1 greyskymedia.com, 1 greystonesmovement.com, 1 +greystonesscouts.tk, 1 greywalker.tk, 1 greywolf.cz, 1 grfnhousing.org, 1 @@ -53355,6 +53734,7 @@ grieg.org, 1 grieglogistics.no, 1 griegshipbrokers.com, 1 griegshipbrokers.no, 1 +griendencollege.tk, 1 grienenberger.eu, 1 griesser2.de, 1 griffinsrfc.tk, 1 @@ -53367,6 +53747,7 @@ grigo.ga, 1 grigo.tk, 1 grigorev.tk, 1 grijalba.tk, 1 +grijpskerk500.tk, 1 grillen-darf-nicht-gesund-sein.de, 1 grillfocused.com, 1 grillidellostretto.tk, 1 @@ -53396,6 +53777,7 @@ gripencrossfit.gq, 1 gripnext.com, 1 gripnijmegen.rip, 1 gripvol.nl, 1 +gripwenab.cf, 1 grishavirus.cf, 1 grissianerhof.com, 1 griswoldia.gov, 1 @@ -53407,6 +53789,7 @@ grizz.gdn, 1 grizzenergygum.com, 1 grizzlead.com, 1 grizzlys.com, 1 +grizzlys.tk, 1 grnbank.com, 1 gro.life, 1 groaccess.com, 1 @@ -53460,6 +53843,7 @@ grossiste-vanille.fr, 1 grossmisconduct.news, 1 grossorders.com, 1 groszek.pl, 1 +grotesk.tk, 1 groth.im, 1 groth.xyz, 1 grothem.cf, 1 @@ -53471,6 +53855,7 @@ grouchysysadmin.com, 1 ground-control.de, 1 groundball.tk, 1 groundengenharia.com, 1 +groundfm.tk, 1 groundhogg.nl, 1 groundlabs.com, 1 groundmc.net, 1 @@ -53505,10 +53890,12 @@ groups.google.com, 1 groupsgyani.com, 1 groupsh.ca, 1 groupsite.blue, 1 +groupx.tk, 1 grove-archiv.de, 1 grovecity.cf, 1 grovecity.ga, 1 grovecity.gq, 1 +grovecity.ml, 1 grovesales.co.uk, 1 growatiopex.com, 1 growbydata.com, 1 @@ -53574,6 +53961,7 @@ grundlage.fi, 1 grundschule-mittelbuch.de, 1 grundskoleboken.ga, 1 grundskoleboken.gq, 1 +grundskoleboken.tk, 1 grundycountyil.gov, 1 grundycountyiowa.gov, 1 grunex.com, 0 @@ -53607,6 +53995,7 @@ grupomultiservicio.com, 1 grupoparco.com, 1 grupoproabienesraices.com.mx, 1 grupoprodec.com.mx, 1 +grupos.cf, 1 gruposanjose.tk, 1 gruposiit.com.mx, 1 grupovendap.com, 1 @@ -53624,6 +54013,7 @@ gruver.de, 1 gruwa.net, 1 gruz0.ru, 1 gruzchiki.ml, 1 +gruzchiki74.tk, 1 gruzinfo.tk, 1 gruzoperevozki.ml, 1 gruzoperevozki.tk, 1 @@ -53696,6 +54086,7 @@ gtmhub.com, 1 gtn-pravda.ru, 1 gtnh.ru, 1 gtoepfer.de, 1 +gtonline.ml, 1 gtopala.com, 1 gtopala.net, 1 gtour.info, 0 @@ -53728,13 +54119,17 @@ guardedbox.com, 1 guardedbox.es, 1 guarderiajackson.tk, 1 guardiabermellon.tk, 1 +guardian-codex.tk, 1 guardian-heliotrope.tk, 1 guardian360.nl, 1 guardianerm.com, 1 guardiansoftheearth.org, 1 guardiapretoriana.tk, 1 guarever.tk, 1 +guarrato.tk, 1 +guategmala.ga, 1 guateradio.tk, 1 +guayaquil-consort.tk, 1 gubagoo.com, 1 gubagoo.io, 1 gubernia37.ml, 1 @@ -53750,13 +54145,16 @@ gudrunfit.dk, 1 gudrungroup.be, 1 gueckgueck.tk, 1 guegan.de, 1 +guejarsierra.tk, 1 guell.email, 1 guelo.ch, 1 guelphhydropool.com, 1 guendra.dedyn.io, 1 +guenther-freitag.tk, 1 guenthereder.at, 1 guerard.info, 1 guercioarchitecture.com, 1 +guernica1913.tk, 1 guernseycounty.gov, 1 guerra-civil.tk, 1 guerra24.net, 1 @@ -53764,12 +54162,15 @@ guerracivilencaceres.tk, 1 guerrasgalacticas.tk, 1 guerrilla-marketing.cf, 1 guerrilla-rf.com, 1 +guerrillaradio.tk, 1 guerrillas.tk, 1 guesclin.com, 1 guessmatch.com, 1 guestandmore.de, 1 +guestby.tk, 1 guesthouse-namaste.com, 1 guesthouse.tk, 1 +guestnetscript.tk, 1 guestofhonor.tk, 1 gueules-cassees.asso.fr, 1 guevener.de, 1 @@ -53797,6 +54198,7 @@ guiaextra.com, 1 guiaminhasaude.net, 1 guiascliente.com, 1 guiasdemexico.tk, 1 +guiasescapate.tk, 1 guiaturismovallarta.com, 1 guiaturisticanuevayork.com, 1 guid2steamid.com, 1 @@ -53804,6 +54206,7 @@ guid2steamid.pw, 1 guidaditalia.com, 1 guide-ecole.ch, 1 guide-peche-cantal.com, 0 +guide-voyage.ga, 1 guidebook.co.tz, 1 guidechecking.com, 1 guidedesventes.fr, 1 @@ -53863,6 +54266,7 @@ guitartrader.international, 1 gujarat.tk, 1 gujun-sky.com, 1 guki.me, 1 +gulabovski.ga, 1 gulchuk.com, 1 gulcinulutuna.com, 1 guldhaug.org, 1 @@ -53878,9 +54282,11 @@ gulleyperformancecenter.com, 1 gulliwer.tk, 1 gulphora.tk, 1 gulshankumar.net, 1 +gulsot.tk, 1 gumag.tk, 1 gumbles.tk, 1 gumbo-millennium.nl, 1 +gumbo.gq, 1 gumbo.nu, 1 gumbointro.nl, 1 gumbolustrum.nl, 1 @@ -53943,6 +54349,7 @@ gurumobile.tk, 1 gurunanakdarvar.tk, 1 gurunpa.com, 1 gururi.com, 1 +guruworld.tk, 1 gus.host, 1 gus.moe, 1 gusar.by, 1 @@ -53953,13 +54360,17 @@ gustaff.de, 1 gustarfsberg.cf, 1 gustarfsberg.ga, 1 gustarfsberg.gq, 1 +gustarfsberg.tk, 1 +gustavo-lima.ml, 1 gustavo.website, 1 gustavomolina.com, 1 gustavovelasco.ml, 1 +gustavscelmins.tk, 1 gusted.xyz, 1 gustiaux.com, 0 gusto.com, 1 gustom.io, 0 +gusuraman.tk, 1 gutegutscheine.at, 1 gutegutscheine.ch, 1 gutegutscheine.de, 1 @@ -54046,6 +54457,7 @@ gwmean.tk, 1 gwmjordan.com, 1 gwnmarketing.com, 1 gwo24.pl, 1 +gworld.cf, 1 gwrr.com, 1 gwrtech.com, 1 gwtg.com, 1 @@ -54078,6 +54490,7 @@ gymkirchenfeld.ch, 1 gymnaserenens.ch, 0 gymnasium-farmsen.de, 1 gymnasium-hittfeld.de, 1 +gymnasium56.tk, 1 gymnastic.cf, 1 gymnastic.ga, 1 gymnastic.gq, 1 @@ -54182,8 +54595,10 @@ haartrifftmedizin.de, 1 haasonline.tk, 1 haavard.me, 1 hab.dynu.net, 1 +habahaba.tk, 1 habarimail.com, 1 habarisoft.com, 1 +habarovsk.ml, 1 habbixed.tk, 1 habbocore.tk, 1 habboinside.tk, 1 @@ -54255,6 +54670,7 @@ hackeado.tk, 1 hacked.com, 1 hackedaf.com, 1 hackendoz.com, 1 +hackengine.ga, 1 hackenkunjeleren.nl, 1 hackenturet.dk, 1 hacker.club, 1 @@ -54287,6 +54703,7 @@ hackerone.live, 1 hackerone.net, 1 hackerone.org, 1 hackeronte.tk, 1 +hackers-networks.tk, 1 hackersclothing.com, 1 hackerspace.rocks, 1 hackerstory.tk, 1 @@ -54304,6 +54721,7 @@ hackingwithswift.com, 1 hackmd.io, 1 hackmeifyoucan.site, 1 hacknet-bar.cn, 1 +hackney.tk, 1 hackops.tk, 1 hackreone.com, 1 hackrepreneur.com, 1 @@ -54325,6 +54743,7 @@ haddos.tk, 1 haderecker.me, 1 hadetlachapelle.com, 1 hadibut.fr, 1 +hadika.tk, 1 hadin.tk, 1 hadleyluker.com, 1 hadoora.hu, 1 @@ -54348,6 +54767,7 @@ hafcareclinic.com, 1 hafer.tech, 1 haferman.net, 1 haferman.org, 1 +hafizkadir.tk, 1 hafling.net, 1 haflingers.tk, 1 hafniatimes.com, 1 @@ -54384,7 +54804,12 @@ haineshilton.com, 1 hainoni.com, 0 hainstr.de, 1 hair-care-guide.com, 1 +hair-carekit.tk, 1 hair-dressing.tk, 1 +hair-extension.tk, 1 +hair-extensions.tk, 1 +hairbrushes.tk, 1 +haircareblog.tk, 1 haircarebrazil.com, 1 haircode.gr, 1 hairconventioners.ga, 1 @@ -54405,6 +54830,7 @@ hairhumanextensions.tk, 1 hairlissage.be, 1 hairloss.com, 1 hairlossadvice.tk, 1 +hairphoto.tk, 1 hairpins.tk, 1 hairsalon-wish.com, 1 hairstyles-salon.tk, 1 @@ -54427,15 +54853,18 @@ hajekj.com, 1 hajekj.cz, 1 hajnzic.at, 0 hak-lab.com, 1 +hak-zona.tk, 1 hak.edu.ee, 1 haka.se, 1 hakama-sendai.com, 1 hakanpeker.tk, 1 hakaru.org, 1 hakase.pw, 1 +hakasia.tk, 1 hakatabijin-mind.com, 1 hake.me, 1 haker24.tk, 1 +hakerzona.tk, 1 hakiminvestment.com, 1 hakimova.tk, 1 hakkarihaberi.tk, 1 @@ -54457,6 +54886,7 @@ halalbooking.com, 1 halbbit.eu, 1 halberstadt.tk, 1 halbich.design, 1 +halcraft.tk, 1 halcyonsbastion.com, 1 halcyonyachts.com, 1 haleluyah-asuubabi.ga, 1 @@ -54551,6 +54981,7 @@ hamiltonzinelibrary.ga, 1 hamiltonzinelibrary.gq, 1 hamiltonzinelibrary.ml, 1 hamking.tk, 1 +hamletstudio.tk, 1 hammacklawfirm.com, 1 hammann-services.de, 1 hammed.tk, 1 @@ -54563,6 +54994,7 @@ hammerhead.tk, 1 hammerjack.ru, 1 hammernews.tk, 1 hammerofdamnation.tk, 1 +hammerstorm.ga, 1 hamminga.nl, 1 hammondwi.gov, 1 hamoominim.tk, 1 @@ -54588,6 +55020,7 @@ hana-groupsac.com, 1 hana.ondemand.com, 1 hanabi.fan, 0 hanakaraku.com, 1 +hanakaru.tk, 1 hanazono.tokyo, 1 hanbing.it, 1 hancockcountyia.gov, 1 @@ -54616,6 +55049,7 @@ handles.tech, 1 handlingcosters.ga, 1 handlingcostest.ga, 1 handlungsleitfaden.de, 1 +handmade-club.tk, 1 handmade-workshop.de, 1 handmadebuy.ru, 1 handmadehechoamano.com, 1 @@ -54679,8 +55113,12 @@ hannehovi.fi, 1 hannes.paris, 1 hannit.de, 1 hannoluteijn.nl, 1 +hannover-96.tk, 1 +hannover-reisen.tk, 1 hannywbarek.com, 1 hanoibuffet.com, 1 +hanoicapital-tanvn.tk, 1 +hanomag-tractors.tk, 1 hanpenblog.com, 1 hanrobado.com, 1 hansa-flex.com.ua, 1 @@ -54738,9 +55176,11 @@ happineo.com, 1 happinera.com, 1 happiness.solutions, 1 happist.com, 1 +happu-dinero.tk, 1 happy-end-shukatsu.com, 1 happy-face.tk, 1 happy-family.tk, 1 +happy-finance.tk, 1 happy-space.tk, 1 happy-wans.com, 1 happy-watches.com, 1 @@ -54759,12 +55199,16 @@ happycoder.net, 0 happycoders.eu, 1 happycolors.us, 1 happycompany.fi, 1 +happycore.ml, 1 happycrashers.ga, 1 happycrashest.ga, 1 +happydad.tk, 1 happydays.cat, 1 happydoghosting.net, 1 happydoq.ch, 0 +happydota.ga, 1 happydreamsz.com, 1 +happyexwife.ga, 1 happyfoolss.com, 1 happyfun.tk, 1 happyfuture.tk, 1 @@ -54776,6 +55220,7 @@ happygutlife.com, 1 happyhealthytechie.com, 1 happyheartsabode.com, 1 happyhumans.com, 1 +happyindia.ml, 1 happykidscastles.co.uk, 1 happykidsforkids.com, 1 happylearning.com, 1 @@ -54789,6 +55234,7 @@ happyplantparent.com, 1 happyretail.ai, 1 happyrunning.tk, 1 happyschnapper.com, 1 +happyscubadiving.tk, 1 happyteamlabs.com, 1 happytestings.com, 1 happytime.gq, 1 @@ -54832,6 +55278,7 @@ hard.email, 1 hardatack.tk, 1 hardcoen.com, 1 hardcore-bodybuilding.com, 1 +hardcore-hooligans.tk, 1 hardcoreincest.net, 1 hardcorejokeers.ga, 1 hardcorejokeest.ga, 1 @@ -54953,10 +55400,12 @@ harrisoncountyms.gov, 1 harrisoncountymschanceryclerk.gov, 1 harry-baker.com, 1 harry-hk.tk, 1 +harryagustiana.tk, 1 harrychristensen.tk, 1 harrymcgee.tk, 1 harrymclaren.co.uk, 1 harryosborn.tk, 1 +harrypotterclan.tk, 1 harrypottereditor.com, 1 harrypottereditor.net, 1 harrypottervenezuela.tk, 1 @@ -55051,10 +55500,12 @@ hasjob.co, 1 haskovec.com, 1 hasmoralsers.ga, 1 hasmoralsest.ga, 1 +hassan-kuordish.tk, 1 hassanhardware.com, 1 hassans.tk, 1 hassclan.tk, 1 hasselbach-dellwig.de, 1 +hassellunden.ga, 1 hasseplatslageri.se, 1 hassiba-abderaouf.tk, 1 hassmelden.de, 0 @@ -55070,8 +55521,10 @@ hasyour.xyz, 1 hasznosithato.tk, 1 hatachan.site, 1 hatake.tk, 1 +hataonline.tk, 1 hatarisecurity.co.ke, 1 hatcher.cloud, 1 +hate.ga, 1 hate.tk, 1 hatemarga.tk, 1 hatematerial.tk, 1 @@ -55127,6 +55580,7 @@ havarijna-sluzba-bratislava.sk, 1 havasuopenhouse.com, 1 havasutacohacienda.com, 1 havator.fi, 1 +have-it.tk, 1 have.jp, 1 haveabounce.co.uk, 1 havedicewillsave.com, 1 @@ -55142,6 +55596,7 @@ havernbenefits.com, 1 haverstack.com, 1 havetherelationshipyouwant.com, 1 havohravo.com, 1 +hawaiiafro.tk, 1 hawaiianchoice.com, 1 hawaiianlion.cf, 1 hawaiianlion.ga, 1 @@ -55163,6 +55618,7 @@ hawkins.plus, 1 hawkinsonkiaparts.com, 1 hawkofgeorgia.com, 1 hawkon.dk, 1 +hawkrovers.tk, 1 hawksguild.com, 0 hawler.tk, 1 hawo.academy, 1 @@ -55208,6 +55664,7 @@ hazeover.com, 1 hazimdesign.tk, 1 hazit.co.il, 1 hazloconlapix.com, 1 +hazyhosting.tk, 1 hazytales.com, 1 hazza.net, 1 hb5197.com, 0 @@ -55292,6 +55749,7 @@ hdgarage.nl, 1 hdguru.com, 1 hdhoang.space, 1 hdkandsons.com, 1 +hdlooks.tk, 1 hdmixfilim.com, 1 hdml.kr, 1 hdnastudio.com, 1 @@ -55490,7 +55948,6 @@ healthhuntsville.tk, 1 healthhusky.ga, 1 healthiercompany.com, 1 healthiergenerations.co.uk, 1 -healthierweight.co.uk, 1 healthimagine.ga, 1 healthintergrity.ga, 1 healthiraq.ga, 1 @@ -55690,7 +56147,6 @@ heanbian.com, 1 heap.zone, 1 heardcountyathletics.com, 1 hearfool.cc, 1 -hearingclinicgroup.com, 1 hearingshofar.com, 1 hearingthecall.org, 1 hearkener.com, 1 @@ -56100,6 +56556,7 @@ hen.ee, 1 hen.ne.ke, 1 hendersoncountyil.gov, 1 hendersonvalleyautomotive.co.nz, 1 +hendersonwomenscare.com, 1 henderz.tk, 1 hendrickx.be, 1 hendrik.li, 1 @@ -56753,7 +57210,6 @@ hippies.com.br, 1 hippler.cloud, 1 hippomovers.com, 1 hippopotamuses.org, 1 -hips.com, 1 hipsterpixel.co, 1 hiptwist.tk, 1 hipuranyhou.cz, 1 @@ -56957,6 +57413,7 @@ hkl-gruppe.de, 1 hklbgd.org, 1 hkmap.co, 1 hkmap.com, 1 +hkmap.live, 1 hkmap.net, 1 hkno.it, 1 hkr.at, 1 @@ -57006,6 +57463,7 @@ hmarchat.tk, 1 hmcc.nl, 1 hmcdj.cn, 1 hme360.com, 1 +hmka.com, 1 hmnd.io, 1 hmoegirl.com, 1 hmp.sc, 1 @@ -57263,7 +57721,6 @@ holytransaction.com, 1 holyubofficial.net, 1 holywhite.com, 1 holywr.it, 1 -holz.nu, 1 holzed.com, 1 holzschutz-holzbearbeitung.de, 1 holzspielzeug-shop.ch, 1 @@ -58891,6 +59348,7 @@ hyk.me, 1 hyland.com, 1 hylians.com, 1 hyllie.net, 1 +hymn.com, 1 hymnsandverses.com, 1 hyncice.com, 1 hyndax.com.ar, 0 @@ -58940,8 +59398,10 @@ hypnobb.com, 1 hypnos.hu, 1 hypnose-hennigsdorf.de, 1 hypnose-nimes.fr, 1 +hypnoseduction.tk, 1 hypnoside.tk, 1 hypnotechs.com, 1 +hypnotizedgirls.ml, 1 hypnovir.us, 1 hypocrites.tk, 1 hypokalkulacka.sk, 1 @@ -58994,6 +59454,7 @@ i-fastnet.net, 1 i-forum.ga, 1 i-house.gq, 1 i-hoz.ru, 1 +i-lab.ml, 1 i-learnerisa.com, 1 i-li.com, 1 i-like-hits.tk, 1 @@ -59008,7 +59469,9 @@ i-on.by, 1 i-panic.com, 1 i-pinged-everyone.today, 1 i-port-voice.com, 1 +i-prince.tk, 1 i-proswiss.com, 0 +i-r-a.tk, 1 i-red.info, 1 i-scream.space, 1 i-sports.cz, 1 @@ -59053,6 +59516,7 @@ i7sas.tk, 1 i81365.com, 1 i82365.com, 1 i879.com, 1 +i88i.gq, 1 i8cp.com, 1 i9297.co, 1 i9397.com, 0 @@ -59095,11 +59559,13 @@ iamhealthystore.com, 1 iaminashittymood.today, 1 iamjoshellis.com, 1 iamkate.com, 1 +iamlegend.ml, 1 iamlife.com, 1 iamlizu.com, 1 iamlzh.com, 0 iamokay.nl, 1 iamreally.cool, 1 +iamsadmax.ga, 1 iamsainknight.tk, 1 iamsamaskom.tk, 1 iamtheib.me, 1 @@ -59213,6 +59679,7 @@ ibu.ca, 1 ibug.io, 1 ibuildings.nl, 1 ibuki.run, 1 +ibuprofens.gq, 1 iburgs.com, 1 ibuzz.tk, 1 ibwc.gov, 1 @@ -59247,15 +59714,18 @@ icecars.net, 0 icecodenew.tk, 1 icecontrol.ro, 1 icecreamandclara.co.uk, 1 +icecreamika.tk, 1 icecutethings.com, 1 icedox.ga, 1 icedream.tech, 0 icedterminal.com, 1 icedterminal.me, 1 icedude.tk, 1 +iceflow.tk, 1 icefoxtee.com, 1 icegate.gov.in, 1 iceheart.tk, 1 +icehost.cf, 1 icekiller.ga, 1 icelandic.cf, 1 icelook.tk, 1 @@ -59330,11 +59800,14 @@ icojapan.tokyo, 1 icollezionisti.com, 1 icolorpalette.com, 1 icon-art.nl, 1 +icon-programming.tk, 1 iconintegration.com.au, 1 iconoarte.tk, 1 iconomi.net, 1 +icons4free.tk, 1 iconsuppstore.com, 1 iconworld.ml, 1 +iconx.ml, 1 iconz.tk, 1 icosnet.com.dz, 1 icountnm.gov, 1 @@ -59344,6 +59817,7 @@ icpc.pp.ua, 1 icpc2016.in.th, 1 icpe.nl, 1 icq-project.net, 1 +icq-world.tk, 1 icr-box.ddns.net, 1 icreative.nl, 1 icruise.com, 1 @@ -59394,6 +59868,7 @@ idahofalls.gov, 1 idahohealth.tk, 1 idaholp.org, 1 idahomushroomclub.org, 1 +idanie.cf, 1 idar-oberstein.de, 0 idarv.com, 1 idaspis.com, 1 @@ -59417,11 +59892,13 @@ ideafnd.com, 1 ideageek.net, 1 ideagenpentana.com, 1 ideagenqpulse.com, 1 +ideahub.tk, 1 ideahubnepal.org, 1 ideaktiv.com, 1 ideal-reality.com, 1 ideal-social.com, 1 ideal.shop, 1 +idealabs.tk, 1 idealadvogadosbh.com.br, 1 idealbody.cf, 1 idealbody.gq, 1 @@ -59510,6 +59987,7 @@ idgs.my, 1 idheastudio.com, 1 idhosts.co.id, 1 idinby.dk, 1 +idiomasdelmundo.tk, 1 idiomasdominados.tk, 1 idiot.trade, 1 idioteque.tk, 1 @@ -59520,6 +59998,7 @@ idlethoughtsandramblings.com, 1 idlewildflowers.com, 1 idlxb.com, 1 idmanagement.gov, 1 +idmaster.ml, 1 idmobile.co.uk, 1 idn.gov.pt, 0 idndomain.tk, 1 @@ -59646,6 +60125,7 @@ ifworlddesignguide.com, 1 ifxd.bid, 1 ifxnet.com, 1 ifyou.live, 1 +ig-plastik.tk, 1 ig.com, 1 ig.me, 1 iga-semi.jp, 1 @@ -59661,6 +60141,7 @@ igeh-immo.at, 1 igenuinebeauty.co.jp, 1 igforum.tk, 1 igfwd.email, 1 +iggies.tk, 1 igglabs.com, 1 iggprivate.com, 1 iggsoft.com, 1 @@ -59719,6 +60200,8 @@ igorvracar.com, 1 igorw.org, 1 igotoffer.com, 0 igpwned.com, 1 +igra-prestol.tk, 1 +igra3k.tk, 1 igram.io, 1 igramming.com, 1 igranit.md, 1 @@ -59726,7 +60209,9 @@ igraonicalara.tk, 1 igrarium.com.ua, 0 igrek.co.jp, 1 igrivi.com, 1 +igrodrom-kvest.tk, 1 igromasikov.tk, 1 +igrovoi-klub.tk, 1 igry-onlayn.ru, 1 igryalawar.tk, 1 igshop.ir, 1 @@ -59836,6 +60321,7 @@ ikall.org, 1 ikama.cz, 1 ikari-san.tk, 1 ikaria.com.gr, 1 +ikaros.tk, 1 ikasgela.com, 1 ikazumitsu.tk, 1 ikbenrichie.nl, 1 @@ -59845,6 +60331,7 @@ ikebukuro-shame.com, 1 ikedaquotes.org, 1 ikenmeyer.com, 1 ikenmeyer.eu, 1 +ikerepc.tk, 1 ikespta.com, 1 ikeyless.com, 1 ikfloreer.nu, 1 @@ -59861,6 +60348,7 @@ ikkatsu-satei.jp, 1 ikke-coach.nl, 1 ikkev.de, 0 ikkoku.de, 1 +iklan-baris.gq, 1 iklan.tk, 1 iklanbaris.tk, 1 iklipcollection.my.id, 1 @@ -59946,6 +60434,7 @@ iligang.net, 1 iligang.net.cn, 1 iligang.xin, 1 ilii.me, 1 +ilikepenguins.tk, 1 ilikevaping.com, 1 ilikezo.tk, 1 ilimar.tk, 1 @@ -60015,8 +60504,10 @@ ilovefun.tk, 1 ilovegrowingmarijuana.com, 1 iloveherb.ru, 1 ilovelwy.com, 1 +iloveporn.ml, 1 ilovesamara.tk, 1 iloveseo.com, 1 +ilovesnow.ml, 1 ilovestickers.gr, 1 ilovethiscampsite.com, 1 ilovewallpaper.tk, 1 @@ -60069,6 +60560,7 @@ image.tf, 1 image4arab.tk, 1 imagealbums.tk, 1 imagebin.ca, 1 +imagecom.tk, 1 imagecurl.com, 1 imagecurl.org, 1 imageessentialsweightloss.com, 0 @@ -60092,6 +60584,7 @@ imaginarymakings.me, 1 imaginationpathway.com, 1 imagine-programming.com, 1 imaginelab.club, 1 +imaginescape.tk, 1 imaginethefloor.tk, 1 imaginetricks.com, 1 imagingstudio.co.uk, 1 @@ -60099,6 +60592,7 @@ imagosplasticsurgery.com, 1 imagr.io, 1 imajavm.com, 1 imajjeans.com, 1 +imakash.gq, 1 imakeyougreatagain.com, 1 imakin.nl, 1 imamenu.com, 1 @@ -60243,6 +60737,7 @@ immoisrael.nl, 1 immoisrael.org, 1 immoisrael.org.il, 1 immomydesk.fr, 1 +immoraldoctors.tk, 1 immortal-it.tk, 1 immortal-pc.info, 1 immortal.org.in, 1 @@ -60252,6 +60747,7 @@ immortallove.tk, 1 immortec.com, 1 immortol.tech, 1 immovisual.be, 1 +immune.cf, 1 immunoboost.be, 1 imobile3.com, 1 imobiliare.tk, 1 @@ -60371,7 +60867,6 @@ imprezzor.com, 1 imprimante-3d-store.fr, 1 improbo-group.com, 1 improfestival.ee, 1 -improklinikken.dk, 1 improv.ee, 1 improvebusinessonline.info, 1 improved-madness.de, 1 @@ -60455,6 +60950,7 @@ ince.tools, 1 inceneritore.ga, 1 incentea.com, 1 incentivi.it, 1 +inceptionband.tk, 1 incert.cn, 1 incertint.com, 1 inchcape-fleet-autobid.co.uk, 1 @@ -60488,6 +60984,7 @@ incowrimo.org, 1 incpak.com, 1 incparadise.net, 1 incredibilis.tk, 1 +incrediblenews.tk, 1 incrediblez.tk, 1 incrementation.net, 0 incrom.com, 0 @@ -60498,6 +60995,7 @@ ind.ie, 1 indasun.com, 1 indatable.com, 1 indecente.tk, 1 +indeika.ml, 1 indeksonline.tk, 1 independenceliveers.ga, 1 independenceliveest.ga, 1 @@ -60524,6 +61022,7 @@ indexmarket.gq, 1 indexmod.gq, 1 indexpert.es, 1 indexsalaire.be, 1 +india-ennenga.ga, 1 indiada.ru, 1 indiaexamresult.in, 1 indiaflowermall.com, 1 @@ -60545,6 +61044,7 @@ indianawaterdamagerepairpros.com, 1 indianbeauty.ml, 1 indianbridalservices.com, 1 indianbrides.cf, 1 +indiandramasonline.tk, 1 indianengineer.tk, 1 indianerschmuck24.de, 1 indianet.tk, 1 @@ -60560,8 +61060,10 @@ indiantechhunter.tk, 1 indianvirginhumanhair.tk, 1 indianwarriors.tk, 1 indianwomen.cf, 1 +indiatechblogger.cf, 1 indiatourhelp.tk, 1 indiatravel.ml, 1 +indiaviral.ga, 1 indiawise.co.uk, 1 indiaworlddigital.tk, 1 indico.tk, 1 @@ -60571,6 +61073,7 @@ indiecongdr.it, 1 indieethos.com, 0 indiemovementers.ga, 1 indiemovementest.ga, 1 +indiereview.tk, 1 indiesports.ph, 1 indievelopment.nl, 1 indieweb-endpoints.cc, 1 @@ -60590,6 +61093,7 @@ indigostudios.com, 0 indika.pe, 1 indilens.com, 1 indimike.tk, 1 +indir2017.tk, 1 indirhadi.tk, 1 indirimkuponumarketim.com, 1 inditip.com, 1 @@ -60598,6 +61102,8 @@ indivicloud.me, 1 individualizedwellness.net, 1 individualobligation.com, 1 individuals.tk, 1 +indiwebawards.tk, 1 +indiya-kino.gq, 1 indlish.ga, 1 indnews.ga, 1 indo-wiki.fr, 1 @@ -60607,17 +61113,23 @@ indochina.io, 0 indochinatravel.tk, 1 indodax.com, 1 indoetis-surneli.ga, 1 +indoface.ga, 1 +indofountain.tk, 1 indogenius.org, 1 indogermantrade.de, 1 +indoidnews.ga, 1 indoittraining.com, 0 +indonesiatrip.tk, 1 indoor-kletterwald.de, 1 indopress.tk, 1 indorepack.com, 1 indorsie.com, 1 indospot.ml, 1 indospot.tk, 1 +indotravels.tk, 1 indovinabank.com.vn, 1 indovision.tk, 1 +indramas.tk, 1 indramdhani.net, 1 indranesia.tk, 1 indraq.tk, 1 @@ -60635,6 +61147,7 @@ industreiler.com.br, 1 industriafranchini.com, 1 industrial-remote-control.com, 1 industrial-ventilation.eu, 1 +industrialalpinism.tk, 1 industrialcalibration.co.uk, 1 industrialgassprings.com, 1 industryoutlaws.tk, 1 @@ -60703,6 +61216,7 @@ infinipharm.com, 1 infinite.com, 1 infiniteautomation.com.au, 1 infinitelightofbeing.org, 1 +infinitenews.cf, 1 infinitenews.ml, 1 infinitescript.com, 1 infinitifxbrokers.com, 1 @@ -60751,12 +61265,18 @@ influxus.com, 0 info-bay.com, 1 info-beamer.com, 1 info-bolivia.tk, 1 +info-compusciencetech.tk, 1 +info-days.tk, 1 info-eolien.fr, 1 +info-free.ml, 1 +info-it.tk, 1 info-kiwi.tk, 1 info-o-zbozi.cz, 1 info-obzor.ga, 1 +info-obzor.ml, 1 info-reason.cf, 1 info-screen.me, 1 +info-sell.ml, 1 info-sys.tk, 1 info-tech.tk, 1 info-usaha.tk, 1 @@ -60770,6 +61290,7 @@ infobanglanet.tk, 1 infobasquet.tk, 1 infobip.com, 1 infobiznes.cf, 1 +infobiznes.ga, 1 infobiznes.tk, 1 infoblogs.pl, 1 infobot.email, 1 @@ -60778,6 +61299,7 @@ infobot.nl, 1 infobrain.net, 1 infobrest.tk, 1 infobusinessnews.tk, 1 +infocanada.tk, 1 infocanicatti.tk, 1 infocapsol.com, 1 infocoin.es, 1 @@ -60792,12 +61314,14 @@ infodis.com, 1 infoduv.fr, 1 infoeccos.com, 1 infofamouspeople.com, 1 +infofp.tk, 1 infogai.tk, 1 infogamesports.tk, 1 infogate.ga, 1 infogram.com, 1 infogress.tk, 1 infogrfx.com, 1 +infogroups.ml, 1 infogym.com, 1 infohas.ma, 1 infohunter.education, 1 @@ -60830,6 +61354,7 @@ infopreneur.blog, 1 infoprofuse.com, 1 infopulse.com, 1 infopuntzorg.nl, 0 +inforabota.tk, 1 inforakyat.net, 0 inforata.com, 1 inforeviews.ru, 1 @@ -60864,6 +61389,7 @@ inforok.tk, 1 inforopub.tk, 1 infortheride.com, 1 infosactu.com, 1 +infoschool.ml, 1 infosec-handbook.eu, 1 infosec.ch, 1 infosec.exchange, 1 @@ -60882,6 +61408,7 @@ infosolution.biz, 1 infosoph.org, 1 infosubasta.es, 1 infosysta.com, 1 +infosystem.cf, 1 infotabla.si, 1 infotainworld.com, 1 infotax24.com.pl, 1 @@ -60896,6 +61423,7 @@ infovb.org, 1 infovision-france.com, 1 infowaywebsolutions.com, 1 infoweb.ee, 1 +infowheels.tk, 1 infoworm.org, 1 infra-apparel.com, 1 infra-se.com, 1 @@ -61023,9 +61551,11 @@ ingridvandamme.nl, 1 ingridvanderveen.com, 1 ingroxd.com, 1 ingticos.com, 1 +ingushetia.tk, 1 ingwaz.org, 1 inhabitgroup.com, 1 inhaltsangabe.de, 1 +inhere.cf, 1 inherfeet.ml, 1 inhisword.life, 1 inhoff.eu, 1 @@ -61071,11 +61601,16 @@ inkerz.com.br, 1 inkhor.se, 1 inkhub.com.au, 1 inkjets-inks.tk, 1 +inkliners.tk, 1 +inkognito.cf, 1 +inkognito.ga, 1 inkognito.gq, 1 +inkognito.ml, 1 inkomensafhankelijkehuurverhoging.nl, 1 inkopers.org, 1 inkor.tk, 1 inkpay.com, 1 +inksay.com, 1 inkteeshop.com, 1 inkthemes.com, 1 inkthreadable.co.uk, 1 @@ -61086,6 +61621,7 @@ inkwall.co, 1 inlabo.de, 1 inlimiters.ga, 1 inlimitest.ga, 1 +inline-online.tk, 1 inline-sport.cz, 1 inlinea.ch, 1 inlineskates.tk, 1 @@ -61096,6 +61632,7 @@ inlocon.de, 1 inlovechocolate.store, 1 inlt.cc, 1 inlt.com, 1 +inmaaa.cf, 1 inmamaskitchen.com, 1 inmaps.xyz, 1 inmatefinancial.com, 1 @@ -61119,6 +61656,7 @@ inmyhead.tk, 1 innainnaki.net, 1 innatocol.com, 1 inncoaching.nl, 1 +inner-vision.tk, 1 innercamp.com, 1 innerdarkside.tk, 1 innerfence.com, 1 @@ -61161,6 +61699,7 @@ innovateohio.gov, 1 innovateohioplatform.gov, 1 innovation-workshop.ro, 1 innovation.gov, 1 +innovationbranding.ga, 1 innovationbrandingers.ga, 1 innovationbrandingest.ga, 1 innovationrealtygrp.com, 1 @@ -61191,6 +61730,7 @@ inotecsoftware.com, 1 inourtime.cn, 1 inova.business, 1 inovalon.com, 1 +inovasirumahku.tk, 1 inovatec.ca, 1 inovatec.com, 1 inovatecsystems.com, 1 @@ -61227,6 +61767,7 @@ ins1gn1a.com, 1 insanb.com, 1 insane.zone, 1 insanedevs.com, 1 +insanepyro.tk, 1 insanity.zone, 1 insblauehinein.nl, 1 inschrijfformulier.com, 1 @@ -61263,6 +61804,7 @@ insideevs.ru, 1 insidegroup.cl, 1 insidehook.com, 1 insideofgaming.de, 1 +insideperu.tk, 1 insideprisonbreak.tk, 1 insider-invest.tk, 1 insiderateers.ga, 1 @@ -61339,7 +61881,6 @@ instanse.nl, 1 instant-clearance-sale.co.uk, 1 instant-hack.com, 1 instant-hack.io, 1 -instant-meditation.fr, 1 instant-thinking.de, 0 instant.io, 1 instantdomainsearch.com, 1 @@ -61388,20 +61929,27 @@ instrumentodepaz.com, 1 instylecollection.tk, 1 instytut.tk, 1 insulationchicagoil.com, 1 +insulations.ga, 1 insult.es, 1 insultband.tk, 1 insurance, 1 +insurance-companies.tk, 1 insurance24.online, 1 insurancebloggingers.ga, 1 insurancebloggingest.ga, 1 insurancebonzer.ga, 1 insuranceclassic.ga, 1 +insurancecompanylive.tk, 1 +insuranceleep.ga, 1 +insurancenews.gq, 1 +insurancesaman.tk, 1 insurancesquaders.ga, 1 insurancesquadest.ga, 1 insuranceweb.ga, 1 insurebuysers.ga, 1 insurebuysest.ga, 1 insured-event.tk, 1 +insuredcloud.ga, 1 insuremycar.ru, 1 insureon.com, 1 insurepays.com, 1 @@ -61457,6 +62005,7 @@ intelalumni.org, 1 intelghost.com, 1 intelhost.com.br, 1 intelhost.net, 1 +intelics.com.au, 1 intelius.cf, 1 intellar.com, 1 intelldynamics.com, 1 @@ -61490,13 +62039,16 @@ intelrealsense.com, 1 inteltechniques.com, 1 intelx.io, 1 intencje.pl, 1 +intenirphoto.tk, 1 intensify.pictures, 1 intensivpflege-sachsen.de, 1 inter-corporate.com, 1 inter-culinarium.com, 1 +inter-news.tk, 1 interabbit.co, 1 interabbit.com, 1 interacademybrazil.com.br, 1 +interacthindu.tk, 1 interactiveanddesign.com, 1 interactivedigesters.ga, 1 interactivedigestest.ga, 1 @@ -61508,6 +62060,7 @@ interaktiva.fi, 1 interallied.org, 1 interbec.com, 1 interblink.tk, 1 +interc0der.tk, 1 interchanges.io, 1 intercom-attachments-1.com, 1 intercom-attachments-5.com, 1 @@ -61570,6 +62123,7 @@ interminsk.tk, 1 intern.tax, 1 internaldisfunction.tk, 1 internalfb.com, 1 +internalframebackpack.tk, 1 internalkmc.com, 1 internally.ga, 1 international-arbitration-attorney.com, 1 @@ -61586,8 +62140,11 @@ internationalschool.it, 1 internationalschoolnewyork.com, 1 internationalstudentassociation.com, 1 internationaltalento.it, 1 +internationalweekly.tk, 1 internect.co.za, 1 internet-aukcion.info, 1 +internet-drive.tk, 1 +internet-gazeta.ga, 1 internet-israel.com, 1 internet-meesters.nl, 0 internet-pornografie.de, 0 @@ -61638,6 +62195,7 @@ internetthreatscenter.com, 1 internettoday.ga, 1 internettradie.com.au, 0 internetwealthresource.com, 1 +internetzaim.tk, 1 internetzentrale.net, 1 interparcel.com, 1 interphoto.by, 1 @@ -61648,6 +62206,7 @@ interracial.dating, 1 interseller.io, 1 interset.us, 1 intersexualite.tk, 1 +interslang.tk, 1 intersportks.com, 1 interspot.nl, 1 interssl.com, 1 @@ -61676,6 +62235,8 @@ inthepicture.com, 1 inthouse.cloud, 1 intigriti.com, 1 intihalprogrami.com, 1 +intim-24.tk, 1 +intim-ru.tk, 1 intima-mente.com, 1 intimastoreatacado.com.br, 1 intimidad.tk, 1 @@ -61779,6 +62340,7 @@ investarholding.nl, 1 investasiku.tk, 1 investasimudah.tk, 1 investasipasti.tk, 1 +investgold.ml, 1 investgold.tk, 1 investgroop.ml, 1 investigatemalware.com, 1 @@ -62121,7 +62683,7 @@ irasingh.tk, 1 iratten.de, 1 irayo.net, 1 irbe.ch, 1 -irbisweb.com, 1 +irbisweb.com, 0 irc-results.com, 1 ircica.org, 1 ircmett.de, 1 @@ -62438,7 +63000,6 @@ isotope.gov, 1 isotopes.gov, 1 isoverse.net, 1 isovideo.com, 1 -isowosi.com, 1 ispalestinefree.com, 1 ispanskijshuanom.ru, 1 ispartahaber.cf, 1 @@ -62587,6 +63148,7 @@ it-zt.at, 1 it.com.eg, 0 it.search.yahoo.com, 0 it1b.com, 1 +it4sure.nl, 1 it76.tk, 1 it82.com, 1 it9.bar, 1 @@ -62783,7 +63345,6 @@ itsdcdn.com, 1 itsec.link, 1 itsecblog.de, 1 itsecrnd.com, 1 -itsecuritycoach.com, 1 itseeze.com, 1 itseovn.com, 1 itservis.org, 1 @@ -63743,6 +64304,7 @@ jcadg.com, 1 jcaicedo.com, 1 jcaicedo.tk, 1 jcb.com, 1 +jcbgolfandcountryclub.com, 1 jccars-occasions.be, 1 jccrew.org, 1 jcdenast.tk, 1 @@ -64307,7 +64869,6 @@ jimfranke.com, 1 jimfranke.nl, 1 jimgarrigan.info, 1 jimgarrigan.nyc, 1 -jimisfanvan.nl, 1 jimizhou.xyz, 1 jimkimmel.com, 1 jimmiestore.com, 1 @@ -64555,6 +65116,7 @@ jobs4sales.ch, 1 jobscore.com, 1 jobseekeritalia.it, 1 jobsindemedia.nl, 1 +jobsinwales.net, 1 jobsisbrown.com, 1 jobsjj.com, 1 jobskilled.co.za, 1 @@ -64712,7 +65274,6 @@ johnkraal.com, 1 johnload.tk, 1 johnmac.cn, 1 johnmalloneemd.com, 0 -johnmasserini.com, 1 johnmcc.net, 1 johnmcintosh.pro, 1 johnmellison.com, 1 @@ -65599,7 +66160,6 @@ justinellingwood.com, 1 justinfreid.com, 1 justinho.com, 1 justinmanders.nl, 1 -justinsinkula.com, 1 justinstago.com, 1 justinstandring.com, 1 justjavajobs.co.za, 1 @@ -65957,7 +66517,6 @@ kachelfm.nl, 1 kachka.cf, 1 kachlikova2.cz, 1 kack.website, 1 -kacperchmielowiec.pl, 1 kacy-kisha.com, 1 kada.lk, 1 kadalove.net, 1 @@ -66131,7 +66690,6 @@ kaliaa.fi, 1 kalian.cz, 1 kaliboairport.tk, 1 kaliforniya.tk, 1 -kalilinux.tech, 1 kalimantan.tk, 1 kalimari.tk, 1 kalimat.gq, 1 @@ -66258,6 +66816,7 @@ kandianshang.com, 1 kandofu.com, 1 kandra.com.br, 1 kandrahechiceravudu.com, 1 +kandwliquor.com, 1 kanecastles.com, 1 kanecountyil.gov, 1 kanehisa.xyz, 1 @@ -67295,7 +67854,6 @@ keywalker.co.jp, 1 keywaysconsulting.co.uk, 1 keyworth-meadow.tk, 1 keyyek.com, 0 -keziah.de, 1 kezmanweb.tk, 1 kf-59.com, 1 kf-slot.com, 1 @@ -67389,6 +67947,7 @@ khmrynok.com.ua, 1 khoasweb.tk, 1 khodromedic.com, 1 khojhealth.com, 1 +khokey.com, 0 khorne.me, 1 khosroblog.ir, 1 khoteyev.tk, 1 @@ -67510,6 +68069,7 @@ kiekin.org, 1 kiekko.pro, 1 kielux.de, 1 kielwi.gov, 1 +kienhuon.com, 1 kienlen.org, 1 kientrucnamcuong.vn, 1 kienviethung.com, 1 @@ -68743,7 +69303,6 @@ kopfkrieg.org, 1 kopfsalat.eu, 0 kopfschaschlik.de, 1 kopieid.be, 1 -kopijosari.com, 1 kopipasta.cf, 1 kopisee.tk, 1 kopjethee.nl, 0 @@ -69955,7 +70514,6 @@ labottegafinedistillates.it, 1 labouncycastlehire.co.uk, 1 labourreedevergheas.fr, 1 laboutiquedejuliette.com, 1 -laboutiquedeluminia.fr, 1 laboutiquemarocaineduconvoyeur.com, 1 laboutiquemarocaineduconvoyeur.ma, 1 laboxfaitsoncinema.com, 1 @@ -71397,7 +71955,6 @@ lecafedugeek.fr, 1 lecandide.info, 1 lecannabis.at, 1 lecannabis.ch, 1 -lecannabis.com, 1 lecannabis.de, 1 lecannabis.ru, 1 lecannabis.us, 1 @@ -72451,6 +73008,7 @@ lichtspot.de, 1 lichtsturm.net, 1 lichttechnik-tumler.com, 1 lichtval.tk, 1 +licia-music.com, 1 lickingcounty.gov, 1 lickthesalt.com, 1 licloud.homeip.net, 1 @@ -72550,6 +73108,7 @@ lifeismmo.com, 1 lifeispain.tk, 1 lifeisqi.nl, 1 lifekeycounsel.com, 1 +lifekirov.tk, 1 lifekiss.ru, 1 lifelinesupport.org, 1 lifelinksystems.com, 1 @@ -72561,6 +73120,7 @@ lifemcserver.com, 1 lifemstyle.com, 1 lifenews24.tk, 1 lifenexto.com, 1 +lifeofasi.com, 1 lifepathdoc.com, 1 lifereset.it, 1 lifesafety.com.br, 1 @@ -72609,6 +73169,7 @@ light.mail.ru, 1 lightbearer.tk, 1 lightbluelearning.com, 1 lightbox.co, 1 +lightcraftmc.tk, 1 lightdark.xyz, 1 lightfestivalghent.be, 1 lightfestivalghent.com, 1 @@ -72992,6 +73553,7 @@ linku.com, 1 linkuva.tk, 1 linkview.tk, 1 linkwater.org, 1 +linkwheel.tk, 1 linky.tk, 1 linkycat.com, 1 linley.de, 1 @@ -73010,6 +73572,7 @@ linocomm.net, 1 linocomm.nl, 1 linomass.com, 1 linomass.nl, 1 +linonin.tk, 1 linoplan.be, 1 linoplan.com, 1 linoplan.de, 1 @@ -73107,6 +73670,7 @@ lionsk.tk, 1 lioprog.com, 1 lioraaja.com, 1 liorggi.ga, 1 +lipacom.ga, 1 lipartydepot.com, 1 lipaslovanska.cz, 1 lipator.cf, 1 @@ -73297,6 +73861,7 @@ littlehacker.tk, 1 littlehide.gq, 1 littlehoop.edu, 1 littlelife.co.uk, 1 +littlelucifercafe.tk, 1 littlemaple.tk, 1 littlemaster.tk, 1 littlenicky.org, 1 @@ -73413,6 +73978,7 @@ livekortti.fi, 1 livela.jp, 1 livelexi.com, 1 livelifewithintent.com, 1 +livelink.tk, 1 livelondon.fr, 1 livelong.tk, 1 livelonglife.tk, 1 @@ -73651,6 +74217,7 @@ lobste.rs, 1 lobstr.co, 1 loc-gauthier.fr, 1 loca-voiture.fr, 1 +locabir.cf, 1 locais.org, 1 local360.net, 1 localassocier.tk, 1 @@ -73758,7 +74325,6 @@ locksmithalberton24-7.co.za, 1 locksmithbalchsprings.com, 1 locksmithboksburg.co.za, 1 locksmithdearborn.com, 1 -locksmithdickinson-tx.com, 1 locksmithdriftwood.com, 1 locksmithedenvale24-7.co.za, 1 locksmithedmonds.com, 1 @@ -74070,6 +74636,7 @@ lona.io, 1 lonasdigital.com, 1 lonavla.tk, 1 loncarlyonjenkins.com, 1 +london-mafia.tk, 1 london-transfers.com, 1 london.dating, 1 londoncarpetcleaningltd.co.uk, 1 @@ -74242,6 +74809,7 @@ lord-voldemort.tk, 1 lordar.tk, 1 lordbyron.tk, 1 lordcaos.tk, 1 +lorddominion.tk, 1 lordfutbol.tk, 1 lordgandalf.nl, 1 lordgrant.tk, 1 @@ -74250,12 +74818,14 @@ lordmusic.tk, 1 lordofthebrick.com, 0 lordofthecraft.tk, 1 lordschimney.com, 1 +lordsesshoumaru.tk, 1 lordshaokahn.tk, 1 lordskate.tk, 1 lordusa.com, 1 lore.azurewebsites.net, 1 loreedeslandes.com, 1 loremipsum.info, 1 +lorena-salido.tk, 1 lorenadumitrascu.ro, 1 lorengraff.net, 1 lorenstudioo.com, 1 @@ -74265,6 +74835,7 @@ lorenzgoossens.be, 1 lorenzocampagna.myqnapcloud.com, 1 lorenzocompeticion.com, 0 lorenzodallaga.com, 1 +lorenzodeangelis.tk, 1 loreofthenorth.com, 1 loreofthenorth.net, 1 loreofthenorth.nl, 1 @@ -74282,6 +74853,7 @@ lornategeorge.tk, 1 lorqui.tk, 1 lorrainestreatmentroom.co.uk, 1 lorucreative.fi, 1 +los-diablos.tk, 1 los11mandamientos.tk, 1 losangelesduiattorney.com, 1 losangelesprivatejets.com, 1 @@ -74291,6 +74863,7 @@ losbandidosdelahoya.tk, 1 losblancosalbania.cf, 1 losbunkerschile.tk, 1 loscamaradasmc.net, 1 +loschilums.tk, 1 loschuchos.tk, 1 losconsoladores.com, 1 losdelapobla.tk, 1 @@ -74300,11 +74873,16 @@ losdeshollinadores.es, 1 losdingos.tk, 1 losdisidentes.tk, 1 losdrogatones.tk, 1 +lose-weight-now.ml, 1 losebellyfat.pro, 0 losedata.tk, 1 +losemperadores.tk, 1 loser.wtf, 1 losespiritus.tk, 1 +loseweightbaby.tk, 1 +loseweightin5days.tk, 1 losfiesteros.tk, 1 +losflamers.tk, 1 losfugitivos.tk, 1 losfuocos.tk, 1 losgringos.tk, 1 @@ -74312,6 +74890,7 @@ loshalcones.tk, 1 loshogares.mx, 1 losjardines.tk, 1 losjuegosdemesa.online, 1 +loslegendarios.tk, 1 losless.fr, 1 loslunesalrock.tk, 1 losmaniatikos.tk, 1 @@ -74358,9 +74937,11 @@ losttv.tk, 1 lostwithdan.com, 1 lostwoods.tk, 1 losyandex.tk, 1 +loszucoz.tk, 1 lotc.cc, 1 loteamentoabertocapivari.com.br, 1 lotekk.gq, 1 +lotereiki.tk, 1 lothai.re, 1 lothlorien.ca, 0 lotimena.com, 1 @@ -74379,12 +74960,14 @@ lottosonline.com, 1 lottospielen24.org, 0 lottothaipro.com, 1 lotuselise.tk, 1 +lotusweb.tk, 1 lotuswebsolutions.tk, 1 lotw.de, 1 lou.ist, 1 lou.lt, 1 louange-reconvilier.ch, 0 louboutin.tk, 1 +louboutinshoessale.tk, 1 loud-dragon.tk, 1 loudclear.com.au, 1 louddesignstudios.com, 1 @@ -74395,6 +74978,7 @@ loudmouth.tk, 1 louerunhacker.fr, 1 loueurmeublegestion.expert, 1 louhomeworkouts.com, 1 +louisa.tk, 1 louisacountyia.gov, 1 louisahoppe.de, 1 louisapolicefoundation.com, 1 @@ -74404,11 +74988,13 @@ louisdefunes.tk, 1 louisefar.tk, 1 louiselaliberte.ca, 1 louisemisellinteriors.co.uk, 1 +louiserutkowski.tk, 1 louisianalifesciences.gov, 1 louisianamo.gov, 1 louisiananetzero.gov, 1 louisville.gov, 1 louisvillecarguys.com, 1 +louisvilleconnections.ga, 1 louisvillefibroids.com, 1 louisvillefilmfestival.org, 1 louisvillene.gov, 1 @@ -74426,9 +75012,11 @@ lourissa.tk, 1 loursaint.tk, 1 lousingchaphu.com, 1 lousoyolos.fr, 1 +loutro.tk, 1 louwlemmer.com, 1 louyu.cc, 1 lov4affiliate.com, 1 +love-and-hate.cf, 1 love-books.ga, 1 love-navigator.tk, 1 love-planeta.tk, 1 @@ -74444,6 +75032,7 @@ loveamber.me, 1 loveandloyalty.se, 1 lovebeingsexy.co.uk, 1 lovebigisland.com, 1 +lovebirdhut.tk, 1 lovebo9.com, 1 lovebo9.net, 1 lovebooks.space, 1 @@ -74452,6 +75041,8 @@ lovebug.beauty, 1 lovechester.com, 1 lovecrystal.co.uk, 1 lovecsnov.tk, 1 +lovedaleschool.tk, 1 +lovedutch.tk, 1 loveforinfo.com, 1 lovegpl.com, 1 loveholidays.com, 1 @@ -74464,28 +75055,35 @@ loveismore.org, 0 loveismore.pl, 0 loveismore.ru, 0 loveismore.sk, 0 +loveismystyle.tk, 1 loveisourweapon.com, 1 loveitclickitbuyit.com.au, 1 lovejms.com, 1 lovejoymethodist.org, 1 +lovelee.tk, 1 lovelens.li, 0 +loveless.ml, 1 lovelive-anime.tk, 1 lovelive.us, 1 lovelivewiki.com, 1 lovell.co.uk, 1 lovellgov.com, 1 lovelovenavi.jp, 1 +lovelybook4u.gq, 1 lovelyfamilymm.com, 1 lovelylanguedoc.com, 0 lovelytimes.net, 1 lovemaker.se, 1 lovemanagementaccounts.co.uk, 1 lovemasjid.com, 1 +lovememories.cf, 1 lovemen.cc, 1 lovemesomegadgets.com, 1 lovemiku.info, 1 +lovemoon.tk, 1 lovemoon.xyz, 1 lovemybubbles.com, 1 +lovenet.tk, 1 loveni.me, 1 lovenwishes.com, 1 loveph.one, 1 @@ -74495,6 +75093,7 @@ lover-bg.com, 1 lovereligion.tk, 1 loverepublic.ru, 1 loverngifts.com, 1 +loverussiangirls.tk, 1 loveshop.pt, 1 lovesmagical.com, 0 lovesquirting.com.br, 1 @@ -74503,6 +75102,7 @@ lovetarot.jp, 1 lovethatmakeup.tk, 1 lovetheprint.co.za, 1 lovetime.co.il, 1 +lovetowork.tk, 1 loveweddingphotosandfilm.co.uk, 0 loveyouhome.ua, 1 loveysa.ch, 0 @@ -74512,6 +75112,7 @@ lovin.tk, 1 loving-house.com, 1 lovink.net, 1 lovizaim.ru, 1 +lovlyhorses.tk, 1 lovlyluna.net, 1 lovlyluna.org, 1 lovstabanan.se, 1 @@ -74520,6 +75121,7 @@ low-diets.com, 1 lowbidders.com, 1 lowcarbdietmealsmsk.ga, 1 lowcarbspark.com, 1 +lowcosthost.cf, 1 lowcostivf.net, 1 lowcostwire.com.au, 1 lowendpay.com, 1 @@ -74550,12 +75152,14 @@ loyloy.net, 1 loyverse.com, 1 loyverse.town, 1 lozanoimpresores.com, 1 +lozhka-mernaya.tk, 1 lp-support.nl, 0 lp177.fr, 1 lpacademy.com.br, 1 lpasteur.info, 1 lpcd-lafla.gov, 1 lpcdops-lafla.gov, 1 +lpchemicalsolution.tk, 1 lpcom.de, 1 lpdp.photo, 1 lpemprestimos.online, 1 @@ -74563,6 +75167,7 @@ lpfan.tk, 1 lph.saarland, 1 lphispano.tk, 1 lpiem.fr, 1 +lpkosovo.tk, 1 lpmkonji.cf, 1 lprr.fr, 1 lps.in.ua, 1 @@ -74603,6 +75208,7 @@ lsquo.com, 1 lsscreens.de, 1 lstlx.com, 1 lstma.com, 1 +lstu.tk, 1 lsxteam.tk, 1 lsy.cn, 1 lsys.ac, 1 @@ -74610,6 +75216,7 @@ lszj.com, 1 lt.search.yahoo.com, 0 lt27.de, 1 ltaake.com, 1 +ltailshort.tk, 1 ltba.org, 1 ltcwaterwijk.nl, 1 ltdev.im, 1 @@ -74617,6 +75224,7 @@ ltecode.com, 1 ltgc.cc, 1 ltheinrich.de, 1 ltib.com.au, 1 +ltime.ml, 1 ltkgrp.com, 1 ltlec.cn, 1 ltlec.com, 0 @@ -74635,6 +75243,7 @@ lu-rp.es, 1 lu.search.yahoo.com, 0 lu2343.com, 1 luacustica.tk, 1 +lual.tk, 1 luan.ma, 1 luanvancaohoc.com, 1 luanxt.tk, 1 @@ -74680,11 +75289,13 @@ lucdethier.be, 1 luce.life, 1 lucentioluo.space, 1 lucenttour.tk, 1 +lucerin.ga, 1 lucesledsbaratas.shop, 1 luchalibre.tk, 1 luchandro.tk, 1 luchthavenmaastricht.nl, 1 luchtspoor.nl, 1 +lucia-art.cf, 1 lucia-riemer.de, 1 lucid-light.de, 1 lucid-reality.ch, 1 @@ -74699,6 +75310,8 @@ lucidpacket.com, 1 lucidplumbing.com.au, 1 lucie-parizkova.cz, 1 lucielavickova.com, 1 +luciferblog.tk, 1 +luciferianism.tk, 1 lucifevesdaubrac.fr, 1 lucille-thomas.fr, 1 lucillewillemsen.tk, 1 @@ -74713,15 +75326,20 @@ lucksh.tk, 1 luckwi.gov, 1 lucky-bul.tk, 1 lucky-frog.co.uk, 1 +lucky-time.tk, 1 lucky13strategies.com, 1 +luckyabonent.ml, 1 luckyblockland.fr, 1 luckycasino.se, 1 luckycastles.co.uk, 1 luckycloud.de, 1 luckydag.com, 1 luckydoglodge.net, 1 +luckyemail.ml, 1 luckyfrog.hk, 1 +luckymice.ml, 1 luckypunks.org, 1 +luckyrent.tk, 1 luckystorevn.com, 1 luckyxf.com, 1 luclu7.fr, 1 @@ -74742,12 +75360,17 @@ ludasmith.co.uk, 1 lude.tk, 1 ludejo.eu, 1 ludek.biz, 1 +luden.tk, 1 ludika.tk, 1 ludikovsky.name, 1 ludivine-viguie.com, 1 +ludmilla.tk, 1 +ludmillaewagner.ga, 1 +ludo-giuly.tk, 1 ludofantasy.fr, 1 ludogogy.co.uk, 1 ludogue.net, 1 +ludolust.tk, 1 ludomo.de, 1 ludotech.tk, 1 ludothek-burgdorf.ch, 1 @@ -74782,6 +75405,7 @@ lugimax.com, 1 luginbuehl.be, 1 luginbuehl.eu, 1 lugobama.tk, 1 +lugros.tk, 1 lugui.in, 1 luhn.be, 1 lui.vn, 1 @@ -74790,12 +75414,15 @@ luijten.it, 1 luis-portfolio.es, 1 luisa-birkner.de, 1 luisafernandapenuela.com, 1 +luisanalopilatogrecia.tk, 1 +luisaviles.tk, 1 luisbacher.tk, 1 luisbustamante.mx, 1 luisfreire.ml, 1 luisillo.tk, 1 luismaier.de, 1 luismiguelcolombia.tk, 1 +luisnavarrosl.tk, 1 luisnet.tk, 1 luisrubiqwe.ml, 1 luissotodesign.com, 1 @@ -74821,6 +75448,7 @@ lukasapetra.com, 1 lukasberan.com, 1 lukasberan.cz, 1 lukasbures.com, 1 +lukasfelder.tk, 1 lukasgimberis.com, 1 lukaskollmer.de, 1 lukasldc.com, 1 @@ -74830,6 +75458,7 @@ lukasschauer.de, 1 lukastesar.cz, 1 lukasunger.cz, 1 lukasunger.net, 1 +lukasw.tk, 1 lukaswiden.com, 1 lukaszczyk.de, 1 lukaszderlatka.pl, 1 @@ -74875,6 +75504,7 @@ lumbardhi.tk, 1 lumbercartel.ca, 1 lumberjackman.tk, 1 lumbre-encendedores.com, 1 +lumchan.tk, 1 lumentell.us, 1 lumer.tech, 1 lumi.com, 1 @@ -74885,6 +75515,7 @@ lumieresurlourdes.com, 1 luminaire-mobilier-design.be, 1 luminaire.fr, 1 luminal-creation.com, 1 +luminaproject.ml, 1 luminary.pl, 1 lumindigital.com, 0 lumineled.se, 1 @@ -74898,6 +75529,7 @@ lumoria.eu, 1 lumos.gallery, 1 lumpenrock.tk, 1 lumpov.com, 1 +lumpy.ga, 1 lums.se, 1 lumsdens.ga, 1 lumus-grafikdesign.de, 1 @@ -74924,7 +75556,9 @@ lunaonline.tk, 1 lunapps.com, 1 lunar6.ch, 0 lunares.pl, 1 +lunaretna.com, 1 lunarflake.com, 1 +lunarhost.cf, 1 lunaribes.ch, 0 lunarlog.com, 1 lunarshark.com, 1 @@ -74996,6 +75630,7 @@ lushersolutions.com, 1 lushijun.com, 1 lushka.al, 1 lushnikov-alex.ru, 1 +lushnja.tk, 1 lusis.fr, 1 lusitom.com, 1 luska.cz, 1 @@ -75018,6 +75653,7 @@ luteijn.cloud, 1 luteijn.email, 1 luteijn.pro, 1 lutesite.tk, 1 +lutherus.tk, 1 lutify.me, 1 lutizi.com, 0 lutoma.org, 1 @@ -75039,6 +75675,7 @@ luvscent.com, 1 lux-house.tk, 1 lux.com.de, 1 luxanos.com, 1 +luxarchive.tk, 1 luxaterra.com, 1 luxcraft.eng.br, 1 luxden.com, 1 @@ -75055,6 +75692,7 @@ luxelyhome.com, 1 luxemburgsite.tk, 1 luxeturf.com.au, 1 luxfosdecoenterprise.com, 1 +luxhome.tk, 1 luxinmo.com, 1 luxonengineering.com, 1 luxonmx.com, 1 @@ -75096,6 +75734,7 @@ luyungterd.com, 0 luzat.com, 1 luzfaltex.com, 1 luzi-type.ch, 1 +luzica.tk, 1 lv.lk, 1 lv.search.yahoo.com, 0 lv0.it, 0 @@ -75129,6 +75768,7 @@ lxnchan.cn, 1 lxx4380.com, 1 lxx77.com, 1 lyam.fr, 1 +lyap-lyandiya.ga, 1 lyax.be, 1 lycan.me, 1 lycaonsec.com, 1 @@ -75204,6 +75844,7 @@ lysergion.com, 1 lyst.co.uk, 1 lyteclinic.com, 0 lytkins.ru, 1 +lyubov-sovmestimost.cf, 1 lyuda.tk, 1 lyukaacom.ru, 1 lyuks-parfyum.tk, 1 @@ -75231,7 +75872,6 @@ m-gaming.tk, 1 m-generator.com, 1 m-h-b.fr, 1 m-hydravlika.com.ua, 1 -m-idav.ru, 0 m-idea.jp, 1 m-monitor.pl, 1 m-net.de, 1 @@ -75326,6 +75966,7 @@ mabnn.ru, 1 mabnn.spb.ru, 1 mabra.com, 1 mabulledu.net, 1 +mabusalah.tk, 1 mac-i-tea.ch, 0 mac-world.pl, 1 mac.biz.tr, 1 @@ -75341,8 +75982,11 @@ macappstudio.com, 1 macappstudiobridge.com, 1 macappstudioprojects.com, 1 macaque.io, 0 +macarenagomezfan.tk, 1 +macaroons.tk, 1 macaroonshindig.tk, 1 macarthuradr.com, 1 +macautocouture.ga, 1 macautocouture.gq, 1 macautocouture.ml, 1 macaw.lt, 1 @@ -75370,8 +76014,10 @@ machbach.com, 1 machbach.net, 0 machelpnashville.com, 1 machetewp.com, 1 +machiavelli.tk, 1 machikka.com, 0 machin.email, 1 +machinatio.ga, 1 machine.email, 1 machineaecrire.fr, 1 machinebazar.com, 1 @@ -75391,6 +76037,7 @@ macinyasha.net, 1 macioszektv.eu, 1 macji-raj.si, 1 mack.space, 1 +mackanz.tk, 1 mackenziedatastream.ca, 1 macker.io, 1 mackeysack.com, 1 @@ -75484,7 +76131,9 @@ maderasbrown.com, 1 madewithcollab.com, 1 madewithopendata.org, 1 madge.tk, 1 +madhawaweb.tk, 1 madhyrecords.com, 1 +madian.tk, 1 madinina.tk, 1 madintouch.com, 1 madisoncountyalema.gov, 1 @@ -75492,6 +76141,7 @@ madisoncountyhelps.com, 1 madisoncountyil.gov, 1 madisoncountyne.gov, 1 madisonent-facialplasticsurgery.com, 1 +madisonprocaccini.tk, 1 madisonsjewelersorlando.com, 1 madisonsquarerealestate.com, 1 madkids.ga, 1 @@ -75511,6 +76161,7 @@ madost.one, 1 madprod.tk, 1 madpsy.uk, 1 madrants.net, 1 +madrasareforms.cf, 1 madrasareforms.ga, 1 madrasareforms.ml, 1 madreacqua.org, 1 @@ -75525,10 +76176,12 @@ madride.tk, 1 madscientistwebdesign.com, 1 madskauts.tk, 1 madskill.tk, 1 +madskills.tk, 1 madsklitgaard.dk, 1 madskristensen.dk, 1 madspeed-performance.tk, 1 madsstorm.dk, 0 +madteam.tk, 1 madtown.tk, 1 maduexclusive.com, 1 maduracion.com, 1 @@ -75553,10 +76206,13 @@ maeterlinck100.be, 1 maev.si, 1 maevelyfotografia.com, 1 maewmoo.com, 1 +maewongaming.tk, 1 maff.co.uk, 1 maff.scot, 1 mafia-penguin.club, 1 mafia-web.tk, 1 +mafiaclan.tk, 1 +mafiaclub.ml, 1 mafiaforum.de, 1 mafiagames.tk, 1 mafiamohaa.tk, 1 @@ -75569,15 +76225,20 @@ mafy.fi, 1 magaaral.com, 1 magaconnection.com, 1 magadan.ga, 1 +magadan.gq, 1 +magadan.ml, 1 magaliff.net, 1 +magaria.ml, 1 magasindejouets.com, 1 magasinsalledebain.be, 1 magasinsalledebain.fr, 1 magasinsalledebains.be, 1 magasinsalledebains.fr, 1 magasinsenfrance.com, 1 +magaso.tk, 1 magaviva.com, 1 magazilla.ga, 1 +magazin4ik.ga, 1 magazinecards.ga, 1 magazinedabeleza.net, 1 magazinedotreino.com.br, 1 @@ -75606,10 +76267,12 @@ magewell.nl, 1 maggie-shaw.co.uk, 0 maggie.gy, 1 maggiemcgee.tk, 1 +maggot.cf, 1 magi-cake.com, 1 magiamgiatot.tk, 1 magic-cards.info, 1 magic-carpetcleaning.co.uk, 1 +magic-cheerleading.tk, 1 magic-network.tk, 1 magic-photo-events.fr, 1 magical-secrets.com, 0 @@ -75617,6 +76280,8 @@ magical.rocks, 1 magicalwishes.tk, 1 magicamulet.me, 1 magicball.co, 1 +magicball.ga, 1 +magicbar.tk, 1 magicbeanschool.com, 1 magicbroccoli.de, 1 magicbullets.com, 1 @@ -75624,6 +76289,7 @@ magiccards.info, 1 magicdesktop.com, 1 magicdlp.com, 1 magicflora.tk, 1 +magiciansofchaos.tk, 1 magicitaca.com, 0 magicjudges.org, 1 magickmale.de, 1 @@ -75712,6 +76378,7 @@ magnificentdata.com, 1 magniflood.com, 1 magnit-akciya.tk, 1 magnitgang.ml, 1 +magnitola.ml, 1 magnoliadoulas.com, 1 magnoliastrong.com, 1 magnoliawi.gov, 1 @@ -75737,6 +76404,7 @@ magwin.co.uk, 1 magyarepitok.hu, 1 mah-nig.ga, 1 mahabharat.tk, 1 +mahadihasan.cf, 1 mahadsunnah.com, 1 mahalaraibanda.ro, 1 mahali.tk, 1 @@ -75761,6 +76429,7 @@ mahieu-wonen.nl, 1 mahirakyildiz.com, 1 mahjong-navi.com, 1 mahjong.org, 1 +mahjonggames.tk, 1 mahjongrush.com, 1 mahler.io, 1 mahmalci.net, 1 @@ -75780,6 +76449,7 @@ maianduc.vn, 1 maiateam.pt, 1 maichun.info, 0 maid.gay, 1 +maid.tk, 1 maidenliput.fi, 1 maidenworld.tk, 1 maidoty.net, 1 @@ -75788,9 +76458,11 @@ maiet.net, 1 maigesellschaft-lammersdorf.de, 1 maijia800.com, 1 maik-mahlow.de, 1 +maikhuong.tk, 1 maikolfish.it, 1 maikoloc.com, 1 mail-de.jp, 1 +mail-delivery.ga, 1 mail-ink.com, 1 mail-rotter.de, 1 mail-routing.net, 1 @@ -75806,14 +76478,21 @@ mail.yahoo.com, 0 mail180.com, 1 mail4you.in, 1 mailanyzer.com, 1 +mailbase.cf, 1 mailbox.mg, 1 mailbox.org, 1 +mailboy.ml, 1 mailboy.tk, 1 mailbywire.com, 1 mailchaud.com, 1 mailcubexs.tk, 1 +maildrops.tk, 1 mailer.me, 1 +mailex.cf, 1 +mailexpresso.tk, 1 mailexx.ga, 1 +mailexx.gq, 1 +mailexx.ml, 1 mailfence.com, 1 mailflank.com, 0 mailgun.com, 1 @@ -75837,6 +76516,7 @@ mailnara.co.kr, 1 mailnerds.de, 1 mailon.ga, 1 mailosaur.com, 1 +mailpass.ml, 1 mailpenny.com, 1 mailsac.com, 1 mailsend.ml, 1 @@ -75845,6 +76525,7 @@ mailstation.de, 1 mailsupport.cz, 1 mailtelligent.com, 1 mailtobiz.tk, 1 +mailtracker.ml, 1 mailum.org, 0 mailw.com, 1 mailwala.tk, 1 @@ -75947,6 +76628,7 @@ makejusticework.org.uk, 0 makelindazi.com, 1 makemejob.com, 1 makemillion.tk, 1 +makemoney-plan.tk, 1 makemusic-asia.com, 1 makenaiyo-fx.com, 1 makenprint.uk, 1 @@ -75962,6 +76644,7 @@ makesenseofdata.co.uk, 1 maketheneighborsjealous.com, 1 maketodiet.com, 1 makeupevelinua.cf, 1 +makeupevelinua.ga, 1 makeupillusion.com, 1 makeuplove.nl, 1 makeuppleasure.it, 1 @@ -75976,22 +76659,32 @@ makilingchallenge.tk, 1 makingmemoney.cf, 1 makingmemoney.ga, 1 makingmemoney.gq, 1 +makingmemoney.ml, 1 +makingmoneyathome.tk, 1 +makingmoves.gq, 1 makkiyaz.tk, 1 makkusu.photo, 1 maklerinfo.biz, 1 makocontrols.com, 1 +makohu.tk, 1 makomako.tk, 1 makonet.com.au, 0 makos.jp, 1 makowitz.cz, 1 makrama.shop, 1 makromedikal.com.tr, 1 +maksa.ga, 1 maksatmoda.com, 1 maksima.kh.ua, 1 maksimmrvica.tk, 1 +maksmedia.tk, 1 +maksonshop.ga, 1 maksoud-karim.net, 1 +maksport.ml, 1 +maksutov.tk, 1 maktoob.search.yahoo.com, 0 makulatura.cf, 1 +makuonline.tk, 1 makuquina.tk, 1 makura.fun, 1 malabarismo.tk, 1 @@ -76000,6 +76693,7 @@ malachiteauth.com, 1 maladie-autoimmune.fr, 1 malagarental.com, 1 malagarental.es, 1 +malahov.tk, 1 malamutedoalasca.com.br, 1 malangartchannel.com, 0 malardalenvvs.se, 1 @@ -76013,6 +76707,7 @@ malavida.tk, 1 malavirgen.tk, 1 malawi-cichliden-portal.de, 1 malayalamtalkies.tk, 1 +malaysia.cf, 1 malaysia.search.yahoo.com, 0 malaysiabrands.com.my, 1 malaysiainternship.my, 1 @@ -76053,6 +76748,7 @@ malflutningsstofan.is, 1 malfunction.tk, 1 malhasgusmao.com.br, 1 maliar.fr, 1 +malibaby.ga, 1 malibu-electric.com, 1 malibuexteriorlighting.com, 1 malibulingerie.com, 1 @@ -76070,6 +76766,7 @@ malimusavirler.tk, 1 malinaclub.com, 1 malinheadview.ie, 1 malisheva-blog.cf, 1 +malisheva-blog.ga, 1 maliskovik.si, 1 maliweb.ml, 1 malkalni.lv, 1 @@ -76093,7 +76790,9 @@ malloc.me, 1 mallonline.com.br, 1 mallorca.tk, 1 mallorcaautohuur.nl, 1 +mallpass.ga, 1 malmomusikskola.se, 1 +malmyzh.tk, 1 malond.com, 1 malone.link, 0 malorita.tk, 1 @@ -76104,6 +76803,7 @@ malsignature.com, 1 malsoftware.com, 1 malta-firma.com, 1 maltasite.tk, 1 +maltaultrastifo.tk, 1 maltegegner.de, 0 malu.style, 1 malvinas-falklands.tk, 1 @@ -76136,6 +76836,8 @@ mamaplus.net, 1 mamasorganizedchaos.com, 1 mamaxi.org, 1 mambas.cn, 1 +mambos.tk, 1 +mamburao.tk, 1 mame.cl, 1 mamijaclean.tk, 1 mamilitante.fr, 1 @@ -76144,6 +76846,7 @@ mamlaka.ml, 1 mamlaka.tk, 1 mammabelly.com.br, 1 mammaklader.tk, 1 +mammal-taxonomy.tk, 1 mammals.net, 1 mammaw.com, 1 mammooc.org, 1 @@ -76161,6 +76864,7 @@ mamradost.sk, 1 mamsds.com, 1 mamtapark.tk, 1 mamuko.nl, 1 +mamunlyric.tk, 1 man-stuff.co.uk, 1 man-trailer.com, 1 man3s.jp, 0 @@ -76179,7 +76883,6 @@ management-companie.ro, 1 managementboek.nl, 1 managementfeedback.com, 1 managementforstartups.com, 0 -managemy.rentals, 0 manageprefs.com, 1 manageprojects.com, 0 manager.linode.com, 0 @@ -76199,6 +76902,7 @@ manawithtea.com, 1 manbetx1998.live, 1 manboy.tk, 1 manchester.careers, 1 +manchesterjobsboard.com, 1 manchestertechservices.co.uk, 1 manchesterwi.gov, 1 mancrates.com, 1 @@ -76259,6 +76963,7 @@ mangapoi.com, 1 mangareactor.tk, 1 mangarosa.pt, 1 mangatafestas.com.br, 1 +mangaworld.gq, 1 mangeeaudio.com, 1 mangeur-de-cigogne.tk, 1 mangfoldimai.no, 1 @@ -76309,6 +77014,7 @@ mankomarketing.com, 1 mann-und-maeuse.de, 1 mannafields.org, 1 mannat-hallmumbra.com, 1 +manneguiden.no, 1 mannhaarkunst.com, 1 mannheimbloggt.tk, 1 mannigroup.com, 1 @@ -76612,6 +77318,7 @@ margintoniks.fr, 1 marglotfabadi.com, 1 margo-co.ch, 0 margo.ml, 1 +margolis.gq, 1 margotbworldnews.tk, 1 margots.biz, 1 margots.life, 1 @@ -76649,7 +77356,6 @@ mariasemarias.com.br, 1 mariaterbildt.tk, 1 mariavilleme.gov, 1 mariberceritera.online, 1 -maridonlaw.com, 1 marie-pettenbeck-schule.de, 1 marie.club, 1 mariecurie.tk, 1 @@ -76680,6 +77386,7 @@ marina-group.tk, 1 marina-tsvetaeva.ml, 1 marinamontana.net, 1 marinapetruzio.it, 1 +marinapozzoli.tk, 1 marinarinaldi.ml, 1 marinasmad.com, 1 marinat.de, 1 @@ -76694,6 +77401,7 @@ marineecologyfiji.com, 1 marinekaplama.com, 1 marinela.tk, 1 marinelausa.com, 0 +marinella.tk, 1 marinershousecalstock.com, 1 marinettecountywi.gov, 1 marinettewi.gov, 1 @@ -76704,6 +77412,7 @@ mario420.ga, 1 marioabela.com, 1 marioafonso.com, 1 marioberluchi.by, 0 +mariogarcia.tk, 1 mariogasparini.com.br, 1 mariogb.com, 1 mariogeckler.de, 0 @@ -76713,6 +77422,7 @@ marioncountyiowa.gov, 1 marioncountyohio.gov, 1 marioncountytn.gov, 1 marioncvb.com, 1 +marioserver.ml, 1 mariospizzaoxford.co.uk, 1 mariouniversalis.fr, 1 mariowiki.com, 1 @@ -76724,6 +77434,7 @@ mariskax.net, 1 marismenos.tk, 1 maritiemshertogenbosch.nl, 1 maritime-mea.com, 1 +maritlarsen.ml, 1 maritlarsen.tk, 1 marius-schmalz.de, 1 mariusschulz.com, 1 @@ -76737,6 +77448,7 @@ marjoleindens.be, 1 marjon.photography, 1 marjonruns.nl, 1 marjorie-wiki.de, 1 +marjoriebarretto.tk, 1 marjoriecarvalho.com.br, 1 mark-a-hydrant.com, 1 mark-armstrong-gaming.com, 1 @@ -76766,6 +77478,7 @@ marketcavalli.it, 1 marketespace.fr, 0 marketfeed.news, 1 marketforce.com, 1 +marketgarden.tk, 1 marketgrid.ml, 1 marketgrid.tk, 1 marketia.ml, 1 @@ -76820,8 +77533,10 @@ markhornsby.co.uk, 1 markhornsby.uk, 1 markido.com, 1 markisa.ninja, 1 +markitanova-anna.tk, 1 markitee.com, 0 markitzeroday.com, 1 +markjansen.tk, 1 markkirkforillinois.com, 1 markkirkforsenate.com, 1 markkusilvennoinen.fi, 1 @@ -76888,7 +77603,6 @@ marmelo.digital, 1 marmista.roma.it, 1 marmo.tk, 1 marmotte.love, 1 -marmuif.fr, 0 marmurmedical.com, 1 marneetgondoireathletisme.fr, 1 marny.eu, 1 @@ -76906,6 +77620,7 @@ maroochydorecitycenter.com.au, 1 maroochydorecitycentre.com, 1 maroochydorecitycentre.net.au, 1 maroquineriepirlot.be, 0 +maroshionline.tk, 1 maroussia.tk, 1 marouviere.fr, 1 marpa-wohnen.de, 1 @@ -76942,6 +77657,7 @@ marshfieldvt.gov, 1 marshmallow.co, 1 marshmallow.com, 1 marshmallowchallenge.com, 1 +marshop.tk, 1 marsicano.tk, 1 marsikelektro.cz, 1 marsilioblack.tk, 1 @@ -76972,6 +77688,7 @@ martian.community, 1 martian.tk, 1 martide.com, 1 martijnschreuders.tk, 1 +martijnvdputten.tk, 1 martin-caslavsky.tk, 1 martin-loewer.de, 1 martin-mattel.com, 1 @@ -76981,6 +77698,7 @@ martin-weil.de, 1 martin.vet, 0 martinaachen.tk, 1 martinalonsovega.tk, 1 +martinassurfdepot.tk, 1 martinbaileyphotography.com, 0 martinbiely.com, 1 martinboerhof.nl, 1 @@ -77039,6 +77757,7 @@ marulaweb.com, 1 marunouchi-hotel.co.jp, 1 marustat.ru, 1 marvaco.cf, 1 +marvaco.ga, 1 marvaco.tk, 1 marvelcargiveaways.co.uk, 1 marvelmoviemarathon.com, 1 @@ -77070,6 +77789,7 @@ marw.org, 1 marxist.party, 1 marxists.org, 1 marxmyths.org, 1 +marxpark.tk, 1 mary-e-kay.tk, 1 maryamghorbani.com, 1 marycliffpress.com, 1 @@ -77092,11 +77812,14 @@ masafarms.com, 1 masajilanver.tk, 1 masakanibu.ga, 1 masakigarden.com, 1 +masalaband.tk, 1 masaloku.com.tr, 1 masantefinanciere.com, 1 masanunciosimpresos.com, 1 masarik.sh, 1 masaze-hanka.cz, 1 +mascarablond.tk, 1 +mascarbo.tk, 1 mascarillas.blog, 1 maschine.email, 1 maschinen.email, 1 @@ -77170,6 +77893,7 @@ massanews.com, 1 massapothecary.com, 1 massar.family, 1 massauditor.gov, 1 +massazh.cf, 1 massconsultores.com, 1 masse.org, 1 massflix.com, 1 @@ -77215,6 +77939,7 @@ masterimperia.com, 1 masterin.it, 1 masterjuantex-projects.tk, 1 masterkitchen.com.br, 1 +masternetix.ga, 1 masterofallscience.com, 1 masterofazoth.tk, 1 masterofbytes.ch, 1 @@ -77353,6 +78078,7 @@ mathschool.lt, 1 mathsource.ga, 1 mathspace.co, 1 mathys.io, 1 +mati.gq, 1 mati.tk, 1 matijakolaric.com, 1 matildajaneclothing.com, 1 @@ -77370,8 +78096,10 @@ matocmedia.com, 1 matok.me.uk, 1 matomari.tk, 1 matomeathena.com, 1 +matopu.tk, 1 matoutepetiteboutique.com, 1 matov.tk, 1 +matovaya-pomada.ml, 1 matozone.com, 1 matpools.com, 1 matras.kiev.ua, 1 @@ -77476,6 +78204,7 @@ matthiasott.ch, 1 matthiasott.com, 1 matthiasschwab.de, 1 matthiasweiler.de, 0 +matthieuchedidweb.tk, 1 matthieuschlosser.fr, 1 matthijssen.info, 1 matthijsvos.com, 1 @@ -77692,6 +78421,7 @@ mayerbrownllz.com, 1 mayflowercreative.com, 1 mayflowerfairytales.com, 1 mayhutmuibep.com, 1 +mayito.tk, 1 maynails.com.br, 1 maynardnetworks.com, 0 maynesoftware.co.uk, 1 @@ -77709,6 +78439,7 @@ maythai.pl, 1 maytretrungphuong.com, 1 maywood-il.gov, 1 mayx.eu.org, 1 +mazavto.ml, 1 mazda-mps.de, 1 mazda-thermote.com, 1 mazda626.net, 1 @@ -77972,6 +78703,7 @@ mdx.no, 1 mdxdave.de, 0 mdxn.org, 1 me-groups.com, 1 +me-news.tk, 1 me-soft.nl, 1 me.com.br, 1 me.net.nz, 1 @@ -78344,6 +79076,7 @@ mecomed.com, 1 mecp.de, 1 med-colleges.com, 1 med-ics.com, 1 +med-line.cf, 1 med-nagoya-neurosurgery.jp, 1 med-otzyv.ru, 1 med-spravca.ml, 1 @@ -78389,6 +79122,7 @@ media-instance.ru, 1 media-land.tk, 1 media-library.co.uk, 1 media-serwis.com, 1 +media-store.ir, 1 media-valko.hu, 1 mediaarea.net, 1 mediaareplural.ca, 1 @@ -78480,6 +79214,7 @@ medicarecoveragefinder.com, 1 medicareful.com, 1 medicareinfo.org, 1 medicenteritalia.it, 1 +medichat.ml, 1 medicina-antiage.com, 1 medicina-interventionala.ro, 1 medicinae.solutions, 1 @@ -78537,6 +79272,7 @@ meditrine.cd, 1 medium.com, 1 mediumvoyant.be, 1 medivisionsc.com, 1 +medivox.tk, 1 mediweed.tk, 1 mediziner-goettingen.tk, 1 medja.net, 1 @@ -78672,6 +79408,7 @@ megaobzor.com, 1 megapixel.cz, 1 megaplan.cz, 1 megaplan.ru, 1 +megaportal.ga, 1 megaportal.tk, 1 megaprofi.tk, 1 megarap.cf, 1 @@ -78685,6 +79422,7 @@ megauction.tk, 1 megavasoc.com.ar, 1 megaviews.tk, 1 megawarez.org, 1 +megawebsite.tk, 1 megawhat.energy, 1 megaxchange.cash, 1 megayachts.world, 1 @@ -78742,6 +79480,7 @@ meilleursjeuxporno.fr, 1 meilleurstrucs.com, 1 meima.cc, 1 meimeistartup.com, 1 +mein-domizil.at, 1 mein-gehalt.at, 1 mein-muehlhausen.bayern, 1 mein-neuer-garten.de, 1 @@ -79084,7 +79823,7 @@ mercadolibre.com.sv, 1 mercadolibre.com.uy, 1 mercadolibre.com.ve, 1 mercadolivre.com.br, 1 -mercadopago.cl, 0 +mercadopago.cl, 1 mercadopago.com, 1 mercadopago.com.ar, 1 mercadopago.com.br, 1 @@ -79202,6 +79941,7 @@ mesologie-soesterberg.nl, 1 mesomeds.com, 1 mesonandino.tk, 1 mesothelioma.com, 1 +mesotheliomacentre.tk, 1 mesotheliomalawfirm-worldwide.tk, 1 mesoyca.com, 1 mesquitegcd.gov, 1 @@ -79244,6 +79984,7 @@ metaclays.io, 1 metacoda.com, 1 metacode.biz, 1 metacompliance.com, 1 +metacortex.cf, 1 metadata.be, 1 metadata.io, 1 metadedi.net, 1 @@ -79253,20 +79994,24 @@ metahumanvpn.network, 1 metait.de, 1 metakari.one, 1 metal-madness.tk, 1 +metal-rock.tk, 1 metalargentum.tk, 1 metalbus.tk, 1 metalcity.tk, 1 +metalempire.tk, 1 metaleonsociety.io, 0 metalequipped.com, 1 metalevolution.tk, 1 metalgoth.tk, 1 metalhouse.tk, 1 +metaljournal.tk, 1 metaljunkiez.com, 1 metallheads.tk, 1 metallibrarian.com, 1 metallictrading.ga, 1 metalliran.tk, 1 metallization.tk, 1 +metallobaza.ml, 1 metalloiskateli.com.ua, 1 metallomania.it, 1 metallosajding.ru, 1 @@ -79336,7 +80081,6 @@ metin2.top, 1 metin2blog.de, 1 metin2dev.org, 1 metinarslanturk.com, 1 -metisphere.co.uk, 1 metiz.site, 1 metkos.pl, 1 metkov.com.ua, 1 @@ -79358,6 +80102,7 @@ metroarchive.jp, 1 metrobriefs.com, 0 metrobus.co.uk, 1 metrocraft2033.tk, 1 +metrodemaracaibo.tk, 1 metrofree.ga, 1 metroline.ml, 1 metrolush.com, 1 @@ -79426,7 +80171,9 @@ meyeraviation.com, 1 meypell.com, 1 meys.io, 1 mezcal.amsterdam, 1 +mezedokamomata.tk, 1 meziblog.cz, 1 +mezinfo.tk, 1 mezzanine.net, 1 mf-fischer.de, 1 mf-natuurfotografie.nl, 1 @@ -79476,6 +80223,7 @@ mgmhotelyangon.com, 1 mgmpic.com, 1 mgmultiservicessrl.it, 1 mgo-ostenfelde.tk, 1 +mgonline.tk, 1 mgousse.tk, 1 mgpayserv.com, 1 mgr-dev.com, 1 @@ -79571,6 +80319,7 @@ mibeneficio.cl, 1 mibh.de, 1 miboulot.com, 1 mibuiin.com, 1 +mica.ml, 1 micado-software.com, 1 micah.soy, 1 micalodeal.ch, 0 @@ -79676,6 +80425,7 @@ michelangelo1978.com, 1 michelangelofoundation.org, 1 michelbenita.com, 1 michelcoumes.com, 1 +michele.ga, 1 michele.ml, 1 micheleandkeith.com, 1 michelgolfier.ml, 1 @@ -79707,10 +80457,12 @@ mickel.tk, 1 mickelvaessen.com, 1 mickgeorge.co.uk, 1 mickybottenberg.com, 1 +mickyfanclub.tk, 1 micled.com, 1 micled.net, 1 micled.org, 1 micluz.shop, 1 +micoff.tk, 1 micolab.com, 1 micr0lab.org, 1 micra.org.uk, 1 @@ -79776,6 +80528,7 @@ midlandcountymi.gov, 1 midlandsfundays.co.uk, 1 midlandslotus.co.uk, 1 midlandsphotobooths.co.uk, 1 +midnight-gaming-community.tk, 1 midnightmango.co.uk, 1 midnightmango.de, 1 midnightmechanism.com, 1 @@ -79839,6 +80592,7 @@ miguelcolmenares.com, 1 migueldemoura.com, 1 migueldominguez.ch, 0 miguelgfierro.com, 0 +miguelito.tk, 1 miguelmartinez.ch, 0 miguelmenendez.pro, 1 miguelmoura.com, 1 @@ -79920,13 +80674,14 @@ mikemcgeephotography.com, 1 mikemooresales.com, 1 mikeowens.us, 1 mikeprocopio.com, 1 -mikerichards.email, 0 +mikerichards.email, 1 mikerichards.gallery, 1 mikerichards.photography, 1 mikerichards.photos, 1 mikerichards.pictures, 1 mikerichardsphotography.com, 1 mikeschaffnerphotography.com, 1 +mikesystems.tk, 1 miketabor.com, 1 miketheuer.com, 1 mikethiessen.net, 1 @@ -79987,6 +80742,7 @@ milacronindia.com, 1 milaelaine.net, 1 milahendri.com, 1 milakirschner.de, 1 +milan-news.ml, 1 milaneziadvocacia.com, 1 milani.io, 1 milania.de, 1 @@ -80000,6 +80756,7 @@ milanvit.net, 1 milanvreeken.nl, 1 milapopovich.com, 1 milasescmagazin.tk, 1 +milavica.tk, 1 milavicca.tk, 1 milbournequine.co.uk, 1 milcahsmusings.com, 1 @@ -80029,6 +80786,7 @@ militaryconsumer.gov, 1 militaryfetish.tk, 1 militaryonesource.mil, 1 militarypumps.com, 1 +militarysrit.tk, 1 miliumnet.tk, 1 milk.games, 1 milkaalpesiutazas.hu, 1 @@ -80042,6 +80800,7 @@ milkmoovement.io, 1 milkopet.com, 1 milktea.info, 0 milkypond.org, 1 +mill.ml, 1 milladeo.tk, 1 millalex.com, 1 millant.ovh, 1 @@ -80049,6 +80808,7 @@ millasexshopoficial.com.br, 1 millburyma.gov, 1 millcreekwa.gov, 1 millefleurs.eu, 1 +millenn.photos, 1 millennium-thisiswhoweare.net, 1 millenniumfalcon.org, 1 millenniumstem.org, 1 @@ -80075,6 +80835,7 @@ millionairemethodsacademy.tk, 1 millionairessecrets.com, 1 millionclicker.com, 1 millioncloud.org, 1 +millioncombolist.tk, 1 millionen-von-sonnen.de, 1 milliongrounds.com, 1 millionlearn.org, 1 @@ -80132,6 +80893,7 @@ min.kiwi, 0 minacellini.com, 1 minacssas.com, 1 minademonic.org, 1 +minaio.tk, 1 minakov.pro, 1 minakova.pro, 1 minamassimo.org, 1 @@ -80147,6 +80909,7 @@ minbrew.com, 1 minced.cf, 1 mincom.ga, 1 mincompute.com, 1 +mind-books.gq, 1 mind-box.ch, 0 mind-farma.com, 1 mind-hochschul-netzwerk.de, 1 @@ -80162,6 +80925,7 @@ mindcms.nl, 1 mindcoding.ro, 1 mindcraft.ga, 1 minddistortion.tk, 1 +minddrive.cf, 1 mindenitt.ga, 1 mindequityinternational.com, 1 mindera.com, 0 @@ -80252,6 +81016,7 @@ minibackpackgirls.cf, 1 minibaggerverleih-aulendorf.de, 1 minibikini.cf, 1 minibomba.pro, 1 +minibrewery.cf, 1 minibus-service.ru, 1 minicampingshalom.nl, 1 minican.net, 1 @@ -80262,6 +81027,7 @@ minigermanauto.com, 1 minigolf-reisinger.com, 1 minigolfandgames.co.uk, 1 minikidz.es, 1 +minikin.tk, 1 minikneet.com, 1 miniliga.at, 1 minimal-apps.de, 1 @@ -80300,6 +81066,7 @@ miniwallaby.com, 1 miniwaplus.com, 1 minix.jp, 1 minjusticia.gob.cl, 1 +mink-coat.tk, 1 minka.net.bo, 1 minkatilmancoaching.nl, 1 minkymoon.jp, 1 @@ -80342,6 +81109,7 @@ minttang.cn, 0 minu.link, 1 minube.co.cr, 1 minucaelena.com, 1 +minul.in, 1 minungdomsbolig.dk, 1 minutashop.ru, 1 minuteflightdeals.com, 1 @@ -80363,7 +81131,9 @@ miproximopaso.org, 1 miprudelafi.ga, 1 mipueblito.tk, 1 mipymesenlinea.com, 1 +mir-faktov.tk, 1 mir-koji.tk, 1 +mir-multimedia.tk, 1 mir-obshenia.tk, 1 mir-pressy.ga, 1 mir-tiktak.tk, 1 @@ -80378,6 +81148,7 @@ mirador.co.uk, 1 miradordelcondado.com, 1 mirage-project.tk, 1 miragenews.com, 1 +miragg.cf, 1 miraggiostudio.com, 1 miragrey-porn.com, 1 miraheze.org, 1 @@ -80412,11 +81183,13 @@ mirindadomo.ru, 0 mirinfonews.tk, 1 mirjamderijk.nl, 1 mirkino.tk, 1 +mirknighechek.tk, 1 mirkofranz.de, 1 mirkomainardi.com, 1 mirkvartir.tk, 1 mirmax.ch, 1 mirobuvi.com.ua, 1 +mirokon.tk, 1 mironet.cz, 1 mironi.ml, 1 mironized.com, 1 @@ -80512,6 +81285,7 @@ misspoliticsaustralia.ml, 1 misstika-bijoux.com, 1 missualready.com, 1 missuniverse.tk, 1 +missworldinfo.tk, 1 missycosmeticos.com.br, 1 missycraindance.com, 1 missyjay.tk, 1 @@ -80572,6 +81346,7 @@ mitev.gq, 1 mitevi.com, 1 mitfx.com, 1 mitgrussen.de, 1 +mithgol.tk, 1 mithypnoseweiter.de, 1 mitiad.gq, 1 miticobikes.com, 1 @@ -80960,6 +81735,7 @@ mobile360.ph, 1 mobileague.ml, 1 mobilebingoclub.co.uk, 1 mobilebokep.com, 1 +mobilebooster.tk, 1 mobilecasas.com, 1 mobilecontractcomparison.com, 1 mobilecraftingco.com, 1 @@ -81048,6 +81824,7 @@ mocknen.net, 1 mocksvillenc.org, 1 mocomoco.jp, 1 mod.af, 1 +moda-donna.cf, 1 moda-querida.de, 1 modacruz.com, 1 modaexecutiva.com.br, 1 @@ -81065,6 +81842,7 @@ modbom.com.tw, 1 modcover.com, 1 modd.com.au, 1 modded-minecraft-server-list.com, 1 +moddedphones.com, 1 modderday.com, 1 moddescargas.com, 0 modding-forum.com, 1 @@ -81082,6 +81860,7 @@ modelbase.org, 1 modelclub-draveil.eu, 1 modeldanielle.tk, 1 modeldimension.com, 1 +modeldoll.tk, 1 modelearth.org, 1 modelflight.com, 1 modelfotografie.tk, 1 @@ -81105,6 +81884,7 @@ modenodf.ru, 1 modenuit.fr, 1 moderatoren.org, 1 modern-family.tv, 1 +modern-gaming.ga, 1 modernapprenticeships.org, 1 modernautorepairs.com, 1 moderncommercialrealestate.com, 1 @@ -81312,11 +82092,14 @@ molodost.gq, 1 molodost.tk, 1 molokaibreeze.com, 1 molokov.tk, 1 +molot-tora.ml, 1 molot-tora24.ga, 1 molpek.com, 1 molsonmail.com, 1 +moltapor.tk, 1 molti.hu, 1 molunerfinn.com, 1 +molusk.ml, 1 molwick.com, 1 molymet.com, 1 molynor.cl, 1 @@ -81363,6 +82146,8 @@ mona-dress.com, 1 monacannation.gov, 1 monachatdeco.com, 0 monaco-automaten.de, 1 +monaco-info.tk, 1 +monacoexpress.tk, 1 monad.io, 1 monagenceentreprise-caap.fr, 1 monakasatmasr.com, 1 @@ -81380,9 +82165,11 @@ mondayaftersunday.com, 1 monde-ampoule.fr, 1 monde-oriental.tk, 1 monde.win, 1 +mondechenoafrance.tk, 1 mondedie.fr, 1 mondo-it.ch, 1 mondo.rs, 1 +mondocellulari.tk, 1 mondolila.tk, 1 mondonet.org, 0 mondoviwi.gov, 1 @@ -81398,11 +82185,14 @@ moneta-rossii.ru, 1 monetize.ml, 1 monetki.net, 1 money-book.jp, 1 +money-earning.tk, 1 +money-fast.ga, 1 money-finder.ml, 1 money-okey.tk, 1 money-quick.cf, 1 money-spell.com, 1 money-tapuz.co.il, 1 +money-transfers.tk, 1 money-trust.ru, 1 money4net.tk, 1 moneybill.us, 1 @@ -81420,11 +82210,13 @@ moneyformybeer.com, 1 moneyfortitude.com, 1 moneyfuxx.com, 1 moneygo.se, 1 +moneygrup.tk, 1 moneymania.tk, 1 moneymint.com, 1 moneyniti.com, 1 moneyonchain.com, 1 moneypark.ch, 1 +moneyreal.tk, 1 moneysavingpro.com, 1 moneysmart.gov.au, 1 moneytamer.com, 1 @@ -81436,13 +82228,16 @@ mongla168.net, 1 mongla88.net, 1 mongolbox.tk, 1 mongolie.net, 1 +mongolito.tk, 1 monibu.org, 1 monicadurr.com, 1 monicahq.com, 1 monicanaranjo.tk, 1 +monicapotter.tk, 1 monicz.pl, 1 monidenum.fr, 1 monific.com, 1 +monika.tk, 1 moninformaticien.ovh, 0 moninformaticien.shop, 0 monique.io, 1 @@ -81492,8 +82287,10 @@ monocles.de, 1 monocyte.host, 1 monodejuegos.shop, 1 monodrama.tk, 1 +monohost.ml, 1 monokli.tk, 1 monolithapps.com, 1 +monolithic.tk, 1 monolithindustries.com, 1 monolithon.net, 1 monopoly.tk, 1 @@ -81525,6 +82322,7 @@ monstergovt.com, 1 monstermashentertainments.co.uk, 1 monsterminigames.de, 1 monsterminus.tk, 1 +monstermoney.tk, 1 monsternet.pl, 1 monstersuniversity.ga, 1 monstl.com, 1 @@ -81545,6 +82343,7 @@ montcalmcountymi.gov, 1 montclairca.gov, 1 montco.today, 1 montebelloca.gov, 1 +montehermoso.tk, 1 montejomoving.com, 1 montemanik.com, 0 montenegro-yacht.com, 1 @@ -81565,6 +82364,7 @@ montgomeryvotesal.gov, 1 monti.fi, 1 monticelloky.gov, 1 montillafarm.com, 1 +montoneros.tk, 1 montop.tk, 1 montourcountypa.gov, 1 montpreveyres.ch, 0 @@ -81585,6 +82385,7 @@ monweb.tk, 1 monzaradio.tk, 1 monzatoday.it, 1 monzo.me, 1 +monzo.tk, 1 moo.la, 1 mooana.net, 1 moocat.me, 1 @@ -81623,6 +82424,9 @@ moonlabs.nl, 1 moonlight-pr.com, 1 moonlight-show.tk, 1 moonlightdesign.org, 1 +moonlightpicnic.tk, 1 +moonlights.tk, 1 +moonlighttheatre.tk, 1 moonlit.cloud, 1 moonlit.games, 1 moonmelo.com, 1 @@ -81718,6 +82522,8 @@ mordelles-altitude.fr, 1 mordovia.cf, 1 mordovia.ga, 1 mordovia.gq, 1 +mordovia.tk, 1 +mordoviya.tk, 1 mordrum.com, 1 more-hikkoshi.com, 1 more-terrain.de, 1 @@ -81742,6 +82548,7 @@ moreserviceleads.com, 0 moreshop.pl, 1 morespacestorage.co.uk, 1 moresw.com, 1 +moretesting.tk, 1 morethanautodealers.com, 1 morethancode.be, 1 morethandigital.info, 1 @@ -81822,6 +82629,7 @@ mortgagecalculator.biz, 1 mortgagetranslations.gov, 1 mortis.eu, 1 mortonmspd.gov, 1 +morus.tk, 1 morvo.mx, 1 mos-camin.ru, 1 mos-upak.ru, 1 @@ -81839,8 +82647,12 @@ moscow-moscow.tk, 1 moscow-new.cf, 1 moscow.tk, 1 moscowlombard.ru, 1 +moscowlove.tk, 1 +moscownews.ml, 1 moscownights.org, 0 moscowsex.tk, 1 +moscowtimes.tk, 1 +mosdosug.ml, 1 moseic.com, 1 moseleyelectronics.com, 1 moselwi.gov, 1 @@ -81858,8 +82670,11 @@ moshiachtime.com, 1 moshop.com.vn, 1 moshwire.com, 1 mosin.org, 1 +moskas.tk, 1 moskeedieren.nl, 1 +moskva-city.cf, 1 moskva-kamen.ru, 1 +moskvagruz.tk, 1 mosmirmebeli.com, 1 mosnews.tk, 1 moso.io, 1 @@ -81873,6 +82688,8 @@ mosshi.be, 1 mossipanama.com, 1 mosst.com.tr, 1 mossylog.tk, 1 +most.tk, 1 +mostafabanaei.cf, 1 mostazaketchup.com, 1 mostbet.com, 1 mostc.is, 1 @@ -81911,6 +82728,7 @@ motherhoodinblack.com, 1 motherofsorrows.net, 1 mothership.de, 1 mothersmediaonline.ga, 1 +motichi.cf, 1 motifstudio.com.ua, 1 motion-a.com, 1 motiondata-vector.at, 1 @@ -81928,11 +82746,13 @@ motivo.nl, 0 motiweb.fr, 1 motlife.net, 0 motmplus.com, 1 +moto-texnika.tk, 1 motoactionimola.it, 1 motoblogism.com, 1 motobrasilferramentas.com.br, 1 motochileneta.tk, 1 motoclubentresemana.tk, 1 +motoclubrker.tk, 1 motocrosssite.tk, 1 motodb.co.uk, 1 motodb.net, 1 @@ -81945,6 +82765,7 @@ motogrupblanes.tk, 1 motohell.com, 1 motojato.com.br, 1 motokados.tk, 1 +motoland.ml, 1 motolife.tk, 1 motolinesupply.com, 1 motomorgen.com, 1 @@ -81988,12 +82809,14 @@ motowilliams.com, 1 motoworld.biz, 1 motransportinfo.com, 1 motri-projekt.tk, 1 +motringeneric.tk, 1 motshop.tk, 1 motstats.co.uk, 1 mott.pe, 1 motte.tattoo, 1 motto-iikoto.com, 1 motun.ga, 1 +mou-pmr.tk, 1 moube.fr, 1 mouche.fr, 1 moucloud.cn, 1 @@ -82001,6 +82824,7 @@ mouff.li, 1 mouldboard.ga, 1 moulin-pomerol.com, 1 moultriecountyil.gov, 1 +mound.ga, 1 mounimaharaj.tk, 1 mouniresidences.com, 1 mountain-retreat-center.com, 1 @@ -82014,8 +82838,10 @@ mountaintree.net, 1 mountainutilities.eu, 1 mountairymd.gov, 1 mountbatten.cz, 1 +mountbrowneguestcottage.ga, 1 mountclemens.gov, 1 mountknowledge.nl, 1 +mountpost.tk, 1 mountvernonin.gov, 1 mountwashington-ma.gov, 1 mourabaha-dz.com, 1 @@ -82063,11 +82889,14 @@ movieguys.org, 1 moviejack.org, 0 movieoldiesest.ga, 1 movies-diploma.fun, 1 +movies-fan.tk, 1 movies1977.ga, 1 moviesetc.net, 1 moviesrules.tk, 1 moviestodownload.tk, 1 movietopper.ml, 1 +movietradition.tk, 1 +moviewatchin.tk, 1 movihut.com, 1 moviko.nz, 1 movil.uno, 1 @@ -82092,6 +82921,7 @@ moxiegirlz.id, 1 moy-biznes.tk, 1 moy-gorod.od.ua, 0 moy.cat, 1 +moybiznes.tk, 1 moyer.pub, 0 moylen.eu, 1 moyminsk.tk, 1 @@ -82106,6 +82936,7 @@ mozgovoy.tk, 1 mozilla-russia.org, 1 mozilla.cz, 1 moztime.com, 1 +mozzak.tk, 1 mozzez.de, 1 mozzi.online, 1 mozzilla.cz, 1 @@ -82114,6 +82945,7 @@ mp.org, 1 mp3gratuiti.com, 0 mp3musicfind.ga, 1 mp3noi.com, 1 +mp3skull.cf, 1 mpa-pro.fr, 1 mpak.tk, 1 mpc-hc.org, 1 @@ -82125,6 +82957,7 @@ mpenten.com, 1 mpetroff.net, 1 mpg.ovh, 1 mpgaming.pro, 1 +mpgu.tk, 1 mphold.ru, 1 mphwinkel.nl, 1 mpintaamalabanna.it, 1 @@ -82179,6 +83012,7 @@ mralonas.tk, 1 mramor.ml, 1 mrandmrsparrot.gr, 1 mrandyyp.com, 1 +mranimal.tk, 1 mrautomazioni.it, 1 mrazek.biz, 1 mrbounce.com, 1 @@ -82188,9 +83022,11 @@ mrc-productivity.com, 1 mrca-sharp.com, 0 mrcelulares.co, 1 mrclutch.com, 1 +mrcog.tk, 1 mrcomer.tk, 1 mrcool.store, 1 mrcoolevents.com, 1 +mrcyberpixel.tk, 1 mrd-rc.com, 1 mrd-v.com, 1 mrd.ninja, 1 @@ -82221,6 +83057,7 @@ mrjbanksy.com, 1 mrjhnsn.com, 1 mrjo.sh, 1 mrjooz.com, 0 +mrjunior.ga, 1 mrjunior.ml, 1 mrkapowski.com, 0 mrknee.gr, 1 @@ -82228,13 +83065,17 @@ mrkrabat.de, 1 mrliu.me, 1 mrlove.tk, 1 mrmad.com.tw, 1 +mrmanson.tk, 1 mrmarcie.com, 1 mrmemory.co.uk, 1 mrmn.nl, 1 mrmoregame.de, 1 +mrmosier.tk, 1 +mrmostafaacademy.tk, 1 mrnathanpowell.com, 1 mrnh.de, 0 mrnh.tk, 1 +mrnice.ml, 1 mrnonz.com, 1 mrnordic.com, 1 mrpanipiales.com, 1 @@ -82354,6 +83195,7 @@ mstdn.onl, 0 mstever.com, 1 mstr-f-dstrctn.de, 1 mstridde.de, 1 +mstudio.tk, 1 msuess.me, 1 msuna.net, 1 msv-limpezas.pt, 1 @@ -82440,6 +83282,7 @@ mtsoftware.com.au, 1 mtthwbrd.com, 1 mtv.re, 1 mtvernonlisbonpd-ia.gov, 1 +mtvroadies.tk, 1 mtwolfpa.gov, 1 mtz-bu.gq, 1 mtz-info.gq, 1 @@ -82463,10 +83306,12 @@ muafakatmalaysia.ml, 1 muarstabyggmarknad.tk, 1 mubase.dk, 1 muble.tk, 1 +muceniece.tk, 1 muchbetterthancash.com, 1 muchisimos.com, 1 muchohentai.com, 1 muchoruidoacademy.com, 1 +muchotrolley.tk, 1 muclan.tk, 1 mucmail.de, 1 mudanzasjuniorh.com, 1 @@ -82475,7 +83320,9 @@ mudanzasuiza.com.ec, 1 mudanzasytransportesbh.com, 1 mudaomundo.org, 1 mudareganhar.pt, 0 +mudasobwa.tk, 1 mudbenesov.cz, 1 +mudcomplex.ga, 1 mudcomplexers.ga, 1 mudcrab.us, 0 muddy-landrover.tk, 1 @@ -82498,6 +83345,7 @@ muenzen.tk, 1 muenzenforum.tk, 1 mufi.ga, 1 mufibot.net, 1 +mufid.tk, 1 muflon-linux.org, 1 muga.space, 1 mugawe.com, 1 @@ -82517,6 +83365,7 @@ muhanova.com, 1 muhasebeci.org, 1 muhasebekurslari.tk, 1 muhcow.dk, 1 +muhibbulislam.tk, 1 muhiminulhasan.me, 1 muhlenbergtwppa.gov, 1 muhrielle.org, 1 @@ -82558,9 +83407,11 @@ mullett-townshipmi.gov, 1 mullinsfarms.com, 1 mulroymediation.com, 1 multi-cryptex.gq, 1 +multi-fruit.tk, 1 multi-pribor.ru, 1 multi-serwis.com.pl, 1 multi-soudures.fr, 1 +multi-tool.ml, 1 multi-vpn.biz, 1 multiagent.tk, 1 multibomasm.com.br, 1 @@ -82569,19 +83420,20 @@ multiclinicacardio.com.br, 1 multiconsumos.tk, 1 multicore.cl, 1 multicorpbra.com, 1 -multievidence.es, 1 multifruttisystems.gr, 1 multigamecard.com, 1 multigamers-net.tk, 1 multigeist.de, 1 multihobby.tk, 1 multikalender.de, 0 +multilevelmarketing.cf, 1 multiline.ge, 1 multilogik.com, 1 multimalin.ovh, 1 multimatte.com, 1 multimedia-pool.com, 1 multimediapc.de, 1 +multimediaworld.tk, 1 multimediosmonti.com, 1 multinationalforce.com, 1 multipassword.com, 1 @@ -82589,17 +83441,22 @@ multiplex.tk, 1 multiplexcy.com, 1 multiplies.tk, 1 multipotential-labo.com, 1 +multipuntos.ml, 1 multirep.ch, 0 multiroom-streaming.de, 1 multischool.tk, 1 multisite.ovh, 1 multispaninc.com, 1 +multistas.tk, 1 multitec.nl, 1 multitek.no, 1 multitenantlaravel.com, 1 multiterm.org, 1 multitheftauto.com, 1 +multitool.cf, 1 +multitraf.ga, 1 multiversonoticias.com.br, 1 +multivideo.tk, 1 multivpn.biz, 1 multivpn.cn.com, 1 multivpn.co.uk, 1 @@ -82630,6 +83487,7 @@ munch.me, 1 munchcorp.com, 1 mund-interdisziplinaer.com, 1 mundismart.com, 1 +mundo-otaku.tk, 1 mundoalba.tk, 1 mundoarabe.com.br, 1 mundobizarro.tk, 1 @@ -82642,6 +83500,7 @@ mundodasmensagens.com, 1 mundodastribos.com, 1 mundodocurioso.com.br, 1 mundodosagapornis.tk, 1 +mundofoto.tk, 1 mundogamers.top, 1 mundoinfrarrojo.com, 1 mundojoven.tk, 1 @@ -82682,10 +83541,12 @@ munwr.com, 0 munzlocal10.org.nz, 1 muoivancauhoivisao.com, 1 muon.marketing, 1 +mup-republicanos.tk, 1 mur-parfait.com, 1 mur-vegetal-interieur.fr, 1 murahjerr.com, 1 murakami-sah.com, 1 +muralart.ga, 1 muralswallpaper.co.uk, 1 muralswallpaper.com, 1 muraltown.com, 1 @@ -82694,9 +83555,11 @@ murasame.tech, 1 murashun.jp, 1 muratatifsayar.com.tr, 1 muratboyla.com, 1 +muratcileli.tk, 1 muratec.tw, 1 muratore-roma.it, 1 murciacobras.tk, 1 +murciaprocuradores.tk, 1 murdercube.com, 1 murer-specialisten.dk, 1 murfy.kiwi, 1 @@ -82705,6 +83568,7 @@ murgi.de, 1 murksbreider.tk, 1 murl.ml, 1 murmansk.cf, 1 +murmanskforum24x7.tk, 1 murmashi.com, 1 murmashi.ru, 1 murof.com.br, 1 @@ -82714,8 +83578,11 @@ murray.xyz, 1 murraya.cn, 1 murraycountymn.gov, 1 murrietadogtrainers.com, 1 +mursa.tk, 1 +mursatov.tk, 1 murster.tw, 1 mursu.directory, 1 +murtazamustafahirani.tk, 1 murz.tv, 1 murzik.space, 1 musaccostore.com, 1 @@ -82741,6 +83608,7 @@ musehelix.com, 1 museloveurania.com, 1 museodefutbol.online, 1 museodeinsectos.tk, 1 +museodelistmo.tk, 1 muserver.io, 1 muses-success.info, 1 musettishop.com, 1 @@ -82750,6 +83618,7 @@ mush-room.co.jp, 1 mushel.ddns.net, 1 mushikabu.net, 1 mushino.com, 1 +mushka.ga, 1 mushman.tk, 1 mushroomcloud.moe, 1 music-bar.gr, 1 @@ -82766,23 +83635,28 @@ musicall.com, 1 musicalschwarzenburg.ch, 1 musicandrelated.tk, 1 musicapara.net, 1 +musicaporbolivia.tk, 1 musicasbr.com.br, 1 musicbow.com, 1 musicbox.party, 1 musicchris.de, 1 musiccitycats.com, 1 musiccitymint.com, 1 +musicfactory.ml, 1 musicflac4.tk, 1 musicfor.us, 1 musicfreakz.cf, 1 musicfromgod.com, 1 musicgamegalaxy.de, 1 +musicgeek.ga, 1 musicgivesmelife.com, 1 +musichiphop.ga, 1 musichome.tk, 1 musician.dating, 1 musicinsiderdigest.com, 1 musickhouseleveling.com, 1 musickorea.tk, 1 +musiclenta.tk, 1 musiclite.tk, 1 musicmasala.tk, 1 musicnotesroom.com, 1 @@ -82791,6 +83665,7 @@ musicradar.co.il, 1 musicradio.ga, 1 musicradio.gq, 1 musicradio.tk, 1 +musicrainbow.tk, 1 musicrooz.tk, 1 musicschoolonline.com, 1 musicsense.cf, 1 @@ -82802,10 +83677,13 @@ musicvideo.club, 1 musicvietnam.tk, 1 musicwear.cz, 0 musicworkout.de, 1 +musigama.tk, 1 musik-reitemann.de, 1 musik-vereinsbedarf.de, 0 +musiker.tk, 1 musikerkontakt.dk, 1 musikhaus-korn.de, 1 +musikidersi.tk, 1 musiktag2020.ch, 1 musikverein-elten.de, 1 musikverein-schuettorf.de, 1 @@ -82815,6 +83693,7 @@ musings.tech, 1 musingsatmidnight.com, 1 musiq-supreme.tk, 1 musique2nuit.com, 1 +musiques-traditionnelles.ga, 1 musition.cloud, 1 musition.com, 1 musition.net, 1 @@ -82822,6 +83701,7 @@ musitioncloud.com, 1 musitionfirst.com, 1 muskegowi.gov, 1 musketfire.com, 1 +musketiers.tk, 1 musketonhaken.nl, 0 muskokadanceconnection.com, 1 muskuratimorning.tk, 1 @@ -82830,6 +83710,7 @@ muslimah.boutique, 1 muslimbanter.co.za, 1 muslimmarriage.cf, 1 muslimpocket.com, 1 +muslimsoul.cf, 1 muslimsoul.ga, 1 muslimsoul.gq, 1 muslimsoul.ml, 1 @@ -82871,6 +83752,7 @@ mutfakyolu.com, 1 muthai.in.th, 1 mutiararentas.com.my, 1 mutsumikai8989.com, 1 +mutual.ga, 1 mutualfunds.cf, 1 mutualfunds.ml, 1 mutualmoney.ml, 1 @@ -82902,9 +83784,12 @@ muzicamp3.org, 1 muzicari.tk, 1 muziekcentrumdebijloke.gent, 1 muziektermen.tk, 1 +muzikanews.tk, 1 muzikantine.nl, 1 +muzike.tk, 1 muzmo.ga, 1 muzotakt.pl, 1 +muzprosvet.tk, 1 muzykanawesele.info, 1 mv-schnuppertage.de, 1 mv-spital.tk, 1 @@ -82932,6 +83817,7 @@ mvwoensei.com, 1 mvwoensei.xyz, 1 mvwoensel.com, 1 mvwr.co.uk, 1 +mvzstartpagina.tk, 1 mw.search.yahoo.com, 0 mwamitours.com, 1 mware-staging.azurewebsites.net, 1 @@ -82943,6 +83829,7 @@ mwd.world, 1 mwe.st, 1 mwezi.org, 1 mwicescholarship.com, 1 +mwinds.tk, 1 mwine.sk, 1 mwlcouriers.com, 1 mwmopd.gov, 1 @@ -82982,6 +83869,7 @@ my-azov.tk, 1 my-best-wishes.com, 1 my-bratsk.tk, 1 my-calend.ru, 0 +my-cars.tk, 1 my-clubpenguin.tk, 1 my-contract.ch, 0 my-contract.info, 0 @@ -82990,6 +83878,7 @@ my-demo.co, 1 my-digital.fr, 1 my-dns.co.il, 1 my-documentforce.com, 1 +my-education.tk, 1 my-finance.tk, 1 my-force-user-content.com, 1 my-gode.fr, 1 @@ -83004,6 +83893,7 @@ my-kirov.tk, 1 my-lightning-container.com, 1 my-lightning.com, 1 my-mobile-apps.com, 1 +my-montenegro.tk, 1 my-new-bikini.de, 1 my-nextcloud.at, 1 my-optika.ru, 1 @@ -83025,6 +83915,7 @@ my-static-demo-808795.c.cdn77.org, 1 my-static-live-808795.c.cdn77.org, 1 my-store.ch, 1 my-stories.ml, 1 +my-story.ml, 1 my-stuff-online.com, 1 my-town.tk, 1 my-tunisia.tk, 1 @@ -83057,6 +83948,7 @@ myamend.com, 1 myamihealth.com, 1 myammo.ru, 1 myandre.tk, 1 +myandroidfriend.ml, 1 myanimelist.net, 1 myanimo.ml, 1 myanmar-responsiblebusiness.org, 1 @@ -83072,16 +83964,24 @@ mybaby.bg, 1 mybags.cf, 1 mybakkupakku.com, 1 mybaran.tk, 1 +mybarcelona.tk, 1 +mybathroom.tk, 1 mybauingenieur24.de, 1 mybb.com, 1 mybb.de, 1 +mybbcode.tk, 1 mybeancloud.co.za, 1 mybeautyjobs.de, 1 +mybestbook.tk, 1 +mybestbooks.gq, 1 mybestteam.tk, 1 mybicc.org, 1 mybillie.com, 1 +mybirds.tk, 1 +mybisnis.tk, 1 mybizzmail.com, 1 myblockchain.cloud, 1 +mybloggedlife.com, 1 myblogwire.org, 1 myblogworld.com.au, 1 myblueprints.org, 1 @@ -83100,6 +84000,7 @@ myboxofficetickets.com, 1 mybpstar.com, 1 mybrand.nl, 1 mybreakwatertower.com, 1 +mybritney.tk, 1 mybrokenheart.tk, 1 mybsms.gr, 1 mybubbleteashop.com, 1 @@ -83123,6 +84024,7 @@ mychamberlain.co.nz, 1 mychamberlain.com, 1 mychamberlain.com.au, 1 mychamberlain.eu, 1 +mychawinda.cf, 1 mychemromance.tk, 1 mychicken.info, 1 mychicken.nl, 1 @@ -83136,6 +84038,7 @@ myclasscam.org, 0 myclgnotes.com, 1 myclimate.com, 1 myclinicalstudybuddy.com, 1 +myclon.tk, 1 mycloud-system.com, 1 mycloudbits.me, 1 mycloudhome.site, 1 @@ -83149,6 +84052,7 @@ mycofairtrade.com, 0 mycoins.gallery, 1 mycoldjet.com, 1 mycolorado.gov, 1 +mycommerce.tk, 1 mycompanion.cz, 1 mycompanysite.host, 1 myconan.net, 1 @@ -83157,6 +84061,7 @@ myconcorde.fr, 1 myconf.com, 1 myconf.es, 1 myconf.uk, 1 +myconferencion.tk, 1 myconnection.ie, 1 myconsultation.be, 1 myconsulting.ch, 0 @@ -83181,6 +84086,8 @@ mycustomwriting.com, 1 mycutebee.com, 1 mydabb.com, 1 mydais.org, 1 +mydarkness.cf, 1 +mydarksite.tk, 1 mydarkstar.net, 1 mydatadoneright.eu, 1 mydataprotected.com, 1 @@ -83203,6 +84110,7 @@ mydirtysexstories.com, 1 mydisabilitymatters.com, 1 mydisabilitymatters.org.au, 1 mydisco.tk, 1 +mydistance.tk, 1 mydnshost.co.uk, 1 mydoc.fr, 1 mydocserve.com, 1 @@ -83210,7 +84118,10 @@ mydoggyadvisor.com, 1 mydoginsurance.com.au, 1 mydogispolite.tk, 1 mydogtrainingcollar.com, 1 +mydolls.ml, 1 mydomaindesk.com, 1 +mydomen.ml, 1 +mydoxod.tk, 1 mydreamlifelab.com, 1 mydreamshaadi.in, 1 mydrnetvpn.tk, 1 @@ -83223,13 +84134,18 @@ myeasybooking.de, 1 myeasycopy.com, 1 myebony.cam, 1 myecms.com, 1 -myecopanda.com, 1 +myedcreview.cf, 1 myediblefood.com, 1 +myeditclub.ml, 1 myedu.ga, 1 +myedu.gq, 1 +myeducationhub.tk, 1 myedumundo.com, 1 myeisenbahn.de, 1 myekon.com, 1 myelebest.ga, 1 +myelka.tk, 1 +myemailsender.tk, 1 myeml.net, 1 myempire.com.au, 1 myenemy.tk, 1 @@ -83250,7 +84166,9 @@ myf.cloud, 1 myface.pt, 1 myfae.eu, 1 myfamilyancestry.tk, 1 +myfancyurl.tk, 1 myfantasysportstalk.com, 1 +myfavmessage.cf, 1 myfavorite.com.tw, 1 myfdic.gov, 1 myfedloan.org, 1 @@ -83281,6 +84199,7 @@ myfuturewebsite.co.uk, 1 myg21.com, 1 mygadgetguardian.lookout.com, 0 mygallery.homelinux.net, 1 +mygameconsole.tk, 1 mygaming.news, 1 mygate.at, 0 mygaysitges.com, 1 @@ -83299,6 +84218,7 @@ mygest.me, 1 mygigabitnation.com, 1 mygignation.com, 1 mygilehery.tk, 1 +mygimp.tk, 1 mygirlfriendshouse.com, 1 mygizmolife.tech, 1 myglobalopti.nl, 1 @@ -83321,13 +84241,16 @@ myhealthsquad.ca, 1 myhealthyday.com, 1 myheartlaundry.com, 1 myhechar.pro, 1 +myhell-anonim.tk, 1 myhfstar.com, 1 myhkweb.tk, 1 myhmz.bid, 1 myhollywoodnews.com, 1 myhome-24.pl, 1 myhomeworkpapers.com, 1 +myhoor.ga, 1 myhostname.net, 1 +myhotgirls.ml, 1 myhouse.rocks, 1 myhub.eu.org, 1 myhurlburt.marketing, 1 @@ -83358,6 +84281,8 @@ myjumparoo.co.uk, 1 myjumpsuit.de, 1 myjustice.org, 1 myjuvelirika.ru, 1 +mykarelia.ga, 1 +mykarelia.tk, 1 myke.website, 1 mykelseyonline.com, 1 mykill.pl, 1 @@ -83367,10 +84292,13 @@ mykolhoz.tk, 1 mykonos-island.tk, 1 mykontool.de, 1 mykumedir.com, 1 +mykurgan.tk, 1 mykursumlija.tk, 1 mylastchapter.tk, 1 mylatestnews.org, 1 +mylawer.ga, 1 mylearners.vic.gov.au, 1 +myled.ml, 1 mylegacyvip.com, 1 mylene-chandelier.me, 1 mylever.com, 1 @@ -83408,9 +84336,13 @@ mylover.be, 1 mylrd.xyz, 1 mylstrom.com, 1 myltfilm.tk, 1 +myltivarka.ml, 1 mymagazines.dk, 1 +mymagic.ml, 1 mymailboxpro.cf, 1 +mymailspace.ml, 1 mymaineconnection.gov, 1 +mymanagement.ml, 1 mymartinbeckeropenhab.de, 1 mymartinbeckeropenhab.eu, 1 mymartinhalchiado.com, 1 @@ -83435,6 +84367,7 @@ mymsr.de, 0 mymun.com, 1 mymun.net, 1 mymusiclist.alwaysdata.net, 1 +mymusique.tk, 1 mymx.lu, 0 mynak.se, 1 mynameistavis.com, 1 @@ -83483,6 +84416,7 @@ myofficeconnect.co.uk, 1 myofficerenovation.com, 1 myonline.hu, 1 myonline.store, 1 +myonlinemovies.ga, 1 myonlinevehicleinsurance.com, 1 myopd.in, 1 myorder-pg.com, 1 @@ -83508,16 +84442,19 @@ mypartnernews.com, 1 mypartybynoelia.es, 1 mypathologos.gr, 1 mypay.fr, 1 +mypcb.tk, 1 mypdns.org, 0 mypeace.tk, 1 mypenza.tk, 1 mypeople.co.in, 1 myperfecthome.ca, 1 myperks.in, 1 +mypersonalpage.tk, 1 mypet24.ch, 1 myphamaplus.org, 1 mypharmjar.com, 1 myphotographytips.com, 1 +myphotonics.ml, 1 myphotos.ga, 1 myphotoshopbrushes.com, 1 myphysiocoach.ch, 1 @@ -83527,7 +84464,9 @@ mypivcard.com, 1 mypizza-bremen.de, 1 myplaceonline.com, 1 mypnu.net, 1 +mypogljad.tk, 1 mypornsnap.top, 1 +myportal.ga, 1 myposters.tk, 1 mypowerserg.ca, 1 mypowerserg.com, 1 @@ -83543,6 +84482,7 @@ myprotime.eu, 1 myproxy.eu.org, 0 mypskov.tk, 1 mypsy.online, 1 +mypsychicreadings.tk, 1 mypvhc.com, 1 myqservices.com, 1 myraboats.tk, 1 @@ -83557,6 +84497,7 @@ myrealestatemate.com.au, 1 myred.net, 1 myref.net, 1 myrekber.co.id, 1 +myremont.tk, 1 myremotelogin.ddns.net, 1 myrent.quebec, 1 myrepubic.net, 1 @@ -83609,6 +84550,7 @@ myresearchapp.com, 1 myresearchtoolbox.net, 1 myresidence.de, 1 myrevery.com, 1 +myreviews.ga, 1 myrevolution.in, 1 myrewardspoints.com, 1 myriadlex.com.tw, 1 @@ -83616,6 +84558,7 @@ myriadof.com, 1 myrig.com, 1 myrig.net, 1 myroaccutaneexperience.co.uk, 1 +myrom.tk, 1 myrotvorets.center, 1 myrotvorets.news, 1 myrp.co, 1 @@ -83635,9 +84578,11 @@ mysbi.tk, 1 myschoolphoto.org, 1 mysciencecloset.com, 1 myseatime.com, 1 +mysecretstylist.ga, 1 mysecurity.review, 1 myseo.ga, 1 myservicearl.com, 1 +myservik.ml, 1 myseu.cn, 1 mysexvids.net, 1 mysexycard.com, 1 @@ -83645,6 +84590,7 @@ mysexydate.de, 1 mysexydate24.com, 1 myshenwang.tk, 1 myshiftbid.com, 1 +myshikarpur.tk, 1 myshowbiz.tk, 1 mysidekick.io, 1 mysignal.com, 1 @@ -83653,11 +84599,11 @@ mysill.gr, 1 mysilvershield.com, 1 mysisterandi.co.za, 1 mysites.guru, 1 -mysmelly.com, 1 mysmg.in, 1 mysmmstore.com, 1 mysmmstore.in, 1 mysociallinks.org, 1 +mysociety.ml, 1 mysockfactory.ch, 1 mysockfactory.com, 1 mysocrat.com, 1 @@ -83674,11 +84620,13 @@ mystagic.cloud, 1 mysteriousbeans.com, 1 mysteriouscode.com, 1 mysteriouscode.io, 1 +mystery-box.cf, 1 mysteryboxinc.com, 1 mysterydata.com, 1 mysteryfun.house, 1 mysterymind.ch, 0 mysteryshow.site, 1 +mystgames.tk, 1 mystia.org, 1 mystic-falls.tk, 1 mystic-welten.de, 1 @@ -83696,9 +84644,12 @@ mystore24.us, 1 mystorydoctor.com, 1 mystorymonster.com, 1 mystown.org, 1 +mystreet.ga, 1 mystudy.me, 1 mystudycart.com, 1 +mystudymap.tk, 1 mystylion.com, 1 +mysupplements.ga, 1 mysurfhostel.com, 1 myswabi.tk, 1 myswimmingclub.uk, 1 @@ -83709,6 +84660,7 @@ mytc.fr, 1 myte.ch, 1 mytea.life, 1 mytefl.com, 1 +mytests.tk, 1 mytfg.de, 1 mythemeshop.com, 0 mythen-fonds.ch, 1 @@ -83723,6 +84675,7 @@ mytntware.com, 1 mytodo.cloud, 1 mytourstar.com, 1 mytraiteurs.com, 1 +mytraning.cf, 1 mytransmissionexperts.com, 1 mytravelblog.de, 1 mytravelguide.tk, 1 @@ -83741,6 +84694,7 @@ mytty.net, 1 mytuleap.com, 1 mytun.com, 1 myturf.com.au, 1 +mytuzla.tk, 1 mytwilight.tk, 1 myunitard.uk, 1 myunraid.ru, 1 @@ -83757,17 +84711,23 @@ myveronanj.com, 1 myvet.ie, 1 myviewboard.com, 1 myvoipnews.com, 0 +myvologda.tk, 1 myvotect.gov, 1 myvpl.com, 1 mywalletcrypto.cf, 1 +mywapforum.ga, 1 mywari.com, 1 myweatherbuzz.com, 1 myweb360.de, 1 +mywebexperience.gq, 1 mywebinar.com, 1 mywebinar.io, 1 mywebpanel.eu, 1 mywebpanel.nl, 1 +mywebpharmacy.tk, 1 +mywebserver.ml, 1 myweddingreceptionideas.com, 1 +myweightlosstips.tk, 1 mywestondental.com, 1 mywetpussycams.com, 1 mywihomes.com, 1 @@ -83788,6 +84748,7 @@ myxxxsite.tk, 1 myyoutubepage.tk, 1 myyubikey.net, 1 myyubikey.org, 1 +myzarabot.tk, 1 myzetaspace.com, 1 myzina.cz, 0 mz-mz.net, 1 @@ -83836,6 +84797,7 @@ n36533.com, 1 n37.co, 1 n3oxid.fr, 1 n3rd.eu, 1 +n3rd0rama.tk, 1 n3t.ch, 1 n4mullingartolongford.ie, 1 n4zm.com, 1 @@ -83883,9 +84845,11 @@ naaronstoe.nl, 1 nab-services.ml, 1 nabaleka.com, 1 nabboon.com, 1 +nabeer.ga, 1 nabeez.cf, 1 nabidka.net, 1 nabidkydnes.cz, 1 +nabiev.tk, 1 nabitrix.tk, 1 nabokov.tk, 1 nabosoft.tk, 1 @@ -83899,6 +84863,7 @@ nachalniku.gq, 1 nachalniku.ml, 1 nachalniku.tk, 1 nachalosbog.bg, 1 +nachalova.tk, 1 nachbar.chat, 1 nachoblanco.tk, 1 nachovni.org, 1 @@ -83909,8 +84874,10 @@ nacin.com, 1 nacionaltelha.com.br, 1 nacktetatsachen.at, 0 nackwallpapers.ml, 1 +nacnkabiltrim.cf, 1 nacocu.cf, 1 nacom.tk, 1 +nacoree.ga, 1 nacres.tk, 1 nacsonline.tk, 1 nacudeck.com, 1 @@ -83924,6 +84891,7 @@ naddi.org, 1 nadejeproninu.cz, 1 nadelholzkulturen.de, 1 nadex.com, 1 +nadezhda.ml, 1 nadiafourcade-photographie.fr, 1 nadilo.com.br, 1 nadine-birkner.de, 1 @@ -83931,6 +84899,7 @@ nadine-chaudier.net, 1 nadinecays.com, 1 nadinethings.gq, 1 nadir.tk, 1 +nadjabenaissa.tk, 1 nadjasummer.com, 1 nadlan.immo, 1 nadlerdentistry.com, 1 @@ -83946,11 +84915,14 @@ nafhroaviano.com, 1 nafod.net, 1 nafoods.com, 1 naga-semi.com, 1 +naga-wedding.tk, 1 naga.com, 1 +naga.gq, 1 naga.im, 0 naganoziotech.com, 1 nagaragem.com.br, 1 nagashi.ma, 0 +nagato.tk, 1 nagaya.biz, 1 nagb.gov, 1 nagb.org, 1 @@ -83977,6 +84949,8 @@ nahouw.net, 1 nahrag.tk, 1 nahrung.de, 1 nahs-classof1972.com, 1 +nahtanoj.tk, 1 +nahttps.tk, 1 nahue.ar, 1 nahue.com.ar, 1 nahura.com, 1 @@ -83991,8 +84965,10 @@ naijaxnet.com.ng, 1 naika.clinic, 1 nailattitude.ch, 0 nailchiodo.com, 1 +nailclub.tk, 1 nails-n-more.be, 1 nailsart.roma.it, 1 +nailshop.gq, 1 nailsmania.ua, 1 nailspafinder.com, 1 naim.tk, 1 @@ -84030,7 +85006,9 @@ nakedfacts.co.uk, 0 nakedgirls247.xxx, 1 nakedinkas.com, 1 nakedtruth.in, 1 +nakenmodell.tk, 1 nakim.cf, 1 +nakin.tk, 1 nakka.ch, 1 nakkati.tk, 1 nakliyat.name.tr, 1 @@ -84042,6 +85020,7 @@ nako.no, 1 nakthongkham.cloud, 1 nakthongkham.com, 1 nakupi.online, 1 +nale-hosting.tk, 1 nalenders.com, 1 nalepky-na-zed.cz, 1 nalepte.cz, 1 @@ -84051,6 +85030,7 @@ nalle.fi, 1 nalles.net, 1 nalogomania.ru, 1 nalresearch.com, 1 +naltrexon.gq, 1 nalukfitness.com.br, 1 namaanak.net, 1 namaanakperempuan.net, 1 @@ -84087,7 +85067,6 @@ nametiles.co, 1 namevirus.com, 1 namevirus.net, 1 namevirus.org, 1 -namg.de, 1 nami.bo, 1 nami.exchange, 1 nami.trade, 1 @@ -84122,6 +85101,7 @@ nandakumar.co.in, 1 nandakumar.org, 1 nandapanithota.xyz, 1 nandedam.com, 1 +nandedbazar.tk, 1 nandemo.tk, 1 nanderson.me, 1 nandertga.ddns.net, 1 @@ -84129,12 +85109,10 @@ nandito.tk, 1 nanfangstone.com, 1 nange.cn, 1 nangluongxanhbinhphuoc.com, 1 -nanhuigmp.com, 1 nanhuimed.com, 1 -nanhuisoft.com, 1 nanhuistory.com, 1 -nanhuitech.com, 1 nanhuitop.com, 1 +naninossoftware.tk, 1 nanji123.com, 1 nanjiyy.com, 1 nankiseamansclub.com, 1 @@ -84151,6 +85129,8 @@ nanofate.tk, 1 nanofy.org, 1 nanogi.ga, 1 nanogramme.fr, 0 +nanohatsolution.tk, 1 +nanohostsolution.cf, 1 nanointeractive.cn, 1 nanolet.ga, 1 nanollet.org, 1 @@ -84159,10 +85139,12 @@ nanopixel.ch, 1 nanoport.jp, 1 nanoprogress.pl, 1 nanosek.pro, 1 +nanoshop.ml, 1 nanospheres.tk, 1 nanotechnologist.com, 1 nanotechnologysolutions.com.au, 1 nanotechtorsion.com, 1 +nanotipbot.tk, 1 nanotrasen.org, 0 nanovolt.nl, 1 nanowallet.io, 1 @@ -84180,6 +85162,7 @@ napi.edu.ee, 1 napikuponok.hu, 1 napilol.ml, 1 napisdata.us, 1 +napitok.tk, 1 napituti.cf, 1 napkins-wholesale.co.za, 1 napkins-wholesale.com, 1 @@ -84190,10 +85173,12 @@ naplata.mk, 1 naples.tk, 1 naplestotalgarage.com, 1 napo.tk, 1 +napoleonoutlawed.tk, 1 napolinissanctparts.com, 1 napolitoday.it, 1 napominanie.ml, 1 napoveda.online, 1 +nappylaundry.ga, 1 nappywashing.ga, 1 naprapativast.se, 1 naprawa-bazy-danych.pl, 1 @@ -84201,6 +85186,7 @@ napych.com, 1 naql.om, 1 naquebec.tk, 1 nara.gov, 1 +naraboty.ga, 1 narada.com.ua, 1 naradiebosch.sk, 1 naradiehusqvarna.sk, 1 @@ -84216,6 +85202,7 @@ narco-center.com, 1 narcoticsanonymous.tk, 1 narda-sts.com, 1 nardamiteq.com, 1 +nardpedro.tk, 1 narec.org, 1 narek.tk, 1 narela.com.mx, 1 @@ -84241,6 +85228,7 @@ narodne.site, 1 narodniki.com, 1 narodnyi-potolok.by, 1 narodowyspispowszechny.pl, 1 +narodserial.cf, 1 naroska.name, 1 narrativasdigitais.pt, 0 narrative.network, 1 @@ -84249,12 +85237,16 @@ narrenverein-wolkenschieber.de, 1 narrow.one, 1 narthollis.net, 1 narushil-pdd.cf, 1 +narushil-pdd.ga, 1 narushil-pdd.gq, 1 +narushil-pdd.ml, 1 +narushil-pdd.tk, 1 naruto-best.tk, 1 narutodelivery.com.br, 1 narutolimits.tk, 1 narutoshippuden.tk, 1 narutoshow.tk, 1 +narutouzumaki.tk, 1 nary-software.com, 1 narzedziownia.top, 1 nas-redes-sociais.com, 1 @@ -84288,6 +85280,7 @@ nashfutbol.tk, 1 nashidetki.tk, 1 nashira.cz, 1 nashjurist.tk, 1 +nashkrai.ga, 1 nashuaradiology.com, 1 nashuarpc.gov, 1 nashvillebasements.com, 1 @@ -84397,6 +85390,7 @@ nationalhomeimprovements.co.uk, 1 nationalhomequotes.com, 1 nationalmall.gov, 1 nationalmap.gov, 1 +nationalopera.ml, 1 nationalpriorities.org, 1 nationaltrails.ru, 1 nationandfreedom.tk, 1 @@ -84405,6 +85399,7 @@ nationsreportcard.gov, 1 nationx.tk, 1 native2ascii.net, 1 nativeindonesia.com, 1 +nativemusicrecords.cf, 1 nativeonestop.gov, 1 nativeproductions.ml, 1 nativereach.tv, 1 @@ -84415,6 +85410,7 @@ nativs.ch, 0 natlec.ch, 1 natlec.com, 1 natmal.net, 1 +nato-stamps.tk, 1 natreningu.net, 1 natronaincident.gov, 1 natronasheriff.gov, 1 @@ -84428,11 +85424,13 @@ natur-plus.tk, 1 natur-udvar.hu, 1 natur.com, 1 natura-sense.com, 1 +natura2000.tk, 1 naturabuy.fr, 1 naturalbeautyhacks.com, 1 naturalbijou.com, 1 naturalbladdercontrol.tk, 1 naturalcosmetics.cf, 1 +naturaldisasters.tk, 1 naturalezafengshui.com, 1 naturalflowerpower.com, 1 naturalkitchen.co.uk, 1 @@ -84454,6 +85452,7 @@ naturheilkunde-sabine-klein.de, 1 naturheilpraxis-grauer.de, 1 naturheilpraxis-oida.de, 1 naturheilpraxis-p-grote.de, 1 +naturliga.tk, 1 naturopath.tk, 1 naturopatiasiddharta.com, 1 naturparadies-rheinauen.de, 1 @@ -84461,6 +85460,7 @@ naturvit.at, 1 natusvita.com, 1 natusvita.com.br, 1 natuurinhuisheerenveen.tk, 1 +natuurlijk.tk, 1 natuurlijkehaarkleuring.nl, 1 natuurophaarmooist.nl, 1 natuwa.com, 1 @@ -84488,8 +85488,10 @@ navarrete.tk, 1 navdeep.ca, 1 naveengranites.com, 1 navegarea.tk, 1 +naveka.ga, 1 navenlle.com, 1 naviaddress.io, 1 +navidarian.tk, 1 navienna.com, 1 navient.com, 1 navigationweb.ml, 1 @@ -84510,6 +85512,7 @@ navycs.com, 1 nawabarzoo.in, 1 nawaf-blog.com, 1 nawarasa.com, 1 +nawdar.tk, 1 nawir.de, 1 nawroth.info, 1 nawt.pl, 1 @@ -84517,15 +85520,18 @@ nax.io, 0 naxcivan.tk, 1 naxe.lv, 1 nayanaas.com, 1 +nayapakistan.tk, 1 nayefalebrahim.com, 1 naymai.com, 1 nayna.tk, 1 nayr.us, 1 naz-sciaves.eu, 1 nazad.com.br, 1 +nazarenohuelva.tk, 1 nazarenoviso.tk, 1 nazevfirmy.cz, 1 nazimogluinsaat.com, 1 +nazmulislam.cf, 1 nazuna.blue, 1 nb.mba, 1 nb.zone, 1 @@ -84699,6 +85705,7 @@ near.social, 1 nearbi.com.mx, 1 nearby.in.th, 1 nearbyprinter.com, 1 +nearestbusiness.com, 1 nearlist.com, 1 nearnorthmassage.com, 1 neartothesky.com, 1 @@ -84723,6 +85730,7 @@ nebogame.com, 1 neboley.cf, 1 nebra.io, 1 nebracy.com, 1 +nebucadnezzer.tk, 1 nebul.at, 0 nebulae.co, 1 nebulise.com, 1 @@ -84744,19 +85752,25 @@ nedapflux.com, 1 nedcdata.org, 1 nedcv-preview.nl, 1 nedcv.nl, 1 +nedela.tk, 1 nederbetuwe.nl, 0 nederlands-vastgoedfonds.nl, 1 nedermisp.nl, 1 +nedhome.ml, 1 nedim-accueil.fr, 1 +nedimon.gq, 1 nedir.help, 1 nednex.com, 1 nedviga.gq, 1 nedviga.tk, 1 +nedvizhimost.tk, 1 +nedvizhimostthailand.ml, 1 nedvrf.ru, 1 nedzadalibegovic.com, 1 neecist.org, 1 needemand.com, 1 needflare.com, 1 +needing.cf, 1 needle-demo.azurewebsites.net, 1 needle.net.nz, 1 needle.nz, 1 @@ -84810,6 +85824,7 @@ nehnutelnosti.io, 1 nehoupat.cz, 1 nehrp.gov, 1 nehta.gov.au, 1 +neide.ga, 1 neighbor.co.il, 1 neighborhood-threat.tk, 1 neighborhoodelectricwa.com, 1 @@ -84850,6 +85865,7 @@ nekomimix.net, 1 nekondiciya.cf, 1 nekosc.com, 1 nekox.ml, 1 +nekrasowsky.ml, 1 nekretnine-lidl.hr, 1 nekrylov.ee, 0 nekrylov.org.ru, 0 @@ -84857,6 +85873,7 @@ nekrylov.spb.ru, 0 nekusoul.de, 1 nelefon.com, 1 nelegal-edition.ml, 1 +nelegal-edition.tk, 1 nelflex.com.br, 1 nelhage.com, 1 neljaenergia.ee, 1 @@ -85362,6 +86379,7 @@ neutralox.com, 0 neutrino.eu.org, 1 neutron.ch, 1 neuwal.com, 1 +neuzamariano.com, 1 nev.si, 1 neva-star.ml, 1 neva.li, 1 @@ -85540,6 +86558,7 @@ newpoke.net, 0 newportbus.co.uk, 1 newposts.ru, 1 newpraguemn.gov, 1 +newpress24.tk, 1 newquilters.com, 1 newreleases.io, 1 newreop.com, 1 @@ -85635,6 +86654,7 @@ newtonhaus.com, 1 newtons-erben.space, 1 newtrackon.com, 1 newtravelplans.com, 1 +newusatoday.ga, 1 newvehicle.com, 1 newvisionhealing.com, 1 newwaterford-oh.gov, 1 @@ -85804,6 +86824,7 @@ ngi.eu, 0 ngiemboon.net, 1 nginx.io, 1 nginxconfig.com, 1 +nginxtest.ml, 1 nginxyii.tk, 1 ngla.gov, 1 ngmx.com, 1 @@ -85822,6 +86843,7 @@ nguonnha.vn, 1 nguru.net, 1 ngutek.com, 1 nguyendanghung.com, 1 +nguyenfamily.tk, 1 nguyenminhhung.com, 1 nguyensuu.tk, 1 nguyenvankhoi.com, 1 @@ -85916,9 +86938,11 @@ nic.zip, 1 nic199.ru, 1 nicaieri.ro, 1 nicanordic.com, 1 +nicat.cf, 1 nicava.com.mx, 1 nice-autosurf.com, 1 nice-germany.tk, 1 +nice-links.tk, 1 nice-school.com.ua, 1 nice.ch, 1 nice.com, 1 @@ -85928,6 +86952,7 @@ niceguyit.biz, 1 nicesco.re, 1 nicesleepo.com, 1 nicestudio.co.il, 1 +nicesurf.tk, 1 nicgoa.nic.in, 1 nichearticlegalore.com, 1 nicheosala.tk, 1 @@ -85950,6 +86975,8 @@ nicht-blau.de, 1 nichteinschalten.de, 0 nichthelfer.de, 1 nichtkunst.tk, 1 +nichya.tk, 1 +nichyaforum.tk, 1 nicic.gov, 1 niciunde.ro, 1 nick-black.com, 1 @@ -85967,12 +86994,14 @@ nickhowell.co.uk, 0 nickkallis.com, 1 nicklock.ml, 1 nickloose.de, 1 +nickmandler.tk, 1 nickmchardy.com, 1 nickmiller.ie, 1 nickmorri.com, 0 nickmorris.name, 0 nicknames.tk, 1 nicknamez.tk, 1 +nickoticko.tk, 1 nickpavel.com, 1 nickplotnek.co.uk, 1 nickrickard.co.uk, 1 @@ -86093,6 +87122,7 @@ niga.tk, 1 nigdeescort.tk, 1 nigelvm.com, 1 nigeriaimagefoundation.org, 1 +nigeriaportal.tk, 1 nigger.racing, 1 nigglipads.com.br, 1 niggo.eu, 1 @@ -86103,6 +87133,8 @@ night2stay.fr, 1 night2stay.ru, 1 nightandthecityofbrokenpromises.tk, 1 nightblue.ml, 1 +nightblue.tk, 1 +nightbox.cf, 1 nightbura.biz, 1 nightcitynews.info, 1 nightclassifieds.com, 1 @@ -86119,6 +87151,7 @@ nightlive.tk, 1 nightmareabyss.top, 0 nightmarejoker2.com, 1 nightmoose.org, 1 +nightoutrecords.tk, 1 nightparty.tk, 1 nightpass.tk, 1 nightscapes.tk, 1 @@ -86127,17 +87160,20 @@ nightscout.host, 1 nightsi.de, 1 nightsnack.cf, 1 nightstand.io, 1 +nightstar-online.tk, 1 nightstory.tk, 1 nightvisionguys.com, 0 nightvisionradio.tk, 1 nightwinds.tk, 1 nightwishchile.tk, 1 nightwishperu.tk, 1 +nightwood.cf, 1 nigmapictures.tk, 1 nigt.cf, 1 nih.ao, 1 nihaarpstars.com, 1 nihad.dk, 1 +nihaoonline.tk, 1 niharikatimes.com, 1 nihilistan.tk, 1 nihilocomunidad.tk, 1 @@ -86168,15 +87204,19 @@ nikavandenbos.nl, 1 nikavenus.com, 1 nike-studio.com, 1 nikelunartw.net, 1 +nikesoccerbodotoutlet.ga, 1 nikest.cf, 1 +nikest.tk, 1 niket.site, 1 nikeyichinese.com, 1 nikhilnimiya.love, 1 +nikhilramakrishnan.tk, 1 nikimix.com, 0 nikitacartes.xyz, 0 nikitagukov.ru, 1 nikitenko.tk, 1 nikitin.photo, 1 +nikitina.ml, 1 nikkasystems.com, 1 nikkila.me, 1 nikkotaytay.tk, 1 @@ -86197,12 +87237,14 @@ nikonlibrary.co.uk, 1 nikonnps.co.uk, 1 nikonschool.co.uk, 1 nikosoikonomopoulos.tk, 1 +nikosverths.tk, 1 nikotiinipussit.com, 1 nikscloud.eu, 1 nikz.in, 1 nil.gs, 0 nil.mx, 1 niledevelopmentseg.com, 1 +nilefi.cf, 1 niles-simmons.de, 1 niles.xyz, 1 nilesil.gov, 1 @@ -86226,6 +87268,7 @@ nimble.com.br, 1 nimbo.com.au, 1 nimbo.net, 1 nimbus-link.co.uk, 1 +nimbus-net.tk, 1 nimbuslink.co.uk, 1 nimeia.tk, 1 nimelainsurance.com, 1 @@ -86239,6 +87282,7 @@ nimiqairdrop.com, 1 nimit.se, 1 nimnadasl.tk, 1 nimnordic.com, 1 +nimus.tk, 1 nin.to, 1 nina-laaf.de, 1 nina-woerz.tk, 1 @@ -86257,16 +87301,20 @@ ninavegas.net, 1 ninchat.com, 1 nine.land, 1 ninebennink.com, 0 +ninedaysmore.tk, 1 ninepints.co, 1 ninespec.com, 1 ninetailed.ninja, 1 ninetaillabs.com, 1 ninetaillabs.xyz, 1 nineteensixtyone.co.uk, 1 +ninetyseven.tk, 1 ninfora.com, 1 ningrui.me, 0 ningunlugarestalejos.com, 1 ningwei.net, 1 +niniko.tk, 1 +ninja-corner.tk, 1 ninjacomputing.com, 1 ninjahub.net, 1 ninjamagic.tk, 1 @@ -86318,6 +87366,7 @@ nirvaan.xyz, 1 nirvana-esport.fr, 1 nirvananirvana.tk, 1 nirvanashop.com, 1 +niscemi.tk, 1 nishikino-maki.com, 1 nishimebistro.cz, 1 nishisbma.com, 1 @@ -86342,6 +87391,7 @@ nitrohorse.com, 0 nitrokey.com, 1 nitromaster.tk, 1 nitropanel.com, 0 +nitropur.com, 1 nitropur.de, 1 nitrous-networks.com, 0 nitschinger.at, 1 @@ -86353,6 +87403,7 @@ nitttrbhopal.org, 1 niuco.com.br, 1 niunaimilk.cn, 1 niutennici.tk, 1 +nivarussia.ml, 1 nivel03.com, 1 nivoit.cf, 1 niwoo.es, 1 @@ -86361,10 +87412,12 @@ nix-sender.com, 1 nix-sender.ru, 0 nix.org.ua, 0 nix13.xyz, 1 +nixcore.gq, 1 nixcp.com, 1 nixie.fashion, 1 nixonlibrary.gov, 1 nixops.me, 1 +nixplus.tk, 1 nixrepair.nl, 1 nixsub.tk, 1 nixtest.net, 1 @@ -86465,11 +87518,13 @@ nnkkserver02.ddns.net, 1 nnlm.gov, 1 nnnovel.com, 1 no-andishan.ir, 1 +no-data.tk, 1 no-eye-deer.tk, 1 no-gods-no-masters.com, 1 no-ice.be, 1 no-ice.nl, 1 no-ip.cz, 1 +no-more-gray-hair.ga, 1 no-more-gray-hair.gq, 1 no-more-gray-hair.ml, 1 no-real.tk, 1 @@ -86491,6 +87546,7 @@ noahmodas.com.br, 1 noahsaso.com, 1 noahwitt.me, 1 noangel.tk, 1 +noart.tk, 1 noatec.eu, 1 noawildschut.com, 1 noawildschut.nl, 1 @@ -86542,6 +87598,7 @@ nocturnos.tk, 1 nocturnus.tk, 1 noctys.com, 1 nocyclopedia.tk, 1 +nodde.cf, 1 nodecdn.net, 1 nodecraft.com, 1 nodeedge.com, 1 @@ -86683,6 +87740,7 @@ nontonanimeid.one, 1 nontonfilem.ml, 1 nonuplebroken.com, 1 nonx.pro, 1 +nonxsistent.tk, 1 nony.no, 1 nonzero.io, 1 noob-box.net, 1 @@ -86742,6 +87800,7 @@ noradrenalina.com, 1 norala.tk, 1 noralku.net, 1 norazpublicservice.gov, 1 +norbert-wollheim-platz.tk, 1 norbertorabinovichblog.com, 0 norbit.de, 1 norcopa.gov, 1 @@ -86758,6 +87817,7 @@ nordhealth.com, 1 nordicbroker.fi, 1 nordicirc.com, 1 nordico.club, 1 +nordicportalen.tk, 1 nordicsemi.com, 1 nordicsolutionsgroup.com, 1 nordicsrit.tk, 1 @@ -86766,6 +87826,7 @@ nordlandverliebt.de, 1 nordlayer.com, 1 nordlichter-brv.de, 1 nordlocker.com, 1 +nordmoregatebilklubb.com, 1 nordpass.asia, 1 nordpass.com, 1 nordsec.com, 1 @@ -86793,7 +87854,9 @@ normaculta.com.br, 1 normahairstudio.it, 1 normalady.com, 1 normalil.gov, 1 +normalized.ga, 1 normalizuj.me, 1 +normalporter.tk, 1 normalsecurity.com, 1 norman-legal.com, 1 norman-preusser-gmbh.de, 1 @@ -86818,6 +87881,7 @@ norsewars.com, 1 norskespilleautomater.com, 1 norskpensjon.no, 1 nortecompartidoexperience.es, 1 +nortecultural.tk, 1 northafrican.tk, 1 northampton-vets.co.uk, 1 northatlantalaw.us, 1 @@ -86847,6 +87911,7 @@ northernflame.tk, 1 northerngate.net, 1 northernhamsterclub.com, 1 northernpowertrain.com, 1 +northernselfstorage.co.za, 1 northfayettepa.gov, 1 northfayettepapolice.gov, 1 northfieldmn.gov, 1 @@ -86856,6 +87921,7 @@ northhampton-nh-pd.gov, 1 northhudsonwi.gov, 1 northkenthypnotherapy.com, 1 northkoreainsider.tk, 1 +northliner.tk, 1 northlinkferries.com, 1 northlinkferries.net, 1 northmountliquor.ca, 1 @@ -86884,6 +87950,7 @@ northwestimaging.com, 1 northwoodoh.gov, 1 northwoodsfish.com, 1 northwoodstudios.org, 1 +northzone.ml, 1 norwalkct.gov, 1 norway.ml, 1 norwayinternetstuffs4u.tk, 1 @@ -86910,11 +87977,13 @@ nosite.co.za, 1 noskov.org, 1 nosleepforrobots.com, 1 noslite.nl, 1 +nosmoking.tk, 1 nosoxo.com, 0 nosproduitsdequalite.fr, 1 nossasenhoradodesterro.com.br, 1 nossasenhoradopranto.pt, 1 nossorepresentante.com.br, 1 +nostalgicinfinity.tk, 1 nostalgie.tk, 1 nostalgiktv.ml, 1 nostalgimidi.se, 1 @@ -86922,6 +87991,7 @@ nostalgische-attracties.nl, 1 nostaljicicekcilik.com, 1 nostoautomaatti.fi, 1 nostosh.eu.org, 1 +nostradansacornella.tk, 1 nostraforma.com, 0 nosuch.blog, 1 nosuch.site, 1 @@ -86931,6 +88001,7 @@ noswap.com, 1 nosyu.pe.kr, 0 not-a.link, 1 not-null.co.uk, 1 +not4me.ga, 1 not4me.tk, 1 nota-web.com, 1 nota.moe, 1 @@ -86990,6 +88061,7 @@ noticiasdetv.com, 1 noticiasdocambio.com.br, 1 noticiasymas.cl, 1 noticieropopular.tk, 1 +noticies.tk, 1 notienegoyete.ga, 1 notif-build-laposte.info, 1 notif-colissimo-laposte.info, 1 @@ -86999,6 +88071,7 @@ notif-lpfr-laposte.info, 1 notif-moncompte-laposte.info, 1 notific.at, 1 notificami.com, 1 +notifyed.com, 1 notilus.fr, 1 notime.tk, 1 notimundodbs.info, 1 @@ -87022,6 +88095,7 @@ notora.tech, 1 notoriousdev.com, 1 notos.co, 1 notre-planete.info, 0 +notrefuse.tk, 1 notrero13.com, 1 notresiteduvercors.tk, 1 notryden.com, 1 @@ -87066,6 +88140,7 @@ novantaphotonics.com, 1 novaratoday.it, 1 novarock.tk, 1 novasdecadamanha.com.br, 1 +novasprint.tk, 1 novatelecom.cl, 1 novavax.com, 0 novaway.ca, 1 @@ -87090,12 +88165,15 @@ novelvyretraite.fr, 1 novema.jp, 1 novenascatolicas.com.br, 1 novenopiso.tk, 1 +novezamky.tk, 1 novgorod24.tk, 1 +novgorodinfo.tk, 1 novi-marof.hr, 1 novi.com, 1 novias.co.jp, 1 novicecamp.com, 1 noviceman.tk, 1 +novichek-plus.ml, 1 novichok.ml, 1 novickoe.ml, 1 novilaw.com, 1 @@ -87106,6 +88184,7 @@ novlets.com, 1 novobi.com, 1 novobudowa.pl, 1 novodiegomaia.com.br, 1 +novogimn.tk, 1 novogradnje.si, 1 novogrudok.tk, 1 novojet.cl, 1 @@ -87122,8 +88201,13 @@ novosel.ga, 1 novoselie.ga, 1 novosibavia.ru, 0 novosti-novorossii.ml, 1 +novosti-novosibirsk.tk, 1 novosti-online.tk, 1 novosti-tv.tk, 1 +novostimira.gq, 1 +novostionline.tk, 1 +novostiz.tk, 1 +novostroyki.ml, 1 novotoznanie.com, 1 novparket.ru, 1 novsti.cf, 1 @@ -87143,6 +88227,7 @@ nowar72.info, 1 nowarning.cc, 1 nowbb.tk, 1 nowcomplete.com.br, 1 +nowebsite.tk, 1 nowecor.de, 1 noweigh.co.uk, 1 nowhairtime.com, 1 @@ -87171,6 +88256,7 @@ noyweb.tools, 1 nozaka-k.com, 1 nozel.cf, 1 nozel.ga, 1 +nozel.gq, 1 nozom.tk, 1 np-edv.at, 1 np.search.yahoo.com, 0 @@ -87240,7 +88326,6 @@ nsepapa.com, 1 nsfw-story.com, 1 nshepp-dct-development.azurewebsites.net, 0 nshipster.cn, 1 -nshipster.co.kr, 1 nshipster.com, 1 nshipster.es, 1 nsics.co.jp, 1 @@ -87268,6 +88353,7 @@ nspeaks.com, 0 nspireoutreach.org, 0 nspoh.nl, 1 nsradiology.net, 1 +nssfchile.tk, 1 nssquad.tk, 1 nst-maroc.com, 1 nstatic.xyz, 1 @@ -87330,7 +88416,10 @@ nuckollscountyne.gov, 1 nuclea.site, 1 nuclearcake.de, 1 nuclearcat.com, 1 +nuclearforum.tk, 1 nuclearhell.tk, 1 +nuclearnation.tk, 1 +nuclearsky.tk, 1 nucleios.com, 1 nucleomarketing.com.br, 1 nucleosynth.space, 1 @@ -87356,8 +88445,10 @@ nuevaya.com.ni, 1 nuexfitness.com, 1 nuffield.nl, 1 nugdev.co, 0 +nuggit.ga, 1 nugmanov.net, 1 nugratis.nl, 1 +nugush.tk, 1 nuhbeg.com, 1 nuhil.tk, 1 nuipogoda.ru, 1 @@ -87366,6 +88457,7 @@ nuits-franciliennes.fr, 1 nuke-masters.tk, 1 nukeiso.ml, 1 nukeportal.ml, 1 +nukeportal.tk, 1 nukeshop.tk, 1 nukleoti.de, 1 nukleovisual.com, 1 @@ -87376,12 +88468,15 @@ nullbit.tk, 1 nullbox.co, 1 nulldev.org, 1 nulle-part.org, 1 +nulledme.ga, 1 +nulleds.tk, 1 nullificatr.tk, 1 nullnix.gr, 1 nullonerror.org, 1 nullroute.com, 1 nullscripts.tk, 1 nullsechs.tk, 1 +nullshare.tk, 1 nulltime.net, 1 nullxsec.net, 1 nully.xyz, 1 @@ -87394,6 +88489,7 @@ numbercult.net, 1 numbermunchers.net, 1 numberonebc.com, 1 numberzero.org, 1 +numeezy.com, 1 numericall.gq, 1 numerik-games.ch, 0 numeritelefonici.it, 1 @@ -87401,6 +88497,7 @@ numerli.com, 1 numero1.ch, 0 numero1.tk, 1 numerobis.tk, 1 +numerouno.ml, 1 numinous-travel.com, 1 numismed-seniorcare.de, 1 numista.com, 1 @@ -87436,6 +88533,7 @@ nuranagi.rocks, 1 nureg.club, 1 nureg.net, 1 nureg.xyz, 1 +nuria-fergo.tk, 1 nuriaamat.com, 1 nuriacamaras.com, 1 nurlyn.com, 0 @@ -87484,6 +88582,7 @@ nutristories.gr, 1 nutrition.gov, 0 nutritiondynamixrd.com, 1 nutritionfitness.fr, 1 +nutritious.cf, 1 nutrizionista.roma.it, 1 nutsandboltsfoundation.org, 1 nutsforfruits.com.au, 1 @@ -87500,7 +88599,9 @@ nuvolosicuro.io, 1 nuvotheagency.com, 1 nux.jp, 1 nuxer.fr, 1 +nuzhenkredit.ga, 1 nuzhenkredit.gq, 1 +nuzhenkredit.ml, 1 nuzhenkredit.tk, 1 nv-art.ru, 1 nvcmaine.gov, 1 @@ -87615,6 +88716,7 @@ nyhaoyuan.net, 1 nyhemsgarden.se, 1 nyheter-sverige.ga, 1 nyiaarhus.dk, 1 +nyiarlumar.tk, 1 nyiooc.org, 1 nyirc.gov, 1 nyla.life, 0 @@ -87760,9 +88862,11 @@ obamalibrary.gov, 1 obamawhitehouse.gov, 1 obamed.com, 1 obarax.com, 1 +obatjantungrematik.tk, 1 obbr.tk, 1 obcevents.co.uk, 1 obcfl.com, 1 +obclub.tk, 1 obcom.tk, 1 obd2scanner.club, 1 obdadvisor.com, 1 @@ -87778,6 +88882,7 @@ obelisco.tk, 1 obelix05.duckdns.org, 1 oberam.de, 1 obereg.cf, 1 +obereg.ga, 1 obereg.ml, 1 oberg.co, 1 oberg.us, 1 @@ -88462,6 +89567,7 @@ olax.tk, 1 olbat.net, 1 olcayanar.com, 1 olcbrookhaven.org, 1 +old-computer-club.ml, 1 old-times.ga, 1 old-tomsk.tk, 1 old-wheelers.tk, 1 @@ -88492,6 +89598,7 @@ oldno07.com, 1 oldnorthbanter.com, 1 oldonyosafaris.com, 1 oldpc.com.ua, 1 +oldriver.tk, 1 oldroadswhippets.tk, 1 oldrun.is, 1 oldrup.dk, 1 @@ -88664,9 +89771,9 @@ omandatapark.com, 1 omangrid.com, 1 omanhr.cf, 1 omanmegadeals.com, 1 -omaosurveys.org, 0 omarans.com, 1 omarbaba.shop, 1 +omarhussien.tk, 1 omarov.tk, 1 omarpalos.com, 1 omarsuniagamusic.ga, 1 @@ -89154,7 +90261,7 @@ onpointinsights.us, 0 onpointplugins.com, 1 onpopup.ga, 1 onporn.fun, 1 -onrealt.ru, 0 +onrealt.ru, 1 onsemediagroup.ml, 1 onsenlaichelesdoigts.be, 1 onsetupdates.com, 1 @@ -89163,6 +90270,7 @@ onsite4u.de, 1 onsitedoc.com, 1 onsitemower.com, 1 onsitespeedometer.com, 1 +onslaughtstreetboarding.tk, 1 onspring.com, 1 onstat.tk, 1 onstud.com, 1 @@ -89205,6 +90313,7 @@ onysix.net, 1 onyx-groups.com, 1 onyxcts.com, 1 onyxgen.duckdns.org, 1 +onzelievevrouw-veldegem.tk, 1 onzerelaties.net, 1 oo.ps, 1 oo5197.co, 1 @@ -89324,7 +90433,6 @@ opendata.cz, 1 opendataincubator.eu, 1 opendecide.com, 1 opendolls.com, 1 -opendoorcounselingpa.com, 1 openevic.info, 1 openfir.st, 0 openfitapi-falke.azurewebsites.net, 1 @@ -89694,6 +90802,7 @@ orefice.roma.it, 1 oregon2020census.gov, 1 oregonenergysaver.com, 1 oregonmenshealth.com, 1 +oreka.one, 1 oreka.online, 1 orel-city.ml, 1 orel-sait.tk, 1 @@ -89769,6 +90878,7 @@ originahl-scripts.com, 1 original-christstollen.com, 1 original-christstollen.de, 1 originalabsinthe.com, 1 +originalblackfilms.ga, 1 originalescaro.tk, 1 originalmusicstream.tk, 1 originalniknihy.cz, 1 @@ -90003,7 +91113,6 @@ osteopathe-st-maur.com, 1 osteopathe-voisine.com, 1 osteopathie-guggenberger.de, 1 osteopatiaymasaje.com, 1 -osteriabellavista.ch, 1 osteriadelponte.tk, 1 osterkraenzchen.de, 1 ostermcbride.com, 1 @@ -90929,6 +92038,7 @@ paltopro.com, 1 palucamoveis.com.br, 1 pamaniqu.nl, 1 pamashield.com, 1 +pamc.tk, 1 pamelaemarionimoveis.com.br, 1 pamiers-citoyenne.fr, 1 pamlightdesign.com, 1 @@ -90946,6 +92056,7 @@ panamasportsfactory.com, 1 panamatravel.tk, 1 panamatrippin.com, 1 panamawebfactory.com, 1 +panangelium.tk, 1 panasca.is, 1 panascais.at, 1 panascais.ch, 1 @@ -90990,6 +92101,7 @@ pandascrow.io, 1 pandelys.tk, 1 pandemicflu.gov, 1 pandit.tech, 1 +pandithaya.tk, 1 pandjes.com, 1 pandkonijn.nl, 1 pando-market.com, 1 @@ -91109,7 +92221,6 @@ papendal.nl, 1 paper-republic.org, 1 paper.sc, 1 paper.wf, 1 -papergamer.co.uk, 1 paperhoney.by, 1 papermasters.com, 1 papermotion.fr, 1 @@ -91193,6 +92304,7 @@ paramarq.com, 1 paramascotas.vip, 1 paramusborough.gov, 1 paranoid.is, 1 +paranoidandroid.tk, 1 paranoidpengu.in, 1 paranoidpenguin.net, 1 paranormales.tk, 1 @@ -91242,6 +92354,7 @@ parentsintouch.co.uk, 1 parenttheirpassion.com, 1 paretoit.com, 1 paretorule.cf, 1 +parfumer.tk, 1 parfumi.tk, 1 parfumtester-100.ml, 1 parhelionaerospace.com, 1 @@ -91327,7 +92440,6 @@ parmatoday.it, 1 parmels.com.br, 1 parmoli.tk, 1 parnassys.net, 1 -parniplus.com, 1 parnizaziteksasko.cz, 1 parodesigns.com, 1 paroisses-theix-surzur.com, 1 @@ -91337,6 +92449,7 @@ parperfeito.pt, 1 parquettista.milano.it, 1 parquettista.roma.it, 1 parratennis.com.au, 1 +parrocchiadimeana.tk, 1 parrocchiamontevecchia.it, 1 parroquiadesanlesmes.tk, 1 parry.org, 1 @@ -91446,6 +92559,7 @@ paseodelariviera.com, 1 pashminacachemire.com, 1 pasito.se, 1 paslc.gov, 1 +pasnederland.tk, 1 pasnine.my.id, 1 pasnyburiat.pl, 1 pasportaservo.org, 1 @@ -91529,6 +92643,7 @@ pastebin.co.za, 1 pastebin.run, 1 pastebin.tw, 1 pasteblin.com, 1 +pasteht.ml, 1 pastelpixels.studio, 1 pasternok.org, 1 pasteros.io, 1 @@ -91541,6 +92656,7 @@ pastinfluences.com.au, 1 pastorbelgagroenendael.com.br, 1 pastorcanadense.com.br, 1 pastordocaucaso.com.br, 1 +pastorello.cf, 1 pastorello.gq, 1 pastori-kollegen.de, 1 pastormaremanoabruzes.com.br, 1 @@ -91598,6 +92714,7 @@ patikakristaly.hu, 1 patin.cf, 1 patineteselectricosbaratos.net, 1 patioboreal.ca, 1 +patioroof.cf, 1 patiosheders.ga, 1 patioshedest.ga, 1 patisserie918.herokuapp.com, 1 @@ -91652,6 +92769,7 @@ patrz.eu, 1 patsyforyou.ch, 0 patsytoforyou.ch, 0 pattanath.com, 1 +pattayafruitgarden.tk, 1 pattayawebservices.com, 1 patterson.agency, 1 pattoes.ga, 1 @@ -91660,7 +92778,6 @@ pattuka.com, 1 pattyboobs.net, 1 pattyliao.com, 1 patystation.com, 1 -pauct.com, 1 paudley.ca, 1 paudley.com, 1 paudley.org, 1 @@ -91673,6 +92790,7 @@ paul.reviews, 1 paulahot.tk, 1 paulandmadge.com, 1 paulanet.tk, 1 +paulasilvasvensson.eu, 1 paulbaily.com, 1 paulbdelaat.nl, 1 paulborza.com, 1 @@ -91744,6 +92862,7 @@ pavelfucik.com, 1 pavelfucik.cz, 1 pavelfucik.eu, 1 pavelich.com, 1 +pavelitus.tk, 1 paveljanda.com, 1 pavelrebrov.com, 1 pavelstriz.cz, 1 @@ -91778,7 +92897,6 @@ paxerahealth.com, 1 paxwinkel.nl, 1 pay-online.in, 1 pay.gov, 0 -pay.im, 1 pay.mg, 0 pay.sb, 1 pay.ubuntu.com, 1 @@ -91897,6 +93015,7 @@ pc94666.com, 1 pcast.gov, 1 pcbarchitect.com, 1 pcbfl.gov, 1 +pcbmarketing.gq, 1 pcbmodel.com, 1 pcbny.com, 1 pcbooks.in, 1 @@ -92015,7 +93134,9 @@ peaceexpoers.ga, 1 peaceexpoest.ga, 1 peacefulrock.com, 1 peaceispossible.cc, 1 +peacekeeper.tk, 1 peacepiperanch.com, 1 +peacetourco.cf, 1 peachbuildingproducts.com, 1 peachesandchampagne.com, 1 peacock.onl, 1 @@ -92148,6 +93269,7 @@ peewee-design.tk, 1 pefile.tk, 1 pefricea.com, 1 pegas-studio.net, 1 +pegasnet.tk, 1 pegrum.rocks, 1 peifi.de, 0 peinture-77.fr, 1 @@ -92226,6 +93348,8 @@ penguinprotocols.com, 1 penguinshome.tk, 1 penguinvillage.info, 1 pengumuman.id, 0 +penholder.ga, 1 +peni.tk, 1 peniarth.cymru, 1 peninsulaadvancedurology.com, 1 penispumpen.se, 1 @@ -92246,6 +93370,7 @@ penopoly.tk, 1 penpalezine.com, 1 penrite.pl, 1 penrithapartments.com.au, 1 +pens-money.ga, 1 pens-money.gq, 1 pens.com, 1 pensacolafl.gov, 1 @@ -92260,6 +93385,7 @@ pension-chevaux.com, 1 pension-veldzigt.nl, 1 pension.ga, 1 pensionecani.roma.it, 1 +pensioner-1000.tk, 1 pensionesdominicanas.com, 1 pensionstal.tk, 1 pensiontrackerers.ga, 1 @@ -92272,11 +93398,13 @@ pentacodes.com, 1 pentagon-area.tk, 1 pentagonix.com.br, 1 pentagram.me, 1 +pentamexicali.tk, 1 pentandra.com, 1 pentaqu.in, 1 pentaquin.com, 1 pentaquin.net, 1 pentatonik.tk, 1 +pentekdograma.com, 1 pentest.blog, 1 pentesterlab.com, 1 pentestit.com, 1 @@ -92291,6 +93419,9 @@ penuelaspr.gov, 1 penya.ga, 1 penyavictorhernani.tk, 1 penz.media, 1 +penza-on-line.tk, 1 +penza-today.tk, 1 +penzaonline.cf, 1 penzionvzahrade.cz, 1 people2hire.co.uk, 1 peopleandchange.nl, 1 @@ -92368,6 +93499,8 @@ perenne.ee, 1 peresypchanka.tk, 1 pereuda.com, 1 perevedi.org, 1 +perevedut.cf, 1 +perewall.tk, 1 perez-marrero.com, 1 perezdecastro.org, 1 perezplumbinginc.com, 1 @@ -92469,6 +93602,7 @@ perniciousgames.com, 0 pernod-ricard.io, 1 peroduaselangor.com, 1 perot.me, 1 +perpetual.ga, 1 perpetualemotion.com, 1 perpetuum.tk, 1 perrau.lt, 1 @@ -92537,6 +93671,7 @@ perthweekend.com.au, 1 perubusca.nl, 1 perugamerz.tk, 1 perugiatoday.it, 1 +perulinks.tk, 1 perun.wiki, 1 perunderforos.tk, 1 perunsoft.rs, 1 @@ -92583,6 +93718,7 @@ petabits.de, 1 petabundant.ga, 1 petal-ms.gov, 1 petalkr.com, 1 +petamazing.ga, 1 petaouchnok.ch, 1 petar.fyi, 1 petaxolotl.com, 1 @@ -92596,6 +93732,7 @@ petcareproject.com, 1 petcharte.ga, 1 petclassy.ga, 1 petclient.ga, 1 +petcollections.ga, 1 petcollector.ga, 1 petcolor.ga, 1 petcounty.ga, 1 @@ -92664,11 +93801,13 @@ petfolder.ga, 1 petgeo.ga, 1 petgrow.ga, 1 petgun.ga, 1 +pethandsome.ga, 1 pethard.ga, 1 petherwick.co.uk, 1 petherwick.com, 1 petherwicks.co.uk, 1 petherwicks.com, 1 +petimagine.ga, 1 petit-archer.com, 1 petitcyclone.fr, 1 petite-annonce.tk, 1 @@ -92686,6 +93825,7 @@ petless.ga, 1 petlife.od.ua, 1 petlife.vet, 1 petlindo.com, 1 +petlittle.ga, 1 petmall.bg, 1 petmatchmaker.org, 1 petmegoo.com, 1 @@ -92744,6 +93884,7 @@ petstreaming.ga, 1 petsulcatatortoise.com, 1 petsurreal.ga, 1 pettersatlher.com.br, 1 +pettopsecret.ga, 1 pettreasure.ga, 1 pettreats.com.br, 1 petunder.ga, 1 @@ -92821,6 +93962,7 @@ pgmtechnologies.com, 1 pgnetwork.net, 1 pgp.fail, 1 pgp.lol, 1 +pgp.network, 1 pgp.org.au, 1 pgpaintanddesign.com, 1 pgpmail.cc, 1 @@ -92929,6 +94071,7 @@ phil-phillies.com, 1 phil.red, 1 phil.tw, 1 philanima.com, 1 +philarmonic-abaza.tk, 1 phildevient.tk, 1 phildonaldson.com, 1 phileas-psychiatrie.be, 1 @@ -92955,6 +94098,7 @@ philippemunn.photo, 1 philipperoose.be, 0 philippheenen.de, 0 philippinedroneassociation.org, 1 +philippinenewsvanguard.tk, 1 philippkaindl.de, 1 philippkeschl.at, 1 philipslater.ga, 1 @@ -92963,6 +94107,7 @@ philipslater.ml, 1 philipsmanythougths.cf, 1 philipsmanythougths.ga, 1 philipsmanythougths.ml, 1 +philipssupportforum.com, 1 philipthomas.com, 1 philipzhan.com, 1 philipzhan.tk, 1 @@ -92979,6 +94124,7 @@ philo.shop, 1 philographie.com, 1 philomathiclife.com, 1 philosoftware.com.br, 1 +philosophers.tk, 1 philosopherswool.com, 1 philosophy-colleges.com, 1 philosophyguides.org, 1 @@ -93116,7 +94262,6 @@ phototravel.uk, 1 phototrio.com, 1 photoutils.com, 1 photowhimsybymegan.com, 1 -photowire.uk, 1 photune.net, 1 phoxden.net, 1 phoxworld.com, 1 @@ -93157,6 +94302,7 @@ phtalent.tk, 1 phuket-idc.com, 1 phuket-idc.de, 1 phuket-nash.cf, 1 +phuket-nash.ga, 1 phuket-rawai.school, 1 phuket-tour.ga, 1 phuketbeach.tk, 1 @@ -93206,6 +94352,7 @@ pi-dash.com, 1 pi-net.dedyn.io, 1 pi-supply.com, 1 pi1.io, 1 +pia-bardo.tk, 1 piajuly.net, 1 pialove.net, 1 pianetaottica.eu, 1 @@ -93250,6 +94397,7 @@ piccolinokids.gr, 1 piccolo-parties.co.uk, 1 picdefacer.com, 1 pichainlabs.com, 1 +pichlerei.at, 1 pick.aw, 1 pick150.hu, 1 picka.gift, 1 @@ -93562,6 +94710,7 @@ pionplex.de, 1 pipa-shop.nl, 1 pipabella.com, 1 pipelineengineeringsoftware.com, 1 +pipenav.gq, 1 pipenny.net, 1 piperswe.me, 1 pipestonecounty.gov, 1 @@ -93664,6 +94813,7 @@ piucellulare.it, 1 piuincontri.com, 1 piuplayer.com, 1 pius.com.br, 1 +pivbar.tk, 1 pivnica.cf, 1 pivnica.ga, 1 pivnica.tk, 1 @@ -93671,6 +94821,7 @@ pivniraj.com, 1 pivotalshift.co.uk, 1 pivotaltracker.com, 1 pivotanimation.org, 1 +pivotanimation.tk, 1 pivovarcunak.cz, 1 pivx2bitcoin.com, 1 pivxblockchain.com, 1 @@ -93769,6 +94920,7 @@ pjleisure.co.uk, 1 pjo.no, 1 pjotor.tk, 1 pjp.com.mt, 1 +pjshop.cf, 1 pjsk.cc, 1 pjuu.com, 0 pk.edu.ee, 1 @@ -93825,7 +94977,6 @@ plaintextpledge.net, 1 plaintextpledge.org, 1 plaintray.com, 1 plaisirdumouvement.com, 1 -plaisiretsens.com, 1 plaisirs-coquins.com, 1 plakakodlari.com, 1 plakbak.nl, 1 @@ -93849,6 +95000,7 @@ planet-work.com, 1 planet.ink, 1 planet.live, 1 planeta-deti.org, 1 +planeta-remontika.ga, 1 planetadeti.org, 1 planetadjs.com, 1 planetalife.com, 1 @@ -93909,6 +95061,7 @@ planitz.com, 1 planitz.net, 1 planitz.org, 1 planium.io, 1 +planled.ga, 1 planlos.net, 1 planmemberpartners.com, 1 planned-cities.com, 1 @@ -93929,6 +95082,7 @@ plantarportugal.org, 1 plantarum.com.br, 1 plantastique.ch, 0 plantdaddie.com, 1 +planteforum.no, 1 plantes.ch, 1 plantezcheznous.com, 1 planther.nl, 1 @@ -93944,6 +95098,7 @@ planview.com, 1 plaque-funeraire.fr, 1 plaque-immatriculation-auto.com, 1 plaqueomatic.fr, 1 +plaredo.tk, 1 plaros.ml, 1 plasapulsa.tk, 1 plasesolev.tk, 1 @@ -94067,6 +95222,7 @@ playocean.net, 1 playorigin.com, 1 playoverwatch.com, 1 playpirates.com, 1 +playpower.tk, 1 playreal.city, 1 playreal.com.tw, 1 playsnake.org, 1 @@ -94074,6 +95230,7 @@ playsprout.industries, 1 playstationtrophies.org, 1 playtictactoe.org, 1 playtoearn.net, 1 +playtop.tk, 1 playtopia.com, 1 playtopia.fr, 1 playtopia.nl, 1 @@ -94118,6 +95275,7 @@ pleindedemsvaart.tk, 1 pleine-conscience.ch, 0 plekker.be, 1 plenigo.com, 1 +plenkanaotrez.ml, 1 plentybetter.com, 1 plentybetter.org, 1 pleo.io, 1 @@ -94504,6 +95662,7 @@ poemwallers.ga, 1 poemwallest.ga, 1 poenhub.xyz, 1 poetasmenores.tk, 1 +poetenblog.tk, 1 poeticplanetimagery.com, 1 poetics.tk, 1 poetry.ge, 1 @@ -94517,6 +95676,7 @@ pogljad-brest.tk, 1 pogodavolgograd.tk, 1 pogodok.tk, 1 pogomate.com, 1 +pogoswine.com, 1 pogotowie-komputerowe.tk, 1 pogotowiekomputeroweolsztyn.pl, 1 pogrebisky.net, 1 @@ -94556,6 +95716,7 @@ poisk-books.ml, 1 poisk.kharkov.ua, 1 poiskdru.ga, 1 poiskkladov.tk, 1 +poiskkristinity.ml, 1 poiskrus.ml, 1 poisoncolombia.tk, 1 poisonget-rid-ofac.tk, 1 @@ -94585,10 +95746,12 @@ pokemonsvet.cz, 1 pokemontabletopadventures.com, 1 pokemori.jp, 1 pokepon.center, 1 +poker4all.tk, 1 pokerace.cf, 1 pokerace.tk, 1 pokeraddressers.ga, 1 pokeraddressest.ga, 1 +pokeram.ml, 1 pokerblog.tk, 1 pokeridioters.ga, 1 pokeridiotest.ga, 1 @@ -94631,6 +95794,7 @@ pokrowcecardo.pl, 1 pokupkionline.tk, 1 polaire.org, 1 polak-import.tk, 1 +polan.tk, 1 polanda.com, 1 polandb2b.directory, 1 polandtownship.gov, 1 @@ -94683,12 +95847,14 @@ polish-translations.com, 1 polish-translator.net, 1 polish-translators.net, 1 polish.directory, 1 +polishdating.cf, 1 polishfabrics.com, 1 polishforums.com, 0 polishhockey.tk, 1 polishmarriage.org, 1 polishmodels.net, 1 polishtranslation.com, 1 +polisipati.tk, 1 polismar.pt, 1 polisport.tk, 1 polisynazycie.com.pl, 1 @@ -94706,9 +95872,11 @@ politicaprivacidade.com, 1 politiciancompare.com, 1 politicnation.com, 1 politicobuzz.com, 1 +politicsandnews.cf, 1 politicsandnews.ga, 1 politicsandnews.ml, 1 politicsandnews.tk, 1 +politicsnews.ga, 1 politicsnews.ml, 1 politicsnews.tk, 1 politiegent.be, 1 @@ -94899,6 +96067,7 @@ popmagz.com, 1 popmundoforum.tk, 1 popokin.tk, 1 popotesetcocottes.fr, 1 +popova.tk, 1 popoway.cloud, 1 popoway.me, 1 popoway9.ml, 1 @@ -94911,6 +96080,7 @@ poppinspayroll.com, 1 poppsylvie.com, 1 poppylala.com, 1 poprostuakwarystyka.pl, 1 +poprumor.com, 1 poptattoo.tk, 1 poptavka.net, 1 popular-male-kitten-names.tk, 1 @@ -95242,6 +96412,7 @@ postmusicologia.tk, 1 postn.eu, 1 postnext.com, 1 postolia.cf, 1 +postoyanstvo.cf, 1 postpot.co.kr, 1 postsubmeta.net, 1 posttigo.com, 1 @@ -95380,6 +96551,7 @@ powerpadel.com, 1 powerpc.pt, 1 powerplanter.com, 1 powerplantmall.com, 1 +powerplatform.istanbul, 1 powerplay.com, 1 powerplayer.tk, 1 powerpointschool.com, 1 @@ -95517,16 +96689,19 @@ practixdevelopment.com, 1 practo.com, 1 practodev.com, 1 pracusalev.tk, 1 +pradeek.tk, 1 pradersystems.ch, 1 pradmin.ru, 1 prado.it, 1 pradohalcones.com, 1 praemoveo.net, 1 praeparation-keppner.de, 1 +praerien-racing.com, 1 praetzlich-hamburg.de, 1 pragatiparasguesthouse.co.in, 1 prageeth-niranjan.tk, 1 pragma-messenger.ch, 1 +pragma-solution.com, 1 pragmatist.nl, 1 pragrimsby.co.uk, 1 pragser-tal.net, 1 @@ -95588,6 +96763,9 @@ pravnisistem.rs, 1 pravo-brest-belarus.tk, 1 pravo911.tk, 1 pravokonsul.com.ua, 1 +pravoslavie.tk, 1 +pravoslavnayarus.tk, 1 +pravosudie.tk, 1 prawnikdlaanglii.co.uk, 1 praxino.de, 0 praxis-dingeldey.de, 1 @@ -95665,6 +96843,7 @@ predstavitelstvo-v-sude.tk, 1 preejaculation.ga, 1 prefabricadosdelcaribe.com, 1 prefabrik-ev.com, 1 +preference.ga, 1 preferredathlete.com, 1 preferredreverse.com, 1 prefix.eu, 1 @@ -95712,6 +96891,7 @@ premierleague.gq, 1 premiermortgageservices.com, 1 premierokchomebuyers.com, 1 premierpups.com, 1 +premierseeds.co.nz, 0 premiership-predictors.co.uk, 1 premiersimgl.com, 1 premioambiente.it, 1 @@ -95778,6 +96958,7 @@ preserverollinspass.org, 1 preserving.tk, 1 president.bg, 1 president.ee, 0 +presidentdirectory.ga, 1 presidentialbilliards.com, 1 presidentialinnovationfellows.gov, 1 presidentialserviceawards.gov, 1 @@ -95898,6 +97079,7 @@ pricevortex.com, 1 pride-enterprises.org, 1 pridecorpuschristi.com, 1 prideindomination.com, 1 +pridnestrovye.gq, 1 pridurok.tk, 1 prielwurmjaeger.de, 1 priestess.tk, 1 @@ -95961,6 +97143,7 @@ princelishan.com.tw, 1 princemathew.tk, 1 princemolak.ga, 1 princes-st.org.nz, 1 +princesparktouch.com, 1 princess-vip-escort.com, 1 princess.software, 1 princessbackpack.de, 1 @@ -96209,6 +97392,7 @@ procalc.be, 1 procarservices.com, 1 procarswoking.com, 1 procave.de, 1 +proceed.tk, 1 procens.us, 0 procert.ch, 0 procesadorafenix.com.mx, 1 @@ -96393,6 +97577,7 @@ programaticon.tk, 1 programer21.com, 1 programlama.tk, 1 programmaticmagic.com, 1 +programmatv.tk, 1 programme-launch28-code854-com.ml, 1 programme-neuf-toulouse.com, 1 programmervibe.com, 1 @@ -96450,6 +97635,7 @@ projectcares.tk, 1 projectcolonisation.tk, 1 projectemail.co, 1 projectempower.org, 1 +projectfreehosting.ga, 1 projectgazaabindo.com, 1 projecthelius.com, 1 projecthopeless.tk, 1 @@ -96677,6 +97863,7 @@ prostocash.com, 1 prostodengi.ml, 1 prostogame.ga, 1 prostohobby.ru, 1 +prostoivkusno.ml, 1 prostoporno.fun, 1 prostoporno.guru, 1 prostoporno.life, 1 @@ -96735,6 +97922,7 @@ protobetatest.com, 1 protocol.ai, 1 protocol.co.il, 1 protogenbrainbooster.tk, 1 +protok.tk, 1 proton.ch, 1 proton.me, 1 protonbg.bg, 1 @@ -96745,6 +97933,7 @@ protonvpn.com, 1 prototayl.gq, 1 prototype.bg, 1 prototypefund.de, 1 +prototyping-computer.ml, 1 protoxin.net, 0 protrainerbrasil.com.br, 1 protrolley.cf, 1 @@ -96765,6 +97954,7 @@ proverennie-kursi.ml, 1 proverennie-kursi.tk, 1 provereno-rabotaet.gq, 1 provereno-rabotaet.tk, 1 +proverochka.tk, 1 provide-your-image.de, 1 providence.org, 1 providencecmc.com, 1 @@ -96806,10 +97996,12 @@ proxybay.onl, 1 proxybay.red, 1 proxybay.uno, 1 proxyhub.eu.org, 1 +proxytool.cf, 1 proyectafengshui.com, 1 proyectoarq.cl, 1 proyectosinelec.com, 1 proyectostep.tk, 1 +prozac20mg.cf, 1 prozapchast24.ru, 1 prozorlivec.tk, 1 prpferrara.it, 1 @@ -96828,7 +98020,9 @@ pruchovi.tk, 1 pruebapg.cl, 1 pruma.com.br, 1 pruna.org, 1 +prushka.gq, 1 prushka.ml, 1 +prushka.tk, 1 pruve.it, 1 prvcy.one, 1 prvnirodinna.cz, 1 @@ -96910,6 +98104,7 @@ psicomagia.com.br, 1 psicometricas.mx, 1 psicorevista.com, 1 psihocentrala.com, 1 +psihologonline.tk, 1 psihology.gq, 1 psihology.tk, 1 psihoterapevt1.by, 1 @@ -96928,7 +98123,9 @@ psiplex.gq, 1 psiquiatriamaubecin.com, 1 psishop.tk, 1 psitarz.com, 1 +psixotesty.tk, 1 pskl.us, 1 +pskov-daily.tk, 1 pskov.gq, 1 pskov.ml, 1 pslf.gov, 1 @@ -96973,6 +98170,7 @@ psw-training.de, 1 psw.net, 1 pswatcher.com, 1 psy-web.fr, 1 +psyart.tk, 1 psycenter.tk, 1 psychcare.cz, 1 psychedelia.com, 1 @@ -96994,6 +98192,7 @@ psychoactive.com, 1 psychoco.net, 0 psychologbruksela.be, 1 psychologi.cf, 1 +psychologic.tk, 1 psychologie-hofner.at, 1 psychologischepraktijkphilips.nl, 1 psychologist.ga, 1 @@ -97010,6 +98209,7 @@ psychometrictests.uk, 1 psychometrischetests.de, 1 psychomotricien-la-rochelle.com, 1 psychonaut.tk, 1 +psychonews.tk, 1 psychopathtest.com, 1 psychopersonnalite.com, 1 psychosis.tk, 1 @@ -97019,6 +98219,7 @@ psychotechnique.ch, 1 psychotechnique.com, 1 psychotechnique.lu, 1 psychotechniquetest.fr, 1 +psychotel.tk, 1 psychoterapia-skuteczna.pl, 1 psychoterapia.best, 1 psychotest.gq, 1 @@ -97030,8 +98231,11 @@ psychotherapy-vienna.com, 1 psychotiq.tk, 1 psycolleges.com, 1 psygame.cf, 1 +psyh.tk, 1 +psyk-patienten.tk, 1 psykologtidningen.cf, 1 psykologtidningen.ga, 1 +psykologtidningen.gq, 1 psykometrisk.se, 1 psykosyntes.tk, 1 psylab.re, 0 @@ -97051,6 +98255,7 @@ ptab2pt.ga, 1 ptal.eu, 1 ptasiepodroze.eu, 1 ptbi.org.pl, 1 +ptboys.tk, 1 ptcbooks.gq, 1 ptcdogpark.com, 1 ptcit.com, 1 @@ -97066,6 +98271,7 @@ ptheophanidis.com, 1 pthsec.com, 1 ptit-trocoeur.fr, 1 ptk-svarka.ru, 0 +ptlibrary.ml, 1 ptltrade.com, 1 ptm.ro, 1 ptmarquees.ie, 1 @@ -97082,6 +98288,7 @@ ptt2.su, 1 pttimewithtim.com, 1 ptufdc.com, 1 ptupapers.tk, 1 +pturl.tk, 1 pty.gg, 1 puac.de, 1 pub-online.ro, 1 @@ -97129,17 +98336,23 @@ publixphere.net, 1 pubmed2xl.com, 1 pubquiz-online.nl, 1 pubreview.com.au, 1 +pubsavoy.tk, 1 puccakir.tk, 1 puckcreations.com, 1 +pucogid.ga, 1 puddin.ml, 1 +pudding.tk, 1 puddingtheatre.tk, 1 pudro.com, 1 puebladeeca.tk, 1 puebladesoto.tk, 1 pueblanmilksnake.com, 1 +pueblocantabro.tk, 1 pueblosamerica.com, 1 puenschge.pp.ua, 1 +puenteviejo.tk, 1 puer.eu.org, 1 +puertodramaturgia.tk, 1 puestifiestas.mx, 1 puestosdeferia.mx, 1 puettba.ch, 1 @@ -97174,6 +98387,7 @@ pulledporkheaven.com, 1 pulley.co.jp, 1 pullman.milano.it, 1 pullman.roma.it, 1 +pullnopunchesradio.tk, 1 pulower.tk, 1 pulpproject.org, 1 pulsadanvoucher.tk, 1 @@ -97201,10 +98415,12 @@ punchadragon.com, 1 punchlinetheatre.co.uk, 1 punchlinetheatre.com, 1 punchunique.com, 1 +punctually.gq, 1 puncturesafetorquay.com, 1 pundix.com, 1 puneindia.tk, 1 punematka.com, 1 +pungatv.ml, 1 punikonta.de, 1 punishment.institute, 1 punitsheth.com, 1 @@ -97212,7 +98428,10 @@ punjabdirectory.in, 1 punk-jazz.tk, 1 punkapoule.fr, 1 punkart.tk, 1 +punkas.tk, 1 +punkcolombia.tk, 1 punknews.org, 1 +punknmetal.tk, 1 punkt05.de, 1 puntacanalink.com, 1 puntacananetwork.com, 1 @@ -97231,6 +98450,7 @@ puntualseo.com, 1 puolustus.org, 1 pupboss.com, 1 pupok.cf, 1 +pupok.gq, 1 puppo.space, 1 puppy.actor, 1 puppykennel.tk, 1 @@ -97240,14 +98460,17 @@ puq.moe, 1 pur-institut.fr, 1 pura-ponia.cf, 1 pura-ponia.ga, 1 +pura-ponia.gq, 1 puragreement.tk, 1 puralifesciences.com, 1 puravayalchurch.tk, 1 puravida-estate.com, 1 purchasebestone.tk, 1 purchaserprotect.co.uk, 1 +purchasescooters.ga, 1 purchasetncrash.gov, 1 pure-gmbh.com, 1 +pure-paste.tk, 1 pure-power.tk, 1 pure2life.nl, 1 pureart.co.jp, 1 @@ -97282,12 +98505,14 @@ purple.tech, 1 purplebricks.co.uk, 1 purplebricks.com, 1 purplebricks.com.au, 1 +purplehotel.cf, 1 purplemath.com, 1 purplemet.com, 1 purplemoon.ch, 1 purplemoon.mobi, 1 purpleplains.net, 1 purplepr.bg, 1 +purples.cf, 1 purples.gq, 1 purplestar.ch, 1 purplestar.com, 1 @@ -97304,6 +98529,7 @@ purrfectmembersclub.com, 1 purrfectswingers.com, 1 purroy.tk, 1 purse-les.com, 1 +pursuable.cf, 1 pursuehappiness.tk, 1 pursuingoutdoors.com, 1 purtahan.tk, 1 @@ -97318,6 +98544,7 @@ puset.tk, 1 pusha.tk, 1 pushers.com.mx, 1 pushoflove.com, 1 +pushok.tk, 1 pushpanel.io, 1 pushphp.com, 1 pushthebutton.tk, 1 @@ -97325,16 +98552,23 @@ pusichatka.ddns.net, 1 pusra.ga, 1 pussplay.com, 1 pussy-hosting.berlin, 1 +pussycat.ml, 1 pussylickingnow.com, 1 pustak.tk, 1 +pustakvishwa.tk, 1 +put-spaseniya.ml, 1 put.moe, 1 put.re, 1 +putana.gq, 1 putanaru.gq, 1 +putani.gq, 1 putany.tk, 1 +putanypitera.ml, 1 putasdelporno.com, 1 putasenvalencia.es, 1 putatara.net, 1 puteulanus.xyz, 1 +puthenthope.tk, 1 putin.red, 1 putitforward.com, 1 putlire.ga, 1 @@ -97343,6 +98577,7 @@ putnam-fl.gov, 1 putnamcollision.com, 1 putnamil.gov, 1 putnamvalley.gov, 1 +putnik.tk, 1 putokaz.eu, 1 putre.io, 1 putrock.be, 1 @@ -97383,10 +98618,12 @@ pvideo.cz, 1 pvlrmnnk.com, 1 pvmotorco.com, 1 pvp.edu.ee, 1 +pvpagario.tk, 1 pvpcraft.ca, 1 pvpctutorials.de, 1 pvpheroes.gg, 1 pvpheroes.no, 1 +pvplist.ml, 1 pvplounge.com, 1 pvportal.me, 1 pvpserverler.pro, 1 @@ -97431,6 +98668,7 @@ py.pl, 1 py.search.yahoo.com, 0 pya.org.tr, 1 pybtex.org, 0 +pyca.tk, 1 pycckue.tk, 1 pychef.com, 1 pycrc.org, 1 @@ -97441,6 +98679,7 @@ pydrocsid.ml, 1 pygarage.com, 0 pygb.cl, 1 pygmyleafchameleon.com, 1 +pygos.space, 1 pyhello.world, 1 pyjiaoyi.cc, 1 pyjy.org, 0 @@ -97456,6 +98695,7 @@ pypckomp.ddns.net, 1 pypi.io, 1 pypi.org, 1 pypi.python.org, 1 +pyra-explorer.tk, 1 pyramid-it.co.uk, 1 pyramids-megacity.com, 1 pyramidsmalleg.com, 1 @@ -97485,6 +98725,7 @@ pyxyp.com, 1 pzpittsburgh.com, 1 pzsearch.nl, 1 pzu-masa.pl, 1 +q-and-a.tk, 1 q-inn.com, 1 q-inn.nl, 1 q-m.design, 1 @@ -97525,7 +98766,9 @@ qaconstrucciones.com, 1 qadigitals.com, 1 qadmium.com, 1 qadmium.tk, 1 +qadrishattari.tk, 1 qaina.net, 1 +qalab.tk, 1 qalm.net, 1 qanatnews.tk, 1 qandavision.com, 0 @@ -97536,12 +98779,15 @@ qaq.jp, 1 qaq.sh, 1 qarto.com, 1 qasa2ed.online, 1 +qask.ml, 1 qatarmegadeals.com, 1 +qatartimes.tk, 1 qatouch.com, 1 qaz.cloud, 1 qazcloud.com, 0 qazweek.kz, 0 qbasic.tk, 1 +qbasicsite.tk, 1 qbd.eu, 1 qbit.website, 1 qbookstaxpros.com, 1 @@ -97570,12 +98816,14 @@ qdabogados.com, 1 qdep.net, 1 qdon.space, 1 qdqlh.cn, 1 +qdrat.ml, 1 qdrcst.com, 1 qdsgroup.com, 1 qdstationary.co.uk, 1 qdstationery.co.uk, 1 qe-lab.at, 1 qed.ai, 1 +qeepintelligence.tk, 1 qei.org.au, 1 qelectrotech.org, 1 qeshmminer.com, 1 @@ -97588,6 +98836,7 @@ qfinds.io, 1 qga.com.au, 1 qgblog.org, 0 qgushi.com, 1 +qhost.cf, 1 qhse-professionals.nl, 1 qhzwz.com, 1 qianglie.com, 1 @@ -97602,6 +98851,7 @@ qifu.org.cn, 1 qigehl.com, 1 qihalu.com, 1 qihl.gg, 1 +qike.tk, 1 qikify.com, 1 qimingceming.com, 1 qin.moe, 1 @@ -97620,6 +98870,7 @@ qipllc.com, 1 qiqitv.info, 1 qirinus.com, 1 qis.fr, 1 +qiscience.tk, 1 qitano.com, 1 qitarabutrans.com, 1 qitzune.com, 1 @@ -97646,6 +98897,7 @@ qliving.com, 1 qlix.pl, 1 qlrace.com, 0 qm-marzahnnordwest.de, 1 +qmarket.tk, 1 qmdcoin.com, 1 qmee.com, 1 qmeriaux.fr, 1 @@ -97715,6 +98967,8 @@ qrpth.eu, 1 qruiser.com, 1 qrz.one, 1 qscloud.de, 1 +qseek.cf, 1 +qslstudio.tk, 1 qsoblog.gq, 1 qstivi.de, 1 qt.ax, 1 @@ -97750,6 +99004,8 @@ qu4rtz.moe, 1 quackquack.in, 1 quad9.com, 1 quad9.net, 1 +quadcityjuggalos.tk, 1 +quadomania.tk, 1 quadrantrd.com, 1 quadratimkreis.tk, 1 quadreon.com, 1 @@ -97765,6 +99021,7 @@ qualebroker.com, 1 qualiacomputers.com, 0 qualitation.co.uk, 1 qualite-ecole-et-formation.ch, 0 +qualith.tk, 1 quality-automation.de, 1 quality-life.gr, 1 qualitycarbonfiber.com, 1 @@ -97789,6 +99046,7 @@ qualitypropertycare.co.uk, 1 qualitytitlepaducah.com, 1 qualitytools.com, 1 qualitywaterproofingco.com, 1 +qualityworks.tk, 1 qualpay.com, 1 qualtrics.com, 1 qualyven.com, 1 @@ -97823,8 +99081,10 @@ quantumca.com.cn, 1 quantumcrypto.nl, 1 quantumfinance.com.au, 1 quantumfurball.net, 1 +quantumlink.tk, 1 quantumpair.net, 1 quantumweb.ml, 1 +quantweb.tk, 1 quanwuji.com, 1 quarantine-system.com, 0 quareal.ru, 1 @@ -97837,7 +99097,6 @@ quarterhorses.es, 1 quarticon.com, 1 quartix.com, 1 quartogame.tk, 1 -quartsandlugnuts.com, 1 quartz.im, 1 quartzclinical.com, 1 quarus.net, 1 @@ -97846,7 +99105,9 @@ quasetio.ml, 1 quasiproxy.com, 1 quasseldroid.info, 1 quassowski.de, 1 +quatermass.tk, 1 quaternion.tk, 1 +quattro.tk, 1 quatuor-courtage.fr, 1 quaxio.com, 1 quay.net, 1 @@ -97876,6 +99137,7 @@ queensbotanical.org, 1 queensfactory.it, 1 queenshaflo.com, 1 queensrdapartments.com.au, 1 +queenstyles.tk, 1 queenworld.tk, 1 queer-augsburg.de, 1 queer.farm, 1 @@ -97928,6 +99190,8 @@ quest3.org, 1 quest3.tv, 1 quest3.uk, 1 quest7.jp, 1 +questbars.cf, 1 +questbars.ga, 1 questbars.gq, 1 quester.life, 1 questforgaming.com, 1 @@ -97936,14 +99200,17 @@ questiii.com, 1 question.cf, 1 question.com, 1 questionable.host, 1 +questionandanswer.ml, 1 questionyu.com, 1 questofaidance.tk, 1 questoj.cn, 1 questsocial.it, 1 questthree.com, 1 quetiapine.life, 1 +quetico.tk, 1 queup.net, 1 quevisiongrafica.com, 1 +quezoncity.ml, 1 quhyu.xyz, 1 quible.tk, 1 quic-hosting.de, 1 @@ -97959,6 +99226,7 @@ quickassortments.com, 1 quickboysvrouwen2.nl, 1 quickcashcarremovals.com.au, 1 quickcel.tk, 1 +quickerticker.tk, 1 quickformspro.com, 1 quickinfosystem.com, 1 quickjobsfinder.com, 1 @@ -97969,6 +99237,7 @@ quickq.nu, 1 quickquote.pt, 1 quickrate.de, 1 quicksell.store, 1 +quickshops.ga, 1 quicksupplies.us, 1 quicksupply.com, 1 quicktapstudios.com, 1 @@ -97986,10 +99255,15 @@ quieroserbombero.org, 1 quieroserdoula.com, 1 quieroserdoula.es, 1 quieroserdoula.org, 1 +quierosermercedario.tk, 1 +quierosersanta.tk, 1 +quiescent.gq, 1 +quiet-downloads.tk, 1 quiet-waters.org, 1 quietapple.com, 1 quietapple.org, 1 quietlife.tk, 1 +quietplace.tk, 1 quietstudyactivities.tk, 1 quietus.gq, 1 quik.legal, 1 @@ -98014,6 +99288,8 @@ quinoa24.com, 1 quinpro.nl, 1 quintacbls.cl, 1 quintadesanamaro.com, 1 +quintanadelmonte.tk, 1 +quintanilla.tk, 1 quintenbraakman.com, 1 quintenbraakman.nl, 1 quintessa.org, 1 @@ -98032,6 +99308,7 @@ quiqurl.com, 1 quiqurls.com, 1 quire.io, 1 quirkytravelguy.com, 1 +quisildenafil.gq, 1 quitri.tk, 1 quiwy.ninja, 1 quixxisecurity.com, 1 @@ -98039,6 +99316,7 @@ quiz.biz, 1 quiz4math.gr, 1 quizandmoney.com, 1 quizapps.se, 1 +quizhub.ml, 1 quizinn.live, 1 quizl.io, 0 quizlets.tk, 1 @@ -98048,6 +99326,7 @@ quizwhip.co.uk, 1 quizz.biz, 1 quizzard.ga, 1 quizzard.tk, 1 +quizzen.tk, 1 quizzhit.com, 1 qul.link, 1 qulix.by, 1 @@ -98063,8 +99342,10 @@ quoininc.com, 1 quokka.codes, 1 quora.com, 1 quorrax.com, 1 +quotable.ga, 1 quotaverified.com, 1 quoteidiot.com, 1 +quoteoftheday300.ga, 1 quotesnsayings.net, 1 quotesofgta.tk, 1 quotev.com, 1 @@ -98076,6 +99357,8 @@ quprop.com, 1 quran-archive.org, 1 qurani.tk, 1 quranliveonline.com, 1 +quranpdf.cf, 1 +quranvoice.tk, 1 qureshicreatives.com, 1 qurium.org, 1 qurplus.nl, 1 @@ -98087,6 +99370,7 @@ qv-eherkenning.nl, 1 qvady.com, 0 qvg.company, 1 qvggroup.com, 1 +qvision.ml, 1 qvq.cloud, 1 qvq.one, 1 qw-dev.net, 1 @@ -98117,6 +99401,7 @@ qxq.moe, 0 qxzg.org, 1 qxzg.xyz, 1 qxzgssr.xyz, 1 +qy.is, 1 qybot.cn, 1 qzhou.ddns.net, 1 qzin.jp, 1 @@ -98128,6 +99413,7 @@ r-gmp.com, 1 r-ix.de, 1 r-rwebdesign.com, 1 r-t-b.fr, 1 +r-t-n.tk, 1 r.nf, 1 r.sb, 1 r00tsolutions.ca, 1 @@ -98168,6 +99454,7 @@ r9728.co, 1 ra-joergensen.de, 1 ra-jurochnik.de, 0 ra-schaal.de, 1 +ra-studio.ml, 1 ra.vc, 1 ra3y.xyz, 1 raabk.com, 1 @@ -98179,6 +99466,7 @@ raamattuopisto.fi, 1 raar.tk, 1 raaynk.com, 1 rabalefood.com, 1 +rabatcity.tk, 1 rabatt24.net, 1 rabatt24.org, 1 rabattkoll.se, 1 @@ -98194,8 +99482,14 @@ rabbitsstore.com, 1 rabby.tk, 1 rabenkralle.tk, 1 raberget.org, 1 +rabinson2005.tk, 1 +rabota-online.tk, 1 rabota-x.ru, 1 +rabotabiz.tk, 1 +rabotaemdoma.tk, 1 rabotanet.tk, 1 +rabotaprofily.tk, 1 +rabotayte.tk, 1 rabotenkadot.tk, 1 rabynska.eu, 1 racamera.com, 1 @@ -98209,6 +99503,7 @@ racedrop.tk, 1 racemanager.io, 1 racesimscoring.com, 1 racetraq.net, 1 +rachaeltaylor.tk, 1 rachel-kim.com, 1 rachelchen.me, 1 racheldiensthuette.de, 1 @@ -98219,6 +99514,7 @@ rachelward.co.uk, 1 rachnacollege.tk, 1 racinecounty.gov, 1 racing-planet.cz, 1 +racingfanclub.tk, 1 racingteameelde.tk, 1 racius.com, 1 rackblue.com, 1 @@ -98258,6 +99554,7 @@ radekmazar.eu, 1 rader.ninja, 1 radeticlaw.com, 1 radgi.com, 1 +radharanikijay.tk, 1 radiadores.tk, 1 radiadoresalternativos.cl, 1 radialplus.tk, 1 @@ -98266,8 +99563,10 @@ radiantenergy.tk, 1 radiantwonder.com, 1 radiation-oncologist.gr, 1 radiationserviceswa.com.au, 1 +radiationtherapy.tk, 1 radiatorendiscounter.nl, 1 radicaldream.tk, 1 +radicalfuture.tk, 1 radicalhapa.tk, 1 radicallycanadian.com, 1 radicaloptimism.org, 1 @@ -98275,6 +99574,8 @@ radicalsub.com.br, 1 radicalwebdesign.co.uk, 1 radio-amezi.tk, 1 radio-angelos.tk, 1 +radio-az.tk, 1 +radio-bandit.ml, 1 radio-beer.tk, 1 radio-bladel.tk, 1 radio-brest.tk, 1 @@ -98282,14 +99583,18 @@ radio-club.ml, 1 radio-delmare.tk, 1 radio-fly.tk, 1 radio-luikie.tk, 1 +radio-mix.ml, 1 radio-mouse.tk, 1 radio-news.tk, 1 radio-of-magic.com, 1 +radio-one.ml, 1 +radio-online.tk, 1 radio-pulsar.com, 1 radio-pulsar.eu, 1 radio-utopie.de, 1 radio-valois-multien.fr, 1 radio1.ie, 1 +radio404.tk, 1 radio4friends.tk, 1 radio56.tk, 1 radio99.tk, 1 @@ -98308,6 +99613,7 @@ radiobandung.tk, 1 radioborges.tk, 1 radiobucarica.cf, 1 radiobunker.ru, 1 +radiocappissima.tk, 1 radiocartel.tk, 1 radiocc.ddns.net, 1 radiocentrafrique.cf, 1 @@ -98319,15 +99625,20 @@ radiocommande-industrielle.fr, 1 radiocomsaocarlos.com.br, 1 radioconciencia.tk, 1 radiocrash.tk, 1 +radiocrazy.ml, 1 radiocristianauniversal.tk, 1 +radioculture.tk, 1 radiocusco.tk, 1 radiodance.tk, 1 radiodarkwolf.tk, 1 +radiodeluxe.ml, 1 radiodetali-gold.ru, 1 radiodeutsch.com, 1 radiodevrijheid.tk, 1 radiodiagonal.tk, 1 +radiodoblen.tk, 1 radioduepuntozero.it, 1 +radiodxguatemala.tk, 1 radioelectronic.tk, 1 radioenam.tk, 1 radioenergia.tk, 1 @@ -98340,16 +99651,21 @@ radiogaga.ga, 1 radiogalena.tk, 1 radiogear.ru, 1 radiogetsemani.tk, 1 +radiogomezone.tk, 1 +radioharrastus.tk, 1 radioheikrekel.tk, 1 radiohlam.cf, 1 +radiohlam.ga, 1 radiohouse.tk, 1 radiohub.mx, 1 radiohub.ru, 1 radioibiapina.tk, 1 radioilusiones.tk, 1 +radiojackienorth.tk, 1 radiojeneverstoker.tk, 1 radioknop.nl, 1 radiokontakt.tk, 1 +radiokukesi.tk, 1 radiolanguages.tk, 1 radiolaparranda.tk, 1 radiolatinafm.tk, 1 @@ -98358,6 +99674,7 @@ radiolibertad.tk, 1 radioliberty.ga, 1 radiolla.com, 1 radiom.fr, 1 +radiomacuto.gq, 1 radiomagicafm.tk, 1 radiomakarena.tk, 1 radiomanifiesto.tk, 1 @@ -98366,24 +99683,32 @@ radiomc.tk, 1 radiomedia.tk, 1 radiomercure.net, 1 radiometal.tk, 1 +radiometeor.com, 1 +radiomikelerentxun.tk, 1 radiomixer.net, 1 radiomodem.dk, 1 radiomontebianco.it, 1 +radiomoodmix.tk, 1 radionalita.tk, 1 +radionetcolombia.tk, 1 radionojavan.ir, 1 radionoticias.tk, 1 +radionrg.tk, 1 radiooffice.tk, 1 radioparquesur.tk, 1 +radioperfect.tk, 1 radiopicaflor.tk, 1 radiopleer.net, 1 radiopolarniki.spb.ru, 1 radiopranfm.cf, 1 radioprimerodemayo.tk, 1 +radiopush.tk, 1 radior9.it, 1 radioradicchio.it, 1 radioranking.de, 1 radiorecord.ml, 1 radioregional.pt, 1 +radioremix80.tk, 1 radioricardo.tk, 1 radios-associatives.tk, 1 radiosanducito.tk, 1 @@ -98395,14 +99720,19 @@ radiosilver.tk, 1 radiosimba.ug, 1 radiosity.club, 1 radiosterrekijker.tk, 1 +radiosuperplus.tk, 1 radioszczecin.pl, 1 +radiotataouine.tk, 1 radiotehnika.tk, 1 radiotelephoni.tk, 1 radiotexas.tk, 1 radiotunes.tk, 1 radiotuning.tk, 1 radiotv.tk, 1 +radioumbrella.ga, 1 radiouniversofm.tk, 1 +radiounofm.tk, 1 +radiounost.tk, 1 radioventura.tk, 1 radiovera.ru, 1 radiovertical.tk, 1 @@ -98423,9 +99753,11 @@ radixsalon.tk, 1 radixweb.com, 1 radlina.com, 1 radnas.com, 1 +radnickapartija.tk, 1 radnicki-nis.tk, 1 radnoc.com, 1 radoman.ga, 1 +radon.tk, 1 radopsec.com, 1 radopsec.net, 1 radopsec.org, 1 @@ -98433,6 +99765,8 @@ radost-crikvenica.hr, 1 radost.digital, 1 radreisetraumtreibstoff.de, 1 radstake.de, 1 +raduga-tv.tk, 1 +raduga4.ml, 1 radverkehr-kelsterbach.de, 1 radwebhosting.com, 1 radyabkhodro.net, 1 @@ -98449,11 +99783,13 @@ raf.org, 1 rafaelangelfg.tk, 1 rafaelortiz.es, 1 rafaelsobis.tk, 1 +rafaeltuber.cf, 1 rafaprialv.com, 1 rafaroca.net, 1 rafas.com.tr, 1 rafclan.tk, 1 raffaellaosti.com, 1 +rafo.tk, 1 rafsis.com, 0 raft.pub, 1 rafting-japan.com, 1 @@ -98472,8 +99808,11 @@ ragnaroktop.com.br, 1 ragstores.com, 1 ragusina.hr, 1 rahasyavedicastrology.com, 1 +rahayi.tk, 1 +raheel.cf, 1 raheel.tk, 1 rahenytennis.tk, 1 +rahilworld.tk, 1 rahimareports.ml, 1 rahmans.tk, 1 rahul.moe, 1 @@ -98498,6 +99837,7 @@ rail360.nl, 1 railbird.nl, 1 railbus.fan, 1 railcarrxqa.com, 1 +railclub.tk, 1 railduction.eu, 1 railfans.ca, 1 railgun.ac, 1 @@ -98526,6 +99866,7 @@ rainbow-christian.tk, 1 rainbow-web.com, 1 rainbowbay.org, 1 rainbowbrains.com, 1 +rainbowcomputer.tk, 1 rainbowflowers.co.uk, 0 rainbowinflatables.co.uk, 1 rainbowloompattern.com, 1 @@ -98548,6 +99889,7 @@ rainmanzone.com, 1 rainnetwork.tk, 1 rainpaper.com, 1 rainstormsinjuly.co, 1 +raintreatment.ga, 1 rainturtle.com, 1 rainuk.com, 1 rainvape.com, 1 @@ -98589,6 +99931,7 @@ rakibzashup.tk, 1 raklouisville.com, 1 rakom.tk, 1 rakovec.hr, 1 +raksha-bandhanwish.ga, 1 rakshitrekhi.tk, 1 raku.bzh, 1 raku.land, 1 @@ -98610,6 +99953,7 @@ rallyedu.com, 1 rallyfotosaswin.tk, 1 rallypodium.be, 1 rallyservice.pl, 1 +rallytrophy.tk, 1 ralphbisschops.com, 1 raltha.com, 1 ralvke.rocks, 1 @@ -98627,6 +99971,9 @@ ramel.tk, 1 ramen-dealer.de, 1 ramenramenramen.net, 1 rametrix.com, 1 +ramiabusalah.tk, 1 +ramieres.cf, 1 +ramirito.tk, 1 ramitan.com, 1 ramkot.tk, 1 ramle.be, 1 @@ -98655,6 +100002,7 @@ ramsor-gaming.de, 1 ramt.tk, 1 ramtechmodular.com, 1 ramydent.no, 1 +ramynetwork.tk, 1 ran-drunken.tk, 1 ran-sama.ddns.net, 1 rana.realestate, 1 @@ -98677,13 +100025,17 @@ random-samplings.org, 1 random-stat.work, 1 random.org, 1 randomadversary.com, 1 +randomarticle.ml, 1 randombit.eu, 0 +randombooks.gq, 1 +randombrainwave.cf, 1 randombrainwave.ga, 1 randombrainwave.gq, 1 randombrainwave.ml, 1 randomcode.org, 1 randomdomain.io, 1 randomforum.tk, 1 +randomkindness.tk, 1 randomkoalafacts.com, 1 randompasswordgenerator.fun, 1 randomquotesapp.com, 1 @@ -98691,19 +100043,25 @@ randomsearching.ml, 1 randomserver.pw, 1 randomserver.xyz, 1 randomsnapshots.tk, 1 +randomstuffproductions.tk, 1 +randomtest.cf, 1 +randomthings.cf, 1 randomweb.tk, 1 randorn.com, 1 randstalker.ovh, 1 randy.su, 1 randyandpixel.com, 1 randymajors.org, 1 +randyrhoads.tk, 1 randyselzer.com, 1 +ranfics.tk, 1 ranfurlychambers.co.nz, 1 rang-mediengestaltung.de, 1 rangde.org, 1 range.co, 1 rangercollege.edu, 1 rangerfiles.tk, 1 +rangersloyalsite.tk, 1 rangersofbelgium.be, 1 rangeweb.ga, 1 rangsmo.se, 1 @@ -98716,6 +100074,7 @@ ranjeetmehta.tk, 1 rank-net.de, 1 rankeco.com, 1 ranker.work, 1 +rankia.ga, 1 ranking-deli.jp, 1 ranking-mensesthe.jp, 1 ranking10hits.tk, 1 @@ -98725,6 +100084,7 @@ rankingubezpieczeniowy.pl, 1 rankingubezpieczennazycie.pl, 1 rankpower.com, 1 ranksite.cf, 1 +ranksite.ga, 1 ranksite.gq, 1 ranksite.ml, 1 ranksite.tk, 1 @@ -98742,6 +100102,7 @@ ranyeh.co, 1 ranyeh.com, 1 ranzbak.nl, 1 raochana.com, 1 +raoliveoil.ga, 1 raomed.com.ar, 1 raovatsaigon.tk, 1 rap4ever.org, 1 @@ -98786,20 +100147,27 @@ rar.moe, 1 rarbgmirror.com, 1 rarbgproxy.com, 1 rarece.cf, 1 +rarefish.tk, 1 raregems.io, 1 rarename.tk, 1 rarlab.com, 1 raryosu.info, 1 rasadnikcvecaperic.rs, 0 rasagiline.com, 1 +rasberry.cf, 1 rascals-castles.co.uk, 1 rascalscastles.co.uk, 1 rascript.tk, 1 +rascvet.tk, 1 rase.rocks, 1 +raserbajs.tk, 1 rashbogota.tk, 1 +rasheed-nuss.tk, 1 rashmipandit.com, 1 rashodkin.tk, 1 raskruti.ga, 1 +raskruti.ml, 1 +raskrutka.cf, 1 rasmushaslund.com, 1 rasp-consulting.de, 1 raspberryultradrops.com, 1 @@ -98811,6 +100179,7 @@ rasset.ie, 1 rassro.sk, 1 rastabooks.ga, 1 rasteniem.ru, 1 +rastko-jevtovic.tk, 1 rasty.cz, 1 rat.pw, 1 rataassociates.com, 1 @@ -98821,6 +100190,7 @@ ratcliff.io, 1 ratd.net, 1 rate.is, 1 ratebridge.com, 1 +rateddomain.ml, 1 ratelimited.me, 1 ratelsec.com, 1 ratemyfishtank.com, 1 @@ -98833,6 +100203,7 @@ rathmann-couture.de, 1 rathorian.fr, 1 ratingscoop.com, 1 ratinq.co, 1 +ratiocinat.ga, 1 rationalcreation.com, 1 rationalism.com, 1 rationalops.com, 1 @@ -98844,11 +100215,13 @@ rattenkot.io, 1 ratujemyzwierzaki.net, 1 ratujmydzikiekoty.org, 1 ratujmydzikiekoty.pl, 1 +ratusha.ml, 1 raulmalea.ro, 1 raulrivero.es, 1 raulval.com, 1 rauros.net, 1 rauschenbach.de, 1 +rautarutto.tk, 1 rava.tk, 1 ravada-vdi.com, 1 ravagers.tk, 1 @@ -98878,8 +100251,10 @@ ravesteijn.nl, 1 ravhaaglanden.org, 1 ravihotel.com, 0 ravijuhend.ee, 1 +ravik.tk, 1 ravimiamet.ee, 1 ravinala-airports.aero, 1 +ravindran.me, 1 raviparekh.co.uk, 1 ravis.org, 1 ravkr.duckdns.org, 1 @@ -98931,10 +100306,13 @@ raynos.co.jp, 1 rayonnage-stockage.fr, 1 raysbarreto.tk, 1 raysei.com, 1 +raysmtp.ga, 1 +raysolutions.tk, 1 raystark.com, 1 raytonne.cn, 1 raytonne.com, 1 raywardapparel.com, 1 +raywisdom.tk, 1 rayworks.de, 1 razajewellers.com, 1 razajewellers.pk, 1 @@ -98947,6 +100325,8 @@ razborpoletov.tk, 1 razborpoletovsite.cf, 1 razborpoletovsite.ga, 1 razborpoletovsite.gq, 1 +razborpoletovsite.tk, 1 +razdolnoe.tk, 1 razeencheng.com, 1 razgon.tk, 1 raziculacrimi.ro, 1 @@ -99003,6 +100383,7 @@ rccsc.org, 1 rcd.cz, 0 rcdeescolasantcugat.com, 1 rcdocuments.com, 1 +rcdrone.tk, 1 rcfl.gov, 1 rcforex.com, 1 rcgoncalves.pt, 1 @@ -99032,6 +100413,7 @@ rctalk.com, 1 rctiads.com, 1 rctrk.net, 1 rctruck.nl, 0 +rctx.tk, 1 rcxzsc.com, 1 rd0xb.com, 1 rdactive.de, 1 @@ -99039,6 +100421,7 @@ rdactive.net, 1 rdcdesign.com, 1 rddjapan.info, 1 rded.nl, 1 +rdesigner.tk, 1 rdfencingandgates.co.uk, 1 rdfmapped.com, 1 rdforum.org, 1 @@ -99109,6 +100492,7 @@ read.family, 1 readabilitychecker.com, 1 readable.pw, 1 readapt-nutrition.com, 1 +readcomics.gq, 1 readersfavorite.com, 1 reades.co.uk, 1 reades.uk, 1 @@ -99119,9 +100503,10 @@ readingea.com, 1 readingrats.de, 1 readlater.de, 1 readless.cf, 1 +readmynews.cf, 1 readnow.in, 1 readouble.com, 0 -readtome.co.in, 1 +readpages.gq, 1 readup.tk, 1 ready2learn.eu, 1 ready4bf.tk, 1 @@ -99144,6 +100529,7 @@ readytongue.com, 0 readywithresourcestn.gov, 1 reaff.com, 1 reaganlibrary.gov, 1 +reakcjonista.tk, 1 reaksi.id, 1 real-compare.com, 0 real-digital.co.uk, 1 @@ -99156,6 +100542,7 @@ real-srebrenica-genocide.ga, 1 real-srebrenica-genocide.gq, 1 real-srebrenica-genocide.ml, 1 real-thailand.tk, 1 +real-work.tk, 1 real360show.com, 1 realacademy.net, 1 realact-sawater.com, 1 @@ -99218,9 +100605,11 @@ realitykings.com, 1 realityrecoverycollective.tk, 1 realitytoday.cf, 1 realives.com, 1 +realkeywords.ga, 1 reallifeforums.com, 1 reallinux.tk, 1 reallivingcc.com, 1 +reallovetab.ga, 1 really-simple-ssl.com, 1 reallyangryaboutchipshops.com, 1 reallybadidea.tk, 1 @@ -99270,6 +100659,8 @@ reanimated.eu, 1 reanimed.com.ua, 1 reank-mnx.site, 1 reapandsowmarketing.com, 1 +rearmatch.cf, 1 +rearmatch.ga, 1 reath.xyz, 1 reavaninc.com, 1 reaven.nl, 1 @@ -99357,9 +100748,11 @@ recoa.tk, 1 recoilbox.com, 1 recolic.cc, 1 recolic.net, 1 +recolor.ml, 1 recomendador.cl, 1 recommend.pro, 1 recommended.reviews, 1 +recommends.ml, 1 recompiled.org, 0 recon-networks.com, 1 reconocimientoincan.org.mx, 1 @@ -99368,6 +100761,7 @@ recordati.com.tr, 1 recordmeeting.jp, 1 recordmeeting.net, 1 recordsmanagement.gov, 1 +recordstudio.tk, 1 recouvrement-jmconseil.com, 1 recoveringfromfaith.com, 1 recoveringircaddicts.org, 1 @@ -99385,6 +100779,7 @@ recruitmade.jp, 1 recruitnow.nl, 1 recruitsecuritytraining.co.uk, 1 recruitsecuritytraining.com, 1 +recruitskill.cf, 1 recruitskill.ga, 1 recruitskill.gq, 1 rectale.co, 1 @@ -99404,6 +100799,7 @@ recursosilimitados.tk, 1 recursosimbiopos.com, 1 recursosmi.com.br, 1 recursosrev.tk, 1 +recycle.cf, 1 recyclebin.email, 1 recycledinorsett.co.uk, 1 recycledinorsett.com, 1 @@ -99433,9 +100829,11 @@ redaitpro.com, 1 redarx.com, 1 redballoonsecurity.com, 1 redburn.com, 1 +redcabbage.tk, 1 redcanary.co, 1 redcandycane.tk, 1 redcapital.cl, 1 +redcardinal.tk, 1 redcarpetmonday.com, 1 redcatrampageforum.com, 1 redcedar.gov, 1 @@ -99507,12 +100905,17 @@ redhillboardriders.tk, 1 redhookny.gov, 1 redhotmonks.com, 1 redhotmonks.nl, 1 +redhottube.cf, 1 +redhottube.ga, 1 +redhottube.gq, 1 +redhottube.ml, 1 redi.tk, 1 rediazauthor.com, 1 redid.com.au, 1 redion.me, 1 redir.me, 1 redireci.one, 1 +redirecionarnoticias.ml, 1 redirect.fedoraproject.org, 1 redirect.stg.fedoraproject.org, 1 redirection-plf.online, 1 @@ -99527,6 +100930,7 @@ redletter.link, 1 redlinelap.com, 1 redlink.de, 1 redlink.tk, 1 +redlinker.ml, 1 redlionclub.ga, 1 redloeki.tk, 1 redmangallpsychologists.com.au, 1 @@ -99542,6 +100946,7 @@ rednsx.org, 0 rednumberone.com, 1 redoikos.org, 1 redpanda.gay, 1 +redparrotstudios.tk, 1 redpen.gr, 1 redper.serveminecraft.net, 1 redperegrine.com, 0 @@ -99549,6 +100954,7 @@ redphi.dedyn.io, 1 redphoenix.tk, 1 redprice.by, 1 redq.now.sh, 1 +redrafting.ga, 1 redragon.co.za, 1 redraven.studio, 1 redray.org, 1 @@ -99563,13 +100969,16 @@ redshop.uk, 1 redsicom.com, 1 redsiege.com, 1 redsis.com, 1 +redskullstuff.gq, 1 redsolutor.gq, 1 redsquarelasvegas.com, 1 +redstack.tk, 1 redstarpictures.tk, 1 redstarsurf.com, 1 redstonehomekits.com, 1 redstoner.com, 1 redstonium.net, 1 +redtails.tk, 1 redteam-pentesting.de, 1 redteams.fr, 1 redtela.com.br, 1 @@ -99577,9 +100986,12 @@ redtomato.ga, 1 redtorchginger.ie, 1 redtrig.ca, 1 redtrig.com, 1 +redtsar2000papers.tk, 1 +redtubs.tk, 1 redtune.jp, 1 reducealcoholism.com, 1 reducer.co.uk, 1 +reducto.tk, 1 reduktorntc-k.com.ua, 1 reduxlineberryfactorycart.com, 1 redvent.ru, 1 @@ -99619,6 +101031,7 @@ ref1oct.nl, 1 refalm.com, 1 refer.codes, 1 referat.club, 1 +referati.tk, 1 referdell.com, 1 referencement-local.info, 1 refertimacuan.com, 1 @@ -99645,6 +101058,7 @@ reform.ee, 1 reformasiluro.com, 1 reformation.financial, 1 reformatreality.com, 1 +reformayobra.com, 1 refpa.top, 1 refresh-dc.org, 1 refreshcartridges.co.uk, 1 @@ -99700,6 +101114,7 @@ regentmovies.tk, 1 regex101.com, 1 regg.ae, 1 reggaexplosion.tk, 1 +reggea.tk, 1 reggiotoday.it, 1 regiamo.ch, 1 regie-sc.ch, 1 @@ -99719,10 +101134,11 @@ regionaalenergieloket.nl, 1 regional-rabatt.de, 1 regionalgrowth.com, 1 regionethost.tk, 1 +regionmedia.cf, 1 regioplanverbindt.nl, 1 regiosalland.nl, 1 regiovertrieb.de, 0 -regis.tech, 1 +regis.tech, 0 regisearch.co.uk, 1 register.to, 0 registerex.me, 1 @@ -99755,6 +101171,7 @@ regtify.org, 1 reguladordevoltagem.com.br, 1 regularizaeudora.com.br, 1 regulations.gov, 1 +regulative.gq, 1 regulusaviation.com, 1 reha-honpo.jp, 1 rehab.cf, 1 @@ -99767,6 +101184,7 @@ rehasport-marketing.de, 1 rehau-ua.com, 1 reher.pro, 1 rehobothma.gov, 1 +rei.codes, 0 rei.ki, 1 reichardt-home.goip.de, 1 reichel-steinmetz.de, 1 @@ -99838,6 +101256,8 @@ reitstall-goettingen.de, 1 reittherapie-tschoepke.de, 1 rejahrehim.com, 1 rejail.ru, 1 +rejected-by-society.tk, 1 +rejected.tk, 1 rejective.tk, 1 rejects.email, 1 rejido.tk, 1 @@ -99863,6 +101283,7 @@ reklamim.tk, 1 reklamirui.tk, 1 reklamjog.hu, 1 reklammaster.ru, 1 +reklamy-led.tk, 1 rekmedia.tk, 1 reksadanapanin.co.id, 1 rekurasi.com, 1 @@ -99905,10 +101326,13 @@ reliablewire.com, 1 relialink.co.uk, 1 reliant3sixty.com, 1 reliantpropertygrpri.com, 1 +relic.gq, 1 relieftn.com, 1 religious-life.com, 1 +religiya.tk, 1 relikt.tk, 1 relisten.nl, 1 +reloading.ml, 1 relocatefeds.gov, 1 relocatetocornwall.co.uk, 1 relojeriajoyeria.com, 1 @@ -99925,6 +101349,7 @@ rem-cond.ru, 1 rem0te.net, 1 remaimodern.org, 1 remain.london, 1 +remake-projects.tk, 1 remambo.jp, 1 remateszarate.cl, 0 remax-direct.co.il, 1 @@ -99941,6 +101366,7 @@ remejeanne.com, 1 rememberingjordan.org, 1 remembermidi.sytes.net, 1 rememberthemilk.com, 0 +remennik.tk, 1 remesal.es, 1 remessaonline.com.br, 1 remetall.cz, 1 @@ -99953,6 +101379,7 @@ remifajardo.cf, 1 remigius-michael.de, 1 remilner.co.uk, 1 reminda.com, 1 +reminded.tk, 1 remini.cz, 1 reminisceaudio.com, 1 remirampin.com, 1 @@ -99981,8 +101408,10 @@ remontmebliv.lviv.ua, 1 remonto.tk, 1 remontpc.cf, 1 remontpc.tk, 1 +remontportal.tk, 1 remora.tk, 1 remorques-du-nord.fr, 1 +remorse.ga, 1 remote-health.net, 1 remotedesktop.corp.google.com, 1 remoteham.com, 1 @@ -100021,6 +101450,7 @@ render.com, 1 renderatelier.com, 1 renderferma-cash.tk, 1 renderloop.com, 1 +renderworld.tk, 1 renderzone.tk, 1 rendez-vous.gq, 1 rendre-service.ch, 0 @@ -100145,6 +101575,7 @@ replaceits.me, 1 replacementrate.ga, 1 replay.ga, 1 replica.plus, 1 +replicacoin.ga, 1 replicagold.ml, 1 replicaswiss.nl, 1 replici.net, 1 @@ -100241,6 +101672,7 @@ residencedesign.net, 1 residencelichtenberg.com, 1 residencemagazine.se, 1 residencescauri.it, 1 +resident-evil.tk, 1 residentialmortgageholdings.com, 1 resigno.tk, 1 resilientlouisianacommission.gov, 1 @@ -100289,6 +101721,7 @@ respectmyprivacy.net, 1 respectmyprivacy.nl, 1 respectonsleau.fr, 1 respecttheflame.com, 1 +respiradores.tk, 1 respiranto.de, 1 respire-yoga.fr, 1 respokare.com, 1 @@ -100389,6 +101822,7 @@ reteteaz.net, 1 retetenoi.net, 1 retetop95.it, 1 reth.ch, 1 +rethymnorooms.tk, 1 reticket.me, 1 reticle.cf, 1 reticon.de, 1 @@ -100427,6 +101861,7 @@ retrocircuitos.com, 1 retrogamenews.tk, 1 retroity.net, 1 retrojar.top, 1 +retrojugo.tk, 1 retronet.nl, 1 retropack.org, 1 retropedal.tk, 1 @@ -100450,6 +101885,7 @@ reucon.com, 1 reueljohnk.com, 1 reulitz.de, 0 reuna.me, 1 +reunion.tk, 1 reup.cash, 1 reurbcaceres.com.br, 1 reuseandresist.tk, 1 @@ -100523,6 +101959,7 @@ revisores.pt, 1 revisoronline.cf, 1 revisoronline.ga, 1 revisoronline.gq, 1 +revisoronline.ml, 1 revisoronline.tk, 1 revista-atalaya.ml, 1 revista-programar.info, 1 @@ -100543,6 +101980,7 @@ revivingtheredeemed.org, 1 revizor-online.cf, 1 revizor-online.ga, 1 revizor-online.gq, 1 +revizor-online.ml, 1 revizor-online.tk, 1 revizor.ml, 1 revizoronline.tk, 1 @@ -100717,6 +102155,7 @@ rib-ims.ch, 1 rib-ims.com, 1 rib-ims.de, 1 rib-leipzig.com, 1 +riba-lov.ga, 1 ribafs.tk, 1 ribapo.com, 1 ribccs.com, 1 @@ -100739,6 +102178,7 @@ riccardopiccioni.it, 1 riccy.org, 1 riceadvice.info, 1 ricecountymn.gov, 1 +ricettesemplicieveloci.altervista.org, 1 rich-good.com, 0 richadams.me, 1 richandsteph.co.uk, 1 @@ -101222,6 +102662,7 @@ robbertt.com, 0 robbie.bio, 1 robbie.contact, 1 robbie.studio, 1 +robbiebird.tk, 1 robbiecrash.me, 1 robbielowe.co, 1 robbievasquez.com, 1 @@ -101303,9 +102744,11 @@ robinzone.ua, 1 robison.pro, 1 robjager-fotografie.nl, 1 robkish.life, 1 +roblog.tk, 1 robloxenthusiasts.ga, 1 robnicholls.co.uk, 1 robobusiness.ga, 1 +robocop.no, 1 robocorp.com, 1 robodeidentidad.gov, 1 roboform.com, 1 @@ -101577,6 +103020,7 @@ rollinspass.org, 1 rollthedice.tk, 1 rolluikentotaalshop.nl, 1 rolnikowie.pl, 1 +rolotrans.cf, 1 rolotrans.ga, 1 rolotrans.gq, 1 rolotrans.ml, 1 @@ -101649,6 +103093,7 @@ romun.net, 1 romy.tw, 1 ron2k.za.net, 1 ronaldcantor.com, 1 +ronaldleite.tk, 1 ronaldvanassen.nl, 1 ronan-hello.fr, 1 ronan.cf, 1 @@ -101893,7 +103338,6 @@ rottweil-hilft.de, 1 rottweiler.ws, 1 rottweilerdogcare.com, 1 rotu.pw, 1 -rotula.biz, 1 rotumax.es, 1 rotunneling.net, 1 rouair.com, 1 @@ -101938,6 +103382,7 @@ rovatronic.tk, 1 roverglobal.ga, 1 roveridx.com, 1 rovetf.tk, 1 +rovezzano.tk, 1 rovian.ua, 1 rovin.tk, 1 rovity.io, 0 @@ -102058,7 +103503,6 @@ royaumesoublies.com, 1 roycampbell.tk, 1 royceandsteph.com, 1 roycewilliams.net, 1 -roychan.org, 1 royger.tk, 1 roynuesca.com, 1 royrevell.com, 1 @@ -103395,6 +104839,7 @@ salutes.tk, 1 salutethefish.com, 1 salutethegrains.com, 1 salutethepig.com, 1 +salutparis.ml, 1 salva.re, 1 salvaalocombia.com, 1 salvadoralevin.tk, 1 @@ -103442,6 +104887,7 @@ samedamci.com, 1 samegoal.com, 1 samegoal.org, 1 samel.de, 1 +samentest.tk, 1 samenuitsamenthuis.tk, 1 samenvoorelkaar.nl, 1 samenwerkingsportaal.nl, 1 @@ -103509,6 +104955,7 @@ samuel-philipp.de, 1 samuelbeckett.tk, 1 samuelbramley.com, 1 samuelkeeley.com, 1 +samuelkyalo.tk, 1 samuellaulhau.fr, 0 samuels-blog.de, 1 samuels-graphics.tk, 1 @@ -103678,6 +105125,7 @@ sanktpetriskole.dk, 1 sanleandromazda.com, 1 sanliurfahaberi.tk, 1 sanluisdequillota.tk, 1 +sanmarcovecchio.tk, 1 sanmonjiya-kimono.com, 1 sanmuding.com, 1 sannefoltz.com, 1 @@ -103732,7 +105180,6 @@ santehnik-dnepr.dp.ua, 1 santehnik-home.ru, 1 santehnika-tut.ru, 1 santekhmarket-nn.ru, 1 -santekhmarket.com, 1 santenatureetcie.com, 0 santeriabeliefs.com, 1 santevege.fr, 1 @@ -103780,6 +105227,7 @@ sapibatam.com, 0 sapien-ci.com, 1 sapience.com, 1 sapienml.com, 1 +sapienz.tk, 1 sapienza-eclipse.com, 1 sapienzaconsulting.com, 1 sapik.hu, 1 @@ -103807,6 +105255,7 @@ saqara.com, 1 saracenmarkets.com, 1 sarae.id, 0 sarafanchik.tk, 1 +sarafanchiki.tk, 1 sarafani.tk, 1 sarafrazan.tk, 1 sarafshop.tk, 1 @@ -103928,6 +105377,7 @@ satai.dk, 1 satal.in, 1 satangcorp.com, 1 satania.moe, 1 +satanindito.tk, 1 satanspowers.tk, 1 satario.vn, 1 satat.cf, 1 @@ -103977,6 +105427,7 @@ sattamatka420.mobi, 0 sattamatkamobi.com, 1 sattaresult.in, 1 sattaresult.net, 1 +saturdayenterprises.ga, 1 saturn-test.network, 1 saturne.tk, 1 saturnjump.com, 1 @@ -105001,6 +106452,7 @@ searx.ru, 1 searx.run, 1 searx.space, 1 searx.xyz, 1 +searxng.cf, 1 searxng.com, 1 seashkey.com, 1 seasidestudios.co.uk, 1 @@ -105181,6 +106633,7 @@ secureapplicationaccess.com, 1 securebot.ga, 1 securebuildingaccess.com, 1 securecloudplatform.nl, 1 +securecomms.cz, 1 secureddocumentshredding.com, 1 securedrop.org, 1 securefiletransfer.nl, 1 @@ -105955,6 +107408,7 @@ servicebeaute.fr, 1 serviceboss.de, 1 servicecentreperth.com.au, 1 servicefish.tk, 1 +serviceflow.co.za, 1 servicegeneralhvac.com, 1 serviceinconstanta.ro, 1 serviceland.am, 1 @@ -106286,6 +107740,7 @@ shadowsocks.se, 1 shadowsocks.software, 1 shadowsocks.to, 1 shadowsproject.ru, 1 +shadowstalkers.tk, 1 shadowstep.tk, 1 shadowstrikers.tk, 1 shadowuniverse.xyz, 1 @@ -106329,6 +107784,7 @@ shakerwebdesign.net, 1 shakespeareans.net, 1 shakespearesolutions.com.au, 0 shakespearevet.com, 1 +shakesprimer.tk, 1 shakingthehabitual.com, 1 shakraphix.tk, 1 shakthifacility.com, 1 @@ -106397,6 +107853,7 @@ sharefox.eu, 0 sharegate.tk, 1 sharehabor.org, 1 sharekey.com, 0 +sharelinks.tk, 1 sharelovenotsecrets.com, 1 sharemania.tk, 1 sharemessage.net, 1 @@ -106408,6 +107865,7 @@ sharerotic.com, 1 sharescope.co.uk, 1 shareselecttools.com, 1 sharethe.link, 1 +sharetheroad.org, 1 sharevari.com, 1 shareworks.com, 1 shareworx.net, 1 @@ -106557,6 +108015,7 @@ shemogo.com, 1 shemsconseils.ma, 1 shemsharples.co.uk, 1 shena.co.uk, 1 +shenannigans.tk, 1 shenghaiautoparts.com, 1 shenghuang.tk, 1 shengrenyu.com, 1 @@ -106591,6 +108050,7 @@ shetshivar.com, 1 shevans.com, 1 shevenmed.com, 1 shevet-achim.tk, 1 +sheweek.ml, 1 shft.cl, 1 shg-pornographieabhaengigkeit.de, 0 shgroup.xyz, 1 @@ -106652,7 +108112,6 @@ shikiryu.com, 1 shileo.de, 1 shilled.tk, 1 shilpaonline.tk, 1 -shima1.net, 1 shimi.blog, 1 shimi.guru, 1 shimi.net, 1 @@ -106662,6 +108121,7 @@ shimo.im, 1 shimonfly.com, 1 shin-yo.de, 1 shineindiarktutorial.ml, 1 +shineleds.ga, 1 shinenet.cn, 1 shinetruckleads.com, 1 shinetsuamerica.com, 1 @@ -106773,6 +108233,7 @@ shlemenkov.by, 1 shlink.cc, 1 shlmail.info, 1 shlyakpavel.tk, 1 +shlyapa-com.tk, 1 shlyhi.tk, 1 shm.ac.jp, 1 shmidta.tk, 1 @@ -106792,6 +108253,7 @@ shoelevel.com, 1 shoemakerywc.com, 1 shoeracks.uk, 1 shoes4gentlemen.de, 1 +shoestorebiz.tk, 1 shoestorenet.tk, 1 shoestringeventing.co.uk, 1 shoetravel.com, 1 @@ -106809,6 +108271,7 @@ shooter.dog, 1 shootpooloklahoma.com, 1 shootsame.tk, 1 shop-cosmetic.tk, 1 +shop-cosmetics.tk, 1 shop-hellsheadbangers.com, 1 shop-lingerie.tk, 1 shop-links.co, 1 @@ -107052,6 +108515,7 @@ shoresofshawneebend.com, 1 shorewoodmn.gov, 1 shorewoodwi.gov, 1 shorifhussain.tk, 1 +shorinkarate.tk, 1 shork.space, 1 shornehasim.co.il, 1 short-term-plans.com, 1 @@ -107135,6 +108599,7 @@ shreyansh26.me, 1 shrike.me, 0 shrimpcam.pw, 1 shrimpnews.tk, 1 +shrines.ga, 1 shrinidhiclinic.in, 1 shrinkhub.com, 1 shroomery.com, 1 @@ -107149,6 +108614,7 @@ shrub.ca, 1 shrug.fyi, 1 shrug.ml, 0 shssl.vip, 0 +sht-vr-player.cf, 1 shtaiman.com, 1 shtaiman.net, 1 shtaiman.org, 1 @@ -107165,6 +108631,7 @@ shuax.com, 0 shubhkumar.in, 0 shucheng.li, 1 shufersal-cashback.co.il, 1 +shufflecube.tk, 1 shufflemall.com, 1 shufflemix.tk, 1 shuffleradio.nl, 1 @@ -107184,6 +108651,7 @@ shumov.tk, 1 shunliandongli.cn, 1 shunliandongli.com, 1 shunmei-hari.com, 1 +shunter.tk, 1 shunzi.tk, 1 shuo.li, 0 shuomingshu88.com, 1 @@ -107314,6 +108782,7 @@ siesapps.com, 1 sietejefes.com.ar, 1 sieulog.com, 1 sieuthithangmay.com, 1 +sifecs.ml, 1 sifreuret.com, 0 sift-tool.org, 0 sift.com, 1 @@ -107432,17 +108901,20 @@ silashes.com, 1 silashes.ru, 1 silbercloud.com, 1 silberkiste.com, 1 +sildenafilcitrate.cf, 1 sildenafilcitrate100mg.ga, 1 silensoclinic.com, 1 silent-clean.de, 1 silent-yachts.com, 1 silent.se, 1 silentartifact.org, 1 +silentdream.tk, 1 silentgreen.tk, 1 silentinstaller.com, 1 silentkernel.fr, 1 silentneko.ga, 1 silentsite.tk, 1 +silentsky.tk, 1 silentsystem.com, 1 silentundo.org, 1 silesianus.pl, 1 @@ -107452,6 +108924,7 @@ silicateillusion.org, 1 silicon-north.com, 1 silicon-vision.com, 1 siliconheartlandohio.gov, 1 +silina.tk, 1 siliton.pl, 1 silken-madame.tk, 1 silkky.cloud, 1 @@ -107563,6 +109036,7 @@ silvergoldbull.ws, 1 silverkattens.tk, 1 silverlakeks.gov, 1 silverlinkz.net, 1 +silvermatch.ga, 1 silvernight.social, 1 silveronline.ml, 1 silveronline.tk, 1 @@ -107584,6 +109058,7 @@ silviaecintia.tk, 1 silvianavarro.tk, 1 silviaroddey.tk, 1 silvine.xyz, 1 +silviorodriguez.tk, 1 silvistefi.com, 1 silvius.at, 1 silvobeat.blog, 1 @@ -107596,6 +109071,7 @@ simabonnement.nl, 1 simam.de, 1 simaogv.net, 1 simark.ca, 1 +simart.cf, 1 simasoft.com, 1 simava.org, 1 simbamail.de, 1 @@ -107654,6 +109130,7 @@ simonmaddox.com, 1 simonmanuel.com, 1 simonoener.com, 1 simonreich.de, 1 +simonreynoldsfavesunfaves.cf, 1 simonschmitt.ch, 1 simonspeich.ch, 1 simonsreich.de, 1 @@ -107675,6 +109152,7 @@ simpelkoken.nl, 1 simpelkoken.org, 1 simpeo.org, 1 simphony.cz, 1 +simple-perfect.tk, 1 simple-test-to-demonstrate-the-maximum-length-of-a-domain-name.com, 1 simple-test-to-demonstrate-the-maximum-length-of-a-domain-name.eu, 1 simple-test-to-demonstrate-the-maximum-length-of-a-domain-name.international, 1 @@ -107696,6 +109174,7 @@ simpleinvoices.io, 1 simpleit.services, 1 simpleline.studio, 1 simplelinux.tk, 1 +simplelist.ga, 1 simplelogin.co, 1 simplelogin.com, 1 simplelogin.fr, 1 @@ -107718,6 +109197,7 @@ simplesite.hu, 1 simplespy.tk, 1 simpletax.ca, 1 simpletherapy.com, 1 +simpletools.tk, 1 simpletrace.nz, 1 simplevat.eu, 1 simplevote.ca, 1 @@ -107768,6 +109248,7 @@ sims4hub.ga, 1 simscale.com, 1 simsfinnchiropractic.com.au, 1 simsnieuws.nl, 1 +simstarstyle.tk, 1 simstime.net, 1 simulfund.com, 0 simulise.cloud, 1 @@ -107840,18 +109321,22 @@ singel.ch, 1 singen.icu, 1 singer.ru, 1 singerfamily.ca, 1 +singerpragathi.tk, 1 singerwang.com, 1 singeyel.gq, 1 singingblackbird.tk, 1 singita.com, 1 single-in-stuttgart.de, 1 singleeuropeansky.aero, 1 +singlehandedsailing.tk, 1 +singlenine.gq, 1 singleproduction.com, 1 singles-aus-hamburg.de, 1 singles-berlin.de, 1 singles-day.org.il, 1 singleuse.link, 1 singlu10.org, 0 +singluten.tk, 1 singulair-generic.tk, 1 sinhnhatbaby.com, 1 sini.tk, 1 @@ -107867,6 +109352,7 @@ sinnersprojects.ro, 0 sinnvoll-online.de, 1 sinnvoll-online.info, 1 sinog.si, 1 +sinok.tk, 1 sinonimos.com.br, 1 sinonimosonline.com, 1 sinonimosonline.com.br, 1 @@ -107988,10 +109474,13 @@ sisseastumine.ee, 1 sissyroulette.com, 1 sistem-maklumat.com, 1 sistem-maklumat.com.my, 1 +sistema-trenirovok.ml, 1 +sistema20k.tk, 1 sistemair.be, 1 sistemair.ch, 1 sistemair.it, 1 sistemairpro.com, 1 +sistemapronto.ml, 1 sistemasarquitectonicos.com, 1 sistemasespecializados.com, 1 sistemista.it, 1 @@ -108013,14 +109502,18 @@ site-helper.com, 1 site-master.ml, 1 site-oficial-inicio.com, 1 site-oflcial.com, 1 +site-remont.ml, 1 +site-romania.tk, 1 site.com, 1 site.mu, 1 site2002.tk, 1 +siteadvokat.cf, 1 sitebrass.ru, 1 sitebuilderreport.com, 0 sitecentre.com.au, 1 sitechange.dedyn.io, 1 sitecloud.jp, 1 +sitecreation.tk, 1 sitecreator.tk, 1 sitecrew.cf, 1 sitecuatui.com, 1 @@ -108030,6 +109523,7 @@ siteforce.com, 1 sitehizi.com, 1 siteintelstage.com, 1 sitelinks.ga, 1 +sitelinks.ml, 1 sitelmexico.com, 0 sitemai.eu, 1 sitemap.solutions, 1 @@ -108047,6 +109541,8 @@ siteschema.com, 1 sitesecurityscan.com, 1 sitesforward.com, 1 sitesko.de, 1 +sitestudio.tk, 1 +sitesweb.gq, 1 sitetalk.tk, 1 siteviseagency.com, 1 siteweb-seo.fr, 1 @@ -108074,6 +109570,7 @@ sitzungsdienst.net, 1 siulam-wingchun.org, 1 siusto.com, 1 sivaexports.in, 1 +sivaru.tk, 1 sivizius.eu, 1 sivutoimisto.fi, 1 sivyerge.com, 1 @@ -108089,6 +109586,7 @@ sixde.com.au, 1 sixe.es, 1 sixforkurd.tk, 1 sixgungroup.com, 1 +sixpackband.tk, 1 sixpackholubice.cz, 1 sixstrings.tk, 1 sixt.com.tr, 1 @@ -108110,11 +109608,13 @@ sjfss.marketing, 1 sjiplanning.com.au, 1 sjleisure.co.uk, 1 sjnp.org, 1 +sjoelen.tk, 1 sjoelsport.nl, 1 sjoorm.com, 1 sjorsvanweert.nl, 1 sjouke.dedyn.io, 1 sjout.nl, 1 +sjparanormal.tk, 1 sjrcommercialfinance.co.uk, 1 sjrslms.in, 1 sjs.org.hk, 1 @@ -108124,13 +109624,18 @@ sk.tl, 1 sk8erofbodom.com, 1 sk8israel.com, 1 skachat-programmylini.ga, 1 +skachat-shablon-rezyume-na-angliyskom-yazyk.tk, 1 +skachat-zip.tk, 1 +skachay-knighki.gq, 1 skachay-photo.gq, 1 skagen-feriebolig.dk, 1 skaginn.tv, 1 +skaitliukas.tk, 1 skalar.sk, 1 skalcollective.com, 1 skalec.org, 1 skalis-portage.com, 1 +skamper.tk, 1 skankofamerica.com, 1 skarke.se, 1 skarox.com, 1 @@ -108142,6 +109647,7 @@ skartecedu.in, 1 skatclub-beratzhausen.de, 1 skate.fr, 1 skateparkmontbriz.tk, 1 +skaterangels.tk, 1 skaterepublic.tk, 1 skatesins.ch, 1 skatesliide.tk, 1 @@ -108151,10 +109657,12 @@ skatn.de, 1 skautibrno.cz, 1 skazka.ml, 1 skazka.ru, 1 +skazochnyj-sait.tk, 1 skbexteriorcleaningsolutions.com, 1 skbilisim.tk, 1 skday.com, 1 skedda.com, 1 +skeditor.tk, 1 skedr.io, 0 skeeley.com, 1 skegnesstec.ac.uk, 1 @@ -108163,6 +109671,7 @@ skepneklaw.com, 1 skeppsbrons.se, 1 skepticalsports.com, 1 skeptics.org, 1 +skeptik.tk, 1 skeriv.com, 1 sketch.io, 1 sketch.jpn.com, 1 @@ -108179,9 +109688,11 @@ skhosting.eu, 1 skhuf.net, 1 ski-outdoor-shop.de, 1 skibbereencomhaltas.tk, 1 +skibikers.tk, 1 skid.church, 1 skiddle.com, 1 skidka.by, 1 +skidki-ru.cf, 1 skidzun.de, 1 skifairview.com, 1 skiff.town, 1 @@ -108222,9 +109733,14 @@ skiman.tk, 1 skimbo.tk, 1 skin-cosmetic.eu, 1 skinbet.co, 1 +skinboost.ga, 1 +skinboost.ml, 1 skincare-note.com, 1 skincareagent.cf, 1 skindb.net, 1 +skinews.tk, 1 +skinexpert.ml, 1 +skinfoodpeachcotton.tk, 1 sking.io, 1 skinmarket.co, 1 skinmodo.com, 1 @@ -108247,6 +109763,7 @@ skippy.dog, 0 skiptadiabetes.com, 1 skipton.io, 1 skirent-masocorto.com, 1 +skirted.cf, 1 skirtskenya.tk, 1 skischule-wildewiese.de, 1 skitecsh.com, 1 @@ -108265,7 +109782,9 @@ sklepsamsung.pl, 1 sklepsnowboardowy.pl, 1 sklepvoip.tel, 1 sklepwielobranzowymd.com, 1 +sklisen.tk, 1 sklotechnik.cz, 1 +skmedia.ga, 1 skmp.cc, 1 skmsport.com, 1 sknasirali.com, 1 @@ -108284,13 +109803,16 @@ skolni-system.eu, 1 skolnieks.lv, 1 skolnilogin.cz, 1 skolniweby.cz, 1 +skorbord.tk, 1 skorepova.info, 1 skoroff.com, 1 +skoropolnolunie.gq, 1 skorovsud.ru, 1 skorpil.cz, 1 skorstensfolket.se, 1 skory.us, 1 skoskav.org, 1 +skotobaza.tk, 1 skotstvo.tk, 1 skotty.io, 1 skovbosburgerblog.dk, 1 @@ -108306,9 +109828,11 @@ skreutz.com, 1 skrid.net, 1 skrillex.tv, 1 skrin.ru, 1 +skripta.tk, 1 skriptorium.de, 1 skrivargarden-nes.cf, 1 skrivebeskyttet.dk, 1 +skrivebordet.tk, 1 skrprojects.com.au, 1 skrsv.net, 1 skrydata.ga, 1 @@ -108346,6 +109870,7 @@ sky-music.tk, 1 sky-of-use.net, 1 sky-os.ru, 1 sky-torch.com, 0 +sky-wap.cf, 1 skyanchor.com, 0 skyarch.net, 1 skyautorental.com, 1 @@ -108373,16 +109898,21 @@ skydrive.live.com, 0 skyeeverest.tk, 1 skyem.co.uk, 0 skyfone.cz, 1 +skyfpicture.tk, 1 skygame.tk, 1 skygates.tk, 1 skyguru.tk, 1 +skyhigh-mizell.tk, 1 skyhook.earth, 1 +skyhooks.tk, 1 skyhyve.com, 1 skyhyve.com.au, 1 skyhyve.xyz, 1 skyint.io, 1 +skyla.tk, 1 skylair.info, 1 skylandanalytics.net, 1 +skylander.cf, 1 skylarker.org, 1 skylash.be, 1 skylgenet.nl, 1 @@ -108399,6 +109929,7 @@ skyloisirs.ch, 0 skyltmax.se, 1 skymass.xyz, 1 skyminds.net, 1 +skymonk.tk, 1 skyn.ai, 1 skynet-research.us, 0 skynet.co.ug, 0 @@ -108410,7 +109941,6 @@ skynetnetwork.eu.org, 1 skynetstores.ae, 1 skynetz.tk, 1 skyoy.com, 0 -skypanic.com, 1 skypark.tk, 1 skypce.net, 1 skype.com, 1 @@ -108441,6 +109971,7 @@ skyterraembrace.com, 1 skyterrawellness.com, 1 skytickets.ga, 1 skytiger.ga, 1 +skytown.ga, 1 skytterlogg.no, 1 skytterloggen.no, 1 skyvault.io, 1 @@ -108474,6 +110005,7 @@ slainvet.net, 1 slalix.cc, 1 slalix.pw, 1 slalix.xyz, 1 +slamdunkdedication.tk, 1 slamhope.gq, 1 slamix.nl, 1 slan.fr, 1 @@ -108491,8 +110023,10 @@ slashorg.net, 1 slate.to, 1 slated.ie, 1 slatemc.fun, 1 +slathering.cf, 1 slaughter.com, 1 slaughterhouse.fr, 1 +slava.ml, 1 slavasoloviev.com, 1 slavasveta.info, 1 slavblog.ru, 1 @@ -108509,6 +110043,7 @@ slechtereview.nl, 1 sledgeroofing.com, 1 sleeklounge.com, 0 sleep-go.info, 1 +sleep-tight.cf, 1 sleepawaycampseries.tk, 1 sleepet.tw, 1 sleepig.com, 1 @@ -108517,6 +110052,7 @@ sleepingbaghub.com, 0 sleepingmattressreview.com, 1 sleeplessbeastie.eu, 0 sleepmap.de, 1 +sleepo.ga, 1 sleeps.jp, 0 sleepsaround.ga, 1 sleepshop.be, 1 @@ -108528,7 +110064,9 @@ sleio.com, 1 sleismann.de, 1 sleismann.eu, 1 sleismann.org, 1 +slemen.tk, 1 slepsluzbabeograd.org, 1 +sletaem.ml, 1 sletat.ru, 1 slev.tk, 1 slevermann.de, 1 @@ -108562,6 +110100,7 @@ slingo-sta.com, 1 slingoweb.com, 1 slink.hr, 1 slinkwa.re, 1 +slinx.tk, 1 slip-gaming.tk, 1 sliphua.work, 1 slipknot-site.tk, 1 @@ -108618,7 +110157,9 @@ slotmachinesgratisonline.com, 1 slotmad.com, 1 slotsinspector.com, 1 slotsmegacasino.com, 1 +slouching.ga, 1 sloudways.com, 1 +slovenia-trip.tk, 1 slovenskycestovatel.sk, 1 slow-coaching.fr, 1 slow.social, 1 @@ -108657,7 +110198,9 @@ slymak.com, 1 slytech.ch, 0 slytigers.tk, 1 slyvon.com, 1 +slzr.cloud, 1 sm-kyoushitsu.com, 1 +sm-stream.com, 1 sm-supplements.gr, 1 sm.link, 1 sm.ms, 1 @@ -108679,6 +110222,7 @@ smalldata.tech, 1 smalldeveloper.ml, 1 smalle-voet.de, 1 smallplanet.com, 1 +smalls-world.tk, 1 smallsiri.gq, 1 smallsites.eu, 1 smalltalkconsulting.com, 1 @@ -109167,7 +110711,6 @@ snuffstore.de, 1 snukep.kr, 1 snwsjz.com, 1 snz.pw, 1 -so-buff.com, 1 so-commerce.com, 1 so-link.co, 1 so-spa.ru, 1 @@ -109883,7 +111426,6 @@ sotypicallydutch.nl, 1 soubriquet.org, 1 soufastnet.com.br, 1 sougou.com, 1 -soukbeldi.nl, 1 souked.com, 1 soukka-seura.fi, 1 soukodou.jp, 1 @@ -110332,6 +111874,7 @@ speedhost.com.br, 1 speedhoundz.com, 1 speedleads.dk, 1 speedlearning.ml, 1 +speedlearningapp.com, 1 speedlearningapp1.com, 1 speedliner.com, 1 speedof.me, 1 @@ -110452,6 +111995,7 @@ spilka-dyplomativ.tk, 1 spillbasen.no, 1 spillefuglen.com, 1 spillersfamily.net, 0 +spillforum.no, 1 spillhosting.no, 1 spillmaker.no, 0 spilnu.dk, 1 @@ -111508,7 +113052,6 @@ stefania.tk, 1 stefaniepetermann.eu, 1 stefaniharvilla.tk, 1 stefanknobel.ch, 1 -stefankuehnel.com, 1 stefanorossi.it, 0 stefanovski.io, 1 stefanrusie.ro, 1 @@ -111954,6 +113497,7 @@ stoltz-it.de, 1 stomaline.com.ua, 1 stomatolog-czestochowa.cf, 1 stomatolog-czestochowa.ga, 1 +stomatolog-czestochowa.gq, 1 stomatolog.cf, 1 stomatologiya.gq, 1 stomproced.ro, 1 @@ -112023,6 +113567,7 @@ stopthemoss.com, 1 stoptheperio.com, 1 stopthethyroidmadness.com, 1 stopthinkconnect.jp, 1 +stoptrading.co.uk, 1 stopvirus.in, 1 stor-guard.com, 1 storage-base.de, 1 @@ -112424,12 +113969,12 @@ studentaid.gov, 1 studentenmobiliteit.be, 1 studentenplaza.tk, 1 studenterguiden.dk, 1 -studentexpat.com, 1 studentforums.biz, 1 studenti.tk, 1 studentinaneta.com, 1 studentingent.be, 1 studentite.bg, 1 +studentjournalist.ml, 1 studentklinikk.no, 1 studentloans.gov, 1 studentnep.tk, 1 @@ -112473,6 +114018,7 @@ studioavvocato.milano.it, 1 studioavvocato.roma.it, 1 studioavvocato24.it, 1 studiobrandano.com, 1 +studiocharloslivro.tk, 1 studioclassic.no, 1 studiodelbenessere.com, 1 studiodentisticomasi.com, 1 @@ -112649,6 +114195,7 @@ subanelvolumen.tk, 1 subarupartsdeal.com, 1 subastasdecarros.net, 1 subbl.co, 1 +subdev.org, 1 subdivider.tk, 1 subestan.tk, 1 subic.ga, 1 @@ -112802,6 +114349,7 @@ sukrie.net, 1 suksit.com, 0 sulabs.org, 1 sulavius.tech, 1 +sulawesi-adventure.tk, 1 suleeka.tk, 1 sulek.eu, 1 sulfegate.org, 1 @@ -113152,6 +114700,7 @@ suppdeals.eu, 1 supperclub.net, 1 supplementaanbiedingen.nl, 1 supplementalconditions.com, 1 +supplementpolice.tk, 1 supplementwarehouseonline.com, 1 suppliersession2021.com, 1 supplies24.at, 1 @@ -113177,8 +114726,10 @@ suprem.ch, 0 supremaa.com, 1 supremacrypt.com, 1 supreme-council.me, 1 +suprememale.tk, 1 supremestandards.com, 1 supriville.com.br, 1 +supropionegocio.tk, 1 supweb.ovh, 0 suranganet.tk, 1 surasak.org, 1 @@ -113381,16 +114932,20 @@ svetlayarus.tk, 1 svetlilo.com, 1 svetoch.ga, 1 svetoch.tk, 1 +svetodiod.gq, 1 svetonaushniki.tk, 1 svetplast.spb.ru, 0 svetrelaxu.cz, 1 svetzitrka.cz, 0 +svg-board.ml, 1 svge.ms, 1 svgems.xyz, 1 +svgzone.tk, 1 svhni.nl, 1 svia.nl, 1 sviatzoo.com, 1 svijet-medija.hr, 1 +svirel.ga, 1 sviz.pro, 1 svj-stochovska.cz, 1 svjvn.cz, 1 @@ -113417,6 +114972,7 @@ sw-s.info, 1 sw-servers.net, 1 sw33tp34.com, 1 swa-il.gov, 1 +swabifoundation.tk, 1 swacash.com, 1 swacp.com, 1 swag.pw, 1 @@ -113434,6 +114990,7 @@ swallsoft.com, 1 swamiclub.ru, 1 swanbitcoin.com, 1 swansdoor.org, 1 +swanseajobs.net, 1 swanseama.gov, 1 swanvinylworks.com, 1 swap-ict.nl, 1 @@ -113468,12 +115025,15 @@ sweatercon.com, 1 swecha.org, 1 swedbank.se, 1 swederica.tk, 1 +swedish-saints.tk, 1 +swedishforces.tk, 1 swedishhost.com, 1 swedishhost.se, 1 sweep-me.net, 1 sweepay.ch, 0 sweet-spatula.com, 1 sweetair.com, 1 +sweetairlines.tk, 1 sweetbabyjesus.com, 1 sweetcalculus.ru, 1 sweetcorner.tk, 1 @@ -113486,6 +115046,7 @@ sweetgracemarket.com, 1 sweetharvestfoods.com, 1 sweethearts.tk, 1 sweethomesnohomishrenovations.com, 1 +sweethorses.tk, 1 sweetintrigue.tk, 1 sweetlegs.jp, 1 sweetlycakes.com, 0 @@ -113713,6 +115274,7 @@ symmetrysolar.com.au, 1 symoteb.ir, 1 sympletrade.com, 1 symplexia.com.br, 1 +symplyos.tk, 1 sympmarc.com, 1 symposium.beer, 1 symptome-erklaert.de, 1 @@ -113751,11 +115313,14 @@ synedat.com, 1 synergenxhealth.com, 1 synergiedenken.de, 1 synergisticsoccer.com, 1 +synergy-logistics.tk, 1 synergyfitness.com.au, 1 +synergyzone.tk, 1 synerio.com, 1 synerionagile.com, 1 synfac.com, 1 syniah.com, 1 +synitsa.tk, 1 synobook.com, 0 synology-distribution.de, 1 synology.com, 0 @@ -113782,7 +115347,9 @@ syoier.com, 1 syok.my, 1 syonix.ru, 1 syotatakahashi.com, 1 +syphax.ml, 1 syplasticsurgery.com, 1 +sypra-host.tk, 1 sypreformas.tk, 1 syptak.eu, 1 syquel-systems.de, 1 @@ -113793,6 +115360,7 @@ syrianair.cf, 1 syrianair.ga, 1 syrianair.ml, 1 syrianet.cf, 1 +syrius.tk, 1 syronex.com, 1 sys-admin.fr, 1 sys-stat.de, 1 @@ -113832,6 +115400,7 @@ systea.fr, 1 systea.net, 1 system-admin-girl.com, 1 system-design.tk, 1 +system-fehler.tk, 1 system-m.de, 0 system.is, 1 system.md, 1 @@ -114036,6 +115605,7 @@ tabadotupi.tk, 1 tabakerka.tk, 1 tabarnak.ga, 1 tabby.cz, 1 +tabclassics.tk, 1 tabe.cn, 1 tabe.com.cn, 1 tabegamisama.com, 1 @@ -114065,6 +115635,7 @@ tablescraps.com, 1 tablet.facebook.com, 0 tablet4me.de, 0 tabletd.com, 1 +tabletennis-tt.tk, 1 tabletkinamase.ga, 1 tabletkinatradzik.ga, 1 tabletopwealth.reviews, 0 @@ -114103,6 +115674,7 @@ tacticalsquare.com, 0 tacticalvote.co.uk, 1 tacticalwebmedia.com, 1 tad.ua, 1 +tadalafil-tablets.tk, 1 tadalafilindia.gq, 1 taddiestales.com, 1 tadinfos.fr, 1 @@ -114187,12 +115759,14 @@ tail.ml, 1 tail.wtf, 1 taildb.com, 1 tailor.com.au, 1 +tailoring.tk, 1 tailpuff.net, 0 tails.boum.org, 1 tailsteak.tk, 1 tailwindapp.com, 1 tainiesonline.tk, 1 taintedart.co.nz, 1 +taipak-krasnoyar.tk, 1 taipei2025.com, 1 taipei2038.com, 1 taishokudaiko.com, 1 @@ -114207,6 +115781,7 @@ taiwaniacapital.com, 1 taiwaniacapital.com.tw, 1 taiwaniacapital.tw, 1 taiwanteama.com.tw, 1 +taiwantechtrek.tk, 1 taiwantour.info, 0 taiyouko-hatuden.net, 1 taizegroep.nl, 1 @@ -114214,6 +115789,7 @@ taj-portal.tk, 1 tajbrighton.tk, 1 tajilamagazine.com.br, 1 tajmisreg.com, 1 +tajniy-smisl.cf, 1 tajniy-smisl.ga, 1 tajniy-smisl.gq, 1 tajniy-smisl.ml, 1 @@ -114257,6 +115833,7 @@ taki.sk, 1 taki.to, 1 takinet.kr, 1 takipcikutusu.com, 1 +takiplekazan.ga, 1 takito.net, 1 takk.pl, 1 takkaaaaa.com, 1 @@ -114284,6 +115861,7 @@ talentcast.org, 1 talenteam.com, 1 talented.ga, 1 talentedagents.ga, 1 +talentguru.ml, 1 talenthubmpi.com, 1 talentis.net, 1 talentoday.com, 1 @@ -114326,6 +115904,7 @@ talkmojang.club, 1 talknetwork.ru, 1 talkreal.net, 1 talkscope.cf, 1 +talkscope.ml, 1 talksileby.tk, 1 talktech.com, 1 talktobabes.com, 1 @@ -114370,6 +115949,7 @@ tamayahousing.com, 1 tambayology.com, 1 tambo.es, 1 tamboa.com, 1 +tambov.cf, 1 tambov.tk, 1 tambovcity.tk, 1 tambre.ee, 1 @@ -114380,6 +115960,7 @@ tami.co.uk, 1 tamilentertainment.tk, 1 tamilrokers.tk, 1 tamilsms.blog, 1 +tamiltax.tk, 1 tamimmalik.ml, 1 tamindir.com, 1 tamistuff.com, 1 @@ -114394,10 +115975,12 @@ tampabaybusinesslistings.com, 1 tampabayhometours.info, 1 tampacific.net, 1 tampacific.vn, 1 +tampaexplorer.ml, 1 tampereenliberaalit.tk, 1 tamriel-rebuilt.org, 1 tamrielcraft.tk, 1 tamronhallshow.com, 1 +tamsulosin.gq, 1 tamuraei.co.jp, 1 tamylove.net, 1 tan90.tw, 1 @@ -114456,6 +116039,7 @@ tankos.tk, 1 tankpassen-vergelijken.nl, 1 tanks.je, 1 tankski.co.uk, 1 +tanned.tk, 1 tannenhof-moelln.de, 1 tanner.sh, 1 tanneradvisorysolutions.com.au, 1 @@ -114474,10 +116058,12 @@ tantetilli.de, 0 tanto259.name, 1 tantrabali.tk, 1 tantravoorlichting.nl, 1 +tantrum-rocks.tk, 1 tantso.com, 1 tanushka.tk, 1 tanveersingh.tk, 1 tanweerkhan.tk, 1 +tanya-avdeeva.cf, 1 tanyanama.com, 1 tanyatate.xyz, 1 tanz-kreativ.de, 0 @@ -114485,6 +116071,7 @@ tanz.info, 1 tanzania-chameleon.ga, 1 tanzanianfilms.tk, 1 tanzpartner.tk, 1 +tao-energie.tk, 1 taoaworld.com, 1 taoburee.com, 0 taogames.net, 1 @@ -114498,6 +116085,7 @@ taosnm.gov, 1 taotic.eu, 1 taowa.ca, 1 taoways.com, 0 +taoyingchang.tk, 1 tap.az, 1 tapahtumakauppa.fi, 1 tapbutdao.com, 1 @@ -114524,10 +116112,13 @@ tarabici.tk, 1 tarabooks.com, 1 tarahancenter.com, 1 tarakan-klopik.tk, 1 +taraksarkar.tk, 1 taranagar.tk, 1 tarantino.tk, 1 tarantul.org.ua, 1 tarantula-spider.com, 1 +taraori.tk, 1 +tarapacadigitaltv.tk, 1 tarasecurity.co.uk, 1 tarasecurity.com, 1 tarasevich.by, 1 @@ -114564,6 +116155,7 @@ tarjetasgraficas.tk, 1 tarjetaspark.es, 1 tarjetaspersonales.tk, 1 tarjetondigital.com, 1 +tarkari.tk, 1 tarkasparrows.org.za, 1 tarketmedia.com, 1 tarkov-database.com, 1 @@ -114638,12 +116230,17 @@ tastyworksreview.co, 1 tasvideos.org, 1 tatahealth.com, 1 tatamypa.gov, 1 +tatar-bashqort.tk, 1 tatara.ne.jp, 1 tatard.fr, 1 tataria.tk, 1 tatarin.ga, 1 +tatarin.gq, 1 +tataristan.tk, 1 +tatarland.tk, 1 tataru.it, 1 tatarworld.tk, 1 +tatary.cf, 1 tatary.tk, 1 tate.com, 1 tateishi-ip.com, 1 @@ -114660,6 +116257,7 @@ tatoo-shop.ca, 1 tatort-fanpage.de, 1 tatsidou.gr, 1 tatsumi-air.com, 1 +tatsuya.tk, 1 tatteredatlastales.com, 1 tattoo-art.tk, 1 tattoo.dating, 1 @@ -114669,9 +116267,11 @@ tattooidee.nl, 1 tattoomotive.net, 1 tattoonhamon.ru, 1 tattoopiercing-wien.at, 1 +tatu-love.tk, 1 tatuaggi.roma.it, 1 tatuaggio.co, 1 tatuering.net, 1 +taturukav.tk, 1 taubenartikel.de, 1 taubin.cc, 1 tauedu.org, 1 @@ -114714,6 +116314,7 @@ taxi-meridian.ru, 1 taxi-puck.pl, 1 taxi-tienen.com, 1 taxi-zakaz.ml, 1 +taxi24.ml, 1 taxi2opo.com, 1 taxibiz.ga, 1 taxibudapest.com, 0 @@ -114764,6 +116365,7 @@ taylors-castles.co.uk, 1 taylorshillsamoan.org, 1 taylorstauss.com, 1 taytaytiangge.ph, 1 +tazamobile.ga, 1 tazarcorp.com, 1 tazarelax.es, 1 tazemama.biz, 1 @@ -114773,6 +116375,7 @@ tazewell-il.gov, 1 tazewellcountyjury.gov, 1 tazita.tk, 1 tazz.ro, 1 +tb-bolshevik.tk, 1 tb-devel.de, 1 tb-itf.de, 1 tbahn.de, 1 @@ -114799,7 +116402,6 @@ tbq-s1.com, 1 tbrindus.ca, 1 tbs-certificates.co.uk, 1 tbscan.com, 1 -tbsmportal.com, 1 tbspace.de, 1 tbsunday.tk, 1 tbtech.cz, 1 @@ -114821,6 +116423,7 @@ tcb-b.org, 1 tcbdarts.nl, 1 tccb.gov.tr, 1 tccc.org.tw, 1 +tcckonsult.com, 1 tccmb.com, 1 tccportal.com, 1 tcdn.tech, 1 @@ -114853,6 +116456,7 @@ tcl.sh, 1 tcmk-tomsk.ru, 1 tcnapplications.com, 1 tco.zapto.org, 1 +tcoa.tk, 1 tcpdf.org, 1 tcpride.org, 1 tcptun.com, 1 @@ -114913,6 +116517,7 @@ teacherquotes.gq, 1 teachersasap.info, 1 teachinginhighered.com, 1 teachingtoday.education, 1 +teachking.tk, 1 teachpeople.org, 1 teachwithouttears.com, 1 teacuppersiancats.com, 1 @@ -114928,6 +116533,7 @@ tealdotsinanorangeworld.com, 1 tealdrones.com, 1 tealium.com, 1 team-17.tk, 1 +team-a.tk, 1 team-aaa.tk, 1 team-apollo.tk, 1 team-atomic.tk, 1 @@ -114935,6 +116541,7 @@ team-azerty.com, 1 team-bbd.com, 1 team-building.tirol, 1 team-cut.tk, 1 +team-darkness.tk, 1 team-eklund-motorsport.tk, 1 team-igmetall-atos-muenchen.de, 1 team-io.net, 1 @@ -114967,11 +116574,13 @@ teambee.tk, 1 teambim.eu, 1 teambition.com, 0 teamclean.bg, 1 +teamcode.tk, 1 teamcodeorange.tk, 1 teamcollins.org.nz, 1 teamconf.ru, 1 teamdarko.tk, 1 teamdaylo.xyz, 1 +teamdevelopers.ga, 1 teamdriven.tk, 1 teamdumondelibre.fr, 1 teamengland.tk, 1 @@ -114986,6 +116595,7 @@ teamkilled.tk, 1 teamkiller.tk, 1 teamkoncert.pl, 1 teamleader-apps-by-invantive.com, 1 +teamlightning.tk, 1 teamliquid.com, 1 teamliquid.eu, 1 teamliquidpro.com, 1 @@ -115025,6 +116635,7 @@ teamshirts.no, 1 teamshirts.se, 1 teamsignia.com, 1 teamsomeday.tk, 1 +teamsudan.cf, 1 teamto.do, 1 teamtomorrow.tk, 1 teamtotal.com, 1 @@ -115051,7 +116662,6 @@ teatrarium.com, 1 teatroutopia.tk, 1 teazer.tk, 1 teb-akademia.pl, 1 -tebebo.com, 1 tebian.tk, 1 tebieer.com, 1 tebis-consulting.my-router.de, 1 @@ -115066,6 +116676,7 @@ tebothetooth.com, 1 tebsa.org, 1 tebsonati.tk, 1 tebuscotrabajo.com, 0 +tec24.ga, 1 tec3000.ch, 0 tecart-cloud.de, 1 tecart-system.de, 0 @@ -115139,6 +116750,7 @@ teched-creations.com, 1 techendeavors.com, 1 techexpert.tips, 1 techexplorist.com, 1 +techfibian.tk, 1 techfishnews.com, 1 techformator.pl, 1 techforthepeople.org, 1 @@ -115153,6 +116765,7 @@ techgearlab.com, 1 techgo.re, 1 techguidereview.com, 1 techguides.tk, 1 +techhackhome.tk, 1 techhappy.ca, 1 techideations.com, 1 techie-show.com, 1 @@ -115160,8 +116773,10 @@ techiecomputers.com, 1 techiehall.com, 1 techieidiots.ml, 1 techieshideaway.com, 1 +techiesmart.tk, 1 techiestalk.in, 1 techindiana.tk, 1 +techindo.cf, 1 techinet.pl, 1 techinsurance.com, 1 techiseasy.it, 1 @@ -115196,6 +116811,7 @@ techmusea.com, 1 technamin.com, 1 technavio.com, 1 technewera.com, 1 +technewsetc.tk, 1 technewyork.tk, 1 technic3000.com, 1 technicabv.nl, 1 @@ -115219,6 +116835,8 @@ technodemarkt.bg, 1 technodevelopmentera.tk, 1 technogies.cf, 1 technogps.com, 1 +technogrand.gq, 1 +technoholod.tk, 1 technohonks.tk, 1 technohram.tk, 1 technoids.tk, 1 @@ -115245,12 +116863,14 @@ technologyecho.ga, 1 technologyecho.tk, 1 technologyhound.org, 1 technologyinformation.tk, 1 +technologyintergrity.ga, 1 technologyjust.ga, 1 technologylittle.ga, 1 technologymessenger.ga, 1 technologynewss.tk, 1 technologyscience.tk, 1 technologysi.com, 1 +technologysnapshot.ga, 1 technologysoftware.tk, 1 technologysouthbeach.ga, 1 technologysprint.ga, 1 @@ -115260,6 +116880,7 @@ technologywaterfront.ga, 1 technolution.tk, 1 technomagia.tk, 1 technomix.tk, 1 +technopedia.gq, 1 technorthdakota.tk, 1 technosapien.ml, 1 technosorcery.net, 1 @@ -115272,6 +116893,7 @@ technoswag.ca, 1 technotoday.com.tr, 1 technotronikcanada.ca, 0 technovisioneng.com, 1 +technoweb.ga, 1 technowikis.com, 1 technowise.tk, 1 technowiz.tk, 1 @@ -115293,6 +116915,7 @@ techsalot.com, 1 techsat.tk, 1 techsaviours.online, 1 techsaviours.org, 1 +techsecrets.tk, 1 techserve.ml, 1 techsharetx.gov, 1 techshift.eu, 1 @@ -115312,6 +116935,7 @@ techtouch.tk, 1 techtoydeveloper.tk, 1 techtrader.ai, 1 techtrader.io, 1 +techtrendnews.tk, 1 techtrozan.ga, 1 techunit.org, 1 techvel.pl, 1 @@ -115407,6 +117031,7 @@ teen-porno-video.ru, 1 teengamer.tk, 1 teengamingnights.net, 1 teenmissions.org, 1 +teenmoviesgallery.ga, 1 teenpussypornvid.com, 1 teenringen.nl, 1 teensexgo.com, 1 @@ -115415,6 +117040,7 @@ teenviet.ga, 1 teenwebcams.ml, 1 teenwolfturkey.tk, 1 teenworlds.tk, 1 +teepak.ml, 1 teeqq.com, 1 teerer.tk, 1 teeshirtspace.com, 1 @@ -115493,6 +117119,8 @@ teknow.tk, 1 tekshrek.com, 1 teksol-boat.ru, 1 tekstenzo.com, 1 +tekstover.tk, 1 +tekstpesni.tk, 1 tektouch.net, 1 tektuts.com, 1 telamon.eu, 1 @@ -115508,6 +117136,7 @@ tele-alarme.ch, 1 tele-assistance.ch, 0 tele-points.net, 1 tele.wiki, 1 +teleafrica.ga, 1 telealarme.ch, 0 telealarmevalais.ch, 1 teleblog.gq, 1 @@ -115520,6 +117149,7 @@ telecharger-open-office.com, 1 telecharger-winrar.com, 1 telechirkut.xyz, 1 telecomhelp.ru, 1 +telecommunications.cf, 1 telecommutejobs.com, 1 telecomwestland.nl, 1 teledatos.tk, 1 @@ -115567,6 +117197,7 @@ teleport.sh, 1 teleport.video, 1 teleportart.gq, 1 teleportweb.com.br, 1 +teleradio.ga, 1 teleradio.tk, 1 telesales.guru, 1 teleshkronja.ml, 1 @@ -115580,7 +117211,9 @@ teletexto.com, 1 teletime.com.br, 1 teletxt.me, 1 televentabelcorp.com, 1 +televisioncontests.ga, 1 televisionesendirecto.tk, 1 +televisionsrit.tk, 1 televizeseznam.cz, 1 televotia.ch, 1 telework.gov, 1 @@ -115622,6 +117255,8 @@ tematonline.pl, 1 tembusulaw.com, 1 temdu.com, 0 temertysimcentre.com, 1 +temirgaliev.tk, 1 +temizlik.ml, 1 temizmama.com, 1 teml.in, 1 temnacepel.cz, 1 @@ -115650,6 +117285,7 @@ tempocams.com, 1 tempocams.net, 1 tempocams.org, 1 tempoprimo.com, 1 +temporal.tk, 1 temporalmotivation.com, 1 temporaris.com, 1 temporaryair.com, 1 @@ -115714,6 +117350,7 @@ tennispensacola.com, 1 tennisportal.com.ua, 1 tennisschool.tk, 1 tennistalk.tk, 1 +tennisweb.cf, 1 tenno.tools, 1 tenon-backup.com, 1 tenshindo.ne.jp, 1 @@ -115768,6 +117405,7 @@ terabyteit.co.uk, 1 teracloud.at, 1 teradatta.ga, 1 teradatta.gq, 1 +teradatta.tk, 1 teramind.co, 1 teranacreative.com, 1 terapeuticaenalza.es, 1 @@ -115781,6 +117419,7 @@ tercelonlinelat.tk, 1 tercosdemaria.com.br, 1 terence2008.info, 1 terengganudaily.tk, 1 +terenska-edinica.tk, 1 terento.org, 1 tereotech.net, 1 teritwarsj.org, 1 @@ -115857,7 +117496,9 @@ terrenal.tk, 1 terrenasparadise.com, 1 terres-et-territoires.com, 1 terresmagiques.com, 0 +territoriocuchero.tk, 1 territoriya.tk, 1 +territory.cf, 1 terrorbilly.com, 1 terrorblast.tk, 1 terrorism.lol, 1 @@ -115866,6 +117507,7 @@ terryburton.co.uk, 1 terrybutler.co.uk, 0 terryjohnsononline.com, 1 terryoconnor.org, 1 +ters.ga, 1 terudon.com, 1 terumoindia.com, 1 tervelde.com, 1 @@ -115879,6 +117521,7 @@ tesharp.com, 1 teskaassociates.com, 1 teskalabs.com, 1 tesla-fire.com, 1 +tesla-tula.tk, 1 tesladeaths.com, 1 teslamagician.com, 1 teslamate.ca, 1 @@ -115891,6 +117534,7 @@ test-coz.online, 1 test-do.space, 1 test-eligibilite-isolation.com, 1 test-iq.gq, 1 +test-my.tk, 1 test-na-beremennost.tk, 1 test-online.tk, 1 test-school.ml, 1 @@ -115907,7 +117551,10 @@ testapfnxg.com, 1 testbed.fi, 1 testbirds.cz, 1 testbirds.sk, 1 +testcoz.tk, 1 +testdemoweb.tk, 1 testdevelocidad.com, 1 +testdomens.ga, 1 testecta.top, 1 tested.email, 1 testehogs.tk, 1 @@ -115927,11 +117574,13 @@ testing-server.tk, 1 testingbot.com, 1 testingtask.tk, 1 testiowa.gov, 1 +testispdomain.ml, 1 testkinja.com, 1 testkolik.com, 1 testmx.email, 1 testmx.eu, 1 testmx.org, 1 +testmy.tk, 1 testnet-faucet.com, 1 testomato.com, 1 testone.com.tr, 1 @@ -115940,6 +117589,7 @@ testosterone-complex.com, 1 testosteronedetective.com, 1 testovaci.ml, 1 testpinoy.com, 1 +testpool.gq, 1 testpornsite.com, 1 testprep.online, 1 testpsicotecnicos.com.es, 1 @@ -115949,12 +117599,16 @@ tests-und-tipps.info, 1 tests.pp.ru, 1 tests.school, 1 testsab.com, 1 +testscript.ml, 1 testservice.nl, 1 testsitefortask.xyz, 1 +testsity.tk, 1 testsnelcovid.nl, 1 testspsicotecnicos.org, 1 testsuite.org, 1 +testsweb.ml, 1 testthis.cf, 1 +testyonline.tk, 1 tetangers.tk, 1 tetedelacourse.ch, 1 tetete-no-te.com, 1 @@ -115967,9 +117621,11 @@ tetonas.tk, 1 tetorix.gq, 1 tetovaweb.tk, 1 tetovo.tk, 1 +tetrabyte.tk, 1 tetracyclin.gq, 1 tetracyclin.ml, 1 tetracyclin.tk, 1 +tetracycline500mg.ga, 1 tetraktus.org, 1 tetramax.eu, 1 tetrarch.co, 1 @@ -115984,6 +117640,7 @@ teufel-cloud.ddns.net, 1 teufelswerk.net, 1 teulon.eu, 1 teungedj.de, 1 +teunmulder.tk, 1 teunstuinposters.nl, 1 teusink.eu, 1 teutonia-grossenlueder.de, 1 @@ -116001,6 +117658,7 @@ texasdivorceforall.com, 1 texasgynecomastia.com, 1 texashealthtrace.gov, 1 texashomesandland.com, 1 +texasnewsusa.tk, 1 texasonesource.com, 1 texasonlinedivorce.com, 1 texasonlinemarriagecounseling.com, 1 @@ -116024,17 +117682,20 @@ texnogu.ru, 1 texnoguru.tk, 1 texnolog.tk, 1 texnotroniks.tk, 1 +texosmotr.tk, 1 texpresspainting.com, 1 textadventure.tk, 1 textassistant.ga, 1 textbrawlers.com, 1 textcleaner.net, 1 +textcounter.tk, 1 texteditor.co, 1 texter-linz.at, 1 texter.at, 1 texterseo.at, 1 texterseo.de, 1 textgen.pl, 1 +textil-kyoto.tk, 1 textiles.tk, 1 textinmate.com, 1 textlinktausch.tk, 1 @@ -116043,6 +117704,7 @@ textpages.tk, 1 textpattern.com, 1 textpro.xyz, 1 textprotocol.org, 1 +textsite.tk, 1 textualapp.com, 1 textundblog.de, 1 textura.bg, 1 @@ -116139,12 +117801,15 @@ thaihong.com, 1 thaihotmodels.tk, 1 thailandguru.properties, 1 thailandhotel.tk, 1 +thailandpropertylisting.ga, 1 thailandtrends.com, 1 +thailandvariety.cf, 1 thaimega.club, 1 thaiorchidpetoskey.com, 1 thaipbspodcast.com, 1 thaiportal.gq, 1 thairad.com, 1 +thais.tk, 1 thaisurveys.com, 1 thaitonic.de, 1 thaiwrestling.tk, 1 @@ -116188,12 +117853,14 @@ thatguy.rocks, 1 thatmy.com, 1 thatshayini-sivananthan.fr, 1 thatssodee.com, 1 +thaumaturgian-national-university.tk, 1 thavmacode.gr, 1 thawte.com.ru, 1 thc-stadvdzon.nl, 1 thca.ca, 1 thda.org, 1 the-ace.tk, 1 +the-allmighty-mike.tk, 1 the-archive.io, 1 the-archive.ml, 1 the-azad.com, 1 @@ -116217,6 +117884,7 @@ the-jeuxflash.com, 1 the-lfb.tk, 1 the-little-home.com, 1 the-mermaid.tk, 1 +the-metropolitans.tk, 1 the-muddy-trophy-team.tk, 1 the-mudmen.tk, 1 the-mystery.org, 0 @@ -116239,6 +117907,7 @@ the-word-smith.com, 1 the-world.tk, 1 the-zenti.de, 1 the12by12.com, 1 +the13thtribe.tk, 1 the3musketeers.biz, 1 the51news.ga, 1 the5th.nl, 1 @@ -116280,7 +117949,9 @@ theapplewiki.com, 1 theappliancedepot.co.uk, 1 theapriltears.tk, 1 theaps.net, 0 +theaquila.tk, 1 thearcheryguide.com, 1 +thearchimag.tk, 1 thearizonatribune.com, 1 theartofe.fr, 1 theasianshooters.com, 1 @@ -116289,6 +117960,7 @@ theataraxia.tk, 1 theataraxiazine.tk, 1 theater.cf, 1 theaterbyte.com, 1 +theaterfrederik.tk, 1 theatergroep-o.nl, 1 theaterreichenhall.tk, 1 theatersydney.com, 1 @@ -116297,6 +117969,7 @@ theathletic.com, 1 theatre-schools.com, 1 theatrepremol.com, 1 theatresocietyguts.tk, 1 +theatresuite.tk, 1 theatresydney.com, 1 theaus.xyz, 1 theaustinbulldog.org, 1 @@ -116331,8 +118004,11 @@ theberries.tk, 1 thebertian.com, 1 thebestfun.co.uk, 1 thebestlaos.ga, 1 +thebestnews.ga, 1 thebestofthesprings.com, 1 thebestpersonin.ml, 1 +thebestshopping.tk, 1 +thebigbigworld.tk, 1 thebigbitch.nl, 1 thebigdatacompany.com, 1 thebigdig.xyz, 1 @@ -116372,6 +118048,7 @@ theboats.online, 1 theboats.pro, 1 theboats.site, 1 thebobcoin.io, 1 +thebodylanguageguide.tk, 1 thebodyshop.bg, 1 theboltway.com, 1 thebonerking.com, 1 @@ -116382,6 +118059,7 @@ thebouncedepartment.co.uk, 1 thebouncyman.co.uk, 1 theboxofcarlos.com, 1 theboxoutofthebox.com, 1 +theboysrepublic.tk, 1 thebrainfactory.eu, 1 thebraininitiative.gov, 1 thebrainwash.tk, 1 @@ -116395,6 +118073,7 @@ thebroadcastknowledge.com, 1 thebrookeb.com, 1 thebsclub.com, 1 thebsl.ca, 1 +thebss.tk, 1 thebte.com, 1 thebucklandreligion.tk, 1 thebucknetwork.com, 1 @@ -116447,7 +118126,7 @@ thecitywarehouse.clothing, 1 theclarke.house, 1 theclarke.wedding, 1 theclearingnw.com, 1 -theclonker.de, 1 +theclonker.de, 0 thecloudadmin.eu, 1 thecluster.xyz, 1 thecnstore.com, 1 @@ -116460,7 +118139,9 @@ thecommonmen.tk, 1 thecommunitymakers.club, 1 thecompany.pl, 1 theconcordbridge.azurewebsites.net, 1 +thecondemned.tk, 1 theconsultant.jp, 1 +theconsultingpeople.tk, 1 thecontentcloud.com, 1 theconversation.com, 1 thecook.com.co, 1 @@ -116471,8 +118152,10 @@ thecotsworth.com, 1 thecoverlot.com, 1 thecovky.gov, 1 thecowboy.cafe, 1 +thecowquerie.tk, 1 thecr3ative.tk, 1 thecraftingstrider.net, 1 +thecrazybrains.tk, 1 thecrazytravel.com, 1 thecreativeedgeinc.com, 1 thecrew-exchange.com, 1 @@ -116501,11 +118184,11 @@ thedark.ga, 1 thedark1337.com, 1 thedarkages.tk, 1 thedarkartsandcrafts.com, 1 +thedarkcolonyfansite.tk, 1 thedarkfusion.tk, 1 thedarksidesoftwaresecurity.ga, 1 thedarkteam.tk, 1 thedave.link, 1 -thedave.me, 1 thedave.photos, 1 thedawningofdarkness.tk, 1 thedeathmachine.tk, 1 @@ -116521,7 +118204,10 @@ thedevastatedrealm.tk, 1 thedevilsbrigade.com, 1 thedevilwearswibra.nl, 1 thedevrycommonsbrasil.com, 0 +thedietsolutionprog.tk, 1 +thedigitalparadox.tk, 1 thedinnerdetective.com, 1 +thediscforum.tk, 1 thediscovine.com, 1 thediyvibe.com, 1 thedjhookup.com, 1 @@ -116533,6 +118219,7 @@ thedrakesdebut.com, 1 thedrawbacks.tk, 1 thedriftuniversity.com, 1 thedrivers.tk, 1 +thedrizzle.tk, 1 thedronechart.com, 1 thedroneely.com, 1 theduchessbudapest.com, 1 @@ -116590,6 +118277,7 @@ theferrarista.com, 0 thefibreapp.com, 1 thefinalconflict.tk, 1 thefireandthefreaks.com, 1 +thefishshop.ga, 1 thefitcare.com, 1 thefitcareerist.com, 1 thefixhut.com, 1 @@ -116612,6 +118300,7 @@ thefox.com.fr, 1 thefoxstrousers.co.nz, 0 thefoxtalk.com, 0 thefreebay.tk, 1 +thefreethinker.tk, 1 thefrenchconnection.tk, 1 thefridaycinema.com, 1 thefriedzombie.com, 1 @@ -116640,6 +118329,7 @@ thegeekdiary.com, 1 thegeeklab.de, 1 thegemriverside.com.vn, 1 thegenesisshop.com, 1 +thegeniusdz.tk, 1 thegentleman.tk, 1 thegeriatricdietitian.com, 1 thegermancoder.com, 1 @@ -116660,6 +118350,7 @@ thegoldandsilverexchange.com, 1 thegolden.com, 1 thegoodveggie.com, 1 thegoodvybe.ml, 1 +thegospell.tk, 1 thegraduatesalon.co.uk, 1 thegrandline.tk, 1 thegrandtour.tk, 1 @@ -116689,17 +118380,22 @@ thehamiltoncoblog.com, 1 thehammerfund.com, 1 thehamptonsvegan.com, 1 thehappeny.com, 1 +thehappyxwife.ga, 1 thehasanyildirim.tk, 1 thehashagency.com.au, 1 +thehassanmusic.tk, 1 thehasty.com, 1 thehaxbys.co.uk, 1 thehaze.org, 1 +theheadplug.tk, 1 theheatingoilclub.co.uk, 1 thehelper.tk, 1 thehillstx.gov, 1 +thehiltonfirm.tk, 1 thehivedesign.org, 1 thehoff.ddnss.de, 1 thehollandfam.com, 1 +theholloways.tk, 1 thehomebakery.ie, 1 thehomemademasks.com, 1 thehomeofthefuture.com, 1 @@ -116714,6 +118410,7 @@ thehorsesadvocate.com, 1 thehosmers.com, 1 thehotfix.net, 1 thehotness.tech, 1 +thehotrocks.tk, 1 thehouseofchronic.com, 1 thehouseofcode.com, 1 thehowlinwolfcafe.ga, 1 @@ -116728,6 +118425,7 @@ theilluminatisociety.org, 0 theimagefile.com, 1 theimaginationagency.com, 1 theinboxpros.com, 1 +theindiangraph.tk, 1 theindiantimes.in, 1 theindiemood.com, 1 theinflatables-ni.co.uk, 1 @@ -116736,6 +118434,7 @@ theinitium.com, 0 theinnerprism.com, 1 theinput.com, 1 theinsightsfamily.com, 1 +theinstitute.cf, 1 theintentionalgolfer.com, 1 theintercept.com, 1 theinternationalgeekconspiracy.eu, 1 @@ -116759,6 +118458,7 @@ thejukebox.tk, 1 thejump.live, 1 thejunctionstudios.com, 1 thejunkfiles.com, 1 +thekalakriti.tk, 1 thekapi.xyz, 1 thekev.in, 1 thekeymusic.com, 1 @@ -116820,12 +118520,14 @@ thelostfreighter.com, 1 thelostyankee.com, 1 thelotter.club, 1 thelounge.chat, 1 +thelwallrangers.tk, 1 themacios.com, 1 themadlabengineer.co.uk, 1 themagazine.my, 1 themagician.tk, 1 themallards.info, 1 themallrats.tk, 1 +themandogs.tk, 1 themaniaks.tk, 1 themarkup.org, 1 themarshallproject.org, 1 @@ -116837,6 +118539,7 @@ themathbehindthe.science, 1 themathergroup.com, 1 themathscentre.com, 1 themattresswarehouse.co.za, 1 +thematyper.tk, 1 themealpantry.com.au, 1 themeapps.ga, 1 themeaudit.com, 1 @@ -116866,6 +118569,7 @@ themiracle.tk, 1 themirc.tk, 1 themizellbrothers.tk, 1 themlmsuccessnow.tk, 1 +themodernreviewer.ga, 1 themomentratchada19.com, 1 themomstudio.tk, 1 themoneyconverter.com, 1 @@ -116919,6 +118623,7 @@ theobora.fr, 1 theobromos.fr, 0 theoc4ever.tk, 1 theocharis.org, 1 +theocjournal.tk, 1 theocoffee.com, 1 theocracy.tk, 1 theocratic.cf, 1 @@ -116931,6 +118636,7 @@ theojellis.com, 1 theojones.name, 1 theokouzelis.com, 1 theoldbrewhouse.info, 1 +theoldmill.tk, 1 theoldnews.net, 1 theoldsewingfactory.com, 1 theolodewijk.nl, 1 @@ -116947,6 +118653,7 @@ theoosmetalart.nl, 1 theopaczek.com, 1 theopera.tk, 1 theoperators.tk, 1 +theophil.tk, 1 theoriecheck.de, 1 theoriginalassistant.com, 1 theoriginalcandid.com, 1 @@ -116966,11 +118673,14 @@ theoverfly.co, 1 theoverground.tk, 1 theowlclub.net, 1 thepaffy.de, 1 +thepaleodiettips.tk, 1 thepandacustom.com, 1 +theparachafamily.tk, 1 theparallelrevolution.com, 1 theparklane-sukhumvitbearing.com, 1 theparkwoodmanor.com, 1 theparoxetine.gq, 1 +theparticipants.tk, 1 thepartner.co.uk, 1 thepartydoctors.co.uk, 1 thepathsofdiscovery.com, 1 @@ -116997,6 +118707,7 @@ thepilotwoman.ml, 1 thepinecones.tk, 1 thepinfluencers.com, 1 thepioneers.nl, 1 +thepiratebay.cf, 1 thepiratebay.net, 1 thepiratesociety.org, 1 thepitsurfhire.co.uk, 1 @@ -117010,10 +118721,12 @@ thepoetryclub.tk, 1 thepokerbank.com, 1 thepool.tk, 1 theposhfudgecompany.co.uk, 1 +thepowerboys.tk, 1 thepressleygirls.com, 1 thepriceisright.tk, 1 theprimetalks.com, 0 theprincegame.com, 1 +theprinceshort.tk, 1 thepriorybandbsyresham.co.uk, 1 theprivacysolution.com, 1 theproject.cf, 1 @@ -117045,9 +118758,12 @@ therapypartner.com, 1 therapyportal.com, 1 therapyservices.co.nz, 1 therapysxm.com, 0 +therasmusgt.tk, 1 +therasmusperu.tk, 1 therattrick.com, 1 theravada.tk, 1 thereadingresidence.com, 1 +thereafter.ga, 1 thereal.tk, 1 therealchamps.com, 1 therealcomp.ga, 1 @@ -117059,8 +118775,10 @@ theredsgazette.tk, 1 thereisnocloud.fr, 1 thereload.com, 1 therenderingmachine.com, 1 +therenegade.tk, 1 thereptiles.tk, 1 theresa-mayer.eu, 1 +theresingles.tk, 1 therestaurantstore.com, 1 theresumeapp.com, 1 theretro.ru, 1 @@ -117068,6 +118786,7 @@ therevenge.me, 1 therevolutionist.tk, 1 therewill.be, 0 therhetorical.ml, 0 +therichardsfamily.tk, 1 therisk.global, 1 therivercrosswarwick.co.uk, 1 thermalbad-therme.de, 1 @@ -117077,22 +118796,28 @@ thermique.ch, 0 thermity.com, 1 thermolamina.nl, 1 thermorhythm.com, 1 +thermostat.gq, 1 thermowood-bkh.ru, 1 +therniakov.tk, 1 theroadrunners.tk, 1 theroams.co.uk, 1 theroccos.us, 1 therockawaysny.com, 0 theroguestormtrooper.com, 1 +therokasshow.tk, 1 theroks.com, 0 theromexchange.com, 1 theroot.com, 1 therootshive.com, 1 therowdyrose.com, 1 +theroyal.tk, 1 therra.eu, 1 therugswarehouse.co.uk, 1 theruleslawyer.net, 1 therumfordcitizen.com, 1 +therunawayspremiere.tk, 1 theruncibleraven.com, 1 +therusnews.tk, 1 therustyspoon.net, 1 therworth.com, 1 therworth.eu, 1 @@ -117108,8 +118833,10 @@ thesarogroup.com, 1 thesatriantoshow.tk, 1 thesaturdaypaper.com.au, 1 thesaurus.net, 1 +thescienceofdeduction.tk, 1 thescientists.nl, 1 thescriptzone.tk, 1 +theseal.tk, 1 thesearch.com.tw, 1 thesecondsposts.com, 0 thesecurityvault.com, 0 @@ -117139,6 +118866,7 @@ theshroomery.org, 1 thesigit.tk, 1 thesignacademy.co.uk, 1 thesignalco.com.au, 1 +thesilentfew.tk, 1 thesilentlink.org, 1 thesilentplanet.tk, 1 thesilverdaisy.com, 1 @@ -117164,10 +118892,12 @@ thesoundproofwindows.co.uk, 1 thesoundstageatstrangeland.com, 1 thespacegame.tk, 1 thespicygadgematics.com, 1 +thespiritfm.tk, 1 thesslstore.com, 1 thesslstore.in, 1 thestable.com, 1 thestachelfisch.me, 1 +thestandards.tk, 1 thestatementjewelry.com, 1 thestationatwillowgrove.com, 1 thestatuspage.com, 1 @@ -117176,9 +118906,11 @@ thestitchynerd.com, 1 thestockoasis.com, 1 thestopoff.tk, 1 thestoragebay.co.uk, 1 +thestore.tk, 1 thestoryshack.com, 0 thestral.pro, 1 thestralbot.com, 1 +thestrangenessofthings.tk, 1 thestrategyagency.com.au, 1 thestreamable.com, 1 thestreet.cz, 1 @@ -117191,6 +118923,7 @@ thesunshinecoasttourcompany.com.au, 1 thesupersunday.tk, 1 thesuppercircle.com, 1 thesurgeons.sg, 1 +theswanstation.tk, 1 theswanwindsor.co.uk, 1 theswimdoctors.com, 0 theswissbay.ch, 1 @@ -117202,10 +118935,12 @@ thetassos.com, 1 thetattooedpreacher.com, 1 thetaylorreachgroup.com, 1 theteaaffair.com, 1 +theteaguemovie.tk, 1 thetebodifference.com, 1 thetechdude.ga, 1 thetechsite.net, 1 thetfordvt.gov, 1 +thetherapist.tk, 1 thethinktankpodcast.co, 1 thethreadsmiths.com.tw, 1 thethreepercent.marketing, 1 @@ -117219,6 +118954,7 @@ thetogbox.cf, 1 thetomharling.com, 1 thetopflight.com, 1 thetopmovie.gq, 1 +thetopsecretepisode.tk, 1 thetorlock.com, 1 thetotalemaildelivery.com, 1 thetoto.tk, 1 @@ -117242,6 +118978,8 @@ theunconventionalconventionists.tk, 1 theundefeated.com, 1 theunderzone.tk, 1 theunitehistoryproject.org, 1 +theuniversallover.tk, 1 +theuniversitiesofasia.ga, 1 theunknownfilmcompany.com, 1 theunleashedpet.com, 1 theunwrittenletters.tk, 1 @@ -117266,6 +119004,7 @@ thevillasatparkaire.com, 1 thevintagenews.com, 0 theviolenceofdevelopment.com, 1 thevirajshelke.com, 1 +thevirgin.tk, 1 thevirtualbookkeepers.com, 0 thevirtualdetective.games, 1 thevirtuousdog.com, 1 @@ -117278,10 +119017,12 @@ thevoid.one, 1 thevolte.com, 1 thevoya.ga, 0 thewagesroom.co.uk, 1 +thewalkerz.tk, 1 thewallet.today, 1 thewanderersclub.co.za, 1 thewarehousefellowship.org, 1 thewatchdog.com.br, 1 +thewave.tk, 1 thewaxhouse.academy, 1 thewayofislam.ml, 1 thewayofthedojo.com, 1 @@ -117295,6 +119036,7 @@ thewebguru.net, 1 thewebhut.com.au, 1 thewebmasters.tk, 1 thewebsitemarketingagency.com, 1 +theweed.tk, 1 thewest.tk, 1 thewhiteboxxx.com, 1 thewhitehorses.tk, 1 @@ -117308,6 +119050,7 @@ thewindowcleaningexpert.com, 1 thewindowcleaningexperts.com, 1 thewindowcleaningexperts.net, 1 thewindowsclub.com, 1 +thewinedelivery.ga, 1 thewisdomtrust.org.uk, 1 thewish.ml, 1 thewish.tk, 1 @@ -117325,12 +119068,16 @@ theworldexchange.net, 1 theworldexchange.org, 1 theworldsbestmassagechairs.com, 1 theworldsend.eu, 1 +theworldtakes.tk, 1 theworser.tk, 1 +thewraithmovie.tk, 1 thewrenchmonkey.ca, 1 thewrightflyer.com, 1 thewritegrl.com, 1 thewrittencrown.com, 0 +thexalla.tk, 1 thexme.de, 1 +thexpert.ml, 1 theyacht.ga, 1 theyakshack.co.uk, 1 theyarnhookup.com, 0 @@ -117347,8 +119094,10 @@ thezero.org, 1 thezillersathenshotel.com, 1 thfaid.org, 1 thgstardragon.com, 1 +thhost.tk, 1 thiagohersan.com, 1 thiagolosneves.com.br, 1 +thiagoribeiro.ml, 1 thiasil.com, 1 thibault-ml.com, 1 thibaultbaheux.com, 0 @@ -117411,6 +119160,7 @@ thinkdigital.tk, 1 thinkel.tk, 1 thinkelectric.cf, 1 thinkelectric.gq, 1 +thinkelectric.ml, 1 thinkfortune.co, 1 thinkforyourself.tk, 1 thinkheaddesign.com, 1 @@ -117431,6 +119181,7 @@ thinxtream.com, 1 thirdbearsolutions.com, 1 thirdgenphoto.co.uk, 1 thirdman.auction, 0 +thirdwave.tk, 1 thirdwaverevenue.com, 1 thirdworld.moe, 1 thirstyjourneys.com, 1 @@ -117441,6 +119192,7 @@ thiruvarur.org, 1 thiry-automobiles.net, 1 thisbowin.com, 1 thiscloudiscrap.com, 0 +thisdayinhockey.tk, 1 thisdot.site, 1 thise.dk, 1 thisfreelife.gov, 1 @@ -117453,6 +119205,7 @@ thisismit.ch, 1 thisisrapt.com.au, 0 thisisreno.com, 1 thisistechtoday.com, 1 +thisistwice.tk, 1 thisiswhywemom.com, 1 thismatter.com, 1 thismumdoesntknowbest.com, 1 @@ -117621,6 +119374,7 @@ threv.net, 1 thriftdiving.com, 1 thriftywp.com, 1 thrillernyc.com, 1 +thrillkill.tk, 1 thrivetours.ca, 0 throneofmolok.tk, 1 throopny.gov, 1 @@ -117631,6 +119385,7 @@ throwable.website, 1 throwaway.link, 1 throwmails.com, 1 throwpass.com, 1 +thrustrules.tk, 1 thrw.ml, 1 thsc.us, 1 thsconstructors.com, 1 @@ -117639,12 +119394,15 @@ thsecurity.cz, 1 thterrain.com, 1 thuenhapho.com, 1 thues.eu, 1 +thugcityrecords.tk, 1 thuisverplegingvandermeiren.be, 1 thullbery.com, 1 thumbsnap.com, 1 thumbsupcandy.com, 1 thumbtack.com, 1 thummer.net, 1 +thunderbase.tk, 1 +thunderbolt.tk, 1 thunderboltlaptop.com, 1 thundercloud.onthewifi.com, 1 thunderfield-boat.co.uk, 1 @@ -117686,8 +119444,10 @@ ti.blog.br, 0 ti780.com, 1 tiagocasalribeiro.ml, 1 tiagomoraismorgado.tk, 1 +tiagoneves.tk, 1 tiagonunes.pt, 1 tiagosimao.com, 1 +tiamabi.tk, 1 tiamarcia.com.br, 1 tian123.com, 1 tian888.com, 1 @@ -117712,6 +119472,7 @@ tianyis.net, 1 tianyou-ecjtu.com, 1 tiaria.id, 1 tiaskipin.tk, 1 +tiavoo.com, 1 tib1.com, 1 tibber.com, 1 tibberdev.com, 1 @@ -117722,6 +119483,7 @@ tibicinagarricola.com, 1 tibipg.com, 1 tibovanheule.site, 1 tibovanheule.space, 0 +tiburgundysi.ga, 1 ticalcgames.tk, 1 ticfleet.com, 1 tichdiem80.com, 1 @@ -117780,6 +119542,7 @@ tid.jp, 1 tidal.ninja, 1 tide.com, 0 tidecommunity.tk, 1 +tidehunter.ml, 1 tidimension.tk, 1 tidlook.co.il, 1 tidy.chat, 1 @@ -117812,6 +119575,7 @@ tiergear.com.au, 1 tiernanx.com, 1 tieronegraphics.com, 1 tierparadies-muhrielle.org, 1 +tierra-indomables.tk, 1 tierracenter.com, 1 tierradeayala.com, 1 tierrahost.com, 1 @@ -117829,6 +119593,7 @@ tifenn.eu, 1 tifenn.nl, 1 tiffanitooley.tk, 1 tiffany-angel.com, 1 +tiffany-remixed.tk, 1 tiffany.moe, 1 tiffanyblooms.ru, 1 tiffanywatson.xyz, 1 @@ -117841,12 +119606,14 @@ tiger-seo.com, 1 tigercam.cl, 1 tigerdile.com, 1 tigerfm.tk, 1 +tigerforce.tk, 1 tigergroup.tk, 1 tigernero.duckdns.org, 1 tigernode.com, 1 tigernode.net, 1 tigertonwi.gov, 1 tigerupload.tk, 1 +tigerzplace.tk, 1 tiggeriffic.com, 1 tiggi.pw, 1 tightassporntube.com, 1 @@ -117870,6 +119637,7 @@ tik.edu.ee, 1 tiki-god.co.uk, 1 tikitak-o-rama.tk, 1 tikkertickets.ee, 1 +tikona.ga, 1 tiktak.su, 1 tiktok-download.io, 1 tiktokgirls.live, 1 @@ -117882,6 +119650,7 @@ tilde.institute, 1 tilde.link, 1 tildes.net, 1 tilecenters.com, 1 +tileco.ga, 1 tileflooringideas.gq, 1 tileflooringideas.ml, 1 tilellit.pro, 1 @@ -117894,6 +119663,7 @@ tilikum.io, 1 tilipalvelutuominen.fi, 1 tilisi.ga, 1 tilitoimistokota.fi, 1 +tilitop.tk, 1 till-grossmann.de, 1 till.im, 1 tillamookcounty.gov, 1 @@ -117922,6 +119692,7 @@ timatooth.com, 1 timawesomeness.com, 1 timbarlotta.com, 1 timbercreekcanyontx.gov, 1 +timberjewelleryboxes.ga, 1 timberjoineryperth.com.au, 1 timberkel.com, 1 timbers.space, 1 @@ -117939,6 +119710,7 @@ timdemisch.online, 1 timdoug.com, 1 time-business.tk, 1 time-hotel.cf, 1 +time-killers.tk, 1 time.cy, 1 time.gov, 1 time.ly, 1 @@ -117949,6 +119721,7 @@ time4writing.com, 1 timeai.io, 1 timeauction.hk, 1 timebomb.tk, 1 +timebookings.cf, 1 timebox.tk, 1 timebutler.de, 1 timecamp.com, 1 @@ -117960,6 +119733,7 @@ timefor.tk, 1 timeforcoffe.eu, 1 timeglass.de, 1 timeharmony.pl, 1 +timelapsetv.tk, 1 timeless-photostudio.com, 1 timeless-spirit.com, 1 timelesstreasures.tk, 1 @@ -118047,6 +119821,7 @@ timx.uk, 1 timysewyn.be, 0 tina-zander.de, 0 tina.media, 1 +tinaarenaweb.tk, 1 tinakay-photography.com, 1 tinamajorino.tk, 1 tinandthyme.uk, 1 @@ -118054,6 +119829,7 @@ tinapoethe.com, 0 tinclip.com, 1 tindallriley.co.uk, 1 tinder.wiki, 1 +tinderphotos.ga, 1 tineb.be, 1 tinf.de, 1 tinf15b4.de, 1 @@ -118063,6 +119839,7 @@ tinhchattrangda.vn, 1 tinhlai.gq, 1 tinint.com, 1 tink.network, 1 +tinka.tk, 1 tinker.career, 1 tinkerbeast.com, 1 tinkerbell.space, 1 @@ -118079,6 +119856,7 @@ tinminnow.me, 1 tinneke.tk, 1 tinnhanhvietnam.tk, 1 tinnitus.tirol, 1 +tintamas.tk, 1 tinte24.de, 1 tintenfix.net, 1 tintiger.com, 1 @@ -118087,6 +119865,7 @@ tintuonmobile.tk, 1 tinturanaturale.it, 1 tiny-house.ro, 1 tiny-img.com, 1 +tiny-tattoos.tk, 1 tiny777.com, 1 tinychen.com, 1 tinycrm.pl, 1 @@ -118099,6 +119878,7 @@ tinyhousebarat.com, 1 tinyhousebarat.de, 1 tinyhousefinance.com.au, 1 tinylan.com, 1 +tinylink.cf, 1 tinyppt.com, 1 tinyproxy.cf, 1 tinyproxy.ga, 1 @@ -118128,9 +119908,13 @@ tipranks.com, 1 tips4gamers.com, 1 tips4india.tk, 1 tipsavvy.ca, 1 +tipsfinal.tk, 1 tipsforgamers.com, 1 +tipskanalen.cf, 1 +tipslifetimefitness.ga, 1 tipslifetimefitness.gq, 1 tipsmake.com, 1 +tipsoftech.tk, 1 tipsplants.com, 1 tipstersweb.com, 1 tipsypresent.com, 1 @@ -118139,12 +119923,14 @@ tipwho.com, 1 tiqets.com, 1 tir-mauperthuis.fr, 1 tiraloche.com, 1 +tirana-chat.tk, 1 tirandoalplato.tk, 1 tiraspol.tk, 1 tircentrale.net, 0 tirebichon.eu, 1 tiremoni.com, 1 tirflesia.it, 1 +tirgul-vertiujeni.tk, 1 tirion.network, 0 tirion.org, 0 tirionnetwork.de, 1 @@ -118228,6 +120014,7 @@ tkarstens.de, 1 tkcafe.net, 1 tkd-itf.tk, 1 tkgpm.com, 1 +tkhirianov.tk, 1 tkiely.net, 1 tkirch.de, 1 tkmr-gyouseishosi.com, 1 @@ -118353,6 +120140,7 @@ to4ka.md, 0 toabr.de, 1 toad.ga, 1 toast.al, 0 +toastmasters.tk, 1 toaw.de, 1 tob-rulez.de, 1 tobacco-shop.co.uk, 1 @@ -118406,6 +120194,7 @@ tobischo.de, 1 tobnm.gov, 1 tobrien.me, 1 tobruxo.com.br, 1 +tobtennis.tk, 1 toby.website, 1 toby3d.me, 1 tobyalden.com, 1 @@ -118436,6 +120225,7 @@ today.ng, 1 todayer.ru, 1 todayfinance.news, 1 todayfinancial.news, 1 +todaylearn.tk, 1 todaymeow.com, 1 todayprice.ga, 1 todaysbestinsurance.com, 1 @@ -118445,6 +120235,7 @@ toddexler.com, 1 toddfry.com, 1 toddlerleaf.com, 1 toddmath.com, 1 +toddmclauchlin.cf, 1 toddmclauchlin.ga, 1 toddmclauchlin.ml, 1 toddmissiontx.gov, 1 @@ -118466,6 +120257,7 @@ todoist.com, 1 todoist.help, 1 todoist.net, 1 todokete.ga, 1 +todolex.tk, 1 todon.fr, 1 todoporjesus.net, 1 todoscheduler.de, 1 @@ -118474,6 +120266,7 @@ todoscomciro.com, 1 todoseaprende.com, 1 todosquerem.uno, 1 todosrv.com, 1 +todotiendas.tk, 1 todotpvs.com, 1 toeglhofer.at, 1 toeightycountries.com, 1 @@ -118520,6 +120313,7 @@ tokaishishisetsukanrikyokai.jp, 1 tokarconsulting.com, 1 tokathaberleri.tk, 1 tokdeccor.com.br, 1 +tokelaunso.tk, 1 token.im, 1 tokenlon.im, 0 tokens.net, 1 @@ -118533,6 +120327,7 @@ tokinohikari.com, 1 tokinokakehashi.com, 1 tokinosasae.com, 1 tokio.fi, 1 +tokiohotel-world.tk, 1 tokiohotelcroatia.tk, 1 tokka.com, 1 tokke.dk, 1 @@ -118546,6 +120341,7 @@ tokocuan.id, 1 tokoindo.top, 1 tokokujogja.com, 1 tokomoto-w.com, 1 +tokopedia.ga, 1 tokotimbangandigitalmurah.web.id, 0 toku.co, 1 tokugai.com, 1 @@ -118576,6 +120372,8 @@ tolibanana.com, 1 tolkienfans.tk, 1 tolkienlibrary.com, 1 tolkienmusic.tk, 1 +tolkienwiki.ml, 1 +tolkovanie-sna.tk, 1 tollandct.gov, 1 tolle-wolke.de, 1 tollerunterricht.com, 1 @@ -118588,6 +120386,7 @@ tolmaidis.com, 1 tolman.nl, 1 tolmandrywall.com, 0 tolnavar.hu, 1 +tolstoevsky.tk, 1 tolucreaciones.com, 1 tom-geiger.de, 1 tom-hanks.tk, 1 @@ -118624,6 +120423,7 @@ tombaker.me, 0 tombclan.ga, 1 tombeantx.gov, 1 tombolaarcade.co.uk, 1 +tomboonen.tk, 1 tomboy.org, 1 tombrossman.com, 1 tombu.biz, 0 @@ -118631,6 +120431,7 @@ tombu.info, 0 tombu.org, 0 tombu.xyz, 0 tomchen.org, 1 +tomco-corporation.tk, 1 tomcort.com, 1 tomd.ai, 1 tomdougiamas.com, 1 @@ -118680,6 +120481,7 @@ tomoarigato.com, 1 tomodachi.tk, 1 tomofsweden.com, 1 tomoko-clinic.jp, 1 +tomorrow-traxx.tk, 1 tomosm.net, 1 tomoveornot.de, 1 tomphenix.com, 1 @@ -118694,7 +120496,12 @@ toms.ovh, 1 tomschlick.com, 1 tomsdevsn.me, 1 tomsick.it, 1 +tomsk.cf, 1 tomsk.ml, 1 +tomsk24.tk, 1 +tomsk365.ga, 1 +tomsknet.tk, 1 +tomsknews.tk, 1 tomslawadvice.com, 1 tomsoft.hr, 1 tomspdblog.com, 1 @@ -118760,6 +120567,7 @@ tonkayagran.ru, 1 tonnycat.com, 1 tono.us, 1 tonorosario.tk, 1 +tonshaiza.tk, 1 tonsit.com, 1 tonsit.org, 0 tonton.cf, 1 @@ -118819,6 +120627,7 @@ tooncastle.tk, 1 toondergroup.com, 1 toonetcreation.com, 1 toonict.nl, 1 +toonmate.tk, 1 toonpool.com, 1 toonsburgh.com, 1 toontown.team, 1 @@ -118829,8 +120638,10 @@ toool.org, 1 toopita.com, 1 toopopular.ga, 1 toot.center, 1 +tootbitco.ml, 1 toothdoc.ca, 1 toothimplantsydney.com.au, 1 +toothless.tk, 1 toothpique.tk, 1 toothsearch.tk, 1 tooti.biz, 1 @@ -118839,8 +120650,11 @@ tootsi.edu.ee, 1 toowoombajazz.com, 1 top-aanbiedingen.nl, 1 top-avis.fr, 1 +top-beauty.cf, 1 top-cena.ru, 1 +top-credit.tk, 1 top-dance.pl, 1 +top-drop.tk, 1 top-electronics.ru, 1 top-frog.com, 1 top-info.ga, 1 @@ -118857,12 +120671,16 @@ top-rensner.de, 1 top-rezepte.de, 1 top-russian.tk, 1 top-schools.tk, 1 +top-secret.tk, 1 +top-service.ml, 1 top-shashlik.com.ua, 1 +top-skins.ml, 1 top-verhandlungstraining.de, 1 top-zdrave.bg, 1 top-zentr.tk, 1 top.ax, 1 top10-casinosites.net, 1 +top10.tk, 1 top100games.ml, 1 top10antivirus.review, 1 top10directory.tk, 1 @@ -118874,9 +120692,11 @@ top6casinos.com, 1 top9.fr, 1 topa.tk, 1 topacademy.shop, 1 +topan.tk, 1 topanimecharacters.com, 1 topanlage.de, 1 toparkinfo.hu, 1 +topas.tk, 1 topaxi.codes, 1 topbestsellerproduct.com, 1 topbloc.com, 1 @@ -118888,6 +120708,7 @@ topbrunchspots.com, 1 topbusiness.tk, 1 topbusinessnews.today, 1 topbussines.tk, 1 +topcameras.tk, 1 topcarehvac.ca, 1 topcash.co.il, 1 topcasinobonus.nu, 1 @@ -118904,6 +120725,7 @@ topdetoxcleanse.com, 1 topdocumentaryfilms.com, 1 topdogsinflatables.co.uk, 1 topdomainsandhosting.com, 1 +topdosug.ml, 1 topdroneusa.com, 1 topechelon.com, 1 topeducationhelp.co, 1 @@ -118914,6 +120736,7 @@ topfd.net, 1 topferta.com, 1 topfivepercent.co.uk, 1 topfood.club, 1 +topgallant.gq, 1 topgevelbekleding.nl, 1 topgrading.com, 1 topgshop.ru, 1 @@ -118943,6 +120766,7 @@ toplist.cz, 1 toplist.eu, 1 toplist.sk, 1 topliste.tk, 1 +toplistforum.tk, 1 toplockshop.com, 1 topmanitas.es, 1 topmarketplace.com.br, 1 @@ -118951,8 +120775,10 @@ topmmogames.org, 1 topmoods.com, 1 topmotoric.com, 1 topmovie.gq, 1 +topmuzic.tk, 1 topmuzika.cz, 1 topnado.tk, 1 +topnet.tk, 1 topnews.gq, 1 topnews333.cf, 1 topnews333.tk, 1 @@ -118961,19 +120787,23 @@ topnotchendings.com, 1 topo.com.ro, 1 topodin.com, 1 topofertas.tk, 1 +topofficesupplies.tk, 1 topofmind.co.za, 1 topofthefreegames.ml, 1 topographic.tk, 1 toponlinecasino.be, 1 toponlinecasinonederland.nl, 1 toponlinecasinosites.co.uk, 1 +toponlinemarketing.tk, 1 topophile.net, 1 +topotom.tk, 1 toppercan.es, 1 toppillars.com, 1 topporn.me, 1 topppinfo.com, 1 topprice.ua, 1 topproductsanalysis.com, 1 +topradiosbrasil.tk, 1 toprci.com.br, 1 topreit.ru, 1 toprelatos.com, 1 @@ -118981,8 +120811,10 @@ topsailbeachnc.gov, 1 topsailtechnologies.com, 1 topseo.gq, 1 topservercccam.com, 1 +topservers.ga, 1 topsexik.cz, 1 topshelfcommercial.com, 1 +topshop.tk, 1 topshoptools.com, 1 topsnow.ru, 1 topspace.tk, 1 @@ -118999,6 +120831,7 @@ topten.com.co, 1 toptenthebest.com, 1 toptexture.com, 1 toptheto.com, 1 +toptiernetworks.tk, 1 toptilebathrooms.co.nz, 0 toptour.tk, 1 toptracks.tk, 1 @@ -119015,9 +120848,11 @@ topvision.se, 1 topvpn.pl, 1 topwin.la, 1 topwindowcleaners.co.uk, 1 +topwonders.tk, 1 topwoodltd.co.uk, 1 topyachts-shop.com.ua, 1 topyachts.com.ua, 1 +topzarabotok.ml, 1 toquechic.com, 1 tor.taxi, 1 tor2web.org, 1 @@ -119025,11 +120860,13 @@ tor4.cf, 1 toracon.org, 0 toranjchap.com, 1 torb.com, 1 +torba.tk, 1 torbay.ga, 1 torbay.tk, 1 torbe.es, 1 torch-fan.site, 1 torchantifa.org, 1 +torchbearer.tk, 1 tordenskjold.de, 1 toreni.us, 1 toretame.jp, 1 @@ -119062,6 +120899,7 @@ torngalaxy.com, 1 tornos.site, 1 tornyosbbq.hu, 1 torocatala.tk, 1 +torondor.tk, 1 toronto-escorts.com, 1 torontoaccesscontrol.com, 1 torontocorporatelimo.services, 1 @@ -119073,12 +120911,16 @@ torontopostcardclub.com, 1 torontopowerwalkers.ca, 1 torontoscrapcarremoval.ca, 1 torontostarts.com, 1 +torontotransit.tk, 1 toropova.tk, 1 toros.co, 1 torproject.org, 0 torproject.ovh, 1 torprojects.com, 1 +torquemada.tk, 1 torrance.gq, 1 +torrba.tk, 1 +torrecilladelaabadesa.tk, 1 torreconta.pt, 1 torrededonmiguel.tk, 1 torremarsalou.com, 0 @@ -119090,13 +120932,16 @@ torrentbd.com, 1 torrentbd.me, 1 torrentbd.net, 1 torrentdb.tk, 1 +torrentdownload.gq, 1 torrentfunk.com, 1 torrentfunk2.com, 1 torrentgalaxy.to, 1 torrentz2.al, 1 torrero.tk, 1 +torresdealbanchez.tk, 1 torresdocaribe.com.br, 1 torresdocariberesidence.com.br, 1 +torresjaen.tk, 1 torresshop.es, 1 torretzalam.com, 1 torsdammen.se, 1 @@ -119106,13 +120951,16 @@ torsten-schmitz.net, 1 torsten-werner.info, 1 torstens-buecherecke.de, 1 torstensenf.de, 1 +tortak.ml, 1 torte.roma.it, 1 torticollisexplained.com, 1 +tortillas-duras.cf, 1 tortillas-duras.ga, 1 tortillas-duras.gq, 1 tortillas-duras.ml, 1 tortocan.com, 1 tortoises-turtles.com, 1 +tortuga.ga, 1 tortugan.com.br, 1 torwart-jugend.de, 1 tosainu.com.br, 1 @@ -119135,6 +120983,7 @@ tosteberg.se, 0 tot.money, 1 totaku.ru, 0 total-chaos.tk, 1 +total-destruction.tk, 1 total-electric.com, 1 total-privacy.tk, 1 total-security.tk, 1 @@ -119164,6 +121013,7 @@ totallyjessica.tk, 1 totallylegitimatehosting.ru, 1 totallynotaserver.com, 1 totallyrace.tk, 1 +totallystocks.ga, 1 totalmdplan.com, 1 totalmerchandise.co.uk, 1 totalmerda.tk, 1 @@ -119176,6 +121026,7 @@ totalsport-bg.com, 1 totaltriathlon.com, 1 totalwebmedia.nl, 1 totalwebpartners.com, 1 +totalzen.ga, 1 totch.de, 1 totemgames.tk, 1 tothetopmentoring.com, 1 @@ -119198,7 +121049,9 @@ touch-up-net.com, 1 touch.facebook.com, 0 touch.mail.ru, 1 touch2ship.com, 1 +touchable.gq, 1 touchanddraw.tk, 1 +touchboobs.ml, 1 touchdown.co, 1 touchka.ga, 1 touchmark.tk, 1 @@ -119228,7 +121081,10 @@ toulis.net, 1 toulouselautrec.com.br, 1 toumeitech.com, 1 toupcreative.com, 1 +tour-japan.ml, 1 +tour-vietnam.tk, 1 touray-enterprise.ch, 1 +tourbryansk.tk, 1 tourcienaga.tk, 1 tourdatenarchiv.de, 1 tourdewestwoud.nl, 1 @@ -119239,11 +121095,15 @@ tourism-exegetai.tk, 1 tourisme-castillonpujols.fr, 1 tourisme-dordogne-paysfoyen.com, 1 tourisme-fronsadais.com, 1 +tourismpskov.tk, 1 +tourismtrain.tk, 1 tourispo.com, 1 +touristanalyst.ga, 1 tournamentmgr.com, 1 tournaments.tk, 1 tournevis.ch, 0 touroogle.com, 1 +tours-in-petersburg.tk, 1 toursandtransfers.it, 1 toursencancun.com, 1 tourteller.com, 1 @@ -119279,6 +121139,7 @@ touyatakenaka.tk, 1 tovaglioli-di-carta.it, 1 tovanot.biz, 1 tovare.com, 1 +tovari-rukodeliya.tk, 1 tovarypochtoj.tk, 1 toverland-tickets.nl, 1 tovp.org, 0 @@ -119287,7 +121148,9 @@ towardsthecloud.com, 1 towaway.ru, 1 towellconstruction.ca, 1 tower.land, 1 +towerdefence.tk, 1 towers-kolomna.tk, 1 +towessi.tk, 1 town-night.jp, 1 townforge.net, 1 townfremontwi.gov, 1 @@ -119412,6 +121275,7 @@ townofwinneconne.gov, 1 townofwoodruffwi.gov, 1 townofwoodvillewi.gov, 1 townofwrightstownwi.gov, 1 +townresults.ga, 1 townshipofthenorthshore.ca, 1 townswalker.com, 1 towolabs.com, 1 @@ -119424,8 +121288,10 @@ tox21.gov, 1 toxicboot.com, 1 toxicip.com, 1 toycu.de, 1 +toyduck.ga, 1 toymagazine.com.br, 1 toymania.de, 1 +toymarket.tk, 1 toyokawa-fan.com, 1 toyonut.co.jp, 1 toyopac.com, 1 @@ -119450,6 +121316,7 @@ toyshowthemusical.com, 1 toyshowthemusical.ie, 1 toysperiod.com, 1 toysplace.ml, 1 +toystory3.ga, 1 toyventure.ga, 1 tozdev.com, 1 tp-genie.com, 1 @@ -119468,6 +121335,7 @@ tpedu.nl, 1 tpeducation.cn, 1 tpetrov.com, 1 tpf.hk, 1 +tpiada.tk, 1 tpk-parma.ru, 1 tpk.quest, 1 tpnky.com, 1 @@ -119521,6 +121389,7 @@ tracinglineage.com, 1 track.plus, 1 trackballs.gq, 1 trackchair.com, 1 +tracker-knigi.gq, 1 tracker.com.ar, 1 trackerx.ga, 1 trackeye.dk, 1 @@ -119549,6 +121418,7 @@ tracyrobbinsking.com, 1 trad-n-vo.com, 1 tradavenue.com, 1 trade-arcade.com, 1 +trade-bot.cf, 1 trade-platform.tk, 1 trade.gov, 1 trade247.exchange, 1 @@ -119559,7 +121429,9 @@ tradedesk.co.za, 1 tradedigital.co, 1 tradees.com, 1 tradeinvent.co.uk, 1 +tradelink.cf, 1 trademarkregistration-coimbatore.com, 1 +trademen.ga, 1 tradeonfx.com, 1 tradeplotter.com, 1 traderepublic.com, 1 @@ -119594,6 +121466,7 @@ traducir.win, 1 tradymoney.com, 1 traegerbox.com, 1 traegergrills.com, 1 +traf-bonus.tk, 1 trafarm.ro, 1 traffic.az, 1 trafficdirection.tk, 1 @@ -119617,8 +121490,10 @@ tragamonedas-gratis.biz, 1 tragaver.ga, 1 traghetti.tk, 1 tragicallytrumped.com, 1 +tragicempire.tk, 1 tragmi.ch, 1 traha.org, 1 +trahnisoseda.tk, 1 traiectum.es, 1 trail-alps.ch, 1 trail-alps.com, 1 @@ -119636,6 +121511,7 @@ trainex.org, 1 trainhornforums.com, 0 trainiac.com.au, 1 training.com, 1 +trainingcentral.cf, 1 trainingfitstudio.fr, 1 traininghamburg.de, 1 traininglife.org, 1 @@ -119681,6 +121557,7 @@ traktor-troubadour.tk, 1 tralalashow.tk, 1 tralios.de, 1 tramadol.ga, 1 +tramadolhcl.ga, 1 tramclub-basel.ch, 1 tramikshop.ml, 1 tramitelegal.com.ar, 1 @@ -119837,6 +121714,7 @@ trauerbegleitung-kudla.de, 1 trauertexte.info, 1 traumaberatung-lindner.de, 1 traumarecoverysupport.com, 1 +traumfaenger.tk, 1 traumobjekte.com, 1 traumobjekte.info, 1 traumschwingen.de, 1 @@ -119847,6 +121725,7 @@ travador.com, 1 trave.africa, 1 travel-and-cache.de, 1 travel-dealz.de, 1 +travel-rus-club.tk, 1 travel-trek.tk, 1 travel.co.za, 0 travel2macedonia.com, 1 @@ -119854,6 +121733,7 @@ travel2macedonia.com.mk, 1 travel2macedonia.mk, 1 travel365.it, 1 travel4history.nl, 1 +traveladdiction.tk, 1 traveladventure.ml, 1 travelamm.com, 1 travelanchor.ga, 1 @@ -119900,6 +121780,7 @@ travelfeature.ga, 1 travelfield.org, 1 travelfiesta.ga, 1 travelfoot.com, 1 +travelfriend.tk, 1 travelgang.ga, 1 travelgirlsclub.com, 1 travelglamour.ga, 1 @@ -119913,6 +121794,7 @@ traveling-thailand.info, 1 travelingagency.tk, 1 travelingthevortex.com, 1 travelinsurance.co.nz, 1 +travelinsurance.ga, 1 travelix.io, 1 traveljunkie.tips, 1 travelkatta.in, 1 @@ -119927,15 +121809,18 @@ travellovers.fr, 1 travelmate.cf, 1 travelmember.ga, 1 travelmexico42.com, 1 +travelmontenegro.tk, 1 travelnano.ga, 1 travelnatural.ga, 1 travelnetwork.tk, 1 +travelnews.cf, 1 travelni.com, 1 travelnumber.ga, 1 traveloffline.ga, 1 travelogue.jp, 1 travelomega.ga, 1 travelongravel.tk, 1 +travelook.ml, 1 travelopedia.ga, 1 travelouter.ga, 1 travelove.tk, 1 @@ -119970,6 +121855,7 @@ travelsoldier.ga, 1 travelsonic.ga, 1 travelsouthbeach.ga, 1 travelspassion.com, 1 +travelstation.tk, 1 travelstrokes.com, 1 travelsunflower.ga, 1 travelsuperhero.ga, 1 @@ -120002,6 +121888,7 @@ travisf.net, 1 travisforte.io, 1 travisfranck.com, 1 travishenning.com, 1 +travkolyl.gq, 1 travler.net, 1 travnik24.tk, 1 travotion.com, 1 @@ -120009,6 +121896,7 @@ travuscka.ru, 1 traxstage.com, 1 tray.io, 0 trayinc.com, 1 +trazodoneonline.tk, 1 trazodononline.gq, 1 trazs.com, 1 trbanka.com, 1 @@ -120081,9 +121969,11 @@ trendingeducation.tk, 1 trendingknow.tk, 1 trendingstory.tk, 1 trendkraft.de, 1 +trendme.ga, 1 trendnews.cf, 1 trendnews.gq, 1 trendntech.com, 1 +trendocracy.cf, 1 trendocracy.ga, 1 trendocracy.gq, 1 trendocracy.ml, 1 @@ -120091,6 +121981,7 @@ trendpanel.tk, 1 trendpara.net, 1 trendparty.net, 1 trendreportdeals.com, 1 +trends-news.tk, 1 trends2day.com, 1 trendsettersre.com, 1 trendsuites.co, 1 @@ -120144,7 +122035,9 @@ triage.com, 1 triage.md, 1 triageclinic.com, 1 triageforensic.com, 1 +trial-server.tk, 1 trialandsuccess.nl, 1 +trialbyfire.tk, 1 trialcentralnet.com, 1 trialmaaskant.tk, 1 trials.tk, 1 @@ -120177,6 +122070,7 @@ tributh.gq, 1 tributh.ml, 1 tributh.net, 1 tributh.tk, 1 +tributoconsuegra.tk, 1 tricare.mil, 1 tricefy4.com, 1 tricetirisad.me, 1 @@ -120185,6 +122079,7 @@ tricityhelpline.com, 1 trickedguys.com, 1 trickle.works, 1 trico-pigmentazione.it, 1 +tricolortotal.tk, 1 tricordmedia.ca, 1 tricountyathome.com, 1 tricountyheatingcooling.com, 1 @@ -120213,9 +122108,11 @@ trigraph.net, 1 trigueros.tk, 1 trigular.de, 1 trihard.space, 1 +trihedron.tk, 1 trihunter6000.com, 1 trik-komputer.tk, 1 trik.es, 0 +triker.tk, 1 trikeweb.com, 1 trilithsolutions.com, 1 trillian.im, 1 @@ -120279,6 +122176,7 @@ triploqal.com, 1 tripmakery.com, 1 tripoffice.com, 1 tripoffice.pl, 1 +tripolinews.tk, 1 tripomanija.tk, 1 tripout.tech, 1 tripp.xyz, 1 @@ -120291,11 +122189,13 @@ tripwire.io, 1 trisaranasejati.com, 1 trisect.uk, 1 trish-mcevoy.ru, 1 +trisha.tk, 1 trisolaris.co.uk, 1 trissiethehusky.rocks, 1 tristan.moe, 1 tristanfarkas.one, 1 trit.pro, 1 +tritium.cf, 1 tritiumdisposal.com, 1 triumc.org, 1 trivarfertilizer.com, 1 @@ -120304,11 +122204,14 @@ trixietainted.net, 1 triz.co.uk, 0 trizen.xyz, 1 trizone.com.au, 1 +trkhosting.ga, 1 trkpuls.tk, 1 trmgo.de, 1 troc.co.il, 1 trochoi.net, 1 trockendock.ch, 1 +trodat.cf, 1 +trodniescis.gq, 1 troedel-trolle.de, 1 troedelhannes.at, 1 troee.org, 1 @@ -120318,14 +122221,17 @@ troi.de, 1 troiaconsultoria.com.br, 1 troianet.com.br, 1 troisiemeoeil.digital, 1 +trojanchronicles.tk, 1 trojanherring.com, 1 trok.co.il, 1 trolebusesdevalparaiso.tk, 1 troll-gaming.tk, 1 trolla.us, 1 trollbox.party, 1 +trolldesign.cf, 1 trolldi.eu, 1 trolldi.eu.org, 1 +trollforums.gq, 1 trollgetslucky.tk, 1 trollhanttan.cf, 1 trollhanttan.ga, 1 @@ -120337,6 +122243,8 @@ trollingeffects.org, 1 trollmoa.se, 0 trollolo.tk, 1 trollos.cf, 1 +trollos.ga, 1 +trollos.gq, 1 trollos.tk, 1 trollscave.xyz, 1 trom.tf, 1 @@ -120597,6 +122505,7 @@ truthmessages.pw, 1 truthsayer.tk, 1 truthsocial.com, 1 trutrip.co, 1 +truvayangin.tk, 1 truvisory.com, 1 trux.tk, 1 truxton.tk, 1 @@ -120631,6 +122540,7 @@ tryin.cz, 1 tryingtotakeoversweden.tk, 1 tryingtotakeovertheworld.tk, 1 tryitonline.net, 1 +tryk.tk, 1 tryknow.com, 1 trymegadrol.com, 1 tryndraze.com, 1 @@ -120685,12 +122595,14 @@ tsgbit.net, 1 tsgkc1.com, 1 tshirtgenerator.ga, 1 tshirtmemoryquilts.com, 1 +tshirtscapetown.com, 1 tshirtsforsale.co.za, 1 tsicons.com, 1 tsig.nl, 1 tsigaradiko.com, 1 tsiolakisfurs.com, 1 tsironis-olivenoel.de, 1 +tsja.tk, 1 tsk.ovh, 1 tskimwagner.com, 1 tsla.nu, 1 @@ -120718,6 +122630,7 @@ tsumi.moe, 1 tsumishima.com, 1 tsumugu2021.com, 1 tsunami.gov, 1 +tsunamic.cf, 1 tsunamikill.tk, 1 tsundere.moe, 1 tsura.org, 1 @@ -120812,11 +122725,13 @@ tubepornmovies.net, 1 tubepro.de, 1 tubeview.cf, 1 tubeview.ga, 1 +tubing.cf, 1 tubs4fun.co.uk, 1 tubuenpedido.com, 1 tubul.net, 1 tubuscador.tk, 1 tubuscadordeempleo.com, 0 +tucarora.tk, 1 tucasacanadevi.com.mx, 1 tucepihotelalga.com, 1 tucidi.net, 1 @@ -120838,6 +122753,7 @@ tudorrosesamplerguild.com, 1 tudosobrehost.com.br, 1 tuempleosolucion.com, 0 tueplay.host, 1 +tuerkei-immobilien.tk, 1 tuespr.com, 1 tuestilo.nl, 1 tuev-hessen.de, 1 @@ -120887,6 +122803,7 @@ tulikukko.tk, 1 tulippublishing.com.au, 1 tulisan.tk, 1 tull.tk, 1 +tuller.tk, 1 tully.co.uk, 1 tulocura.tk, 1 tulpawiki.org, 1 @@ -120901,8 +122818,12 @@ tumblr.com, 1 tumed-ks.org, 1 tumedico.es, 1 tumelum.de, 1 +tumen.cf, 1 +tumen.gq, 1 tumen.ml, 1 +tumen.tk, 1 tumentorweb.com.mx, 1 +tumult-productions.tk, 1 tun.bible, 1 tunaut.com, 1 tunbiya.com, 1 @@ -120920,6 +122841,7 @@ tuning-werkstatt-nuernberg.de, 1 tuning.energy, 1 tuningblog.eu, 0 tunisia-tech.tk, 1 +tunisiadefnews.ga, 1 tunisiana.tk, 1 tunisiangamers.tk, 1 tunisiapress.tk, 1 @@ -120955,10 +122877,13 @@ tupperwaresalamanca.com, 1 tupsicoayuda.com, 1 tupugoya.org, 1 turadio.tk, 1 +turadionline.cf, 1 turalt.com, 1 turanga.tk, 1 +turbaza.tk, 1 turbinadordigital.tk, 1 turbinaonline.tk, 1 +turbinelectricity.ga, 1 turbo.az, 1 turbo24.com, 1 turbohost.co.mz, 0 @@ -120985,6 +122910,8 @@ turiscar.pt, 1 turismoeviagens.com, 1 turismogdl.com, 1 turismoliliana.tk, 1 +turizm.gq, 1 +turizm.tk, 1 turizmsektoru.ga, 1 turizmsektoru.tk, 1 turkana.tk, 1 @@ -120997,17 +122924,22 @@ turkeyfiles.tk, 1 turkeymistress.tk, 1 turkeysforlife.com, 1 turkeysms.com.tr, 1 +turkgrafik.tk, 1 turkhacks.com, 1 turkhalkmuzigi.tk, 1 turkiet.guide, 1 turkish.dating, 1 turkishhackers.tk, 1 turkishyatirim.com, 1 +turkist.tk, 1 +turkistan-rap.tk, 1 turkiye.ai, 1 turkkarate.tk, 1 turkman.ml, 1 turkman.tk, 1 +turkmanbox.tk, 1 turkmannews.tk, 1 +turkmans.tk, 1 turkmen.news, 1 turkmenbusiness.tk, 1 turkmenistanairlines.tm, 1 @@ -121016,12 +122948,15 @@ turkmirc.tk, 1 turkmistress.tk, 1 turkodon.com, 1 turkology.tk, 1 +turkrap.tk, 1 turkreno.com, 1 turkrock.com, 1 turkru.pro, 1 turksell.ru, 1 turksite.tk, 1 turksiteleri.tk, 1 +turkteam.tk, 1 +turktelekomarenagolleri.tk, 1 turktree.com, 1 turkup.ml, 1 turkuradyo.tk, 1 @@ -121034,6 +122969,7 @@ turnali.tk, 1 turnalikoyu.tk, 1 turncircles.com, 1 turneroregon.gov, 1 +turnet.tk, 1 turnierplanung.com, 1 turnkey-ips.com, 1 turnningpoint.xyz, 1 @@ -121052,6 +122988,8 @@ turtle.ai, 0 turtleduckstudios.com, 1 turtlehead.tk, 1 turtles.ga, 1 +turtunis.ml, 1 +turul.tk, 1 turuncu-sepet.com, 1 turunculevye.com, 1 turyserra.com, 1 @@ -121071,6 +123009,7 @@ tusociofinanciero.com, 1 tussenuur.tk, 1 tustin.tk, 1 tusuri.tk, 1 +tut-kino.tk, 1 tuta.pm, 1 tutamail.com, 1 tutanota.com, 1 @@ -121088,6 +123027,7 @@ tutomaestro.ca, 1 tutoragency.org, 1 tutorcruncher.com, 1 tutorial90.cf, 1 +tutorialcoding.ga, 1 tutorialcoding.tk, 1 tutorialdb.tk, 1 tutorialehtml.com, 1 @@ -121138,28 +123078,35 @@ tuzaginside.com, 1 tuzagtcs.com, 1 tuzaijidi.com, 1 tuzlamap.tk, 1 +tuzlasite.tk, 1 tv-hot.com, 1 tv-mainzlar.de, 1 tv-online.ml, 1 tv-programme.be, 1 tv-programme.com, 1 tv-sports.fr, 1 +tv-tuners.cf, 1 tv-zone.tk, 1 tv.kg, 1 tv2vie.org, 0 +tvabullarbro.tk, 1 tvaerialsmanchester.com, 1 tvatomic.com, 1 tvbracketman.co.uk, 1 tvcal.net, 1 +tvchannelslive.tk, 1 tvcmarketing.com, 1 tvdate.ru, 1 tvdates.info, 1 tvdenevar.net, 1 +tvenligne.tk, 1 tver-msk.ru, 1 tver2000.tk, 1 tver69.tk, 1 +tveronline.tk, 1 tves.gob.ve, 1 tvfans.ga, 1 +tvfans.tk, 1 tvfcu.com, 1 tvgsc.sg, 1 tview.co.uk, 1 @@ -121169,16 +123116,21 @@ tvk.tirol, 1 tvkaren.tk, 1 tvlanguedoc.com, 1 tvleaks.se, 1 +tvmice.tk, 1 tvmounting-houston.com, 1 tvnow.de, 1 +tvoedelo.ml, 1 tvoia-dietka.tk, 1 tvoistatusy.tk, 1 +tvoistili.ml, 1 tvoyaknighka.ga, 1 tvoysad.ru, 0 tvplusiptv.com, 1 tvquot.es, 1 tvrestyler.eu, 1 +tvreviewer.tk, 1 tvs-virtual.cz, 1 +tvseasons.tk, 1 tvseries.info, 1 tvsheerenhoek.nl, 1 tvsscs.com, 1 @@ -121189,6 +123141,7 @@ tvzahist.com.ua, 1 tvzr.com, 1 tw.search.yahoo.com, 0 twa.travel, 1 +twaddler.cf, 1 twainhartehotels.com, 1 twaka.com, 1 twakkensi.cf, 1 @@ -121209,6 +123162,7 @@ tweedagenextravakantie.nl, 1 tweedandtalon.co.uk, 1 tweekshow.tk, 1 tweemaster.tk, 1 +tweeple.ga, 1 tweetfinity.com, 1 tweetfinityapp.com, 1 tweetyconnect.com, 1 @@ -121228,6 +123182,7 @@ twig.sg, 1 twigandolive.com, 1 twilightcookies.ca, 1 twilightkingdom.tk, 1 +twilightningzone.tk, 1 twilite.co.uk, 1 twilite.uk, 1 twilleys.com, 1 @@ -121266,6 +123221,7 @@ twitteroauth.com, 1 twittpr.com, 1 twizzle.net, 1 twk95.com, 1 +twl-clan.tk, 1 twlan.org, 1 twlitek.com.tw, 1 twmanager.tk, 1 @@ -121274,6 +123230,7 @@ two-step-verification.solutions, 1 twoandahalfvan.eu, 1 twobitbusker.com, 1 twobrothersbbq.com, 0 +twocatsinacaravan.xyz, 1 twocornertiming.com, 1 twodadsgames.com, 1 twoef.co.uk, 1 @@ -121357,6 +123314,7 @@ tyc001.cc, 1 tyc009.cc, 1 tyc923.com, 1 tycho.org, 1 +tycho.tk, 1 tychoverstraete.be, 1 tycyc88.com, 1 tyedyeforever.com, 1 @@ -121380,9 +123338,12 @@ tylerpayne.tk, 1 tylerschmidtke.com, 1 tylertysdal.com, 1 tylervigario.com, 1 +tylko-wazne.tk, 1 tymoch.pl, 1 tymyrddin.space, 1 tymyrddin.wiki, 1 +tynefm.tk, 1 +tyni-goc.gq, 1 tyni-gof.gq, 1 tynki-maszynowe.tk, 1 tyojyu.or.jp, 0 @@ -121419,6 +123380,7 @@ tyrael.eu, 1 tyraga.ga, 1 tyrannize.us, 1 tyrasuki.be, 1 +tyre-search.ga, 1 tyree.tech, 1 tyres-mechanical.com.au, 1 tyres-price.com, 1 @@ -121688,6 +123650,7 @@ ufroo.com, 1 ugameclub.com, 1 ugb-verlag.de, 0 ugcdn.com, 1 +ugeek.tk, 1 uggedal.com, 1 ugirlx.com, 1 ugmtc.org, 1 @@ -121766,6 +123729,7 @@ ukmeetandgreet.com, 1 ukmortgagecompare.co.uk, 1 uknew.co, 1 uknews.ml, 1 +uknewsroom.tk, 1 ukooku.com, 1 ukozliku.cz, 1 ukpr.group, 1 @@ -121838,6 +123802,7 @@ ultimatepatrol.de, 1 ultimatepower.ga, 1 ultortech.com, 1 ultra-pet.co.za, 1 +ultra-pro.ga, 1 ultra.law, 1 ultrabkk.com, 1 ultracentr.ml, 1 @@ -121863,6 +123828,9 @@ ultravip.com.br, 1 ultreya.tk, 1 ultrixus.rocks, 1 ulusar.com.tr, 1 +ulyanovsk-73.tk, 1 +ulyanovsk73.tk, 1 +ulyanovskcity.tk, 1 ulys.ch, 1 ulyssesenergy.it, 1 um-sachsen-pictures.de, 1 @@ -121874,6 +123842,7 @@ umanityracing.com, 1 umanupszn.gov.ua, 1 umap.uz, 1 umaru.gq, 1 +umas.tk, 1 umashev.ru, 1 umasoda-tohoku.com, 1 umasstransit.org, 1 @@ -121888,6 +123857,8 @@ umity.com.ua, 1 umkomaaslodge-aliwalshoal.co.za, 1 umlcode.com, 1 ummiabi.id, 1 +umniy-dom.tk, 1 +umnugobi.tk, 1 umo.ci, 1 umount.net, 1 umsapi.com, 1 @@ -121903,11 +123874,14 @@ un-framed.co.za, 1 un-nft.org, 1 un-zero-un.fr, 1 unae.fr, 1 +unaffectedsound.tk, 1 +unai-yus.tk, 1 unanaciounaseleccio.tk, 1 unangelturbio.tk, 1 unapp.me, 1 unasim.gq, 1 unataly.gq, 1 +unataz.tk, 1 unatbeaubrid.cf, 1 unatco.noip.me, 1 unautreregard.tk, 1 @@ -121950,6 +123924,7 @@ uncensoreddns.dk, 1 uncensoreddns.org, 1 uncentodecousas.tk, 1 unchile.com, 1 +uncinema.cf, 1 uncivserver.xyz, 1 unclebens-specials.gr, 1 uncontrollablegas.com, 1 @@ -121994,6 +123969,7 @@ underwoodpatents.com, 1 underworlds.tk, 1 underwriting.ai, 1 undiariodiferente.tk, 1 +undiepatrol.tk, 1 undo.co.il, 1 undone.tk, 1 undp.lt, 1 @@ -122006,6 +123982,8 @@ unefuite.ch, 0 unemployment.ga, 1 unemployment.gov, 1 unepierrepourlui.fr, 1 +unescoclub.tk, 1 +unetyr.gq, 1 unexcited.tk, 1 unexpected.nu, 1 unexplored-belarus.tk, 1 @@ -122291,7 +124269,6 @@ unluco.com, 1 unmanaged.space, 1 unmarkdocs.co, 1 unmask.earth, 1 -unmediodigital.com, 1 unminutomami.com, 1 unmo.com, 1 unn-edu.info, 1 @@ -122629,6 +124606,7 @@ urlauthority.uk, 1 urlbox.tk, 1 urlcitr.us, 1 urlendecoder.tk, 1 +urlfly.tk, 1 urlgoo.ga, 1 urlive.ga, 1 urlscan.io, 1 @@ -122769,6 +124747,7 @@ usleep.net, 1 usleravnekrog.dk, 1 uslugi-advokata.tk, 1 uslugi-online.pl, 1 +uslugi-voronezh.tk, 1 uslugikoparkalodz.gq, 1 usmammy.com.tw, 1 usmantrader.gq, 1 @@ -122845,6 +124824,7 @@ uteasybooki.com, 1 utensil.org, 1 utevai.tk, 1 uthavi.org, 1 +utheatre.org, 1 utiars.com, 1 uticagravel.com, 1 utilajexpert.ro, 1 @@ -122974,6 +124954,7 @@ v-d-p.net, 1 v-horus.cloud, 1 v-jo.com, 1 v-kurgane.tk, 1 +v-novosibirske.tk, 1 v-phoenix.tk, 1 v-spin.cz, 1 v-tek.fi, 1 @@ -123149,6 +125130,7 @@ valemountmuseum.ca, 1 valencia-s-vikoy.ru, 1 valenciadevops.me, 1 valencianisme.tk, 1 +valencianistas.tk, 1 valencraft.ca, 1 valencraft.com, 1 valenhub.com, 1 @@ -123210,6 +125192,7 @@ valkova.net, 1 valkyriecloud.com, 1 valladolidlempira.tk, 1 vallartense.tk, 1 +valledeleresma.tk, 1 valledibraies.org, 1 vallei-veluwe.nl, 1 vallejoca.gov, 1 @@ -123219,6 +125202,7 @@ valleydalecottage.com.au, 1 valleyradiologypad.com, 1 valleyradiologyufe.com, 1 valleyshop.ca, 1 +valleystories.ga, 1 valleywaste.ca, 1 valleywidetvrepair.ml, 1 vallutaja.eu, 1 @@ -123261,6 +125245,7 @@ valutienda.com, 1 valuuttamuunnin.com, 1 valvulasvaneo.com, 1 valx.jp, 1 +vam-podarok.tk, 1 vami.tk, 1 vamoneysearch.gov, 1 vamonospaportugal.tk, 1 @@ -123276,7 +125261,6 @@ vampyrium.com, 0 vampyrium.net, 0 van-assen.com, 1 van11y.net, 1 -vanadrighem.eu, 1 vanarok.xyz, 0 vanasperenschoenen.nl, 1 vanbalen.be, 1 @@ -123519,6 +125503,7 @@ vb.media, 1 vba.rest, 1 vbazile.com, 1 vbestseller.com, 1 +vbetcn.com, 1 vbhelp.org, 1 vbql.me, 1 vbsoft.cz, 1 @@ -123575,12 +125560,12 @@ ve.search.yahoo.com, 0 ve3oat.ca, 1 ve3zsh.ca, 1 veadoscomfome.tk, 1 -veast.network, 1 vebbankir-zajm-onlajn.gq, 1 veber.bg, 1 vecara.es, 1 vecchiofornobarletta.it, 1 vechainstats.com, 1 +vecherka.tk, 1 vectomatic.org, 1 vectops.com, 0 vectordtg.com, 0 @@ -123661,6 +125646,7 @@ vekenz.com, 1 vektlofting.tk, 1 vektor.tk, 1 vektorparts.ru, 1 +velacartagena.tk, 1 velassoltas.com, 1 velassoltas.pt, 1 veldadvies.nl, 1 @@ -123689,6 +125675,7 @@ velonustraduction.com, 1 velopinion.fr, 1 velorail01.fr, 1 veloroute.hamburg, 1 +velosipedi.tk, 1 velostudio.com.ua, 1 velotours.ga, 1 velotyretz.fr, 0 @@ -123738,6 +125725,7 @@ venicefl.gov, 1 venicefloridawebsitedesign.com, 1 venicerealdeal.com, 1 venje.pro, 0 +venlafaxine.gq, 1 vennershipley.co.uk, 1 vennprime.com, 1 venomxsecurity.com, 1 @@ -123809,6 +125797,7 @@ verdesfoundation.org, 1 verdict.gg, 1 verdict.ro, 1 verduccies.com, 1 +verdugosxerecistas.tk, 1 veredadelaestrella.tk, 1 verein-kiekin.de, 1 vereinlandwege.de, 1 @@ -124415,6 +126404,7 @@ villa-romantica-zillertal.at, 1 villa-toscana.berlin, 1 villablancaluarca.es, 1 villablino.tk, 1 +villadelprado.tk, 1 villaditirano.tk, 1 villafiore.com.br, 1 villafrancis.org.sg, 1 @@ -124466,6 +126456,7 @@ villainsclothing.com.au, 1 villaismaelcortinas.uy, 1 villakarma.at, 1 villakiralik.com, 1 +villalmanzo.tk, 1 villamenty.com, 1 villapads.com, 1 villaparkil.gov, 1 @@ -124655,6 +126646,7 @@ viplive.tk, 1 vipllcnj.com, 1 vipmdh.com.ua, 1 vipmercedes.by, 1 +viporiflame.tk, 1 vippclub.be, 0 vips.pl, 1 vipsexvault.com, 1 @@ -124675,10 +126667,14 @@ viralboombox.xyz, 1 viralcreate.com, 0 viralhua.com, 1 viralinsurance.ga, 1 +viraljobs.ga, 1 +viraloffer.ga, 1 viralpop.it, 0 viralsv.com, 1 +viralted.ml, 1 viraltobuzz.tk, 1 viraltube.my, 1 +viralvids.gq, 1 viran-khodro.tk, 1 virazh58.tk, 1 vircloud.net, 1 @@ -124693,6 +126689,7 @@ virginitychecker.ga, 1 virginized.tk, 1 virginpulse.us, 1 virgintears.tk, 1 +virgontech.tk, 1 virgosecurity.com.au, 1 viridis-milites.cz, 1 viris.si, 1 @@ -124713,6 +126710,7 @@ virtualcitehuallaga.com, 1 virtualcity.tk, 1 virtualcloud.ddns.net, 1 virtualcommodities.org, 1 +virtualcomputer.ml, 1 virtualdesign.tk, 1 virtualdesignmedia.com, 1 virtualgayhd.com, 1 @@ -125139,6 +127137,7 @@ vneftekamske.tk, 1 vnetboard.com, 1 vnlfrk.com, 1 vnministries.org, 1 +vnovosibirske.tk, 1 vnpay.vn, 1 vnpem.com, 1 vnpem.store, 1 @@ -125274,6 +127273,7 @@ volcano.lt, 1 volcano24.ru, 1 volcano75.ru, 1 volcanov.ru, 1 +volchara.tk, 1 volebnipruzkum.eu, 1 volga.us, 1 volgar.name, 1 @@ -125300,12 +127300,18 @@ volkswagensaigon.net, 0 volkswurst.de, 1 vollenberg.ca, 1 volleyballcityofpreston.tk, 1 +volleyballnews.tk, 1 volleyfreaks.tk, 1 volleypatos.tk, 1 vollmondstollen.de, 1 +volochaevskiy.tk, 1 +volochisk.tk, 1 voloder.net, 1 voloevents.com, 1 +vologda-city.ga, 1 vologda-city.tk, 1 +volosi.cf, 1 +volosi.tk, 1 voloskova.ru, 1 volqanic.com, 1 volreinsistemas.com, 1 @@ -125313,6 +127319,7 @@ volta.io, 0 voltageelectricity.tk, 1 voltahurt.pl, 1 voltainsite.com, 1 +voltarengelprice.tk, 1 voltarengeneric.tk, 1 voltcloud.net, 1 voltekka.com.au, 1 @@ -125321,6 +127328,7 @@ voltiac.ml, 1 volto.io, 1 voltrix.net, 1 volubilisplus.fr, 1 +volunka.ml, 1 voluntarist.dk, 1 volunteerham.com, 1 volunteerhere.ga, 1 @@ -125331,8 +127339,10 @@ volusiaelections.gov, 1 volusiasheriff.gov, 1 volusiavotes.gov, 1 volviers.nl, 1 +volvo1800es.tk, 1 volvoconnect.com, 1 vomitb.in, 1 +vomitoxin.ga, 1 vomsee.eu, 1 vonauw.com, 0 vonckers.tk, 1 @@ -125356,6 +127366,7 @@ vooruitmetjevereniging.nl, 1 voostvitamins.com, 1 vooxia.xyz, 1 vop.li, 1 +voprosnik.gq, 1 voprosownet.tk, 1 voragorn.com, 1 vorbrodt.blog, 1 @@ -125366,8 +127377,10 @@ vorlage-mustervertrag.de, 1 vorlagen-geburtstagsgruesse.de, 1 vorlonempire.org, 1 vorm2.com, 1 +vorona.tk, 1 vortari.tk, 1 vorte.ga, 1 +vortexhosting.ga, 1 vortix.tk, 1 vos-fleurs.ch, 1 vos-fleurs.com, 1 @@ -125382,6 +127395,7 @@ vosges-tourisme.net, 1 vosgym.jp, 1 voshod.org, 1 vosjesweb.nl, 1 +vosk-cream.tk, 1 vosky.fr, 1 vosn.de, 1 voss-klinik.com, 1 @@ -125392,6 +127406,7 @@ vosser.de, 1 vostok-zapad54.ru, 1 vostronet.com, 1 vot-tak-vot.tk, 1 +votan.cf, 1 vote.gov, 1 vote.nz, 1 vote.org, 1 @@ -125454,6 +127469,7 @@ vovac.tk, 1 vovachka.tk, 1 vovkamagazine.tk, 1 vovladikavkaze.ru, 1 +vovo4ka.tk, 1 vowsy.club, 0 vowyboeq.duckdns.org, 1 vox.de, 1 @@ -125481,6 +127497,8 @@ voyancedanslenord.com, 1 vozami.com, 1 vozbudim.tk, 1 vozdux.tk, 1 +vozhatik.cf, 1 +vozhuo.cf, 1 vp-arc.org, 1 vparilke.su, 1 vpbuilds.com, 1 @@ -125491,6 +127509,7 @@ vpnalert.com, 1 vpnboss.com.au, 1 vpnemail.com, 1 vpnent.com, 1 +vpnhongkong.gq, 1 vpnmag.fr, 1 vpnpro.com, 1 vpnservice.nl, 1 @@ -125512,6 +127531,7 @@ vpsrussia.com, 1 vpstrial.net, 1 vpsvz.cloud, 1 vpsvz.ninja, 1 +vpswebs.tk, 1 vpsxhq.com, 1 vqcymsa.com, 1 vqebizconsulting.com, 1 @@ -125541,6 +127561,7 @@ vreeken-selfstorage.tk, 1 vreeman.com, 1 vreklame.ml, 1 vremyachko.tk, 1 +vremyapervyih-hd.tk, 1 vresonline.gr, 1 vretmaskin.se, 0 vreviewbestseller.com, 1 @@ -125548,6 +127569,7 @@ vrfoodchannel.com, 1 vrfun18.com, 1 vrgamecritic.com, 1 vrgametrailers.net, 1 +vriendenkring-klassiekers.tk, 1 vriesdonkow.be, 0 vrifox.cc, 1 vrij-links.nl, 1 @@ -125586,12 +127608,15 @@ vs9977.com, 0 vsactivity.com, 1 vsamsonov.com, 1 vsaratove.tk, 1 +vsatke.tk, 1 vsc-don-stocksport.de, 1 vscale.io, 0 vscm888.com, 0 vscredconsultoria.online, 1 vsd.sk, 1 +vse-bolezni.tk, 1 vse-dlya-fermera.tk, 1 +vse-dlya-jinok.tk, 1 vse-dlya-texniki.tk, 1 vse-novosti.tk, 1 vse-potolki.ml, 1 @@ -125601,6 +127626,7 @@ vsec.co.il, 1 vsekulinar.ru, 1 vsem-reiki.tk, 1 vsemrabota.ml, 1 +vsenovosti.cf, 1 vseostile.ml, 1 vserisuem.ga, 1 vserus.com, 1 @@ -125764,9 +127790,13 @@ vztekloun.cz, 1 vzw-muzaik.tk, 1 vzwregent.be, 1 vzyatonlinezaim.ga, 1 +vzyatonlinezaim.gq, 1 +vzyatonlinezaim.ml, 1 +vzyatonlinezaim.tk, 1 vzyatzaimonline.cf, 1 vzyatzaimonline.ga, 1 vzyatzaimonline.gq, 1 +vzyatzaimonline.ml, 1 vzyatzaimonline.tk, 1 vzzjoias.com.br, 1 w-architectes.com, 1 @@ -126034,6 +128064,7 @@ walletfox.com, 1 wallethub.com, 1 wallett.gq, 1 wallhack.ml, 1 +wallhost.tk, 1 wallingford.cc, 1 wallinvogue.com, 1 wallis-inside.ch, 1 @@ -126088,6 +128119,7 @@ wanda98.com, 1 wandelreizen.eu, 1 wander.al, 1 wander.tk, 1 +wanderersfc.tk, 1 wanderfost.com, 1 wanderfullcoven.tk, 1 wanderinghiker.com, 1 @@ -126135,6 +128167,7 @@ wanybug.ga, 1 wanybug.gq, 1 wanybug.tk, 1 waonui.io, 1 +wap-umbrella.tk, 1 wapa.gov, 1 wapasrd.com, 1 wapazewddamcdocmanui6001.azurewebsites.net, 1 @@ -126146,6 +128179,7 @@ wapflash.ml, 1 wapgame.gq, 1 wapgu.cc, 1 wapheat.tk, 1 +wapkarma.tk, 1 wapkat.tk, 1 waplumber.com.au, 1 wapmaster.cf, 1 @@ -126160,11 +128194,13 @@ wappie.tk, 1 wapplerbrewing.com, 1 wapresri.go.id, 1 wapro.biz, 1 +wapspaces.tk, 1 waptransfer.tk, 1 wapveil.ml, 1 waqood.tech, 1 war-requiem.com, 1 war-team.com, 1 +warbox.ga, 1 warcraft2016.tk, 1 warcraftjournal.org, 1 warcraftwikicz.tk, 1 @@ -126175,6 +128211,7 @@ wardemons.tk, 1 warden.navy, 1 wardnd.gov, 1 wardogz.tk, 1 +wardonat.tk, 1 wardow.com, 1 wardpieters.eu, 1 wardpieters.nl, 1 @@ -126207,6 +128244,7 @@ wargun.ml, 1 warhistoryonline.com, 0 warhut.cn, 1 warid.ga, 1 +warispak.tk, 1 warking.ml, 1 warlions.info, 0 warlords.cf, 1 @@ -126262,6 +128300,7 @@ wasatchconstables.com, 1 waschmaschinen-dienst.de, 1 waschpark-hantschel.de, 1 wasd.ms, 1 +wasdestek.tk, 1 wasema.com, 1 wasfestes.de, 1 wasfuereintheater.com, 1 @@ -126319,6 +128358,7 @@ watch-host.ga, 1 watch-wiki.org, 1 watchamovie.ga, 1 watchcow.org, 0 +watchdogs.tk, 1 watchersrealm.tk, 1 watchface.watch, 1 watchfreeonline.co.uk, 1 @@ -126336,6 +128376,7 @@ watchweasel.com, 1 water-addict.com, 1 water-filters.tk, 1 water-polo.tk, 1 +water-valley.tk, 1 water.com, 1 waterbassoon.eu.org, 1 waterborefiji.com, 1 @@ -126364,7 +128405,9 @@ waterlootwpmi.gov, 1 watermarkly.com, 0 watermonitor.gov, 1 wateroutlook.com, 1 +waterpoint.tk, 1 waterpolosantona.tk, 1 +waterpolospain.tk, 1 waterpumps.xyz, 1 waterschaplimburg.nl, 1 waterside-inn.co.uk, 1 @@ -126407,6 +128450,7 @@ wausharacountywi.gov, 1 wauwatosa.gov, 1 wauzaji.com, 1 wav-productions.com, 1 +wav.tv, 1 wave-inc.co.jp, 1 wave.is, 1 wave.red, 1 @@ -126499,6 +128543,7 @@ wcools.tk, 1 wcrca.org, 1 wcru.one, 1 wcsoe.gov, 1 +wctsite.tk, 1 wcwcg.net, 1 wd-api.com, 0 wd-img.com, 1 @@ -126535,6 +128580,7 @@ we9988.net, 1 weacceptbitcoin.gr, 1 wealthadvisorsmf.com, 1 wealthadvisorstrust.com, 1 +wealthcreationsolutions.ga, 1 wealthprojector.com, 1 wealthprojector.com.au, 1 wealthreport.com.au, 1 @@ -126586,6 +128632,7 @@ weaveral.gov, 1 weavers.space, 1 web-3.ru, 1 web-advisor.co.uk, 1 +web-aps.tk, 1 web-art.cz, 1 web-biz.fr, 1 web-business.tk, 1 @@ -126616,15 +128663,18 @@ web-performance.ch, 1 web-privacy.tk, 1 web-redactor.com, 1 web-redactor.net, 1 +web-ross.gq, 1 web-ross.tk, 1 web-siena.it, 1 web-smart.com, 1 web-snadno.online, 1 web-space.design, 1 web-station.tk, 1 +web-studio-kzo.ml, 1 web-style.tk, 1 web-tcapwebsite-dev.azurewebsites.net, 1 web-test.gq, 1 +web-town.tk, 1 web-treff.de, 1 web-view.ml, 1 web-warrior.de, 1 @@ -126678,13 +128728,17 @@ webbuilder.de, 1 webbureauer.dk, 1 webby-books.com, 1 webcafe.tk, 1 +webcam-lisa.ml, 1 webcam-model.tk, 1 +webcamera-online.tk, 1 +webcamrunetki.ga, 1 webcams4date.com, 1 webcamtoy.com, 1 webcamyoung.tk, 1 webcaptive.com, 1 webcaptive.net, 1 webcarlosmartin.tk, 1 +webcarroseletricos.ga, 1 webcase.tk, 1 webcatchers.nl, 0 webcazip.com, 1 @@ -126693,6 +128747,7 @@ webcheck.pt, 1 webclimbers.ch, 0 webclymber.com, 0 webcoder.cf, 1 +webcoins.tk, 1 webcollect.org.uk, 1 webcollector.ga, 1 webcontrol.tk, 1 @@ -126701,6 +128756,7 @@ webcookies.org, 1 webcover.fr, 1 webcrazy.ga, 1 webcreaciones.net, 1 +webcreativa.tk, 1 webcreative.tk, 1 webcrm.com, 1 webcurtaincall.com, 1 @@ -126711,6 +128767,7 @@ webdesign-kall.de, 1 webdesign-moellers.de, 1 webdesign-note.jp, 1 webdesign.gs, 1 +webdesignagency.cf, 1 webdesigncompanyindia.com, 1 webdesignersinchennai.tk, 1 webdesignfenua.tk, 1 @@ -126773,6 +128830,7 @@ webgap.io, 0 webgarten.ch, 1 webgeneric.com, 1 webgeneric.in, 1 +webgentleman.tk, 1 webgrow.co.za, 1 webhackspro.com, 1 webharvest.gov, 1 @@ -126833,6 +128891,7 @@ webline.ch, 1 weblinkcity.tk, 1 weblistposting.com, 1 weblocus.tk, 1 +weblogia.tk, 1 weblogic.tk, 1 weblogzwolle.nl, 1 webmachine.co.za, 1 @@ -126858,6 +128917,7 @@ webmediums.com, 1 webmedpharmacy.co.uk, 1 webmeister.org, 1 webmenedzser.hu, 1 +webmetallica.tk, 1 webmetering.at, 1 webmethod.email, 1 webmethod.ir, 1 @@ -126885,14 +128945,17 @@ webnm.com, 1 webnoob.net, 1 webo.agency, 1 webo.pl, 1 +weboflies.tk, 1 webofthingsmarwane.xyz, 1 weboke.nl, 1 weboperater.rs, 0 webpakken.dk, 1 webpantry.ga, 1 +webparallax.cf, 1 webpcstudio.com, 1 webperformance.io, 1 webpiar.tk, 1 +webpitarque.tk, 1 webpixelia.com, 1 webpkgcache.com, 1 webplace4u.nl, 1 @@ -126904,8 +128967,10 @@ webpostingreviews.com, 1 webpresence.tk, 1 webprice.ga, 1 webproject.rocks, 1 +webprostitutki.tk, 1 webpublishing.tk, 1 webpubsub.com, 1 +webpunk.tk, 1 webqam.fr, 0 webquests.tk, 1 webrabbit.at, 1 @@ -126913,11 +128978,13 @@ webradio-maroc.tk, 1 webranko.tk, 1 webrats.xyz, 1 webrebels.org, 0 +webregion.tk, 1 webrentcars.com, 1 webrepresalia.tk, 1 webringpeopletogether.com.au, 1 webs4all.ro, 0 websa.nl, 1 +websanlamuerte.tk, 1 websayfasi.biz.tr, 1 webschool21.ml, 1 websec.nu, 1 @@ -126936,12 +129003,14 @@ website-traffic.shop, 1 website.builders, 1 websitebakers.eu, 1 websiteboost.nl, 1 +websitecalifornia.cf, 1 websitecenter.tk, 1 websitecyber.com, 1 websitedesignersmalappuram.ga, 1 websitedesignprice.ga, 1 websiteforyou.nl, 1 websiteirani.tk, 1 +websitelearners.cf, 1 websiteleichtgemacht.de, 1 websitemarketers.tk, 1 websiteout.ca, 1 @@ -126960,15 +129029,18 @@ websitestudio.fr, 1 websize.me, 1 websmaniac.com, 1 websmartlink.tk, 1 +websoftba.gq, 1 websolutionbd.tk, 1 websouthdesign.com, 1 websphere.tk, 1 webspider.tk, 1 webspire.tech, 1 webspotter.nl, 1 +webssupport.ga, 1 webstaff.xyz, 1 webstar.tk, 1 webstart.nl, 1 +webstats.tk, 1 webstaurant.com, 1 webstaurantstore.com, 1 websteam.tk, 1 @@ -126979,6 +129051,7 @@ webstop.tk, 1 webstore.be, 1 webstu.be, 1 webstylemedia.com, 1 +websubmissions.tk, 1 websuccess.ga, 1 websvetaines.lt, 1 webtalis.nl, 1 @@ -126987,12 +129060,14 @@ webtasarim.pw, 1 webtasarimankara.name.tr, 1 webtasarimi.tk, 1 webtasarimostim.name.tr, 1 +webtaxi.cf, 1 webtek.nu, 1 webtele.ga, 1 webtele.tk, 1 webtex.limited, 1 webtobesocial.de, 1 webtodito.tk, 1 +webtomsk.tk, 1 webtoolhost.com, 1 webtools-eqt.co.nz, 1 webtoolxl.net, 1 @@ -127001,15 +129076,20 @@ webtoro.com, 1 webtorrent.io, 1 webtorrent.tk, 1 webtostore.fr, 1 +webtransfers.ml, 1 webtrek.ch, 1 webtrend.ch, 1 webtropia.com, 0 +webuildsite.ga, 1 webukhost.com, 1 webullreview.co, 1 webunika.com, 0 webuniverse.ml, 1 +webunix.ga, 1 webuyhousesingainesvillefl.com, 1 webuyhousestitletown.com, 1 +webvampiro.tk, 1 +webvenezuela.tk, 1 webverdienst.tk, 1 webviewcams.com, 1 webwatcher.tk, 1 @@ -127038,6 +129118,7 @@ wecobble.com, 1 wecreate.ml, 1 wed.pw, 1 wed13spain.tk, 1 +weda.cf, 1 wedabout.com, 1 wedceducation.com, 1 wedcha.com, 1 @@ -127053,9 +129134,11 @@ weddingdays.tv, 1 weddingfantasy.ru, 1 weddinggoods.tk, 1 weddinggram.ga, 1 +weddinghotographers.tk, 1 weddingideas.gq, 1 weddingplanner.tk, 1 weddingsbynoon.co.uk, 1 +weddingtrunks.tk, 1 weddingwire.ca, 1 weddingwire.co.uk, 1 weddingwire.com, 1 @@ -127069,6 +129152,7 @@ wedooper.com, 1 wedot.co.uk, 1 wedplay.host, 1 wedshoots.com, 1 +weeaboo.ml, 1 weeb.us, 1 weebl.me, 1 weeblr.com, 1 @@ -127119,6 +129203,8 @@ wegonnagetsued.org, 1 wegotcookies.com, 1 wegotrip.com, 1 wegotrip.ru, 1 +wegrzynek.org, 1 +wegrzynek.pl, 1 wegvielfalt.de, 1 wehealasone.gov.ph, 1 wehiremac.uk, 1 @@ -127129,8 +129215,11 @@ weibomiaopai.com, 1 weideheuvel.org, 1 weidmannfibertechnology.com, 0 weien.org, 1 +weighed.ga, 1 +weightlift.ml, 1 weightlosseasy.cf, 1 weightlossoutcome.com, 1 +weightprogram.cf, 1 weihnachten-schenken.de, 1 weihua.life, 1 weike.tk, 1 @@ -127177,6 +129266,7 @@ welches-kinderfahrrad.de, 1 welcome-tahiti.com, 0 welcome-werkstatt.com, 1 welcome26.ch, 0 +welcomepowayan.tk, 1 welcoop-logistique.com, 1 weld.gov, 1 weldersnet.tk, 1 @@ -127187,6 +129277,7 @@ wella-download-center.de, 1 wellandwealthy.org, 1 wellbalancedhealth.ie, 1 wellbeing360.com.au, 1 +wellbutrinxlgeneric.cf, 1 wellcom.co.il, 1 wellcomemdhealth.com, 1 wellensteyn.ru, 1 @@ -127211,6 +129302,7 @@ wellstonok.gov, 1 wellti.com, 1 wellzapness.com, 1 welmo.fr, 1 +welom.tk, 1 welove.lk, 1 welove.tk, 1 welovecatsandkittens.com, 1 @@ -127224,6 +129316,8 @@ welp-mail.de, 1 welpen-rucphen.tk, 1 welpo.me, 1 welshccf.org.uk, 1 +welshterrier.tk, 1 +welshyak.tk, 1 welspunindia.com, 1 welstrim.de, 1 welt-flaggen.de, 1 @@ -127231,6 +129325,7 @@ weltderangebote.de, 0 welteneroberer.de, 1 weltengilde.de, 1 weltenhueter.de, 1 +weltumradler.tk, 1 weltverschwoerung.de, 1 welty.cc, 1 welty.co, 1 @@ -127282,6 +129377,7 @@ weplay.io, 1 weplaycollectibles.com, 1 weplaynaked.dk, 1 weple.ga, 1 +weple.gq, 1 wer-kommt-her.de, 1 werbe-markt.de, 1 werbe-sonnenbrillen.de, 0 @@ -127303,6 +129399,7 @@ werk-34.de, 1 werk32.net, 1 werken-bij-inwork.nl, 1 werkenbijavanade.nl, 1 +werkenbijbejo.nl, 0 werkenbijbuvo.nl, 1 werkenbijdata4.nl, 1 werkenbijdfzs.nl, 0 @@ -127498,6 +129595,7 @@ wgrlc.vic.gov.au, 1 wgrstudio.com, 1 wgsh.de, 1 wgsmartsavings.com, 1 +wgsuyi.cf, 1 wgtrm.com, 1 wgyt.tk, 1 wh-guide.de, 1 @@ -127518,6 +129616,8 @@ what.ink, 1 what.tf, 1 whatabout.ga, 1 whatabout.tk, 1 +whataboutjonbuckland.tk, 1 +whataboutjoshua.tk, 1 whataeco.com, 1 whatanime.ga, 1 whatarepatentsfor.com, 1 @@ -127529,10 +129629,13 @@ whatclinic.ie, 1 whatclinic.ru, 1 whatdevotion.com, 1 whatdevshouldknow.pl, 1 +whatevents.tk, 1 whatevername.tk, 1 +whateverzone.ml, 1 whatfontis.com, 1 whatimissed.news, 1 whatisapassword.com, 1 +whatiscss.tk, 1 whatisinternetsecurity.net, 1 whatisipfix.com, 1 whatisl.ovh, 1 @@ -127572,8 +129675,10 @@ whdpc.gov, 1 wheatfieldtwpmi.gov, 1 wheatgra.in, 1 wheelchair-mobility-scooter-rental-london.com, 0 +wheelchair.gq, 1 wheeler.kiwi.nz, 0 wheelhero.com, 1 +wheelspin.ga, 1 wheelwide.co.uk, 1 wheelwork.org, 0 wheelycool.tech, 1 @@ -127594,6 +129699,7 @@ whereismyorigin.cf, 1 whereisthekeep.com, 1 whereiszakir.com, 1 wheresbuzz.com.au, 1 +whereuare.se, 1 whereveryougo.space, 1 whexit.nl, 1 whey-protein.ch, 1 @@ -127602,6 +129708,7 @@ whichdoctor.com, 1 whichgender.today, 1 whichphish.com, 1 whiff-of-grape.ca, 1 +whigfieldspain.tk, 1 whil.com, 1 whilsttraveling.com, 1 whing.org, 1 @@ -127640,6 +129747,8 @@ whistlingdog.media, 0 whitdoit.tk, 1 white-hell.tk, 1 white-ibiza.com, 1 +white-info.tk, 1 +white-noise.tk, 1 white-rabbit.tk, 1 white-skull.tk, 1 white-wolf.tk, 1 @@ -127650,6 +129759,7 @@ whitealps.de, 0 whitealps.fr, 0 whitealps.net, 0 whitebirdclinic.org, 1 +whitebox.ga, 1 whitecleatbeat.com, 1 whitefieldnhpd.gov, 1 whitefm.ch, 0 @@ -127671,8 +129781,11 @@ whitelotuscyp.com, 1 whitelynx.co, 1 whitemagic.ga, 1 whitemanfss.net, 1 +whitemetalperu.tk, 1 whiteneon.com, 1 +whitepages.ml, 1 whitepen.io, 1 +whitepen.tk, 1 whitepinetn.gov, 1 whiterabbit.group, 0 whiterabbit.nl, 1 @@ -127682,6 +129795,7 @@ whiteshadowimperium.com, 1 whiteshelf.org, 1 whitesoxbestteaminbaseball.com, 1 whitespace.se, 1 +whitestarlegacy.tk, 1 whitesword.tk, 1 whitevpn.cz, 1 whitewaterks.gov, 1 @@ -127719,6 +129833,7 @@ whoisdhh.com, 0 whoistheorchid.com, 1 whoiswho.tk, 1 wholebody.je, 1 +wholesale.cf, 1 wholesalediamonds.tk, 1 wholesalegrowersdirect.com, 1 wholesaleimages.com, 1 @@ -127731,6 +129846,7 @@ whoneedstobeprimaried.today, 1 whonix.org, 1 whoopee.my, 1 whooshkaa.com, 1 +whoreofwallstreet.tk, 1 whorepresentsme.us, 1 whosapeach.tk, 1 whosneo.com, 1 @@ -127831,6 +129947,7 @@ wifimb.cz, 1 wifinube.com, 1 wifipineapple.com, 1 wifirst.net, 1 +wifishing.tk, 1 wifree.lv, 1 wigan.ovh, 1 wiganer.tk, 1 @@ -127847,7 +129964,6 @@ wiiaam.com, 1 wiikipedia.com, 1 wiimotion.de, 1 wiin.co, 1 -wiipo.com, 1 wiire.me, 0 wiisas.fi, 1 wijaya.net, 1 @@ -127882,6 +129998,7 @@ wikibooks.org, 1 wikibooks.pt, 1 wikibulz.com, 1 wikibuy.com, 1 +wikicooking.tk, 1 wikidata.org, 1 wikidpedia.org, 1 wikidsystems.com, 0 @@ -127890,6 +130007,7 @@ wikiepdia.org, 1 wikifamily.ga, 1 wikifamily.tk, 1 wikihelp.in, 1 +wikihistory.tk, 1 wikihow.com, 1 wikihow.com.tr, 1 wikihow.cz, 1 @@ -127936,6 +130054,7 @@ wikimediafoundation.net, 1 wikimediafoundation.org, 1 wikimho.com, 1 wikimilk.org, 1 +wikimir.tk, 1 wikimirror.org, 1 wikinews.com, 1 wikinews.de, 1 @@ -127969,6 +130088,8 @@ wikiquote.net, 1 wikiquote.org, 1 wikiquote.pt, 1 wikiquotes.info, 1 +wikirace.tk, 1 +wikisaur.tk, 1 wikiskripta.eu, 1 wikisorg.tk, 1 wikisource.com, 1 @@ -127981,6 +130102,8 @@ wikispecies.org, 1 wikispiel.de, 1 wikitech.ga, 1 wikitech.gq, 1 +wikitech.tk, 1 +wikitransporte.tk, 1 wikitrek.org, 1 wikiutah.tk, 1 wikiversity.com, 1 @@ -127996,10 +130119,12 @@ wikivoyage.org, 1 wikivoyager.de, 1 wikivoyager.org, 1 wikiwp.org, 1 +wikizip.ga, 1 wikjpedia.org, 1 wikkelweb.nl, 1 wikpa.com, 1 wikpedia.org, 1 +wikproduccions.tk, 1 wiktionary.com, 1 wiktionary.eu, 1 wiktionary.org, 1 @@ -128015,6 +130140,7 @@ wild-emotion-events.de, 1 wild-reels.com, 1 wild-turtles.com, 1 wild.at, 1 +wildanalysis.ga, 1 wildandisle.com, 1 wildandwonderfulbodycare.com, 1 wildandwonderfulketo.com, 1 @@ -128047,6 +130173,7 @@ wildlifeadaptationstrategy.gov, 1 wildmarsian.info, 1 wildmine.su, 1 wildowi.cz, 1 +wildrideproject.tk, 1 wildsafety.com, 1 wildsense.tk, 1 wildtrip.blog, 0 @@ -128093,12 +130220,15 @@ willflies.com, 1 willi-graf-gymnasium.de, 1 willi-graf-os.de, 1 willi-roth-holzbau.ch, 1 +williamarias.tk, 1 williamblondel.fr, 1 williamboulton.co.uk, 1 williamboundsltd.com, 1 williamfeely.info, 1 +williamgoldberg.cf, 1 williamjohngauthier.net, 1 williamk.ga, 0 +williamle.com, 0 williamlong.info, 1 williammcgill.co, 1 williammcgill.com, 1 @@ -128117,6 +130247,7 @@ williamtm.com, 1 williamusherwood.com, 1 williamvds.me, 1 willianchopin.tk, 1 +willich.tk, 1 williejackson.com, 1 willighp.de, 1 willlewis.co.uk, 1 @@ -128169,6 +130300,7 @@ wimmersoftware.de, 1 wimmersoftware.eu, 1 wimtec.net, 1 win-apuestas.com, 1 +win-fortuna.ml, 1 win-rar.com, 1 win-the-1.com, 1 win11.ren, 1 @@ -128180,6 +130312,7 @@ win88-line.net, 1 winampnederlands.tk, 1 winancreekbarn.com, 1 winario.de, 1 +winball.ml, 1 winbignow.click, 1 wincasinosmoney.com, 1 wincasinowin.click, 1 @@ -128188,6 +130321,7 @@ winchat365.com, 1 winchendon-ma.gov, 1 winckelmann2020.com, 1 wincoil.gov, 1 +wind-riders.cf, 1 wind.moe, 0 windelnkaufen24.de, 1 windev.com, 0 @@ -128241,9 +130375,11 @@ winerytoursanfrancisco.com, 1 winezja.pl, 1 winfar.co.za, 1 winfieldchen.me, 1 +winfilestorage.tk, 1 winfuture.de, 1 wing-tsun.cf, 1 wing-tsun.ga, 1 +wing-tsun.gq, 1 wing-tsun.tk, 1 wingchun.edu.au, 1 wingchunboxtribe.com, 1 @@ -128270,6 +130406,7 @@ winner.ua, 1 winnercivi.com, 1 winnersaffiliate.com, 1 winnery.tk, 1 +winning.gq, 1 winningattitudeawards.org, 1 winnipegcomputerguy.tk, 1 winnlandscaping.com, 1 @@ -128278,6 +130415,7 @@ winoptical.com, 1 winphonemetro.com, 1 winrar.com, 1 winrss.com, 0 +winsabayi.tk, 1 winserver.ne.jp, 1 winslowhomer.tk, 1 winslowslair.tk, 1 @@ -128288,6 +130426,7 @@ wintark.com, 1 wintechlab.com, 1 winter-auszeit.de, 1 winter-elektro.de, 1 +winter-leak.ml, 1 winterbergwebcams.com, 1 wintercam.nl, 1 winterco.org, 1 @@ -128301,20 +130440,25 @@ winterlandbeverages.com, 1 wintermeyer-consulting.de, 1 wintermeyer.de, 1 winternacht14.tk, 1 +winteromeo.tk, 1 winterset.gov, 1 wintersport.nl, 1 winterstudies.ga, 1 +winterzine.cf, 1 wintodoor.com, 1 wintzenterprise.com, 0 winvio.com, 1 winwares.com, 1 winwitharval.co.uk, 1 winwiz1.com, 1 +winxpclub.tk, 1 winzero.tk, 1 wiocha.pl, 1 +wipa.tk, 1 wipayfinancial.com, 1 wipeoutracing.tk, 1 wippie.se, 1 +wippy.tk, 1 wipro.com.vn, 0 wir-do.de, 1 wir-jugendhilfe.de, 1 @@ -128332,8 +130476,10 @@ wireheading.com, 1 wirekeep.com, 1 wireless-emergency-stop.com, 1 wireless-kill-switch.com, 1 +wirelessbelgie.tk, 1 wirelesscctv.tk, 1 wirelessleeuwarden.tk, 1 +wirelessthief.ga, 1 wireshark.org, 1 wireshocks.com, 1 wiretap.cf, 1 @@ -128352,6 +130498,7 @@ wirkungs-forschung.de, 1 wirkungs-forschung.net, 1 wirsberg-studios.de, 1 wirsing.nl, 1 +wirtanen.tk, 1 wirtcountywvsheriff.gov, 1 wis.no, 1 wisak.me, 1 @@ -128382,7 +130529,6 @@ wiselectures.com.au, 1 wisemen.digital, 1 wisemoney.com.vc, 1 wisenederland.nl, 1 -wisenetalarm.com, 1 wiseradiology.com.au, 1 wisereshape.com, 1 wisersp.com, 1 @@ -128396,6 +130542,7 @@ wishlisotr.cf, 1 wishlisotr.gq, 1 wishlist.net, 1 wishlog.fun, 1 +wishmail.cf, 1 wiska.cn, 1 wiska.co.kr, 1 wiska.co.uk, 1 @@ -128404,11 +130551,14 @@ wiska.com.br, 1 wiska.es, 1 wiska.in, 1 wiska.lat, 1 +wiskundeonderzoek.tk, 1 wism.io, 1 +wispmaeksmusic.tk, 1 wispsuperfoods.com, 1 wispyon.com, 1 wiss.co.uk, 1 wissamnr.be, 1 +wisselink.tk, 1 wissen-a5.de, 1 wissena5.de, 1 wistaysafe.gov, 1 @@ -128535,8 +130685,11 @@ wmmks.com, 1 wmnrj.com, 1 wmphonline.com, 1 wmphvacations.com, 1 +wmsndorgen.cf, 1 wmsndorgen.ga, 1 wmsndorgen.gq, 1 +wmsndorgen.ml, 1 +wmsndorgen.tk, 1 wmspropertyportal.co.uk, 1 wmustore.com, 1 wnark.com, 1 @@ -128563,6 +130716,7 @@ wobker.co, 1 woblex.cz, 1 woc.ao, 1 wochennummern.de, 1 +wocup.ga, 1 wod-stavby.cz, 1 wodax.dk, 1 wodboss.com, 1 @@ -128614,6 +130768,7 @@ wolflambert.tk, 1 wolfsburgwest.com, 1 wolfsense.nl, 1 wolfshoehle.eu, 1 +wolfteam.tk, 1 wolfvideoproductions.com, 1 wolfwings.us, 1 wolfy.design, 1 @@ -128646,10 +130801,12 @@ women-femmes.gc.ca, 1 women-only.net, 0 women.gc.ca, 1 womenbrace.tk, 1 +womenfashionshirt.tk, 1 womenofficersofindia.com, 1 womenofwhatcom.com, 1 womenonboardskenya.co.ke, 1 womens-suits.tk, 1 +womensbiz.tk, 1 womenscalltoaction.tk, 1 womenshealth.gov, 1 womensmedassoc.com, 1 @@ -128662,6 +130819,7 @@ wondeerful.farm, 0 wonderbits.net, 1 wonderbox.ga, 1 wonderbox.gq, 1 +wonderbox.ml, 1 wonderchat.tk, 1 wondercorner.ca, 1 wondereur.com, 1 @@ -128695,6 +130853,7 @@ woningverfspuiten.be, 1 woningverfspuiten.nl, 1 wonko-vs-trader.de, 1 wonksecurity.com, 1 +woo-jiho.tk, 1 woo.bi, 1 wooby.tk, 1 wooc.org, 1 @@ -128761,6 +130920,7 @@ wooproducciones.tk, 1 woordvanvandaag.nl, 1 woosk.de, 1 woothelpdesk.com, 1 +wootkit.tk, 1 wootware.co.za, 1 wopr.network, 1 wops.cc, 1 @@ -128792,20 +130952,25 @@ wordpress-szakerto.hu, 1 wordpress.com, 0 wordpressarequipa.com, 1 wordpressbot.tk, 1 +wordpressdevelopment.ml, 1 wordregistrar.ga, 1 wordsearchwhiz.com, 1 wordsmart.it, 1 wordsofamaster.com, 1 +wordspam.ga, 1 wordspy.com, 1 wordwidessl.net, 1 wordxtra.net, 1 wordzite.com, 1 worf.in, 1 worio.co, 1 +work-at-home.ga, 1 +work-at-home.gq, 1 work-in-progress.website, 1 work.me, 1 workahealthic.de, 1 workaholic.tk, 1 +workaholics.tk, 1 workaround.run, 1 workat.tech, 1 workatclever.com, 1 @@ -128874,6 +131039,7 @@ workshopzwolle.com, 1 worksindev.com, 1 worksitevr.com, 1 workspace.pt, 1 +worktefa.tk, 1 worktraining.com, 1 workupapp.com, 1 workwelltoday.net, 1 @@ -128881,16 +131047,20 @@ workwithgo.com, 0 workwithusaid.gov, 1 worky.ph, 1 world-citizen-report.com, 1 +world-documentary.ml, 1 world-education-association.org, 1 world-ir.international, 1 world-lolo.com, 1 world-mail.org, 1 world-of-arms.tk, 1 world-of-tes.tk, 1 +world-politics.tk, 1 world-selena.tk, 1 +world-tanks.tk, 1 world-trigger.net, 1 world-web.pro, 1 worldaccord.org, 1 +worldarmy.tk, 1 worldarticles.ru, 1 worldbelow.tk, 1 worldbirds.com, 1 @@ -128899,9 +131069,11 @@ worldbusinessarea.tk, 1 worldbusinessera.tk, 1 worldcarding.tk, 1 worldcdg.org, 1 +worldcharteronline.ga, 1 worldchess.london, 1 worldcigars.com.br, 1 worldclassfriend.com, 1 +worldconsultingchile.tk, 1 worldcrafts.org, 1 worldcubeassociation.org, 1 worldcup-odds.com, 1 @@ -128940,11 +131112,18 @@ worldhomepro.tk, 1 worldhomeuk.tk, 1 worldhomeusa.tk, 1 worldhosting.cf, 1 +worldintercontinental.cf, 1 +worldix.cf, 1 +worldix.gq, 1 +worldix.ml, 1 +worldix.tk, 1 +worldjobs.tk, 1 worldlanguage.tk, 1 worldluxuryhome.tk, 1 worldmarathons.tk, 1 worldmeetings.com, 1 worldnetone.com, 1 +worldnewsinbox.ga, 1 worldnewsphoto.tk, 1 worldofarganoil.com, 1 worldofbelia.de, 1 @@ -128957,6 +131136,8 @@ worldofwobble.co.uk, 1 worldpage.tk, 1 worldpayaccessories.com, 1 worldplayerx.com, 1 +worldpolitics.cf, 1 +worldrallyforum.tk, 1 worldranking.tk, 1 worldrecipes.eu, 1 worldrism.com, 1 @@ -128968,16 +131149,22 @@ worldsfree4u.ga, 1 worldsgreatestazuredemo.com, 1 worldsinperil.it, 1 worldskills.ph, 1 +worldsms.tk, 1 +worldsport.cf, 1 worldstone777.com, 1 +worldstyles.cf, 1 worldstyling.com, 1 worldsweet.ru, 1 worldsy.com, 1 worldtalk.de, 1 worldtourismgroup.com, 1 +worldtrandingnews.ml, 1 worldtravelmagazine.tk, 1 worldtreechocolate.ca, 1 +worldturkmans.tk, 1 worldupdatereviews.com, 1 worldviews-debattieren.de, 1 +worldvisa.tk, 1 worldvisionsummerfest.com, 1 worldwallstreet.tk, 1 worldwar2collector.tk, 1 @@ -128985,6 +131172,7 @@ worldwidessl.net, 1 worldwinesweb.be, 1 worlich.tk, 1 wormate.io, 1 +wormburners.tk, 1 wormbytes.ca, 1 wormdisk.net, 1 wormhol.org, 1 @@ -129002,12 +131190,16 @@ wortdestages.tk, 1 worthcountyiowa.gov, 1 worthenind.com, 1 worthless.company, 1 +worthlessingratitudecq.cf, 1 +worthlessingratitudecq.gq, 1 +worthlessingratitudecq.ml, 1 worthlydeals.com, 1 worthtownshipmi.gov, 1 worthwritingfor.com, 1 worthyblog.com, 1 worthygo.com, 1 worthygp.com, 1 +worzo.tk, 1 woshiluo.com, 1 woshiluo.site, 1 wossl.com, 1 @@ -129032,7 +131224,9 @@ wovietv.com, 1 wow-dsg.ch, 1 wow-foederation.de, 1 wow-screenshots.net, 1 +wow-serbia.tk, 1 wowaffixes.info, 1 +wowarcaim.ml, 1 wowbouncycastles.co.uk, 1 wowcinema.tk, 1 wowdrive.ga, 1 @@ -129049,6 +131243,7 @@ wowlove.tk, 1 wownskportal.tk, 1 wowpilates.com, 1 wowpolisa.pl, 1 +wows-mods.tk, 1 wows.sb, 1 wowsosellout.com, 1 woyzeck.org, 1 @@ -129091,6 +131286,7 @@ wpen.ru, 1 wpetri.nl, 1 wpexplorer.com, 1 wpformation.com, 1 +wpforum.tk, 1 wpfunction.com, 1 wpfy.org, 0 wpg-verwaltungen.de, 1 @@ -129114,8 +131310,10 @@ wpmu-tutorials.de, 1 wpnesia.id, 1 wpnews.cf, 1 wpnews.ga, 1 +wpnews.gq, 1 wpnews.ml, 1 wpnews.tk, 1 +wpnovice.tk, 1 wpnuvem.com, 1 wpocs.com, 1 wpoptimalizace.cz, 1 @@ -129148,6 +131346,7 @@ wptrigone.net, 1 wpturnedup.com, 1 wpuse.ru, 1 wq.ro, 1 +wqaw3.tk, 1 wr.su, 1 wrap.in.ua, 1 wrapit.hu, 1 @@ -129158,6 +131357,7 @@ wrbunderwriting.com, 0 wrc-results.com, 1 wrd48.net, 1 wrdcfiles.ca, 1 +wrecked.cf, 1 wrecked.tk, 1 wreckingball.hu, 1 wregni.com, 1 @@ -129182,6 +131382,7 @@ writemytermpapers.com, 1 writeoff.me, 1 writepro.net, 1 writer24.ru, 1 +writerecommendations.ga, 1 writerimranc.ca, 1 writerimranc.com, 1 writers-club.tk, 1 @@ -129191,6 +131392,7 @@ writestreak.team, 1 writeyoursmile.com, 1 writing-arena.com, 1 writing-expert.com, 1 +writingapps.ga, 1 writingcities.net, 1 writingiswork.ga, 1 writingontablets.com, 1 @@ -129226,7 +131428,6 @@ wsdeboer.nl, 1 wselektro.de, 1 wseo.pw, 1 wsform.com, 1 -wsg127.com, 0 wsgvet.com, 1 wsheffield.com, 1 wsiaca.org, 1 @@ -129267,6 +131468,7 @@ wuerfel.wf, 1 wuerfelmail.de, 1 wuergler-consulting.ch, 1 wuermlitaucher.ch, 1 +wuestenbergs.tk, 1 wuevahosting.com, 1 wuff.blog, 1 wuff.gay, 1 @@ -129493,6 +131695,7 @@ wy6.org, 1 wyam.io, 1 wyatttauber.com, 1 wybar.uk, 1 +wycena.ga, 1 wyckoffspringmeadowcondos.com, 1 wycombetoday.com, 0 wyczaruj.pl, 1 @@ -129658,6 +131861,8 @@ xanthopoulos.me, 1 xants.de, 1 xanyl.de, 1 xanzhu.com, 1 +xarangallomangallo.tk, 1 +xarmenta.tk, 1 xashayar.ir, 1 xatr0z.org, 0 xav.ie, 1 @@ -129752,6 +131957,7 @@ xb976.com, 1 xb980.com, 1 xb982.com, 1 xb983.com, 1 +xbanner.tk, 1 xbb.hk, 1 xbb.li, 1 xbc.nz, 1 @@ -129838,7 +132044,10 @@ xelesante.jp, 1 xemod.pl, 1 xenfo.ro, 1 xenical-online.ga, 1 +xenical-online.tk, 1 xenical.tk, 1 +xenicalonline.gq, 1 +xenicalorlistat.tk, 1 xenicalpills.tk, 1 xenocide.tk, 1 xenomorph.tk, 1 @@ -129859,6 +132068,7 @@ xeonlab.de, 1 xeoxaz.net, 1 xerbisworks.com, 1 xerbo.net, 0 +xerdeso.tk, 1 xerezdeportivo.tk, 1 xerkus.pro, 1 xerownia.eu, 0 @@ -129909,6 +132119,7 @@ xiamenshipbuilding.com, 1 xiamuzi.com, 1 xiangblog.com, 1 xianguocy.com, 1 +xiangweiqing.co.uk, 1 xianjianruishiyouyiyuan.com, 1 xiao-sheng.gq, 1 xiaobai.pro, 0 @@ -129945,6 +132156,7 @@ xier.ch, 1 xif.at, 1 xifrem.com, 1 xiix.cf, 1 +xile.ml, 1 xilef.org, 1 xilegames.com, 1 xilkoi.net, 1 @@ -130154,11 +132366,17 @@ xmr.wiki, 1 xmusic.live, 1 xmv.cz, 1 xmyy.com, 1 +xn------7cdabibmbihbgykn8elfdbfgbeqxmlc3a.tk, 1 +xn------7cdbfcbc0ab6akhadmzphmbibhebcc7b0ahshon.tk, 1 +xn-----6kcbb0cahbiskdv1bcj5c7g.tk, 1 xn-----6kcbjcgl1atjj7aadbkxfxfe7a9yia.xn--p1ai, 1 xn-----7kcbhdpr0asllefq0bjk.com, 1 +xn-----7kcgqqeagtqecgbhc3aginaie1hwh.tk, 1 xn-----7kckegeaw8apdfn0d9a0j.xn--p1ai, 0 +xn-----8kcdcb4bffibpgkpbdbcc5cedihs.tk, 1 xn-----8kcgbo2bmdgkdacthvjf.xn--p1ai, 1 xn-----elcblfoyosbv5mwb.xn--p1ai, 1 +xn----7sbabexseekfke3cifnf3b4r.tk, 1 xn----7sbabrwauchevq0ba.xn--p1ai, 1 xn----7sbagi4akcjwfceu2aoi5e0eh.xn--p1ai, 1 xn----7sbarcdvrtr1be.org, 1 @@ -130177,7 +132395,10 @@ xn----7sbmucgqdbgwwc5e9b.xn--p1ai, 1 xn----7sbq4auch5b4b.xn--p1ai, 1 xn----8hcdn2ankm1bfq.com, 1 xn----8sbfkobhgmxahfmmhe8b8c6ff.xn--p1ai, 1 +xn----dtbfemantkhdczc.tk, 1 +xn----dtbfemmqjdddczc.tk, 1 xn----dtbhcpoeofgcvoic1s.xn--p1ai, 1 +xn----etbqa2alia5i.tk, 1 xn----itbkhngkr2a.xn--p1ai, 0 xn----ncfb.ws, 1 xn----rtbbavlecj.xn--p1ai, 1 @@ -130227,6 +132448,13 @@ xn--7ca.co, 1 xn--7or43h.jp, 1 xn--7tq798c.ml, 1 xn--7xa.google.com, 1 +xn--80a1a8b.tk, 1 +xn--80a6a1b.tk, 1 +xn--80a6aq.tk, 1 +xn--80aaa3bgsbbm.tk, 1 +xn--80aaa5ajbrzqd.tk, 1 +xn--80aaaane9bk7bh.tk, 1 +xn--80aaacqdkdv7b0a.tk, 1 xn--80aaagbtu3bfbullc1c.xn--80asehdb, 1 xn--80aaaptltzqd.tk, 1 xn--80aabn5d9h.xn--90a3ac, 1 @@ -130236,21 +132464,28 @@ xn--80aafaxhj3c.xn--p1ai, 1 xn--80aahvz2a9a.xn--p1acf, 1 xn--80aanbkcescrdedmxzcl4pmc.xn--p1acf, 1 xn--80aapmgginxs3d.xn--p1ai, 1 +xn--80ab1bse.tk, 1 xn--80abb4bp.tk, 1 xn--80abmghlx4ajd.tk, 1 xn--80ace6be.tk, 1 +xn--80achgm7d.tk, 1 +xn--80acqgkhcn.tk, 1 +xn--80acubre5k.tk, 1 xn--80adb4aeode.xn--p1ai, 1 xn--80adbvdjzhptl1be6j.com, 1 xn--80adc7bbjgi.xn--p1ai, 1 xn--80adjmbjd1avp5b4a.xn--p1ai, 1 xn--80adydmce.com, 1 +xn--80ae7bafe4d.tk, 1 xn--80aebbkaqx6at.xn--p1ai, 1 xn--80aejhvi0at.xn--90ais, 1 xn--80aejljbfwxn.xn--p1ai, 1 +xn--80affa6ai0a.tk, 1 xn--80ah4f.xn--p1ai, 1 xn--80ahccom2a2c.xn--p1ai, 0 xn--80ahclcaoccacrhfebi0dcn5c1jh.xn--p1ai, 1 xn--80ahcnlhmh.xn--p1ai, 1 +xn--80ahjdhy.tk, 1 xn--80ahnefiifo0g.xn--p1ai, 1 xn--80aihgal0apt.xn--p1ai, 1 xn--80akjfhoqm2h2a.xn--p1ai, 1 @@ -130258,7 +132493,9 @@ xn--80aknjgrv.tk, 1 xn--80ancacgircb8q.xn--p1ai, 1 xn--80anogxed.xn--p1ai, 1 xn--80aocgsfei.xn--p1ai, 1 +xn--80aod6g.tk, 1 xn--80axad8esa.tk, 1 +xn--80azep.tk, 1 xn--8bi.gq, 0 xn--8n2am80a.tech, 1 xn--90accgba6bldkcbb7a.xn--p1acf, 1 @@ -130268,6 +132505,7 @@ xn--90acrudcl3j.com, 0 xn--90adahrqfmec.xn--p1ai, 1 xn--90agmsorb.tk, 1 xn--90aij9af3f.com.ua, 1 +xn--90aimoos.tk, 1 xn--90aizn.tk, 1 xn--90amdjbi3c0ec.xn--p1ai, 1 xn--938h.st, 1 @@ -130284,8 +132522,11 @@ xn--anyd-7na.at, 1 xn--apaados-6za.es, 1 xn--avocai-timioara-kmf1a.ro, 1 xn--b-tqa.net, 1 +xn--b1aa9b.tk, 1 xn--b1ab6abhfh.xn--p1ai, 1 xn--b1ag9a.xn--p1ai, 1 +xn--b1agcgqrei7i.tk, 1 +xn--b1ayb.tk, 1 xn--b3c4f.xn--o3cw4h, 1 xn--baron-bonzenbru-elb.com, 1 xn--bckerei-wohlgemuth-ltb.de, 1 @@ -130303,6 +132544,8 @@ xn--c-xga.de, 1 xn--c1aaulbdc.tk, 1 xn--c1adqibibm8i.com, 1 xn--c1aehtaetb.xn--p1ai, 1 +xn--c1aid4ap8e.tk, 1 +xn--c1aolabgdj.tk, 1 xn--c5w032d4vi.com, 1 xn--c5w032d4vi.xn--fiqs8s, 1 xn--c5w032d4vi.xn--fiqz9s, 1 @@ -130324,6 +132567,8 @@ xn--d1aca2a5al.tk, 1 xn--d1acalaltdk2d.xn--p1ai, 1 xn--d1acfdr6h.com.ua, 1 xn--d1acj9c.xn--90ais, 0 +xn--d1aczdsdn4d.tk, 1 +xn--d1awi.tk, 1 xn--dcko6fsa5b1a8gyicbc.biz, 1 xn--dckya4a0bya6x.com, 1 xn--dckya4a0bya6x.jp, 1 @@ -130346,9 +132591,12 @@ xn--e--ig4a4c3f6bvc5et632i.com, 1 xn--e--k83a5h244w54gttk.xyz, 1 xn--e1aaavheew.xn--p1ai, 1 xn--e1aaavheewr.xn--p1ai, 1 +xn--e1aahuqbk6f.tk, 1 xn--e1aajhbc0amdp4byf.xn--p1ai, 1 xn--e1adlfhcdo7h.xn--p1ai, 1 +xn--e1agokg6a9a.tk, 1 xn--e1aoahhqgn.xn--p1ai, 1 +xn--e1aoddhq.gq, 1 xn--e1tvpw18d.com, 1 xn--e1tx9l9xc.xn--6qq986b3xl, 1 xn--ecki0cd0bu9a4nsjb.com, 1 @@ -130438,6 +132686,7 @@ xn--love-un4c7e0d4a.com, 1 xn--lsaupp-iua.se, 1 xn--lskieradio-3gb44h.pl, 1 xn--lti-3qa.lv, 1 +xn--m1aba.tk, 1 xn--m6t22d1b026i1odr9k.cn, 1 xn--m6to92j.xn--gmqw5a.xn--j6w193g, 1 xn--m6ty4dmx2a7ki.cn, 1 @@ -130591,8 +132840,10 @@ xn5.de, 1 xnaas.info, 1 xnativi.pl, 1 xnet-x.net, 1 +xnetwork.ml, 1 xninja.xyz, 1 xniver.se, 1 +xnix.tk, 1 xno-sys.de, 0 xnopyt.info, 1 xntrik.wtf, 1 @@ -130605,6 +132856,7 @@ xolotto.com, 1 xolphin.nl, 1 xombitgames.com, 1 xombitmusic.com, 1 +xomyak.tk, 1 xone.cz, 0 xonet.cz, 1 xonobixa.tk, 1 @@ -130653,6 +132905,7 @@ xpjwb.com, 0 xpletus.nl, 1 xplo.it, 1 xploredundee.com, 1 +xplozion.tk, 1 xpods.sg, 1 xpornoizle.net, 1 xportxpert.com, 1 @@ -130676,6 +132929,7 @@ xqk7.com, 1 xqwqx.com, 1 xr1s.me, 1 xrak.tk, 1 +xrayreview.ml, 1 xrbox.me, 1 xrdd.de, 1 xrg.cz, 1 @@ -130692,6 +132946,7 @@ xsait.tk, 1 xscancun.com, 1 xsden.info, 1 xsec.me, 1 +xsenya74hram.tk, 1 xseries-forum.com, 1 xserownia.cloud, 0 xserownia.com.pl, 0 @@ -130782,6 +133037,8 @@ xtoob.com, 1 xtournois.com, 1 xtrainsights.com, 1 xtravans.com, 1 +xtreamfire.tk, 1 +xtreme-cs.tk, 1 xtreme-servers.eu, 1 xtremealaskainsulation.com, 1 xtremebouncepartyhire.com.au, 1 @@ -130792,7 +133049,7 @@ xtremyblog.com, 1 xtronics.com, 1 xts.bike, 1 xts3636.net, 1 -xtspeeder.com, 1 +xtspeeder.com, 0 xtu2.com, 1 xtzone.be, 1 xtzs6.vip, 1 @@ -130808,6 +133065,7 @@ xuedianshang.com, 1 xuehao.net.cn, 1 xuehao.tech, 1 xuehuang666.cn, 1 +xuesoska.ga, 1 xuexi.icu, 0 xuexi.moe, 1 xuez.cc, 1 @@ -130834,6 +133092,7 @@ xvt-blog.tk, 1 xwalck.se, 1 xwaretech.info, 1 xwf.fyi, 1 +xwfwrestling.tk, 1 xwm.ru, 1 xwndtq.xyz, 1 xworder.tk, 1 @@ -130849,6 +133108,7 @@ xx9728.co, 1 xxdtl.com, 1 xxffo.com, 1 xxiz.com, 1 +xxl-bonus.tk, 1 xxl.tax, 1 xxoo.best, 1 xxx-fiction.com, 1 @@ -130890,6 +133150,7 @@ xynolabs.com, 1 xynonet.de, 1 xynta.ch, 1 xyquadrat.ch, 1 +xyrexwolf-sebastien-izambard.tk, 1 xywing.com, 0 xyz.blue, 1 xyz.ng, 1 @@ -131031,7 +133292,14 @@ y9297.co, 1 y9297.com, 1 y9728.co, 1 y99.in, 1 +ya-hudeu.tk, 1 +ya-hudeyu.gq, 1 ya-hudeyu.ml, 1 +ya-hudeyu.tk, 1 +ya-madina.tk, 1 +ya-radio.tk, 1 +ya-stroynaya.tk, 1 +ya-zdorova.tk, 1 ya.mk, 1 yaay.com.br, 1 yaay.today, 1 @@ -131085,10 +133353,15 @@ yakimono.ga, 1 yakimoshi.tk, 1 yakisakana.tk, 1 yakitofisi.com, 1 +yakkifamirie.tk, 1 yakmail.tech, 1 yakmoo.se, 1 yakovmanshin.com, 1 yakushima.io, 1 +yakutia.tk, 1 +yakutianews.tk, 1 +yakutsk-city.tk, 1 +yakutsk.ml, 1 yalb.tech, 1 yalcinkaya.ninja, 0 yalecleaners.com, 1 @@ -131102,6 +133375,7 @@ yamadaya.tv, 1 yamagata-fujinka.jp, 1 yamaken.jp, 1 yamal-online.ml, 1 +yamal159263.ml, 1 yamanami.tokyo, 1 yamanobe-taro.jp, 1 yamashita-clinic.org, 1 @@ -131118,6 +133392,7 @@ yamei99.com, 1 yamei9955.com, 1 yami.world, 1 yamm.io, 1 +yamobila.tk, 1 yan.gg, 1 yan.lt, 1 yan.net.cn, 1 @@ -131150,9 +133425,11 @@ yannic.world, 0 yannick.cloud, 1 yannickkordel.de, 1 yannickkordel.eu, 1 +yannickvdvelde.tk, 1 yanniclandsmann.de, 1 yannyann.com, 1 yanovich.net, 1 +yanovosibirsk.ml, 1 yanservices.be, 1 yansurachman.web.id, 1 yantarniy.tk, 1 @@ -131220,6 +133497,7 @@ yarplast.tk, 1 yarracitta.tk, 1 yarravilletownhouses.com.au, 1 yaru.one, 1 +yarygin.tk, 1 yasam.co.uk, 1 yaseen.ae, 1 yaseiblog.org, 1 @@ -131234,7 +133512,10 @@ yasmeencreative.com, 1 yasmin-apartments.cz, 1 yasmin.ml, 1 yasmingarcia.tk, 1 +yasraiting.tk, 1 +yasrating.tk, 1 yassine-ayari.com, 1 +yassinesmael.tk, 1 yasudaseiki.cn, 1 yasukevicious.com, 1 yatai18.com, 1 @@ -131267,6 +133548,7 @@ yayart.club, 1 yayl888.com, 1 yaymaker.com, 1 yayou.ag, 1 +yazichestvo.tk, 1 yazik.ga, 1 yazilim.tk, 1 yba-lier.tk, 1 @@ -131306,6 +133588,7 @@ yeapdata.com, 1 yearend.com, 1 yearinviewcalendars.com, 1 yearli.com, 1 +yeartracker.ga, 1 yebkw.com, 1 yebshotel.de, 1 yecdn.com, 1 @@ -131389,8 +133672,11 @@ yeram.org, 1 yerbasbuenas.tk, 1 yert.pink, 1 yes-money.cf, 1 +yes-money.ga, 1 yes-money.gq, 1 yes.com, 1 +yesapp.tk, 1 +yescareer.ga, 1 yescool.cn, 0 yesfone.com.br, 1 yesglasses.com, 1 @@ -131398,7 +133684,9 @@ yesiammaisey.me, 1 yesichat.com, 1 yesilfindik.com, 1 yesilliforum.tk, 1 +yesjobs.ga, 1 yesleaks.com, 1 +yesmirov.ga, 1 yesmsp.com, 0 yesod.in, 1 yesogovinpetcare.com, 1 @@ -131555,6 +133843,7 @@ yobai-grouprec.jp, 1 yobasystems.co.uk, 1 yobda.tk, 1 yobify.com, 1 +yobniyulyu.tk, 1 yobst.tk, 1 yochadehe.gov, 1 yochen.de, 1 @@ -131575,6 +133864,7 @@ yogaangels.ga, 1 yogachillbeats.com, 1 yogaecology.org, 1 yogaemmental.ch, 1 +yogagadgets.ga, 1 yogahealsinc.org, 1 yogahome.com, 1 yogaillustrations.ga, 1 @@ -131585,8 +133875,10 @@ yogaovelser.dk, 1 yogaportalen.dk, 1 yogaprague.com, 1 yogaschule-herzraum.de, 1 +yogasolution.tk, 1 yogasuitsyou.com, 1 yogatherapykosha.com, 1 +yogaworld.tk, 1 yogibear.tk, 1 yogies.shop, 1 yogstation.net, 1 @@ -131667,6 +133959,7 @@ yosheenetwork.fr, 1 yoshibaworks.com, 1 yoshitsugu.net, 1 yoshiya2020.com, 1 +yoshkar-ola-city.tk, 1 yosida-dental.com, 1 yosida95.com, 1 yosm.net, 1 @@ -131728,6 +134021,7 @@ youkaryote.com, 1 youkaryote.org, 1 youked.com, 1 youkube.cf, 1 +youla.gq, 1 youlikehookups.com, 1 youliketwinks.com, 1 youlovehers.com, 1 @@ -131737,6 +134031,7 @@ youms.de, 1 younameit.ru, 1 youneedfame.com, 1 young-brahmousin.com, 0 +young-celebrities.tk, 1 young-hands.it, 1 young-sheldon.com, 1 young-zy.com, 1 @@ -131791,6 +134086,7 @@ yourblazeguard.com, 1 yourbodyknows.dk, 1 yourbodyknows.is, 1 yourbonus.click, 0 +yourbreakfast.tk, 1 yourbristolsomerset.wedding, 1 yourbusiness.ml, 1 yourcareerhost.com, 1 @@ -131805,7 +134101,9 @@ yourcrypto.tax, 1 yourdailyalerts.net, 1 yourdailyhealthcare.tk, 1 yourdata.ga, 1 +yourdemowebsite.ml, 1 yourdevoncornwall.wedding, 1 +yourdrive.tk, 1 youreallyneedthis.co, 1 youreart.shop, 1 youreastanglian.wedding, 1 @@ -131845,6 +134143,7 @@ yourloan.gq, 1 yourlondon.wedding, 1 yourlovesong.com.mx, 1 yourmagicstory.tk, 1 +yourmobility.ga, 1 yourms.com, 1 yourname.xyz, 1 yournextagency.com, 1 @@ -131858,6 +134157,8 @@ yourrenaissancemedspa.com, 1 yourscotlandtour.co.uk, 1 yoursfunny.top, 1 yourskin.nl, 0 +yoursoul.gq, 1 +yoursoulmate.tk, 1 yoursouthwales.wedding, 1 yourstart.tk, 1 yourstorebridgwater.co.uk, 1 @@ -131865,14 +134166,17 @@ yourstoreexeter.co.uk, 1 yoursuper.gov.au, 1 yoursurrey.wedding, 1 yourtampaparksplan.com, 1 +yourtests.tk, 1 yourticketbooking.com, 1 yourtourdesk.com, 1 yourtwojugs.com, 1 youruseragent.info, 1 yourwatchdesign.co.uk, 1 yourwestmidlands.wedding, 1 +yourworlds.cf, 1 youryorkshire.wedding, 1 yourznc.com, 1 +yousee.cf, 1 yousee.gq, 1 yousefi.de, 1 yousei.ne.jp, 1 @@ -131882,6 +134186,7 @@ yousound.tk, 1 youssfitpro.com, 1 youstyleski.it, 1 yousuforg.ga, 1 +youth-for-life.tk, 1 youth-sport.net, 1 youth.gov, 1 youth2009.org, 1 @@ -131919,8 +134224,10 @@ yparches.com, 1 ypart.eu, 1 ypea.info, 1 ypfr.fr, 1 +ypgnews.tk, 1 ypid.de, 1 yplanapp.com, 1 +ypopovych.tk, 1 yporti.net, 1 ypse.com.br, 1 yq5.de, 1 @@ -131936,6 +134243,7 @@ yrjanheikki.com, 1 yrx.me, 1 yryz.net, 1 ysds.com, 0 +ysearc.tk, 1 ysfridge.com, 1 ysicing.me, 1 ysicorp.com, 1 @@ -131956,6 +134264,7 @@ ytcodecs.com, 1 ytcount.com, 1 ytec.ca, 1 ytegiadinhmilo.com, 1 +ytexa.tk, 1 ytpak.pk, 1 ytprivate.com, 1 ytreza.fr, 1 @@ -131972,6 +134281,7 @@ yuanandyuan.info, 1 yuanandyuan.me, 1 yuanben.io, 1 yuanbenlian.com, 1 +yuandan.cf, 1 yuandan.gq, 1 yuandan.ml, 1 yuanjiazhao.com, 0 @@ -132078,6 +134388,7 @@ yukonconnector.com, 1 yukonlip.com, 1 yukoslibrary.ga, 1 yuksinau.co.id, 1 +yula.cf, 1 yulaiz.com, 1 yule.hk, 1 yuleyule88game.com, 1 @@ -132101,7 +134412,6 @@ yunhu365.com, 1 yunibalance.com, 1 yunjishou.pro, 1 yunloc.com, 1 -yunnet.ru, 1 yunqueradehenares.tk, 1 yuntong.tw, 0 yunzhu.li, 0 @@ -132114,6 +134424,7 @@ yuriland.xyz, 1 yurimoens.be, 1 yurinet.org, 1 yurisora.com, 1 +yurist-vopros.gq, 1 yurisviridov.com, 1 yurtdisigocmenlik.com, 1 yus-azaria.tk, 1 @@ -132335,6 +134646,7 @@ za.search.yahoo.com, 0 zaagbaak.nl, 1 zaalleatherwear.nl, 1 zaanlijn.nl, 1 +zabatsai-sam.tk, 1 zabbi.ru, 1 zabbix-monitoring.tk, 1 zabbix.tips, 1 @@ -132403,21 +134715,34 @@ zahnraddruckerei.de, 1 zahrowski.com, 1 zaidan.pw, 1 zaija.tk, 1 +zaim-best.ml, 1 zaim15min.cf, 1 zaimdengi.tk, 1 zaimexpress.cf, 1 +zaimi.ml, 1 +zaimin.ga, 1 +zaimlime.ga, 1 zaimponuj.pl, 1 +zaimvkredit2.gq, 1 +zaimvkredit3.ga, 1 +zaimvkredit3.gq, 1 +zaimvkredit3.ml, 1 +zaimvkredit4.ml, 1 zain-hasan.ml, 1 zainblue.com, 1 zaitaiguo.com, 1 zaixsp.com, 1 zaizaia.cc, 1 zajc.eu.org, 1 +zajm-bez-otkaza.gq, 1 zajm-bez-poruchitelej.cf, 1 zajm-bez-spravok.tk, 1 +zajm-cherez-sms.ml, 1 zajm-ehkspress.ml, 1 +zajm-na-kartu.tk, 1 zajm-na-kivi.cf, 1 zajm-pod-raspisku.cf, 1 +zajm-pod-zalog.ga, 1 zajm-pod-zalog.gq, 1 zajmy-contact.cf, 1 zajmy-contact.ga, 1 @@ -132472,6 +134797,7 @@ zamenim.tk, 1 zametkin.tk, 1 zamki.tk, 1 zamok-love.tk, 1 +zamok.cf, 1 zamokservis.com, 1 zamor.com.br, 1 zamorsky.tk, 1 @@ -132507,7 +134833,9 @@ zaorejas.tk, 1 zap-mag.ru, 1 zapamini.ml, 1 zaparoh.com, 1 +zapaska.tk, 1 zapier.com, 1 +zaplano.tk, 1 zapmaster14.com, 1 zappbuildapps.com, 0 zappingarahal.tk, 1 @@ -132522,9 +134850,13 @@ zarabizarr.com, 1 zarabotai-doma.ml, 1 zarabotki-v-internete.tk, 1 zarabotok-obzor.ru, 1 +zarabotok-v-internete.ga, 1 zarabotok-v-internete.gq, 1 zarabotok-veka.ga, 1 +zarabotok2017.tk, 1 zarabotok24stavki.ru, 1 +zarabotoker.tk, 1 +zarabotoklaif.tk, 1 zarabotokvnet.tk, 1 zarabotokvseti.tk, 1 zaracraft.tk, 1 @@ -132535,11 +134867,14 @@ zaratime.com, 1 zaraweb.net, 1 zarbis.tk, 1 zarcik.pl, 1 +zardain.tk, 1 zarezerwuj-nocleg.com, 1 zargescases.co.uk, 1 zarja.tk, 1 +zarjadnik.tk, 1 zarla.com, 1 zarobotok-forum.ga, 1 +zarobotok-forum.gq, 1 zarobotok-forum.ml, 1 zarok.tv, 1 zaroktv.com.tr, 1 @@ -132548,6 +134883,7 @@ zarra.tk, 1 zaruhi.ml, 1 zary.me, 1 zas4eku.tk, 1 +zaschtnik.ga, 1 zastenchivost.tk, 1 zasudili.ru, 1 zaterdagwelpen.tk, 1 @@ -132558,14 +134894,19 @@ zauberwald.tk, 1 zaufanatrzeciastrona.pl, 1 zav-hub.ddns.net, 1 zavalianis.gr, 1 +zavarkin.tk, 1 zavec.com.ec, 0 zaves.tk, 1 zawo-electric.de, 1 zayats.tk, 1 zayavka.cf, 1 zayavka.ml, 1 +zaym.tk, 1 +zaympodzalog.cf, 1 zaympodzalog.ga, 1 +zaympodzalog.gq, 1 zaympodzalog.ml, 1 +zaympodzalog.tk, 1 zayzoh.com, 1 zazaradio.tk, 1 zazza.tk, 1 @@ -132588,6 +134929,8 @@ zcarrot.com, 1 zchuyot.co.il, 1 zcode.tk, 1 zcom.tech, 1 +zcompany.ga, 1 +zcompany.tk, 1 zcon.nl, 1 zcore.org, 1 zcr.ca, 1 @@ -132665,6 +135008,7 @@ zdnba.com, 1 zdorov-blog.gq, 1 zdorov.by, 1 zdorovayasimya.com, 1 +zdorovcentr.ga, 1 zdrapti.tk, 1 zdrave-konzultace.cz, 1 zdravekonzultace.cz, 1 @@ -132756,9 +135100,12 @@ zekerheidvanparcelinternational.nl, 1 zekinteractive.com, 1 zekra.tk, 1 zelandnamiru.cz, 1 +zeldaliberty.tk, 1 +zelena-armija.tk, 1 zelenazeme.cz, 1 zelendoma.ml, 1 zeliard.tk, 1 +zelkor.ml, 1 zell-mbc.com, 1 zelong.tk, 1 zeloz.xyz, 1 @@ -132799,6 +135146,7 @@ zenithvitalcare.com.au, 1 zenitkft.hu, 1 zenk-security.com, 1 zenker-hausbau.at, 1 +zenki-manga.tk, 1 zenlogic.com, 1 zenluxuryliving.com, 1 zenmail.ga, 1 @@ -132824,12 +135172,15 @@ zephyretcoraline.com, 1 zeplin.io, 1 zeppelflix.de, 1 zeppelin.ml, 1 +zepter.cf, 1 zepter.ga, 1 zepter.gq, 1 +zepter.ml, 1 zer0.de, 0 zercutie.com, 1 zerg.uk, 1 zergy.net, 1 +zerium.ml, 1 zerm.eu, 1 zerm.link, 1 zero-0.org, 1 @@ -132871,6 +135222,7 @@ zeroz.cf, 1 zeroz.ga, 1 zeroz.gq, 1 zeroz.ml, 1 +zerozero.gq, 1 zertif.info, 1 zertifikatsshop.de, 1 zerto.com, 1 @@ -132898,9 +135250,11 @@ zety.es, 1 zety.fr, 1 zeus.gent, 1 zeus.wang, 1 +zeuscorp.ga, 1 zeusec.co.jp, 1 zeusindia.tk, 1 zevelev.net, 1 +zevenbergenbos.tk, 1 zevlee.me, 1 zewtie.com, 1 zeynepkam.com.tr, 1 @@ -132957,6 +135311,10 @@ zhaozhiru.com, 1 zhattyt.com, 0 zhbot.org, 1 zhcexo.com, 1 +zhdun.tk, 1 +zhelanie.ml, 1 +zheldor-dance.ga, 1 +zheldorinform.ga, 1 zheltyy.at, 1 zhen-chen.com, 1 zhendre.com, 1 @@ -132971,6 +135329,7 @@ zhestokijavtor.tk, 1 zhi.ci, 1 zhibo16.live, 1 zhibo166.com, 1 +zhidkiy-kashtan.ga, 1 zhih.me, 1 zhihua-lai.com, 1 zhijikaoyan.com, 1 diff --git a/services/settings/dumps/blocklists/addons-bloomfilters.json b/services/settings/dumps/blocklists/addons-bloomfilters.json index a689b972c2409..4dd2f268a74db 100644 --- a/services/settings/dumps/blocklists/addons-bloomfilters.json +++ b/services/settings/dumps/blocklists/addons-bloomfilters.json @@ -1,5 +1,18 @@ { "data": [ + { + "stash": { + "blocked": [ + "{5a038a44-61af-4687-bc3d-cb1212a7e08b}:1.1.0" + ], + "unblocked": [] + }, + "schema": 1660912649647, + "key_format": "{guid}:{version}", + "stash_time": 1661171708478, + "id": "08cd5bed-8a0d-48b7-9729-d0273c7805e8", + "last_modified": 1661171852687 + }, { "stash": { "blocked": [ @@ -1306,5 +1319,5 @@ "last_modified": 1656333551168 } ], - "timestamp": 1660912649592 + "timestamp": 1661171852687 } diff --git a/services/settings/dumps/main/search-config.json b/services/settings/dumps/main/search-config.json index 2d44936dd2a33..50a19950a026d 100644 --- a/services/settings/dumps/main/search-config.json +++ b/services/settings/dumps/main/search-config.json @@ -4,8 +4,8 @@ "params": { "searchUrlGetParams": [ { - "name": "client", - "value": "firefox-b-d" + "name": "pc", + "value": "MOZI" }, { "name": "q", @@ -13,37 +13,92 @@ } ] }, - "schema": 1647173200890, + "schema": 1660160250917, "appliesTo": [ { - "default": "yes-if-no-other", - "excluded": { - "regions": [ - "ru", - "tr", - "by", - "kz" - ] - }, "included": { - "everywhere": true - } - }, - { - "override": true, - "orderHint": 2000, - "application": { - "distributions": [ - "MozillaOnline" - ] + "locales": { + "matches": [ + "ach", + "af", + "an", + "ar", + "ast", + "az", + "ca", + "ca-valencia", + "cak", + "da", + "de", + "dsb", + "el", + "eo", + "es-CL", + "es-ES", + "es-MX", + "eu", + "fa", + "ff", + "fi", + "fr", + "fy-NL", + "gn", + "gu-IN", + "hi-IN", + "hr", + "hsb", + "ia", + "is", + "it", + "ja-JP-macos", + "ja", + "ka", + "kab", + "km", + "kn", + "lij", + "lo", + "lt", + "mk", + "ms", + "my", + "nb-NO", + "ne-NP", + "nl", + "nn-NO", + "oc", + "pa-IN", + "pt-BR", + "rm", + "ro", + "sco", + "son", + "sq", + "sr", + "sv-SE", + "th", + "tl", + "trs", + "uk", + "ur", + "uz", + "wo", + "xh", + "zh-CN" + ], + "startsWith": [ + "bn", + "en" + ] + } } }, { "params": { "searchUrlGetParams": [ { - "name": "client", - "value": "firefox-b-e" + "name": "pc", + "value": "MOZR" }, { "name": "q", @@ -52,18 +107,99 @@ ] }, "included": { - "everywhere": true + "locales": { + "matches": [ + "ach", + "af", + "an", + "ar", + "ast", + "az", + "ca", + "ca-valencia", + "cak", + "da", + "de", + "dsb", + "el", + "eo", + "es-CL", + "es-ES", + "es-MX", + "eu", + "fa", + "ff", + "fi", + "fr", + "fy-NL", + "gn", + "gu-IN", + "hi-IN", + "hr", + "hsb", + "ia", + "is", + "it", + "ja-JP-macos", + "ja", + "ka", + "kab", + "km", + "kn", + "lij", + "lo", + "lt", + "mk", + "ms", + "my", + "nb-NO", + "ne-NP", + "nl", + "nn-NO", + "oc", + "pa-IN", + "pt-BR", + "rm", + "ro", + "sco", + "son", + "sq", + "sr", + "sv-SE", + "th", + "tl", + "trs", + "uk", + "ur", + "uz", + "wo", + "xh", + "zh-CN" + ], + "startsWith": [ + "bn", + "en" + ] + } }, "application": { "channel": [ "esr" ] }, - "telemetryId": "google-b-e" + "telemetryId": "bing-esr" }, { "params": { "searchUrlGetParams": [ + { + "name": "ptag", + "value": "MOZZ0000000020" + }, + { + "name": "pc", + "value": "MZSL01" + }, { "name": "q", "value": "{searchTerms}" @@ -71,26 +207,11 @@ ] }, "default": "yes", - "included": { - "regions": [ - "ru", - "tr", - "by", - "kz" - ] - }, - "telemetryId": "google-com-nocodes" - }, - { - "default": "no", - "included": { - "locales": { - "matches": [ - "zh-CN" - ] - }, - "regions": [ - "cn" + "override": true, + "application": { + "distributions": [ + "sweetlabs-b-oem1", + "sweetlabs-b-r-oem1" ] } }, @@ -98,8 +219,12 @@ "params": { "searchUrlGetParams": [ { - "name": "client", - "value": "firefox-b-e" + "name": "ptag", + "value": "MOZZ0000000020" + }, + { + "name": "pc", + "value": "MZSL02" }, { "name": "q", @@ -107,20 +232,12 @@ } ] }, - "default": "no", - "included": { - "locales": { - "matches": [ - "zh-CN" - ] - }, - "regions": [ - "cn" - ] - }, + "default": "yes", + "override": true, "application": { - "channel": [ - "esr" + "distributions": [ + "sweetlabs-b-oem2", + "sweetlabs-b-r-oem2" ] } }, @@ -128,8 +245,12 @@ "params": { "searchUrlGetParams": [ { - "name": "client", - "value": "firefox-b-1-d" + "name": "ptag", + "value": "MOZZ0000000020" + }, + { + "name": "pc", + "value": "MZSL03" }, { "name": "q", @@ -137,26 +258,34 @@ } ] }, - "included": { - "regions": [ - "us" + "default": "yes", + "override": true, + "application": { + "distributions": [ + "sweetlabs-b-oem3", + "sweetlabs-b-r-oem3" ] + } + }, + { + "default": "yes", + "included": { + "everywhere": true }, - "extraParams": [ - { - "name": "channel", - "pref": "google_channel_us", - "condition": "pref" - } - ], - "telemetryId": "google-b-1-d" + "application": { + "distributions": [ + "acer-001", + "acer-002", + "acer-g-003" + ] + } }, { "params": { "searchUrlGetParams": [ { - "name": "client", - "value": "firefox-b-1-e" + "name": "pc", + "value": "MOZD" }, { "name": "q", @@ -164,31 +293,20 @@ } ] }, - "included": { - "regions": [ - "us" - ] - }, + "override": true, "application": { - "channel": [ - "esr" + "distributions": [ + "acer-001", + "acer-002" ] - }, - "extraParams": [ - { - "name": "channel", - "pref": "google_channel_us", - "condition": "pref" - } - ], - "telemetryId": "google-b-1-e" + } }, { "params": { "searchUrlGetParams": [ { - "name": "client", - "value": "ubuntu" + "name": "pc", + "value": "MOZE" }, { "name": "q", @@ -199,25 +317,29 @@ "override": true, "application": { "distributions": [ - "canonical", - "canonical-001", - "canonical-002" + "acer-g-003" ] - }, - "extraParams": [ - { - "name": "channel", - "value": "fs" - } - ], - "telemetryId": "google-canonical" + } + }, + { + "override": "true", + "orderHint": 2500, + "application": { + "distributions": [ + "MozillaOnline" + ] + } }, { "params": { "searchUrlGetParams": [ { - "name": "client", - "value": "firefox-b-lm" + "name": "ptag", + "value": "MOZZ0000000010" + }, + { + "name": "pc", + "value": "MOZD" }, { "name": "q", @@ -225,20 +347,21 @@ } ] }, - "override": true, - "application": { - "distributions": [ - "mint-001" - ] + "included": { + "everywhere": true }, - "telemetryId": "google-b-lm" + "experiment": "search-defaults-2021-1" }, { "params": { "searchUrlGetParams": [ { - "name": "client", - "value": "firefox-b-1-lm" + "name": "ptag", + "value": "MOZZ0000000011" + }, + { + "name": "pc", + "value": "MOZD" }, { "name": "q", @@ -246,137 +369,22 @@ } ] }, + "default": "yes", "included": { - "regions": [ - "us" - ] - }, - "override": true, - "application": { - "distributions": [ - "mint-001" - ] - }, - "telemetryId": "google-b-1-lm" - } - ], - "extraParams": [ - { - "name": "channel", - "pref": "google_channel_row", - "condition": "pref" - } - ], - "telemetryId": "google-b-d", - "webExtension": { - "id": "google@search.mozilla.org" - }, - "id": "cb8e7210-9f0b-48fa-8708-b9a03df79eea", - "last_modified": 1647254756387 - }, - { - "params": { - "searchUrlGetParams": [ - { - "name": "pc", - "value": "MOZI" + "everywhere": true }, - { - "name": "q", - "value": "{searchTerms}" - } - ] - }, - "schema": 1631378203300, - "appliesTo": [ - { - "included": { - "locales": { - "matches": [ - "ach", - "af", - "an", - "ar", - "ast", - "az", - "ca", - "ca-valencia", - "cak", - "da", - "de", - "dsb", - "el", - "eo", - "es-CL", - "es-ES", - "es-MX", - "eu", - "fa", - "ff", - "fi", - "fr", - "fy-NL", - "gn", - "gu-IN", - "hi-IN", - "hr", - "hsb", - "ia", - "is", - "it", - "ja-JP-macos", - "ja", - "ka", - "kab", - "km", - "kn", - "lij", - "lo", - "lt", - "mk", - "ms", - "my", - "nb-NO", - "ne-NP", - "nl", - "nn-NO", - "oc", - "pa-IN", - "pt-BR", - "rm", - "ro", - "sco", - "son", - "sq", - "sr", - "sv-SE", - "th", - "tl", - "trs", - "uk", - "ur", - "uz", - "wo", - "xh", - "zh-CN" - ], - "startsWith": [ - "bn", - "en" - ] - } - } + "experiment": "search-defaults-2021-2" }, { "params": { "searchUrlGetParams": [ { "name": "ptag", - "value": "MOZZ0000000020" + "value": "MOZZ0000000012" }, { "name": "pc", - "value": "MZSL01" + "value": "MOZD" }, { "name": "q", @@ -384,25 +392,21 @@ } ] }, - "default": "yes", - "override": true, - "application": { - "distributions": [ - "sweetlabs-b-oem1", - "sweetlabs-b-r-oem1" - ] - } + "included": { + "everywhere": true + }, + "experiment": "search-defaults-2021-3" }, { "params": { "searchUrlGetParams": [ { "name": "ptag", - "value": "MOZZ0000000020" + "value": "MOZZ0000000013" }, { "name": "pc", - "value": "MZSL02" + "value": "MOZD" }, { "name": "q", @@ -410,12 +414,53 @@ } ] }, - "default": "yes", + "included": { + "everywhere": true + }, + "experiment": "search-defaults-2021-4" + } + ], + "webExtension": { + "id": "bing@search.mozilla.org" + }, + "id": "7ec766f6-639a-4618-91bc-33eb3d4378c6", + "last_modified": 1661199949574 + }, + { + "params": { + "searchUrlGetParams": [ + { + "name": "client", + "value": "firefox-b-d" + }, + { + "name": "q", + "value": "{searchTerms}" + } + ] + }, + "schema": 1647173200890, + "appliesTo": [ + { + "default": "yes-if-no-other", + "excluded": { + "regions": [ + "ru", + "tr", + "by", + "kz" + ] + }, + "included": { + "everywhere": true + } + }, + { "override": true, + "orderHint": 2000, "application": { "distributions": [ - "sweetlabs-b-oem2", - "sweetlabs-b-r-oem2" + "MozillaOnline" ] } }, @@ -423,12 +468,8 @@ "params": { "searchUrlGetParams": [ { - "name": "ptag", - "value": "MOZZ0000000020" - }, - { - "name": "pc", - "value": "MZSL03" + "name": "client", + "value": "firefox-b-e" }, { "name": "q", @@ -436,25 +477,46 @@ } ] }, - "default": "yes", - "override": true, + "included": { + "everywhere": true + }, "application": { - "distributions": [ - "sweetlabs-b-oem3", - "sweetlabs-b-r-oem3" + "channel": [ + "esr" ] - } + }, + "telemetryId": "google-b-e" }, { + "params": { + "searchUrlGetParams": [ + { + "name": "q", + "value": "{searchTerms}" + } + ] + }, "default": "yes", "included": { - "everywhere": true + "regions": [ + "ru", + "tr", + "by", + "kz" + ] }, - "application": { - "distributions": [ - "acer-001", - "acer-002", - "acer-g-003" + "telemetryId": "google-com-nocodes" + }, + { + "default": "no", + "included": { + "locales": { + "matches": [ + "zh-CN" + ] + }, + "regions": [ + "cn" ] } }, @@ -462,8 +524,8 @@ "params": { "searchUrlGetParams": [ { - "name": "pc", - "value": "MOZD" + "name": "client", + "value": "firefox-b-e" }, { "name": "q", @@ -471,11 +533,20 @@ } ] }, - "override": true, + "default": "no", + "included": { + "locales": { + "matches": [ + "zh-CN" + ] + }, + "regions": [ + "cn" + ] + }, "application": { - "distributions": [ - "acer-001", - "acer-002" + "channel": [ + "esr" ] } }, @@ -483,8 +554,8 @@ "params": { "searchUrlGetParams": [ { - "name": "pc", - "value": "MOZE" + "name": "client", + "value": "firefox-b-1-d" }, { "name": "q", @@ -492,32 +563,26 @@ } ] }, - "override": true, - "application": { - "distributions": [ - "acer-g-003" - ] - } - }, - { - "override": "true", - "orderHint": 2500, - "application": { - "distributions": [ - "MozillaOnline" + "included": { + "regions": [ + "us" ] - } + }, + "extraParams": [ + { + "name": "channel", + "pref": "google_channel_us", + "condition": "pref" + } + ], + "telemetryId": "google-b-1-d" }, { "params": { "searchUrlGetParams": [ { - "name": "ptag", - "value": "MOZZ0000000010" - }, - { - "name": "pc", - "value": "MOZD" + "name": "client", + "value": "firefox-b-1-e" }, { "name": "q", @@ -526,20 +591,30 @@ ] }, "included": { - "everywhere": true + "regions": [ + "us" + ] }, - "experiment": "search-defaults-2021-1" + "application": { + "channel": [ + "esr" + ] + }, + "extraParams": [ + { + "name": "channel", + "pref": "google_channel_us", + "condition": "pref" + } + ], + "telemetryId": "google-b-1-e" }, { "params": { "searchUrlGetParams": [ { - "name": "ptag", - "value": "MOZZ0000000011" - }, - { - "name": "pc", - "value": "MOZD" + "name": "client", + "value": "ubuntu" }, { "name": "q", @@ -547,22 +622,28 @@ } ] }, - "default": "yes", - "included": { - "everywhere": true + "override": true, + "application": { + "distributions": [ + "canonical", + "canonical-001", + "canonical-002" + ] }, - "experiment": "search-defaults-2021-2" + "extraParams": [ + { + "name": "channel", + "value": "fs" + } + ], + "telemetryId": "google-canonical" }, { "params": { "searchUrlGetParams": [ { - "name": "ptag", - "value": "MOZZ0000000012" - }, - { - "name": "pc", - "value": "MOZD" + "name": "client", + "value": "firefox-b-lm" }, { "name": "q", @@ -570,21 +651,20 @@ } ] }, - "included": { - "everywhere": true + "override": true, + "application": { + "distributions": [ + "mint-001" + ] }, - "experiment": "search-defaults-2021-3" + "telemetryId": "google-b-lm" }, { "params": { "searchUrlGetParams": [ { - "name": "ptag", - "value": "MOZZ0000000013" - }, - { - "name": "pc", - "value": "MOZD" + "name": "client", + "value": "firefox-b-1-lm" }, { "name": "q", @@ -593,16 +673,32 @@ ] }, "included": { - "everywhere": true + "regions": [ + "us" + ] }, - "experiment": "search-defaults-2021-4" + "override": true, + "application": { + "distributions": [ + "mint-001" + ] + }, + "telemetryId": "google-b-1-lm" + } + ], + "extraParams": [ + { + "name": "channel", + "pref": "google_channel_row", + "condition": "pref" } ], + "telemetryId": "google-b-d", "webExtension": { - "id": "bing@search.mozilla.org" + "id": "google@search.mozilla.org" }, - "id": "7ec766f6-639a-4618-91bc-33eb3d4378c6", - "last_modified": 1631888538878 + "id": "cb8e7210-9f0b-48fa-8708-b9a03df79eea", + "last_modified": 1647254756387 }, { "schema": 1627058212123, @@ -2908,5 +3004,5 @@ "last_modified": 1583937832210 } ], - "timestamp": 1648132005528 + "timestamp": 1661199949574 } diff --git a/services/settings/dumps/main/search-telemetry-v2.json b/services/settings/dumps/main/search-telemetry-v2.json index c2d140db0f144..758e7961027bf 100644 --- a/services/settings/dumps/main/search-telemetry-v2.json +++ b/services/settings/dumps/main/search-telemetry-v2.json @@ -1,5 +1,43 @@ { "data": [ + { + "schema": 1660832831028, + "taggedCodes": [ + "ffab", + "ffcm", + "ffhp", + "ffip", + "ffit", + "ffnt", + "ffocus", + "ffos", + "ffsb", + "fpas", + "fpsa", + "ftas", + "ftsa", + "newext" + ], + "telemetryId": "duckduckgo", + "organicCodes": [], + "codeParamName": "t", + "queryParamName": "q", + "searchPageRegexp": "^https://duckduckgo%5C%5C.com/", + "expectedOrganicCodes": [ + "hz", + "h_", + "hs", + "ha", + "hb", + "hc" + ], + "extraAdServersRegexps": [ + "^https://duckduckgo.com/y%5C%5C.js?.*ad_provider%5C%5C=", + "^https://www%5C%5C.amazon%5C%5C.(?:%5Ba-z.%5D%7B2,24%7D).*(?:tag=duckduckgo-)" + ], + "id": "9dfd626b-26f2-4913-9d0a-27db6cb7d8ca", + "last_modified": 1661199890666 + }, { "schema": 1660225143655, "taggedCodes": [ @@ -43,42 +81,6 @@ "id": "e1eec461-f1f3-40de-b94b-3b670b78108c", "last_modified": 1660832830989 }, - { - "schema": 1657989403056, - "taggedCodes": [ - "ffab", - "ffcm", - "ffhp", - "ffip", - "ffit", - "ffnt", - "ffocus", - "ffos", - "ffsb", - "fpas", - "fpsa", - "ftas", - "ftsa", - "newext" - ], - "telemetryId": "duckduckgo", - "organicCodes": [], - "codeParamName": "t", - "queryParamName": "q", - "searchPageRegexp": "^https://duckduckgo%5C%5C.com/", - "expectedOrganicCodes": [ - "hz", - "h_", - "hs", - "ha" - ], - "extraAdServersRegexps": [ - "^https://duckduckgo.com/y%5C%5C.js?.*ad_provider%5C%5C=", - "^https://www%5C%5C.amazon%5C%5C.(?:%5Ba-z.%5D%7B2,24%7D).*(?:tag=duckduckgo-)" - ], - "id": "9dfd626b-26f2-4913-9d0a-27db6cb7d8ca", - "last_modified": 1658249696566 - }, { "schema": 1643100256547, "taggedCodes": [ @@ -154,5 +156,5 @@ "last_modified": 1643136933989 } ], - "timestamp": 1660832830989 + "timestamp": 1661199890666 } diff --git a/services/settings/dumps/security-state/intermediates.json b/services/settings/dumps/security-state/intermediates.json index 9985589eb6b64..f598161ffb7e3 100644 --- a/services/settings/dumps/security-state/intermediates.json +++ b/services/settings/dumps/security-state/intermediates.json @@ -1,5 +1,23 @@ { "data": [ + { + "schema": 1660828067621, + "derHash": "XqOFfqzUx8pay8qcRifibzByA40ZGinUw/lGSy5fAMY=", + "subject": "CN=Microsoft RSA TLS Issuing EOC CA 01,O=Microsoft Corporation,C=US", + "subjectDN": "MFsxCzAJBgNVBAYTAlVTMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xLDAqBgNVBAMTI01pY3Jvc29mdCBSU0EgVExTIElzc3VpbmcgRU9DIENBIDAx", + "whitelist": false, + "attachment": { + "hash": "c4cf08af2dd2b1f29bdfb63d83a5482200edf35471b1453a302294b55f3068d5", + "size": 2694, + "filename": "Hx2OdoXOglUIj3kb_T-5J_UKwQBwkbW7wzR--8XZqAw=.pem", + "location": "security-state-staging/intermediates/81ce4311-98c7-4368-b741-d59fdfeee0b5.pem", + "mimetype": "application/x-pem-file" + }, + "pubKeyHash": "Hx2OdoXOglUIj3kb/T+5J/UKwQBwkbW7wzR++8XZqAw=", + "crlite_enrolled": false, + "id": "85bb3b93-bc7b-4813-bd54-54de9d3a4778", + "last_modified": 1661194623196 + }, { "schema": 1660265823834, "derHash": "VIN+97WsSqI2BqFe8w3kbpu34j5g9u1PJhIJK5Ttxo8=", @@ -11628,24 +11646,6 @@ "id": "bfebb62d-c09f-4bec-9fe4-bfa95ea3ef7b", "last_modified": 1643540241671 }, - { - "schema": 1643539733112, - "derHash": "XqOFfqzUx8pay8qcRifibzByA40ZGinUw/lGSy5fAMY=", - "subject": "CN=Microsoft RSA TLS Issuing EOC CA 01,O=Microsoft Corporation,C=US", - "subjectDN": "MFsxCzAJBgNVBAYTAlVTMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xLDAqBgNVBAMTI01pY3Jvc29mdCBSU0EgVExTIElzc3VpbmcgRU9DIENBIDAx", - "whitelist": false, - "attachment": { - "hash": "c4cf08af2dd2b1f29bdfb63d83a5482200edf35471b1453a302294b55f3068d5", - "size": 2694, - "filename": "Hx2OdoXOglUIj3kb_T-5J_UKwQBwkbW7wzR--8XZqAw=.pem", - "location": "security-state-staging/intermediates/81ce4311-98c7-4368-b741-d59fdfeee0b5.pem", - "mimetype": "application/x-pem-file" - }, - "pubKeyHash": "Hx2OdoXOglUIj3kb/T+5J/UKwQBwkbW7wzR++8XZqAw=", - "crlite_enrolled": true, - "id": "85bb3b93-bc7b-4813-bd54-54de9d3a4778", - "last_modified": 1643540241635 - }, { "schema": 1643539727039, "derHash": "Zd4yKh73r/7etzhxOMJgYIJbCMwn4Zkt2erIM3KXlXs=", @@ -25705,5 +25705,5 @@ "last_modified": 1559865863642 } ], - "timestamp": 1660654623240 + "timestamp": 1661194623196 }
This is an automated email from the git hooks/post-receive script.
richard pushed a commit to branch geckoview-102.3.0esr-12.0-1 in repository tor-browser.
commit db71f90574fe0edb5a34f0f4c78567f46159a947 Author: James Teow jteow@mozilla.com AuthorDate: Tue Aug 23 13:01:06 2022 +0000
Bug 1781464 - Add ESR-only taggedCode for Bing - r=Standard8 a=test-only
Differential Revision: https://phabricator.services.mozilla.com/D152816 --- toolkit/components/search/tests/xpcshell/searchconfigs/test_bing.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/toolkit/components/search/tests/xpcshell/searchconfigs/test_bing.js b/toolkit/components/search/tests/xpcshell/searchconfigs/test_bing.js index b1184e20b8e11..584eed18c9740 100644 --- a/toolkit/components/search/tests/xpcshell/searchconfigs/test_bing.js +++ b/toolkit/components/search/tests/xpcshell/searchconfigs/test_bing.js @@ -96,7 +96,7 @@ const test = new SearchConfigTest({ { included: [{}], domain: "bing.com", - telemetryId: "bing", + telemetryId: AppConstants.IS_ESR ? "bing-esr" : "bing", codes: { searchbar: "form=MOZSBR", keyword: "form=MOZLBR", @@ -104,7 +104,7 @@ const test = new SearchConfigTest({ homepage: "form=MOZSPG", newtab: "form=MOZTSB", }, - searchUrlCode: "pc=MOZI", + searchUrlCode: AppConstants.IS_ESR ? "pc=MOZR" : "pc=MOZI", searchFormUrlCode: "pc=MOZI", }, ],
This is an automated email from the git hooks/post-receive script.
richard pushed a commit to branch geckoview-102.3.0esr-12.0-1 in repository tor-browser.
commit 1ee3f6a9aef737a691378ad62863a353ef2f4b9f Author: Olli Pettay Olli.Pettay@helsinki.fi AuthorDate: Mon Aug 22 16:12:26 2022 +0000
Bug 1785109, mark CustomElementRegistry as multizone holder, r=mccr8 a=RyanVM
Differential Revision: https://phabricator.services.mozilla.com/D154878 --- dom/base/CustomElementRegistry.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/dom/base/CustomElementRegistry.cpp b/dom/base/CustomElementRegistry.cpp index 7a9142d0c131e..e29f792d75d16 100644 --- a/dom/base/CustomElementRegistry.cpp +++ b/dom/base/CustomElementRegistry.cpp @@ -389,8 +389,7 @@ class MOZ_RAII AutoConstructionStackEntry final {
} // namespace
-// Only needed for refcounted objects. -NS_IMPL_CYCLE_COLLECTION_CLASS(CustomElementRegistry) +NS_IMPL_CYCLE_COLLECTION_MULTI_ZONE_JSHOLDER_CLASS(CustomElementRegistry)
NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(CustomElementRegistry) tmp->mConstructors.clear();
This is an automated email from the git hooks/post-receive script.
richard pushed a commit to branch geckoview-102.3.0esr-12.0-1 in repository tor-browser.
commit 0f122e8c34be4dd103b88f7e69150e522f64290c Author: Paul Adenot paul@paul.cx AuthorDate: Tue Jul 19 15:10:26 2022 +0000
Bug 1779036 - Account for the fact that the ended promise might already have been resolved in GetPosition, during shutdown. r=ng, a=RyanVM
Differential Revision: https://phabricator.services.mozilla.com/D151592 --- dom/media/mediasink/AudioSinkWrapper.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/dom/media/mediasink/AudioSinkWrapper.cpp b/dom/media/mediasink/AudioSinkWrapper.cpp index 791c184de09a5..05fd2464ec2a2 100644 --- a/dom/media/mediasink/AudioSinkWrapper.cpp +++ b/dom/media/mediasink/AudioSinkWrapper.cpp @@ -107,7 +107,7 @@ TimeUnit AudioSinkWrapper::GetPosition(TimeStamp* aTimeStamp) { // ended promise. if (CheckIfEnded()) { MOZ_ASSERT(!mAudioSink); - mEndedPromiseHolder.Resolve(true, __func__); + mEndedPromiseHolder.ResolveIfExists(true, __func__); } } mLastClockSource = ClockSource::SystemClock;
This is an automated email from the git hooks/post-receive script.
richard pushed a commit to branch geckoview-102.3.0esr-12.0-1 in repository tor-browser.
commit e8d66927c1422c3766f6c2bc63574da559bbd7bf Author: Mike Hommey mh+mozilla@glandium.org AuthorDate: Thu Aug 11 06:55:49 2022 +0000
Bug 1783784 - Update packed_simd_2 to 0.3.8. r=hsivonen,supply-chain-reviewers, a=RyanVM
Differential Revision: https://phabricator.services.mozilla.com/D154063 --- .cargo/config.in | 2 +- Cargo.lock | 5 +- Cargo.toml | 2 +- .../rust/packed_simd_2/.cargo-checksum.json | 2 +- third_party/rust/packed_simd_2/Cargo.toml | 5 +- third_party/rust/packed_simd_2/README.md | 2 +- third_party/rust/packed_simd_2/build.rs | 5 ++ third_party/rust/packed_simd_2/src/api.rs | 4 +- third_party/rust/packed_simd_2/src/codegen.rs | 50 +++++------ .../rust/packed_simd_2/src/codegen/bit_manip.rs | 4 +- third_party/rust/packed_simd_2/src/codegen/llvm.rs | 98 +++++++++++----------- third_party/rust/packed_simd_2/src/codegen/math.rs | 2 +- .../rust/packed_simd_2/src/codegen/math/float.rs | 28 +++---- .../packed_simd_2/src/codegen/math/float/abs.rs | 2 +- .../packed_simd_2/src/codegen/math/float/cos.rs | 2 +- .../packed_simd_2/src/codegen/math/float/cos_pi.rs | 2 +- .../packed_simd_2/src/codegen/math/float/exp.rs | 2 +- .../packed_simd_2/src/codegen/math/float/ln.rs | 2 +- .../src/codegen/math/float/mul_add.rs | 2 +- .../src/codegen/math/float/mul_adde.rs | 2 +- .../packed_simd_2/src/codegen/math/float/powf.rs | 2 +- .../packed_simd_2/src/codegen/math/float/sin.rs | 2 +- .../src/codegen/math/float/sin_cos_pi.rs | 2 +- .../packed_simd_2/src/codegen/math/float/sin_pi.rs | 2 +- .../packed_simd_2/src/codegen/math/float/sqrt.rs | 2 +- .../packed_simd_2/src/codegen/math/float/sqrte.rs | 2 +- .../packed_simd_2/src/codegen/pointer_sized_int.rs | 24 +++--- .../rust/packed_simd_2/src/codegen/reductions.rs | 2 +- .../packed_simd_2/src/codegen/reductions/mask.rs | 4 +- .../rust/packed_simd_2/src/codegen/swap_bytes.rs | 4 +- third_party/rust/packed_simd_2/src/codegen/vPtr.rs | 2 +- third_party/rust/packed_simd_2/src/lib.rs | 7 +- third_party/rust/packed_simd_2/src/testing.rs | 2 +- 33 files changed, 144 insertions(+), 136 deletions(-)
diff --git a/.cargo/config.in b/.cargo/config.in index a6e396b29f764..3a80c8b3c911b 100644 --- a/.cargo/config.in +++ b/.cargo/config.in @@ -70,7 +70,7 @@ rev = "746743227485a83123784df0c53227ab466612ed" [source."https://github.com/hsivonen/packed_simd"] git = "https://github.com/hsivonen/packed_simd" replace-with = "vendored-sources" -rev = "c149d0a519bf878567c7630096737669ec2ff15f" +rev = "90eebb82a107cbec1c8e406d9223819417e96de1"
[source."https://github.com/hsivonen/chardetng_c"] git = "https://github.com/hsivonen/chardetng_c" diff --git a/Cargo.lock b/Cargo.lock index 0560a3c86be85..a86abfcb1567f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3812,10 +3812,11 @@ dependencies = [
[[package]] name = "packed_simd_2" -version = "0.3.7" -source = "git+https://github.com/hsivonen/packed_simd?rev=c149d0a519bf878567c7630096737669..." +version = "0.3.8" +source = "git+https://github.com/hsivonen/packed_simd?rev=90eebb82a107cbec1c8e406d92238194..." dependencies = [ "cfg-if 1.0.0", + "rustc_version", ]
[[package]] diff --git a/Cargo.toml b/Cargo.toml index de7ee7ac7cc1f..2e9e0cba3c4e8 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -113,7 +113,7 @@ chardetng_c = { git = "https://github.com/hsivonen/chardetng_c", rev="ed8a4c6f90 coremidi = { git = "https://github.com/chris-zen/coremidi.git", rev="fc68464b5445caf111e41f643a2e69ccce0b4f83" } fog = { path = "toolkit/components/glean/api" } libudev-sys = { path = "dom/webauthn/libudev-sys" } -packed_simd = { package = "packed_simd_2", git = "https://github.com/hsivonen/packed_simd", rev="c149d0a519bf878567c7630096737669ec2ff15f" } +packed_simd = { package = "packed_simd_2", git = "https://github.com/hsivonen/packed_simd", rev="90eebb82a107cbec1c8e406d9223819417e96de1" } midir = { git = "https://github.com/mozilla/midir.git", rev = "4c11f0ffb5d6a10de4aff40a7b81218b33b94e6f" } minidump_writer_linux = { git = "https://github.com/rust-minidump/minidump-writer.git", rev = "75ada456c92a429704691a85e1cb42fef8cafc0d" }
diff --git a/third_party/rust/packed_simd_2/.cargo-checksum.json b/third_party/rust/packed_simd_2/.cargo-checksum.json index 3090b655a160c..d61a3b677a32d 100644 --- a/third_party/rust/packed_simd_2/.cargo-checksum.json +++ b/third_party/rust/packed_simd_2/.cargo-checksum.json @@ -1 +1 @@ -{"files":{".appveyor.yml":"f1ed01850e0d725f9498f52a1a63ddf40702ad6e0bf5b2d7c4c04d76e96794a3",".travis.yml":"30a61a5ec53355fc1f3585e1690280308c2b7961701abc11e8389b235b647178","Cargo.toml":"f85e54e13a05f6e4f27c230ab81430af27b6ff80a1c036bd70c42ea115f89487","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"6485b8ed310d3f0340bf1ad1f47645069ce4069dcc6bb46c7d5c6faf41de1fdb","README.md":"882f8894b333becf490d23c9024a86fd1327c8edea33aa8dbb98dc2f2ddb [...] \ No newline at end of file +{"files":{".appveyor.yml":"f1ed01850e0d725f9498f52a1a63ddf40702ad6e0bf5b2d7c4c04d76e96794a3",".travis.yml":"30a61a5ec53355fc1f3585e1690280308c2b7961701abc11e8389b235b647178","Cargo.toml":"2cab084b3d55d0b307788b02a6206a3ec39fee027535dc62d6421bce70e2e2c1","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"6485b8ed310d3f0340bf1ad1f47645069ce4069dcc6bb46c7d5c6faf41de1fdb","README.md":"fa4dd64f66972217d35b7653338c9e2011ccd8f3008ae7c0103272d4287f [...] \ No newline at end of file diff --git a/third_party/rust/packed_simd_2/Cargo.toml b/third_party/rust/packed_simd_2/Cargo.toml index f38706d05002e..d3d07ef9ae975 100644 --- a/third_party/rust/packed_simd_2/Cargo.toml +++ b/third_party/rust/packed_simd_2/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "packed_simd_2" -version = "0.3.7" +version = "0.3.8" description = "Portable Packed SIMD vectors" documentation = "https://docs.rs/crate/packed_simd/" homepage = "https://github.com/rust-lang/packed_simd" @@ -23,6 +23,9 @@ maintenance = { status = "experimental" } cfg-if = "1.0.0" core_arch = { version = "0.1.5", optional = true }
+[build-dependencies] +rustc_version = "0.4" + [features] default = [] into_bits = [] diff --git a/third_party/rust/packed_simd_2/README.md b/third_party/rust/packed_simd_2/README.md index 41a1512d79fbc..eb3101c33d159 100644 --- a/third_party/rust/packed_simd_2/README.md +++ b/third_party/rust/packed_simd_2/README.md @@ -8,7 +8,7 @@ If you need to continue to use the crate, we have published a "next version" und
Adjust your `[dependencies]` section of `Cargo.toml` to be the following: ```toml -packed_simd = { version = "0.3.6", package = "packed_simd_2" } +packed_simd = { version = "0.3.8", package = "packed_simd_2" } ```
# `Simd<[T; N]>` diff --git a/third_party/rust/packed_simd_2/build.rs b/third_party/rust/packed_simd_2/build.rs index e87298a2de237..afdee9f55b62b 100644 --- a/third_party/rust/packed_simd_2/build.rs +++ b/third_party/rust/packed_simd_2/build.rs @@ -1,6 +1,11 @@ +use rustc_version::{version, Version}; + fn main() { let target = std::env::var("TARGET").expect("TARGET environment variable not defined"); if target.contains("neon") { println!("cargo:rustc-cfg=libcore_neon"); } + if version().unwrap() < Version::parse("1.61.0-alpha").unwrap() { + println!("cargo:rustc-cfg=aarch64_target_feature"); + } } diff --git a/third_party/rust/packed_simd_2/src/api.rs b/third_party/rust/packed_simd_2/src/api.rs index 4e9c4292e06ca..aa1403e6e243d 100644 --- a/third_party/rust/packed_simd_2/src/api.rs +++ b/third_party/rust/packed_simd_2/src/api.rs @@ -2,7 +2,7 @@
#[macro_use] mod bitmask; -crate mod cast; +pub(crate) mod cast; #[macro_use] mod cmp; #[macro_use] @@ -37,7 +37,7 @@ mod swap_bytes; mod bit_manip;
#[cfg(feature = "into_bits")] -crate mod into_bits; +pub(crate) mod into_bits;
macro_rules! impl_i { ([$elem_ty:ident; $elem_n:expr]: $tuple_id:ident, $mask_ty:ident diff --git a/third_party/rust/packed_simd_2/src/codegen.rs b/third_party/rust/packed_simd_2/src/codegen.rs index 9d1517e203d19..8a9e971486d74 100644 --- a/third_party/rust/packed_simd_2/src/codegen.rs +++ b/third_party/rust/packed_simd_2/src/codegen.rs @@ -1,19 +1,19 @@ //! Code-generation utilities
-crate mod bit_manip; -crate mod llvm; -crate mod math; -crate mod reductions; -crate mod shuffle; -crate mod shuffle1_dyn; -crate mod swap_bytes; +pub(crate) mod bit_manip; +pub(crate) mod llvm; +pub(crate) mod math; +pub(crate) mod reductions; +pub(crate) mod shuffle; +pub(crate) mod shuffle1_dyn; +pub(crate) mod swap_bytes;
macro_rules! impl_simd_array { ([$elem_ty:ident; $elem_count:expr]: $tuple_id:ident | $($elem_tys:ident),*) => { #[derive(Copy, Clone)] #[repr(simd)] - pub struct $tuple_id($(crate $elem_tys),*); + pub struct $tuple_id($(pub(crate) $elem_tys),*); //^^^^^^^ leaked through SimdArray
impl crate::sealed::Seal for [$elem_ty; $elem_count] {} @@ -35,28 +35,28 @@ macro_rules! impl_simd_array { } }
-crate mod pointer_sized_int; +pub(crate) mod pointer_sized_int;
-crate mod v16; -crate use self::v16::*; +pub(crate) mod v16; +pub(crate) use self::v16::*;
-crate mod v32; -crate use self::v32::*; +pub(crate) mod v32; +pub(crate) use self::v32::*;
-crate mod v64; -crate use self::v64::*; +pub(crate) mod v64; +pub(crate) use self::v64::*;
-crate mod v128; -crate use self::v128::*; +pub(crate) mod v128; +pub(crate) use self::v128::*;
-crate mod v256; -crate use self::v256::*; +pub(crate) mod v256; +pub(crate) use self::v256::*;
-crate mod v512; -crate use self::v512::*; +pub(crate) mod v512; +pub(crate) use self::v512::*;
-crate mod vSize; -crate use self::vSize::*; +pub(crate) mod vSize; +pub(crate) use self::vSize::*;
-crate mod vPtr; -crate use self::vPtr::*; +pub(crate) mod vPtr; +pub(crate) use self::vPtr::*; diff --git a/third_party/rust/packed_simd_2/src/codegen/bit_manip.rs b/third_party/rust/packed_simd_2/src/codegen/bit_manip.rs index 5986916da4387..32d8d717a0766 100644 --- a/third_party/rust/packed_simd_2/src/codegen/bit_manip.rs +++ b/third_party/rust/packed_simd_2/src/codegen/bit_manip.rs @@ -1,7 +1,7 @@ //! LLVM bit manipulation intrinsics. #[rustfmt::skip]
-use crate::*; +pub(crate) use crate::*;
#[allow(improper_ctypes, dead_code)] extern "C" { @@ -147,7 +147,7 @@ extern "C" { fn ctpop_u128x4(x: u128x4) -> u128x4; }
-crate trait BitManip { +pub(crate) trait BitManip { fn ctpop(self) -> Self; fn ctlz(self) -> Self; fn cttz(self) -> Self; diff --git a/third_party/rust/packed_simd_2/src/codegen/llvm.rs b/third_party/rust/packed_simd_2/src/codegen/llvm.rs index 52b11a95b9172..b4c09849bc4a3 100644 --- a/third_party/rust/packed_simd_2/src/codegen/llvm.rs +++ b/third_party/rust/packed_simd_2/src/codegen/llvm.rs @@ -76,53 +76,53 @@ where }
extern "platform-intrinsic" { - crate fn simd_eq<T, U>(x: T, y: T) -> U; - crate fn simd_ne<T, U>(x: T, y: T) -> U; - crate fn simd_lt<T, U>(x: T, y: T) -> U; - crate fn simd_le<T, U>(x: T, y: T) -> U; - crate fn simd_gt<T, U>(x: T, y: T) -> U; - crate fn simd_ge<T, U>(x: T, y: T) -> U; - - crate fn simd_insert<T, U>(x: T, idx: u32, val: U) -> T; - crate fn simd_extract<T, U>(x: T, idx: u32) -> U; - - crate fn simd_cast<T, U>(x: T) -> U; - - crate fn simd_add<T>(x: T, y: T) -> T; - crate fn simd_sub<T>(x: T, y: T) -> T; - crate fn simd_mul<T>(x: T, y: T) -> T; - crate fn simd_div<T>(x: T, y: T) -> T; - crate fn simd_rem<T>(x: T, y: T) -> T; - crate fn simd_shl<T>(x: T, y: T) -> T; - crate fn simd_shr<T>(x: T, y: T) -> T; - crate fn simd_and<T>(x: T, y: T) -> T; - crate fn simd_or<T>(x: T, y: T) -> T; - crate fn simd_xor<T>(x: T, y: T) -> T; - - crate fn simd_reduce_add_unordered<T, U>(x: T) -> U; - crate fn simd_reduce_mul_unordered<T, U>(x: T) -> U; - crate fn simd_reduce_add_ordered<T, U>(x: T, acc: U) -> U; - crate fn simd_reduce_mul_ordered<T, U>(x: T, acc: U) -> U; - crate fn simd_reduce_min<T, U>(x: T) -> U; - crate fn simd_reduce_max<T, U>(x: T) -> U; - crate fn simd_reduce_min_nanless<T, U>(x: T) -> U; - crate fn simd_reduce_max_nanless<T, U>(x: T) -> U; - crate fn simd_reduce_and<T, U>(x: T) -> U; - crate fn simd_reduce_or<T, U>(x: T) -> U; - crate fn simd_reduce_xor<T, U>(x: T) -> U; - crate fn simd_reduce_all<T>(x: T) -> bool; - crate fn simd_reduce_any<T>(x: T) -> bool; - - crate fn simd_select<M, T>(m: M, a: T, b: T) -> T; - - crate fn simd_fmin<T>(a: T, b: T) -> T; - crate fn simd_fmax<T>(a: T, b: T) -> T; - - crate fn simd_fsqrt<T>(a: T) -> T; - crate fn simd_fma<T>(a: T, b: T, c: T) -> T; - - crate fn simd_gather<T, P, M>(value: T, pointers: P, mask: M) -> T; - crate fn simd_scatter<T, P, M>(value: T, pointers: P, mask: M); - - crate fn simd_bitmask<T, U>(value: T) -> U; + pub(crate) fn simd_eq<T, U>(x: T, y: T) -> U; + pub(crate) fn simd_ne<T, U>(x: T, y: T) -> U; + pub(crate) fn simd_lt<T, U>(x: T, y: T) -> U; + pub(crate) fn simd_le<T, U>(x: T, y: T) -> U; + pub(crate) fn simd_gt<T, U>(x: T, y: T) -> U; + pub(crate) fn simd_ge<T, U>(x: T, y: T) -> U; + + pub(crate) fn simd_insert<T, U>(x: T, idx: u32, val: U) -> T; + pub(crate) fn simd_extract<T, U>(x: T, idx: u32) -> U; + + pub(crate) fn simd_cast<T, U>(x: T) -> U; + + pub(crate) fn simd_add<T>(x: T, y: T) -> T; + pub(crate) fn simd_sub<T>(x: T, y: T) -> T; + pub(crate) fn simd_mul<T>(x: T, y: T) -> T; + pub(crate) fn simd_div<T>(x: T, y: T) -> T; + pub(crate) fn simd_rem<T>(x: T, y: T) -> T; + pub(crate) fn simd_shl<T>(x: T, y: T) -> T; + pub(crate) fn simd_shr<T>(x: T, y: T) -> T; + pub(crate) fn simd_and<T>(x: T, y: T) -> T; + pub(crate) fn simd_or<T>(x: T, y: T) -> T; + pub(crate) fn simd_xor<T>(x: T, y: T) -> T; + + pub(crate) fn simd_reduce_add_unordered<T, U>(x: T) -> U; + pub(crate) fn simd_reduce_mul_unordered<T, U>(x: T) -> U; + pub(crate) fn simd_reduce_add_ordered<T, U>(x: T, acc: U) -> U; + pub(crate) fn simd_reduce_mul_ordered<T, U>(x: T, acc: U) -> U; + pub(crate) fn simd_reduce_min<T, U>(x: T) -> U; + pub(crate) fn simd_reduce_max<T, U>(x: T) -> U; + pub(crate) fn simd_reduce_min_nanless<T, U>(x: T) -> U; + pub(crate) fn simd_reduce_max_nanless<T, U>(x: T) -> U; + pub(crate) fn simd_reduce_and<T, U>(x: T) -> U; + pub(crate) fn simd_reduce_or<T, U>(x: T) -> U; + pub(crate) fn simd_reduce_xor<T, U>(x: T) -> U; + pub(crate) fn simd_reduce_all<T>(x: T) -> bool; + pub(crate) fn simd_reduce_any<T>(x: T) -> bool; + + pub(crate) fn simd_select<M, T>(m: M, a: T, b: T) -> T; + + pub(crate) fn simd_fmin<T>(a: T, b: T) -> T; + pub(crate) fn simd_fmax<T>(a: T, b: T) -> T; + + pub(crate) fn simd_fsqrt<T>(a: T) -> T; + pub(crate) fn simd_fma<T>(a: T, b: T, c: T) -> T; + + pub(crate) fn simd_gather<T, P, M>(value: T, pointers: P, mask: M) -> T; + pub(crate) fn simd_scatter<T, P, M>(value: T, pointers: P, mask: M); + + pub(crate) fn simd_bitmask<T, U>(value: T) -> U; } diff --git a/third_party/rust/packed_simd_2/src/codegen/math.rs b/third_party/rust/packed_simd_2/src/codegen/math.rs index f3997c7f11359..9a0ea7a4e2d24 100644 --- a/third_party/rust/packed_simd_2/src/codegen/math.rs +++ b/third_party/rust/packed_simd_2/src/codegen/math.rs @@ -1,3 +1,3 @@ //! Vertical math operations
-crate mod float; +pub(crate) mod float; diff --git a/third_party/rust/packed_simd_2/src/codegen/math/float.rs b/third_party/rust/packed_simd_2/src/codegen/math/float.rs index 5e89bf6ae6b0c..ffbf18bfe989d 100644 --- a/third_party/rust/packed_simd_2/src/codegen/math/float.rs +++ b/third_party/rust/packed_simd_2/src/codegen/math/float.rs @@ -2,17 +2,17 @@ #![allow(clippy::useless_transmute)]
#[macro_use] -crate mod macros; -crate mod abs; -crate mod cos; -crate mod cos_pi; -crate mod exp; -crate mod ln; -crate mod mul_add; -crate mod mul_adde; -crate mod powf; -crate mod sin; -crate mod sin_cos_pi; -crate mod sin_pi; -crate mod sqrt; -crate mod sqrte; +pub(crate) mod macros; +pub(crate) mod abs; +pub(crate) mod cos; +pub(crate) mod cos_pi; +pub(crate) mod exp; +pub(crate) mod ln; +pub(crate) mod mul_add; +pub(crate) mod mul_adde; +pub(crate) mod powf; +pub(crate) mod sin; +pub(crate) mod sin_cos_pi; +pub(crate) mod sin_pi; +pub(crate) mod sqrt; +pub(crate) mod sqrte; diff --git a/third_party/rust/packed_simd_2/src/codegen/math/float/abs.rs b/third_party/rust/packed_simd_2/src/codegen/math/float/abs.rs index bc4421f61de2d..34aacc25be75a 100644 --- a/third_party/rust/packed_simd_2/src/codegen/math/float/abs.rs +++ b/third_party/rust/packed_simd_2/src/codegen/math/float/abs.rs @@ -5,7 +5,7 @@
use crate::*;
-crate trait Abs { +pub(crate) trait Abs { fn abs(self) -> Self; }
diff --git a/third_party/rust/packed_simd_2/src/codegen/math/float/cos.rs b/third_party/rust/packed_simd_2/src/codegen/math/float/cos.rs index 50f6c16da2555..dec390cb74d46 100644 --- a/third_party/rust/packed_simd_2/src/codegen/math/float/cos.rs +++ b/third_party/rust/packed_simd_2/src/codegen/math/float/cos.rs @@ -5,7 +5,7 @@
use crate::*;
-crate trait Cos { +pub(crate) trait Cos { fn cos(self) -> Self; }
diff --git a/third_party/rust/packed_simd_2/src/codegen/math/float/cos_pi.rs b/third_party/rust/packed_simd_2/src/codegen/math/float/cos_pi.rs index ebff5fd1c7510..e283280ee44b1 100644 --- a/third_party/rust/packed_simd_2/src/codegen/math/float/cos_pi.rs +++ b/third_party/rust/packed_simd_2/src/codegen/math/float/cos_pi.rs @@ -5,7 +5,7 @@
use crate::*;
-crate trait CosPi { +pub(crate) trait CosPi { fn cos_pi(self) -> Self; }
diff --git a/third_party/rust/packed_simd_2/src/codegen/math/float/exp.rs b/third_party/rust/packed_simd_2/src/codegen/math/float/exp.rs index 00d10e9fa6440..a7b20580e3f1e 100644 --- a/third_party/rust/packed_simd_2/src/codegen/math/float/exp.rs +++ b/third_party/rust/packed_simd_2/src/codegen/math/float/exp.rs @@ -5,7 +5,7 @@
use crate::*;
-crate trait Exp { +pub(crate) trait Exp { fn exp(self) -> Self; }
diff --git a/third_party/rust/packed_simd_2/src/codegen/math/float/ln.rs b/third_party/rust/packed_simd_2/src/codegen/math/float/ln.rs index 88a5a6c6c1589..a5e38cb40d1ed 100644 --- a/third_party/rust/packed_simd_2/src/codegen/math/float/ln.rs +++ b/third_party/rust/packed_simd_2/src/codegen/math/float/ln.rs @@ -5,7 +5,7 @@
use crate::*;
-crate trait Ln { +pub(crate) trait Ln { fn ln(self) -> Self; }
diff --git a/third_party/rust/packed_simd_2/src/codegen/math/float/mul_add.rs b/third_party/rust/packed_simd_2/src/codegen/math/float/mul_add.rs index f48a57dc46c69..d37f30fa86140 100644 --- a/third_party/rust/packed_simd_2/src/codegen/math/float/mul_add.rs +++ b/third_party/rust/packed_simd_2/src/codegen/math/float/mul_add.rs @@ -4,7 +4,7 @@ use crate::*;
// FIXME: 64-bit 1 element mul_add
-crate trait MulAdd { +pub(crate) trait MulAdd { fn mul_add(self, y: Self, z: Self) -> Self; }
diff --git a/third_party/rust/packed_simd_2/src/codegen/math/float/mul_adde.rs b/third_party/rust/packed_simd_2/src/codegen/math/float/mul_adde.rs index b030c26ccf465..c0baeacec20be 100644 --- a/third_party/rust/packed_simd_2/src/codegen/math/float/mul_adde.rs +++ b/third_party/rust/packed_simd_2/src/codegen/math/float/mul_adde.rs @@ -3,7 +3,7 @@ use crate::*;
// FIXME: 64-bit 1 element mul_adde
-crate trait MulAddE { +pub(crate) trait MulAddE { fn mul_adde(self, y: Self, z: Self) -> Self; }
diff --git a/third_party/rust/packed_simd_2/src/codegen/math/float/powf.rs b/third_party/rust/packed_simd_2/src/codegen/math/float/powf.rs index bc15067d73a30..89ca52e96d818 100644 --- a/third_party/rust/packed_simd_2/src/codegen/math/float/powf.rs +++ b/third_party/rust/packed_simd_2/src/codegen/math/float/powf.rs @@ -5,7 +5,7 @@
use crate::*;
-crate trait Powf { +pub(crate) trait Powf { fn powf(self, x: Self) -> Self; }
diff --git a/third_party/rust/packed_simd_2/src/codegen/math/float/sin.rs b/third_party/rust/packed_simd_2/src/codegen/math/float/sin.rs index 7b014d07da8d9..d881415909afe 100644 --- a/third_party/rust/packed_simd_2/src/codegen/math/float/sin.rs +++ b/third_party/rust/packed_simd_2/src/codegen/math/float/sin.rs @@ -5,7 +5,7 @@
use crate::*;
-crate trait Sin { +pub(crate) trait Sin { fn sin(self) -> Self; }
diff --git a/third_party/rust/packed_simd_2/src/codegen/math/float/sin_cos_pi.rs b/third_party/rust/packed_simd_2/src/codegen/math/float/sin_cos_pi.rs index 75c2c2c5fbb03..b283d11111fd5 100644 --- a/third_party/rust/packed_simd_2/src/codegen/math/float/sin_cos_pi.rs +++ b/third_party/rust/packed_simd_2/src/codegen/math/float/sin_cos_pi.rs @@ -5,7 +5,7 @@
use crate::*;
-crate trait SinCosPi: Sized { +pub(crate) trait SinCosPi: Sized { type Output; fn sin_cos_pi(self) -> Self::Output; } diff --git a/third_party/rust/packed_simd_2/src/codegen/math/float/sin_pi.rs b/third_party/rust/packed_simd_2/src/codegen/math/float/sin_pi.rs index 72df98c93c91e..0c8f6bb120503 100644 --- a/third_party/rust/packed_simd_2/src/codegen/math/float/sin_pi.rs +++ b/third_party/rust/packed_simd_2/src/codegen/math/float/sin_pi.rs @@ -5,7 +5,7 @@
use crate::*;
-crate trait SinPi { +pub(crate) trait SinPi { fn sin_pi(self) -> Self; }
diff --git a/third_party/rust/packed_simd_2/src/codegen/math/float/sqrt.rs b/third_party/rust/packed_simd_2/src/codegen/math/float/sqrt.rs index 7ce31df626621..67bb0a2a9c594 100644 --- a/third_party/rust/packed_simd_2/src/codegen/math/float/sqrt.rs +++ b/third_party/rust/packed_simd_2/src/codegen/math/float/sqrt.rs @@ -5,7 +5,7 @@
use crate::*;
-crate trait Sqrt { +pub(crate) trait Sqrt { fn sqrt(self) -> Self; }
diff --git a/third_party/rust/packed_simd_2/src/codegen/math/float/sqrte.rs b/third_party/rust/packed_simd_2/src/codegen/math/float/sqrte.rs index c1e379c34241f..58a1de1f400f9 100644 --- a/third_party/rust/packed_simd_2/src/codegen/math/float/sqrte.rs +++ b/third_party/rust/packed_simd_2/src/codegen/math/float/sqrte.rs @@ -6,7 +6,7 @@ use crate::llvm::simd_fsqrt; use crate::*;
-crate trait Sqrte { +pub(crate) trait Sqrte { fn sqrte(self) -> Self; }
diff --git a/third_party/rust/packed_simd_2/src/codegen/pointer_sized_int.rs b/third_party/rust/packed_simd_2/src/codegen/pointer_sized_int.rs index 39f493d3b17f0..55cbc297aaf52 100644 --- a/third_party/rust/packed_simd_2/src/codegen/pointer_sized_int.rs +++ b/third_party/rust/packed_simd_2/src/codegen/pointer_sized_int.rs @@ -4,24 +4,24 @@ use cfg_if::cfg_if;
cfg_if! { if #[cfg(target_pointer_width = "8")] { - crate type isize_ = i8; - crate type usize_ = u8; + pub(crate) type isize_ = i8; + pub(crate) type usize_ = u8; } else if #[cfg(target_pointer_width = "16")] { - crate type isize_ = i16; - crate type usize_ = u16; + pub(crate) type isize_ = i16; + pub(crate) type usize_ = u16; } else if #[cfg(target_pointer_width = "32")] { - crate type isize_ = i32; - crate type usize_ = u32; + pub(crate) type isize_ = i32; + pub(crate) type usize_ = u32;
} else if #[cfg(target_pointer_width = "64")] { - crate type isize_ = i64; - crate type usize_ = u64; + pub(crate) type isize_ = i64; + pub(crate) type usize_ = u64; } else if #[cfg(target_pointer_width = "64")] { - crate type isize_ = i64; - crate type usize_ = u64; + pub(crate) type isize_ = i64; + pub(crate) type usize_ = u64; } else if #[cfg(target_pointer_width = "128")] { - crate type isize_ = i128; - crate type usize_ = u128; + pub(crate) type isize_ = i128; + pub(crate) type usize_ = u128; } else { compile_error!("unsupported target_pointer_width"); } diff --git a/third_party/rust/packed_simd_2/src/codegen/reductions.rs b/third_party/rust/packed_simd_2/src/codegen/reductions.rs index 7be4f5fabbea9..302ca6d88f33d 100644 --- a/third_party/rust/packed_simd_2/src/codegen/reductions.rs +++ b/third_party/rust/packed_simd_2/src/codegen/reductions.rs @@ -1 +1 @@ -crate mod mask; +pub(crate) mod mask; diff --git a/third_party/rust/packed_simd_2/src/codegen/reductions/mask.rs b/third_party/rust/packed_simd_2/src/codegen/reductions/mask.rs index 0aec60969b864..a78bcc5632672 100644 --- a/third_party/rust/packed_simd_2/src/codegen/reductions/mask.rs +++ b/third_party/rust/packed_simd_2/src/codegen/reductions/mask.rs @@ -7,11 +7,11 @@
use crate::*;
-crate trait All: crate::marker::Sized { +pub(crate) trait All: crate::marker::Sized { unsafe fn all(self) -> bool; }
-crate trait Any: crate::marker::Sized { +pub(crate) trait Any: crate::marker::Sized { unsafe fn any(self) -> bool; }
diff --git a/third_party/rust/packed_simd_2/src/codegen/swap_bytes.rs b/third_party/rust/packed_simd_2/src/codegen/swap_bytes.rs index a4435e3c35354..9cf34a3e0401c 100644 --- a/third_party/rust/packed_simd_2/src/codegen/swap_bytes.rs +++ b/third_party/rust/packed_simd_2/src/codegen/swap_bytes.rs @@ -5,7 +5,7 @@
use crate::*;
-crate trait SwapBytes { +pub(crate) trait SwapBytes { fn swap_bytes(self) -> Self; }
@@ -15,7 +15,7 @@ macro_rules! impl_swap_bytes { impl SwapBytes for $id { #[inline] fn swap_bytes(self) -> Self { - unsafe { shuffle!(self, [1, 0]) } + shuffle!(self, [1, 0]) } } )+ diff --git a/third_party/rust/packed_simd_2/src/codegen/vPtr.rs b/third_party/rust/packed_simd_2/src/codegen/vPtr.rs index cf4765538178d..abd3aa877920c 100644 --- a/third_party/rust/packed_simd_2/src/codegen/vPtr.rs +++ b/third_party/rust/packed_simd_2/src/codegen/vPtr.rs @@ -5,7 +5,7 @@ macro_rules! impl_simd_ptr { | $($tys:ty),*) => { #[derive(Copy, Clone)] #[repr(simd)] - pub struct $tuple_id<$ty>($(crate $tys),*); + pub struct $tuple_id<$ty>($(pub(crate) $tys),*); //^^^^^^^ leaked through SimdArray
impl<$ty> crate::sealed::Seal for [$ptr_ty; $elem_count] {} diff --git a/third_party/rust/packed_simd_2/src/lib.rs b/third_party/rust/packed_simd_2/src/lib.rs index 840bae38d6a30..cd8a86805dd59 100644 --- a/third_party/rust/packed_simd_2/src/lib.rs +++ b/third_party/rust/packed_simd_2/src/lib.rs @@ -217,14 +217,13 @@ rustc_attrs, platform_intrinsics, stdsimd, - aarch64_target_feature, arm_target_feature, link_llvm_intrinsics, core_intrinsics, stmt_expr_attributes, - crate_visibility_modifier, custom_inner_attributes, )] +#![cfg_attr(aarch64_target_feature, feature(aarch64_target_feature))] #![allow(non_camel_case_types, non_snake_case, // FIXME: these types are unsound in C FFI already // See https://github.com/rust-lang/rust/issues/53346 @@ -344,6 +343,6 @@ pub use self::codegen::llvm::{ __shuffle_vector8, };
-crate mod llvm { - crate use crate::codegen::llvm::*; +pub(crate) mod llvm { + pub(crate) use crate::codegen::llvm::*; } diff --git a/third_party/rust/packed_simd_2/src/testing.rs b/third_party/rust/packed_simd_2/src/testing.rs index fcbcf9e2ac8eb..6320b28055569 100644 --- a/third_party/rust/packed_simd_2/src/testing.rs +++ b/third_party/rust/packed_simd_2/src/testing.rs @@ -5,4 +5,4 @@ mod macros;
#[cfg(test)] #[macro_use] -crate mod utils; +pub(crate) mod utils;
This is an automated email from the git hooks/post-receive script.
richard pushed a commit to branch geckoview-102.3.0esr-12.0-1 in repository tor-browser.
commit fb5e48a5f6bbf84fcbc84e9a8d55f3a1b291950f Author: André Bargull andre.bargull@gmail.com AuthorDate: Wed Aug 17 06:39:12 2022 +0000
Bug 1768632: Make EnumSet compile for MSVC. r=glandium, a=RyanVM
Differential Revision: https://phabricator.services.mozilla.com/D154338 --- mfbt/BitSet.h | 2 +- mfbt/EnumSet.h | 8 ++++---- mfbt/tests/TestBitSet.cpp | 6 +++--- 3 files changed, 8 insertions(+), 8 deletions(-)
diff --git a/mfbt/BitSet.h b/mfbt/BitSet.h index fb4a4ea2195b3..7c03fb87ce6b9 100644 --- a/mfbt/BitSet.h +++ b/mfbt/BitSet.h @@ -75,7 +75,7 @@ class BitSet { PodCopy(mStorage.begin(), aStorage.Elements(), kNumWords); }
- constexpr size_t Size() const { return N; } + static constexpr size_t Size() { return N; }
constexpr bool Test(size_t aPos) const { MOZ_ASSERT(aPos < N); diff --git a/mfbt/EnumSet.h b/mfbt/EnumSet.h index 929370918e06f..f7765c6f5c954 100644 --- a/mfbt/EnumSet.h +++ b/mfbt/EnumSet.h @@ -318,15 +318,15 @@ class EnumSet { #endif }
- constexpr size_t MaxBits() const { + static constexpr size_t MaxBits() { if constexpr (std::is_unsigned_v<Serialized>) { return sizeof(Serialized) * 8; } else { - return mBitField.Size(); + return Serialized::Size(); } - }; + }
- static constexpr size_t kMaxBits = EnumSet().MaxBits(); + static constexpr size_t kMaxBits = MaxBits();
Serialized mBitField;
diff --git a/mfbt/tests/TestBitSet.cpp b/mfbt/tests/TestBitSet.cpp index dd491b8dd55c7..2bd1923a15650 100644 --- a/mfbt/tests/TestBitSet.cpp +++ b/mfbt/tests/TestBitSet.cpp @@ -83,12 +83,12 @@ class BitSetSuite { MOZ_RELEASE_ASSERT(bitset[kBitsPerWord + 1]);
bitset.ResetAll(); - for (size_t i = 0; i < bitset.Size(); i++) { + for (size_t i = 0; i < decltype(bitset)::Size(); i++) { MOZ_RELEASE_ASSERT(!bitset[i]); }
bitset.SetAll(); - for (size_t i = 0; i < bitset.Size(); i++) { + for (size_t i = 0; i < decltype(bitset)::Size(); i++) { MOZ_RELEASE_ASSERT(bitset[i]); }
@@ -96,7 +96,7 @@ class BitSetSuite { MOZ_RELEASE_ASSERT(bitset.Storage()[1] == 3);
bitset.ResetAll(); - for (size_t i = 0; i < bitset.Size(); i++) { + for (size_t i = 0; i < decltype(bitset)::Size(); i++) { MOZ_RELEASE_ASSERT(!bitset[i]); } }
This is an automated email from the git hooks/post-receive script.
richard pushed a commit to branch geckoview-102.3.0esr-12.0-1 in repository tor-browser.
commit bae3c2e783f8f04c8b2639e5bc11543b0d08ee9c Author: André Bargull andre.bargull@gmail.com AuthorDate: Fri Aug 19 17:14:03 2022 +0000
Bug 1786025: Update time zone data to tzdata2022b. r=platform-i18n-reviewers,dminor a=RyanVM
Differential Revision: https://phabricator.services.mozilla.com/D155068 --- config/external/icu/data/icudt71l.dat | Bin 15059920 -> 15054496 bytes intl/components/gtest/TestTimeZone.cpp | 6 + intl/tzdata/GIT-INFO | 6 +- intl/tzdata/VERSION | 2 +- intl/tzdata/source/be/metaZones.res | Bin 43168 -> 43168 bytes intl/tzdata/source/be/timezoneTypes.res | Bin 20176 -> 20224 bytes intl/tzdata/source/be/zoneinfo64.res | Bin 154592 -> 149120 bytes intl/tzdata/source/ee/metaZones.res | Bin 43168 -> 43168 bytes intl/tzdata/source/ee/timezoneTypes.res | Bin 20176 -> 20224 bytes intl/tzdata/source/ee/zoneinfo64.res | Bin 154592 -> 149120 bytes intl/tzdata/source/le/metaZones.res | Bin 43168 -> 43168 bytes intl/tzdata/source/le/timezoneTypes.res | Bin 20176 -> 20224 bytes intl/tzdata/source/le/zoneinfo64.res | Bin 154592 -> 149120 bytes intl/tzdata/source/metaZones.txt | 1 + intl/tzdata/source/timezoneTypes.txt | 1 + intl/tzdata/source/zoneinfo64.txt | 1140 +++++++++----------- js/src/builtin/intl/TimeZoneDataGenerated.h | 8 +- js/src/tests/non262/Date/time-zones-imported.js | 44 +- .../Intl/DateTimeFormat/timeZone_backward_links.js | 3 +- .../Intl/DateTimeFormat/timeZone_backzone.js | 23 +- .../Intl/DateTimeFormat/timeZone_backzone_links.js | 7 +- .../DateTimeFormat/timeZone_notbackward_links.js | 2 +- .../non262/Intl/DateTimeFormat/timeZone_version.js | 4 +- .../Intl/supportedValuesOf-timeZones-canonical.js | 4 +- 24 files changed, 601 insertions(+), 650 deletions(-)
diff --git a/config/external/icu/data/icudt71l.dat b/config/external/icu/data/icudt71l.dat index 081dad1ae8455..57a86f511efd2 100644 Binary files a/config/external/icu/data/icudt71l.dat and b/config/external/icu/data/icudt71l.dat differ diff --git a/intl/components/gtest/TestTimeZone.cpp b/intl/components/gtest/TestTimeZone.cpp index dc274150c7657..05e2ec6cf0bde 100644 --- a/intl/components/gtest/TestTimeZone.cpp +++ b/intl/components/gtest/TestTimeZone.cpp @@ -155,11 +155,13 @@ TEST(IntlTimeZone, GetAvailableTimeZones) { constexpr auto EuropeBerlin = MakeStringSpan("Europe/Berlin"); constexpr auto EuropeBusingen = MakeStringSpan("Europe/Busingen"); + constexpr auto AtlanticJan_Mayen = MakeStringSpan("Atlantic/Jan_Mayen");
auto timeZones = TimeZone::GetAvailableTimeZones("DE").unwrap();
bool hasEuropeBerlin = false; bool hasEuropeBusingen = false; + bool hasAtlanticJan_Mayen = false;
for (auto timeZone : timeZones) { auto span = timeZone.unwrap(); @@ -169,6 +171,9 @@ TEST(IntlTimeZone, GetAvailableTimeZones) } else if (span == EuropeBusingen) { ASSERT_FALSE(hasEuropeBusingen); hasEuropeBusingen = true; + } else if (span == AtlanticJan_Mayen) { + ASSERT_FALSE(hasAtlanticJan_Mayen); + hasAtlanticJan_Mayen = true; } else { std::string str(span.data(), span.size()); ADD_FAILURE() << "Unexpected time zone: " << str; @@ -177,6 +182,7 @@ TEST(IntlTimeZone, GetAvailableTimeZones)
ASSERT_TRUE(hasEuropeBerlin); ASSERT_TRUE(hasEuropeBusingen); + ASSERT_TRUE(hasAtlanticJan_Mayen); }
TEST(IntlTimeZone, GetAvailableTimeZonesNoRegion) diff --git a/intl/tzdata/GIT-INFO b/intl/tzdata/GIT-INFO index 5c0412ee70257..4cf58f456cc36 100644 --- a/intl/tzdata/GIT-INFO +++ b/intl/tzdata/GIT-INFO @@ -1,5 +1,5 @@ -commit e75fe57b8c94a71cd165209c893bb6f1a3dcc935 +commit 06611e9b8c6e14299e07d9ff06db61137fea94da Author: yumaoka y.umaoka@gmail.com -Date: Thu Mar 17 11:12:29 2022 -0400 +Date: Thu Aug 18 13:02:20 2022 -0400
- ICU-21949 tzdata2022a update data + ICU-22118 tzdata 2022b diff --git a/intl/tzdata/VERSION b/intl/tzdata/VERSION index ca002de23bcd3..7c9f279dc3c44 100644 --- a/intl/tzdata/VERSION +++ b/intl/tzdata/VERSION @@ -1 +1 @@ -2022a +2022b diff --git a/intl/tzdata/source/be/metaZones.res b/intl/tzdata/source/be/metaZones.res index e3e1985657f34..e935e755fded0 100644 Binary files a/intl/tzdata/source/be/metaZones.res and b/intl/tzdata/source/be/metaZones.res differ diff --git a/intl/tzdata/source/be/timezoneTypes.res b/intl/tzdata/source/be/timezoneTypes.res index 3ab85e7880376..0f8d7f6698695 100644 Binary files a/intl/tzdata/source/be/timezoneTypes.res and b/intl/tzdata/source/be/timezoneTypes.res differ diff --git a/intl/tzdata/source/be/zoneinfo64.res b/intl/tzdata/source/be/zoneinfo64.res index 852570fa41918..d3ac22f7bf25b 100644 Binary files a/intl/tzdata/source/be/zoneinfo64.res and b/intl/tzdata/source/be/zoneinfo64.res differ diff --git a/intl/tzdata/source/ee/metaZones.res b/intl/tzdata/source/ee/metaZones.res index 7d4672b25b767..2bf0ff66df418 100644 Binary files a/intl/tzdata/source/ee/metaZones.res and b/intl/tzdata/source/ee/metaZones.res differ diff --git a/intl/tzdata/source/ee/timezoneTypes.res b/intl/tzdata/source/ee/timezoneTypes.res index 1890f474dcd93..a9871d8520b68 100644 Binary files a/intl/tzdata/source/ee/timezoneTypes.res and b/intl/tzdata/source/ee/timezoneTypes.res differ diff --git a/intl/tzdata/source/ee/zoneinfo64.res b/intl/tzdata/source/ee/zoneinfo64.res index 4a3b8551a781e..b87105ffca022 100644 Binary files a/intl/tzdata/source/ee/zoneinfo64.res and b/intl/tzdata/source/ee/zoneinfo64.res differ diff --git a/intl/tzdata/source/le/metaZones.res b/intl/tzdata/source/le/metaZones.res index 8b318bcf1622e..98ee289812506 100644 Binary files a/intl/tzdata/source/le/metaZones.res and b/intl/tzdata/source/le/metaZones.res differ diff --git a/intl/tzdata/source/le/timezoneTypes.res b/intl/tzdata/source/le/timezoneTypes.res index 724817286043f..af295d68cbb16 100644 Binary files a/intl/tzdata/source/le/timezoneTypes.res and b/intl/tzdata/source/le/timezoneTypes.res differ diff --git a/intl/tzdata/source/le/zoneinfo64.res b/intl/tzdata/source/le/zoneinfo64.res index 78b6749842844..7e72672e34793 100644 Binary files a/intl/tzdata/source/le/zoneinfo64.res and b/intl/tzdata/source/le/zoneinfo64.res differ diff --git a/intl/tzdata/source/metaZones.txt b/intl/tzdata/source/metaZones.txt index d17ce06b1d519..afb588845cb41 100644 --- a/intl/tzdata/source/metaZones.txt +++ b/intl/tzdata/source/metaZones.txt @@ -870,6 +870,7 @@ metaZones:table(nofallback){ wall{"Wallis"} yaku{"Yakutsk"} yeka{"Yekaterinburg"} + yuko{"Yukon"} } metazoneInfo{ "Africa:Abidjan"{ diff --git a/intl/tzdata/source/timezoneTypes.txt b/intl/tzdata/source/timezoneTypes.txt index 39873bd933bfb..d4957cb67b6d0 100644 --- a/intl/tzdata/source/timezoneTypes.txt +++ b/intl/tzdata/source/timezoneTypes.txt @@ -87,6 +87,7 @@ timezoneTypes:table(nofallback){ "Etc:Universal"{"Etc/UTC"} "Etc:Zulu"{"Etc/UTC"} "Europe:Belfast"{"Europe/London"} + "Europe:Kyiv"{"Europe/Kiev"} "Europe:Nicosia"{"Asia/Nicosia"} "Europe:Tiraspol"{"Europe/Chisinau"} "Mexico:BajaNorte"{"America/Tijuana"} diff --git a/intl/tzdata/source/zoneinfo64.txt b/intl/tzdata/source/zoneinfo64.txt index c42e580ebac20..bb7acc0012cc9 100644 --- a/intl/tzdata/source/zoneinfo64.txt +++ b/intl/tzdata/source/zoneinfo64.txt @@ -3,17 +3,17 @@ // License & terms of use: http://www.unicode.org/copyright.html //--------------------------------------------------------- // Build tool: tz2icu -// Build date: Wed Mar 16 23:36:37 2022 +// Build date: Thu Aug 18 04:47:36 2022 // tz database: ftp://ftp.iana.org/tz/ -// tz version: 2022a -// ICU version: 71.1 +// tz version: 2022b +// ICU version: 72.0.1 //--------------------------------------------------------- // >> !!! >> THIS IS A MACHINE-GENERATED FILE << !!! << // >> !!! >>> DO NOT EDIT <<< !!! << //---------------------------------------------------------
zoneinfo64:table(nofallback) { - TZVersion { "2022a" } + TZVersion { "2022b" } Zones:array { /* ACT */ :int { 356 } //Z#0 /* AET */ :int { 368 } //Z#1 @@ -24,7 +24,7 @@ zoneinfo64:table(nofallback) { trans:intvector { -1830383032 } typeOffsets:intvector { -968, 0, 0, 0 } typeMap:bin { "01" } - links:intvector { 5, 6, 11, 13, 21, 22, 27, 38, 51, 52, 55, 348 } + links:intvector { 5, 6, 11, 13, 21, 22, 27, 38, 51, 52, 55, 346, 348, 516 } } //Z#5 /* Africa/Accra */ :int { 5 } //Z#6 /* Africa/Addis_Ababa */ :int { 48 } //Z#7 @@ -58,7 +58,7 @@ zoneinfo64:table(nofallback) { trans:intvector { -1773012580, -956361600, -950490000, -942019200, -761187600, -617241600, -605149200, -81432000, -71110800, 141264000, 147222000, 199756800, 207702000, 231292800, 244249200, 265507200, 271033200, 448243200, 504918000, 1212278400, 1220223600, 1243814400, 1250809200, 1272758400, 1281222000, 1301788800, 1312066800, 1335664800, 1342749600, 1345428000, 1348970400, 1367114400, 1373162400, 1376100000, 1382839200, 1396144800, 1403920800, 1406944800, 1414288800, 1427594400, 1 [...] transPost32:intvector { 0, -2125888096, 0, -2122259296, 0, -2095043296, 0, -2092019296, 0, -2064803296, 0, -2061174496, 0, -2033958496, 0, -2030934496, 0, -2003718496, 0, -2000089696, 0, -1972873696, 0, -1969244896, 0, -1942028896, 0, -1939004896, 0, -1911788896, 0, -1908160096, 0, -1880944096, 0, -1877315296, 0, -1850099296, 0, -1847075296, 0, -1819859296, 0, -1816230496, 0, -1789014496, 0, -1785990496, 0, -1758774496, 0, -1755145696, 0, -1727929696, 0, -1724300896, 0, -1697084896, [...] typeOffsets:intvector { -1820, 0, 0, 0, 0, 3600, 3600, 0 } - typeMap:bin { "01020102010201020102010201020102010301020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020103" } + typeMap:bin { "01020102010201020102010201020102010301020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102" } } //Z#19 /* Africa/Ceuta */ :table { transPre32:intvector { -1, 2117514496 } @@ -77,8 +77,8 @@ zoneinfo64:table(nofallback) { /* Africa/El_Aaiun */ :table { trans:intvector { -1136070432, 198291600, 199756800, 207702000, 231292800, 244249200, 265507200, 271033200, 1212278400, 1220223600, 1243814400, 1250809200, 1272758400, 1281222000, 1301788800, 1312066800, 1335664800, 1342749600, 1345428000, 1348970400, 1367114400, 1373162400, 1376100000, 1382839200, 1396144800, 1403920800, 1406944800, 1414288800, 1427594400, 1434247200, 1437271200, 1445738400, 1459044000, 1465092000, 1468116000, 1477792800, 1490493600, 1495332000, 1498960800, 15092424 [...] transPost32:intvector { 0, -2125888096, 0, -2122259296, 0, -2095043296, 0, -2092019296, 0, -2064803296, 0, -2061174496, 0, -2033958496, 0, -2030934496, 0, -2003718496, 0, -2000089696, 0, -1972873696, 0, -1969244896, 0, -1942028896, 0, -1939004896, 0, -1911788896, 0, -1908160096, 0, -1880944096, 0, -1877315296, 0, -1850099296, 0, -1847075296, 0, -1819859296, 0, -1816230496, 0, -1789014496, 0, -1785990496, 0, -1758774496, 0, -1755145696, 0, -1727929696, 0, -1724300896, 0, -1697084896, [...] - typeOffsets:intvector { -3168, 0, -3600, 0, 0, 0, 0, 3600, 3600, 0 } - typeMap:bin { "0102030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030204" } + typeOffsets:intvector { -3168, 0, -3600, 0, 0, 0, 0, 3600 } + typeMap:bin { "0102030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203" } } //Z#26 /* Africa/Freetown */ :int { 5 } //Z#27 /* Africa/Gaborone */ :int { 43 } //Z#28 @@ -133,7 +133,7 @@ zoneinfo64:table(nofallback) { trans:intvector { -1946168836, -1309746600, -1261969200, -1041388200, -865305900 } typeOffsets:intvector { 8836, 0, 9000, 0, 9900, 0, 10800, 0 } typeMap:bin { "0103010203" } - links:intvector { 7, 9, 10, 23, 24, 32, 46, 48, 397, 516, 520, 525 } + links:intvector { 7, 9, 10, 23, 24, 32, 46, 48, 397, 517, 521, 526 } } //Z#48 /* Africa/Ndjamena */ :table { trans:intvector { -1830387612, 308703600, 321314400 } @@ -155,7 +155,7 @@ zoneinfo64:table(nofallback) { trans:intvector { -1577926364, -574902000, -568087200, -512175600, -504928800, -449888400, -441856800, -347158800, 378684000, 386463600, 402271200, 417999600, 433807200, 449622000, 465429600, 481590000, 496965600, 512953200, 528674400, 544230000, 560037600, 575852400, 591660000, 607388400, 623196000, 641775600, 844034400, 860108400, 875916000, 1352505600, 1364515200, 1382659200 } typeOffsets:intvector { 3164, 0, 3600, 0, 3600, 3600, 7200, 0 } typeMap:bin { "0102010201020103010201020102010201020102010201020103010203010203" } - links:intvector { 56, 533 } + links:intvector { 56, 534 } } //Z#56 /* Africa/Tunis */ :table { transPre32:intvector { -1, 1497764852 } @@ -177,7 +177,7 @@ zoneinfo64:table(nofallback) { finalRule { "US" } finalRaw:int { -36000 } finalYear:int { 2008 } - links:intvector { 59, 80, 618 } + links:intvector { 59, 80, 619 } } //Z#59 /* America/Anchorage */ :table { transPre32:intvector { -1, 1069743569, -1, 2106016072 } @@ -187,7 +187,7 @@ zoneinfo64:table(nofallback) { finalRule { "US" } finalRaw:int { -32400 } finalYear:int { 2008 } - links:intvector { 4, 60, 617 } + links:intvector { 4, 60, 618 } } //Z#60 /* America/Anguilla */ :int { 190 } //Z#61 /* America/Antigua */ :int { 190 } //Z#62 @@ -372,7 +372,7 @@ zoneinfo64:table(nofallback) { finalRule { "US" } finalRaw:int { -21600 } finalYear:int { 2008 } - links:intvector { 98, 382, 620 } + links:intvector { 98, 382, 621 } } //Z#98 /* America/Chihuahua */ :table { trans:intvector { -1514739600, -1343066400, -1234807200, -1220292000, -1207159200, -1191344400, 828864000, 846399600, 860313600, 877849200, 891766800, 909302400, 923216400, 941356800, 954666000, 972806400, 989139600, 1001836800, 1018170000, 1035705600 } @@ -421,7 +421,7 @@ zoneinfo64:table(nofallback) { finalRule { "US" } finalRaw:int { -25200 } finalYear:int { 2008 } - links:intvector { 109, 205, 545, 626 } + links:intvector { 109, 205, 546, 627 } } //Z#109 /* America/Detroit */ :table { trans:intvector { -2051202469, -1724083200, -880218000, -765396000, -684349200, -671047200, -80506740, -68666400, -52938000, -37216800, 104914800, 120636000, 126687600, 152085600, 167814000, 183535200, 199263600, 215589600, 230713200, 247039200, 262767600, 278488800, 294217200, 309938400, 325666800, 341388000, 357116400, 372837600, 388566000, 404892000, 420015600, 436341600, 452070000, 467791200, 483519600, 499240800, 514969200, 530690400, 544604400, 562140000, 576054000, 594194400, [...] @@ -430,7 +430,7 @@ zoneinfo64:table(nofallback) { finalRule { "US" } finalRaw:int { -18000 } finalYear:int { 2008 } - links:intvector { 110, 625 } + links:intvector { 110, 626 } } //Z#110 /* America/Dominica */ :int { 190 } //Z#111 /* America/Edmonton */ :table { @@ -542,7 +542,7 @@ zoneinfo64:table(nofallback) { finalRule { "US" } finalRaw:int { -18000 } finalYear:int { 2008 } - links:intvector { 117, 131, 139, 513, 621 } + links:intvector { 117, 131, 139, 514, 622 } } //Z#131 /* America/Indiana/Knox */ :table { transPre32:intvector { -1, 1577320096 } @@ -552,7 +552,7 @@ zoneinfo64:table(nofallback) { finalRule { "US" } finalRaw:int { -21600 } finalYear:int { 2008 } - links:intvector { 132, 147, 624 } + links:intvector { 132, 147, 625 } } //Z#132 /* America/Indiana/Marengo */ :table { transPre32:intvector { -1, 1577320096 } @@ -629,7 +629,7 @@ zoneinfo64:table(nofallback) { trans:intvector { -1827687170, 126687600, 152085600, 162370800, 183535200, 199263600, 215589600, 230713200, 247039200, 262767600, 278488800, 294217200, 309938400, 325666800, 341388000, 357116400, 372837600, 388566000, 404892000, 420015600, 436341600 } typeOffsets:intvector { -18430, 0, -18000, 0, -18000, 3600 } typeMap:bin { "010201020102010201020102010201020102010201" } - links:intvector { 142, 530 } + links:intvector { 142, 531 } } //Z#142 /* America/Jujuy */ :int { 68 } //Z#143 /* America/Juneau */ :table { @@ -681,7 +681,7 @@ zoneinfo64:table(nofallback) { finalRule { "US" } finalRaw:int { -28800 } finalYear:int { 2008 } - links:intvector { 151, 550, 627, 628 } + links:intvector { 151, 551, 628, 629 } } //Z#151 /* America/Louisville */ :int { 145 } //Z#152 /* America/Lower_Princes */ :int { 190 } //Z#153 @@ -723,7 +723,7 @@ zoneinfo64:table(nofallback) { finalRule { "Mexico" } finalRaw:int { -25200 } finalYear:int { 2003 } - links:intvector { 160, 539 } + links:intvector { 160, 540 } } //Z#160 /* America/Mendoza */ :int { 70 } //Z#161 /* America/Menominee */ :table { @@ -759,7 +759,7 @@ zoneinfo64:table(nofallback) { finalRule { "Mexico" } finalRaw:int { -21600 } finalYear:int { 2003 } - links:intvector { 165, 540 } + links:intvector { 165, 541 } } //Z#165 /* America/Miquelon */ :table { trans:intvector { -1850328920, 326001600, 544597200, 562132800, 576046800, 594187200, 607496400, 625636800, 638946000, 657086400, 671000400, 688536000, 702450000, 719985600, 733899600, 752040000, 765349200, 783489600, 796798800, 814939200, 828853200, 846388800, 860302800, 877838400, 891752400, 909288000, 923202000, 941342400, 954651600, 972792000, 986101200, 1004241600, 1018155600, 1035691200, 1049605200, 1067140800, 1081054800, 1099195200, 1112504400, 1130644800, 1143954000, 1162094 [...] @@ -802,7 +802,7 @@ zoneinfo64:table(nofallback) { finalRule { "US" } finalRaw:int { -18000 } finalYear:int { 2008 } - links:intvector { 173, 622 } + links:intvector { 173, 623 } } //Z#173 /* America/Nipigon */ :table { transPre32:intvector { -1, 1928233280 } @@ -897,7 +897,7 @@ zoneinfo64:table(nofallback) { trans:intvector { -1633273200, -1615132800, -1601823600, -1583683200, -880210800, -820519140, -812653140, -796845540, -84380400, -68659200 } typeOffsets:intvector { -26898, 0, -25200, 0, -25200, 3600 } typeMap:bin { "0102010201020102010201" } - links:intvector { 103, 185, 547, 619 } + links:intvector { 103, 185, 548, 620 } } //Z#185 /* America/Port-au-Prince */ :table { transPre32:intvector { -1, 1770463056 } @@ -920,13 +920,13 @@ zoneinfo64:table(nofallback) { trans:intvector { -873057600, -765399600 } typeOffsets:intvector { -15865, 0, -14400, 0, -14400, 3600 } typeMap:bin { "010201" } - links:intvector { 61, 62, 77, 86, 105, 111, 123, 124, 148, 153, 157, 171, 187, 190, 207, 209, 210, 211, 212, 219, 221, 549 } + links:intvector { 61, 62, 77, 86, 105, 111, 123, 124, 148, 153, 157, 171, 187, 190, 207, 209, 210, 211, 212, 219, 221, 550 } } //Z#190 /* America/Punta_Arenas */ :table { transPre32:intvector { -1, 1770462716 } - trans:intvector { -1892661435, -1688410800, -1619205435, -1593806400, -1335986235, -1317585600, -1304362800, -1286049600, -1272826800, -1254513600, -1241290800, -1222977600, -1209754800, -1191355200, -1178132400, -870552000, -865278000, -718056000, -713649600, -36619200, -23922000, -3355200, 7527600, 24465600, 37767600, 55915200, 69217200, 87969600, 100666800, 118209600, 132116400, 150868800, 163566000, 182318400, 195620400, 213768000, 227070000, 245217600, 258519600, 277272000, 2899 [...] + trans:intvector { -1892661435, -1688410800, -1619205435, -1593806400, -1335986235, -1317585600, -1304362800, -1286049600, -1272826800, -1254513600, -1241290800, -1222977600, -1209754800, -1191355200, -1178132400, -870552000, -865278000, -736632000, -718056000, -713649600, -36619200, -23922000, -3355200, 7527600, 24465600, 37767600, 55915200, 69217200, 87969600, 100666800, 118209600, 132116400, 150868800, 163566000, 182318400, 195620400, 213768000, 227070000, 245217600, 258519600, 277 [...] typeOffsets:intvector { -17020, 0, -18000, 0, -18000, 3600, -16965, 0, -14400, 0, -14400, 3600, -10800, 0 } - typeMap:bin { "0301030403020102010201020102010401040104050405040504050405040504050405040504050405040504050405040504050405040504050405040504050405040504050405040504050405040504050405040504050405040504050405040504050405040504050405040504050405040506" } + typeMap:bin { "030103040302010201020102010201040104020104050405040504050405040504050405040504050405040504050405040504050405040504050405040504050405040504050405040504050405040504050405040504050405040504050405040504050405040504050405040504050405040506" } } //Z#191 /* America/Rainy_River */ :table { transPre32:intvector { -1, 1928234792 } @@ -978,12 +978,12 @@ zoneinfo64:table(nofallback) { typeMap:bin { "010201020102010201020102010201020102010201020102010201020103" } } //Z#200 /* America/Santiago */ :table { - trans:intvector { -1892661435, -1688410800, -1619205435, -1593806400, -1335986235, -1317585600, -1304362800, -1286049600, -1272826800, -1254513600, -1241290800, -1222977600, -1209754800, -1191355200, -1178132400, -870552000, -865278000, -740520000, -736376400, -718056000, -713649600, -36619200, -23922000, -3355200, 7527600, 24465600, 37767600, 55915200, 69217200, 87969600, 100666800, 118209600, 132116400, 150868800, 163566000, 182318400, 195620400, 213768000, 227070000, 245217600, 25 [...] + trans:intvector { -1892661435, -1688410800, -1619205435, -1593806400, -1335986235, -1317585600, -1304362800, -1286049600, -1272826800, -1254513600, -1241290800, -1222977600, -1209754800, -1191355200, -1178132400, -870552000, -865278000, -740520000, -736635600, -718056000, -713649600, -36619200, -23922000, -3355200, 7527600, 24465600, 37767600, 55915200, 69217200, 87969600, 100666800, 118209600, 132116400, 150868800, 163566000, 182318400, 195620400, 213768000, 227070000, 245217600, 25 [...] typeOffsets:intvector { -16965, 0, -18000, 0, -18000, 3600, -14400, 0, -14400, 3600 } - typeMap:bin { "0100030002010201020102010201030103040301030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304" } + typeMap:bin { "01000300020102010201020102010301030402010304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304" } finalRule { "Chile" } finalRaw:int { -14400 } - finalYear:int { 2020 } + finalYear:int { 2024 } links:intvector { 201, 394 } } //Z#201 /* America/Santo_Domingo */ :table { @@ -1064,7 +1064,7 @@ zoneinfo64:table(nofallback) { finalRule { "US" } finalRaw:int { -28800 } finalYear:int { 2011 } - links:intvector { 115, 199, 217, 538 } + links:intvector { 115, 199, 217, 539 } } //Z#217 /* America/Toronto */ :table { transPre32:intvector { -1, 1928231148 } @@ -1132,7 +1132,7 @@ zoneinfo64:table(nofallback) { typeOffsets:intvector { 0, 0, 18000, 0, 25200, 0 } typeMap:bin { "02000201020102" } } //Z#227 - /* Antarctica/DumontDUrville */ :int { 585 } //Z#228 + /* Antarctica/DumontDUrville */ :int { 586 } //Z#228 /* Antarctica/Macquarie */ :table { transPre32:intvector { -1, 2080708096 } trans:intvector { -1680508800, -1665388800, -1601719200, -687052800, -71136000, -55411200, -37267200, -25776000, -5817600, 5673600, 25632000, 37728000, 57686400, 67968000, 89136000, 100022400, 120585600, 131472000, 152035200, 162921600, 183484800, 194976000, 215539200, 226425600, 246988800, 257875200, 278438400, 289324800, 309888000, 320774400, 341337600, 352224000, 372787200, 386092800, 404841600, 417542400, 436291200, 447177600, 467740800, 478627200, 499190400, 510076800, 530035200 [...] @@ -1147,7 +1147,7 @@ zoneinfo64:table(nofallback) { typeOffsets:intvector { 0, 0, 18000, 0, 21600, 0 } typeMap:bin { "0201" } } //Z#230 - /* Antarctica/McMurdo */ :int { 553 } //Z#231 + /* Antarctica/McMurdo */ :int { 554 } //Z#231 /* Antarctica/Palmer */ :table { trans:intvector { -157766400, -152658000, -132955200, -121122000, -101419200, -86821200, -71092800, -54766800, -39038400, -23317200, -7588800, 128142000, 136605600, 389070000, 403070400, 416372400, 434520000, 447822000, 466574400, 479271600, 498024000, 510721200, 529473600, 545194800, 560923200, 574225200, 592372800, 605674800, 624427200, 637124400, 653457600, 668574000, 687326400, 700628400, 718776000, 732078000, 750225600, 763527600, 781675200, 794977200, 813729600, 826426800, 8451 [...] typeOffsets:intvector { 0, 0, -14400, 0, -14400, 3600, -10800, 0, -10800, 3600 } @@ -1158,7 +1158,7 @@ zoneinfo64:table(nofallback) { typeOffsets:intvector { 0, 0, -10800, 0 } typeMap:bin { "01" } } //Z#233 - /* Antarctica/South_Pole */ :int { 553 } //Z#234 + /* Antarctica/South_Pole */ :int { 554 } //Z#234 /* Antarctica/Syowa */ :int { 310 } //Z#235 /* Antarctica/Troll */ :table { trans:intvector { 1111885200, 1130634000 } @@ -1168,12 +1168,8 @@ zoneinfo64:table(nofallback) { finalRaw:int { 0 } finalYear:int { 2006 } } //Z#236 - /* Antarctica/Vostok */ :table { - trans:intvector { -380073600 } - typeOffsets:intvector { 0, 0, 21600, 0 } - typeMap:bin { "01" } - } //Z#237 - /* Arctic/Longyearbyen */ :int { 475 } //Z#238 + /* Antarctica/Vostok */ :int { 330 } //Z#237 + /* Arctic/Longyearbyen */ :int { 446 } //Z#238 /* Asia/Aden */ :int { 310 } //Z#239 /* Asia/Almaty */ :table { trans:intvector { -1441170468, -1247547600, 354909600, 370717200, 386445600, 402253200, 417981600, 433789200, 449604000, 465336000, 481060800, 496785600, 512510400, 528235200, 543960000, 559684800, 575409600, 591134400, 606859200, 622584000, 638308800, 654638400, 670363200, 686091600, 695768400, 701812800, 717537600, 733262400, 748987200, 764712000, 780436800, 796161600, 811886400, 828216000, 846360000, 859665600, 877809600, 891115200, 909259200, 922564800, 941313600, 954014400, 9727 [...] @@ -1231,7 +1227,7 @@ zoneinfo64:table(nofallback) { trans:intvector { -1570084924 } typeOffsets:intvector { 24124, 0, 25200, 0 } typeMap:bin { "01" } - links:intvector { 251, 303, 332 } + links:intvector { 251, 303, 332, 519 } } //Z#251 /* Asia/Barnaul */ :table { trans:intvector { -1579844100, -1247551200, 354906000, 370713600, 386442000, 402249600, 417978000, 433785600, 449600400, 465332400, 481057200, 496782000, 512506800, 528231600, 543956400, 559681200, 575406000, 591130800, 606855600, 622580400, 638305200, 654634800, 670359600, 686088000, 695764800, 701809200, 717534000, 733258800, 748983600, 764708400, 780433200, 796158000, 801590400, 811886400, 828216000, 846360000, 859665600, 877809600, 891115200, 909259200, 922564800, 941313600, 9540 [...] @@ -1252,11 +1248,7 @@ zoneinfo64:table(nofallback) { typeOffsets:intvector { 17904, 0, 18000, 0, 18000, 3600, 21600, 0, 21600, 3600 } typeMap:bin { "01030403040304030403040304030403040304030403020102010201020102010201020102010201020102010201020102010203" } } //Z#254 - /* Asia/Brunei */ :table { - trans:intvector { -1383464380, -1167636600 } - typeOffsets:intvector { 27580, 0, 27000, 0, 28800, 0 } - typeMap:bin { "0102" } - } //Z#255 + /* Asia/Brunei */ :int { 290 } //Z#255 /* Asia/Calcutta */ :int { 287 } //Z#256 /* Asia/Chita */ :table { trans:intvector { -1579419232, -1247558400, 354898800, 370706400, 386434800, 402242400, 417970800, 433778400, 449593200, 465325200, 481050000, 496774800, 512499600, 528224400, 543949200, 559674000, 575398800, 591123600, 606848400, 622573200, 638298000, 654627600, 670352400, 686080800, 695757600, 701802000, 717526800, 733251600, 748976400, 764701200, 780426000, 796150800, 811875600, 828205200, 846349200, 859654800, 877798800, 891104400, 909248400, 922554000, 941302800, 954003600, 9727 [...] @@ -1301,7 +1293,7 @@ zoneinfo64:table(nofallback) { trans:intvector { -1577936472 } typeOffsets:intvector { 13272, 0, 14400, 0 } typeMap:bin { "01" } - links:intvector { 266, 297 } + links:intvector { 266, 297, 523, 527 } } //Z#266 /* Asia/Dushanbe */ :table { trans:intvector { -1441168512, -1247547600, 354909600, 370717200, 386445600, 402253200, 417981600, 433789200, 449604000, 465336000, 481060800, 496785600, 512510400, 528235200, 543960000, 559684800, 575409600, 591134400, 606859200, 622584000, 638308800, 654638400, 670363200, 684363600 } @@ -1336,16 +1328,16 @@ zoneinfo64:table(nofallback) { finalYear:int { 2023 } } //Z#271 /* Asia/Ho_Chi_Minh */ :table { - trans:intvector { -2004073600, -1851577590, -852105600, -782643600, -767869200, -718095600, -457776000, -315648000, 171820800 } - typeOffsets:intvector { 25600, 0, 25200, 0, 25590, 0, 28800, 0, 32400, 0 } - typeMap:bin { "020103040103010301" } - links:intvector { 272, 311, 632 } + trans:intvector { -1851577590, -852105600, -782643600, -767869200, -718095600, -457776000, -315648000, 171820800 } + typeOffsets:intvector { 25590, 0, 25200, 0, 28800, 0, 32400, 0 } + typeMap:bin { "0102030102010201" } + links:intvector { 272, 311, 633 } } //Z#272 /* Asia/Hong_Kong */ :table { trans:intvector { -2056690800, -900910800, -891579600, -884248200, -761209200, -747907200, -728541000, -717049800, -697091400, -683785800, -668061000, -654755400, -636611400, -623305800, -605161800, -591856200, -573712200, -559801800, -541657800, -528352200, -510211800, -498112200, -478762200, -466662600, -446707800, -435213000, -415258200, -403158600, -383808600, -371709000, -352359000, -340259400, -320909400, -308809800, -288855000, -277360200, -257405400, -245910600, -225955800, - [...] typeOffsets:intvector { 27402, 0, 28800, 0, 28800, 1800, 28800, 3600, 32400, 0 } typeMap:bin { "010302040103010301030103010301030103010301030103010301030103010301030103010301030103010301030103010301030103010301030103010301030103010301" } - links:intvector { 273, 512 } + links:intvector { 273, 513 } } //Z#273 /* Asia/Hovd */ :table { trans:intvector { -2032927596, 252439200, 417978000, 433785600, 449600400, 465321600, 481050000, 496771200, 512499600, 528220800, 543949200, 559670400, 575398800, 591120000, 606848400, 622569600, 638298000, 654624000, 670352400, 686073600, 701802000, 717523200, 733251600, 748972800, 764701200, 780422400, 796150800, 811872000, 828205200, 843926400, 859654800, 875376000, 891104400, 906825600, 988398000, 1001700000, 1017428400, 1033149600, 1048878000, 1064599200, 1080327600, 1096048800, [...] @@ -1376,7 +1368,7 @@ zoneinfo64:table(nofallback) { finalRule { "Zion" } finalRaw:int { 7200 } finalYear:int { 2014 } - links:intvector { 279, 322, 528 } + links:intvector { 279, 322, 529 } } //Z#279 /* Asia/Kabul */ :table { transPre32:intvector { -1, 1770429088 } @@ -1393,7 +1385,7 @@ zoneinfo64:table(nofallback) { trans:intvector { -1988166492, -862637400, -764145000, -576135000, 1018119600, 1033840800, 1212260400, 1225476000, 1239735600, 1257012000 } typeOffsets:intvector { 16092, 0, 18000, 0, 18000, 3600, 19800, 0, 19800, 3600 } typeMap:bin { "03040301020102010201" } - links:intvector { 282, 546 } + links:intvector { 282, 547 } } //Z#282 /* Asia/Kashgar */ :int { 330 } //Z#283 /* Asia/Kathmandu */ :table { @@ -1413,23 +1405,19 @@ zoneinfo64:table(nofallback) { trans:intvector { -2019705670, -891581400, -872058600, -862637400, -764145000 } typeOffsets:intvector { 21208, 0, 19270, 0, 19800, 0, 19800, 3600, 21200, 0 } typeMap:bin { "04010203020302" } - links:intvector { 256, 287, 514 } + links:intvector { 256, 287, 515 } } //Z#287 /* Asia/Krasnoyarsk */ :table { trans:intvector { -1577513486, -1247551200, 354906000, 370713600, 386442000, 402249600, 417978000, 433785600, 449600400, 465332400, 481057200, 496782000, 512506800, 528231600, 543956400, 559681200, 575406000, 591130800, 606855600, 622580400, 638305200, 654634800, 670359600, 686088000, 695764800, 701809200, 717534000, 733258800, 748983600, 764708400, 780433200, 796158000, 811882800, 828212400, 846356400, 859662000, 877806000, 891111600, 909255600, 922561200, 941310000, 954010800, 9727 [...] typeOffsets:intvector { 22286, 0, 21600, 0, 21600, 3600, 25200, 0, 25200, 3600, 28800, 0 } typeMap:bin { "0103040304030403040304030403040304030403040302010304030403040304030403040304030403040304030403040304030403040304030403040304030503" } } //Z#288 - /* Asia/Kuala_Lumpur */ :table { - transPre32:intvector { -1, 2117490090 } - trans:intvector { -2038200925, -1167634800, -1073028000, -894180000, -879665400, -767005200, 378664200 } - typeOffsets:intvector { 24406, 0, 24925, 0, 25200, 0, 25200, 1200, 26400, 0, 27000, 0, 28800, 0, 32400, 0 } - typeMap:bin { "0102030405070506" } - } //Z#289 + /* Asia/Kuala_Lumpur */ :int { 316 } //Z#289 /* Asia/Kuching */ :table { trans:intvector { -1383463280, -1167636600, -1082448000, -1074586800, -1050825600, -1042964400, -1019289600, -1011428400, -987753600, -979892400, -956217600, -948356400, -924595200, -916734000, -893059200, -885198000, -879667200, -767005200 } typeOffsets:intvector { 26480, 0, 27000, 0, 28800, 0, 28800, 1200, 32400, 0 } typeMap:bin { "010203020302030203020302030203020402" } + links:intvector { 255, 290 } } //Z#290 /* Asia/Kuwait */ :int { 310 } //Z#291 /* Asia/Macao */ :int { 293 } //Z#292 @@ -1464,7 +1452,7 @@ zoneinfo64:table(nofallback) { finalRule { "EUAsia" } finalRaw:int { 7200 } finalYear:int { 2000 } - links:intvector { 298, 474 } + links:intvector { 298, 475 } } //Z#298 /* Asia/Novokuznetsk */ :table { trans:intvector { -1441259328, -1247551200, 354906000, 370713600, 386442000, 402249600, 417978000, 433785600, 449600400, 465332400, 481057200, 496782000, 512506800, 528231600, 543956400, 559681200, 575406000, 591130800, 606855600, 622580400, 638305200, 654634800, 670359600, 686088000, 695764800, 701809200, 717534000, 733258800, 748983600, 764708400, 780433200, 796158000, 811882800, 828212400, 846356400, 859662000, 877806000, 891111600, 909255600, 922561200, 941310000, 954010800, 9727 [...] @@ -1535,20 +1523,20 @@ zoneinfo64:table(nofallback) { trans:intvector { -1948782472, -1830414600, -681210000, -672228000, -654771600, -640864800, -623408400, -609415200, -588848400, -577965600, -498128400, -462702600, -451733400, -429784200, -418296600, -399544200, -387451800, -368094600, -356002200, -336645000, -324552600, -305195400, -293103000, -264933000, 547578000, 560883600, 579027600, 592333200 } typeOffsets:intvector { 30472, 0, 30600, 0, 30600, 3600, 32400, 0, 32400, 3600 } typeMap:bin { "01030403040304030403010201020102010201020102010304030403" } - links:intvector { 314, 599 } + links:intvector { 314, 600 } } //Z#314 /* Asia/Shanghai */ :table { transPre32:intvector { -1, 2117485353 } trans:intvector { -1600675200, -1585904400, -933667200, -922093200, -908870400, -888829200, -881049600, -767869200, -745833600, -733827600, -716889600, -699613200, -683884800, -670669200, -652348800, -650019600, 515527200, 527014800, 545162400, 558464400, 577216800, 589914000, 608666400, 621968400, 640116000, 653418000, 671565600, 684867600 } typeOffsets:intvector { 29143, 0, 28800, 0, 28800, 3600 } typeMap:bin { "0102010201020102010201020102010201020102010201020102010201" } - links:intvector { 259, 260, 270, 315, 384, 548 } + links:intvector { 259, 260, 270, 315, 384, 549 } } //Z#315 /* Asia/Singapore */ :table { trans:intvector { -2038200925, -1167634800, -1073028000, -894180000, -879665400, -767005200, 378664200 } typeOffsets:intvector { 24925, 0, 25200, 0, 25200, 1200, 26400, 0, 27000, 0, 28800, 0, 32400, 0 } typeMap:bin { "01020304060405" } - links:intvector { 316, 601 } + links:intvector { 289, 316, 602 } } //Z#316 /* Asia/Srednekolymsk */ :table { trans:intvector { -1441188892, -1247565600, 354891600, 370699200, 386427600, 402235200, 417963600, 433771200, 449586000, 465318000, 481042800, 496767600, 512492400, 528217200, 543942000, 559666800, 575391600, 591116400, 606841200, 622566000, 638290800, 654620400, 670345200, 686073600, 695750400, 701794800, 717519600, 733244400, 748969200, 764694000, 780418800, 796143600, 811868400, 828198000, 846342000, 859647600, 877791600, 891097200, 909241200, 922546800, 941295600, 953996400, 9727 [...] @@ -1560,7 +1548,7 @@ zoneinfo64:table(nofallback) { trans:intvector { -1017820800, -766224000, -745833600, -733827600, -716889600, -699613200, -683884800, -670669200, -652348800, -639133200, -620812800, -607597200, -589276800, -576061200, -562924800, -541760400, -528710400, -510224400, -497174400, -478688400, -465638400, -449830800, -434016000, -418208400, -402480000, -386672400, -370944000, -355136400, -339408000, -323600400, -302515200, -291978000, -270979200, -260442000, 133977600, 149785200, 165513600, 181321200, 299606400, 307551600 } typeOffsets:intvector { 29160, 0, 28800, 0, 28800, 3600, 32400, 0 } typeMap:bin { "0103010201020102010201020102010201020102010201020102010201020102010201020102010201" } - links:intvector { 318, 598 } + links:intvector { 318, 599 } } //Z#318 /* Asia/Tashkent */ :table { trans:intvector { -1441168631, -1247547600, 354909600, 370717200, 386445600, 402253200, 417981600, 433789200, 449604000, 465336000, 481060800, 496785600, 512510400, 528235200, 543960000, 559684800, 575409600, 591134400, 606859200, 622584000, 638308800, 654638400, 670363200, 686091600 } @@ -1573,14 +1561,10 @@ zoneinfo64:table(nofallback) { typeMap:bin { "0103040304030403040304030403040304030403040302010201020102030403040304030403040304030403040304020103" } } //Z#320 /* Asia/Tehran */ :table { - trans:intvector { -757394744, 247177800, 259272000, 277758000, 283982400, 290809800, 306531000, 322432200, 338499000, 673216200, 685481400, 701209800, 717103800, 732745800, 748639800, 764281800, 780175800, 795817800, 811711800, 827353800, 843247800, 858976200, 874870200, 890512200, 906406200, 922048200, 937942200, 953584200, 969478200, 985206600, 1001100600, 1016742600, 1032636600, 1048278600, 1064172600, 1079814600, 1095708600, 1111437000, 1127331000, 1206045000, 1221939000, 1237667 [...] - transPost32:intvector { 0, -2142151096, 0, -2126257096, 0, -2110615096, 0, -2094721096, 0, -2079079096, 0, -2063185096, 0, -2047543096, 0, -2031649096, 0, -2015920696, 0, -2000026696, 0, -1984384696, 0, -1968490696, 0, -1952848696, 0, -1936954696, 0, -1921312696, 0, -1905418696, 0, -1889690296, 0, -1873796296, 0, -1858154296, 0, -1842260296, 0, -1826618296, 0, -1810724296, 0, -1795082296, 0, -1779188296, 0, -1763459896, 0, -1747565896, 0, -1731923896, 0, -1716029896, 0, -1700387896, [...] + trans:intvector { -1090466744, 227820600, 246223800, 259617600, 271108800, 283982400, 296598600, 306531000, 322432200, 338499000, 673216200, 685481400, 701209800, 717103800, 732745800, 748639800, 764281800, 780175800, 795817800, 811711800, 827353800, 843247800, 858976200, 874870200, 890512200, 906406200, 922048200, 937942200, 953584200, 969478200, 985206600, 1001100600, 1016742600, 1032636600, 1048278600, 1064172600, 1079814600, 1095708600, 1111437000, 1127331000, 1206045000, 1221939 [...] typeOffsets:intvector { 12344, 0, 12600, 0, 12600, 3600, 14400, 0, 14400, 3600 } - typeMap:bin { "010304030102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201" } - finalRule { "Iran" } - finalRaw:int { 12600 } - finalYear:int { 2089 } - links:intvector { 321, 527 } + typeMap:bin { "01020304030102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201" } + links:intvector { 321, 528 } } //Z#321 /* Asia/Tel_Aviv */ :int { 279 } //Z#322 /* Asia/Thimbu */ :int { 324 } //Z#323 @@ -1595,7 +1579,7 @@ zoneinfo64:table(nofallback) { trans:intvector { -683802000, -672310800, -654771600, -640861200, -620298000, -609411600, -588848400, -577962000 } typeOffsets:intvector { 33539, 0, 32400, 0, 32400, 3600 } typeMap:bin { "010201020102010201" } - links:intvector { 325, 529, 531 } + links:intvector { 325, 530, 532 } } //Z#325 /* Asia/Tomsk */ :table { trans:intvector { -1578807591, -1247551200, 354906000, 370713600, 386442000, 402249600, 417978000, 433785600, 449600400, 465332400, 481057200, 496782000, 512506800, 528231600, 543956400, 559681200, 575406000, 591130800, 606855600, 622580400, 638305200, 654634800, 670359600, 686088000, 695764800, 701809200, 717534000, 733258800, 748983600, 764708400, 780433200, 796158000, 811882800, 828212400, 846356400, 859662000, 877806000, 891111600, 909255600, 922561200, 941310000, 954010800, 9727 [...] @@ -1614,7 +1598,7 @@ zoneinfo64:table(nofallback) { trans:intvector { -1325483420 } typeOffsets:intvector { 21020, 0, 21600, 0 } typeMap:bin { "01" } - links:intvector { 283, 330 } + links:intvector { 237, 283, 330 } } //Z#330 /* Asia/Ust-Nera */ :table { trans:intvector { -1579426374, -1247558400, 354898800, 370699200, 386427600, 402235200, 417963600, 433771200, 449586000, 465318000, 481042800, 496767600, 512492400, 528217200, 543942000, 559666800, 575391600, 591116400, 606841200, 622566000, 638290800, 654620400, 670345200, 686073600, 695750400, 701794800, 717519600, 733244400, 748969200, 764694000, 780418800, 796143600, 811868400, 828198000, 846342000, 859647600, 877791600, 891097200, 909241200, 922546800, 941295600, 953996400, 9727 [...] @@ -1636,7 +1620,7 @@ zoneinfo64:table(nofallback) { trans:intvector { -1577946287, -873268200, -778410000 } typeOffsets:intvector { 23087, 0, 23400, 0, 32400, 0 } typeMap:bin { "010201" } - links:intvector { 309, 335 } + links:intvector { 309, 335, 520 } } //Z#335 /* Asia/Yekaterinburg */ :table { trans:intvector { -1688270553, -1592610305, -1247544000, 354913200, 370720800, 386449200, 402256800, 417985200, 433792800, 449607600, 465339600, 481064400, 496789200, 512514000, 528238800, 543963600, 559688400, 575413200, 591138000, 606862800, 622587600, 638312400, 654642000, 670366800, 686095200, 695772000, 701816400, 717541200, 733266000, 748990800, 764715600, 780440400, 796165200, 811890000, 828219600, 846363600, 859669200, 877813200, 891118800, 909262800, 922568400, 941317200, 95 [...] @@ -1647,7 +1631,7 @@ zoneinfo64:table(nofallback) { trans:intvector { -1441162680, -405140400, 354916800, 370724400, 386452800, 402260400, 417988800, 433796400, 449611200, 465343200, 481068000, 496792800, 512517600, 528242400, 543967200, 559692000, 575416800, 591141600, 606866400, 622591200, 638316000, 654645600, 670370400, 686098800, 701823600, 717548400, 733273200, 748998000, 764722800, 780447600, 796172400, 811897200, 859672800, 877816800, 891122400, 909266400, 922572000, 941320800, 954021600, 972770400, 985471200, 1004220000, 1017 [...] typeOffsets:intvector { 10680, 0, 10800, 0, 10800, 3600, 14400, 0, 14400, 3600 } typeMap:bin { "0103040304030403040304030403040304030403040302010201020102010203040304030403040304030403040304030403040304030403040304030403" } - links:intvector { 337, 541 } + links:intvector { 337, 542 } } //Z#337 /* Atlantic/Azores */ :table { transPre32:intvector { -1, 1581063056 } @@ -1689,7 +1673,7 @@ zoneinfo64:table(nofallback) { finalYear:int { 1997 } links:intvector { 342, 343 } } //Z#343 - /* Atlantic/Jan_Mayen */ :int { 475 } //Z#344 + /* Atlantic/Jan_Mayen */ :int { 446 } //Z#344 /* Atlantic/Madeira */ :table { trans:intvector { -1830380400, -1689552000, -1677798000, -1667433600, -1647734400, -1635811200, -1616198400, -1604361600, -1584662400, -1572739200, -1553040000, -1541203200, -1521504000, -1442448000, -1426809600, -1379289600, -1364774400, -1348444800, -1333324800, -1316390400, -1301270400, -1284336000, -1269820800, -1221436800, -1206921600, -1191196800, -1175472000, -1127692800, -1111968000, -1096848000, -1080518400, -1063584000, -1049068800, -1033344000, -1017619200, -1002499200, -9 [...] typeOffsets:intvector { -4056, 0, -3600, 0, -3600, 3600, -3600, 7200, 0, 0, 0, 3600 } @@ -1698,12 +1682,7 @@ zoneinfo64:table(nofallback) { finalRaw:int { 0 } finalYear:int { 1997 } } //Z#345 - /* Atlantic/Reykjavik */ :table { - trans:intvector { -1956609120, -1668211200, -1647212400, -1636675200, -1613430000, -1605139200, -1581894000, -1539561600, -1531350000, -968025600, -952293600, -942008400, -920239200, -909957600, -888789600, -877903200, -857944800, -846453600, -826495200, -815004000, -795045600, -783554400, -762991200, -752104800, -731541600, -717631200, -700092000, -686181600, -668642400, -654732000, -636588000, -623282400, -605743200, -591832800, -573688800, -559778400, -542239200, -528328800, -5107 [...] - typeOffsets:intvector { -5280, 0, -3600, 0, -3600, 3600, 0, 0 } - typeMap:bin { "0102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020103" } - links:intvector { 346, 515 } - } //Z#346 + /* Atlantic/Reykjavik */ :int { 5 } //Z#346 /* Atlantic/South_Georgia */ :table { transPre32:intvector { -1, 1770454464 } typeOffsets:intvector { -8768, 0, -7200, 0 } @@ -1856,10 +1835,10 @@ zoneinfo64:table(nofallback) { /* Canada/Saskatchewan */ :int { 195 } //Z#392 /* Canada/Yukon */ :int { 222 } //Z#393 /* Chile/Continental */ :int { 201 } //Z#394 - /* Chile/EasterIsland */ :int { 557 } //Z#395 + /* Chile/EasterIsland */ :int { 558 } //Z#395 /* Cuba */ :int { 129 } //Z#396 /* EAT */ :int { 48 } //Z#397 - /* ECT */ :int { 476 } //Z#398 + /* ECT */ :int { 477 } //Z#398 /* EET */ :table { trans:intvector { 228877200, 243997200, 260326800, 276051600, 291776400, 307501200, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 } typeOffsets:intvector { 7200, 0, 7200, 3600 } @@ -1883,7 +1862,7 @@ zoneinfo64:table(nofallback) { /* Eire */ :int { 454 } //Z#403 /* Etc/GMT */ :table { typeOffsets:intvector { 0, 0 } - links:intvector { 404, 405, 418, 433, 434, 506, 507, 508, 509, 510 } + links:intvector { 404, 405, 418, 433, 434, 507, 508, 509, 510, 511 } } //Z#404 /* Etc/GMT+0 */ :int { 404 } //Z#405 /* Etc/GMT+1 */ :table { @@ -1970,21 +1949,14 @@ zoneinfo64:table(nofallback) { /* Etc/UCT */ :int { 436 } //Z#435 /* Etc/UTC */ :table { typeOffsets:intvector { 0, 0 } - links:intvector { 435, 436, 437, 439, 616, 630, 631, 635 } + links:intvector { 435, 436, 437, 439, 617, 631, 632, 636 } } //Z#436 /* Etc/Universal */ :int { 436 } //Z#437 /* Etc/Unknown */ :table { typeOffsets:intvector { 0, 0 } } //Z#438 /* Etc/Zulu */ :int { 436 } //Z#439 - /* Europe/Amsterdam */ :table { - trans:intvector { -1693700372, -1680484772, -1663453172, -1650147572, -1633213172, -1617488372, -1601158772, -1586038772, -1569709172, -1554589172, -1538259572, -1523139572, -1507501172, -1490566772, -1470176372, -1459117172, -1443997172, -1427667572, -1406672372, -1396217972, -1376950772, -1364768372, -1345414772, -1333318772, -1313792372, -1301264372, -1282256372, -1269814772, -1250720372, -1238365172, -1219184372, -1206915572, -1186957172, -1175465972, -1156025972, -1143411572, -1 [...] - typeOffsets:intvector { 1172, 0, 1172, 3600, 1200, 0, 1200, 3600, 3600, 0, 3600, 3600 } - typeMap:bin { "01000100010001000100010001000100010001000100010001000100010001000100010001000100010001030203020302050405040504050405040504050405040504050405040504050405040504050405040504050405040504050405040504" } - finalRule { "EU" } - finalRaw:int { 3600 } - finalYear:int { 1997 } - } //Z#440 + /* Europe/Amsterdam */ :int { 448 } //Z#440 /* Europe/Andorra */ :table { transPre32:intvector { -1, 2117514132 } trans:intvector { -733881600, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 } @@ -2007,7 +1979,7 @@ zoneinfo64:table(nofallback) { finalRaw:int { 7200 } finalYear:int { 1997 } } //Z#443 - /* Europe/Belfast */ :int { 466 } //Z#444 + /* Europe/Belfast */ :int { 467 } //Z#444 /* Europe/Belgrade */ :table { transPre32:intvector { -1, 1581051976 } trans:intvector { -905824800, -857257200, -844556400, -828226800, -812502000, -796777200, -777942000, -766623600, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 } @@ -2016,7 +1988,7 @@ zoneinfo64:table(nofallback) { finalRule { "EU" } finalRaw:int { 3600 } finalYear:int { 1997 } - links:intvector { 445, 465, 477, 483, 486, 500 } + links:intvector { 445, 466, 478, 484, 487, 501 } } //Z#445 /* Europe/Berlin */ :table { transPre32:intvector { -1, 1872912888 } @@ -2026,8 +1998,9 @@ zoneinfo64:table(nofallback) { finalRule { "EU" } finalRaw:int { 3600 } finalYear:int { 1997 } + links:intvector { 238, 344, 446, 453, 476, 489 } } //Z#446 - /* Europe/Bratislava */ :int { 478 } //Z#447 + /* Europe/Bratislava */ :int { 479 } //Z#447 /* Europe/Brussels */ :table { transPre32:intvector { -1, 1843972096 } trans:intvector { -1740355200, -1693702800, -1680483600, -1663455600, -1650150000, -1632006000, -1618700400, -1613826000, -1604278800, -1585530000, -1574038800, -1552266000, -1539997200, -1520557200, -1507510800, -1490576400, -1473642000, -1459126800, -1444006800, -1427677200, -1411952400, -1396227600, -1379293200, -1364778000, -1348448400, -1333328400, -1316394000, -1301263200, -1284328800, -1269813600, -1253484000, -1238364000, -1221429600, -1206914400, -1191189600, -1175464800, -1 [...] @@ -2036,6 +2009,7 @@ zoneinfo64:table(nofallback) { finalRule { "EU" } finalRaw:int { 3600 } finalYear:int { 1997 } + links:intvector { 440, 448, 468 } } //Z#448 /* Europe/Bucharest */ :table { trans:intvector { -1213148664, -1187056800, -1175479200, -1159754400, -1144029600, -1127700000, -1111975200, -1096250400, -1080525600, -1064800800, -1049076000, -1033351200, -1017626400, -1001901600, -986176800, -970452000, -954727200, 296604000, 307486800, 323816400, 338940000, 354672000, 370396800, 386121600, 401846400, 417571200, 433296000, 449020800, 465350400, 481075200, 496800000, 512524800, 528249600, 543974400, 559699200, 575424000, 591148800, 606873600, 622598400, 638323200, [...] @@ -2054,7 +2028,7 @@ zoneinfo64:table(nofallback) { finalRaw:int { 3600 } finalYear:int { 1997 } } //Z#450 - /* Europe/Busingen */ :int { 502 } //Z#451 + /* Europe/Busingen */ :int { 503 } //Z#451 /* Europe/Chisinau */ :table { transPre32:intvector { -1, 1454819576 } trans:intvector { -1637114100, -1213148664, -1187056800, -1175479200, -1159754400, -1144029600, -1127700000, -1111975200, -1096250400, -1080525600, -1064800800, -1049076000, -1033351200, -1017626400, -1001901600, -986176800, -970452000, -954727200, -927165600, -898138800, -857257200, -844556400, -828226800, -812502000, -800157600, 354920400, 370728000, 386456400, 402264000, 417992400, 433800000, 449614800, 465346800, 481071600, 496796400, 512521200, 528246000, 543970800, 559695600, 5 [...] @@ -2063,22 +2037,13 @@ zoneinfo64:table(nofallback) { finalRule { "Moldova" } finalRaw:int { 7200 } finalYear:int { 1998 } - links:intvector { 452, 491 } + links:intvector { 452, 492 } } //Z#452 - /* Europe/Copenhagen */ :table { - transPre32:intvector { -1, 1896673076 } - trans:intvector { -1692496800, -1680490800, -935110800, -857257200, -844556400, -828226800, -812502000, -796777200, -781052400, -769388400, -747010800, -736383600, -715215600, -706748400, -683161200, -675298800, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 7 [...] - typeOffsets:intvector { 3020, 0, 3600, 0, 3600, 3600 } - typeMap:bin { "010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201" } - finalRule { "EU" } - finalRaw:int { 3600 } - finalYear:int { 1997 } - } //Z#453 + /* Europe/Copenhagen */ :int { 446 } //Z#453 /* Europe/Dublin */ :table { - transPre32:intvector { -1, 1473317596 } trans:intvector { -1691962479, -1680471279, -1664143200, -1650146400, -1633903200, -1617487200, -1601848800, -1586037600, -1570399200, -1552168800, -1538344800, -1522533600, -1507500000, -1490565600, -1473631200, -1460930400, -1442786400, -1428876000, -1410732000, -1396216800, -1379282400, -1364767200, -1348437600, -1333317600, -1315778400, -1301263200, -1284328800, -1269813600, -1253484000, -1238364000, -1221429600, -1206914400, -1189980000, -1175464800, -1159135200, -1143410400, -1 [...] - typeOffsets:intvector { -1500, 0, -1521, 0, -1521, 3600, 0, 0, 0, 3600, 3600, 0 } - typeMap:bin { "0102030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030405030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403" } + typeOffsets:intvector { -1521, 0, -1521, 3600, 0, 0, 0, 3600, 3600, 0 } + typeMap:bin { "01020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020304020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302" } finalRule { "EU" } finalRaw:int { 0 } finalYear:int { 1997 } @@ -2093,7 +2058,7 @@ zoneinfo64:table(nofallback) { finalRaw:int { 3600 } finalYear:int { 1997 } } //Z#455 - /* Europe/Guernsey */ :int { 466 } //Z#456 + /* Europe/Guernsey */ :int { 467 } //Z#456 /* Europe/Helsinki */ :table { trans:intvector { -1535938789, -875671200, -859773600, 354672000, 370396800, 386121600, 401846400, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 } typeOffsets:intvector { 5989, 0, 7200, 0, 7200, 3600 } @@ -2101,36 +2066,38 @@ zoneinfo64:table(nofallback) { finalRule { "EU" } finalRaw:int { 7200 } finalYear:int { 1997 } - links:intvector { 457, 470 } + links:intvector { 457, 471 } } //Z#457 - /* Europe/Isle_of_Man */ :int { 466 } //Z#458 + /* Europe/Isle_of_Man */ :int { 467 } //Z#458 /* Europe/Istanbul */ :table { transPre32:intvector { -1, 1454819544 } trans:intvector { -1869875816, -1693706400, -1680490800, -1570413600, -1552186800, -1538359200, -1522551600, -1507514400, -1490583600, -1440208800, -1428030000, -1409709600, -1396494000, -931053600, -922676400, -917834400, -892436400, -875844000, -764737200, -744343200, -733806000, -716436000, -701924400, -684986400, -670474800, -654141600, -639025200, -622087200, -606970800, -590032800, -575521200, -235620000, -194842800, -177732000, -165726000, 107910000, 121215600, 133920000, 1526 [...] typeOffsets:intvector { 6952, 0, 7016, 0, 7200, 0, 7200, 3600, 10800, 0, 10800, 3600 } typeMap:bin { "01020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030405040203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020304" } - links:intvector { 276, 459, 615 } + links:intvector { 276, 459, 616 } } //Z#459 - /* Europe/Jersey */ :int { 466 } //Z#460 + /* Europe/Jersey */ :int { 467 } //Z#460 /* Europe/Kaliningrad */ :table { transPre32:intvector { -1, 1872911176 } trans:intvector { -1693706400, -1680483600, -1663455600, -1650150000, -1632006000, -1618700400, -938905200, -857257200, -844556400, -828226800, -812502000, -796777200, -781052400, -780372000, -778730400, -762663600, -749095200, 354920400, 370728000, 386456400, 402264000, 417992400, 433800000, 449614800, 465346800, 481071600, 496796400, 512521200, 528246000, 543970800, 559695600, 575420400, 591145200, 606870000, 622598400, 638323200, 654652800, 670377600, 686102400, 701827200, 7175520 [...] typeOffsets:intvector { 4920, 0, 3600, 0, 3600, 3600, 7200, 0, 7200, 3600, 10800, 0, 10800, 3600 } typeMap:bin { "0102010201020102010201020102030403050605060506050605060506050605060504030403040304030403040304030403040304030403040304030403040304030403040304030403040304030503" } } //Z#461 - /* Europe/Kiev */ :table { + /* Europe/Kiev */ :int { 464 } //Z#462 + /* Europe/Kirov */ :table { + trans:intvector { -1593820800, -1247540400, 354916800, 370724400, 386452800, 402260400, 417988800, 433796400, 449611200, 465343200, 481068000, 496792800, 512517600, 528242400, 543967200, 559692000, 575416800, 591141600, 606866400, 622594800, 638319600, 654649200, 670374000, 701820000, 717548400, 733273200, 748998000, 764722800, 780447600, 796172400, 811897200, 828226800, 846370800, 859676400, 877820400, 891126000, 909270000, 922575600, 941324400, 954025200, 972774000, 985474800, 1004 [...] + typeOffsets:intvector { 11928, 0, 10800, 0, 10800, 3600, 14400, 0, 14400, 3600 } + typeMap:bin { "010304030403040304030403040304030403020102010302010201020102010201020102010201020102010201020102010201020102010201020102010301" } + } //Z#463 + /* Europe/Kyiv */ :table { trans:intvector { -1441159324, -1247536800, -892522800, -857257200, -844556400, -828226800, -825382800, 354920400, 370728000, 386456400, 402264000, 417992400, 433800000, 449614800, 465346800, 481071600, 496796400, 512521200, 528246000, 543970800, 559695600, 575420400, 591145200, 606870000, 622594800, 638319600, 646783200, 686102400, 701827200, 717552000, 733276800, 749001600, 764726400, 780451200, 796176000, 811900800, 828230400, 846378000, 859683600, 877827600 } typeOffsets:intvector { 7324, 0, 3600, 0, 3600, 3600, 7200, 0, 7200, 3600, 10800, 0, 10800, 3600 } typeMap:bin { "03050201020105060506050605060506050605060506050605060403040304030403040304030403" } finalRule { "EU" } finalRaw:int { 7200 } finalYear:int { 1998 } - } //Z#462 - /* Europe/Kirov */ :table { - trans:intvector { -1593820800, -1247540400, 354916800, 370724400, 386452800, 402260400, 417988800, 433796400, 449611200, 465343200, 481068000, 496792800, 512517600, 528242400, 543967200, 559692000, 575416800, 591141600, 606866400, 622594800, 638319600, 654649200, 670374000, 701820000, 717548400, 733273200, 748998000, 764722800, 780447600, 796172400, 811897200, 828226800, 846370800, 859676400, 877820400, 891126000, 909270000, 922575600, 941324400, 954025200, 972774000, 985474800, 1004 [...] - typeOffsets:intvector { 11928, 0, 10800, 0, 10800, 3600, 14400, 0, 14400, 3600 } - typeMap:bin { "010304030403040304030403040304030403020102010302010201020102010201020102010201020102010201020102010201020102010201020102010301" } - } //Z#463 + links:intvector { 462, 464 } + } //Z#464 /* Europe/Lisbon */ :table { trans:intvector { -1830384000, -1689555600, -1677801600, -1667437200, -1647738000, -1635814800, -1616202000, -1604365200, -1584666000, -1572742800, -1553043600, -1541206800, -1521507600, -1442451600, -1426813200, -1379293200, -1364778000, -1348448400, -1333328400, -1316394000, -1301274000, -1284339600, -1269824400, -1221440400, -1206925200, -1191200400, -1175475600, -1127696400, -1111971600, -1096851600, -1080522000, -1063587600, -1049072400, -1033347600, -1017622800, -1002502800, -9 [...] typeOffsets:intvector { -2205, 0, 0, 0, 0, 3600, 0, 7200, 3600, 0, 3600, 3600 } @@ -2138,9 +2105,9 @@ zoneinfo64:table(nofallback) { finalRule { "EU" } finalRaw:int { 0 } finalYear:int { 1997 } - links:intvector { 464, 597 } - } //Z#464 - /* Europe/Ljubljana */ :int { 445 } //Z#465 + links:intvector { 465, 598 } + } //Z#465 + /* Europe/Ljubljana */ :int { 445 } //Z#466 /* Europe/London */ :table { transPre32:intvector { -1, 442304971 } trans:intvector { -1691964000, -1680472800, -1664143200, -1650146400, -1633903200, -1617487200, -1601848800, -1586037600, -1570399200, -1552168800, -1538344800, -1522533600, -1507500000, -1490565600, -1473631200, -1460930400, -1442786400, -1428876000, -1410732000, -1396216800, -1379282400, -1364767200, -1348437600, -1333317600, -1315778400, -1301263200, -1284328800, -1269813600, -1253484000, -1238364000, -1221429600, -1206914400, -1189980000, -1175464800, -1159135200, -1143410400, -1 [...] @@ -2149,16 +2116,9 @@ zoneinfo64:table(nofallback) { finalRule { "EU" } finalRaw:int { 0 } finalYear:int { 1997 } - links:intvector { 444, 456, 458, 460, 466, 504, 505 } - } //Z#466 - /* Europe/Luxembourg */ :table { - trans:intvector { -2069713476, -1692496800, -1680483600, -1662343200, -1650157200, -1632006000, -1618700400, -1612659600, -1604278800, -1585519200, -1574038800, -1552258800, -1539997200, -1520550000, -1507510800, -1490572800, -1473642000, -1459119600, -1444006800, -1427673600, -1411866000, -1396224000, -1379293200, -1364774400, -1348448400, -1333324800, -1316394000, -1301270400, -1284339600, -1269813600, -1253484000, -1238364000, -1221429600, -1206914400, -1191189600, -1175464800, -1 [...] - typeOffsets:intvector { 1476, 0, 0, 0, 0, 3600, 3600, 0, 3600, 3600 } - typeMap:bin { "0304030403040301020102010201020102010201020102010201020102010201020102010201020102010201020102010201020403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403" } - finalRule { "EU" } - finalRaw:int { 3600 } - finalYear:int { 1997 } + links:intvector { 444, 456, 458, 460, 467, 505, 506 } } //Z#467 + /* Europe/Luxembourg */ :int { 448 } //Z#468 /* Europe/Madrid */ :table { transPre32:intvector { -1, 2117514496 } trans:intvector { -1631926800, -1616889600, -1601168400, -1585353600, -1442451600, -1427673600, -1379293200, -1364774400, -1348448400, -1333324800, -1316390400, -1301270400, -1284339600, -1269820800, -1026954000, -1017619200, -1001898000, -999482400, -986090400, -954115200, -940208400, -873079200, -862621200, -842839200, -828320400, -811389600, -796870800, -779940000, -765421200, -748490400, -733971600, -652327200, -639018000, 135122400, 150246000, 166572000, 181695600, 196812000, 21 [...] @@ -2167,7 +2127,7 @@ zoneinfo64:table(nofallback) { finalRule { "EU" } finalRaw:int { 3600 } finalYear:int { 1997 } - } //Z#468 + } //Z#469 /* Europe/Malta */ :table { transPre32:intvector { -1, 1891488612 } trans:intvector { -1690765200, -1680487200, -1664758800, -1648951200, -1635123600, -1616896800, -1604278800, -1585533600, -1571014800, -1555293600, -932432400, -857257200, -844556400, -828226800, -812588400, -798073200, -781052400, -766717200, -750898800, -733359600, -719456400, -701917200, -689209200, -670460400, -114051600, -103168800, -81997200, -71715600, -50547600, -40266000, -18493200, -8211600, 12956400, 23238000, 43801200, 54687600, 75855600, 86742000, 102380400, 118105200, 1 [...] @@ -2176,40 +2136,23 @@ zoneinfo64:table(nofallback) { finalRule { "EU" } finalRaw:int { 3600 } finalYear:int { 1997 } - } //Z#469 - /* Europe/Mariehamn */ :int { 457 } //Z#470 + } //Z#470 + /* Europe/Mariehamn */ :int { 457 } //Z#471 /* Europe/Minsk */ :table { transPre32:intvector { -1, 1454819880 } trans:intvector { -1441158600, -1247536800, -899780400, -857257200, -844556400, -828226800, -812502000, -804650400, 354920400, 370728000, 386456400, 402264000, 417992400, 433800000, 449614800, 465346800, 481071600, 496796400, 512521200, 528246000, 543970800, 559695600, 575420400, 591145200, 606870000, 622594800, 670374000, 686102400, 701827200, 717552000, 733276800, 749001600, 764726400, 780451200, 796176000, 811900800, 828230400, 846374400, 859680000, 877824000, 891129600, 909273600 [...] typeOffsets:intvector { 6616, 0, 3600, 0, 3600, 3600, 6600, 0, 7200, 0, 7200, 3600, 10800, 0, 10800, 3600 } typeMap:bin { "0304060201020102060706070607060706070607060706070607060504050405040504050405040504050405040504050405040504050405040504050405040504050406" } - } //Z#471 - /* Europe/Monaco */ :table { - transPre32:intvector { -1, 1846648724 } - trans:intvector { -1854403761, -1689814800, -1680397200, -1665363600, -1648342800, -1635123600, -1616893200, -1604278800, -1585443600, -1574038800, -1552266000, -1539997200, -1520557200, -1507510800, -1490576400, -1470618000, -1459126800, -1444006800, -1427677200, -1411952400, -1396227600, -1379293200, -1364778000, -1348448400, -1333328400, -1316394000, -1301274000, -1284339600, -1269824400, -1253494800, -1238374800, -1221440400, -1206925200, -1191200400, -1175475600, -1160355600, -1 [...] - typeOffsets:intvector { 1772, 0, 0, 0, 0, 3600, 0, 7200, 561, 0, 3600, 0, 3600, 3600 } - typeMap:bin { "04010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010203020302030203020305060506050605060506050605060506050605060506050605060506050605060506050605060506050605" } - finalRule { "EU" } - finalRaw:int { 3600 } - finalYear:int { 1997 } } //Z#472 + /* Europe/Monaco */ :int { 477 } //Z#473 /* Europe/Moscow */ :table { trans:intvector { -1688265017, -1656819079, -1641353479, -1627965079, -1618716679, -1596429079, -1593820800, -1589860800, -1542427200, -1539493200, -1525323600, -1522728000, -1491188400, -1247536800, 354920400, 370728000, 386456400, 402264000, 417992400, 433800000, 449614800, 465346800, 481071600, 496796400, 512521200, 528246000, 543970800, 559695600, 575420400, 591145200, 606870000, 622594800, 638319600, 654649200, 670374000, 686102400, 695779200, 701823600, 717548400, 733273200, 74 [...] typeOffsets:intvector { 9017, 0, 7200, 0, 7200, 3600, 9079, 0, 9079, 3600, 9079, 7200, 10800, 0, 10800, 3600, 10800, 7200, 14400, 0 } typeMap:bin { "0304030504050706070807060106070607060706070607060706070607060706070602010607060706070607060706070607060706070607060706070607060706070607060706070607060906" } - links:intvector { 473, 633 } - } //Z#473 - /* Europe/Nicosia */ :int { 298 } //Z#474 - /* Europe/Oslo */ :table { - transPre32:intvector { -1, 1928209516 } - trans:intvector { -1691884800, -1680573600, -927511200, -857257200, -844556400, -828226800, -812502000, -796777200, -781052400, -765327600, -340844400, -324514800, -308790000, -293065200, -277340400, -261615600, -245890800, -230166000, -214441200, -198716400, -182991600, -166662000, -147913200, -135212400, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 5754 [...] - typeOffsets:intvector { 2580, 0, 3600, 0, 3600, 3600 } - typeMap:bin { "0102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201" } - finalRule { "EU" } - finalRaw:int { 3600 } - finalYear:int { 1997 } - links:intvector { 238, 344, 475 } - } //Z#475 + links:intvector { 474, 634 } + } //Z#474 + /* Europe/Nicosia */ :int { 298 } //Z#475 + /* Europe/Oslo */ :int { 446 } //Z#476 /* Europe/Paris */ :table { trans:intvector { -1855958961, -1689814800, -1680397200, -1665363600, -1648342800, -1635123600, -1616893200, -1604278800, -1585443600, -1574038800, -1552266000, -1539997200, -1520557200, -1507510800, -1490576400, -1470618000, -1459126800, -1444006800, -1427677200, -1411952400, -1396227600, -1379293200, -1364778000, -1348448400, -1333328400, -1316394000, -1301274000, -1284339600, -1269824400, -1253494800, -1238374800, -1221440400, -1206925200, -1191200400, -1175475600, -1160355600, -1 [...] typeOffsets:intvector { 561, 0, 0, 0, 0, 3600, 0, 7200, 3600, 0, 3600, 3600 } @@ -2217,9 +2160,9 @@ zoneinfo64:table(nofallback) { finalRule { "EU" } finalRaw:int { 3600 } finalYear:int { 1997 } - links:intvector { 398, 476 } - } //Z#476 - /* Europe/Podgorica */ :int { 445 } //Z#477 + links:intvector { 398, 473, 477 } + } //Z#477 + /* Europe/Podgorica */ :int { 445 } //Z#478 /* Europe/Prague */ :table { transPre32:intvector { -1, 1825565432 } trans:intvector { -1693706400, -1680483600, -1663455600, -1650150000, -1632006000, -1618700400, -938905200, -857257200, -844556400, -828226800, -812502000, -796777200, -781052400, -765327600, -746578800, -733359600, -728517600, -721260000, -716425200, -701910000, -684975600, -670460400, -654217200, -639010800, 291776400, 307501200, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, [...] @@ -2228,8 +2171,8 @@ zoneinfo64:table(nofallback) { finalRule { "EU" } finalRaw:int { 3600 } finalYear:int { 1997 } - links:intvector { 447, 478 } - } //Z#478 + links:intvector { 447, 479 } + } //Z#479 /* Europe/Riga */ :table { trans:intvector { -1632008194, -1618702594, -1601681794, -1597275394, -1377308194, -928029600, -899521200, -857257200, -844556400, -828226800, -812502000, -796777200, -795834000, 354920400, 370728000, 386456400, 402264000, 417992400, 433800000, 449614800, 465346800, 481071600, 496796400, 512521200, 528246000, 543970800, 559695600, 575420400, 591145200, 606870000, 622598400, 638323200, 654652800, 670377600, 686102400, 701827200, 717552000, 733276800, 749001600, 764726400, 780451200, 7 [...] typeOffsets:intvector { 5794, 0, 3600, 0, 3600, 3600, 5794, 3600, 7200, 0, 7200, 3600, 10800, 0, 10800, 3600 } @@ -2237,7 +2180,7 @@ zoneinfo64:table(nofallback) { finalRule { "EU" } finalRaw:int { 7200 } finalYear:int { 2002 } - } //Z#479 + } //Z#480 /* Europe/Rome */ :table { transPre32:intvector { -1, 1891402096 } trans:intvector { -1690765200, -1680487200, -1664758800, -1648951200, -1635123600, -1616896800, -1604278800, -1585533600, -1571014800, -1555293600, -932432400, -857257200, -844556400, -828226800, -812502000, -798073200, -781052400, -766717200, -750898800, -733359600, -719456400, -701917200, -689209200, -670460400, -114051600, -103168800, -81997200, -71715600, -50547600, -40266000, -18493200, -8211600, 12956400, 23238000, 43801200, 54687600, 75855600, 86742000, 107910000, 118191600, 1 [...] @@ -2246,27 +2189,27 @@ zoneinfo64:table(nofallback) { finalRule { "EU" } finalRaw:int { 3600 } finalYear:int { 1997 } - links:intvector { 480, 482, 495 } - } //Z#480 + links:intvector { 481, 483, 496 } + } //Z#481 /* Europe/Samara */ :table { trans:intvector { -1593820800, -1247540400, 354916800, 370724400, 386452800, 402260400, 417988800, 433796400, 449611200, 465343200, 481068000, 496792800, 512517600, 528242400, 543967200, 559692000, 575416800, 591141600, 606866400, 622594800, 638319600, 654649200, 670374000, 686102400, 687916800, 701820000, 717544800, 733269600, 748994400, 764719200, 780444000, 796168800, 811893600, 828223200, 846367200, 859672800, 877816800, 891122400, 909266400, 922572000, 941320800, 954021600, 9727 [...] typeOffsets:intvector { 12020, 0, 7200, 3600, 10800, 0, 10800, 3600, 14400, 0, 14400, 3600 } typeMap:bin { "02040504050405040504050405040504050403020302010204050405040504050405040504050405040504050405040504050405040504050405040504030204" } - } //Z#481 - /* Europe/San_Marino */ :int { 480 } //Z#482 - /* Europe/Sarajevo */ :int { 445 } //Z#483 + } //Z#482 + /* Europe/San_Marino */ :int { 481 } //Z#483 + /* Europe/Sarajevo */ :int { 445 } //Z#484 /* Europe/Saratov */ :table { trans:intvector { -1593820800, -1247540400, 354916800, 370724400, 386452800, 402260400, 417988800, 433796400, 449611200, 465343200, 481068000, 496792800, 512517600, 528242400, 543967200, 559692000, 575416800, 591145200, 606870000, 622594800, 638319600, 654649200, 670374000, 701820000, 717548400, 733273200, 748998000, 764722800, 780447600, 796172400, 811897200, 828226800, 846370800, 859676400, 877820400, 891126000, 909270000, 922575600, 941324400, 954025200, 972774000, 985474800, 1004 [...] typeOffsets:intvector { 11058, 0, 10800, 0, 10800, 3600, 14400, 0, 14400, 3600 } typeMap:bin { "01030403040304030403040304030403020102010201030201020102010201020102010201020102010201020102010201020102010201020102010201030103" } - } //Z#484 + } //Z#485 /* Europe/Simferopol */ :table { transPre32:intvector { -1, 1454818312 } - trans:intvector { -1441160160, -1247536800, -888894000, -857257200, -844556400, -828226800, -812502000, -811648800, 354920400, 370728000, 386456400, 402264000, 417992400, 433800000, 449614800, 465346800, 481071600, 496796400, 512521200, 528246000, 543970800, 559695600, 575420400, 591145200, 606870000, 622594800, 646786800, 701827200, 717552000, 733276800, 749001600, 764726400, 767739600, 780436800, 796165200, 811886400, 828219600, 846374400, 859683600, 877827600, 891133200, 909277200 [...] + trans:intvector { -1441160160, -1247536800, -888894000, -857257200, -844556400, -828226800, -812502000, -811648800, 354920400, 370728000, 386456400, 402264000, 417992400, 433800000, 449614800, 465346800, 481071600, 496796400, 512521200, 528246000, 543970800, 559695600, 575420400, 591145200, 606870000, 622594800, 646786800, 701827200, 717552000, 733276800, 749001600, 764726400, 767739600, 780447600, 796172400, 811897200, 828219600, 846374400, 859683600, 877827600, 891133200, 909277200 [...] typeOffsets:intvector { 8184, 0, 3600, 0, 3600, 3600, 7200, 0, 7200, 3600, 8160, 0, 10800, 0, 10800, 3600, 14400, 0 } typeMap:bin { "050306020102010206070607060706070607060706070607060706030403040304070607060706040304030403040304030403040304030403040304030403040304030403040304030806" } - } //Z#485 - /* Europe/Skopje */ :int { 445 } //Z#486 + } //Z#486 + /* Europe/Skopje */ :int { 445 } //Z#487 /* Europe/Sofia */ :table { transPre32:intvector { -1, 1454820900, -1, 1925440280 } trans:intvector { -857257200, -844556400, -828226800, -812502000, -796777200, -781048800, 291762000, 307576800, 323816400, 339026400, 355266000, 370393200, 386715600, 401846400, 417571200, 433296000, 449020800, 465350400, 481075200, 496800000, 512524800, 528249600, 543974400, 559699200, 575424000, 591148800, 606873600, 622598400, 638323200, 654652800, 670370400, 686091600, 701820000, 717541200, 733269600, 748990800, 764719200, 780440400, 796168800, 811890000, 828223200, 846363600, 85 [...] @@ -2275,16 +2218,8 @@ zoneinfo64:table(nofallback) { finalRule { "EU" } finalRaw:int { 7200 } finalYear:int { 1998 } - } //Z#487 - /* Europe/Stockholm */ :table { - transPre32:intvector { -1, 1423286164, -1, 2085974882 } - trans:intvector { -1692496800, -1680483600, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 } - typeOffsets:intvector { 4332, 0, 3600, 0, 3600, 3600, 3614, 0 } - typeMap:bin { "0301020102010201020102010201020102010201020102010201020102010201020102010201" } - finalRule { "EU" } - finalRaw:int { 3600 } - finalYear:int { 1997 } } //Z#488 + /* Europe/Stockholm */ :int { 446 } //Z#489 /* Europe/Tallinn */ :table { trans:intvector { -1638322740, -1632006000, -1618700400, -1593824400, -1535938740, -927943200, -892954800, -857257200, -844556400, -828226800, -812502000, -797652000, 354920400, 370728000, 386456400, 402264000, 417992400, 433800000, 449614800, 465346800, 481071600, 496796400, 512521200, 528246000, 543970800, 559695600, 575420400, 591145200, 606870000, 622598400, 638323200, 654652800, 670377600, 686102400, 701827200, 717552000, 733276800, 749001600, 764726400, 780451200, 796176000, 81 [...] typeOffsets:intvector { 5940, 0, 3600, 0, 3600, 3600, 7200, 0, 7200, 3600, 10800, 0, 10800, 3600 } @@ -2292,7 +2227,7 @@ zoneinfo64:table(nofallback) { finalRule { "EU" } finalRaw:int { 7200 } finalYear:int { 2003 } - } //Z#489 + } //Z#490 /* Europe/Tirane */ :table { trans:intvector { -1767230360, -932346000, -857257200, -844556400, -843519600, 136854000, 149896800, 168130800, 181432800, 199839600, 213141600, 231894000, 244591200, 263257200, 276040800, 294706800, 307490400, 326156400, 339458400, 357087600, 370389600, 389142000, 402444000, 419468400, 433807200, 449622000, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 71 [...] typeOffsets:intvector { 4760, 0, 3600, 0, 3600, 3600 } @@ -2300,13 +2235,13 @@ zoneinfo64:table(nofallback) { finalRule { "EU" } finalRaw:int { 3600 } finalYear:int { 1997 } - } //Z#490 - /* Europe/Tiraspol */ :int { 452 } //Z#491 + } //Z#491 + /* Europe/Tiraspol */ :int { 452 } //Z#492 /* Europe/Ulyanovsk */ :table { trans:intvector { -1593820800, -1247540400, 354916800, 370724400, 386452800, 402260400, 417988800, 433796400, 449611200, 465343200, 481068000, 496792800, 512517600, 528242400, 543967200, 559692000, 575416800, 591141600, 606866400, 622594800, 638319600, 654649200, 670374000, 686102400, 695779200, 701823600, 717548400, 733273200, 748998000, 764722800, 780447600, 796172400, 811897200, 828226800, 846370800, 859676400, 877820400, 891126000, 909270000, 922575600, 941324400, 954025200, 9727 [...] typeOffsets:intvector { 11616, 0, 7200, 0, 7200, 3600, 10800, 0, 10800, 3600, 14400, 0, 14400, 3600 } typeMap:bin { "030506050605060506050605060506050605040304030201030403040304030403040304030403040304030403040304030403040304030403040304030403050305" } - } //Z#492 + } //Z#493 /* Europe/Uzhgorod */ :table { transPre32:intvector { -1, 1794027544 } trans:intvector { -938905200, -857257200, -844556400, -828226800, -812502000, -794714400, -773456400, 354920400, 370728000, 386456400, 402264000, 417992400, 433800000, 449614800, 465346800, 481071600, 496796400, 512521200, 528246000, 543970800, 559695600, 575420400, 591145200, 606870000, 622594800, 646786800, 670384800, 701827200, 717552000, 733276800, 749001600, 764726400, 780451200, 796176000, 811900800, 828230400, 846378000, 859683600, 877827600 } @@ -2315,9 +2250,9 @@ zoneinfo64:table(nofallback) { finalRule { "EU" } finalRaw:int { 7200 } finalYear:int { 1998 } - } //Z#493 - /* Europe/Vaduz */ :int { 502 } //Z#494 - /* Europe/Vatican */ :int { 480 } //Z#495 + } //Z#494 + /* Europe/Vaduz */ :int { 503 } //Z#495 + /* Europe/Vatican */ :int { 481 } //Z#496 /* Europe/Vienna */ :table { transPre32:intvector { -1, 1872912175 } trans:intvector { -1693706400, -1680483600, -1663455600, -1650150000, -1632006000, -1618700400, -1569711600, -1555801200, -938905200, -857257200, -844556400, -828226800, -812502000, -796777200, -781052400, -780188400, -748479600, -733273200, -717634800, -701910000, -684975600, -670460400, 323823600, 338940000, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, [...] @@ -2326,7 +2261,7 @@ zoneinfo64:table(nofallback) { finalRule { "EU" } finalRaw:int { 3600 } finalYear:int { 1997 } - } //Z#496 + } //Z#497 /* Europe/Vilnius */ :table { transPre32:intvector { -1, 1454820420 } trans:intvector { -1672536240, -1585100136, -1561251600, -1553565600, -928198800, -900126000, -857257200, -844556400, -828226800, -812502000, -802144800, 354920400, 370728000, 386456400, 402264000, 417992400, 433800000, 449614800, 465346800, 481071600, 496796400, 512521200, 528246000, 543970800, 559695600, 575420400, 591145200, 606870000, 622598400, 638323200, 654652800, 670377600, 686102400, 701827200, 717552000, 733276800, 749001600, 764726400, 780451200, 796176000, 811900800, 8282 [...] @@ -2335,12 +2270,12 @@ zoneinfo64:table(nofallback) { finalRule { "EU" } finalRaw:int { 7200 } finalYear:int { 2004 } - } //Z#497 + } //Z#498 /* Europe/Volgograd */ :table { trans:intvector { -1577761060, -1247540400, 354916800, 370724400, 386452800, 402260400, 417988800, 433796400, 449611200, 465343200, 481068000, 496792800, 512517600, 528242400, 543967200, 559692000, 575416800, 591145200, 606870000, 622594800, 638319600, 654649200, 670374000, 701820000, 717548400, 733273200, 748998000, 764722800, 780447600, 796172400, 811897200, 828226800, 846370800, 859676400, 877820400, 891126000, 909270000, 922575600, 941324400, 954025200, 972774000, 985474800, 1004 [...] typeOffsets:intvector { 10660, 0, 10800, 0, 10800, 3600, 14400, 0, 14400, 3600 } typeMap:bin { "0103040304030403040304030403040302010201020103020102010201020102010201020102010201020102010201020102010201020102010201020103010301" } - } //Z#498 + } //Z#499 /* Europe/Warsaw */ :table { trans:intvector { -1717032240, -1693706400, -1680483600, -1663455600, -1650150000, -1632006000, -1618700400, -1600473600, -1587168000, -1501725600, -931734000, -857257200, -844556400, -828226800, -812502000, -796608000, -778726800, -762660000, -748486800, -733273200, -715215600, -701910000, -684975600, -670460400, -654130800, -639010800, -397094400, -386812800, -371088000, -355363200, -334195200, -323308800, -307584000, -291859200, -271296000, -260409600, -239846400, -228960000, -208 [...] typeOffsets:intvector { 5040, 0, 3600, 0, 3600, 3600, 7200, 0, 7200, 3600 } @@ -2348,9 +2283,9 @@ zoneinfo64:table(nofallback) { finalRule { "EU" } finalRaw:int { 3600 } finalYear:int { 1997 } - links:intvector { 499, 596 } - } //Z#499 - /* Europe/Zagreb */ :int { 445 } //Z#500 + links:intvector { 500, 597 } + } //Z#500 + /* Europe/Zagreb */ :int { 445 } //Z#501 /* Europe/Zaporozhye */ :table { transPre32:intvector { -1, 1454818056 } trans:intvector { -1441160400, -1247536800, -894769200, -857257200, -844556400, -828226800, -826419600, 354920400, 370728000, 386456400, 402264000, 417992400, 433800000, 449614800, 465346800, 481071600, 496796400, 512521200, 528246000, 543970800, 559695600, 575420400, 591145200, 606870000, 622594800, 638319600, 654649200, 670374000, 686091600, 701827200, 717552000, 733276800, 749001600, 764726400, 780451200, 796176000, 811900800, 828230400, 846378000, 859683600, 877827600 } @@ -2359,7 +2294,7 @@ zoneinfo64:table(nofallback) { finalRule { "EU" } finalRaw:int { 7200 } finalYear:int { 1998 } - } //Z#501 + } //Z#502 /* Europe/Zurich */ :table { transPre32:intvector { -1, 619768448, -1, 1909720710 } trans:intvector { -904435200, -891129600, -872985600, -859680000, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 } @@ -2368,75 +2303,56 @@ zoneinfo64:table(nofallback) { finalRule { "EU" } finalRaw:int { 3600 } finalYear:int { 1997 } - links:intvector { 451, 494, 502 } - } //Z#502 + links:intvector { 451, 495, 503 } + } //Z#503 /* Factory */ :table { typeOffsets:intvector { 0, 0 } - } //Z#503 - /* GB */ :int { 466 } //Z#504 - /* GB-Eire */ :int { 466 } //Z#505 - /* GMT */ :int { 404 } //Z#506 - /* GMT+0 */ :int { 404 } //Z#507 - /* GMT-0 */ :int { 404 } //Z#508 - /* GMT0 */ :int { 404 } //Z#509 - /* Greenwich */ :int { 404 } //Z#510 + } //Z#504 + /* GB */ :int { 467 } //Z#505 + /* GB-Eire */ :int { 467 } //Z#506 + /* GMT */ :int { 404 } //Z#507 + /* GMT+0 */ :int { 404 } //Z#508 + /* GMT-0 */ :int { 404 } //Z#509 + /* GMT0 */ :int { 404 } //Z#510 + /* Greenwich */ :int { 404 } //Z#511 /* HST */ :table { typeOffsets:intvector { -36000, 0 } - } //Z#511 - /* Hongkong */ :int { 273 } //Z#512 - /* IET */ :int { 131 } //Z#513 - /* IST */ :int { 287 } //Z#514 - /* Iceland */ :int { 346 } //Z#515 - /* Indian/Antananarivo */ :int { 48 } //Z#516 + } //Z#512 + /* Hongkong */ :int { 273 } //Z#513 + /* IET */ :int { 131 } //Z#514 + /* IST */ :int { 287 } //Z#515 + /* Iceland */ :int { 5 } //Z#516 + /* Indian/Antananarivo */ :int { 48 } //Z#517 /* Indian/Chagos */ :table { trans:intvector { -1988167780, 820436400 } typeOffsets:intvector { 17380, 0, 18000, 0, 21600, 0 } typeMap:bin { "0102" } - } //Z#517 - /* Indian/Christmas */ :table { - transPre32:intvector { -1, 1930865124 } - typeOffsets:intvector { 25372, 0, 25200, 0 } - typeMap:bin { "01" } } //Z#518 - /* Indian/Cocos */ :table { - transPre32:intvector { -1, 2085955236 } - typeOffsets:intvector { 23260, 0, 23400, 0 } - typeMap:bin { "01" } - } //Z#519 - /* Indian/Comoro */ :int { 48 } //Z#520 - /* Indian/Kerguelen */ :table { - trans:intvector { -631152000 } - typeOffsets:intvector { 0, 0, 18000, 0 } - typeMap:bin { "01" } - } //Z#521 - /* Indian/Mahe */ :table { - trans:intvector { -1988163708 } - typeOffsets:intvector { 13308, 0, 14400, 0 } - typeMap:bin { "01" } - } //Z#522 + /* Indian/Christmas */ :int { 251 } //Z#519 + /* Indian/Cocos */ :int { 335 } //Z#520 + /* Indian/Comoro */ :int { 48 } //Z#521 + /* Indian/Kerguelen */ :int { 524 } //Z#522 + /* Indian/Mahe */ :int { 266 } //Z#523 /* Indian/Maldives */ :table { trans:intvector { -315636840 } typeOffsets:intvector { 17640, 0, 18000, 0 } typeMap:bin { "01" } - } //Z#523 + links:intvector { 522, 524 } + } //Z#524 /* Indian/Mauritius */ :table { trans:intvector { -1988164200, 403041600, 417034800, 1224972000, 1238274000 } typeOffsets:intvector { 13800, 0, 14400, 0, 14400, 3600 } typeMap:bin { "0102010201" } - } //Z#524 - /* Indian/Mayotte */ :int { 48 } //Z#525 - /* Indian/Reunion */ :table { - trans:intvector { -1848886912 } - typeOffsets:intvector { 13312, 0, 14400, 0 } - typeMap:bin { "01" } - } //Z#526 - /* Iran */ :int { 321 } //Z#527 - /* Israel */ :int { 279 } //Z#528 - /* JST */ :int { 325 } //Z#529 - /* Jamaica */ :int { 142 } //Z#530 - /* Japan */ :int { 325 } //Z#531 - /* Kwajalein */ :int { 572 } //Z#532 - /* Libya */ :int { 56 } //Z#533 + } //Z#525 + /* Indian/Mayotte */ :int { 48 } //Z#526 + /* Indian/Reunion */ :int { 266 } //Z#527 + /* Iran */ :int { 321 } //Z#528 + /* Israel */ :int { 279 } //Z#529 + /* JST */ :int { 325 } //Z#530 + /* Jamaica */ :int { 142 } //Z#531 + /* Japan */ :int { 325 } //Z#532 + /* Kwajalein */ :int { 573 } //Z#533 + /* Libya */ :int { 56 } //Z#534 /* MET */ :table { trans:intvector { -1693706400, -1680483600, -1663455600, -1650150000, -1632006000, -1618700400, -938905200, -857257200, -844556400, -828226800, -812502000, -796777200, -781052400, -766623600, 228877200, 243997200, 260326800, 276051600, 291776400, 307501200, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, [...] typeOffsets:intvector { 3600, 0, 3600, 3600 } @@ -2444,11 +2360,11 @@ zoneinfo64:table(nofallback) { finalRule { "C-Eur" } finalRaw:int { 3600 } finalYear:int { 1997 } - } //Z#534 - /* MIT */ :int { 552 } //Z#535 + } //Z#535 + /* MIT */ :int { 553 } //Z#536 /* MST */ :table { typeOffsets:intvector { -25200, 0 } - } //Z#536 + } //Z#537 /* MST7MDT */ :table { trans:intvector { -1633273200, -1615132800, -1601823600, -1583683200, -880210800, -765388800, -84380400, -68659200, -52930800, -37209600, -21481200, -5760000, 9968400, 25689600, 41418000, 57744000, 73472400, 89193600, 104922000, 120643200, 126694800, 152092800, 162378000, 183542400, 199270800, 215596800, 230720400, 247046400, 262774800, 278496000, 294224400, 309945600, 325674000, 341395200, 357123600, 372844800, 388573200, 404899200, 420022800, 436348800, 452077200, 467798400, 483526 [...] typeOffsets:intvector { -25200, 0, -25200, 3600 } @@ -2456,20 +2372,20 @@ zoneinfo64:table(nofallback) { finalRule { "US" } finalRaw:int { -25200 } finalYear:int { 2008 } - } //Z#537 - /* Mexico/BajaNorte */ :int { 217 } //Z#538 - /* Mexico/BajaSur */ :int { 160 } //Z#539 - /* Mexico/General */ :int { 165 } //Z#540 - /* NET */ :int { 337 } //Z#541 - /* NST */ :int { 553 } //Z#542 - /* NZ */ :int { 553 } //Z#543 - /* NZ-CHAT */ :int { 555 } //Z#544 - /* Navajo */ :int { 109 } //Z#545 - /* PLT */ :int { 282 } //Z#546 - /* PNT */ :int { 185 } //Z#547 - /* PRC */ :int { 315 } //Z#548 - /* PRT */ :int { 190 } //Z#549 - /* PST */ :int { 151 } //Z#550 + } //Z#538 + /* Mexico/BajaNorte */ :int { 217 } //Z#539 + /* Mexico/BajaSur */ :int { 160 } //Z#540 + /* Mexico/General */ :int { 165 } //Z#541 + /* NET */ :int { 337 } //Z#542 + /* NST */ :int { 554 } //Z#543 + /* NZ */ :int { 554 } //Z#544 + /* NZ-CHAT */ :int { 556 } //Z#545 + /* Navajo */ :int { 109 } //Z#546 + /* PLT */ :int { 282 } //Z#547 + /* PNT */ :int { 185 } //Z#548 + /* PRC */ :int { 315 } //Z#549 + /* PRT */ :int { 190 } //Z#550 + /* PST */ :int { 151 } //Z#551 /* PST8PDT */ :table { trans:intvector { -1633269600, -1615129200, -1601820000, -1583679600, -880207200, -765385200, -84376800, -68655600, -52927200, -37206000, -21477600, -5756400, 9972000, 25693200, 41421600, 57747600, 73476000, 89197200, 104925600, 120646800, 126698400, 152096400, 162381600, 183546000, 199274400, 215600400, 230724000, 247050000, 262778400, 278499600, 294228000, 309949200, 325677600, 341398800, 357127200, 372848400, 388576800, 404902800, 420026400, 436352400, 452080800, 467802000, 483530 [...] typeOffsets:intvector { -28800, 0, -28800, 3600 } @@ -2477,14 +2393,14 @@ zoneinfo64:table(nofallback) { finalRule { "US" } finalRaw:int { -28800 } finalYear:int { 2008 } - } //Z#551 + } //Z#552 /* Pacific/Apia */ :table { transPre32:intvector { -1, 1849542912 } trans:intvector { -1861878784, -631110600, 1285498800, 1301752800, 1316872800, 1325239200, 1333202400, 1348927200, 1365256800, 1380376800, 1396706400, 1411826400, 1428156000, 1443276000, 1459605600, 1474725600, 1491055200, 1506175200, 1522504800, 1538229600, 1554559200, 1569679200, 1586008800, 1601128800, 1617458400 } typeOffsets:intvector { 45184, 0, -41400, 0, -41216, 0, -39600, 0, -39600, 3600, 46800, 0, 46800, 3600 } typeMap:bin { "0201030403040605060506050605060506050605060506050605" } - links:intvector { 535, 552 } - } //Z#552 + links:intvector { 536, 553 } + } //Z#553 /* Pacific/Auckland */ :table { transPre32:intvector { -1, 1102531752 } trans:intvector { -1330335000, -1320057000, -1300699800, -1287396000, -1269250200, -1255946400, -1237800600, -1224496800, -1206351000, -1192442400, -1174901400, -1160992800, -1143451800, -1125914400, -1112607000, -1094464800, -1081157400, -1063015200, -1049707800, -1031565600, -1018258200, -1000116000, -986808600, -968061600, -955359000, -936612000, -923304600, -757425600, 152632800, 162309600, 183477600, 194968800, 215532000, 226418400, 246981600, 257868000, 278431200, 289317600, 30 [...] @@ -2493,14 +2409,14 @@ zoneinfo64:table(nofallback) { finalRule { "NZ" } finalRaw:int { 43200 } finalYear:int { 2009 } - links:intvector { 231, 234, 542, 543, 553 } - } //Z#553 + links:intvector { 231, 234, 543, 544, 554 } + } //Z#554 /* Pacific/Bougainville */ :table { transPre32:intvector { -1, 1454789160, -1, 1928176784 } trans:intvector { -868010400, -768906000, 1419696000 } typeOffsets:intvector { 37336, 0, 32400, 0, 35312, 0, 36000, 0, 39600, 0 } typeMap:bin { "0203010304" } - } //Z#554 + } //Z#555 /* Pacific/Chatham */ :table { transPre32:intvector { -1, 1102529668 } trans:intvector { -757426500, 152632800, 162309600, 183477600, 194968800, 215532000, 226418400, 246981600, 257868000, 278431200, 289317600, 309880800, 320767200, 341330400, 352216800, 372780000, 384271200, 404834400, 415720800, 436284000, 447170400, 467733600, 478620000, 499183200, 510069600, 530632800, 541519200, 562082400, 573573600, 594136800, 605023200, 623772000, 637682400, 655221600, 669132000, 686671200, 700581600, 718120800, 732636000, 749570400, 764085600, 781020000, 7955352 [...] @@ -2509,36 +2425,30 @@ zoneinfo64:table(nofallback) { finalRule { "Chatham" } finalRaw:int { 45900 } finalYear:int { 2009 } - links:intvector { 544, 555 } - } //Z#555 - /* Pacific/Chuuk */ :table { - transPre32:intvector { -1, 350338868, -1, 2117478068 } - trans:intvector { -1743674400, -1606813200, -907408800, -770634000 } - typeOffsets:intvector { -49972, 0, 32400, 0, 36000, 0, 36428, 0 } - typeMap:bin { "030201020102" } - links:intvector { 556, 592, 595 } + links:intvector { 545, 556 } } //Z#556 + /* Pacific/Chuuk */ :int { 586 } //Z#557 /* Pacific/Easter */ :table { - trans:intvector { -1178124152, -36619200, -23922000, -3355200, 7527600, 24465600, 37767600, 55915200, 69217200, 87969600, 100666800, 118209600, 132116400, 150868800, 163566000, 182318400, 195620400, 213768000, 227070000, 245217600, 258519600, 277272000, 289969200, 308721600, 321418800, 340171200, 353473200, 371620800, 384922800, 403070400, 416372400, 434520000, 447822000, 466574400, 479271600, 498024000, 510721200, 529473600, 545194800, 560923200, 574225200, 592372800, 605674800, 624 [...] + trans:intvector { -1178124152, -36619200, -23922000, -3355200, 7527600, 24465600, 37767600, 55915200, 69217200, 87969600, 100666800, 118209600, 132116400, 150868800, 163566000, 182318400, 195620400, 213768000, 227070000, 245217600, 258519600, 277272000, 289969200, 308721600, 321418800, 340171200, 353473200, 371620800, 384922800, 403070400, 416372400, 434520000, 447822000, 466574400, 479271600, 498024000, 510721200, 529473600, 545194800, 560923200, 574225200, 592372800, 605674800, 624 [...] typeOffsets:intvector { -26248, 0, -25200, 0, -25200, 3600, -21600, 0, -21600, 3600 } - typeMap:bin { "010201020102010201020102010201020102010201020102010201020304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304" } + typeMap:bin { "0102010201020102010201020102010201020102010201020102010203040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304" } finalRule { "Chile" } finalRaw:int { -21600 } - finalYear:int { 2020 } - links:intvector { 395, 557 } - } //Z#557 + finalYear:int { 2024 } + links:intvector { 395, 558 } + } //Z#558 /* Pacific/Efate */ :table { trans:intvector { -1829387596, 125409600, 133876800, 433256400, 448977600, 464706000, 480427200, 496760400, 511876800, 528210000, 543931200, 559659600, 575380800, 591109200, 606830400, 622558800, 638280000, 654008400, 669729600, 686062800, 696340800, 719931600, 727790400 } typeOffsets:intvector { 40396, 0, 39600, 0, 39600, 3600 } typeMap:bin { "0102010201020102010201020102010201020102010201" } - } //Z#558 - /* Pacific/Enderbury */ :int { 569 } //Z#559 + } //Z#559 + /* Pacific/Enderbury */ :int { 570 } //Z#560 /* Pacific/Fakaofo */ :table { transPre32:intvector { -1, 2117555592 } trans:intvector { 1325242800 } typeOffsets:intvector { -41096, 0, -39600, 0, 46800, 0 } typeMap:bin { "0102" } - } //Z#560 + } //Z#561 /* Pacific/Fiji */ :table { trans:intvector { -1709985344, 909842400, 920124000, 941896800, 951573600, 1259416800, 1269698400, 1287842400, 1299333600, 1319292000, 1327154400, 1350741600, 1358604000, 1382796000, 1390050000, 1414850400, 1421503200, 1446300000, 1452952800, 1478354400, 1484402400, 1509804000, 1515852000, 1541253600, 1547301600, 1573308000, 1578751200, 1608386400, 1610805600, 1668261600, 1673704800, 1699711200 } typeOffsets:intvector { 42944, 0, 43200, 0, 43200, 3600 } @@ -2546,90 +2456,81 @@ zoneinfo64:table(nofallback) { finalRule { "Fiji" } finalRaw:int { 43200 } finalYear:int { 2024 } - } //Z#561 - /* Pacific/Funafuti */ :table { - transPre32:intvector { -1, 2117471484 } - typeOffsets:intvector { 43012, 0, 43200, 0 } - typeMap:bin { "01" } } //Z#562 + /* Pacific/Funafuti */ :int { 591 } //Z#563 /* Pacific/Galapagos */ :table { trans:intvector { -1230746496, 504939600, 722930400, 728888400 } typeOffsets:intvector { -21504, 0, -21600, 0, -21600, 3600, -18000, 0 } typeMap:bin { "03010201" } - } //Z#563 + } //Z#564 /* Pacific/Gambier */ :table { trans:intvector { -1806678012 } typeOffsets:intvector { -32388, 0, -32400, 0 } typeMap:bin { "01" } - } //Z#564 + } //Z#565 /* Pacific/Guadalcanal */ :table { trans:intvector { -1806748788 } typeOffsets:intvector { 38388, 0, 39600, 0 } typeMap:bin { "01" } - links:intvector { 565, 600 } - } //Z#565 + links:intvector { 566, 584, 585, 601 } + } //Z#566 /* Pacific/Guam */ :table { transPre32:intvector { -1, 350340556, -1, 2117479756 } trans:intvector { -885549600, -802256400, -331891200, -281610000, -73728000, -29415540, -16704000, -10659600, 9907200, 21394800, 41356800, 52844400, 124819200, 130863600, 201888000, 209487660, 230659200, 241542000 } typeOffsets:intvector { -51660, 0, 32400, 0, 34740, 0, 36000, 0, 36000, 3600 } typeMap:bin { "0203010304030403040304030403040304030403" } - links:intvector { 566, 587 } - } //Z#566 + links:intvector { 567, 588 } + } //Z#567 /* Pacific/Honolulu */ :table { transPre32:intvector { -1, 1960865982 } trans:intvector { -1157283000, -1155436200, -880198200, -765376200, -712150200 } typeOffsets:intvector { -37886, 0, -37800, 0, -37800, 3600, -36000, 0 } typeMap:bin { "010201020103" } - links:intvector { 567, 568, 623 } - } //Z#567 - /* Pacific/Johnston */ :int { 567 } //Z#568 + links:intvector { 568, 569, 624 } + } //Z#568 + /* Pacific/Johnston */ :int { 568 } //Z#569 /* Pacific/Kanton */ :table { trans:intvector { -1020470400, 307627200, 788871600 } typeOffsets:intvector { 0, 0, -43200, 0, -39600, 0, 46800, 0 } typeMap:bin { "010203" } - links:intvector { 559, 569 } - } //Z#569 + links:intvector { 560, 570 } + } //Z#570 /* Pacific/Kiritimati */ :table { transPre32:intvector { -1, 2117552256 } trans:intvector { 307622400, 788868000 } typeOffsets:intvector { -37760, 0, -38400, 0, -36000, 0, 50400, 0 } typeMap:bin { "010203" } - } //Z#570 + } //Z#571 /* Pacific/Kosrae */ :table { transPre32:intvector { -1, 350336180, -1, 2117475380 } trans:intvector { -1743678000, -1606813200, -1041418800, -907408800, -770634000, -7988400, 915105600 } typeOffsets:intvector { -47284, 0, 32400, 0, 36000, 0, 39116, 0, 39600, 0, 43200, 0 } typeMap:bin { "030401040201040504" } - } //Z#571 + } //Z#572 /* Pacific/Kwajalein */ :table { transPre32:intvector { -1, 2117474336 } trans:intvector { -1041418800, -907408800, -817462800, -7988400, 745934400 } typeOffsets:intvector { 40160, 0, -43200, 0, 32400, 0, 36000, 0, 39600, 0, 43200, 0 } typeMap:bin { "040302040105" } - links:intvector { 532, 572 } - } //Z#572 - /* Pacific/Majuro */ :table { - transPre32:intvector { -1, 2117473408 } - trans:intvector { -1743678000, -1606813200, -1041418800, -907408800, -818067600, -7988400 } - typeOffsets:intvector { 41088, 0, 32400, 0, 36000, 0, 39600, 0, 43200, 0 } - typeMap:bin { "03010302010304" } + links:intvector { 533, 573 } } //Z#573 + /* Pacific/Majuro */ :int { 591 } //Z#574 /* Pacific/Marquesas */ :table { trans:intvector { -1806676920 } typeOffsets:intvector { -33480, 0, -34200, 0 } typeMap:bin { "01" } - } //Z#574 - /* Pacific/Midway */ :int { 580 } //Z#575 + } //Z#575 + /* Pacific/Midway */ :int { 581 } //Z#576 /* Pacific/Nauru */ :table { trans:intvector { -1545131260, -862918200, -767350800, 287418600 } typeOffsets:intvector { 40060, 0, 32400, 0, 41400, 0, 43200, 0 } typeMap:bin { "02010203" } - } //Z#576 + } //Z#577 /* Pacific/Niue */ :table { trans:intvector { -543069620, -173623200 } typeOffsets:intvector { -40780, 0, -40800, 0, -39600, 0 } typeMap:bin { "0102" } - } //Z#577 + } //Z#578 /* Pacific/Norfolk */ :table { transPre32:intvector { -1, 2117474184 } trans:intvector { -599656320, 152029800, 162916200, 1443882600, 1570287600, 1586012400, 1601737200 } @@ -2638,88 +2539,75 @@ zoneinfo64:table(nofallback) { finalRule { "AN" } finalRaw:int { 39600 } finalYear:int { 2021 } - } //Z#578 + } //Z#579 /* Pacific/Noumea */ :table { trans:intvector { -1829387148, 250002000, 257342400, 281451600, 288878400, 849366000, 857228400 } typeOffsets:intvector { 39948, 0, 39600, 0, 39600, 3600 } typeMap:bin { "01020102010201" } - } //Z#579 + } //Z#580 /* Pacific/Pago_Pago */ :table { transPre32:intvector { -1, 1849542664 } trans:intvector { -1861879032 } typeOffsets:intvector { 45432, 0, -40968, 0, -39600, 0 } typeMap:bin { "0102" } - links:intvector { 575, 580, 588, 629 } - } //Z#580 + links:intvector { 576, 581, 589, 630 } + } //Z#581 /* Pacific/Palau */ :table { transPre32:intvector { -1, 350343020, -1, 2117482220 } typeOffsets:intvector { -54124, 0, 32276, 0, 32400, 0 } typeMap:bin { "0102" } - } //Z#581 + } //Z#582 /* Pacific/Pitcairn */ :table { transPre32:intvector { -1, 2117545716 } trans:intvector { 893665800 } typeOffsets:intvector { -31220, 0, -30600, 0, -28800, 0 } typeMap:bin { "0102" } - } //Z#582 - /* Pacific/Pohnpei */ :table { - transPre32:intvector { -1, 350337324, -1, 2117476524 } - trans:intvector { -1743678000, -1606813200, -1041418800, -907408800, -770634000 } - typeOffsets:intvector { -48428, 0, 32400, 0, 36000, 0, 37972, 0, 39600, 0 } - typeMap:bin { "03040104020104" } - links:intvector { 583, 584 } } //Z#583 - /* Pacific/Ponape */ :int { 583 } //Z#584 + /* Pacific/Pohnpei */ :int { 566 } //Z#584 + /* Pacific/Ponape */ :int { 566 } //Z#585 /* Pacific/Port_Moresby */ :table { transPre32:intvector { -1, 1454791176, -1, 1928176784 } typeOffsets:intvector { 35320, 0, 35312, 0, 36000, 0 } typeMap:bin { "0102" } - links:intvector { 228, 585 } - } //Z#585 + links:intvector { 228, 557, 586, 593, 596 } + } //Z#586 /* Pacific/Rarotonga */ :table { transPre32:intvector { -1, 2085412040 } trans:intvector { -543072056, 279714600, 289387800, 309952800, 320837400, 341402400, 352287000, 372852000, 384341400, 404906400, 415791000, 436356000, 447240600, 467805600, 478690200, 499255200, 510139800, 530704800, 541589400, 562154400, 573643800, 594208800, 605093400, 625658400, 636543000, 657108000, 667992600 } typeOffsets:intvector { 48056, 0, -38344, 0, -37800, 0, -36000, 0, -36000, 1800 } typeMap:bin { "01020403040304030403040304030403040304030403040304030403" } - } //Z#586 - /* Pacific/Saipan */ :int { 566 } //Z#587 - /* Pacific/Samoa */ :int { 580 } //Z#588 + } //Z#587 + /* Pacific/Saipan */ :int { 567 } //Z#588 + /* Pacific/Samoa */ :int { 581 } //Z#589 /* Pacific/Tahiti */ :table { trans:intvector { -1806674504 } typeOffsets:intvector { -35896, 0, -36000, 0 } typeMap:bin { "01" } - } //Z#589 + } //Z#590 /* Pacific/Tarawa */ :table { transPre32:intvector { -1, 2117472972 } typeOffsets:intvector { 41524, 0, 43200, 0 } typeMap:bin { "01" } - } //Z#590 + links:intvector { 563, 574, 591, 594, 595 } + } //Z#591 /* Pacific/Tongatapu */ :table { trans:intvector { -767189952, -284041200, 939214800, 953384400, 973342800, 980596800, 1004792400, 1012046400, 1478350800, 1484398800 } typeOffsets:intvector { 44352, 0, 44400, 0, 46800, 0, 46800, 3600 } typeMap:bin { "01020302030203020302" } - } //Z#591 - /* Pacific/Truk */ :int { 556 } //Z#592 - /* Pacific/Wake */ :table { - transPre32:intvector { -1, 2117474508 } - typeOffsets:intvector { 39988, 0, 43200, 0 } - typeMap:bin { "01" } - } //Z#593 - /* Pacific/Wallis */ :table { - transPre32:intvector { -1, 2117470376 } - typeOffsets:intvector { 44120, 0, 43200, 0 } - typeMap:bin { "01" } - } //Z#594 - /* Pacific/Yap */ :int { 556 } //Z#595 - /* Poland */ :int { 499 } //Z#596 - /* Portugal */ :int { 464 } //Z#597 - /* ROC */ :int { 318 } //Z#598 - /* ROK */ :int { 314 } //Z#599 - /* SST */ :int { 565 } //Z#600 - /* Singapore */ :int { 316 } //Z#601 + } //Z#592 + /* Pacific/Truk */ :int { 586 } //Z#593 + /* Pacific/Wake */ :int { 591 } //Z#594 + /* Pacific/Wallis */ :int { 591 } //Z#595 + /* Pacific/Yap */ :int { 586 } //Z#596 + /* Poland */ :int { 500 } //Z#597 + /* Portugal */ :int { 465 } //Z#598 + /* ROC */ :int { 318 } //Z#599 + /* ROK */ :int { 314 } //Z#600 + /* SST */ :int { 566 } //Z#601 + /* Singapore */ :int { 316 } //Z#602 /* SystemV/AST4 */ :table { typeOffsets:intvector { -14400, 0 } - } //Z#602 + } //Z#603 /* SystemV/AST4ADT */ :table { transPre32:intvector { -1, 2096195296, -1, 2111916496, -1, 2127644896, -1, 2143366096 } trans:intvector { -2135872800, -2120151600, -2104423200, -2088702000, -2072973600, -2056647600, -2040919200, -2025198000, -2009469600, -1993748400, -1978020000, -1962298800, -1946570400, -1930849200, -1915120800, -1898794800, -1883671200, -1867345200, -1851616800, -1835895600, -1820167200, -1804446000, -1788717600, -1772996400, -1757268000, -1741546800, -1725818400, -1709492400, -1693764000, -1678042800, -1662314400, -1646593200, -1630864800, -1615143600, -1599415200, -1583694000, -1 [...] @@ -2728,10 +2616,10 @@ zoneinfo64:table(nofallback) { finalRule { "SystemV" } finalRaw:int { -14400 } finalYear:int { 1977 } - } //Z#603 + } //Z#604 /* SystemV/CST6 */ :table { typeOffsets:intvector { -21600, 0 } - } //Z#604 + } //Z#605 /* SystemV/CST6CDT */ :table { transPre32:intvector { -1, 2096202496, -1, 2111923696, -1, 2127652096, -1, 2143373296 } trans:intvector { -2135865600, -2120144400, -2104416000, -2088694800, -2072966400, -2056640400, -2040912000, -2025190800, -2009462400, -1993741200, -1978012800, -1962291600, -1946563200, -1930842000, -1915113600, -1898787600, -1883664000, -1867338000, -1851609600, -1835888400, -1820160000, -1804438800, -1788710400, -1772989200, -1757260800, -1741539600, -1725811200, -1709485200, -1693756800, -1678035600, -1662307200, -1646586000, -1630857600, -1615136400, -1599408000, -1583686800, -1 [...] @@ -2740,10 +2628,10 @@ zoneinfo64:table(nofallback) { finalRule { "SystemV" } finalRaw:int { -21600 } finalYear:int { 1977 } - } //Z#605 + } //Z#606 /* SystemV/EST5 */ :table { typeOffsets:intvector { -18000, 0 } - } //Z#606 + } //Z#607 /* SystemV/EST5EDT */ :table { transPre32:intvector { -1, 2096198896, -1, 2111920096, -1, 2127648496, -1, 2143369696 } trans:intvector { -2135869200, -2120148000, -2104419600, -2088698400, -2072970000, -2056644000, -2040915600, -2025194400, -2009466000, -1993744800, -1978016400, -1962295200, -1946566800, -1930845600, -1915117200, -1898791200, -1883667600, -1867341600, -1851613200, -1835892000, -1820163600, -1804442400, -1788714000, -1772992800, -1757264400, -1741543200, -1725814800, -1709488800, -1693760400, -1678039200, -1662310800, -1646589600, -1630861200, -1615140000, -1599411600, -1583690400, -1 [...] @@ -2752,13 +2640,13 @@ zoneinfo64:table(nofallback) { finalRule { "SystemV" } finalRaw:int { -18000 } finalYear:int { 1977 } - } //Z#607 + } //Z#608 /* SystemV/HST10 */ :table { typeOffsets:intvector { -36000, 0 } - } //Z#608 + } //Z#609 /* SystemV/MST7 */ :table { typeOffsets:intvector { -25200, 0 } - } //Z#609 + } //Z#610 /* SystemV/MST7MDT */ :table { transPre32:intvector { -1, 2096206096, -1, 2111927296, -1, 2127655696, -1, 2143376896 } trans:intvector { -2135862000, -2120140800, -2104412400, -2088691200, -2072962800, -2056636800, -2040908400, -2025187200, -2009458800, -1993737600, -1978009200, -1962288000, -1946559600, -1930838400, -1915110000, -1898784000, -1883660400, -1867334400, -1851606000, -1835884800, -1820156400, -1804435200, -1788706800, -1772985600, -1757257200, -1741536000, -1725807600, -1709481600, -1693753200, -1678032000, -1662303600, -1646582400, -1630854000, -1615132800, -1599404400, -1583683200, -1 [...] @@ -2767,10 +2655,10 @@ zoneinfo64:table(nofallback) { finalRule { "SystemV" } finalRaw:int { -25200 } finalYear:int { 1977 } - } //Z#610 + } //Z#611 /* SystemV/PST8 */ :table { typeOffsets:intvector { -28800, 0 } - } //Z#611 + } //Z#612 /* SystemV/PST8PDT */ :table { transPre32:intvector { -1, 2096209696, -1, 2111930896, -1, 2127659296, -1, 2143380496 } trans:intvector { -2135858400, -2120137200, -2104408800, -2088687600, -2072959200, -2056633200, -2040904800, -2025183600, -2009455200, -1993734000, -1978005600, -1962284400, -1946556000, -1930834800, -1915106400, -1898780400, -1883656800, -1867330800, -1851602400, -1835881200, -1820152800, -1804431600, -1788703200, -1772982000, -1757253600, -1741532400, -1725804000, -1709478000, -1693749600, -1678028400, -1662300000, -1646578800, -1630850400, -1615129200, -1599400800, -1583679600, -1 [...] @@ -2779,10 +2667,10 @@ zoneinfo64:table(nofallback) { finalRule { "SystemV" } finalRaw:int { -28800 } finalYear:int { 1977 } - } //Z#612 + } //Z#613 /* SystemV/YST9 */ :table { typeOffsets:intvector { -32400, 0 } - } //Z#613 + } //Z#614 /* SystemV/YST9YDT */ :table { transPre32:intvector { -1, 2096213296, -1, 2111934496, -1, 2127662896, -1, 2143384096 } trans:intvector { -2135854800, -2120133600, -2104405200, -2088684000, -2072955600, -2056629600, -2040901200, -2025180000, -2009451600, -1993730400, -1978002000, -1962280800, -1946552400, -1930831200, -1915102800, -1898776800, -1883653200, -1867327200, -1851598800, -1835877600, -1820149200, -1804428000, -1788699600, -1772978400, -1757250000, -1741528800, -1725800400, -1709474400, -1693746000, -1678024800, -1662296400, -1646575200, -1630846800, -1615125600, -1599397200, -1583676000, -1 [...] @@ -2791,26 +2679,26 @@ zoneinfo64:table(nofallback) { finalRule { "SystemV" } finalRaw:int { -32400 } finalYear:int { 1977 } - } //Z#614 - /* Turkey */ :int { 459 } //Z#615 - /* UCT */ :int { 436 } //Z#616 - /* US/Alaska */ :int { 60 } //Z#617 - /* US/Aleutian */ :int { 59 } //Z#618 - /* US/Arizona */ :int { 185 } //Z#619 - /* US/Central */ :int { 98 } //Z#620 - /* US/East-Indiana */ :int { 131 } //Z#621 - /* US/Eastern */ :int { 173 } //Z#622 - /* US/Hawaii */ :int { 567 } //Z#623 - /* US/Indiana-Starke */ :int { 132 } //Z#624 - /* US/Michigan */ :int { 110 } //Z#625 - /* US/Mountain */ :int { 109 } //Z#626 - /* US/Pacific */ :int { 151 } //Z#627 - /* US/Pacific-New */ :int { 151 } //Z#628 - /* US/Samoa */ :int { 580 } //Z#629 - /* UTC */ :int { 436 } //Z#630 - /* Universal */ :int { 436 } //Z#631 - /* VST */ :int { 272 } //Z#632 - /* W-SU */ :int { 473 } //Z#633 + } //Z#615 + /* Turkey */ :int { 459 } //Z#616 + /* UCT */ :int { 436 } //Z#617 + /* US/Alaska */ :int { 60 } //Z#618 + /* US/Aleutian */ :int { 59 } //Z#619 + /* US/Arizona */ :int { 185 } //Z#620 + /* US/Central */ :int { 98 } //Z#621 + /* US/East-Indiana */ :int { 131 } //Z#622 + /* US/Eastern */ :int { 173 } //Z#623 + /* US/Hawaii */ :int { 568 } //Z#624 + /* US/Indiana-Starke */ :int { 132 } //Z#625 + /* US/Michigan */ :int { 110 } //Z#626 + /* US/Mountain */ :int { 109 } //Z#627 + /* US/Pacific */ :int { 151 } //Z#628 + /* US/Pacific-New */ :int { 151 } //Z#629 + /* US/Samoa */ :int { 581 } //Z#630 + /* UTC */ :int { 436 } //Z#631 + /* Universal */ :int { 436 } //Z#632 + /* VST */ :int { 272 } //Z#633 + /* W-SU */ :int { 474 } //Z#634 /* WET */ :table { trans:intvector { 228877200, 243997200, 260326800, 276051600, 291776400, 307501200, 323830800, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 } typeOffsets:intvector { 0, 0, 0, 3600 } @@ -2818,8 +2706,8 @@ zoneinfo64:table(nofallback) { finalRule { "EU" } finalRaw:int { 0 } finalYear:int { 1997 } - } //Z#634 - /* Zulu */ :int { 436 } //Z#635 + } //Z#635 + /* Zulu */ :int { 436 } //Z#636 } Names { "ACT","AET","AGT","ART","AST","Africa/Abidjan","Africa/Accra" // 6 @@ -2963,51 +2851,51 @@ zoneinfo64:table(nofallback) { ,"Europe/Copenhagen","Europe/Dublin","Europe/Gibraltar" // 455 ,"Europe/Guernsey","Europe/Helsinki","Europe/Isle_of_Man" // 458 ,"Europe/Istanbul","Europe/Jersey","Europe/Kaliningrad" // 461 - ,"Europe/Kiev","Europe/Kirov","Europe/Lisbon","Europe/Ljubljana" // 465 - ,"Europe/London","Europe/Luxembourg","Europe/Madrid" // 468 - ,"Europe/Malta","Europe/Mariehamn","Europe/Minsk","Europe/Monaco" // 472 - ,"Europe/Moscow","Europe/Nicosia","Europe/Oslo","Europe/Paris" // 476 - ,"Europe/Podgorica","Europe/Prague","Europe/Riga","Europe/Rome" // 480 - ,"Europe/Samara","Europe/San_Marino","Europe/Sarajevo" // 483 - ,"Europe/Saratov","Europe/Simferopol","Europe/Skopje" // 486 - ,"Europe/Sofia","Europe/Stockholm","Europe/Tallinn" // 489 - ,"Europe/Tirane","Europe/Tiraspol","Europe/Ulyanovsk" // 492 - ,"Europe/Uzhgorod","Europe/Vaduz","Europe/Vatican" // 495 - ,"Europe/Vienna","Europe/Vilnius","Europe/Volgograd" // 498 - ,"Europe/Warsaw","Europe/Zagreb","Europe/Zaporozhye" // 501 - ,"Europe/Zurich","Factory","GB","GB-Eire","GMT","GMT+0" // 507 - ,"GMT-0","GMT0","Greenwich","HST","Hongkong","IET" // 513 - ,"IST","Iceland","Indian/Antananarivo","Indian/Chagos" // 517 - ,"Indian/Christmas","Indian/Cocos","Indian/Comoro" // 520 - ,"Indian/Kerguelen","Indian/Mahe","Indian/Maldives" // 523 - ,"Indian/Mauritius","Indian/Mayotte","Indian/Reunion" // 526 - ,"Iran","Israel","JST","Jamaica","Japan","Kwajalein" // 532 - ,"Libya","MET","MIT","MST","MST7MDT","Mexico/BajaNorte" // 538 - ,"Mexico/BajaSur","Mexico/General","NET","NST","NZ" // 543 - ,"NZ-CHAT","Navajo","PLT","PNT","PRC","PRT","PST","PST8PDT" // 551 - ,"Pacific/Apia","Pacific/Auckland","Pacific/Bougainville" // 554 - ,"Pacific/Chatham","Pacific/Chuuk","Pacific/Easter" // 557 - ,"Pacific/Efate","Pacific/Enderbury","Pacific/Fakaofo" // 560 - ,"Pacific/Fiji","Pacific/Funafuti","Pacific/Galapagos" // 563 - ,"Pacific/Gambier","Pacific/Guadalcanal","Pacific/Guam" // 566 - ,"Pacific/Honolulu","Pacific/Johnston","Pacific/Kanton" // 569 - ,"Pacific/Kiritimati","Pacific/Kosrae","Pacific/Kwajalein" // 572 - ,"Pacific/Majuro","Pacific/Marquesas","Pacific/Midway" // 575 - ,"Pacific/Nauru","Pacific/Niue","Pacific/Norfolk","Pacific/Noumea" // 579 - ,"Pacific/Pago_Pago","Pacific/Palau","Pacific/Pitcairn" // 582 - ,"Pacific/Pohnpei","Pacific/Ponape","Pacific/Port_Moresby" // 585 - ,"Pacific/Rarotonga","Pacific/Saipan","Pacific/Samoa" // 588 - ,"Pacific/Tahiti","Pacific/Tarawa","Pacific/Tongatapu" // 591 - ,"Pacific/Truk","Pacific/Wake","Pacific/Wallis","Pacific/Yap" // 595 - ,"Poland","Portugal","ROC","ROK","SST","Singapore" // 601 - ,"SystemV/AST4","SystemV/AST4ADT","SystemV/CST6","SystemV/CST6CDT" // 605 - ,"SystemV/EST5","SystemV/EST5EDT","SystemV/HST10","SystemV/MST7" // 609 - ,"SystemV/MST7MDT","SystemV/PST8","SystemV/PST8PDT" // 612 - ,"SystemV/YST9","SystemV/YST9YDT","Turkey","UCT","US/Alaska" // 617 - ,"US/Aleutian","US/Arizona","US/Central","US/East-Indiana" // 621 - ,"US/Eastern","US/Hawaii","US/Indiana-Starke","US/Michigan" // 625 - ,"US/Mountain","US/Pacific","US/Pacific-New","US/Samoa" // 629 - ,"UTC","Universal","VST","W-SU","WET","Zulu" // 635 + ,"Europe/Kiev","Europe/Kirov","Europe/Kyiv","Europe/Lisbon" // 465 + ,"Europe/Ljubljana","Europe/London","Europe/Luxembourg" // 468 + ,"Europe/Madrid","Europe/Malta","Europe/Mariehamn" // 471 + ,"Europe/Minsk","Europe/Monaco","Europe/Moscow","Europe/Nicosia" // 475 + ,"Europe/Oslo","Europe/Paris","Europe/Podgorica","Europe/Prague" // 479 + ,"Europe/Riga","Europe/Rome","Europe/Samara","Europe/San_Marino" // 483 + ,"Europe/Sarajevo","Europe/Saratov","Europe/Simferopol" // 486 + ,"Europe/Skopje","Europe/Sofia","Europe/Stockholm" // 489 + ,"Europe/Tallinn","Europe/Tirane","Europe/Tiraspol" // 492 + ,"Europe/Ulyanovsk","Europe/Uzhgorod","Europe/Vaduz" // 495 + ,"Europe/Vatican","Europe/Vienna","Europe/Vilnius" // 498 + ,"Europe/Volgograd","Europe/Warsaw","Europe/Zagreb" // 501 + ,"Europe/Zaporozhye","Europe/Zurich","Factory","GB" // 505 + ,"GB-Eire","GMT","GMT+0","GMT-0","GMT0","Greenwich" // 511 + ,"HST","Hongkong","IET","IST","Iceland","Indian/Antananarivo" // 517 + ,"Indian/Chagos","Indian/Christmas","Indian/Cocos" // 520 + ,"Indian/Comoro","Indian/Kerguelen","Indian/Mahe","Indian/Maldives" // 524 + ,"Indian/Mauritius","Indian/Mayotte","Indian/Reunion" // 527 + ,"Iran","Israel","JST","Jamaica","Japan","Kwajalein" // 533 + ,"Libya","MET","MIT","MST","MST7MDT","Mexico/BajaNorte" // 539 + ,"Mexico/BajaSur","Mexico/General","NET","NST","NZ" // 544 + ,"NZ-CHAT","Navajo","PLT","PNT","PRC","PRT","PST","PST8PDT" // 552 + ,"Pacific/Apia","Pacific/Auckland","Pacific/Bougainville" // 555 + ,"Pacific/Chatham","Pacific/Chuuk","Pacific/Easter" // 558 + ,"Pacific/Efate","Pacific/Enderbury","Pacific/Fakaofo" // 561 + ,"Pacific/Fiji","Pacific/Funafuti","Pacific/Galapagos" // 564 + ,"Pacific/Gambier","Pacific/Guadalcanal","Pacific/Guam" // 567 + ,"Pacific/Honolulu","Pacific/Johnston","Pacific/Kanton" // 570 + ,"Pacific/Kiritimati","Pacific/Kosrae","Pacific/Kwajalein" // 573 + ,"Pacific/Majuro","Pacific/Marquesas","Pacific/Midway" // 576 + ,"Pacific/Nauru","Pacific/Niue","Pacific/Norfolk","Pacific/Noumea" // 580 + ,"Pacific/Pago_Pago","Pacific/Palau","Pacific/Pitcairn" // 583 + ,"Pacific/Pohnpei","Pacific/Ponape","Pacific/Port_Moresby" // 586 + ,"Pacific/Rarotonga","Pacific/Saipan","Pacific/Samoa" // 589 + ,"Pacific/Tahiti","Pacific/Tarawa","Pacific/Tongatapu" // 592 + ,"Pacific/Truk","Pacific/Wake","Pacific/Wallis","Pacific/Yap" // 596 + ,"Poland","Portugal","ROC","ROK","SST","Singapore" // 602 + ,"SystemV/AST4","SystemV/AST4ADT","SystemV/CST6","SystemV/CST6CDT" // 606 + ,"SystemV/EST5","SystemV/EST5EDT","SystemV/HST10","SystemV/MST7" // 610 + ,"SystemV/MST7MDT","SystemV/PST8","SystemV/PST8PDT" // 613 + ,"SystemV/YST9","SystemV/YST9YDT","Turkey","UCT","US/Alaska" // 618 + ,"US/Aleutian","US/Arizona","US/Central","US/East-Indiana" // 622 + ,"US/Eastern","US/Hawaii","US/Indiana-Starke","US/Michigan" // 626 + ,"US/Mountain","US/Pacific","US/Pacific-New","US/Samoa" // 630 + ,"UTC","Universal","VST","W-SU","WET","Zulu" // 636 } Rules { AN:intvector { @@ -3049,51 +2937,48 @@ zoneinfo64:table(nofallback) { Haiti:intvector { 2, 8, -1, 7200, 0, 10, 1, -1, 7200, 0, 3600 } //_#12 - Iran:intvector { - 2, 20, 0, 86400, 0, 8, 20, 0, 86400, 0, 3600 - } //_#13 Jordan:intvector { 1, -29, -5, 86400, 0, 9, -31, -6, 0, 1, 3600 - } //_#14 + } //_#13 LH:intvector { 9, 1, -1, 7200, 0, 3, 1, -1, 7200, 0, 1800 - } //_#15 + } //_#14 Lebanon:intvector { 2, -31, -1, 0, 0, 9, -31, -1, 0, 0, 3600 - } //_#16 + } //_#15 Mexico:intvector { 3, 1, -1, 7200, 0, 9, -31, -1, 7200, 0, 3600 - } //_#17 + } //_#16 Moldova:intvector { 2, -31, -1, 7200, 0, 9, -31, -1, 10800, 0, 3600 - } //_#18 + } //_#17 NZ:intvector { 8, -30, -1, 7200, 1, 3, 1, -1, 7200, 1, 3600 - } //_#19 + } //_#18 Palestine:intvector { 2, 25, -1, 0, 0, 9, 23, -6, 3600, 0, 3600 - } //_#20 + } //_#19 Para:intvector { 9, 1, -1, 0, 0, 2, 22, -1, 0, 0, 3600 - } //_#21 + } //_#20 Syria:intvector { 2, -31, -6, 0, 0, 9, -31, -6, 0, 0, 3600 - } //_#22 + } //_#21 SystemV:intvector { 3, -30, -1, 7200, 0, 9, -31, -1, 7200, 0, 3600 - } //_#23 + } //_#22 Thule:intvector { 2, 8, -1, 7200, 0, 10, 1, -1, 7200, 0, 3600 - } //_#24 + } //_#23 Troll:intvector { 2, -31, -1, 3600, 2, 9, -31, -1, 3600, 2, 7200 - } //_#25 + } //_#24 US:intvector { 2, 8, -1, 7200, 0, 10, 1, -1, 7200, 0, 3600 - } //_#26 + } //_#25 Zion:intvector { 2, 23, -6, 7200, 0, 9, -31, -1, 7200, 0, 3600 - } //_#27 + } //_#26 } Regions:array { "AU", //Z#0 ACT @@ -3440,7 +3325,7 @@ zoneinfo64:table(nofallback) { "CV", //Z#341 Atlantic/Cape_Verde "FO", //Z#342 Atlantic/Faeroe "FO", //Z#343 Atlantic/Faroe - "NO", //Z#344 Atlantic/Jan_Mayen + "DE", //Z#344 Atlantic/Jan_Mayen "PT", //Z#345 Atlantic/Madeira "IS", //Z#346 Atlantic/Reykjavik "GS", //Z#347 Atlantic/South_Georgia @@ -3560,177 +3445,178 @@ zoneinfo64:table(nofallback) { "RU", //Z#461 Europe/Kaliningrad "UA", //Z#462 Europe/Kiev "RU", //Z#463 Europe/Kirov - "PT", //Z#464 Europe/Lisbon - "SI", //Z#465 Europe/Ljubljana - "GB", //Z#466 Europe/London - "LU", //Z#467 Europe/Luxembourg - "ES", //Z#468 Europe/Madrid - "MT", //Z#469 Europe/Malta - "AX", //Z#470 Europe/Mariehamn - "BY", //Z#471 Europe/Minsk - "MC", //Z#472 Europe/Monaco - "RU", //Z#473 Europe/Moscow - "CY", //Z#474 Europe/Nicosia - "NO", //Z#475 Europe/Oslo - "FR", //Z#476 Europe/Paris - "ME", //Z#477 Europe/Podgorica - "CZ", //Z#478 Europe/Prague - "LV", //Z#479 Europe/Riga - "IT", //Z#480 Europe/Rome - "RU", //Z#481 Europe/Samara - "SM", //Z#482 Europe/San_Marino - "BA", //Z#483 Europe/Sarajevo - "RU", //Z#484 Europe/Saratov - "UA", //Z#485 Europe/Simferopol - "MK", //Z#486 Europe/Skopje - "BG", //Z#487 Europe/Sofia - "SE", //Z#488 Europe/Stockholm - "EE", //Z#489 Europe/Tallinn - "AL", //Z#490 Europe/Tirane - "MD", //Z#491 Europe/Tiraspol - "RU", //Z#492 Europe/Ulyanovsk - "UA", //Z#493 Europe/Uzhgorod - "LI", //Z#494 Europe/Vaduz - "VA", //Z#495 Europe/Vatican - "AT", //Z#496 Europe/Vienna - "LT", //Z#497 Europe/Vilnius - "RU", //Z#498 Europe/Volgograd - "PL", //Z#499 Europe/Warsaw - "HR", //Z#500 Europe/Zagreb - "UA", //Z#501 Europe/Zaporozhye - "CH", //Z#502 Europe/Zurich - "001",//Z#503 Factory - "GB", //Z#504 GB - "GB", //Z#505 GB-Eire - "001",//Z#506 GMT - "001",//Z#507 GMT+0 - "001",//Z#508 GMT-0 - "001",//Z#509 GMT0 - "001",//Z#510 Greenwich - "001",//Z#511 HST - "HK", //Z#512 Hongkong - "US", //Z#513 IET - "IN", //Z#514 IST - "IS", //Z#515 Iceland - "MG", //Z#516 Indian/Antananarivo - "IO", //Z#517 Indian/Chagos - "CX", //Z#518 Indian/Christmas - "CC", //Z#519 Indian/Cocos - "KM", //Z#520 Indian/Comoro - "TF", //Z#521 Indian/Kerguelen - "SC", //Z#522 Indian/Mahe - "MV", //Z#523 Indian/Maldives - "MU", //Z#524 Indian/Mauritius - "YT", //Z#525 Indian/Mayotte - "RE", //Z#526 Indian/Reunion - "IR", //Z#527 Iran - "IL", //Z#528 Israel - "JP", //Z#529 JST - "JM", //Z#530 Jamaica - "JP", //Z#531 Japan - "MH", //Z#532 Kwajalein - "LY", //Z#533 Libya - "001",//Z#534 MET - "WS", //Z#535 MIT - "001",//Z#536 MST - "001",//Z#537 MST7MDT - "MX", //Z#538 Mexico/BajaNorte - "MX", //Z#539 Mexico/BajaSur - "MX", //Z#540 Mexico/General - "AM", //Z#541 NET - "NZ", //Z#542 NST - "NZ", //Z#543 NZ - "NZ", //Z#544 NZ-CHAT - "US", //Z#545 Navajo - "PK", //Z#546 PLT - "US", //Z#547 PNT - "CN", //Z#548 PRC - "PR", //Z#549 PRT - "US", //Z#550 PST - "001",//Z#551 PST8PDT - "WS", //Z#552 Pacific/Apia - "NZ", //Z#553 Pacific/Auckland - "PG", //Z#554 Pacific/Bougainville - "NZ", //Z#555 Pacific/Chatham - "FM", //Z#556 Pacific/Chuuk - "CL", //Z#557 Pacific/Easter - "VU", //Z#558 Pacific/Efate - "KI", //Z#559 Pacific/Enderbury - "TK", //Z#560 Pacific/Fakaofo - "FJ", //Z#561 Pacific/Fiji - "TV", //Z#562 Pacific/Funafuti - "EC", //Z#563 Pacific/Galapagos - "PF", //Z#564 Pacific/Gambier - "SB", //Z#565 Pacific/Guadalcanal - "GU", //Z#566 Pacific/Guam - "US", //Z#567 Pacific/Honolulu - "UM", //Z#568 Pacific/Johnston - "KI", //Z#569 Pacific/Kanton - "KI", //Z#570 Pacific/Kiritimati - "FM", //Z#571 Pacific/Kosrae - "MH", //Z#572 Pacific/Kwajalein - "MH", //Z#573 Pacific/Majuro - "PF", //Z#574 Pacific/Marquesas - "UM", //Z#575 Pacific/Midway - "NR", //Z#576 Pacific/Nauru - "NU", //Z#577 Pacific/Niue - "NF", //Z#578 Pacific/Norfolk - "NC", //Z#579 Pacific/Noumea - "AS", //Z#580 Pacific/Pago_Pago - "PW", //Z#581 Pacific/Palau - "PN", //Z#582 Pacific/Pitcairn - "FM", //Z#583 Pacific/Pohnpei - "FM", //Z#584 Pacific/Ponape - "PG", //Z#585 Pacific/Port_Moresby - "CK", //Z#586 Pacific/Rarotonga - "MP", //Z#587 Pacific/Saipan - "AS", //Z#588 Pacific/Samoa - "PF", //Z#589 Pacific/Tahiti - "KI", //Z#590 Pacific/Tarawa - "TO", //Z#591 Pacific/Tongatapu - "FM", //Z#592 Pacific/Truk - "UM", //Z#593 Pacific/Wake - "WF", //Z#594 Pacific/Wallis - "FM", //Z#595 Pacific/Yap - "PL", //Z#596 Poland - "PT", //Z#597 Portugal - "TW", //Z#598 ROC - "KR", //Z#599 ROK - "SB", //Z#600 SST - "SG", //Z#601 Singapore - "001",//Z#602 SystemV/AST4 - "001",//Z#603 SystemV/AST4ADT - "001",//Z#604 SystemV/CST6 - "001",//Z#605 SystemV/CST6CDT - "001",//Z#606 SystemV/EST5 - "001",//Z#607 SystemV/EST5EDT - "001",//Z#608 SystemV/HST10 - "001",//Z#609 SystemV/MST7 - "001",//Z#610 SystemV/MST7MDT - "001",//Z#611 SystemV/PST8 - "001",//Z#612 SystemV/PST8PDT - "001",//Z#613 SystemV/YST9 - "001",//Z#614 SystemV/YST9YDT - "TR", //Z#615 Turkey - "001",//Z#616 UCT - "US", //Z#617 US/Alaska - "US", //Z#618 US/Aleutian - "US", //Z#619 US/Arizona - "US", //Z#620 US/Central - "US", //Z#621 US/East-Indiana - "US", //Z#622 US/Eastern - "US", //Z#623 US/Hawaii - "US", //Z#624 US/Indiana-Starke - "US", //Z#625 US/Michigan - "US", //Z#626 US/Mountain - "US", //Z#627 US/Pacific - "US", //Z#628 US/Pacific-New - "AS", //Z#629 US/Samoa - "001",//Z#630 UTC - "001",//Z#631 Universal - "VN", //Z#632 VST - "RU", //Z#633 W-SU - "001",//Z#634 WET - "001",//Z#635 Zulu + "UA", //Z#464 Europe/Kyiv + "PT", //Z#465 Europe/Lisbon + "SI", //Z#466 Europe/Ljubljana + "GB", //Z#467 Europe/London + "LU", //Z#468 Europe/Luxembourg + "ES", //Z#469 Europe/Madrid + "MT", //Z#470 Europe/Malta + "AX", //Z#471 Europe/Mariehamn + "BY", //Z#472 Europe/Minsk + "MC", //Z#473 Europe/Monaco + "RU", //Z#474 Europe/Moscow + "CY", //Z#475 Europe/Nicosia + "NO", //Z#476 Europe/Oslo + "FR", //Z#477 Europe/Paris + "ME", //Z#478 Europe/Podgorica + "CZ", //Z#479 Europe/Prague + "LV", //Z#480 Europe/Riga + "IT", //Z#481 Europe/Rome + "RU", //Z#482 Europe/Samara + "SM", //Z#483 Europe/San_Marino + "BA", //Z#484 Europe/Sarajevo + "RU", //Z#485 Europe/Saratov + "UA", //Z#486 Europe/Simferopol + "MK", //Z#487 Europe/Skopje + "BG", //Z#488 Europe/Sofia + "SE", //Z#489 Europe/Stockholm + "EE", //Z#490 Europe/Tallinn + "AL", //Z#491 Europe/Tirane + "MD", //Z#492 Europe/Tiraspol + "RU", //Z#493 Europe/Ulyanovsk + "UA", //Z#494 Europe/Uzhgorod + "LI", //Z#495 Europe/Vaduz + "VA", //Z#496 Europe/Vatican + "AT", //Z#497 Europe/Vienna + "LT", //Z#498 Europe/Vilnius + "RU", //Z#499 Europe/Volgograd + "PL", //Z#500 Europe/Warsaw + "HR", //Z#501 Europe/Zagreb + "UA", //Z#502 Europe/Zaporozhye + "CH", //Z#503 Europe/Zurich + "001",//Z#504 Factory + "GB", //Z#505 GB + "GB", //Z#506 GB-Eire + "001",//Z#507 GMT + "001",//Z#508 GMT+0 + "001",//Z#509 GMT-0 + "001",//Z#510 GMT0 + "001",//Z#511 Greenwich + "001",//Z#512 HST + "HK", //Z#513 Hongkong + "US", //Z#514 IET + "IN", //Z#515 IST + "CI", //Z#516 Iceland + "MG", //Z#517 Indian/Antananarivo + "IO", //Z#518 Indian/Chagos + "CX", //Z#519 Indian/Christmas + "CC", //Z#520 Indian/Cocos + "KM", //Z#521 Indian/Comoro + "TF", //Z#522 Indian/Kerguelen + "SC", //Z#523 Indian/Mahe + "MV", //Z#524 Indian/Maldives + "MU", //Z#525 Indian/Mauritius + "YT", //Z#526 Indian/Mayotte + "RE", //Z#527 Indian/Reunion + "IR", //Z#528 Iran + "IL", //Z#529 Israel + "JP", //Z#530 JST + "JM", //Z#531 Jamaica + "JP", //Z#532 Japan + "MH", //Z#533 Kwajalein + "LY", //Z#534 Libya + "001",//Z#535 MET + "WS", //Z#536 MIT + "001",//Z#537 MST + "001",//Z#538 MST7MDT + "MX", //Z#539 Mexico/BajaNorte + "MX", //Z#540 Mexico/BajaSur + "MX", //Z#541 Mexico/General + "AM", //Z#542 NET + "NZ", //Z#543 NST + "NZ", //Z#544 NZ + "NZ", //Z#545 NZ-CHAT + "US", //Z#546 Navajo + "PK", //Z#547 PLT + "US", //Z#548 PNT + "CN", //Z#549 PRC + "PR", //Z#550 PRT + "US", //Z#551 PST + "001",//Z#552 PST8PDT + "WS", //Z#553 Pacific/Apia + "NZ", //Z#554 Pacific/Auckland + "PG", //Z#555 Pacific/Bougainville + "NZ", //Z#556 Pacific/Chatham + "FM", //Z#557 Pacific/Chuuk + "CL", //Z#558 Pacific/Easter + "VU", //Z#559 Pacific/Efate + "KI", //Z#560 Pacific/Enderbury + "TK", //Z#561 Pacific/Fakaofo + "FJ", //Z#562 Pacific/Fiji + "TV", //Z#563 Pacific/Funafuti + "EC", //Z#564 Pacific/Galapagos + "PF", //Z#565 Pacific/Gambier + "SB", //Z#566 Pacific/Guadalcanal + "GU", //Z#567 Pacific/Guam + "US", //Z#568 Pacific/Honolulu + "UM", //Z#569 Pacific/Johnston + "KI", //Z#570 Pacific/Kanton + "KI", //Z#571 Pacific/Kiritimati + "FM", //Z#572 Pacific/Kosrae + "MH", //Z#573 Pacific/Kwajalein + "MH", //Z#574 Pacific/Majuro + "PF", //Z#575 Pacific/Marquesas + "UM", //Z#576 Pacific/Midway + "NR", //Z#577 Pacific/Nauru + "NU", //Z#578 Pacific/Niue + "NF", //Z#579 Pacific/Norfolk + "NC", //Z#580 Pacific/Noumea + "AS", //Z#581 Pacific/Pago_Pago + "PW", //Z#582 Pacific/Palau + "PN", //Z#583 Pacific/Pitcairn + "FM", //Z#584 Pacific/Pohnpei + "SB", //Z#585 Pacific/Ponape + "PG", //Z#586 Pacific/Port_Moresby + "CK", //Z#587 Pacific/Rarotonga + "MP", //Z#588 Pacific/Saipan + "AS", //Z#589 Pacific/Samoa + "PF", //Z#590 Pacific/Tahiti + "KI", //Z#591 Pacific/Tarawa + "TO", //Z#592 Pacific/Tongatapu + "PG", //Z#593 Pacific/Truk + "UM", //Z#594 Pacific/Wake + "WF", //Z#595 Pacific/Wallis + "PG", //Z#596 Pacific/Yap + "PL", //Z#597 Poland + "PT", //Z#598 Portugal + "TW", //Z#599 ROC + "KR", //Z#600 ROK + "SB", //Z#601 SST + "SG", //Z#602 Singapore + "001",//Z#603 SystemV/AST4 + "001",//Z#604 SystemV/AST4ADT + "001",//Z#605 SystemV/CST6 + "001",//Z#606 SystemV/CST6CDT + "001",//Z#607 SystemV/EST5 + "001",//Z#608 SystemV/EST5EDT + "001",//Z#609 SystemV/HST10 + "001",//Z#610 SystemV/MST7 + "001",//Z#611 SystemV/MST7MDT + "001",//Z#612 SystemV/PST8 + "001",//Z#613 SystemV/PST8PDT + "001",//Z#614 SystemV/YST9 + "001",//Z#615 SystemV/YST9YDT + "TR", //Z#616 Turkey + "001",//Z#617 UCT + "US", //Z#618 US/Alaska + "US", //Z#619 US/Aleutian + "US", //Z#620 US/Arizona + "US", //Z#621 US/Central + "US", //Z#622 US/East-Indiana + "US", //Z#623 US/Eastern + "US", //Z#624 US/Hawaii + "US", //Z#625 US/Indiana-Starke + "US", //Z#626 US/Michigan + "US", //Z#627 US/Mountain + "US", //Z#628 US/Pacific + "US", //Z#629 US/Pacific-New + "AS", //Z#630 US/Samoa + "001",//Z#631 UTC + "001",//Z#632 Universal + "VN", //Z#633 VST + "RU", //Z#634 W-SU + "001",//Z#635 WET + "001",//Z#636 Zulu } } diff --git a/js/src/builtin/intl/TimeZoneDataGenerated.h b/js/src/builtin/intl/TimeZoneDataGenerated.h index 786c4e5b00ee1..a5f5713675caf 100644 --- a/js/src/builtin/intl/TimeZoneDataGenerated.h +++ b/js/src/builtin/intl/TimeZoneDataGenerated.h @@ -1,5 +1,5 @@ // Generated by make_intl_data.py. DO NOT EDIT. -// tzdata version = 2022a +// tzdata version = 2022b
#ifndef builtin_intl_TimeZoneDataGenerated_h #define builtin_intl_TimeZoneDataGenerated_h @@ -36,12 +36,13 @@ const char* const ianaZonesTreatedAsLinksByICU[] = { "Atlantic/Jan_Mayen", // Arctic/Longyearbyen [backzone] "EST", // Etc/GMT+5 [northamerica] "Europe/Belfast", // Europe/London [backzone] + "Europe/Kyiv", // Europe/Kiev [europe] "Europe/Tiraspol", // Europe/Chisinau [backzone] "HST", // Etc/GMT+10 [northamerica] "MST", // Etc/GMT+7 [northamerica] - "Pacific/Chuuk", // Pacific/Truk [australasia] + "Pacific/Chuuk", // Pacific/Truk [backzone] "Pacific/Kanton", // Pacific/Enderbury [australasia] - "Pacific/Pohnpei", // Pacific/Ponape [australasia] + "Pacific/Pohnpei", // Pacific/Ponape [backzone] };
// Format: @@ -78,6 +79,7 @@ const LinkAndTarget ianaLinksCanonicalizedDifferentlyByICU[] = { { "Atlantic/Faeroe", "Atlantic/Faroe" }, // Atlantic/Faeroe [backward] { "Europe/Bratislava", "Europe/Prague" }, // Europe/Bratislava [europe] { "Europe/Busingen", "Europe/Zurich" }, // Europe/Busingen [europe] + { "Europe/Kiev", "Europe/Kyiv" }, // Europe/Kiev [backward] { "Europe/Mariehamn", "Europe/Helsinki" }, // Europe/Mariehamn [europe] { "Europe/Podgorica", "Europe/Belgrade" }, // Europe/Podgorica [europe] { "Europe/San_Marino", "Europe/Rome" }, // Europe/San_Marino [europe] diff --git a/js/src/tests/non262/Date/time-zones-imported.js b/js/src/tests/non262/Date/time-zones-imported.js index 98ab7a71f10b1..8a13e34981f3a 100644 --- a/js/src/tests/non262/Date/time-zones-imported.js +++ b/js/src/tests/non262/Date/time-zones-imported.js @@ -564,25 +564,53 @@ inTimeZone("Australia/Lord_Howe", () => {
// File: Date/Europe_Amsterdam.js // Europe/Amsterdam as an example for mean time like timezones after LMT (AMT, NST). +// +// tzdata2022b changed Europe/Amsterdam into a link to Europe/Brussels.
inTimeZone("Europe/Amsterdam", () => { { let local = new DateTime.Local(1935, Month.January, 1, DayOfWeek.Tuesday, 0, 0, 0); - let utc = new DateTime.UTC(1934, Month.December, 31, DayOfWeek.Monday, 23, 40, 28); + let utc = new DateTime.UTC(1935, Month.January, 1, DayOfWeek.Tuesday, 0, 0, 0);
- assertDate(local, utc, TimeZone(+0,19,32), { - String: "Tue Jan 01 1935 00:00:00 GMT+0019 (Central European Standard Time)", - UTCString: "Mon, 31 Dec 1934 23:40:28 GMT", + assertDate(local, utc, TimeZone(+0,0,0), { + String: "Tue Jan 01 1935 00:00:00 GMT+0000 (Central European Standard Time)", + UTCString: "Tue, 01 Jan 1935 00:00:00 GMT", }); }
{ let local = new DateTime.Local(1935, Month.July, 1, DayOfWeek.Monday, 0, 0, 0); - let utc = new DateTime.UTC(1935, Month.June, 30, DayOfWeek.Sunday, 22, 40, 28); + let utc = new DateTime.UTC(1935, Month.June, 30, DayOfWeek.Sunday, 23, 0, 0);
- assertDate(local, utc, TimeZone(+1,19,32), { - String: "Mon Jul 01 1935 00:00:00 GMT+0119 (Central European Summer Time)", - UTCString: "Sun, 30 Jun 1935 22:40:28 GMT", + assertDate(local, utc, TimeZone(+1,0,0), { + String: "Mon Jul 01 1935 00:00:00 GMT+0100 (Central European Summer Time)", + UTCString: "Sun, 30 Jun 1935 23:00:00 GMT", + }); +} +}); + +// Use America/St_Johns as a replacement for the Europe/Amsterdam test case. +// +// Zone America/St_Johns as an example for mean time like timezones after LMT (NST, NDT). + +inTimeZone("America/St_Johns", () => { +{ + let local = new DateTime.Local(1917, Month.January, 1, DayOfWeek.Monday, 0, 0, 0); + let utc = new DateTime.UTC(1917, Month.January, 1, DayOfWeek.Monday, 3, 30, 52); + + assertDate(local, utc, TimeZone(-3,30,52), { + String: "Mon Jan 01 1917 00:00:00 GMT-0330 (Newfoundland Standard Time)", + UTCString: "Mon, 01 Jan 1917 03:30:52 GMT", + }); +} + +{ + let local = new DateTime.Local(1917, Month.July, 1, DayOfWeek.Sunday, 0, 0, 0); + let utc = new DateTime.UTC(1917, Month.July, 1, DayOfWeek.Sunday, 2, 30, 52); + + assertDate(local, utc, TimeZone(-2,30,52), { + String: "Sun Jul 01 1917 00:00:00 GMT-0230 (Newfoundland Daylight Time)", + UTCString: "Sun, 01 Jul 1917 02:30:52 GMT", }); } }); diff --git a/js/src/tests/non262/Intl/DateTimeFormat/timeZone_backward_links.js b/js/src/tests/non262/Intl/DateTimeFormat/timeZone_backward_links.js index 55b242cead9bd..4162b3ef16fb2 100644 --- a/js/src/tests/non262/Intl/DateTimeFormat/timeZone_backward_links.js +++ b/js/src/tests/non262/Intl/DateTimeFormat/timeZone_backward_links.js @@ -1,7 +1,7 @@ // |reftest| skip-if(!this.hasOwnProperty("Intl"))
// Generated by make_intl_data.py. DO NOT EDIT. -// tzdata version = 2022a +// tzdata version = 2022b
const tzMapper = [ x => x, @@ -69,6 +69,7 @@ const links = { "Egypt": "Africa/Cairo", "Eire": "Europe/Dublin", "Etc/UCT": "Etc/UTC", + "Europe/Kiev": "Europe/Kyiv", "GB": "Europe/London", "GB-Eire": "Europe/London", "GMT+0": "Etc/GMT", diff --git a/js/src/tests/non262/Intl/DateTimeFormat/timeZone_backzone.js b/js/src/tests/non262/Intl/DateTimeFormat/timeZone_backzone.js index 7a0a69f079379..1c3acb73941b4 100644 --- a/js/src/tests/non262/Intl/DateTimeFormat/timeZone_backzone.js +++ b/js/src/tests/non262/Intl/DateTimeFormat/timeZone_backzone.js @@ -1,7 +1,7 @@ // |reftest| skip-if(!this.hasOwnProperty("Intl"))
// Generated by make_intl_data.py. DO NOT EDIT. -// tzdata version = 2022a +// tzdata version = 2022b
const tzMapper = [ x => x, @@ -76,36 +76,57 @@ const links = { "Antarctica/DumontDUrville": "Antarctica/DumontDUrville", "Antarctica/McMurdo": "Antarctica/McMurdo", "Antarctica/Syowa": "Antarctica/Syowa", + "Antarctica/Vostok": "Antarctica/Vostok", "Asia/Aden": "Asia/Aden", "Asia/Bahrain": "Asia/Bahrain", + "Asia/Brunei": "Asia/Brunei", "Asia/Chongqing": "Asia/Chongqing", "Asia/Harbin": "Asia/Harbin", "Asia/Kashgar": "Asia/Kashgar", + "Asia/Kuala_Lumpur": "Asia/Kuala_Lumpur", "Asia/Kuwait": "Asia/Kuwait", "Asia/Muscat": "Asia/Muscat", "Asia/Phnom_Penh": "Asia/Phnom_Penh", "Asia/Tel_Aviv": "Asia/Tel_Aviv", "Asia/Vientiane": "Asia/Vientiane", "Atlantic/Jan_Mayen": "Atlantic/Jan_Mayen", + "Atlantic/Reykjavik": "Atlantic/Reykjavik", "Atlantic/St_Helena": "Atlantic/St_Helena", "Australia/Currie": "Australia/Currie", + "Europe/Amsterdam": "Europe/Amsterdam", "Europe/Belfast": "Europe/Belfast", + "Europe/Copenhagen": "Europe/Copenhagen", "Europe/Guernsey": "Europe/Guernsey", "Europe/Isle_of_Man": "Europe/Isle_of_Man", "Europe/Jersey": "Europe/Jersey", "Europe/Ljubljana": "Europe/Ljubljana", + "Europe/Luxembourg": "Europe/Luxembourg", + "Europe/Monaco": "Europe/Monaco", + "Europe/Oslo": "Europe/Oslo", "Europe/Sarajevo": "Europe/Sarajevo", "Europe/Skopje": "Europe/Skopje", + "Europe/Stockholm": "Europe/Stockholm", "Europe/Tiraspol": "Europe/Tiraspol", "Europe/Vaduz": "Europe/Vaduz", "Europe/Zagreb": "Europe/Zagreb", "Indian/Antananarivo": "Indian/Antananarivo", + "Indian/Christmas": "Indian/Christmas", + "Indian/Cocos": "Indian/Cocos", "Indian/Comoro": "Indian/Comoro", + "Indian/Kerguelen": "Indian/Kerguelen", + "Indian/Mahe": "Indian/Mahe", "Indian/Mayotte": "Indian/Mayotte", + "Indian/Reunion": "Indian/Reunion", + "Pacific/Chuuk": "Pacific/Chuuk", "Pacific/Enderbury": "Pacific/Enderbury", + "Pacific/Funafuti": "Pacific/Funafuti", "Pacific/Johnston": "Pacific/Johnston", + "Pacific/Majuro": "Pacific/Majuro", "Pacific/Midway": "Pacific/Midway", + "Pacific/Pohnpei": "Pacific/Pohnpei", "Pacific/Saipan": "Pacific/Saipan", + "Pacific/Wake": "Pacific/Wake", + "Pacific/Wallis": "Pacific/Wallis", };
for (let [linkName, target] of Object.entries(links)) { diff --git a/js/src/tests/non262/Intl/DateTimeFormat/timeZone_backzone_links.js b/js/src/tests/non262/Intl/DateTimeFormat/timeZone_backzone_links.js index cd35913e546d0..048fb63604397 100644 --- a/js/src/tests/non262/Intl/DateTimeFormat/timeZone_backzone_links.js +++ b/js/src/tests/non262/Intl/DateTimeFormat/timeZone_backzone_links.js @@ -1,7 +1,7 @@ // |reftest| skip-if(!this.hasOwnProperty("Intl"))
// Generated by make_intl_data.py. DO NOT EDIT. -// tzdata version = 2022a +// tzdata version = 2022b
const tzMapper = [ x => x, @@ -23,7 +23,12 @@ const links = { "America/St_Barthelemy": "America/Port_of_Spain", "America/Virgin": "America/St_Thomas", "Antarctica/South_Pole": "Antarctica/McMurdo", + "Arctic/Longyearbyen": "Europe/Oslo", "Asia/Chungking": "Asia/Chongqing", + "Iceland": "Atlantic/Reykjavik", + "Pacific/Ponape": "Pacific/Pohnpei", + "Pacific/Truk": "Pacific/Chuuk", + "Pacific/Yap": "Pacific/Chuuk", };
for (let [linkName, target] of Object.entries(links)) { diff --git a/js/src/tests/non262/Intl/DateTimeFormat/timeZone_notbackward_links.js b/js/src/tests/non262/Intl/DateTimeFormat/timeZone_notbackward_links.js index 5a7742e3d7f11..248166abe1670 100644 --- a/js/src/tests/non262/Intl/DateTimeFormat/timeZone_notbackward_links.js +++ b/js/src/tests/non262/Intl/DateTimeFormat/timeZone_notbackward_links.js @@ -1,7 +1,7 @@ // |reftest| skip-if(!this.hasOwnProperty("Intl"))
// Generated by make_intl_data.py. DO NOT EDIT. -// tzdata version = 2022a +// tzdata version = 2022b
const tzMapper = [ x => x, diff --git a/js/src/tests/non262/Intl/DateTimeFormat/timeZone_version.js b/js/src/tests/non262/Intl/DateTimeFormat/timeZone_version.js index 22589361a2443..602cb2fa81dfb 100644 --- a/js/src/tests/non262/Intl/DateTimeFormat/timeZone_version.js +++ b/js/src/tests/non262/Intl/DateTimeFormat/timeZone_version.js @@ -1,8 +1,8 @@ // |reftest| skip-if(!this.hasOwnProperty("Intl"))
// Generated by make_intl_data.py. DO NOT EDIT. -// tzdata version = 2022a -const tzdata = "2022a"; +// tzdata version = 2022b +const tzdata = "2022b";
if (typeof getICUOptions === "undefined") { var getICUOptions = SpecialPowers.Cu.getJSTestingFunctions().getICUOptions; diff --git a/js/src/tests/non262/Intl/supportedValuesOf-timeZones-canonical.js b/js/src/tests/non262/Intl/supportedValuesOf-timeZones-canonical.js index a38aab9364ce4..b82af1ef4fa10 100644 --- a/js/src/tests/non262/Intl/supportedValuesOf-timeZones-canonical.js +++ b/js/src/tests/non262/Intl/supportedValuesOf-timeZones-canonical.js @@ -1,7 +1,7 @@ // |reftest| skip-if(!this.hasOwnProperty("Intl"))
// Generated by make_intl_data.py. DO NOT EDIT. -// tzdata version = 2022a +// tzdata version = 2022b
// This file was generated with historical, pre-1970 backzone information // respected. @@ -380,8 +380,8 @@ const zones = [ "Europe/Istanbul", "Europe/Jersey", "Europe/Kaliningrad", - "Europe/Kiev", "Europe/Kirov", + "Europe/Kyiv", "Europe/Lisbon", "Europe/Ljubljana", "Europe/London",
This is an automated email from the git hooks/post-receive script.
richard pushed a commit to branch geckoview-102.3.0esr-12.0-1 in repository tor-browser.
commit 0a47b4621237d7744319cdb6fb581d2746c12c96 Author: Butkovits Atila abutkovits@mozilla.com AuthorDate: Tue Aug 23 17:45:21 2022 +0300
Backed out changeset e0c24eb1e8d3 (bug 1783784) for causing build bustages. a=backout --- .cargo/config.in | 2 +- Cargo.lock | 5 +- Cargo.toml | 2 +- .../rust/packed_simd_2/.cargo-checksum.json | 2 +- third_party/rust/packed_simd_2/Cargo.toml | 5 +- third_party/rust/packed_simd_2/README.md | 2 +- third_party/rust/packed_simd_2/build.rs | 5 -- third_party/rust/packed_simd_2/src/api.rs | 4 +- third_party/rust/packed_simd_2/src/codegen.rs | 50 +++++------ .../rust/packed_simd_2/src/codegen/bit_manip.rs | 4 +- third_party/rust/packed_simd_2/src/codegen/llvm.rs | 98 +++++++++++----------- third_party/rust/packed_simd_2/src/codegen/math.rs | 2 +- .../rust/packed_simd_2/src/codegen/math/float.rs | 28 +++---- .../packed_simd_2/src/codegen/math/float/abs.rs | 2 +- .../packed_simd_2/src/codegen/math/float/cos.rs | 2 +- .../packed_simd_2/src/codegen/math/float/cos_pi.rs | 2 +- .../packed_simd_2/src/codegen/math/float/exp.rs | 2 +- .../packed_simd_2/src/codegen/math/float/ln.rs | 2 +- .../src/codegen/math/float/mul_add.rs | 2 +- .../src/codegen/math/float/mul_adde.rs | 2 +- .../packed_simd_2/src/codegen/math/float/powf.rs | 2 +- .../packed_simd_2/src/codegen/math/float/sin.rs | 2 +- .../src/codegen/math/float/sin_cos_pi.rs | 2 +- .../packed_simd_2/src/codegen/math/float/sin_pi.rs | 2 +- .../packed_simd_2/src/codegen/math/float/sqrt.rs | 2 +- .../packed_simd_2/src/codegen/math/float/sqrte.rs | 2 +- .../packed_simd_2/src/codegen/pointer_sized_int.rs | 24 +++--- .../rust/packed_simd_2/src/codegen/reductions.rs | 2 +- .../packed_simd_2/src/codegen/reductions/mask.rs | 4 +- .../rust/packed_simd_2/src/codegen/swap_bytes.rs | 4 +- third_party/rust/packed_simd_2/src/codegen/vPtr.rs | 2 +- third_party/rust/packed_simd_2/src/lib.rs | 7 +- third_party/rust/packed_simd_2/src/testing.rs | 2 +- 33 files changed, 136 insertions(+), 144 deletions(-)
diff --git a/.cargo/config.in b/.cargo/config.in index 3a80c8b3c911b..a6e396b29f764 100644 --- a/.cargo/config.in +++ b/.cargo/config.in @@ -70,7 +70,7 @@ rev = "746743227485a83123784df0c53227ab466612ed" [source."https://github.com/hsivonen/packed_simd"] git = "https://github.com/hsivonen/packed_simd" replace-with = "vendored-sources" -rev = "90eebb82a107cbec1c8e406d9223819417e96de1" +rev = "c149d0a519bf878567c7630096737669ec2ff15f"
[source."https://github.com/hsivonen/chardetng_c"] git = "https://github.com/hsivonen/chardetng_c" diff --git a/Cargo.lock b/Cargo.lock index a86abfcb1567f..0560a3c86be85 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3812,11 +3812,10 @@ dependencies = [
[[package]] name = "packed_simd_2" -version = "0.3.8" -source = "git+https://github.com/hsivonen/packed_simd?rev=90eebb82a107cbec1c8e406d92238194..." +version = "0.3.7" +source = "git+https://github.com/hsivonen/packed_simd?rev=c149d0a519bf878567c7630096737669..." dependencies = [ "cfg-if 1.0.0", - "rustc_version", ]
[[package]] diff --git a/Cargo.toml b/Cargo.toml index 2e9e0cba3c4e8..de7ee7ac7cc1f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -113,7 +113,7 @@ chardetng_c = { git = "https://github.com/hsivonen/chardetng_c", rev="ed8a4c6f90 coremidi = { git = "https://github.com/chris-zen/coremidi.git", rev="fc68464b5445caf111e41f643a2e69ccce0b4f83" } fog = { path = "toolkit/components/glean/api" } libudev-sys = { path = "dom/webauthn/libudev-sys" } -packed_simd = { package = "packed_simd_2", git = "https://github.com/hsivonen/packed_simd", rev="90eebb82a107cbec1c8e406d9223819417e96de1" } +packed_simd = { package = "packed_simd_2", git = "https://github.com/hsivonen/packed_simd", rev="c149d0a519bf878567c7630096737669ec2ff15f" } midir = { git = "https://github.com/mozilla/midir.git", rev = "4c11f0ffb5d6a10de4aff40a7b81218b33b94e6f" } minidump_writer_linux = { git = "https://github.com/rust-minidump/minidump-writer.git", rev = "75ada456c92a429704691a85e1cb42fef8cafc0d" }
diff --git a/third_party/rust/packed_simd_2/.cargo-checksum.json b/third_party/rust/packed_simd_2/.cargo-checksum.json index d61a3b677a32d..3090b655a160c 100644 --- a/third_party/rust/packed_simd_2/.cargo-checksum.json +++ b/third_party/rust/packed_simd_2/.cargo-checksum.json @@ -1 +1 @@ -{"files":{".appveyor.yml":"f1ed01850e0d725f9498f52a1a63ddf40702ad6e0bf5b2d7c4c04d76e96794a3",".travis.yml":"30a61a5ec53355fc1f3585e1690280308c2b7961701abc11e8389b235b647178","Cargo.toml":"2cab084b3d55d0b307788b02a6206a3ec39fee027535dc62d6421bce70e2e2c1","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"6485b8ed310d3f0340bf1ad1f47645069ce4069dcc6bb46c7d5c6faf41de1fdb","README.md":"fa4dd64f66972217d35b7653338c9e2011ccd8f3008ae7c0103272d4287f [...] \ No newline at end of file +{"files":{".appveyor.yml":"f1ed01850e0d725f9498f52a1a63ddf40702ad6e0bf5b2d7c4c04d76e96794a3",".travis.yml":"30a61a5ec53355fc1f3585e1690280308c2b7961701abc11e8389b235b647178","Cargo.toml":"f85e54e13a05f6e4f27c230ab81430af27b6ff80a1c036bd70c42ea115f89487","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"6485b8ed310d3f0340bf1ad1f47645069ce4069dcc6bb46c7d5c6faf41de1fdb","README.md":"882f8894b333becf490d23c9024a86fd1327c8edea33aa8dbb98dc2f2ddb [...] \ No newline at end of file diff --git a/third_party/rust/packed_simd_2/Cargo.toml b/third_party/rust/packed_simd_2/Cargo.toml index d3d07ef9ae975..f38706d05002e 100644 --- a/third_party/rust/packed_simd_2/Cargo.toml +++ b/third_party/rust/packed_simd_2/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "packed_simd_2" -version = "0.3.8" +version = "0.3.7" description = "Portable Packed SIMD vectors" documentation = "https://docs.rs/crate/packed_simd/" homepage = "https://github.com/rust-lang/packed_simd" @@ -23,9 +23,6 @@ maintenance = { status = "experimental" } cfg-if = "1.0.0" core_arch = { version = "0.1.5", optional = true }
-[build-dependencies] -rustc_version = "0.4" - [features] default = [] into_bits = [] diff --git a/third_party/rust/packed_simd_2/README.md b/third_party/rust/packed_simd_2/README.md index eb3101c33d159..41a1512d79fbc 100644 --- a/third_party/rust/packed_simd_2/README.md +++ b/third_party/rust/packed_simd_2/README.md @@ -8,7 +8,7 @@ If you need to continue to use the crate, we have published a "next version" und
Adjust your `[dependencies]` section of `Cargo.toml` to be the following: ```toml -packed_simd = { version = "0.3.8", package = "packed_simd_2" } +packed_simd = { version = "0.3.6", package = "packed_simd_2" } ```
# `Simd<[T; N]>` diff --git a/third_party/rust/packed_simd_2/build.rs b/third_party/rust/packed_simd_2/build.rs index afdee9f55b62b..e87298a2de237 100644 --- a/third_party/rust/packed_simd_2/build.rs +++ b/third_party/rust/packed_simd_2/build.rs @@ -1,11 +1,6 @@ -use rustc_version::{version, Version}; - fn main() { let target = std::env::var("TARGET").expect("TARGET environment variable not defined"); if target.contains("neon") { println!("cargo:rustc-cfg=libcore_neon"); } - if version().unwrap() < Version::parse("1.61.0-alpha").unwrap() { - println!("cargo:rustc-cfg=aarch64_target_feature"); - } } diff --git a/third_party/rust/packed_simd_2/src/api.rs b/third_party/rust/packed_simd_2/src/api.rs index aa1403e6e243d..4e9c4292e06ca 100644 --- a/third_party/rust/packed_simd_2/src/api.rs +++ b/third_party/rust/packed_simd_2/src/api.rs @@ -2,7 +2,7 @@
#[macro_use] mod bitmask; -pub(crate) mod cast; +crate mod cast; #[macro_use] mod cmp; #[macro_use] @@ -37,7 +37,7 @@ mod swap_bytes; mod bit_manip;
#[cfg(feature = "into_bits")] -pub(crate) mod into_bits; +crate mod into_bits;
macro_rules! impl_i { ([$elem_ty:ident; $elem_n:expr]: $tuple_id:ident, $mask_ty:ident diff --git a/third_party/rust/packed_simd_2/src/codegen.rs b/third_party/rust/packed_simd_2/src/codegen.rs index 8a9e971486d74..9d1517e203d19 100644 --- a/third_party/rust/packed_simd_2/src/codegen.rs +++ b/third_party/rust/packed_simd_2/src/codegen.rs @@ -1,19 +1,19 @@ //! Code-generation utilities
-pub(crate) mod bit_manip; -pub(crate) mod llvm; -pub(crate) mod math; -pub(crate) mod reductions; -pub(crate) mod shuffle; -pub(crate) mod shuffle1_dyn; -pub(crate) mod swap_bytes; +crate mod bit_manip; +crate mod llvm; +crate mod math; +crate mod reductions; +crate mod shuffle; +crate mod shuffle1_dyn; +crate mod swap_bytes;
macro_rules! impl_simd_array { ([$elem_ty:ident; $elem_count:expr]: $tuple_id:ident | $($elem_tys:ident),*) => { #[derive(Copy, Clone)] #[repr(simd)] - pub struct $tuple_id($(pub(crate) $elem_tys),*); + pub struct $tuple_id($(crate $elem_tys),*); //^^^^^^^ leaked through SimdArray
impl crate::sealed::Seal for [$elem_ty; $elem_count] {} @@ -35,28 +35,28 @@ macro_rules! impl_simd_array { } }
-pub(crate) mod pointer_sized_int; +crate mod pointer_sized_int;
-pub(crate) mod v16; -pub(crate) use self::v16::*; +crate mod v16; +crate use self::v16::*;
-pub(crate) mod v32; -pub(crate) use self::v32::*; +crate mod v32; +crate use self::v32::*;
-pub(crate) mod v64; -pub(crate) use self::v64::*; +crate mod v64; +crate use self::v64::*;
-pub(crate) mod v128; -pub(crate) use self::v128::*; +crate mod v128; +crate use self::v128::*;
-pub(crate) mod v256; -pub(crate) use self::v256::*; +crate mod v256; +crate use self::v256::*;
-pub(crate) mod v512; -pub(crate) use self::v512::*; +crate mod v512; +crate use self::v512::*;
-pub(crate) mod vSize; -pub(crate) use self::vSize::*; +crate mod vSize; +crate use self::vSize::*;
-pub(crate) mod vPtr; -pub(crate) use self::vPtr::*; +crate mod vPtr; +crate use self::vPtr::*; diff --git a/third_party/rust/packed_simd_2/src/codegen/bit_manip.rs b/third_party/rust/packed_simd_2/src/codegen/bit_manip.rs index 32d8d717a0766..5986916da4387 100644 --- a/third_party/rust/packed_simd_2/src/codegen/bit_manip.rs +++ b/third_party/rust/packed_simd_2/src/codegen/bit_manip.rs @@ -1,7 +1,7 @@ //! LLVM bit manipulation intrinsics. #[rustfmt::skip]
-pub(crate) use crate::*; +use crate::*;
#[allow(improper_ctypes, dead_code)] extern "C" { @@ -147,7 +147,7 @@ extern "C" { fn ctpop_u128x4(x: u128x4) -> u128x4; }
-pub(crate) trait BitManip { +crate trait BitManip { fn ctpop(self) -> Self; fn ctlz(self) -> Self; fn cttz(self) -> Self; diff --git a/third_party/rust/packed_simd_2/src/codegen/llvm.rs b/third_party/rust/packed_simd_2/src/codegen/llvm.rs index b4c09849bc4a3..52b11a95b9172 100644 --- a/third_party/rust/packed_simd_2/src/codegen/llvm.rs +++ b/third_party/rust/packed_simd_2/src/codegen/llvm.rs @@ -76,53 +76,53 @@ where }
extern "platform-intrinsic" { - pub(crate) fn simd_eq<T, U>(x: T, y: T) -> U; - pub(crate) fn simd_ne<T, U>(x: T, y: T) -> U; - pub(crate) fn simd_lt<T, U>(x: T, y: T) -> U; - pub(crate) fn simd_le<T, U>(x: T, y: T) -> U; - pub(crate) fn simd_gt<T, U>(x: T, y: T) -> U; - pub(crate) fn simd_ge<T, U>(x: T, y: T) -> U; - - pub(crate) fn simd_insert<T, U>(x: T, idx: u32, val: U) -> T; - pub(crate) fn simd_extract<T, U>(x: T, idx: u32) -> U; - - pub(crate) fn simd_cast<T, U>(x: T) -> U; - - pub(crate) fn simd_add<T>(x: T, y: T) -> T; - pub(crate) fn simd_sub<T>(x: T, y: T) -> T; - pub(crate) fn simd_mul<T>(x: T, y: T) -> T; - pub(crate) fn simd_div<T>(x: T, y: T) -> T; - pub(crate) fn simd_rem<T>(x: T, y: T) -> T; - pub(crate) fn simd_shl<T>(x: T, y: T) -> T; - pub(crate) fn simd_shr<T>(x: T, y: T) -> T; - pub(crate) fn simd_and<T>(x: T, y: T) -> T; - pub(crate) fn simd_or<T>(x: T, y: T) -> T; - pub(crate) fn simd_xor<T>(x: T, y: T) -> T; - - pub(crate) fn simd_reduce_add_unordered<T, U>(x: T) -> U; - pub(crate) fn simd_reduce_mul_unordered<T, U>(x: T) -> U; - pub(crate) fn simd_reduce_add_ordered<T, U>(x: T, acc: U) -> U; - pub(crate) fn simd_reduce_mul_ordered<T, U>(x: T, acc: U) -> U; - pub(crate) fn simd_reduce_min<T, U>(x: T) -> U; - pub(crate) fn simd_reduce_max<T, U>(x: T) -> U; - pub(crate) fn simd_reduce_min_nanless<T, U>(x: T) -> U; - pub(crate) fn simd_reduce_max_nanless<T, U>(x: T) -> U; - pub(crate) fn simd_reduce_and<T, U>(x: T) -> U; - pub(crate) fn simd_reduce_or<T, U>(x: T) -> U; - pub(crate) fn simd_reduce_xor<T, U>(x: T) -> U; - pub(crate) fn simd_reduce_all<T>(x: T) -> bool; - pub(crate) fn simd_reduce_any<T>(x: T) -> bool; - - pub(crate) fn simd_select<M, T>(m: M, a: T, b: T) -> T; - - pub(crate) fn simd_fmin<T>(a: T, b: T) -> T; - pub(crate) fn simd_fmax<T>(a: T, b: T) -> T; - - pub(crate) fn simd_fsqrt<T>(a: T) -> T; - pub(crate) fn simd_fma<T>(a: T, b: T, c: T) -> T; - - pub(crate) fn simd_gather<T, P, M>(value: T, pointers: P, mask: M) -> T; - pub(crate) fn simd_scatter<T, P, M>(value: T, pointers: P, mask: M); - - pub(crate) fn simd_bitmask<T, U>(value: T) -> U; + crate fn simd_eq<T, U>(x: T, y: T) -> U; + crate fn simd_ne<T, U>(x: T, y: T) -> U; + crate fn simd_lt<T, U>(x: T, y: T) -> U; + crate fn simd_le<T, U>(x: T, y: T) -> U; + crate fn simd_gt<T, U>(x: T, y: T) -> U; + crate fn simd_ge<T, U>(x: T, y: T) -> U; + + crate fn simd_insert<T, U>(x: T, idx: u32, val: U) -> T; + crate fn simd_extract<T, U>(x: T, idx: u32) -> U; + + crate fn simd_cast<T, U>(x: T) -> U; + + crate fn simd_add<T>(x: T, y: T) -> T; + crate fn simd_sub<T>(x: T, y: T) -> T; + crate fn simd_mul<T>(x: T, y: T) -> T; + crate fn simd_div<T>(x: T, y: T) -> T; + crate fn simd_rem<T>(x: T, y: T) -> T; + crate fn simd_shl<T>(x: T, y: T) -> T; + crate fn simd_shr<T>(x: T, y: T) -> T; + crate fn simd_and<T>(x: T, y: T) -> T; + crate fn simd_or<T>(x: T, y: T) -> T; + crate fn simd_xor<T>(x: T, y: T) -> T; + + crate fn simd_reduce_add_unordered<T, U>(x: T) -> U; + crate fn simd_reduce_mul_unordered<T, U>(x: T) -> U; + crate fn simd_reduce_add_ordered<T, U>(x: T, acc: U) -> U; + crate fn simd_reduce_mul_ordered<T, U>(x: T, acc: U) -> U; + crate fn simd_reduce_min<T, U>(x: T) -> U; + crate fn simd_reduce_max<T, U>(x: T) -> U; + crate fn simd_reduce_min_nanless<T, U>(x: T) -> U; + crate fn simd_reduce_max_nanless<T, U>(x: T) -> U; + crate fn simd_reduce_and<T, U>(x: T) -> U; + crate fn simd_reduce_or<T, U>(x: T) -> U; + crate fn simd_reduce_xor<T, U>(x: T) -> U; + crate fn simd_reduce_all<T>(x: T) -> bool; + crate fn simd_reduce_any<T>(x: T) -> bool; + + crate fn simd_select<M, T>(m: M, a: T, b: T) -> T; + + crate fn simd_fmin<T>(a: T, b: T) -> T; + crate fn simd_fmax<T>(a: T, b: T) -> T; + + crate fn simd_fsqrt<T>(a: T) -> T; + crate fn simd_fma<T>(a: T, b: T, c: T) -> T; + + crate fn simd_gather<T, P, M>(value: T, pointers: P, mask: M) -> T; + crate fn simd_scatter<T, P, M>(value: T, pointers: P, mask: M); + + crate fn simd_bitmask<T, U>(value: T) -> U; } diff --git a/third_party/rust/packed_simd_2/src/codegen/math.rs b/third_party/rust/packed_simd_2/src/codegen/math.rs index 9a0ea7a4e2d24..f3997c7f11359 100644 --- a/third_party/rust/packed_simd_2/src/codegen/math.rs +++ b/third_party/rust/packed_simd_2/src/codegen/math.rs @@ -1,3 +1,3 @@ //! Vertical math operations
-pub(crate) mod float; +crate mod float; diff --git a/third_party/rust/packed_simd_2/src/codegen/math/float.rs b/third_party/rust/packed_simd_2/src/codegen/math/float.rs index ffbf18bfe989d..5e89bf6ae6b0c 100644 --- a/third_party/rust/packed_simd_2/src/codegen/math/float.rs +++ b/third_party/rust/packed_simd_2/src/codegen/math/float.rs @@ -2,17 +2,17 @@ #![allow(clippy::useless_transmute)]
#[macro_use] -pub(crate) mod macros; -pub(crate) mod abs; -pub(crate) mod cos; -pub(crate) mod cos_pi; -pub(crate) mod exp; -pub(crate) mod ln; -pub(crate) mod mul_add; -pub(crate) mod mul_adde; -pub(crate) mod powf; -pub(crate) mod sin; -pub(crate) mod sin_cos_pi; -pub(crate) mod sin_pi; -pub(crate) mod sqrt; -pub(crate) mod sqrte; +crate mod macros; +crate mod abs; +crate mod cos; +crate mod cos_pi; +crate mod exp; +crate mod ln; +crate mod mul_add; +crate mod mul_adde; +crate mod powf; +crate mod sin; +crate mod sin_cos_pi; +crate mod sin_pi; +crate mod sqrt; +crate mod sqrte; diff --git a/third_party/rust/packed_simd_2/src/codegen/math/float/abs.rs b/third_party/rust/packed_simd_2/src/codegen/math/float/abs.rs index 34aacc25be75a..bc4421f61de2d 100644 --- a/third_party/rust/packed_simd_2/src/codegen/math/float/abs.rs +++ b/third_party/rust/packed_simd_2/src/codegen/math/float/abs.rs @@ -5,7 +5,7 @@
use crate::*;
-pub(crate) trait Abs { +crate trait Abs { fn abs(self) -> Self; }
diff --git a/third_party/rust/packed_simd_2/src/codegen/math/float/cos.rs b/third_party/rust/packed_simd_2/src/codegen/math/float/cos.rs index dec390cb74d46..50f6c16da2555 100644 --- a/third_party/rust/packed_simd_2/src/codegen/math/float/cos.rs +++ b/third_party/rust/packed_simd_2/src/codegen/math/float/cos.rs @@ -5,7 +5,7 @@
use crate::*;
-pub(crate) trait Cos { +crate trait Cos { fn cos(self) -> Self; }
diff --git a/third_party/rust/packed_simd_2/src/codegen/math/float/cos_pi.rs b/third_party/rust/packed_simd_2/src/codegen/math/float/cos_pi.rs index e283280ee44b1..ebff5fd1c7510 100644 --- a/third_party/rust/packed_simd_2/src/codegen/math/float/cos_pi.rs +++ b/third_party/rust/packed_simd_2/src/codegen/math/float/cos_pi.rs @@ -5,7 +5,7 @@
use crate::*;
-pub(crate) trait CosPi { +crate trait CosPi { fn cos_pi(self) -> Self; }
diff --git a/third_party/rust/packed_simd_2/src/codegen/math/float/exp.rs b/third_party/rust/packed_simd_2/src/codegen/math/float/exp.rs index a7b20580e3f1e..00d10e9fa6440 100644 --- a/third_party/rust/packed_simd_2/src/codegen/math/float/exp.rs +++ b/third_party/rust/packed_simd_2/src/codegen/math/float/exp.rs @@ -5,7 +5,7 @@
use crate::*;
-pub(crate) trait Exp { +crate trait Exp { fn exp(self) -> Self; }
diff --git a/third_party/rust/packed_simd_2/src/codegen/math/float/ln.rs b/third_party/rust/packed_simd_2/src/codegen/math/float/ln.rs index a5e38cb40d1ed..88a5a6c6c1589 100644 --- a/third_party/rust/packed_simd_2/src/codegen/math/float/ln.rs +++ b/third_party/rust/packed_simd_2/src/codegen/math/float/ln.rs @@ -5,7 +5,7 @@
use crate::*;
-pub(crate) trait Ln { +crate trait Ln { fn ln(self) -> Self; }
diff --git a/third_party/rust/packed_simd_2/src/codegen/math/float/mul_add.rs b/third_party/rust/packed_simd_2/src/codegen/math/float/mul_add.rs index d37f30fa86140..f48a57dc46c69 100644 --- a/third_party/rust/packed_simd_2/src/codegen/math/float/mul_add.rs +++ b/third_party/rust/packed_simd_2/src/codegen/math/float/mul_add.rs @@ -4,7 +4,7 @@ use crate::*;
// FIXME: 64-bit 1 element mul_add
-pub(crate) trait MulAdd { +crate trait MulAdd { fn mul_add(self, y: Self, z: Self) -> Self; }
diff --git a/third_party/rust/packed_simd_2/src/codegen/math/float/mul_adde.rs b/third_party/rust/packed_simd_2/src/codegen/math/float/mul_adde.rs index c0baeacec20be..b030c26ccf465 100644 --- a/third_party/rust/packed_simd_2/src/codegen/math/float/mul_adde.rs +++ b/third_party/rust/packed_simd_2/src/codegen/math/float/mul_adde.rs @@ -3,7 +3,7 @@ use crate::*;
// FIXME: 64-bit 1 element mul_adde
-pub(crate) trait MulAddE { +crate trait MulAddE { fn mul_adde(self, y: Self, z: Self) -> Self; }
diff --git a/third_party/rust/packed_simd_2/src/codegen/math/float/powf.rs b/third_party/rust/packed_simd_2/src/codegen/math/float/powf.rs index 89ca52e96d818..bc15067d73a30 100644 --- a/third_party/rust/packed_simd_2/src/codegen/math/float/powf.rs +++ b/third_party/rust/packed_simd_2/src/codegen/math/float/powf.rs @@ -5,7 +5,7 @@
use crate::*;
-pub(crate) trait Powf { +crate trait Powf { fn powf(self, x: Self) -> Self; }
diff --git a/third_party/rust/packed_simd_2/src/codegen/math/float/sin.rs b/third_party/rust/packed_simd_2/src/codegen/math/float/sin.rs index d881415909afe..7b014d07da8d9 100644 --- a/third_party/rust/packed_simd_2/src/codegen/math/float/sin.rs +++ b/third_party/rust/packed_simd_2/src/codegen/math/float/sin.rs @@ -5,7 +5,7 @@
use crate::*;
-pub(crate) trait Sin { +crate trait Sin { fn sin(self) -> Self; }
diff --git a/third_party/rust/packed_simd_2/src/codegen/math/float/sin_cos_pi.rs b/third_party/rust/packed_simd_2/src/codegen/math/float/sin_cos_pi.rs index b283d11111fd5..75c2c2c5fbb03 100644 --- a/third_party/rust/packed_simd_2/src/codegen/math/float/sin_cos_pi.rs +++ b/third_party/rust/packed_simd_2/src/codegen/math/float/sin_cos_pi.rs @@ -5,7 +5,7 @@
use crate::*;
-pub(crate) trait SinCosPi: Sized { +crate trait SinCosPi: Sized { type Output; fn sin_cos_pi(self) -> Self::Output; } diff --git a/third_party/rust/packed_simd_2/src/codegen/math/float/sin_pi.rs b/third_party/rust/packed_simd_2/src/codegen/math/float/sin_pi.rs index 0c8f6bb120503..72df98c93c91e 100644 --- a/third_party/rust/packed_simd_2/src/codegen/math/float/sin_pi.rs +++ b/third_party/rust/packed_simd_2/src/codegen/math/float/sin_pi.rs @@ -5,7 +5,7 @@
use crate::*;
-pub(crate) trait SinPi { +crate trait SinPi { fn sin_pi(self) -> Self; }
diff --git a/third_party/rust/packed_simd_2/src/codegen/math/float/sqrt.rs b/third_party/rust/packed_simd_2/src/codegen/math/float/sqrt.rs index 67bb0a2a9c594..7ce31df626621 100644 --- a/third_party/rust/packed_simd_2/src/codegen/math/float/sqrt.rs +++ b/third_party/rust/packed_simd_2/src/codegen/math/float/sqrt.rs @@ -5,7 +5,7 @@
use crate::*;
-pub(crate) trait Sqrt { +crate trait Sqrt { fn sqrt(self) -> Self; }
diff --git a/third_party/rust/packed_simd_2/src/codegen/math/float/sqrte.rs b/third_party/rust/packed_simd_2/src/codegen/math/float/sqrte.rs index 58a1de1f400f9..c1e379c34241f 100644 --- a/third_party/rust/packed_simd_2/src/codegen/math/float/sqrte.rs +++ b/third_party/rust/packed_simd_2/src/codegen/math/float/sqrte.rs @@ -6,7 +6,7 @@ use crate::llvm::simd_fsqrt; use crate::*;
-pub(crate) trait Sqrte { +crate trait Sqrte { fn sqrte(self) -> Self; }
diff --git a/third_party/rust/packed_simd_2/src/codegen/pointer_sized_int.rs b/third_party/rust/packed_simd_2/src/codegen/pointer_sized_int.rs index 55cbc297aaf52..39f493d3b17f0 100644 --- a/third_party/rust/packed_simd_2/src/codegen/pointer_sized_int.rs +++ b/third_party/rust/packed_simd_2/src/codegen/pointer_sized_int.rs @@ -4,24 +4,24 @@ use cfg_if::cfg_if;
cfg_if! { if #[cfg(target_pointer_width = "8")] { - pub(crate) type isize_ = i8; - pub(crate) type usize_ = u8; + crate type isize_ = i8; + crate type usize_ = u8; } else if #[cfg(target_pointer_width = "16")] { - pub(crate) type isize_ = i16; - pub(crate) type usize_ = u16; + crate type isize_ = i16; + crate type usize_ = u16; } else if #[cfg(target_pointer_width = "32")] { - pub(crate) type isize_ = i32; - pub(crate) type usize_ = u32; + crate type isize_ = i32; + crate type usize_ = u32;
} else if #[cfg(target_pointer_width = "64")] { - pub(crate) type isize_ = i64; - pub(crate) type usize_ = u64; + crate type isize_ = i64; + crate type usize_ = u64; } else if #[cfg(target_pointer_width = "64")] { - pub(crate) type isize_ = i64; - pub(crate) type usize_ = u64; + crate type isize_ = i64; + crate type usize_ = u64; } else if #[cfg(target_pointer_width = "128")] { - pub(crate) type isize_ = i128; - pub(crate) type usize_ = u128; + crate type isize_ = i128; + crate type usize_ = u128; } else { compile_error!("unsupported target_pointer_width"); } diff --git a/third_party/rust/packed_simd_2/src/codegen/reductions.rs b/third_party/rust/packed_simd_2/src/codegen/reductions.rs index 302ca6d88f33d..7be4f5fabbea9 100644 --- a/third_party/rust/packed_simd_2/src/codegen/reductions.rs +++ b/third_party/rust/packed_simd_2/src/codegen/reductions.rs @@ -1 +1 @@ -pub(crate) mod mask; +crate mod mask; diff --git a/third_party/rust/packed_simd_2/src/codegen/reductions/mask.rs b/third_party/rust/packed_simd_2/src/codegen/reductions/mask.rs index a78bcc5632672..0aec60969b864 100644 --- a/third_party/rust/packed_simd_2/src/codegen/reductions/mask.rs +++ b/third_party/rust/packed_simd_2/src/codegen/reductions/mask.rs @@ -7,11 +7,11 @@
use crate::*;
-pub(crate) trait All: crate::marker::Sized { +crate trait All: crate::marker::Sized { unsafe fn all(self) -> bool; }
-pub(crate) trait Any: crate::marker::Sized { +crate trait Any: crate::marker::Sized { unsafe fn any(self) -> bool; }
diff --git a/third_party/rust/packed_simd_2/src/codegen/swap_bytes.rs b/third_party/rust/packed_simd_2/src/codegen/swap_bytes.rs index 9cf34a3e0401c..a4435e3c35354 100644 --- a/third_party/rust/packed_simd_2/src/codegen/swap_bytes.rs +++ b/third_party/rust/packed_simd_2/src/codegen/swap_bytes.rs @@ -5,7 +5,7 @@
use crate::*;
-pub(crate) trait SwapBytes { +crate trait SwapBytes { fn swap_bytes(self) -> Self; }
@@ -15,7 +15,7 @@ macro_rules! impl_swap_bytes { impl SwapBytes for $id { #[inline] fn swap_bytes(self) -> Self { - shuffle!(self, [1, 0]) + unsafe { shuffle!(self, [1, 0]) } } } )+ diff --git a/third_party/rust/packed_simd_2/src/codegen/vPtr.rs b/third_party/rust/packed_simd_2/src/codegen/vPtr.rs index abd3aa877920c..cf4765538178d 100644 --- a/third_party/rust/packed_simd_2/src/codegen/vPtr.rs +++ b/third_party/rust/packed_simd_2/src/codegen/vPtr.rs @@ -5,7 +5,7 @@ macro_rules! impl_simd_ptr { | $($tys:ty),*) => { #[derive(Copy, Clone)] #[repr(simd)] - pub struct $tuple_id<$ty>($(pub(crate) $tys),*); + pub struct $tuple_id<$ty>($(crate $tys),*); //^^^^^^^ leaked through SimdArray
impl<$ty> crate::sealed::Seal for [$ptr_ty; $elem_count] {} diff --git a/third_party/rust/packed_simd_2/src/lib.rs b/third_party/rust/packed_simd_2/src/lib.rs index cd8a86805dd59..840bae38d6a30 100644 --- a/third_party/rust/packed_simd_2/src/lib.rs +++ b/third_party/rust/packed_simd_2/src/lib.rs @@ -217,13 +217,14 @@ rustc_attrs, platform_intrinsics, stdsimd, + aarch64_target_feature, arm_target_feature, link_llvm_intrinsics, core_intrinsics, stmt_expr_attributes, + crate_visibility_modifier, custom_inner_attributes, )] -#![cfg_attr(aarch64_target_feature, feature(aarch64_target_feature))] #![allow(non_camel_case_types, non_snake_case, // FIXME: these types are unsound in C FFI already // See https://github.com/rust-lang/rust/issues/53346 @@ -343,6 +344,6 @@ pub use self::codegen::llvm::{ __shuffle_vector8, };
-pub(crate) mod llvm { - pub(crate) use crate::codegen::llvm::*; +crate mod llvm { + crate use crate::codegen::llvm::*; } diff --git a/third_party/rust/packed_simd_2/src/testing.rs b/third_party/rust/packed_simd_2/src/testing.rs index 6320b28055569..fcbcf9e2ac8eb 100644 --- a/third_party/rust/packed_simd_2/src/testing.rs +++ b/third_party/rust/packed_simd_2/src/testing.rs @@ -5,4 +5,4 @@ mod macros;
#[cfg(test)] #[macro_use] -pub(crate) mod utils; +crate mod utils;
This is an automated email from the git hooks/post-receive script.
richard pushed a commit to branch geckoview-102.3.0esr-12.0-1 in repository tor-browser.
commit 05a867c1fc2909386e9afe095060fef62142f0f7 Author: James Teow jteow@mozilla.com AuthorDate: Tue Aug 23 16:17:56 2022 +0000
Bug 1786555 - Add Bing ESR PC to test - r=Standard8 a=test-only
Differential Revision: https://phabricator.services.mozilla.com/D155400 --- .../components/search/test/browser/browser_searchEngine_behaviors.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/browser/components/search/test/browser/browser_searchEngine_behaviors.js b/browser/components/search/test/browser/browser_searchEngine_behaviors.js index 819bf92caf9b5..5ebf0af660e66 100644 --- a/browser/components/search/test/browser/browser_searchEngine_behaviors.js +++ b/browser/components/search/test/browser/browser_searchEngine_behaviors.js @@ -22,7 +22,9 @@ const SEARCH_ENGINE_DETAILS = [ }, { alias: "b", - baseURL: "https://www.bing.com/search?%7Bcode%7Dpc=MOZI&q=foo", + baseURL: `https://www.bing.com/search?%7Bcode%7Dpc=$%7B + AppConstants.IS_ESR ? "MOZR" : "MOZI" + }&q=foo`, codes: { context: "form=MOZCON&", keyword: "form=MOZLBR&",
This is an automated email from the git hooks/post-receive script.
richard pushed a commit to branch geckoview-102.3.0esr-12.0-1 in repository tor-browser.
commit d36b4c404e0e228b7d30fe629deddf757e3ebaf6 Author: Lee Salzman lsalzman@mozilla.com AuthorDate: Thu Aug 4 17:02:57 2022 +0000
Bug 1782795 - Remove shared context from GlyphRasterizer. r=jnicol, a=RyanVM
Differential Revision: https://phabricator.services.mozilla.com/D153503 --- gfx/wr/webrender/src/glyph_rasterizer/mod.rs | 74 +++++++++++++++------------ gfx/wr/webrender/src/platform/macos/font.rs | 4 -- gfx/wr/webrender/src/platform/unix/font.rs | 4 -- gfx/wr/webrender/src/platform/windows/font.rs | 4 -- 4 files changed, 40 insertions(+), 46 deletions(-)
diff --git a/gfx/wr/webrender/src/glyph_rasterizer/mod.rs b/gfx/wr/webrender/src/glyph_rasterizer/mod.rs index a312c63679d9a..43664d611e24b 100644 --- a/gfx/wr/webrender/src/glyph_rasterizer/mod.rs +++ b/gfx/wr/webrender/src/glyph_rasterizer/mod.rs @@ -41,8 +41,10 @@ pub static GLYPH_FLASHING: AtomicBool = AtomicBool::new(false); impl FontContexts { /// Get access to the font context associated to the current thread. pub fn lock_current_context(&self) -> MutexGuard<FontContext> { - let id = self.current_worker_id(); - self.lock_context(id) + match self.current_worker_id() { + Some(id) => self.lock_context(id), + None => self.lock_any_context(), + } }
pub(in super) fn current_worker_id(&self) -> Option<usize> { @@ -1459,9 +1461,6 @@ pub struct FontContexts { // These worker are mostly accessed from their corresponding worker threads. // The goal is that there should be no noticeable contention on the mutexes. worker_contexts: Vec<Mutex<FontContext>>, - // This worker should be accessed by threads that don't belong to the thread pool - // (in theory that's only the render backend thread so no contention expected either). - shared_context: Mutex<FontContext>, // Stored here as a convenience to get the current thread index. #[allow(dead_code)] workers: Arc<ThreadPool>, @@ -1473,19 +1472,21 @@ impl FontContexts {
/// Get access to any particular font context. /// - /// The id is ```Some(i)``` where i is an index between 0 and num_worker_contexts - /// for font contexts associated to the thread pool, and None for the shared - /// global font context for use outside of the thread pool. - pub fn lock_context(&self, id: Option<usize>) -> MutexGuard<FontContext> { - match id { - Some(index) => self.worker_contexts[index].lock().unwrap(), - None => self.shared_context.lock().unwrap(), + /// The id is an index between 0 and num_worker_contexts for font contexts + /// associated to the thread pool. + pub fn lock_context(&self, id: usize) -> MutexGuard<FontContext> { + self.worker_contexts[id].lock().unwrap() + } + + // Find a context that is currently unlocked to use, otherwise defaulting + // to the first context. + pub fn lock_any_context(&self) -> MutexGuard<FontContext> { + for context in &self.worker_contexts { + if let Ok(mutex) = context.try_lock() { + return mutex; + } } - } - - /// Get access to the font context usable outside of the thread pool. - pub fn lock_shared_context(&self) -> MutexGuard<FontContext> { - self.shared_context.lock().unwrap() + self.lock_context(0) }
// number of contexts associated to workers @@ -1509,10 +1510,9 @@ impl AsyncForEach<FontContext> for Arc<FontContexts> { // Spawn a new thread on which to run the for-each off the main thread. self.workers.spawn(move || { // Lock the shared and worker contexts up front. - let mut locks = Vec::with_capacity(font_contexts.num_worker_contexts() + 1); - locks.push(font_contexts.lock_shared_context()); + let mut locks = Vec::with_capacity(font_contexts.num_worker_contexts()); for i in 0 .. font_contexts.num_worker_contexts() { - locks.push(font_contexts.lock_context(Some(i))); + locks.push(font_contexts.lock_context(i)); }
// Signal the locked condition now that all contexts are locked. @@ -1539,6 +1539,9 @@ pub struct GlyphRasterizer { workers: Arc<ThreadPool>, font_contexts: Arc<FontContexts>,
+ /// The current set of loaded fonts. + fonts: FastHashSet<FontKey>, + /// The current number of individual glyphs waiting in pending batches. pending_glyph_count: usize,
@@ -1577,22 +1580,20 @@ impl GlyphRasterizer { let num_workers = workers.current_num_threads(); let mut contexts = Vec::with_capacity(num_workers);
- let shared_context = FontContext::new()?; - for _ in 0 .. num_workers { contexts.push(Mutex::new(FontContext::new()?)); }
let font_context = FontContexts { - worker_contexts: contexts, - shared_context: Mutex::new(shared_context), - workers: Arc::clone(&workers), - locked_mutex: Mutex::new(false), - locked_cond: Condvar::new(), + worker_contexts: contexts, + workers: Arc::clone(&workers), + locked_mutex: Mutex::new(false), + locked_cond: Condvar::new(), };
Ok(GlyphRasterizer { font_contexts: Arc::new(font_context), + fonts: FastHashSet::default(), pending_glyph_jobs: 0, pending_glyph_count: 0, glyph_request_count: 0, @@ -1608,9 +1609,12 @@ impl GlyphRasterizer { }
pub fn add_font(&mut self, font_key: FontKey, template: FontTemplate) { - self.font_contexts.async_for_each(move |mut context| { - context.add_font(&font_key, &template); - }); + if self.fonts.insert(font_key.clone()) { + // Only add font to FontContexts if not previously added. + self.font_contexts.async_for_each(move |mut context| { + context.add_font(&font_key, &template); + }); + } }
pub fn delete_font(&mut self, font_key: FontKey) { @@ -1637,7 +1641,7 @@ impl GlyphRasterizer { }
pub fn has_font(&self, font_key: FontKey) -> bool { - self.font_contexts.lock_shared_context().has_font(&font_key) + self.fonts.contains(&font_key) }
pub fn get_glyph_dimensions( @@ -1652,13 +1656,13 @@ impl GlyphRasterizer { );
self.font_contexts - .lock_shared_context() + .lock_any_context() .get_glyph_dimensions(font, &glyph_key) }
pub fn get_glyph_index(&mut self, font_key: FontKey, ch: char) -> Option<u32> { self.font_contexts - .lock_shared_context() + .lock_any_context() .get_glyph_index(font_key, ch) }
@@ -1668,7 +1672,9 @@ impl GlyphRasterizer { }
profile_scope!("remove_dead_fonts"); - let fonts_to_remove = mem::replace(&mut self.fonts_to_remove, Vec::new()); + let mut fonts_to_remove = mem::replace(& mut self.fonts_to_remove, Vec::new()); + // Only remove font from FontContexts if previously added. + fonts_to_remove.retain(|font| self.fonts.remove(font)); let font_instances_to_remove = mem::replace(& mut self.font_instances_to_remove, Vec::new()); self.font_contexts.async_for_each(move |mut context| { for font_key in &fonts_to_remove { diff --git a/gfx/wr/webrender/src/platform/macos/font.rs b/gfx/wr/webrender/src/platform/macos/font.rs index 88b53b41fd717..fbf69fe438301 100644 --- a/gfx/wr/webrender/src/platform/macos/font.rs +++ b/gfx/wr/webrender/src/platform/macos/font.rs @@ -247,10 +247,6 @@ impl FontContext { }) }
- pub fn has_font(&self, font_key: &FontKey) -> bool { - self.ct_font_descs.contains_key(font_key) - } - pub fn add_raw_font(&mut self, font_key: &FontKey, bytes: Arc<Vec<u8>>, index: u32) { if self.ct_font_descs.contains_key(font_key) { return; diff --git a/gfx/wr/webrender/src/platform/unix/font.rs b/gfx/wr/webrender/src/platform/unix/font.rs index 31ecbfa27f497..0d79415d9dc05 100644 --- a/gfx/wr/webrender/src/platform/unix/font.rs +++ b/gfx/wr/webrender/src/platform/unix/font.rs @@ -343,10 +343,6 @@ impl FontContext { } }
- pub fn has_font(&self, font_key: &FontKey) -> bool { - self.faces.contains_key(font_key) - } - pub fn add_raw_font(&mut self, font_key: &FontKey, bytes: Arc<Vec<u8>>, index: u32) { if !self.faces.contains_key(font_key) { let len = bytes.len(); diff --git a/gfx/wr/webrender/src/platform/windows/font.rs b/gfx/wr/webrender/src/platform/windows/font.rs index a2fea8cbd5263..3f6bd78ab22f3 100644 --- a/gfx/wr/webrender/src/platform/windows/font.rs +++ b/gfx/wr/webrender/src/platform/windows/font.rs @@ -150,10 +150,6 @@ impl FontContext { }) }
- pub fn has_font(&self, font_key: &FontKey) -> bool { - self.fonts.contains_key(font_key) - } - fn add_font_descriptor(&mut self, font_key: &FontKey, desc: &dwrote::FontDescriptor) { let system_fc = dwrote::FontCollection::get_system(false); if let Some(font) = system_fc.get_font_from_descriptor(desc) {
This is an automated email from the git hooks/post-receive script.
richard pushed a commit to branch geckoview-102.3.0esr-12.0-1 in repository tor-browser.
commit f20d23c3e7723beb36939183a85c12c23536a513 Author: Lee Salzman lsalzman@mozilla.com AuthorDate: Thu Aug 4 17:02:57 2022 +0000
Bug 1783115 - Use only a single FT_Face for each font in WebRender. r=jnicol, a=RyanVM
This patch uses a single FT_Library for all font threads (even across separate windows) within WebRender. It maintains a mapping from FontTemplate to a cached FT_Face that will be traded to any font thread that requests it on a first-come-first-serve basis. This FT_Face is guarded by a mutex to ensure that no other worker thread can use it while it is in-use by the first requesting thread.
In general it is safe to use different FT_Faces on different threads so long as they are distinct. However, the snag in this is that FT_LcdFilter state is stored globally in the FT_Library, even while it is supplied per-FontInstance. To workaround this, we need to keep track of how many threads are currently rasterizing glyphs with the FT_LcdFilter state and wait for them to all finish before we can change the FT_LcdFilter to what the next group of incoming jobs expects. FontContext::begin_rasterize/end_rasterize hooks were added to support this. While there seems to be some support in newer FreeType versions for per-FT_Face LcdFilter settings, it doesn't allow disabling the LcdFilter or using legacy settings, so we are still suck using the global setting instead.
To further reduce memory usage, this patch also no longer allocates a separate FT_Face for FontVariations. Instead, since the FT_Face must be locked to a single thread anyway, it now just uses FT_Set_Var_Design_Coordinates on the single FT_Face for the font before loading the batch of glyphs associated with the FontVariations. So regardless of how many different variations are used for a font, it will only allocate a single FT_Face.
Normally, rayon's par_iter is used to scatter glyphs from a single font request onto multiple threads which works against the one-font-per-thread model needed here. This adds a FontContext::distribute_across_threads hook to control whether or not par_iter should be used so that we can disable that behavior for this case, where instead we just want to process each glyph serially within the scope of a single worker for a given font request.
Differential Revision: https://phabricator.services.mozilla.com/D153715 --- gfx/wr/webrender/src/glyph_rasterizer/mod.rs | 52 ++-- gfx/wr/webrender/src/platform/macos/font.rs | 10 + gfx/wr/webrender/src/platform/unix/font.rs | 411 ++++++++++++++------------ gfx/wr/webrender/src/platform/windows/font.rs | 10 + 4 files changed, 279 insertions(+), 204 deletions(-)
diff --git a/gfx/wr/webrender/src/glyph_rasterizer/mod.rs b/gfx/wr/webrender/src/glyph_rasterizer/mod.rs index 43664d611e24b..6fc22b6619ea5 100644 --- a/gfx/wr/webrender/src/glyph_rasterizer/mod.rs +++ b/gfx/wr/webrender/src/glyph_rasterizer/mod.rs @@ -76,6 +76,7 @@ impl GlyphRasterizer { assert!(self.has_font(font.font_key));
let glyph_key_cache = glyph_cache.insert_glyph_key_cache_for_font(&font); + let mut batch_size = 0;
// select glyphs that have not been requested yet. for key in glyph_keys { @@ -105,17 +106,7 @@ impl GlyphRasterizer { match self.pending_glyph_requests.get_mut(&font) { Some(container) => { container.push(*key); - - // If the batch for this font instance is big enough, kick off an async - // job to start rasterizing these glyphs on other threads now. - if container.len() == 8 { - let glyphs = mem::replace(container, SmallVec::new()); - self.flush_glyph_requests( - font.clone(), - glyphs, - true, - ); - } + batch_size = container.len(); } None => { // If no batch exists for this font instance, add the glyph to a new one. @@ -128,6 +119,14 @@ impl GlyphRasterizer {
glyph_key_cache.add_glyph(*key, GlyphCacheEntry::Pending); } + + // If the batch for this font instance is big enough, kick off an async + // job to start rasterizing these glyphs on other threads now. + if batch_size >= 8 { + let container = self.pending_glyph_requests.get_mut(&font).unwrap(); + let glyphs = mem::replace(container, SmallVec::new()); + self.flush_glyph_requests(font, glyphs, true); + } }
pub fn enable_multithreading(&mut self, enable: bool) { @@ -150,13 +149,14 @@ impl GlyphRasterizer {
let can_use_r8_format = self.can_use_r8_format;
+ let job_font = font.clone(); let process_glyph = move |key: &GlyphKey| -> GlyphRasterJob { profile_scope!("glyph-raster"); let mut context = font_contexts.lock_current_context(); let mut job = GlyphRasterJob { - font: Arc::clone(&font), + font: Arc::clone(&job_font), key: key.clone(), - result: context.rasterize_glyph(&font, key), + result: context.rasterize_glyph(&job_font, key), };
if let Ok(ref mut glyph) = job.result { @@ -185,7 +185,7 @@ impl GlyphRasterizer { assert_eq!((glyph.left.fract(), glyph.top.fract()), (0.0, 0.0));
// Check if the glyph has a bitmap that needs to be downscaled. - glyph.downscale_bitmap_if_required(&font); + glyph.downscale_bitmap_if_required(&job_font);
// Convert from BGRA8 to R8 if required. In the future we can make it the // backends' responsibility to output glyphs in the desired format, @@ -209,16 +209,32 @@ impl GlyphRasterizer { // glyphs in the thread pool. profile_scope!("spawning process_glyph jobs"); self.workers.install(|| { - glyphs.par_iter().for_each(|key| { - let job = process_glyph(key); - self.glyph_tx.send(job).unwrap(); - }); + FontContext::begin_rasterize(&font); + // If the FontContext supports distributing a font across multiple threads, + // then use par_iter so different glyphs of the same font are processed on + // multiple threads. + if FontContext::distribute_across_threads() { + glyphs.par_iter().for_each(|key| { + let job = process_glyph(key); + self.glyph_tx.send(job).unwrap(); + }); + } else { + // For FontContexts that prefer to localize a font to a single thread, + // just process all the glyphs on the same worker to avoid contention. + for key in glyphs { + let job = process_glyph(&key); + self.glyph_tx.send(job).unwrap(); + } + } + FontContext::end_rasterize(&font); }); } else { + FontContext::begin_rasterize(&font); for key in glyphs { let job = process_glyph(&key); self.glyph_tx.send(job).unwrap(); } + FontContext::end_rasterize(&font); } }
diff --git a/gfx/wr/webrender/src/platform/macos/font.rs b/gfx/wr/webrender/src/platform/macos/font.rs index fbf69fe438301..325cecebdf419 100644 --- a/gfx/wr/webrender/src/platform/macos/font.rs +++ b/gfx/wr/webrender/src/platform/macos/font.rs @@ -232,6 +232,10 @@ fn is_bitmap_font(font: &FontInstance) -> bool { }
impl FontContext { + pub fn distribute_across_threads() -> bool { + true + } + pub fn new() -> Result<FontContext, ResourceCacheError> { debug!("Test for subpixel AA support: {:?}", *FONT_SMOOTHING_MODE);
@@ -515,6 +519,12 @@ impl FontContext { } }
+ pub fn begin_rasterize(_font: &FontInstance) { + } + + pub fn end_rasterize(_font: &FontInstance) { + } + pub fn rasterize_glyph(&mut self, font: &FontInstance, key: &GlyphKey) -> GlyphRasterResult { objc::rc::autoreleasepool(|| { let (x_scale, y_scale) = font.transform.compute_scale().unwrap_or((1.0, 1.0)); diff --git a/gfx/wr/webrender/src/platform/unix/font.rs b/gfx/wr/webrender/src/platform/unix/font.rs index 0d79415d9dc05..d9faf1f9d612c 100644 --- a/gfx/wr/webrender/src/platform/unix/font.rs +++ b/gfx/wr/webrender/src/platform/unix/font.rs @@ -4,7 +4,7 @@
use api::{ColorU, GlyphDimensions, FontKey, FontRenderMode}; use api::{FontInstancePlatformOptions, FontLCDFilter, FontHinting}; -use api::{FontInstanceFlags, FontVariation, NativeFontHandle}; +use api::{FontInstanceFlags, FontTemplate, FontVariation, NativeFontHandle}; use freetype::freetype::{FT_BBox, FT_Outline_Translate, FT_Pixel_Mode, FT_Render_Mode}; use freetype::freetype::{FT_Done_Face, FT_Error, FT_Get_Char_Index, FT_Int32}; use freetype::freetype::{FT_Done_FreeType, FT_Library_SetLcdFilter, FT_Pos}; @@ -28,9 +28,8 @@ use libc::{dlsym, RTLD_DEFAULT}; use libc::free; use std::{cmp, mem, ptr, slice}; use std::cmp::max; -use std::collections::hash_map::Entry; use std::ffi::CString; -use std::sync::Arc; +use std::sync::{Arc, Condvar, Mutex, MutexGuard};
// These constants are not present in the freetype // bindings due to bindgen not handling the way @@ -150,25 +149,18 @@ pub extern "C" fn mozilla_glyphslot_embolden_less(slot: FT_GlyphSlot) { slot_.metrics.horiBearingY += strength; }
-enum FontFile { - Pathname(CString), - Data(Arc<Vec<u8>>), -} - -struct FontFace { - // Raw byte data has to live until the font is deleted, according to - // https://www.freetype.org/freetype2/docs/reference/ft2-base_interface.html#FT... - file: FontFile, - index: u32, +struct CachedFont { + template: FontTemplate, face: FT_Face, mm_var: *mut FT_MM_Var, + variations: Vec<FontVariation>, }
-impl Drop for FontFace { +impl Drop for CachedFont { fn drop(&mut self) { unsafe { if !self.mm_var.is_null() && - unimplemented(FT_Done_MM_Var((*(*self.face).glyph).library, self.mm_var)) { + unimplemented(FT_Done_MM_Var((*(*self.face).glyph).library, self.mm_var)) { free(self.mm_var as _); }
@@ -177,53 +169,121 @@ impl Drop for FontFace { } }
-struct VariationFace(FT_Face); +struct FontCache { + lib: FT_Library, + // Maps a template to a cached font that may be used across all threads. + fonts: FastHashMap<FontTemplate, Arc<Mutex<CachedFont>>>, + // The current LCD filter installed in the library. + lcd_filter: FontLCDFilter, + // The number of threads currently relying on the LCD filter state. + lcd_filter_uses: usize, +}
-impl Drop for VariationFace { - fn drop(&mut self) { - unsafe { FT_Done_Face(self.0) }; +// FreeType resources are safe to move between threads as long as they +// are not concurrently accessed. In our case, everything is behind a +// Mutex so it is safe to move them between threads. +unsafe impl Send for CachedFont {} +unsafe impl Send for FontCache {} + +impl FontCache { + fn new() -> Self { + let mut lib: FT_Library = ptr::null_mut(); + let result = unsafe { FT_Init_FreeType(&mut lib) }; + if succeeded(result) { + // Ensure the library uses the default LCD filter initially. + unsafe { FT_Library_SetLcdFilter(lib, FT_LcdFilter::FT_LCD_FILTER_DEFAULT) }; + } else { + // TODO(gw): Provide detailed error values. + // Once this panic has been here for a while with no issues we should get rid of + // ResourceCacheError as this was the only place that could fail previously. + panic!("Failed to initialize FreeType - {}", result) + } + + FontCache { + lib, + fonts: FastHashMap::default(), + lcd_filter: FontLCDFilter::Default, + lcd_filter_uses: 0, + } + } + + fn add_font(&mut self, template: FontTemplate) -> Result<Arc<Mutex<CachedFont>>, FT_Error> { + if let Some(cached) = self.fonts.get(&template) { + return Ok(cached.clone()); + } + unsafe { + let mut face: FT_Face = ptr::null_mut(); + let result = match template { + FontTemplate::Raw(ref bytes, index) => { + FT_New_Memory_Face( + self.lib, + bytes.as_ptr(), + bytes.len() as FT_Long, + index as FT_Long, + &mut face, + ) + } + FontTemplate::Native(NativeFontHandle { ref path, index }) => { + let str = path.as_os_str().to_str().unwrap(); + let cstr = CString::new(str).unwrap(); + FT_New_Face( + self.lib, + cstr.as_ptr(), + index as FT_Long, + &mut face, + ) + } + }; + if !succeeded(result) || face.is_null() { + return Err(result); + } + let mut mm_var = ptr::null_mut(); + if ((*face).face_flags & (FT_FACE_FLAG_MULTIPLE_MASTERS as FT_Long)) != 0 && + succeeded(FT_Get_MM_Var(face, &mut mm_var)) { + // Calling this before FT_Set_Var_Design_Coordinates avoids a bug with font variations + // not initialized properly in the font face, even if we ignore the result. + // See bug 1647035. + let mut tmp = [0; 16]; + let res = FT_Get_Var_Design_Coordinates( + face, + (*mm_var).num_axis.min(16), + tmp.as_mut_ptr() + ); + debug_assert!(succeeded(res)); + } + let cached = Arc::new(Mutex::new(CachedFont { + template: template.clone(), + face, + mm_var, + variations: Vec::new(), + })); + self.fonts.insert(template, cached.clone()); + Ok(cached) + } + } + + fn delete_font(&mut self, cached: Arc<Mutex<CachedFont>>) { + self.fonts.remove(&cached.lock().unwrap().template); } }
-fn new_ft_face(font_key: &FontKey, lib: FT_Library, file: &FontFile, index: u32) -> Result<FT_Face, FT_Error> { - unsafe { - let mut face: FT_Face = ptr::null_mut(); - let result = match file { - FontFile::Pathname(ref cstr) => FT_New_Face( - lib, - cstr.as_ptr(), - index as FT_Long, - &mut face, - ), - FontFile::Data(ref bytes) => FT_New_Memory_Face( - lib, - bytes.as_ptr(), - bytes.len() as FT_Long, - index as FT_Long, - &mut face, - ), - }; - if succeeded(result) && !face.is_null() { - Ok(face) - } else { - warn!("WARN: webrender failed to load font"); - debug!("font={:?}, result={:?}", font_key, result); - Err(result) +impl Drop for FontCache { + fn drop(&mut self) { + self.fonts.clear(); + unsafe { + FT_Done_FreeType(self.lib); } } }
-pub struct FontContext { - lib: FT_Library, - faces: FastHashMap<FontKey, FontFace>, - variations: FastHashMap<(FontKey, Vec<FontVariation>), VariationFace>, - lcd_extra_pixels: i64, +lazy_static! { + static ref FONT_CACHE: Mutex<FontCache> = Mutex::new(FontCache::new()); + static ref LCD_FILTER_UNUSED: Condvar = Condvar::new(); }
-// FreeType resources are safe to move between threads as long as they -// are not concurrently accessed. In our case, everything is hidden inside -// a given FontContext so it is safe to move the latter between threads. -unsafe impl Send for FontContext {} +pub struct FontContext { + fonts: FastHashMap<FontKey, Arc<Mutex<CachedFont>>>, +}
fn get_skew_bounds(bottom: i32, top: i32, skew_factor: f32, _vertical: bool) -> (f32, f32) { let skew_min = (bottom as f32 + 0.5) * skew_factor; @@ -314,129 +374,79 @@ fn flip_bitmap_y(bitmap: &mut [u8], width: usize, height: usize) { }
impl FontContext { - pub fn new() -> Result<FontContext, ResourceCacheError> { - let mut lib: FT_Library = ptr::null_mut(); - - // Using an LCD filter may add one full pixel to each side if support is built in. - // As of FreeType 2.8.1, an LCD filter is always used regardless of settings - // if support for the patent-encumbered LCD filter algorithms is not built in. - // Thus, the only reasonable way to guess padding is to unconditonally add it if - // subpixel AA is used. - let lcd_extra_pixels = 1; - - let result = unsafe { - FT_Init_FreeType(&mut lib) - }; + pub fn distribute_across_threads() -> bool { + false + }
- if succeeded(result) { - Ok(FontContext { - lib, - faces: FastHashMap::default(), - variations: FastHashMap::default(), - lcd_extra_pixels, - }) - } else { - // TODO(gw): Provide detailed error values. - // Once this panic has been here for a while with no issues we should get rid of - // ResourceCacheError as this was the only place that could fail previously. - panic!("Failed to initialize FreeType - {}", result) - } + pub fn new() -> Result<FontContext, ResourceCacheError> { + Ok(FontContext { + fonts: FastHashMap::default(), + }) }
pub fn add_raw_font(&mut self, font_key: &FontKey, bytes: Arc<Vec<u8>>, index: u32) { - if !self.faces.contains_key(font_key) { + if !self.fonts.contains_key(font_key) { let len = bytes.len(); - let file = FontFile::Data(bytes); - if let Ok(face) = new_ft_face(font_key, self.lib, &file, index) { - self.faces.insert(*font_key, FontFace { file, index, face, mm_var: ptr::null_mut() }); - } else { - panic!("adding raw font failed: {} bytes", len); - } + match FONT_CACHE.lock().unwrap().add_font(FontTemplate::Raw(bytes, index)) { + Ok(font) => self.fonts.insert(*font_key, font), + Err(result) => panic!("adding raw font failed: {} bytes, err={:?}", len, result), + }; } }
pub fn add_native_font(&mut self, font_key: &FontKey, native_font_handle: NativeFontHandle) { - if !self.faces.contains_key(font_key) { - let str = native_font_handle.path.as_os_str().to_str().unwrap(); - let cstr = CString::new(str).unwrap(); - let file = FontFile::Pathname(cstr); - let index = native_font_handle.index; - match new_ft_face(font_key, self.lib, &file, index) { - Ok(face) => self.faces.insert(*font_key, FontFace { file, index, face, mm_var: ptr::null_mut() }), - Err(result) => panic!("adding native font failed: file={} err={:?}", str, result), + if !self.fonts.contains_key(font_key) { + let path = native_font_handle.path.to_string_lossy().into_owned(); + match FONT_CACHE.lock().unwrap().add_font(FontTemplate::Native(native_font_handle)) { + Ok(font) => self.fonts.insert(*font_key, font), + Err(result) => panic!("adding native font failed: file={} err={:?}", path, result), }; } }
pub fn delete_font(&mut self, font_key: &FontKey) { - if self.faces.remove(font_key).is_some() { - self.variations.retain(|k, _| k.0 != *font_key); + if let Some(cached) = self.fonts.remove(font_key) { + // If the only references to this font are the FontCache and this FontContext, + // then delete the font as there are no other existing users. + if Arc::strong_count(&cached) <= 2 { + FONT_CACHE.lock().unwrap().delete_font(cached); + } } }
- pub fn delete_font_instance(&mut self, instance: &FontInstance) { - // Ensure we don't keep around excessive amounts of stale variations. - if !instance.variations.is_empty() { - self.variations.remove(&(instance.font_key, instance.variations.clone())); - } + pub fn delete_font_instance(&mut self, _instance: &FontInstance) { }
- fn get_ft_face(&mut self, font: &FontInstance) -> Option<FT_Face> { - if font.variations.is_empty() { - return Some(self.faces.get(&font.font_key)?.face); - } - match self.variations.entry((font.font_key, font.variations.clone())) { - Entry::Occupied(entry) => Some(entry.get().0), - Entry::Vacant(entry) => unsafe { - let normal_face = self.faces.get_mut(&font.font_key)?; - if ((*normal_face.face).face_flags & (FT_FACE_FLAG_MULTIPLE_MASTERS as FT_Long)) == 0 { - return Some(normal_face.face); - } - // Clone a new FT face and attempt to set the variation values on it. - // Leave unspecified values at the defaults. - let var_face = new_ft_face(&font.font_key, self.lib, &normal_face.file, normal_face.index).ok()?; - if !normal_face.mm_var.is_null() || - succeeded(FT_Get_MM_Var(normal_face.face, &mut normal_face.mm_var)) { - let mm_var = normal_face.mm_var; - let num_axis = (*mm_var).num_axis; - let mut coords: Vec<FT_Fixed> = Vec::with_capacity(num_axis as usize); - - // Calling this before FT_Set_Var_Design_Coordinates avoids a bug with font variations - // not initialized properly in the font face, even if we ignore the result. - // See bug 1647035. - let mut tmp = [0; 16]; - let res = FT_Get_Var_Design_Coordinates( - normal_face.face, - num_axis.min(16), - tmp.as_mut_ptr() - ); - debug_assert!(succeeded(res)); - - - for i in 0 .. num_axis { - let axis = (*mm_var).axis.offset(i as isize); - let mut value = (*axis).def; - for var in &font.variations { - if var.tag as FT_ULong == (*axis).tag { - value = (var.value * 65536.0 + 0.5) as FT_Fixed; - value = cmp::min(value, (*axis).maximum); - value = cmp::max(value, (*axis).minimum); - break; - } + fn load_glyph(&mut self, font: &FontInstance, glyph: &GlyphKey) + -> Option<(MutexGuard<CachedFont>, FT_GlyphSlot, f32)> { + let mut cached = self.fonts.get(&font.font_key)?.lock().ok()?; + let face = cached.face; + + let mm_var = cached.mm_var; + if !mm_var.is_null() && font.variations != cached.variations { + cached.variations.clear(); + cached.variations.extend_from_slice(&font.variations); + + unsafe { + let num_axis = (*mm_var).num_axis; + let mut coords: Vec<FT_Fixed> = Vec::with_capacity(num_axis as usize); + for i in 0 .. num_axis { + let axis = (*mm_var).axis.offset(i as isize); + let mut value = (*axis).def; + for var in &font.variations { + if var.tag as FT_ULong == (*axis).tag { + value = (var.value * 65536.0 + 0.5) as FT_Fixed; + value = cmp::min(value, (*axis).maximum); + value = cmp::max(value, (*axis).minimum); + break; } - coords.push(value); } - let res = FT_Set_Var_Design_Coordinates(var_face, num_axis, coords.as_mut_ptr()); - debug_assert!(succeeded(res)); + coords.push(value); } - entry.insert(VariationFace(var_face)); - Some(var_face) + let res = FT_Set_Var_Design_Coordinates(face, num_axis, coords.as_mut_ptr()); + debug_assert!(succeeded(res)); } } - } - - fn load_glyph(&mut self, font: &FontInstance, glyph: &GlyphKey) -> Option<(FT_GlyphSlot, f32)> { - let face = self.get_ft_face(font)?;
let mut load_flags = FT_LOAD_DEFAULT; let FontInstancePlatformOptions { mut hinting, .. } = font.platform_options.unwrap_or_default(); @@ -576,9 +586,9 @@ impl FontContext { match format { FT_Glyph_Format::FT_GLYPH_FORMAT_BITMAP => { let bitmap_size = unsafe { (*(*(*slot).face).size).metrics.y_ppem }; - Some((slot, req_size as f32 / bitmap_size as f32)) + Some((cached, slot, req_size as f32 / bitmap_size as f32)) } - FT_Glyph_Format::FT_GLYPH_FORMAT_OUTLINE => Some((slot, 1.0)), + FT_Glyph_Format::FT_GLYPH_FORMAT_OUTLINE => Some((cached, slot, 1.0)), _ => { error!("Unsupported format"); debug!("format={:?}", format); @@ -587,10 +597,16 @@ impl FontContext { } }
- fn pad_bounding_box(&self, font: &FontInstance, cbox: &mut FT_BBox) { + fn pad_bounding_box(font: &FontInstance, cbox: &mut FT_BBox) { // Apply extra pixel of padding for subpixel AA, due to the filter. if font.render_mode == FontRenderMode::Subpixel { - let padding = (self.lcd_extra_pixels * 64) as FT_Pos; + // Using an LCD filter may add one full pixel to each side if support is built in. + // As of FreeType 2.8.1, an LCD filter is always used regardless of settings + // if support for the patent-encumbered LCD filter algorithms is not built in. + // Thus, the only reasonable way to guess padding is to unconditonally add it if + // subpixel AA is used. + let lcd_extra_pixels = 1; + let padding = (lcd_extra_pixels * 64) as FT_Pos; if font.flags.contains(FontInstanceFlags::LCD_VERTICAL) { cbox.yMin -= padding; cbox.yMax += padding; @@ -603,7 +619,6 @@ impl FontContext {
// Get the bounding box for a glyph, accounting for sub-pixel positioning. fn get_bounding_box( - &self, slot: FT_GlyphSlot, font: &FontInstance, glyph: &GlyphKey, @@ -621,7 +636,7 @@ impl FontContext { return cbox; }
- self.pad_bounding_box(font, &mut cbox); + Self::pad_bounding_box(font, &mut cbox);
// Offset the bounding box by subpixel positioning. // Convert to 26.6 fixed point format for FT. @@ -645,7 +660,6 @@ impl FontContext { }
fn get_glyph_dimensions_impl( - &self, slot: FT_GlyphSlot, font: &FontInstance, glyph: &GlyphKey, @@ -663,7 +677,7 @@ impl FontContext { ) } } FT_Glyph_Format::FT_GLYPH_FORMAT_OUTLINE => { - let cbox = self.get_bounding_box(slot, font, glyph, scale); + let cbox = Self::get_bounding_box(slot, font, glyph, scale); ( (cbox.xMin >> 6) as i32, (cbox.yMax >> 6) as i32, @@ -723,7 +737,8 @@ impl FontContext { }
pub fn get_glyph_index(&mut self, font_key: FontKey, ch: char) -> Option<u32> { - let face = self.faces.get(&font_key)?.face; + let cached = self.fonts.get(&font_key)?.lock().ok()?; + let face = cached.face; unsafe { let idx = FT_Get_Char_Index(face, ch as _); if idx != 0 { @@ -739,8 +754,8 @@ impl FontContext { font: &FontInstance, key: &GlyphKey, ) -> Option<GlyphDimensions> { - let slot = self.load_glyph(font, key); - slot.and_then(|(slot, scale)| self.get_glyph_dimensions_impl(slot, &font, key, scale, true)) + let (_cached, slot, scale) = self.load_glyph(font, key)?; + Self::get_glyph_dimensions_impl(slot, &font, key, scale, true) }
fn choose_bitmap_size(&self, face: FT_Face, requested_size: f64) -> FT_Error { @@ -776,7 +791,6 @@ impl FontContext { }
fn rasterize_glyph_outline( - &mut self, slot: FT_GlyphSlot, font: &FontInstance, key: &GlyphKey, @@ -795,7 +809,7 @@ impl FontContext { let outline = &(*slot).outline; let mut cbox = FT_BBox { xMin: 0, yMin: 0, xMax: 0, yMax: 0 }; FT_Outline_Get_CBox(outline, &mut cbox); - self.pad_bounding_box(font, &mut cbox); + Self::pad_bounding_box(font, &mut cbox); FT_Outline_Translate( outline, dx - ((cbox.xMin + dx) & !63), @@ -803,16 +817,6 @@ impl FontContext { ); }
- if font.render_mode == FontRenderMode::Subpixel { - let FontInstancePlatformOptions { lcd_filter, .. } = font.platform_options.unwrap_or_default(); - let filter = match lcd_filter { - FontLCDFilter::None => FT_LcdFilter::FT_LCD_FILTER_NONE, - FontLCDFilter::Default => FT_LcdFilter::FT_LCD_FILTER_DEFAULT, - FontLCDFilter::Light => FT_LcdFilter::FT_LCD_FILTER_LIGHT, - FontLCDFilter::Legacy => FT_LcdFilter::FT_LCD_FILTER_LEGACY, - }; - unsafe { FT_Library_SetLcdFilter(self.lib, filter) }; - } let render_mode = match font.render_mode { FontRenderMode::Mono => FT_Render_Mode::FT_RENDER_MODE_MONO, FontRenderMode::Alpha => FT_Render_Mode::FT_RENDER_MODE_NORMAL, @@ -837,13 +841,57 @@ impl FontContext { } }
+ pub fn begin_rasterize(font: &FontInstance) { + // The global LCD filter state is only used in subpixel rendering modes. + if font.render_mode == FontRenderMode::Subpixel { + let mut cache = FONT_CACHE.lock().unwrap(); + let FontInstancePlatformOptions { lcd_filter, .. } = font.platform_options.unwrap_or_default(); + // Check if the current LCD filter matches the requested one. + if cache.lcd_filter != lcd_filter { + // If the filter doesn't match, we have to wait for all other currently rasterizing threads + // that may use the LCD filter state to finish before we can override it. + while cache.lcd_filter_uses != 0 { + cache = LCD_FILTER_UNUSED.wait(cache).unwrap(); + } + // Finally set the LCD filter to the requested one now that the library is unused. + cache.lcd_filter = lcd_filter; + let filter = match lcd_filter { + FontLCDFilter::None => FT_LcdFilter::FT_LCD_FILTER_NONE, + FontLCDFilter::Default => FT_LcdFilter::FT_LCD_FILTER_DEFAULT, + FontLCDFilter::Light => FT_LcdFilter::FT_LCD_FILTER_LIGHT, + FontLCDFilter::Legacy => FT_LcdFilter::FT_LCD_FILTER_LEGACY, + }; + unsafe { + let result = FT_Library_SetLcdFilter(cache.lib, filter); + // Setting the legacy filter may fail, so just use the default filter instead. + if !succeeded(result) { + FT_Library_SetLcdFilter(cache.lib, FT_LcdFilter::FT_LCD_FILTER_DEFAULT); + } + } + } + cache.lcd_filter_uses += 1; + } + } + + pub fn end_rasterize(font: &FontInstance) { + if font.render_mode == FontRenderMode::Subpixel { + let mut cache = FONT_CACHE.lock().unwrap(); + // If this is the last use of the LCD filter, then signal that the LCD filter isn't used. + cache.lcd_filter_uses -= 1; + if cache.lcd_filter_uses == 0 { + LCD_FILTER_UNUSED.notify_all(); + } + } + } + pub fn rasterize_glyph(&mut self, font: &FontInstance, key: &GlyphKey) -> GlyphRasterResult { - let (slot, scale) = self.load_glyph(font, key).ok_or(GlyphRasterError::LoadFailed)?; + let (_cached, slot, scale) = self.load_glyph(font, key) + .ok_or(GlyphRasterError::LoadFailed)?;
// Get dimensions of the glyph, to see if we need to rasterize it. // Don't apply scaling to the dimensions, as the glyph cache needs to know the actual // footprint of the glyph. - let dimensions = self.get_glyph_dimensions_impl(slot, font, key, scale, false) + let dimensions = Self::get_glyph_dimensions_impl(slot, font, key, scale, false) .ok_or(GlyphRasterError::LoadFailed)?; let GlyphDimensions { mut left, mut top, width, height, .. } = dimensions;
@@ -856,7 +904,7 @@ impl FontContext { match format { FT_Glyph_Format::FT_GLYPH_FORMAT_BITMAP => {} FT_Glyph_Format::FT_GLYPH_FORMAT_OUTLINE => { - if !self.rasterize_glyph_outline(slot, font, key, scale) { + if !Self::rasterize_glyph_outline(slot, font, key, scale) { return Err(GlyphRasterError::LoadFailed); } } @@ -1051,12 +1099,3 @@ impl FontContext { } }
-impl Drop for FontContext { - fn drop(&mut self) { - self.variations.clear(); - self.faces.clear(); - unsafe { - FT_Done_FreeType(self.lib); - } - } -} diff --git a/gfx/wr/webrender/src/platform/windows/font.rs b/gfx/wr/webrender/src/platform/windows/font.rs index 3f6bd78ab22f3..0fa431d7b92ca 100644 --- a/gfx/wr/webrender/src/platform/windows/font.rs +++ b/gfx/wr/webrender/src/platform/windows/font.rs @@ -142,6 +142,10 @@ fn is_bitmap_font(font: &FontInstance) -> bool { }
impl FontContext { + pub fn distribute_across_threads() -> bool { + true + } + pub fn new() -> Result<FontContext, ResourceCacheError> { Ok(FontContext { fonts: FastHashMap::default(), @@ -547,6 +551,12 @@ impl FontContext { (scaled_size as f32, x_scale, y_scale, bitmaps, transform) }
+ pub fn begin_rasterize(_font: &FontInstance) { + } + + pub fn end_rasterize(_font: &FontInstance) { + } + pub fn rasterize_glyph(&mut self, font: &FontInstance, key: &GlyphKey) -> GlyphRasterResult { let (size, x_scale, y_scale, bitmaps, transform) = Self::get_glyph_parameters(font, key); let (analysis, texture_type, bounds) = self.create_glyph_analysis(font, key, size, transform, bitmaps)
This is an automated email from the git hooks/post-receive script.
richard pushed a commit to branch geckoview-102.3.0esr-12.0-1 in repository tor-browser.
commit a8420e6d329c80d03df68edf03fb20947953baad Author: Kershaw Chang kershaw@mozilla.com AuthorDate: Thu Aug 11 13:51:52 2022 +0000
Bug 1779005 - Avoid setting |mLoader| to null if we already start a new PAC load, r=necko-reviewers,valentin a=RyanVM
Differential Revision: https://phabricator.services.mozilla.com/D154368 --- netwerk/base/nsPACMan.cpp | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-)
diff --git a/netwerk/base/nsPACMan.cpp b/netwerk/base/nsPACMan.cpp index f36940eab3f8e..63908e1cf0773 100644 --- a/netwerk/base/nsPACMan.cpp +++ b/netwerk/base/nsPACMan.cpp @@ -712,13 +712,6 @@ void nsPACMan::ContinueLoadingAfterPACUriKnown() { }
void nsPACMan::OnLoadFailure() { - // We have to clear the loader to indicate that we are not loading PAC - // currently. - { - auto loader = mLoader.Lock(); - loader.ref() = nullptr; - } - int32_t minInterval = 5; // 5 seconds int32_t maxInterval = 300; // 5 minutes
@@ -875,6 +868,7 @@ nsPACMan::OnStreamComplete(nsIStreamLoader* loader, nsISupports* context, const uint8_t* data) { MOZ_ASSERT(NS_IsMainThread(), "wrong thread");
+ bool loadSucceeded = NS_SUCCEEDED(status) && HttpRequestSucceeded(loader); { auto locked = mLoader.Lock(); if (locked.ref() != loader) { @@ -883,13 +877,21 @@ nsPACMan::OnStreamComplete(nsIStreamLoader* loader, nsISupports* context, // should be NS_ERROR_ABORT, and if so, then we know that we can and // should delay any processing. LOG(("OnStreamComplete: called more than once\n")); - if (status == NS_ERROR_ABORT) return NS_OK; + if (status == NS_ERROR_ABORT) { + return NS_OK; + } + } else if (!loadSucceeded) { + // We have to clear the loader to indicate that we are not loading PAC + // currently. + // Note that we can only clear the loader when |loader| and |mLoader| are + // the same one. + locked.ref() = nullptr; } }
LOG(("OnStreamComplete: entry\n"));
- if (NS_SUCCEEDED(status) && HttpRequestSucceeded(loader)) { + if (loadSucceeded) { // Get the URI spec used to load this PAC script. nsAutoCString pacURI; {
This is an automated email from the git hooks/post-receive script.
richard pushed a commit to branch geckoview-102.3.0esr-12.0-1 in repository tor-browser.
commit f9216d71e55862903a9854660278dccaf09e6e44 Author: Kershaw Chang kershaw@mozilla.com AuthorDate: Fri Aug 19 13:10:49 2022 +0000
Bug 1779005 - Use mLoadFailureCount as an indicator for PAC laod, r=necko-reviewers,valentin a=RyanVM
Since IsLoading() is false when PAC request fails, we have to use something else to indicate that PAC is not available. mLoadFailureCount can be used in this case. It only reset when PAC request is succeeded and when reloading a PAC.
Differential Revision: https://phabricator.services.mozilla.com/D154907 --- netwerk/base/nsPACMan.cpp | 4 +- .../unit/test_pac_reload_after_network_change.js | 71 ++++++++++++++++++++++ netwerk/test/unit/xpcshell.ini | 1 + 3 files changed, 75 insertions(+), 1 deletion(-)
diff --git a/netwerk/base/nsPACMan.cpp b/netwerk/base/nsPACMan.cpp index 63908e1cf0773..7fe88b4fe097c 100644 --- a/netwerk/base/nsPACMan.cpp +++ b/netwerk/base/nsPACMan.cpp @@ -802,7 +802,9 @@ bool nsPACMan::ProcessPending() {
RefPtr<PendingPACQuery> query(dont_AddRef(mPendingQ.popFirst()));
- if (mShutdown || IsLoading()) { + // Having |mLoadFailureCount > 0| means we haven't had a sucessful PAC load + // yet. We should use DIRECT instead. + if (mShutdown || IsLoading() || mLoadFailureCount > 0) { query->Complete(NS_ERROR_NOT_AVAILABLE, ""_ns); return true; } diff --git a/netwerk/test/unit/test_pac_reload_after_network_change.js b/netwerk/test/unit/test_pac_reload_after_network_change.js new file mode 100644 index 0000000000000..2b6826730ffdd --- /dev/null +++ b/netwerk/test/unit/test_pac_reload_after_network_change.js @@ -0,0 +1,71 @@ +"use strict"; + +const { HttpServer } = ChromeUtils.import("resource://testing-common/httpd.js"); +XPCOMUtils.defineLazyServiceGetter( + this, + "gProxyService", + "@mozilla.org/network/protocol-proxy-service;1", + "nsIProtocolProxyService" +); +var { setTimeout } = ChromeUtils.import("resource://gre/modules/Timer.jsm"); + +let pacServer; +const proxyPort = 4433; + +add_setup(async function() { + pacServer = new HttpServer(); + pacServer.registerPathHandler("/proxy.pac", function handler( + metadata, + response + ) { + let content = `function FindProxyForURL(url, host) { return "HTTPS localhost:${proxyPort}"; }`; + response.setHeader("Content-Length", `${content.length}`); + response.bodyOutputStream.write(content, content.length); + }); + pacServer.start(-1); +}); + +registerCleanupFunction(async () => { + Services.prefs.clearUserPref("network.proxy.type"); + Services.prefs.clearUserPref("network.proxy.autoconfig_url"); + Services.prefs.clearUserPref("network.proxy.reload_pac_delay"); +}); + +async function getProxyInfo() { + return new Promise((resolve, reject) => { + let uri = Services.io.newURI("http://www.mozilla.org/"); + gProxyService.asyncResolve(uri, 0, { + onProxyAvailable(_req, _uri, pi, _status) { + resolve(pi); + }, + }); + }); +} + +// Test if we can successfully get PAC when the PAC server is available. +add_task(async function testPAC() { + // Configure PAC + Services.prefs.setIntPref("network.proxy.type", 2); + Services.prefs.setCharPref( + "network.proxy.autoconfig_url", + `http://localhost:$%7BpacServer.identity.primaryPort%7D/proxy.pac%60 + ); + + let pi = await getProxyInfo(); + Assert.equal(pi.port, proxyPort, "Expected proxy port to be the same"); + Assert.equal(pi.type, "https", "Expected proxy type to be https"); +}); + +// When PAC server is down, we should not use proxy at all. +add_task(async function testWhenPACServerDown() { + Services.prefs.setIntPref("network.proxy.reload_pac_delay", 0); + await new Promise(resolve => pacServer.stop(resolve)); + + Services.obs.notifyObservers(null, "network:link-status-changed", "changed"); + + // eslint-disable-next-line mozilla/no-arbitrary-setTimeout + await new Promise(resolve => setTimeout(resolve, 3000)); + + let pi = await getProxyInfo(); + Assert.equal(pi, null, "should have no proxy"); +}); diff --git a/netwerk/test/unit/xpcshell.ini b/netwerk/test/unit/xpcshell.ini index 69d73597ed0fc..dd233f7c199e9 100644 --- a/netwerk/test/unit/xpcshell.ini +++ b/netwerk/test/unit/xpcshell.ini @@ -611,3 +611,4 @@ skip-if = run-sequentially = node server exceptions dont replay well [test_http_408_retry.js] [test_brotli_decoding.js] +[test_pac_reload_after_network_change.js]
This is an automated email from the git hooks/post-receive script.
richard pushed a commit to branch geckoview-102.3.0esr-12.0-1 in repository tor-browser.
commit 302870fce229a5556c0f8f94b424bd79761233c4 Author: Paul Zuehlcke pbz@mozilla.com AuthorDate: Mon Aug 15 11:45:20 2022 +0000
Bug 1772290 - tests, r=smaug a=test-only
Depends on D146914
Differential Revision: https://phabricator.services.mozilla.com/D146915 --- docshell/test/browser/browser.ini | 4 ++ .../browser_csp_sandbox_no_script_js_uri.js | 55 ++++++++++++++++++++++ .../browser/file_csp_sandbox_no_script_js_uri.html | 11 +++++ ...file_csp_sandbox_no_script_js_uri.html^headers^ | 1 + 4 files changed, 71 insertions(+)
diff --git a/docshell/test/browser/browser.ini b/docshell/test/browser/browser.ini index cbedf66c17f71..6f38846db04fd 100644 --- a/docshell/test/browser/browser.ini +++ b/docshell/test/browser/browser.ini @@ -141,6 +141,10 @@ skip-if = verify [browser_bug852909.js] skip-if = (verify && debug && (os == 'win')) [browser_bug92473.js] +[browser_csp_sandbox_no_script_js_uri.js] +support-files = + file_csp_sandbox_no_script_js_uri.html + file_csp_sandbox_no_script_js_uri.html^headers^ [browser_data_load_inherit_csp.js] [browser_dataURI_unique_opaque_origin.js] [browser_fission_maxOrigins.js] diff --git a/docshell/test/browser/browser_csp_sandbox_no_script_js_uri.js b/docshell/test/browser/browser_csp_sandbox_no_script_js_uri.js new file mode 100644 index 0000000000000..d0b92084ec4c3 --- /dev/null +++ b/docshell/test/browser/browser_csp_sandbox_no_script_js_uri.js @@ -0,0 +1,55 @@ +/* Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +"use strict"; + +const TEST_PATH = getRootDirectory(gTestPath).replace( + "chrome://mochitests/content", + "https://example.com" +); + +/** + * Test that javascript URIs in CSP-sandboxed contexts can't be used to bypass + * script restrictions. + */ +add_task(async function test_csp_sandbox_no_script_js_uri() { + await BrowserTestUtils.withNewTab( + TEST_PATH + "dummy_page.html", + async browser => { + info("Register observer and wait for javascript-uri-blocked message."); + let observerPromise = SpecialPowers.spawn(browser, [], () => { + return new Promise(resolve => { + SpecialPowers.addObserver(function obs(subject) { + ok( + subject == content, + "Should block script spawned via javascript uri" + ); + SpecialPowers.removeObserver( + obs, + "javascript-uri-blocked-by-sandbox" + ); + resolve(); + }, "javascript-uri-blocked-by-sandbox"); + }); + }); + + info("Spawn csp-sandboxed iframe with javascript URI"); + let frameBC = await SpecialPowers.spawn( + browser, + [TEST_PATH + "file_csp_sandbox_no_script_js_uri.html"], + async url => { + let frame = content.document.createElement("iframe"); + let loadPromise = ContentTaskUtils.waitForEvent(frame, "load", true); + frame.src = url; + content.document.body.appendChild(frame); + await loadPromise; + return frame.browsingContext; + } + ); + + info("Click javascript URI link in iframe"); + BrowserTestUtils.synthesizeMouseAtCenter("a", {}, frameBC); + await observerPromise; + } + ); +}); diff --git a/docshell/test/browser/file_csp_sandbox_no_script_js_uri.html b/docshell/test/browser/file_csp_sandbox_no_script_js_uri.html new file mode 100644 index 0000000000000..49341f7481f57 --- /dev/null +++ b/docshell/test/browser/file_csp_sandbox_no_script_js_uri.html @@ -0,0 +1,11 @@ +<!DOCTYPE HTML> +<html> +<head> +<meta charset="utf-8"> +<title>Test Javascript URI with no script</title> +</head> +<body> +<noscript>no scripts allowed here</noscript> +<a href="javascript:alert(`origin=${origin} location=${location}`)" target="_parent">click me</a> +</body> +</html> diff --git a/docshell/test/browser/file_csp_sandbox_no_script_js_uri.html^headers^ b/docshell/test/browser/file_csp_sandbox_no_script_js_uri.html^headers^ new file mode 100644 index 0000000000000..461f7f99ce2c4 --- /dev/null +++ b/docshell/test/browser/file_csp_sandbox_no_script_js_uri.html^headers^ @@ -0,0 +1 @@ +Content-Security-Policy: sandbox allow-same-origin allow-top-navigation;
This is an automated email from the git hooks/post-receive script.
richard pushed a commit to branch geckoview-102.3.0esr-12.0-1 in repository tor-browser.
commit ada04eb9b82531a41553b6ffc2ba3194c70fdc45 Author: Mike Hommey mh+mozilla@glandium.org AuthorDate: Wed Aug 24 06:58:59 2022 +0000
Bug 1783784 - Update packed_simd_2 to 0.3.8.
Differential Revision: https://phabricator.services.mozilla.com/D154063 --- .cargo/config.in | 2 +- Cargo.lock | 5 +- Cargo.toml | 2 +- .../rust/packed_simd_2/.cargo-checksum.json | 2 +- third_party/rust/packed_simd_2/Cargo.toml | 5 +- third_party/rust/packed_simd_2/README.md | 2 +- third_party/rust/packed_simd_2/build.rs | 5 ++ third_party/rust/packed_simd_2/src/api.rs | 4 +- third_party/rust/packed_simd_2/src/codegen.rs | 50 +++++------ .../rust/packed_simd_2/src/codegen/bit_manip.rs | 4 +- third_party/rust/packed_simd_2/src/codegen/llvm.rs | 98 +++++++++++----------- third_party/rust/packed_simd_2/src/codegen/math.rs | 2 +- .../rust/packed_simd_2/src/codegen/math/float.rs | 28 +++---- .../packed_simd_2/src/codegen/math/float/abs.rs | 2 +- .../packed_simd_2/src/codegen/math/float/cos.rs | 2 +- .../packed_simd_2/src/codegen/math/float/cos_pi.rs | 2 +- .../packed_simd_2/src/codegen/math/float/exp.rs | 2 +- .../packed_simd_2/src/codegen/math/float/ln.rs | 2 +- .../src/codegen/math/float/mul_add.rs | 2 +- .../src/codegen/math/float/mul_adde.rs | 2 +- .../packed_simd_2/src/codegen/math/float/powf.rs | 2 +- .../packed_simd_2/src/codegen/math/float/sin.rs | 2 +- .../src/codegen/math/float/sin_cos_pi.rs | 2 +- .../packed_simd_2/src/codegen/math/float/sin_pi.rs | 2 +- .../packed_simd_2/src/codegen/math/float/sqrt.rs | 2 +- .../packed_simd_2/src/codegen/math/float/sqrte.rs | 2 +- .../packed_simd_2/src/codegen/pointer_sized_int.rs | 24 +++--- .../rust/packed_simd_2/src/codegen/reductions.rs | 2 +- .../packed_simd_2/src/codegen/reductions/mask.rs | 4 +- .../rust/packed_simd_2/src/codegen/swap_bytes.rs | 4 +- third_party/rust/packed_simd_2/src/codegen/vPtr.rs | 2 +- third_party/rust/packed_simd_2/src/lib.rs | 7 +- third_party/rust/packed_simd_2/src/testing.rs | 2 +- 33 files changed, 144 insertions(+), 136 deletions(-)
diff --git a/.cargo/config.in b/.cargo/config.in index a6e396b29f764..2e5bad6fed2c6 100644 --- a/.cargo/config.in +++ b/.cargo/config.in @@ -70,7 +70,7 @@ rev = "746743227485a83123784df0c53227ab466612ed" [source."https://github.com/hsivonen/packed_simd"] git = "https://github.com/hsivonen/packed_simd" replace-with = "vendored-sources" -rev = "c149d0a519bf878567c7630096737669ec2ff15f" +rev = "f38664024b29d44c506431eada7c112629bb1aa9"
[source."https://github.com/hsivonen/chardetng_c"] git = "https://github.com/hsivonen/chardetng_c" diff --git a/Cargo.lock b/Cargo.lock index 0560a3c86be85..ebec60085c0c0 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3812,10 +3812,11 @@ dependencies = [
[[package]] name = "packed_simd_2" -version = "0.3.7" -source = "git+https://github.com/hsivonen/packed_simd?rev=c149d0a519bf878567c7630096737669..." +version = "0.3.8" +source = "git+https://github.com/hsivonen/packed_simd?rev=f38664024b29d44c506431eada7c1126..." dependencies = [ "cfg-if 1.0.0", + "rustc_version", ]
[[package]] diff --git a/Cargo.toml b/Cargo.toml index de7ee7ac7cc1f..f576534bf3f8b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -113,7 +113,7 @@ chardetng_c = { git = "https://github.com/hsivonen/chardetng_c", rev="ed8a4c6f90 coremidi = { git = "https://github.com/chris-zen/coremidi.git", rev="fc68464b5445caf111e41f643a2e69ccce0b4f83" } fog = { path = "toolkit/components/glean/api" } libudev-sys = { path = "dom/webauthn/libudev-sys" } -packed_simd = { package = "packed_simd_2", git = "https://github.com/hsivonen/packed_simd", rev="c149d0a519bf878567c7630096737669ec2ff15f" } +packed_simd = { package = "packed_simd_2", git = "https://github.com/hsivonen/packed_simd", rev="f38664024b29d44c506431eada7c112629bb1aa9" } midir = { git = "https://github.com/mozilla/midir.git", rev = "4c11f0ffb5d6a10de4aff40a7b81218b33b94e6f" } minidump_writer_linux = { git = "https://github.com/rust-minidump/minidump-writer.git", rev = "75ada456c92a429704691a85e1cb42fef8cafc0d" }
diff --git a/third_party/rust/packed_simd_2/.cargo-checksum.json b/third_party/rust/packed_simd_2/.cargo-checksum.json index 3090b655a160c..079b4c559f5ee 100644 --- a/third_party/rust/packed_simd_2/.cargo-checksum.json +++ b/third_party/rust/packed_simd_2/.cargo-checksum.json @@ -1 +1 @@ -{"files":{".appveyor.yml":"f1ed01850e0d725f9498f52a1a63ddf40702ad6e0bf5b2d7c4c04d76e96794a3",".travis.yml":"30a61a5ec53355fc1f3585e1690280308c2b7961701abc11e8389b235b647178","Cargo.toml":"f85e54e13a05f6e4f27c230ab81430af27b6ff80a1c036bd70c42ea115f89487","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"6485b8ed310d3f0340bf1ad1f47645069ce4069dcc6bb46c7d5c6faf41de1fdb","README.md":"882f8894b333becf490d23c9024a86fd1327c8edea33aa8dbb98dc2f2ddb [...] \ No newline at end of file +{"files":{".appveyor.yml":"f1ed01850e0d725f9498f52a1a63ddf40702ad6e0bf5b2d7c4c04d76e96794a3",".travis.yml":"30a61a5ec53355fc1f3585e1690280308c2b7961701abc11e8389b235b647178","Cargo.toml":"e76b42f3247fccb7174046c499bfaae5430d83cadeb8140259fcae34613483cf","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"6485b8ed310d3f0340bf1ad1f47645069ce4069dcc6bb46c7d5c6faf41de1fdb","README.md":"fa4dd64f66972217d35b7653338c9e2011ccd8f3008ae7c0103272d4287f [...] \ No newline at end of file diff --git a/third_party/rust/packed_simd_2/Cargo.toml b/third_party/rust/packed_simd_2/Cargo.toml index f38706d05002e..49338742dc1ff 100644 --- a/third_party/rust/packed_simd_2/Cargo.toml +++ b/third_party/rust/packed_simd_2/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "packed_simd_2" -version = "0.3.7" +version = "0.3.8" description = "Portable Packed SIMD vectors" documentation = "https://docs.rs/crate/packed_simd/" homepage = "https://github.com/rust-lang/packed_simd" @@ -23,6 +23,9 @@ maintenance = { status = "experimental" } cfg-if = "1.0.0" core_arch = { version = "0.1.5", optional = true }
+[build-dependencies] +rustc_version = "0.2" + [features] default = [] into_bits = [] diff --git a/third_party/rust/packed_simd_2/README.md b/third_party/rust/packed_simd_2/README.md index 41a1512d79fbc..eb3101c33d159 100644 --- a/third_party/rust/packed_simd_2/README.md +++ b/third_party/rust/packed_simd_2/README.md @@ -8,7 +8,7 @@ If you need to continue to use the crate, we have published a "next version" und
Adjust your `[dependencies]` section of `Cargo.toml` to be the following: ```toml -packed_simd = { version = "0.3.6", package = "packed_simd_2" } +packed_simd = { version = "0.3.8", package = "packed_simd_2" } ```
# `Simd<[T; N]>` diff --git a/third_party/rust/packed_simd_2/build.rs b/third_party/rust/packed_simd_2/build.rs index e87298a2de237..afdee9f55b62b 100644 --- a/third_party/rust/packed_simd_2/build.rs +++ b/third_party/rust/packed_simd_2/build.rs @@ -1,6 +1,11 @@ +use rustc_version::{version, Version}; + fn main() { let target = std::env::var("TARGET").expect("TARGET environment variable not defined"); if target.contains("neon") { println!("cargo:rustc-cfg=libcore_neon"); } + if version().unwrap() < Version::parse("1.61.0-alpha").unwrap() { + println!("cargo:rustc-cfg=aarch64_target_feature"); + } } diff --git a/third_party/rust/packed_simd_2/src/api.rs b/third_party/rust/packed_simd_2/src/api.rs index 4e9c4292e06ca..aa1403e6e243d 100644 --- a/third_party/rust/packed_simd_2/src/api.rs +++ b/third_party/rust/packed_simd_2/src/api.rs @@ -2,7 +2,7 @@
#[macro_use] mod bitmask; -crate mod cast; +pub(crate) mod cast; #[macro_use] mod cmp; #[macro_use] @@ -37,7 +37,7 @@ mod swap_bytes; mod bit_manip;
#[cfg(feature = "into_bits")] -crate mod into_bits; +pub(crate) mod into_bits;
macro_rules! impl_i { ([$elem_ty:ident; $elem_n:expr]: $tuple_id:ident, $mask_ty:ident diff --git a/third_party/rust/packed_simd_2/src/codegen.rs b/third_party/rust/packed_simd_2/src/codegen.rs index 9d1517e203d19..8a9e971486d74 100644 --- a/third_party/rust/packed_simd_2/src/codegen.rs +++ b/third_party/rust/packed_simd_2/src/codegen.rs @@ -1,19 +1,19 @@ //! Code-generation utilities
-crate mod bit_manip; -crate mod llvm; -crate mod math; -crate mod reductions; -crate mod shuffle; -crate mod shuffle1_dyn; -crate mod swap_bytes; +pub(crate) mod bit_manip; +pub(crate) mod llvm; +pub(crate) mod math; +pub(crate) mod reductions; +pub(crate) mod shuffle; +pub(crate) mod shuffle1_dyn; +pub(crate) mod swap_bytes;
macro_rules! impl_simd_array { ([$elem_ty:ident; $elem_count:expr]: $tuple_id:ident | $($elem_tys:ident),*) => { #[derive(Copy, Clone)] #[repr(simd)] - pub struct $tuple_id($(crate $elem_tys),*); + pub struct $tuple_id($(pub(crate) $elem_tys),*); //^^^^^^^ leaked through SimdArray
impl crate::sealed::Seal for [$elem_ty; $elem_count] {} @@ -35,28 +35,28 @@ macro_rules! impl_simd_array { } }
-crate mod pointer_sized_int; +pub(crate) mod pointer_sized_int;
-crate mod v16; -crate use self::v16::*; +pub(crate) mod v16; +pub(crate) use self::v16::*;
-crate mod v32; -crate use self::v32::*; +pub(crate) mod v32; +pub(crate) use self::v32::*;
-crate mod v64; -crate use self::v64::*; +pub(crate) mod v64; +pub(crate) use self::v64::*;
-crate mod v128; -crate use self::v128::*; +pub(crate) mod v128; +pub(crate) use self::v128::*;
-crate mod v256; -crate use self::v256::*; +pub(crate) mod v256; +pub(crate) use self::v256::*;
-crate mod v512; -crate use self::v512::*; +pub(crate) mod v512; +pub(crate) use self::v512::*;
-crate mod vSize; -crate use self::vSize::*; +pub(crate) mod vSize; +pub(crate) use self::vSize::*;
-crate mod vPtr; -crate use self::vPtr::*; +pub(crate) mod vPtr; +pub(crate) use self::vPtr::*; diff --git a/third_party/rust/packed_simd_2/src/codegen/bit_manip.rs b/third_party/rust/packed_simd_2/src/codegen/bit_manip.rs index 5986916da4387..32d8d717a0766 100644 --- a/third_party/rust/packed_simd_2/src/codegen/bit_manip.rs +++ b/third_party/rust/packed_simd_2/src/codegen/bit_manip.rs @@ -1,7 +1,7 @@ //! LLVM bit manipulation intrinsics. #[rustfmt::skip]
-use crate::*; +pub(crate) use crate::*;
#[allow(improper_ctypes, dead_code)] extern "C" { @@ -147,7 +147,7 @@ extern "C" { fn ctpop_u128x4(x: u128x4) -> u128x4; }
-crate trait BitManip { +pub(crate) trait BitManip { fn ctpop(self) -> Self; fn ctlz(self) -> Self; fn cttz(self) -> Self; diff --git a/third_party/rust/packed_simd_2/src/codegen/llvm.rs b/third_party/rust/packed_simd_2/src/codegen/llvm.rs index 52b11a95b9172..b4c09849bc4a3 100644 --- a/third_party/rust/packed_simd_2/src/codegen/llvm.rs +++ b/third_party/rust/packed_simd_2/src/codegen/llvm.rs @@ -76,53 +76,53 @@ where }
extern "platform-intrinsic" { - crate fn simd_eq<T, U>(x: T, y: T) -> U; - crate fn simd_ne<T, U>(x: T, y: T) -> U; - crate fn simd_lt<T, U>(x: T, y: T) -> U; - crate fn simd_le<T, U>(x: T, y: T) -> U; - crate fn simd_gt<T, U>(x: T, y: T) -> U; - crate fn simd_ge<T, U>(x: T, y: T) -> U; - - crate fn simd_insert<T, U>(x: T, idx: u32, val: U) -> T; - crate fn simd_extract<T, U>(x: T, idx: u32) -> U; - - crate fn simd_cast<T, U>(x: T) -> U; - - crate fn simd_add<T>(x: T, y: T) -> T; - crate fn simd_sub<T>(x: T, y: T) -> T; - crate fn simd_mul<T>(x: T, y: T) -> T; - crate fn simd_div<T>(x: T, y: T) -> T; - crate fn simd_rem<T>(x: T, y: T) -> T; - crate fn simd_shl<T>(x: T, y: T) -> T; - crate fn simd_shr<T>(x: T, y: T) -> T; - crate fn simd_and<T>(x: T, y: T) -> T; - crate fn simd_or<T>(x: T, y: T) -> T; - crate fn simd_xor<T>(x: T, y: T) -> T; - - crate fn simd_reduce_add_unordered<T, U>(x: T) -> U; - crate fn simd_reduce_mul_unordered<T, U>(x: T) -> U; - crate fn simd_reduce_add_ordered<T, U>(x: T, acc: U) -> U; - crate fn simd_reduce_mul_ordered<T, U>(x: T, acc: U) -> U; - crate fn simd_reduce_min<T, U>(x: T) -> U; - crate fn simd_reduce_max<T, U>(x: T) -> U; - crate fn simd_reduce_min_nanless<T, U>(x: T) -> U; - crate fn simd_reduce_max_nanless<T, U>(x: T) -> U; - crate fn simd_reduce_and<T, U>(x: T) -> U; - crate fn simd_reduce_or<T, U>(x: T) -> U; - crate fn simd_reduce_xor<T, U>(x: T) -> U; - crate fn simd_reduce_all<T>(x: T) -> bool; - crate fn simd_reduce_any<T>(x: T) -> bool; - - crate fn simd_select<M, T>(m: M, a: T, b: T) -> T; - - crate fn simd_fmin<T>(a: T, b: T) -> T; - crate fn simd_fmax<T>(a: T, b: T) -> T; - - crate fn simd_fsqrt<T>(a: T) -> T; - crate fn simd_fma<T>(a: T, b: T, c: T) -> T; - - crate fn simd_gather<T, P, M>(value: T, pointers: P, mask: M) -> T; - crate fn simd_scatter<T, P, M>(value: T, pointers: P, mask: M); - - crate fn simd_bitmask<T, U>(value: T) -> U; + pub(crate) fn simd_eq<T, U>(x: T, y: T) -> U; + pub(crate) fn simd_ne<T, U>(x: T, y: T) -> U; + pub(crate) fn simd_lt<T, U>(x: T, y: T) -> U; + pub(crate) fn simd_le<T, U>(x: T, y: T) -> U; + pub(crate) fn simd_gt<T, U>(x: T, y: T) -> U; + pub(crate) fn simd_ge<T, U>(x: T, y: T) -> U; + + pub(crate) fn simd_insert<T, U>(x: T, idx: u32, val: U) -> T; + pub(crate) fn simd_extract<T, U>(x: T, idx: u32) -> U; + + pub(crate) fn simd_cast<T, U>(x: T) -> U; + + pub(crate) fn simd_add<T>(x: T, y: T) -> T; + pub(crate) fn simd_sub<T>(x: T, y: T) -> T; + pub(crate) fn simd_mul<T>(x: T, y: T) -> T; + pub(crate) fn simd_div<T>(x: T, y: T) -> T; + pub(crate) fn simd_rem<T>(x: T, y: T) -> T; + pub(crate) fn simd_shl<T>(x: T, y: T) -> T; + pub(crate) fn simd_shr<T>(x: T, y: T) -> T; + pub(crate) fn simd_and<T>(x: T, y: T) -> T; + pub(crate) fn simd_or<T>(x: T, y: T) -> T; + pub(crate) fn simd_xor<T>(x: T, y: T) -> T; + + pub(crate) fn simd_reduce_add_unordered<T, U>(x: T) -> U; + pub(crate) fn simd_reduce_mul_unordered<T, U>(x: T) -> U; + pub(crate) fn simd_reduce_add_ordered<T, U>(x: T, acc: U) -> U; + pub(crate) fn simd_reduce_mul_ordered<T, U>(x: T, acc: U) -> U; + pub(crate) fn simd_reduce_min<T, U>(x: T) -> U; + pub(crate) fn simd_reduce_max<T, U>(x: T) -> U; + pub(crate) fn simd_reduce_min_nanless<T, U>(x: T) -> U; + pub(crate) fn simd_reduce_max_nanless<T, U>(x: T) -> U; + pub(crate) fn simd_reduce_and<T, U>(x: T) -> U; + pub(crate) fn simd_reduce_or<T, U>(x: T) -> U; + pub(crate) fn simd_reduce_xor<T, U>(x: T) -> U; + pub(crate) fn simd_reduce_all<T>(x: T) -> bool; + pub(crate) fn simd_reduce_any<T>(x: T) -> bool; + + pub(crate) fn simd_select<M, T>(m: M, a: T, b: T) -> T; + + pub(crate) fn simd_fmin<T>(a: T, b: T) -> T; + pub(crate) fn simd_fmax<T>(a: T, b: T) -> T; + + pub(crate) fn simd_fsqrt<T>(a: T) -> T; + pub(crate) fn simd_fma<T>(a: T, b: T, c: T) -> T; + + pub(crate) fn simd_gather<T, P, M>(value: T, pointers: P, mask: M) -> T; + pub(crate) fn simd_scatter<T, P, M>(value: T, pointers: P, mask: M); + + pub(crate) fn simd_bitmask<T, U>(value: T) -> U; } diff --git a/third_party/rust/packed_simd_2/src/codegen/math.rs b/third_party/rust/packed_simd_2/src/codegen/math.rs index f3997c7f11359..9a0ea7a4e2d24 100644 --- a/third_party/rust/packed_simd_2/src/codegen/math.rs +++ b/third_party/rust/packed_simd_2/src/codegen/math.rs @@ -1,3 +1,3 @@ //! Vertical math operations
-crate mod float; +pub(crate) mod float; diff --git a/third_party/rust/packed_simd_2/src/codegen/math/float.rs b/third_party/rust/packed_simd_2/src/codegen/math/float.rs index 5e89bf6ae6b0c..ffbf18bfe989d 100644 --- a/third_party/rust/packed_simd_2/src/codegen/math/float.rs +++ b/third_party/rust/packed_simd_2/src/codegen/math/float.rs @@ -2,17 +2,17 @@ #![allow(clippy::useless_transmute)]
#[macro_use] -crate mod macros; -crate mod abs; -crate mod cos; -crate mod cos_pi; -crate mod exp; -crate mod ln; -crate mod mul_add; -crate mod mul_adde; -crate mod powf; -crate mod sin; -crate mod sin_cos_pi; -crate mod sin_pi; -crate mod sqrt; -crate mod sqrte; +pub(crate) mod macros; +pub(crate) mod abs; +pub(crate) mod cos; +pub(crate) mod cos_pi; +pub(crate) mod exp; +pub(crate) mod ln; +pub(crate) mod mul_add; +pub(crate) mod mul_adde; +pub(crate) mod powf; +pub(crate) mod sin; +pub(crate) mod sin_cos_pi; +pub(crate) mod sin_pi; +pub(crate) mod sqrt; +pub(crate) mod sqrte; diff --git a/third_party/rust/packed_simd_2/src/codegen/math/float/abs.rs b/third_party/rust/packed_simd_2/src/codegen/math/float/abs.rs index bc4421f61de2d..34aacc25be75a 100644 --- a/third_party/rust/packed_simd_2/src/codegen/math/float/abs.rs +++ b/third_party/rust/packed_simd_2/src/codegen/math/float/abs.rs @@ -5,7 +5,7 @@
use crate::*;
-crate trait Abs { +pub(crate) trait Abs { fn abs(self) -> Self; }
diff --git a/third_party/rust/packed_simd_2/src/codegen/math/float/cos.rs b/third_party/rust/packed_simd_2/src/codegen/math/float/cos.rs index 50f6c16da2555..dec390cb74d46 100644 --- a/third_party/rust/packed_simd_2/src/codegen/math/float/cos.rs +++ b/third_party/rust/packed_simd_2/src/codegen/math/float/cos.rs @@ -5,7 +5,7 @@
use crate::*;
-crate trait Cos { +pub(crate) trait Cos { fn cos(self) -> Self; }
diff --git a/third_party/rust/packed_simd_2/src/codegen/math/float/cos_pi.rs b/third_party/rust/packed_simd_2/src/codegen/math/float/cos_pi.rs index ebff5fd1c7510..e283280ee44b1 100644 --- a/third_party/rust/packed_simd_2/src/codegen/math/float/cos_pi.rs +++ b/third_party/rust/packed_simd_2/src/codegen/math/float/cos_pi.rs @@ -5,7 +5,7 @@
use crate::*;
-crate trait CosPi { +pub(crate) trait CosPi { fn cos_pi(self) -> Self; }
diff --git a/third_party/rust/packed_simd_2/src/codegen/math/float/exp.rs b/third_party/rust/packed_simd_2/src/codegen/math/float/exp.rs index 00d10e9fa6440..a7b20580e3f1e 100644 --- a/third_party/rust/packed_simd_2/src/codegen/math/float/exp.rs +++ b/third_party/rust/packed_simd_2/src/codegen/math/float/exp.rs @@ -5,7 +5,7 @@
use crate::*;
-crate trait Exp { +pub(crate) trait Exp { fn exp(self) -> Self; }
diff --git a/third_party/rust/packed_simd_2/src/codegen/math/float/ln.rs b/third_party/rust/packed_simd_2/src/codegen/math/float/ln.rs index 88a5a6c6c1589..a5e38cb40d1ed 100644 --- a/third_party/rust/packed_simd_2/src/codegen/math/float/ln.rs +++ b/third_party/rust/packed_simd_2/src/codegen/math/float/ln.rs @@ -5,7 +5,7 @@
use crate::*;
-crate trait Ln { +pub(crate) trait Ln { fn ln(self) -> Self; }
diff --git a/third_party/rust/packed_simd_2/src/codegen/math/float/mul_add.rs b/third_party/rust/packed_simd_2/src/codegen/math/float/mul_add.rs index f48a57dc46c69..d37f30fa86140 100644 --- a/third_party/rust/packed_simd_2/src/codegen/math/float/mul_add.rs +++ b/third_party/rust/packed_simd_2/src/codegen/math/float/mul_add.rs @@ -4,7 +4,7 @@ use crate::*;
// FIXME: 64-bit 1 element mul_add
-crate trait MulAdd { +pub(crate) trait MulAdd { fn mul_add(self, y: Self, z: Self) -> Self; }
diff --git a/third_party/rust/packed_simd_2/src/codegen/math/float/mul_adde.rs b/third_party/rust/packed_simd_2/src/codegen/math/float/mul_adde.rs index b030c26ccf465..c0baeacec20be 100644 --- a/third_party/rust/packed_simd_2/src/codegen/math/float/mul_adde.rs +++ b/third_party/rust/packed_simd_2/src/codegen/math/float/mul_adde.rs @@ -3,7 +3,7 @@ use crate::*;
// FIXME: 64-bit 1 element mul_adde
-crate trait MulAddE { +pub(crate) trait MulAddE { fn mul_adde(self, y: Self, z: Self) -> Self; }
diff --git a/third_party/rust/packed_simd_2/src/codegen/math/float/powf.rs b/third_party/rust/packed_simd_2/src/codegen/math/float/powf.rs index bc15067d73a30..89ca52e96d818 100644 --- a/third_party/rust/packed_simd_2/src/codegen/math/float/powf.rs +++ b/third_party/rust/packed_simd_2/src/codegen/math/float/powf.rs @@ -5,7 +5,7 @@
use crate::*;
-crate trait Powf { +pub(crate) trait Powf { fn powf(self, x: Self) -> Self; }
diff --git a/third_party/rust/packed_simd_2/src/codegen/math/float/sin.rs b/third_party/rust/packed_simd_2/src/codegen/math/float/sin.rs index 7b014d07da8d9..d881415909afe 100644 --- a/third_party/rust/packed_simd_2/src/codegen/math/float/sin.rs +++ b/third_party/rust/packed_simd_2/src/codegen/math/float/sin.rs @@ -5,7 +5,7 @@
use crate::*;
-crate trait Sin { +pub(crate) trait Sin { fn sin(self) -> Self; }
diff --git a/third_party/rust/packed_simd_2/src/codegen/math/float/sin_cos_pi.rs b/third_party/rust/packed_simd_2/src/codegen/math/float/sin_cos_pi.rs index 75c2c2c5fbb03..b283d11111fd5 100644 --- a/third_party/rust/packed_simd_2/src/codegen/math/float/sin_cos_pi.rs +++ b/third_party/rust/packed_simd_2/src/codegen/math/float/sin_cos_pi.rs @@ -5,7 +5,7 @@
use crate::*;
-crate trait SinCosPi: Sized { +pub(crate) trait SinCosPi: Sized { type Output; fn sin_cos_pi(self) -> Self::Output; } diff --git a/third_party/rust/packed_simd_2/src/codegen/math/float/sin_pi.rs b/third_party/rust/packed_simd_2/src/codegen/math/float/sin_pi.rs index 72df98c93c91e..0c8f6bb120503 100644 --- a/third_party/rust/packed_simd_2/src/codegen/math/float/sin_pi.rs +++ b/third_party/rust/packed_simd_2/src/codegen/math/float/sin_pi.rs @@ -5,7 +5,7 @@
use crate::*;
-crate trait SinPi { +pub(crate) trait SinPi { fn sin_pi(self) -> Self; }
diff --git a/third_party/rust/packed_simd_2/src/codegen/math/float/sqrt.rs b/third_party/rust/packed_simd_2/src/codegen/math/float/sqrt.rs index 7ce31df626621..67bb0a2a9c594 100644 --- a/third_party/rust/packed_simd_2/src/codegen/math/float/sqrt.rs +++ b/third_party/rust/packed_simd_2/src/codegen/math/float/sqrt.rs @@ -5,7 +5,7 @@
use crate::*;
-crate trait Sqrt { +pub(crate) trait Sqrt { fn sqrt(self) -> Self; }
diff --git a/third_party/rust/packed_simd_2/src/codegen/math/float/sqrte.rs b/third_party/rust/packed_simd_2/src/codegen/math/float/sqrte.rs index c1e379c34241f..58a1de1f400f9 100644 --- a/third_party/rust/packed_simd_2/src/codegen/math/float/sqrte.rs +++ b/third_party/rust/packed_simd_2/src/codegen/math/float/sqrte.rs @@ -6,7 +6,7 @@ use crate::llvm::simd_fsqrt; use crate::*;
-crate trait Sqrte { +pub(crate) trait Sqrte { fn sqrte(self) -> Self; }
diff --git a/third_party/rust/packed_simd_2/src/codegen/pointer_sized_int.rs b/third_party/rust/packed_simd_2/src/codegen/pointer_sized_int.rs index 39f493d3b17f0..55cbc297aaf52 100644 --- a/third_party/rust/packed_simd_2/src/codegen/pointer_sized_int.rs +++ b/third_party/rust/packed_simd_2/src/codegen/pointer_sized_int.rs @@ -4,24 +4,24 @@ use cfg_if::cfg_if;
cfg_if! { if #[cfg(target_pointer_width = "8")] { - crate type isize_ = i8; - crate type usize_ = u8; + pub(crate) type isize_ = i8; + pub(crate) type usize_ = u8; } else if #[cfg(target_pointer_width = "16")] { - crate type isize_ = i16; - crate type usize_ = u16; + pub(crate) type isize_ = i16; + pub(crate) type usize_ = u16; } else if #[cfg(target_pointer_width = "32")] { - crate type isize_ = i32; - crate type usize_ = u32; + pub(crate) type isize_ = i32; + pub(crate) type usize_ = u32;
} else if #[cfg(target_pointer_width = "64")] { - crate type isize_ = i64; - crate type usize_ = u64; + pub(crate) type isize_ = i64; + pub(crate) type usize_ = u64; } else if #[cfg(target_pointer_width = "64")] { - crate type isize_ = i64; - crate type usize_ = u64; + pub(crate) type isize_ = i64; + pub(crate) type usize_ = u64; } else if #[cfg(target_pointer_width = "128")] { - crate type isize_ = i128; - crate type usize_ = u128; + pub(crate) type isize_ = i128; + pub(crate) type usize_ = u128; } else { compile_error!("unsupported target_pointer_width"); } diff --git a/third_party/rust/packed_simd_2/src/codegen/reductions.rs b/third_party/rust/packed_simd_2/src/codegen/reductions.rs index 7be4f5fabbea9..302ca6d88f33d 100644 --- a/third_party/rust/packed_simd_2/src/codegen/reductions.rs +++ b/third_party/rust/packed_simd_2/src/codegen/reductions.rs @@ -1 +1 @@ -crate mod mask; +pub(crate) mod mask; diff --git a/third_party/rust/packed_simd_2/src/codegen/reductions/mask.rs b/third_party/rust/packed_simd_2/src/codegen/reductions/mask.rs index 0aec60969b864..a78bcc5632672 100644 --- a/third_party/rust/packed_simd_2/src/codegen/reductions/mask.rs +++ b/third_party/rust/packed_simd_2/src/codegen/reductions/mask.rs @@ -7,11 +7,11 @@
use crate::*;
-crate trait All: crate::marker::Sized { +pub(crate) trait All: crate::marker::Sized { unsafe fn all(self) -> bool; }
-crate trait Any: crate::marker::Sized { +pub(crate) trait Any: crate::marker::Sized { unsafe fn any(self) -> bool; }
diff --git a/third_party/rust/packed_simd_2/src/codegen/swap_bytes.rs b/third_party/rust/packed_simd_2/src/codegen/swap_bytes.rs index a4435e3c35354..9cf34a3e0401c 100644 --- a/third_party/rust/packed_simd_2/src/codegen/swap_bytes.rs +++ b/third_party/rust/packed_simd_2/src/codegen/swap_bytes.rs @@ -5,7 +5,7 @@
use crate::*;
-crate trait SwapBytes { +pub(crate) trait SwapBytes { fn swap_bytes(self) -> Self; }
@@ -15,7 +15,7 @@ macro_rules! impl_swap_bytes { impl SwapBytes for $id { #[inline] fn swap_bytes(self) -> Self { - unsafe { shuffle!(self, [1, 0]) } + shuffle!(self, [1, 0]) } } )+ diff --git a/third_party/rust/packed_simd_2/src/codegen/vPtr.rs b/third_party/rust/packed_simd_2/src/codegen/vPtr.rs index cf4765538178d..abd3aa877920c 100644 --- a/third_party/rust/packed_simd_2/src/codegen/vPtr.rs +++ b/third_party/rust/packed_simd_2/src/codegen/vPtr.rs @@ -5,7 +5,7 @@ macro_rules! impl_simd_ptr { | $($tys:ty),*) => { #[derive(Copy, Clone)] #[repr(simd)] - pub struct $tuple_id<$ty>($(crate $tys),*); + pub struct $tuple_id<$ty>($(pub(crate) $tys),*); //^^^^^^^ leaked through SimdArray
impl<$ty> crate::sealed::Seal for [$ptr_ty; $elem_count] {} diff --git a/third_party/rust/packed_simd_2/src/lib.rs b/third_party/rust/packed_simd_2/src/lib.rs index 840bae38d6a30..cd8a86805dd59 100644 --- a/third_party/rust/packed_simd_2/src/lib.rs +++ b/third_party/rust/packed_simd_2/src/lib.rs @@ -217,14 +217,13 @@ rustc_attrs, platform_intrinsics, stdsimd, - aarch64_target_feature, arm_target_feature, link_llvm_intrinsics, core_intrinsics, stmt_expr_attributes, - crate_visibility_modifier, custom_inner_attributes, )] +#![cfg_attr(aarch64_target_feature, feature(aarch64_target_feature))] #![allow(non_camel_case_types, non_snake_case, // FIXME: these types are unsound in C FFI already // See https://github.com/rust-lang/rust/issues/53346 @@ -344,6 +343,6 @@ pub use self::codegen::llvm::{ __shuffle_vector8, };
-crate mod llvm { - crate use crate::codegen::llvm::*; +pub(crate) mod llvm { + pub(crate) use crate::codegen::llvm::*; } diff --git a/third_party/rust/packed_simd_2/src/testing.rs b/third_party/rust/packed_simd_2/src/testing.rs index fcbcf9e2ac8eb..6320b28055569 100644 --- a/third_party/rust/packed_simd_2/src/testing.rs +++ b/third_party/rust/packed_simd_2/src/testing.rs @@ -5,4 +5,4 @@ mod macros;
#[cfg(test)] #[macro_use] -crate mod utils; +pub(crate) mod utils;
This is an automated email from the git hooks/post-receive script.
richard pushed a commit to branch geckoview-102.3.0esr-12.0-1 in repository tor-browser.
commit 4805e26a3fa23020dc437a3c12ac34356dbf6027 Author: Timothy Nikkel tnikkel@gmail.com AuthorDate: Tue Aug 23 08:42:49 2022 +0000
Bug 1784835. Use checkedint in webp encoder to avoid overflow. r=aosmond, a=RyanVM --- image/encoders/webp/nsWebPEncoder.cpp | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-)
diff --git a/image/encoders/webp/nsWebPEncoder.cpp b/image/encoders/webp/nsWebPEncoder.cpp index 38c4f2ce4c288..c7ae125aae40f 100644 --- a/image/encoders/webp/nsWebPEncoder.cpp +++ b/image/encoders/webp/nsWebPEncoder.cpp @@ -103,12 +103,20 @@ nsWebPEncoder::InitFromData(const uint8_t* aData,
size_t size = 0;
+ CheckedInt32 width = CheckedInt32(aWidth); + CheckedInt32 height = CheckedInt32(aHeight); + CheckedInt32 stride = CheckedInt32(aStride); + if (!width.isValid() || !height.isValid() || !stride.isValid() || + !(CheckedUint32(aStride) * CheckedUint32(aHeight)).isValid()) { + return NS_ERROR_INVALID_ARG; + } + if (aInputFormat == INPUT_FORMAT_RGB) { - size = - WebPEncodeRGB(aData, aWidth, aHeight, aStride, quality, &mImageBuffer); + size = WebPEncodeRGB(aData, width.value(), height.value(), stride.value(), + quality, &mImageBuffer); } else if (aInputFormat == INPUT_FORMAT_RGBA) { - size = - WebPEncodeRGBA(aData, aWidth, aHeight, aStride, quality, &mImageBuffer); + size = WebPEncodeRGBA(aData, width.value(), height.value(), stride.value(), + quality, &mImageBuffer); } else if (aInputFormat == INPUT_FORMAT_HOSTARGB) { UniquePtr<uint8_t[]> aDest = MakeUnique<uint8_t[]>(aStride * aHeight);
@@ -135,8 +143,8 @@ nsWebPEncoder::InitFromData(const uint8_t* aData, } }
- size = WebPEncodeRGBA(aDest.get(), aWidth, aHeight, aStride, quality, - &mImageBuffer); + size = WebPEncodeRGBA(aDest.get(), width.value(), height.value(), + stride.value(), quality, &mImageBuffer); }
mFinished = true;
This is an automated email from the git hooks/post-receive script.
richard pushed a commit to branch geckoview-102.3.0esr-12.0-1 in repository tor-browser.
commit 10c583e16d60c187b4788e8a2d3be31208e9633a Author: ffxbld ffxbld@mozilla.com AuthorDate: Thu Aug 25 11:15:02 2022 +0000
No Bug, mozilla-esr102 repo-update HSTS HPKP remote-settings tld-suffixes - a=repo-update r=RyanVM
Differential Revision: https://phabricator.services.mozilla.com/D155574 --- netwerk/dns/effective_tld_names.dat | 4 + security/manager/ssl/StaticHPKPins.h | 2 +- security/manager/ssl/nsSTSPreloadList.inc | 1560 +++++++++++++++++--- .../dumps/security-state/intermediates.json | 278 ++-- 4 files changed, 1495 insertions(+), 349 deletions(-)
diff --git a/netwerk/dns/effective_tld_names.dat b/netwerk/dns/effective_tld_names.dat index 950568c38f83d..10beba6658bc4 100644 --- a/netwerk/dns/effective_tld_names.dat +++ b/netwerk/dns/effective_tld_names.dat @@ -11984,6 +11984,10 @@ id.forgerock.io // Submitted by Koen Rouwhorst koenrh@framer.com framer.app framercanvas.com +framer.media +framer.photos +framer.website +framer.wiki
// Frusky MEDIA&PR : https://www.frusky.de // Submitted by Victor Pupynin hallo@frusky.de diff --git a/security/manager/ssl/StaticHPKPins.h b/security/manager/ssl/StaticHPKPins.h index 438d5eb8ace30..3066430bb0b61 100644 --- a/security/manager/ssl/StaticHPKPins.h +++ b/security/manager/ssl/StaticHPKPins.h @@ -1125,4 +1125,4 @@ static const TransportSecurityPreload kPublicKeyPinningPreloadList[] = {
static const int32_t kUnknownId = -1;
-static const PRTime kPreloadPKPinsExpirationTime = INT64_C(1669682734367000); +static const PRTime kPreloadPKPinsExpirationTime = INT64_C(1669892929282000); diff --git a/security/manager/ssl/nsSTSPreloadList.inc b/security/manager/ssl/nsSTSPreloadList.inc index b31c7771bf6fe..db6d0f8bd519f 100644 --- a/security/manager/ssl/nsSTSPreloadList.inc +++ b/security/manager/ssl/nsSTSPreloadList.inc @@ -8,7 +8,7 @@ /*****************************************************************************/
#include <stdint.h> -const PRTime gPreloadListExpirationTime = INT64_C(1672101930001000); +const PRTime gPreloadListExpirationTime = INT64_C(1672312124982000); %% 0--1.de, 1 0-0.io, 1 @@ -2088,7 +2088,7 @@ const PRTime gPreloadListExpirationTime = INT64_C(1672101930001000); 333321365.com, 0 3333365t.com, 1 333365t.com, 1 -3333k8.net, 0 +3333k8.net, 1 3333ylc.cc, 1 3336321.com, 1 33365t.com, 1 @@ -2534,7 +2534,7 @@ const PRTime gPreloadListExpirationTime = INT64_C(1672101930001000); 3cbalance.pl, 1 3cc365.com, 1 3changtrai.com, 1 -3commas.io, 0 +3commas.io, 1 3countiescastlehire.co.uk, 1 3creation.com, 1 3cs.ch, 0 @@ -2906,6 +2906,7 @@ const PRTime gPreloadListExpirationTime = INT64_C(1672101930001000); 4dclub.com, 1 4digitiq.nl, 1 4dillusion.tk, 1 +4dimension.net, 1 4dlatest.com, 1 4dplay.com, 1 4dsoft.com, 1 @@ -3282,7 +3283,6 @@ const PRTime gPreloadListExpirationTime = INT64_C(1672101930001000); 572kb.com, 1 573sss.com, 1 575380.com, 1 -575kb.com, 1 5763.org, 1 576422.com, 1 5765.io, 1 @@ -5452,7 +5452,6 @@ aalstmotors-usedcars.be, 1 aaltocapital.com, 1 aaltocapital.de, 1 aaltocapital.fi, 1 -aalvarezs.cl, 1 aalvarezs.com, 0 aama.tk, 1 aamt.es, 1 @@ -5942,7 +5941,6 @@ academy-awards.ml, 1 academyof.com, 1 academyonlinetoyou.tk, 1 academytv.com.au, 1 -acadianapatios.com, 1 acadiate.com, 1 acaeum.com, 0 acalcio.ga, 1 @@ -6917,7 +6915,6 @@ advokat-dtp.gq, 1 advokat-dtp.ml, 1 advokat-dtp.tk, 1 advokat-malinovskii.ml, 1 -advokat-romanov.com, 1 advokat-teigstad.no, 1 advokat-vvp.com.ua, 1 advokat73.gq, 1 @@ -7009,7 +7006,6 @@ aegee-academy.eu, 1 aegee-academy.org, 1 aegee-utrecht.nl, 1 aegee.eu, 1 -aegee.org, 1 aegis.moe, 1 aegisaccounting.co.uk, 1 aegisalarm.co.uk, 1 @@ -7727,7 +7723,6 @@ agworkers.com, 1 agzlapp.com, 1 ahanet.tk, 1 ahansen.is, 0 -ahbap.org, 1 ahc.fyi, 1 ahccorleone.tk, 1 ahcpb.com, 1 @@ -7737,7 +7732,6 @@ ahealthyjourney.ca, 1 ahegaoroulette.com, 1 ahelos.tk, 1 ahenkerp.com, 1 -ahero4all.org, 1 ahg-offices.fr, 1 ahhcomfortshoes.com, 1 ahidta.gov, 1 @@ -7787,7 +7781,6 @@ ahstrem.com, 1 ahsyg.com, 1 ahtuxpk.ru, 1 ahughes03.com, 1 -ahusturf.se, 0 ahwah.net, 1 ai-english.jp, 1 ai-genit.com, 1 @@ -9477,7 +9470,6 @@ almost.cf, 1 almost.fit, 1 almost.gq, 1 almostobjective.com, 1 -almountakhab.com, 1 almukhtar.se, 0 almusbahperfume.com, 1 almut-zielonka.de, 1 @@ -9612,7 +9604,6 @@ alpinedentalhealth.com, 1 alpinehighlandrealty.com, 1 alpineitltd.co.uk, 0 alpineplanet.com, 1 -alpinepubliclibrary.org, 1 alpinestarmassage.com, 1 alpinisci.pro, 1 alplogopedia.it, 1 @@ -10836,6 +10827,7 @@ angristan.fr, 1 angristan.xyz, 1 angry-monk.com, 1 angry.im, 1 +angryaf.com, 1 angrybear.tk, 1 angrybug.com, 1 angrydragonproductions.com, 1 @@ -11599,6 +11591,7 @@ apercloud.es, 1 aperioadvice.ga, 1 aperiomoney.ga, 1 aperiotaxation.ga, 1 +apert.be, 1 aperta.ro, 1 aperta.shop, 1 apertis.org, 0 @@ -11681,6 +11674,7 @@ apklatte.com, 1 apkmaze.com, 1 apkmint.co, 1 apkmody.io, 1 +apkmody.ir, 0 apknut.com, 1 apkoc.com, 1 apkpokemongo.ga, 1 @@ -12393,6 +12387,7 @@ ariacreations.net, 1 ariadermspa.com, 1 ariag.tk, 1 ariajourney.com, 0 +ariamag.com, 1 ariaman.tk, 1 arian.io, 1 ariana.wtf, 1 @@ -12597,7 +12592,7 @@ arnoldkontz-occasions.lu, 0 arnonerba.com, 1 arnor.org, 1 arnottindustries.ga, 1 -arnoudraeven.nl, 1 +arnoudraeven.nl, 0 arnoudvandalen.nl, 1 arnove.fr, 1 arnove.net, 1 @@ -12724,6 +12719,7 @@ art-voronov.tk, 1 art21tv-armenian.tk, 1 art30.ro, 1 artacadia.org, 1 +artadagroup.com, 1 artakids.tk, 1 artane.gq, 1 artbalsam.com, 1 @@ -12874,7 +12870,7 @@ artmarketingnews.com, 1 artmaterials.com.ua, 1 artmaxi.eu, 1 arto.bg, 1 -artofclouds.ru, 0 +artofclouds.ru, 1 artofcode.co.uk, 1 artofeyes.nl, 1 artofhappyliving.com, 1 @@ -13116,6 +13112,7 @@ ashlocklawgroup.com, 1 ashmportfolio.com, 1 ashotofadrenaline.net, 1 ashraful-islam.ml, 1 +ashridgetrees.co.uk, 1 ashtar.tk, 1 ashtech.tk, 1 ashtonbromleyceramics.co.uk, 1 @@ -13224,7 +13221,7 @@ asmbsurvey.com, 1 asmdz.com, 1 asmeets.nl, 1 asmess.com, 1 -asmm.cc, 1 +asmm.cc, 0 asmobox.ga, 1 asmood.net, 1 asmrbuluo.com, 0 @@ -15151,6 +15148,7 @@ azquality.com, 1 azrangers.gov, 1 azrazalea.net, 1 azredistricting.gov, 1 +azrhymes.com, 1 azs-nw.ru, 1 azsalud.gov, 1 azsec.biz, 1 @@ -15414,7 +15412,6 @@ b9999yy.com, 1 b9999zz.com, 0 b99iosapp.com, 0 b9winner.com, 1 -ba47.net, 1 ba7rain.tk, 1 baaam.se, 1 baac-dewellmed.com, 1 @@ -16203,7 +16200,6 @@ barbarasymmons.com, 1 barbarians.com, 0 barbaros.info, 1 barbate.fr, 1 -barbe-n-blues.fr, 1 barberheatingandair.com, 1 barberscorner.tk, 1 barbershop-harmony.org, 0 @@ -16782,7 +16778,6 @@ bdbxml.net, 1 bdd.fi, 1 bddam.fr, 1 bddam.one, 1 -bdepolytechgrenoble.fr, 1 bdew.net, 1 bdfriends.tk, 1 bdgroup-lab.com, 1 @@ -17209,8 +17204,10 @@ bejo.nl, 0 bejo.pl, 0 bejo.pt, 0 bejo.ro, 0 +bejo.ru, 0 bejo.sk, 0 bejo.vn, 0 +bejoandes.cl, 0 bejogt.com, 0 bejoindia.in, 0 bejoindonesia.com, 0 @@ -18291,7 +18288,6 @@ bethpage.net, 1 bethulietourism.co.za, 1 bethzone.tk, 1 betish.tk, 1 -betlancer.com, 1 betleakbot.com, 1 betmobilenigeria.com, 1 betobaccofree.gov, 1 @@ -19617,7 +19613,6 @@ bkentertainments.co.uk, 1 bkgatl.com, 1 bkhonnun.is, 1 bkhpilates.co.uk, 1 -bkkf.at, 1 bkkposn.com, 1 bkl-ca-qa-employeeapp.azurewebsites.net, 1 bklaindia.com, 1 @@ -19677,7 +19672,6 @@ black-mail.nl, 1 black-market.ga, 1 black-pool.net, 1 black-raven.fr, 1 -black-rider-studio.eu, 1 black-rosella.tk, 1 black-side.tk, 1 black.dating, 1 @@ -20010,6 +20004,7 @@ block-this.com, 1 block65.com, 1 blockchain.com, 1 blockchain.info, 1 +blockchain.poker, 1 blockchainaiintegra.com, 1 blockchainbulteni.com.tr, 1 blockchaindaigakko.jp, 1 @@ -20232,6 +20227,7 @@ blueparrotpainting.com, 1 bluepearl.tk, 1 blueperil.de, 1 bluepostbox.de, 1 +blueprintma.com, 1 blueprintrealtytn.com, 1 bluepromocode.com, 1 bluerange.io, 1 @@ -21330,6 +21326,7 @@ brainsoftict.nl, 0 brainspawn.tk, 1 brainstew.tk, 1 brainstorm.social, 1 +brainstormproductions.tk, 1 braintensive.com, 1 braintonus.tk, 1 braintreevt.gov, 1 @@ -21417,6 +21414,7 @@ brandt.tech, 1 brandtechdesign.co.uk, 1 brandtrapselfie.nl, 1 brandweer-almelo.tk, 1 +brandweer-sgravendeel.tk, 1 brandweerbarboek.nl, 1 brandweercapcodes.tk, 1 brandweeredam.tk, 1 @@ -21429,6 +21427,7 @@ brandweerpuch.tk, 1 brandweerrooster.nl, 1 brandweertrainingen.nl, 1 brandweeruitgeest.nl, 1 +brandweerweb.tk, 1 brandweerzonecentrum.be, 1 brandwizo.com, 1 branefive.com, 1 @@ -21442,10 +21441,14 @@ brantleycounty-ga.gov, 1 branw.xyz, 0 brard.it, 1 brasas.ec, 1 +brasco.tk, 1 brasdir.com, 1 brashear.me, 1 +brasil66.tk, 1 brasilandia.tk, 1 brasilcheats.tk, 1 +brasilduino.tk, 1 +brasiliademinasnet.tk, 1 brasilianskbikini.se, 1 brasillifeoficial.tk, 1 brasilmatamata.ml, 1 @@ -21460,6 +21463,7 @@ brass.host, 1 brassbandwarmond.tk, 1 brasseursdubois.com, 1 brasspipedreams.org, 1 +bratan.ga, 1 bratstvo.tk, 1 bratt.tk, 1 bratteng.me, 1 @@ -21495,7 +21499,6 @@ bravodeal.com, 1 bravodescuento.es, 1 bravogutschein.at, 1 bravogutschein.de, 1 -bravokorting.nl, 1 bravokupony.pl, 1 bravopromo.be, 1 bravopromo.fr, 1 @@ -21555,8 +21558,10 @@ breard.tf, 1 breastaugmentationky.com, 1 breastbuysers.ga, 1 breastbuysest.ga, 1 +breastenlargement.gq, 1 breathe-easy.tk, 1 breathedreamgo.com, 0 +breathfinder.io, 1 breathingblanket.com, 1 breathingsound.ml, 1 breathlesssheranda.tk, 1 @@ -21588,6 +21593,7 @@ breinify.ai, 1 breinify.com, 1 breitband.bz.it, 1 breizh.pm, 1 +breket.ml, 1 brelahotelberulia.com, 1 brelin.tk, 1 brellich.eu, 1 @@ -21610,11 +21616,13 @@ breshka.be, 1 brest-bel.tk, 1 brest-biz-belarus.tk, 1 brest-brest.tk, 1 +brest-master.tk, 1 brest-news.tk, 1 brest-region.tk, 1 brest24.tk, 1 brestnews.tk, 1 brestradio.tk, 1 +brestshop.tk, 1 bret-mcgee.me.uk, 0 bretcarmichael.com, 1 breteuilcommerceartisanat.com, 1 @@ -21656,6 +21664,7 @@ bri.fyi, 1 bri.net.br, 1 brian-ormond.tk, 1 brian.gq, 0 +brianalaway.com, 1 brianalawayconsulting.com, 1 briandorey.com, 0 briandwells.com, 0 @@ -21727,6 +21736,7 @@ bridgemanualest.ga, 1 bridgement.com, 1 bridgeout.com, 1 bridgepayday.ph, 1 +bridgeportlaboratory.tk, 1 bridgercanyonfiremt.gov, 1 bridges.ml, 1 bridges2understanding.com, 1 @@ -21775,6 +21785,7 @@ brightonvt.org, 1 brightpool-markets.com, 1 brightside.com, 1 brightsparks.com.sg, 1 +brightsport-news.tk, 1 brightview.net.cn, 1 brightwakeintranet.co.uk, 1 brightzonecleaning.com.au, 1 @@ -21785,6 +21796,7 @@ brigittaspromise.org, 1 brigittebutt.tk, 1 brigittefontaine.tk, 1 brilalux.pe, 1 +briliant.tk, 1 brilliant-minds.tk, 1 brilliantbouncyfun.co.uk, 1 brilliantproductions.co.nz, 1 @@ -21840,6 +21852,7 @@ britishbullshitfoundation.cf, 1 britishbullshitfoundation.ga, 1 britishbullshitfoundation.ml, 1 britishchronicles.com, 1 +britishgeneralelection.cf, 1 britishgeneralelection.ga, 1 britishgeneralelection.ml, 1 britishgroupsg.com, 1 @@ -21882,6 +21895,7 @@ brnohra.online, 1 brnojebozi.cz, 1 brnr.link, 1 brnrx.com, 1 +broadax.ml, 1 broadbandchoices.co.uk, 1 broadbandexposed.co.uk, 1 broadbiz-news.tk, 1 @@ -21922,6 +21936,7 @@ brokeinkorea.tk, 1 brokenbiz-news.tk, 1 brokencityllc.ga, 1 brokenhands.io, 1 +brokenminds.tk, 1 brokenneckgang.com, 1 brokensword.tk, 1 brokentoaster.tk, 1 @@ -21952,6 +21967,7 @@ brookeblogt.be, 1 brookes.xyz, 1 brookframework.org, 1 brooklynabortionclinic.nyc, 1 +brooklynboyblues.cf, 1 brooklynboyblues.ga, 1 brooklynboyblues.ml, 1 brooklyncentermn.gov, 1 @@ -22068,6 +22084,7 @@ brusselsexpostudio.ga, 1 brusselslouisepenthouse.ga, 1 brusselslouisestudio.ga, 1 brusselsmidiapartment.ga, 1 +brusselsmidistudio.ga, 1 brusselspackagesers.ga, 1 brusselspackagesest.ga, 1 brusselswestapartment.ga, 1 @@ -22209,7 +22226,6 @@ btraviswrightmps.com, 1 btraviswrightmps.org, 1 btrb.ml, 1 btrfs.no, 1 -btsapem.com, 1 btsline.co.id, 1 btslr.co, 1 btsoft.eu, 1 @@ -22231,7 +22247,6 @@ bttorj45.com, 1 bturboo.com, 1 btvw.de, 1 btwsa.tk, 1 -buatcv.online, 1 buayacorp.com, 1 bub.cat, 1 bubba.cc, 1 @@ -22659,6 +22674,7 @@ burz.eu.com, 1 burz.net, 1 burz.one, 1 burzcast.com, 1 +burzcast.media, 1 burzgroup.com, 1 burzmali.com, 1 burzmedia.com, 1 @@ -23878,7 +23894,6 @@ camarilla.tk, 1 camarilloelectric.com, 1 camarilloelectrical.com, 1 camarilloexteriorlighting.com, 1 -camarilloflightinstruction.com, 1 camarillolandscapelighting.com, 1 camarillolighting.com, 1 camarillooutdoorlighting.com, 1 @@ -24069,7 +24084,6 @@ camsupplierers.ga, 1 camtor.ml, 1 camzroofing.ca, 0 can-amchains.com, 1 -can.biz.tr, 1 can7.fr, 1 canada-tourisme.ch, 0 canadaabroad.com, 0 @@ -25855,7 +25869,7 @@ centurylink.cf, 1 centurymedicaldental.com, 1 ceomonthlyest.ga, 1 ceopedia.org, 1 -cepapk.com, 1 +cepapk.com, 0 cepek4d.com, 1 cephalexin.ga, 1 cephalexincapsules.ml, 1 @@ -25986,7 +26000,6 @@ cevo.com.hr, 1 cevt.ar, 1 cewek.ml, 1 cewood.xyz, 1 -ceyhanmolla.com, 1 ceyizlikelisleri.com, 1 cezdent.com, 1 cf-connect.nl, 1 @@ -27554,7 +27567,7 @@ cisa.gov, 1 cisamexico.com, 1 ciscoasanetflow.com, 1 ciscocyberthreatdefense.com, 1 -ciscodude.net, 1 +ciscodude.net, 0 ciscom.tk, 1 cisconetflowleader.com, 1 cisconetflowpartners.com, 1 @@ -27616,7 +27629,6 @@ citizensleague.org, 1 citizing.org, 1 citos.ga, 1 citoyen.eu, 1 -citroenc3owners.com, 1 citrusbocc.gov, 1 citruscounty.gov, 1 citruspi.com, 1 @@ -27767,7 +27779,6 @@ civicunicorn.us, 1 civil-works-sri.com, 1 civilbikes.com, 1 civilconcretellc.com, 1 -civilcorner.com, 1 civilengineeringhandbook.tk, 1 civilg20.org, 1 civilhost.tk, 1 @@ -27993,6 +28004,7 @@ claudia-halfter.de, 1 claudia-makeup.com, 1 claudia-urio.com, 0 claudiahalfter.de, 1 +claudiasnederlandsehangoordwergjes.tk, 1 claudiaswea.com, 1 claudiney.eti.br, 1 claudiney.id, 1 @@ -28190,6 +28202,7 @@ clickdebateest.ga, 1 clickdocs.ca, 1 clickenergy.com.au, 1 clickforum.cf, 1 +clickheretobegin.tk, 1 clickhost.com.au, 1 clickhouse.tech, 1 clickinfo.tk, 1 @@ -28216,6 +28229,7 @@ clicktrans.de, 1 clicktrans.es, 1 clicktrans.it, 1 clicktrans.pl, 1 +clickzone.ga, 1 clicoclick.com, 1 clien.net, 1 client.coach, 0 @@ -28228,6 +28242,7 @@ cliffbreak.de, 1 cliffburton.tk, 1 clifflu.net, 1 cliftonheritage.net, 1 +clik.ga, 1 climaencusco.com, 1 climaffaires.com, 1 climatechange2021.org, 1 @@ -28235,15 +28250,21 @@ climatecrafters.com, 1 climateinteractive.org, 1 climatejustice.nyc, 1 climatgate.tk, 1 +climaticequipment.tk, 1 climatizzatore.it, 0 climatizzatore.roma.it, 1 climatizzatoriprezzi.it, 1 climaverde.gr, 1 +climbing.tk, 1 clinchcountyga.gov, 1 +clindamycin-150mg.ga, 1 +clindamycin-phosphate.ga, 1 clindamycin.gq, 1 clindamycinantibiotic.cf, 1 +clindamycinantibiotic.ga, 1 clindamycinantibiotic.gq, 1 clindamycinantibiotic.tk, 1 +clindamycinprice.tk, 1 clindoeilmontagne.com, 0 clingout.com, 1 clinic-manager.academy, 1 @@ -28293,6 +28314,7 @@ clipchamp.com, 1 clipclip.com, 1 clippingpathsupport.com, 1 clippings.com, 1 +clips.ga, 1 cliquetis.ddns.net, 1 cliqz.com, 1 clive.io, 1 @@ -28318,6 +28340,7 @@ clok.nl, 1 clokdways.com, 1 clomid100mg.ga, 1 clomid50mg.cf, 1 +clomid50mg.ml, 1 clomidformen.tk, 1 clomidonline.tk, 1 clomiphene.gq, 1 @@ -28325,12 +28348,14 @@ cloneprint.com, 1 cloneuniverse.com, 1 cloneuniverse.de, 1 clonidine-hydrochloride.ga, 1 +clonix.tk, 1 clonoe.tk, 1 clonyitaly.tk, 1 clooi.tk, 1 cloppenburg-autmobil.com, 1 cloppenburg-automobil.com, 1 clorik.com, 1 +clorinda.tk, 1 clorophilla.net, 1 closecross.com, 1 closeli.cn, 1 @@ -28345,6 +28370,7 @@ closrr.cloud, 1 clothes-for-school.tk, 1 clothilde-wattelier.fr, 1 clothing-2010.tk, 1 +clothing-for-women.tk, 1 clothingforcamping.com, 1 clothingjeans.tk, 1 cloud-glaeser.dedyn.io, 1 @@ -28363,6 +28389,7 @@ cloud42.ch, 0 cloud7.news, 1 cloud9bouncycastlehire.com, 1 cloud9vets.co.uk, 1 +cloudads.ga, 1 cloudads.ml, 1 cloudalice.com, 1 cloudalice.net, 1 @@ -28388,11 +28415,13 @@ clouddatanotes.com, 1 clouddaten.de, 1 clouddesk.co.uk, 1 clouddog.com.br, 1 +clouddomain.tk, 1 clouddownloader.net, 1 cloudeezy.com, 1 cloudera.com, 1 cloudeways.com, 1 cloudey.net, 1 +cloudfast.cf, 1 cloudfilecomputer.ga, 1 cloudfiles.at, 1 cloudfinders.cf, 1 @@ -28422,6 +28451,7 @@ cloudmanagedbuilding.com, 1 cloudmanagedbuildings.com, 1 cloudmarathi.work, 1 cloudmigrator365.com, 1 +cloudmoney.tk, 1 cloudmyhome.site, 1 cloudmyhome.top, 1 cloudnexusit.com, 1 @@ -28470,6 +28500,7 @@ cloudspire.net, 1 cloudstk.com, 1 cloudstoragecompare.com, 1 cloudstored.nl, 1 +cloudstress.ga, 1 cloudsweeper.com, 1 cloudsweeper.de, 1 cloudsys.dnsalias.net, 1 @@ -28522,10 +28553,12 @@ club-adulti.ro, 1 club-climate.com, 1 club-creole.com, 1 club-dieta.ru, 1 +club-dresses.cf, 1 club-duomo.com, 1 club-eclipse.tk, 1 club-leondehuanuco.tk, 1 club-night.tk, 1 +club-oz.tk, 1 club-premiere.com, 1 club-reduc.com, 1 club-slow.jp, 1 @@ -28537,6 +28570,7 @@ clubanimal.cl, 1 clubapk.com, 1 clubatleticonacionalpotosi.tk, 1 clubbers-comtois.tk, 1 +clubcorolla.cf, 1 clubcorsavenezuela.com, 0 clubcupido.com.br, 1 clubdeportivocieza.tk, 1 @@ -28545,6 +28579,7 @@ clubeamizade.com, 1 clubeamizade.com.pt, 1 clubeamizade.pt, 1 clubedaquimica.tk, 1 +clubedegeografia.tk, 1 clubedoberloque.com.br, 1 clubedohardware.com.br, 1 clubedores.com.br, 1 @@ -28557,6 +28592,7 @@ clubempleos.com, 1 clubeohara.com, 1 cluberiks.cf, 1 cluberiks.ga, 1 +cluberiks.gq, 1 clubetravel.biz, 1 clubetravel.com, 1 clubetravel.com.br, 1 @@ -28566,8 +28602,11 @@ clubetravel.org, 1 clubetravel.pt, 1 clubexpress.com, 1 clubfactory.ml, 1 +clubfailed.tk, 1 clubfamily.de, 1 +clubfunday.ga, 1 clubgalileo.com.ec, 1 +clubgenesis.tk, 1 clubgls.com, 1 clubhousetownhomes.com, 0 clubic.com, 1 @@ -28577,6 +28616,7 @@ clublevelsports.com, 1 clublibertad.tk, 1 clublime.com.au, 1 clubmagellan.tk, 1 +clubmania.tk, 1 clubmarina.store, 1 clubmate.rocks, 1 clubmini.jp, 1 @@ -28586,6 +28626,7 @@ clubni.tk, 1 clubnoetig-ink2g.de, 1 cluboc.site, 1 clubon.space, 1 +clubpes.tk, 1 clubpeugeot405.tk, 1 clubserveers.ga, 1 clubsuccessjapan.com, 1 @@ -28638,6 +28679,7 @@ cmd2021acm.com, 1 cmdline.org, 1 cme-colleg.de, 1 cmediaplayer.com, 0 +cmetana.tk, 1 cmf.qc.ca, 1 cmfaccounting.com, 0 cmfcuro.com, 1 @@ -28676,6 +28718,7 @@ cn.search.yahoo.com, 0 cn8522.com, 1 cna5.net, 1 cna5.org, 1 +cnabogota.tk, 1 cnam-idf.fr, 1 cnaprograms.online, 1 cnatraining.network, 1 @@ -28686,6 +28729,7 @@ cncfraises.fr, 1 cnclp.org.uk, 0 cncn3.cn, 1 cncollege.tk, 1 +cncr.ga, 1 cncrans.ch, 0 cncs.gob.do, 1 cncs.gov.pt, 1 @@ -28727,7 +28771,6 @@ coachinfopreneur.com, 1 coaching-harmonique.fr, 1 coaching-impulse.ch, 0 coachingforleaders.com, 1 -coachingmillenium.com, 1 coachingsantcugat.cat, 1 coachjehond.nl, 1 coachjelevennu.be, 1 @@ -28736,7 +28779,9 @@ coachrobcampos.com, 1 coactive.com, 1 coag.gov.au, 1 coalition.tk, 1 +coalmen.ga, 1 coalpointcottage.com, 1 +coalvillebasketball.tk, 1 coaojarlos.tk, 1 coassessment.com, 1 coast.tk, 1 @@ -28778,8 +28823,8 @@ cochesteledirigidos.net, 1 cochin-brahma.tk, 1 cochise.gov, 1 cocinaconalegria.com, 1 -cocinaconalegria.shop, 1 cocinandoenelsalnes.com, 1 +cocinasazahara.tk, 1 cocinoyo.com, 1 cock.lt, 1 cockedey.in, 1 @@ -28796,12 +28841,15 @@ cocoafl.gov, 1 cocobollo-sallanches.com, 1 cocobrother.ddnss.de, 1 cocodroid.com, 0 +cocokmobi.ga, 1 cocolink.jp, 1 cocoloco.co.nz, 1 cocomelody.co.za, 1 cocomelody.com, 0 cocomelody.de, 1 cocomelody.jp, 1 +coconutguy.gq, 1 +coconutoil.ml, 1 coconutoil24.com, 1 coconuts-fashion.gr, 1 coconutscrapbooking.com, 1 @@ -28810,6 +28858,7 @@ cocosunbeds.co.uk, 1 cocounty.org, 1 cocowine.com, 1 cocquyt-usedcars.be, 1 +cocresa.tk, 1 cocservice.top, 1 cocukhekimim.com, 0 cocula.net, 1 @@ -28849,6 +28898,7 @@ codebrahma.com, 0 codebrasileiro.tk, 1 codebreak.tk, 1 codebreakers.it, 1 +codeclub.gq, 1 codecolliders.com, 1 codecommunity.io, 1 codecrew.us, 1 @@ -28869,6 +28919,7 @@ codefordus.nrw, 1 codefoundry.it, 0 codegirl.tk, 1 codehangar.io, 1 +codehelper.ml, 1 codeheroes.fr, 1 codehupy.org.py, 1 codeidea.ga, 1 @@ -28883,6 +28934,7 @@ codemperium.com, 1 codename-infinity.de, 1 codename-infinity.org, 1 codename24.tk, 1 +codenamelungo.tk, 1 codenlife.kr, 1 codenlife.xyz, 1 codenode.io, 1 @@ -28890,6 +28942,7 @@ codeofhonor.tech, 1 codeparva.com, 1 codepen.com, 1 codepen.io, 1 +codepoint.ml, 1 codepoints.net, 0 codepref.com, 1 codeproxy.net, 1 @@ -28941,6 +28994,7 @@ codexpo.net, 1 codeyellow.nl, 1 codezenith.com, 1 codific.com, 1 +codifique.tk, 1 codigodelbonusbet365.com, 1 codigojose.com, 1 codigomusical.tk, 1 @@ -28967,6 +29021,7 @@ cody.sh, 1 codydostal.com, 1 codywy.gov, 1 coeburnva.gov, 1 +coecho.net, 1 coelmay.net, 1 coenjutte.tk, 1 coenraets.com, 1 @@ -28980,6 +29035,7 @@ coffee-mamenoki.jp, 1 coffee-up.it, 1 coffee.co.uk, 1 coffeebean.cf, 1 +coffeebeanstudios.tk, 1 coffeebreak.bg, 1 coffeeciel.com, 1 coffeeciel.com.tr, 1 @@ -29086,6 +29142,7 @@ colaker.net, 1 colapsys.net, 0 colarelli.ch, 1 colarose.tk, 1 +colbert.ml, 1 colburnadamswi.gov, 1 colchesterglobal.com, 1 colcomm.com, 1 @@ -29099,7 +29156,6 @@ coldice.tk, 1 coldjetconnect.com, 1 coldlasers.org, 1 coldpaste.com, 1 -coldren.org, 1 coldspegll.gq, 1 coldtomato.ga, 1 coldtomatoest.ga, 1 @@ -29177,6 +29233,7 @@ collective-incubator.de, 1 collectivedg.com, 1 collectiverecyclers.com, 1 collectivesupply.com, 1 +collector.cf, 1 collectorknives.net, 1 collectorsystems.com, 1 colleencornez.com, 1 @@ -29198,7 +29255,9 @@ collegereligionandphilosophy.com, 1 collegesecretary.cn, 1 collegesecretary.com, 1 collegesexvid.com, 1 +collegesrit.tk, 1 collegestationhomes.com, 1 +collegetownstudios.tk, 1 collegium-musicum-bocholt.de, 0 collepietra.it, 1 collerosso.com, 1 @@ -29228,12 +29287,11 @@ colmena.biz, 1 colo-tech.com, 1 colocation-rennes.com, 1 colocerin.com, 1 +colocolochile.tk, 1 cololi.moe, 1 colombiahoy.news, 1 colombiajeans.co, 1 -colombian.cam, 1 colombian.dating, 1 -colombianas.webcam, 1 colombiasobreruedas.com, 1 colombyinai.ga, 1 coloniae.de, 1 @@ -29300,6 +29358,7 @@ columbushydroxide.net, 1 columbushydroxide.org, 1 columbusks.gov, 1 columbusunderground.com, 1 +columbuswines.com, 1 colwichks.gov, 1 colyakoomusic.com, 1 com-b.vn, 1 @@ -29312,6 +29371,7 @@ comalia.com, 1 comanchecountyks.gov, 1 comanchenationpolice.gov, 1 comaporter.com, 1 +comarcadelaranda.tk, 1 comarch.es, 1 comarkinstruments.cloud, 1 comarkinstruments.net, 1 @@ -29334,6 +29394,7 @@ comcol.nl, 1 comdirect.de, 1 comdotgame.com, 1 comdurav.com, 1 +come.ga, 1 come2cook.com, 1 comealong.org, 1 comeals.com, 1 @@ -29347,6 +29408,7 @@ comenc.ddns.net, 1 comengpt.com, 1 comeoishii.com, 1 comeoneileen.tk, 1 +comercialcolombia.tk, 1 comercialmattos.com, 1 comercialroxana.com, 1 comercialtech.cl, 1 @@ -29367,7 +29429,9 @@ comfintouch.com, 0 comfis.nl, 1 comfitsweets.co.uk, 1 comflores.com.br, 1 +comfortablelife.tk, 1 comfortsolutionsair.com, 1 +comfriesland.tk, 1 comfun.net, 1 comfuzztible.tk, 1 comfy-court.com, 1 @@ -29415,6 +29479,7 @@ commercia.srl, 1 commercial.lviv.ua, 1 commercialfinancepartners.com, 1 commercialstainless.com, 1 +commercialzone.cf, 1 commercialzone.ga, 1 commercialzone.ml, 1 commeunamour.com, 1 @@ -29474,6 +29539,7 @@ comohacerblog.net, 1 comohacerpara.com, 1 comoimportar.net, 1 comomoraremportugal.ga, 1 +comoperdonar.tk, 1 comoreconquistaroex.com, 1 comorecuperaratumujerpdf.com, 1 comosecarabarriga.com, 1 @@ -29482,6 +29548,7 @@ comoseduzir.net, 1 comosefazisto.com.br, 1 comovenderpelowhatsapp.com.br, 1 comoviajarcontumascota.com, 1 +compactador-vendetta.tk, 1 compactchess.cc, 1 compagnidimerenda.tk, 1 compagniecoupable.fr, 1 @@ -29534,6 +29601,7 @@ compeuphoria.com, 1 compex.com.sg, 1 compibus.fr, 1 compilenix.org, 0 +complaint.tk, 1 complete-concrete-concise.com, 1 complete-privacy.tk, 1 completeanon.tk, 1 @@ -29609,6 +29677,7 @@ computer-service-24.de, 1 computer-service.ch, 1 computer-world.pro, 1 computer-worlds.tk, 1 +computer4me.tk, 1 computeradvance.tk, 1 computeradvice247.com, 1 computerandaccessories.com, 1 @@ -29628,6 +29697,7 @@ computerpackages.com, 1 computerscience.guide, 1 computersforlearning.gov, 1 computersneversleep.art, 1 +computersoftware.tk, 1 computersystems.guru, 0 computertech-ut.com, 1 computerthings.net, 1 @@ -29644,6 +29714,7 @@ computop.com, 1 computron.ga, 1 comquadro.com.br, 1 comradesofmight.tk, 1 +comsoli.com.br, 1 comswp.com, 1 comtex.com.au, 1 comtily.com, 1 @@ -29659,6 +29730,7 @@ comunidadmontepinar.es, 1 comuniondelucia.com, 1 comunismo.tk, 1 comunistas.tk, 1 +comunitateonline.tk, 1 comunitelia.com, 1 comunityflashgame.cf, 1 comvert.com, 1 @@ -29672,6 +29744,7 @@ conbida.co, 1 conbrio.tk, 1 concealoutfitters.com, 1 concellodoparamo.tk, 1 +concepcion-futbol-club.tk, 1 concept-web.ch, 0 concept5.co.il, 1 conceptapps.pl, 1 @@ -29679,6 +29752,7 @@ conceptatelier.de, 1 conceptcompany.com, 1 conceptec.de, 1 conceptground.com, 1 +conceptual.ga, 1 concern.cloud, 1 concert.ga, 1 concert.solutions, 1 @@ -29698,8 +29772,10 @@ conciertoscolombia.tk, 1 concilioderivendel.tk, 1 conciliumnotaire.ca, 1 conclave.global, 1 +conclave.gq, 1 conclave.rocks, 1 conclave.tk, 1 +conclude.ga, 1 conclusion.nl, 1 conclusive.co.za, 1 concord.sh, 1 @@ -29732,6 +29808,7 @@ condizionatore.roma.it, 1 condolencemessages.net, 1 condominiosi.it, 1 condominioweb.com, 1 +condonescadistas.tk, 1 condonline.app.br, 1 condosforcash.com, 1 condroz-motors.be, 0 @@ -29766,6 +29843,8 @@ confia.io, 1 confiancefoundation.org, 1 confianza.pe, 1 confidential.network, 1 +confidentliving.gq, 1 +confidentliving.tk, 1 config.schokokeks.org, 0 configcat.com, 1 configpoint.group, 1 @@ -29923,6 +30002,7 @@ consiliumvitae.ch, 1 consill.com, 1 consoe.com, 1 console.rest, 1 +consoletech.tk, 1 consoleuniverse.tk, 1 consolezone.tk, 1 consommateuraverti.com, 1 @@ -29933,6 +30013,7 @@ consorcionacionalideal.com.br, 1 consortium.chat, 1 consorzio.org, 1 conspectstudios.com, 1 +conspiracionweb.tk, 1 conspiracy.gq, 1 conspiracytheorypal.com, 1 conssales.com, 1 @@ -29943,6 +30024,7 @@ constantin-blog.eu, 1 constcorrect.com, 1 constellatio.com, 1 constellationinternational.ml, 1 +constellations.ga, 1 constern.de, 1 consteval.org, 1 constexpr.org, 1 @@ -29962,6 +30044,7 @@ constructionstudent.uk, 1 construred.tk, 1 construyetuempresa.com, 1 consul-coton.ru, 1 +consul-novocherkassk.ml, 1 consul.io, 0 consulenteambientale.it, 1 consulentedellavoro.it, 1 @@ -29993,6 +30076,7 @@ consulvation.com, 1 consumer.ee, 1 consumer.gov, 0 consumer.gov.au, 1 +consumer.gq, 1 consumera.com, 1 consumeraction.gov, 1 consumerattorneys.com, 1 @@ -30037,6 +30121,7 @@ contextogestaoempresarial.com.br, 1 contextolog.cf, 1 conti-profitlink.co.uk, 1 continental-landscapes.co.uk, 1 +continuernom.tk, 1 continuitycenters.com, 0 continuum.memorial, 0 continuumm-tech.com, 1 @@ -30059,6 +30144,7 @@ contralabel.com, 1 contralaespeculacioninmobiliaria.tk, 1 contralegem.it, 1 contrapeso.es, 1 +contrarreforma.tk, 1 contraspin.co.nz, 1 contrastchecker.online, 1 contrastecolombia.com, 1 @@ -30099,6 +30185,7 @@ convergencela.com, 1 convergent.tn, 1 convergnce.com, 1 conversationexchange.com, 1 +conversatis.cf, 1 converser.tk, 1 conversiepartners.nl, 1 conversionsciences.com, 1 @@ -30138,6 +30225,7 @@ cookiepedia.co.uk, 1 cookiepro.com, 1 cookiesoft.de, 1 cookiestudies.cf, 1 +cooking-food.cf, 1 cookingaround.town, 1 cookingcrusade.com, 1 cookingiseasy.tk, 1 @@ -30168,6 +30256,7 @@ cooldown.club, 1 coole-fete.de, 1 coolerssr.space, 1 coolesc.xyz, 1 +coolfilm.cf, 1 coolgifs.de, 1 coolink.pub, 1 cooljs.me, 1 @@ -30178,6 +30267,7 @@ coolpi.nl, 1 coolprylar.se, 1 coolsculptingmanhattanbeach.com, 1 coolshirt.tk, 1 +coolsoftware.tk, 1 coolspeak.com, 1 cooltang.ooo, 1 coolvox.com, 1 @@ -30197,11 +30287,13 @@ coopermais.tk, 1 coore.jp, 1 coorpacademy.com, 1 cooznacza.pl, 1 +copa.cf, 1 copabarena.tk, 1 copacabanafc.tk, 1 copdfoundation.org, 1 copdrop.ga, 1 cope.finance, 1 +copedeportes.tk, 1 cophumouraustralia.com, 1 copiisiparinti.ro, 1 copilotgps.com, 1 @@ -30246,6 +30338,8 @@ coralsprings.gov, 1 coralspringsfl.gov, 1 corarain.me, 1 corarcraft.com, 1 +coratxa.tk, 1 +corazoncaliente.tk, 1 corazondemelon.es, 1 corbax.com, 1 corbi.net.au, 1 @@ -30288,6 +30382,7 @@ coreless-stretchfilm.com, 1 coremcnetwork.ml, 1 coremedia.co.id, 1 coremicro.com, 1 +coremove.tk, 1 corepacks.tk, 1 corepartners.com.ua, 1 corerad.net, 1 @@ -30332,6 +30427,7 @@ cornerstone.photography, 1 cornerstonecmc.org, 1 cornerstonefoundationrepairllc.com, 1 cornerstonenorthwest.com, 1 +cornertoyshop.ga, 1 corniche.com, 1 corningcu.org, 1 cornishcamels.com, 0 @@ -30386,6 +30482,7 @@ corpulent.coffee, 1 corpulentcoffee.com, 1 corpuschristisouthriver.org, 1 corpusslayer.com, 1 +corrales-sanchez.tk, 1 correct.cf, 1 correctconstructions.com.au, 1 correctemails.com, 1 @@ -30398,6 +30495,7 @@ correctpaardbatterijnietje.nl, 1 corredorampr.com, 1 correo.club, 1 correotemporal.org, 1 +correspond.gq, 1 correspondent.ga, 1 corrick.io, 1 corridorsands.com.au, 1 @@ -30411,6 +30509,7 @@ corsa-b.uk, 1 corsectra.com, 1 corsepro.com, 0 corservsolutions.com, 1 +corsetacademy.tk, 1 corsi.tk, 1 corsica.ovh, 1 corsicalaw.com, 1 @@ -30425,6 +30524,7 @@ cortadorplasma.com, 1 cortapelos.site, 1 corte.tk, 1 cortealcastello.it, 1 +cortege.cf, 1 cortep.fr, 1 cortesparapelo.com, 1 cortestesisat.net, 1 @@ -30432,6 +30532,7 @@ cortex-development.de, 1 cortexx.nl, 1 cortezco.gov, 1 cortezsanitation.gov, 1 +cortino.ga, 1 cortis-consulting.ch, 1 cortizo.com.ar, 1 cortlandvoice.com, 1 @@ -30459,6 +30560,7 @@ coshima.ga, 1 coshima.gq, 1 coshima.tk, 1 cosirex.com, 1 +coskun.tk, 1 coslinker.com, 0 cosmasiakraft.tk, 1 cosmechic.fr, 1 @@ -30470,6 +30572,7 @@ cosmeticosfuerth.de, 1 cosmeticosnet.com.br, 1 cosmeticsurgeon.ga, 1 cosmetify.com, 1 +cosmetiq.tk, 1 cosmetiqua.com, 1 cosmetiquesvegans.com, 1 cosmetix-ndsf.fr, 1 @@ -30493,6 +30596,7 @@ cosmos-software.tk, 1 cosmoschaos.net, 1 cosmosdogbakery.com, 1 cosmosearch-azerbaijan.tk, 1 +cosmosenalerta.tk, 1 cosmosmkt.com.mx, 1 cosmoz.ga, 1 cosmundi.de, 1 @@ -30518,9 +30622,11 @@ costel.tk, 1 costelino.tk, 1 costellofc.co.uk, 0 costflow.ga, 1 +costi.cf, 1 costi.eu, 1 costinesti.tk, 1 costinstefan.eu, 1 +costoflipitor.gq, 1 costreportdata.com, 0 costruzioni.milano.it, 1 costum-for-men.tk, 1 @@ -30539,11 +30645,14 @@ coteouestmedia.com, 1 coteries.com, 0 coth.ml, 1 cotoacc.com, 1 +cotofoto.tk, 1 +coton.tk, 1 cotonni.tk, 1 cotsworth.com, 1 cotta.dk, 1 cottage.direct, 1 cottagegroveor.gov, 1 +cottonage.tk, 1 cottonwoodcountymn.gov, 1 cotwe-ge.ch, 0 coubron-escrime.fr, 1 @@ -30575,6 +30684,8 @@ countingdues.com, 1 countrify.net, 1 country-creativ.de, 1 country-dancers.tk, 1 +country-games.tk, 1 +country-house.ga, 1 countrybrewer.com.au, 1 countrylife.cz, 1 countrymountaininn.com, 1 @@ -30582,6 +30693,7 @@ countryoutlaws.ca, 1 countryroadsmotorinn.com, 1 countrysaloon.tk, 1 countryshopradio.tk, 1 +countrysidebar.tk, 1 countrysidemarquees.co.uk, 1 countrysmile.org, 0 county10.com, 1 @@ -30735,8 +30847,8 @@ cpfrancophonie.org, 1 cpfs-group.com, 1 cpgarmor.com, 1 cpgiiaragon.es, 1 +cphollywoodproduct.ml, 1 cphpvb.net, 1 -cpilot.cz, 1 cpish.id.au, 1 cpls.me, 1 cplus.me, 1 @@ -30750,6 +30862,7 @@ cppressinc.com, 1 cpqcol.gov.co, 1 cprealtysolutions.com, 1 cpro.pt, 1 +cps-sante.ml, 1 cpsa.co.uk, 1 cpsecureapp.com, 1 cpsq.fr, 1 @@ -30784,7 +30897,9 @@ crabtreestore.nl, 1 crackajack.cf, 1 crackcat.de, 1 crackedlemming.com, 1 +crackedsoftware.cf, 1 cracker.in.th, 1 +crackerjohn.tk, 1 crackers4cheese.com, 1 crackheros.site, 1 cracklab.tk, 1 @@ -30839,6 +30954,7 @@ craigdavis.ga, 1 craigfrancis.co.uk, 1 craigheadcountyar.gov, 1 craigleclaireteam.com, 1 +craigphillips-work.cf, 1 craigrouse.com, 1 craigsaper.com, 1 craigwfox.com, 0 @@ -30861,6 +30977,7 @@ craphound.com, 1 crapitalism.biz, 1 crapmail.tk, 1 crapouill.es, 1 +crash-de-1929-et-grande-depression.tk, 1 crash.net, 1 crashbolsa.com, 1 crashcomputer.tk, 1 @@ -30869,6 +30986,7 @@ crashcrafter.de, 1 crashday.tk, 1 crashdebug.fr, 1 crashdummy.tk, 1 +crashedata.tk, 1 crashpaint.cf, 1 crate.io, 0 cratedb-dev.cloud, 1 @@ -30894,27 +31012,32 @@ crazy-coders.com, 1 crazy-fox.cf, 1 crazy-project.ml, 1 crazyachmed.de, 1 +crazybear-underground.tk, 1 crazycastles.ie, 1 crazycen.com, 0 crazychicken.tk, 1 crazycouple.ml, 1 crazycube.fr, 1 crazycube.tk, 1 +crazydrivers.tk, 1 crazydude.tk, 1 crazyfly.tk, 1 crazyfrog.com, 1 crazygifts.cf, 1 crazyhost.ga, 1 +crazyhost.tk, 1 crazymadness.tk, 1 crazymarvin.com, 1 crazymeeshu.com, 1 crazymonkey.gq, 1 crazypaul.com, 1 crazypellas.tk, 1 +crazypete.ga, 1 crazypong.tk, 1 crazypotato.tk, 1 crazypowered.com, 1 crazysavings.ga, 1 +crazystories.tk, 1 crbug.com, 1 crc-bank.com, 1 crc-online.nl, 1 @@ -30957,8 +31080,10 @@ creasetheband.tk, 1 creastic.com, 1 create-it.cz, 1 create-ls.jp, 1 +create-website.ga, 1 createbeauty.tk, 1 createbeing.com, 1 +createbot.ml, 1 createcode.pt, 1 createcos.com, 1 createcpanama.com, 1 @@ -30995,6 +31120,7 @@ creativeliquid.com, 1 creativelysustainable.com, 1 creativemindslms.tk, 1 creativephysics.ml, 1 +creativescorpio.tk, 1 creativesectors.tk, 1 creativestories.me, 1 creativetechsolution.in, 1 @@ -31054,6 +31180,7 @@ creer-mon-business-plan.fr, 1 creer-une-boutique-en-ligne.com, 1 crem.in, 0 cremalleradenuria.tk, 1 +crematory.tk, 1 cremedigital.com, 1 cremepassion.de, 1 crepa.ch, 0 @@ -31069,6 +31196,8 @@ crestaurant.com.au, 1 crestdatasys.com, 1 crestfitness.co.in, 1 crestoncottage.com, 0 +crestor20mg.ml, 1 +crestorgeneric.ml, 1 crestrockadvisors.com, 1 crestwoodky.gov, 1 cretdupuy.com, 0 @@ -31076,6 +31205,7 @@ creteangle.com, 1 cretica.no, 1 creusalp.ch, 0 crew.moe, 1 +crewsing.tk, 1 crewvision.pt, 1 crex24.com, 1 crfcap.org, 1 @@ -31111,10 +31241,13 @@ crimeapress.info, 1 crimebarta.com, 1 crimefreeliving.com, 1 crimesolutions.gov, 1 +crimethincx.tk, 1 crimevictims.gov, 1 criminal-attorney.ru, 1 criminal-market.ml, 1 +criminal-news.tk, 1 criminal.enterprises, 1 +criminalcasecheats.ml, 1 criminaljusticehub.org.uk, 1 criminallawyerjobdescription.ga, 1 criminallawyerjobdescription.gq, 1 @@ -31127,6 +31260,7 @@ crimson.no, 0 crimsonconnect.co.uk, 1 crimsoncoward.com, 1 crimsondragoncosplay.tk, 1 +crimsoninators.ga, 1 crimsonlettersmusic.com, 1 crimsonmedia.co.uk, 1 crinesdanzantes.be, 1 @@ -31140,6 +31274,7 @@ criptomonedas365.com, 1 criptomonedasworld.com, 1 criptomonedaz.com, 1 criptomoneylite.tk, 1 +criptozoologia.tk, 1 cris2006.com, 1 crisantacademy.com, 1 crisisactual.com, 1 @@ -31154,6 +31289,7 @@ crisp.help, 1 crisp.im, 1 crisp.watch, 1 crispinusphotography.com, 1 +crispybacon.ml, 1 crisssmanmix.tk, 1 cristalerencontres.fr, 1 cristaleslitios.com.mx, 1 @@ -31161,6 +31297,8 @@ cristalgema.ga, 1 cristals.ga, 1 cristaltercos.com.br, 1 cristau.org, 1 +cristenberens.tk, 1 +cristian-alexander.tk, 1 cristiandumitru.tk, 1 cristianhares.com, 1 cristianonascimento.ml, 1 @@ -31171,6 +31309,7 @@ cristina.tk, 1 cristinafigueroa.tk, 1 cristnasar.tk, 1 cristomisina.tk, 1 +cristomoradocusco.tk, 1 cristoraciones.com, 0 critcola.com, 1 criteriaproducciones.tk, 1 @@ -31179,6 +31318,7 @@ criterionsystems.co.uk, 1 critical-scientists.net, 1 critical.software, 1 criticalcaredvm.com, 1 +criticalculture.cf, 1 criticalculture.gq, 1 criticalculture.ml, 1 criticalgenesis.tk, 1 @@ -31207,6 +31347,7 @@ croceverdevb.it, 1 crochetkim.com, 1 crockettmyers.com, 1 crocky.tk, 1 +crocop.tk, 1 crocuscoaching.co.uk, 1 croeder.net, 1 croftdesigngifts.co.uk, 1 @@ -31223,6 +31364,7 @@ cromwellvets.co.uk, 1 cronberg.ch, 1 croncron.io, 1 cronenberg.cc, 1 +cronicademuro.tk, 1 cronix.cc, 1 cronjob.de, 1 cronmaster.online, 1 @@ -31243,6 +31385,7 @@ cross-culture.tk, 1 cross-games.tk, 1 cross-led-sign.com, 1 cross-x.com, 1 +crossair.tk, 1 crosscom.ch, 1 crossconnected.co.uk, 1 crossdresscontest.com, 1 @@ -31256,6 +31399,7 @@ crossfw.com, 1 crossingna.com, 1 crosslakefibre.ca, 1 crosslifenutrition.co.uk, 0 +crosslimit.ga, 1 crossorange.jp, 1 crossorig.in, 1 crossover.tk, 1 @@ -31335,7 +31479,9 @@ crushxp.tk, 1 crustytoothpaste.net, 1 crute.me, 1 crutic.gq, 1 +cruzadamorada.tk, 1 crvegas.com, 1 +crvenikrst.tk, 1 crvv.me, 1 crxviewer.com, 1 cry-sys.de, 0 @@ -31347,6 +31493,7 @@ cryovex.com, 1 cryozenic.com, 1 cryp.no, 1 crypkit.com, 1 +cryps.pl, 1 crypt-app.net, 1 crypt0cloud.ddns.net, 0 cryptcheck.fr, 1 @@ -31364,6 +31511,7 @@ cryptizy.com, 1 cryptme.in, 1 crypto-ads.ga, 1 crypto-clix.xyz, 1 +crypto-gaming.tk, 1 crypto-tools.cloud, 1 crypto-trade.org, 1 crypto-twist.com, 1 @@ -31378,6 +31526,7 @@ cryptoarabsolar.tk, 1 cryptobells.com, 0 cryptobin.co, 1 cryptobonus.ga, 1 +cryptobonus.tk, 1 cryptoclix.website, 1 cryptocon.org, 1 cryptocurrencylatestnews.today, 1 @@ -31455,12 +31604,14 @@ crys.me, 1 crys.ovh, 1 crys.pw, 1 crys.tv, 1 +crystal-media.tk, 1 crystal-zone.com, 1 crystalapp.ca, 1 crystalblockchain.com, 1 crystalcave.nl, 0 crystalcaves.tk, 1 crystalchandelierservices.com, 1 +crystalcherryonline.tk, 1 crystalcube.tk, 1 crystaldesign.tk, 1 crystaldown.de, 0 @@ -31520,6 +31671,7 @@ cscmotors.com, 1 cscred.online, 1 csd-sevnica.si, 1 csd-slovenije.si, 1 +csdacadcv.ga, 1 csdcareerday.com, 1 csdisaster.club, 1 csds.md, 1 @@ -31580,6 +31732,7 @@ cspi.uz, 1 cspvalidator.org, 1 csreturn.com.au, 1 csrichter.com, 1 +csroot.cf, 1 csrtech.com, 1 csru.net, 1 css-krebs.ch, 1 @@ -31621,6 +31774,7 @@ ctcloud.ml, 1 ctcom-peru.com, 1 ctcp.pt, 1 ctcue.com, 1 +ctech.cf, 1 ctemplar.com, 1 ctf-albstadt.de, 1 ctf-archive.com, 1 @@ -31641,6 +31795,7 @@ ctnguyen.de, 1 ctnguyen.net, 1 ctns.de, 0 ctoin.tw, 1 +ctonovenkogo.tk, 1 ctor.ch, 1 ctoresms.com, 1 ctpe.info, 1 @@ -31649,12 +31804,14 @@ ctr-sante.eu, 1 ctr.id, 0 ctrl.blog, 1 ctrl.gr, 0 +ctrlcvz.tk, 1 ctsl.net, 1 ctyrisinkneri.cz, 1 cu247secure.ie, 1 cua911.gov, 1 cuarentagrados.tk, 1 cuaresmaysemanasanta.tk, 1 +cuartetocontinental.tk, 1 cuartob.tk, 1 cuasotinhyeu.vn, 1 cuatroporcuatro.tk, 1 @@ -31700,6 +31857,7 @@ cubing.net, 1 cublick.com, 1 cubocell.com, 1 cubotabacaria.com.br, 1 +cuboxmovies.ga, 1 cubrebocas.tk, 1 cubsbestteaminbaseball.com, 1 cubsradio.tk, 1 @@ -31711,9 +31869,10 @@ cuckold-secrets.tk, 1 cuckoldjungle.com, 1 cuckoo.ee, 1 cuddlecat.io, 1 -cuddlecomfort.com, 1 cuddlingyaks.com, 1 cuddlybeardaycare.com.au, 1 +cudesa.gq, 1 +cudesyb.tk, 1 cudoo.de, 1 cueca.com.br, 1 cuecasonline.com.br, 1 @@ -31725,6 +31884,7 @@ cuentasmutualamr.org.ar, 1 cues.org.uk, 1 cuestiondetiempo.tk, 1 cuetoems.com, 1 +cuevafelina.tk, 1 cugetliber.ro, 1 cuhawaii.com, 1 cuidade.fr, 1 @@ -31737,6 +31897,7 @@ cukrinelape.com, 1 cukurbag.ml, 1 culan.dk, 0 culha.net, 1 +culinary.ga, 1 culinoa.be, 1 culpoilu.tk, 1 cultofperf.org.uk, 1 @@ -31747,18 +31908,22 @@ culturaarabe.tk, 1 culturabrasilia.tk, 1 culturaeuropea.tk, 1 culturahack.tk, 1 +culturaldiversity.tk, 1 culturalmaninhos.tk, 1 culturalparadiso.tk, 1 +culturalsabotage.cf, 1 culturama.tk, 1 cultureetsoft.tk, 1 culturehatti.com, 1 culturelivresque.fr, 1 culturerain.com, 1 +culturesgames.tk, 1 cultureshift.co, 1 culturesouthwest.org.uk, 1 culturess.com, 1 culturestraveled.com, 1 culturevision.com, 1 +culturism.ml, 1 culturoquiz.com, 1 cultuur.gent, 1 cultuurinonderwijs.be, 1 @@ -31852,6 +32017,7 @@ currencyfreaks.com, 1 current-ip.com, 1 current.com, 0 currentbitcoin.news, 1 +currentchaos.tk, 1 currentcryptocurrency.news, 1 currentcryptocurrencynews.com, 1 currenthaus.com, 1 @@ -31863,6 +32029,7 @@ cursillosdezaragoza.tk, 1 cursoalia.com, 0 cursocatolico.com, 1 cursodehipnosis.tk, 1 +cursodememorizacao.ml, 1 cursointeractivo.com, 1 cursomente.online, 1 cursorcam.tk, 1 @@ -31931,6 +32098,7 @@ custompapers.com, 1 custompoolsbydesign.com, 1 customradio.tk, 1 customromlist.com, 1 +customsandals.tk, 1 customshort.link, 1 customsportsocks.com, 1 customtel.com.au, 1 @@ -31947,8 +32115,11 @@ cutads.ml, 1 cutaquigusa.com, 1 cute-urls.ml, 1 cute2u.com, 1 +cutehost.ga, 1 +cutemodel.ml, 1 cutephil.com, 1 cuthe.re, 1 +cutie-viewty.tk, 1 cuties.chat, 1 cutimbo.ovh, 1 cutlinks.ml, 1 @@ -31987,6 +32158,8 @@ cvdesigner.lk, 1 cve-le-carrousel.ch, 0 cve.sh, 1 cvec.org, 1 +cvetpodokonnik.tk, 1 +cvglobal.cf, 1 cvhunter.hu, 1 cviip.com, 1 cvj.me, 1 @@ -32001,6 +32174,7 @@ cvr.dk, 1 cvrn.cc, 1 cvsmash.io, 1 cvtemplatemaster.com, 1 +cvtenerife.tk, 1 cvv.cn, 1 cw-bw.de, 0 cw.center, 1 @@ -32064,6 +32238,7 @@ cyber-sikkerhed.dk, 1 cyber-swiat.pl, 1 cyber-tarot.com, 1 cyber-travel.com, 1 +cyber-world.tk, 1 cyber-yaroslavl.tk, 1 cyber.gc.ca, 1 cyber.gov, 1 @@ -32077,6 +32252,7 @@ cyberautomobile.tk, 1 cyberbook.ml, 1 cyberbotx.com, 1 cyberboy.tk, 1 +cyberburek.tk, 1 cybercareers.gov, 1 cybercat-tver.tk, 1 cyberclaw.tk, 1 @@ -32108,6 +32284,7 @@ cyberhelden.nl, 1 cyberhipsters.nl, 1 cyberhost.uk, 1 cyberianhusky.com, 0 +cyberislam.tk, 1 cyberium-planet.cf, 1 cyberjake.xyz, 1 cyberknife-sigulda.com, 1 @@ -32117,6 +32294,7 @@ cyberlocos.tk, 1 cyberlounge.ga, 1 cybermall.ga, 1 cybermaniac.tk, 1 +cybermatrixone.tk, 1 cyberme.sh, 1 cybermeldpunt.nl, 1 cybermonday.org.il, 1 @@ -32136,6 +32314,7 @@ cyberphoenix.tk, 1 cyberplus.net.id, 1 cyberpro.co.uk, 1 cyberproducciones.tk, 1 +cyberprogramming.tk, 1 cyberpubonline.com, 1 cyberpunk.guru, 1 cyberquest.cf, 1 @@ -32145,6 +32324,7 @@ cyberrepair.de, 1 cyberry.eu, 1 cybersafesolutions.com, 0 cybersafetn.gov, 1 +cybersamurai.tk, 1 cyberscan.io, 1 cyberschmiede.at, 1 cyberschmiede.com, 1 @@ -32159,11 +32339,13 @@ cybersecuritychallenge.be, 0 cybersecurityincidentresponse.com, 1 cyberseguranca.com.br, 1 cybershark.space, 1 +cybershot.tk, 1 cybersins.com, 1 cyberskyline.com, 1 cybersmart.co.uk, 1 cybersmartdefence.com, 1 cybersniff.net, 1 +cybersolution.tk, 1 cybersoulz.com, 1 cybersound.tk, 1 cyberspace.community, 1 @@ -32183,13 +32365,15 @@ cybertron.cf, 1 cybertronics.tk, 1 cybertu.be, 1 cyberwandelendetakjes.tk, 1 -cyberwars.dk, 1 cyberweightloss.com, 1 cyberwire.nl, 1 +cyberworldexpert.tk, 1 cyberwritersink.com, 1 cyberxpert.nl, 1 cyberzone.ml, 1 +cyberzones.gq, 1 cybiko123.com, 1 +cyborgtheory.tk, 1 cybozu.cn, 1 cybozu.com, 1 cybrix.io, 1 @@ -32263,6 +32447,7 @@ cyril-leytsihovich.ml, 1 cyriletsophie.fr, 1 cyrilmurphy.com, 1 cyrilstoll.ch, 1 +cyrix-systems.tk, 1 cyrokx.com, 1 cyrusdaily.tk, 1 cysi.in, 1 @@ -32439,8 +32624,10 @@ dabhand.studio, 1 dabi.tk, 1 dabrecords.co.uk, 0 dabro.tk, 1 +dabuzz.tk, 1 dacada-porn.com, 1 daceurope.co.uk, 1 +dacha-letom.ml, 1 dachb0den.net, 1 dachbeschichtung-zentrum.de, 1 dachdecker-ranzenberger.de, 1 @@ -32473,10 +32660,12 @@ dado.virtual.museum, 1 dadons-laserdiscs.com, 1 dadosch.de, 0 dadrian.io, 1 +dadsarmy.tk, 1 daduke.org, 1 daemen.org, 1 daemon-hentai.tk, 1 daemon.xin, 1 +daemons.ml, 1 daemonslayer.net, 1 daemwool.ch, 1 daevel.com, 1 @@ -32494,11 +32683,17 @@ daftarsitusjudislot.com, 1 dafunda.com, 1 dafuq.xyz, 1 dafyddcrosby.com, 1 +dag-berlin.tk, 1 dag-hebergement.fr, 1 dag-konsult.com, 1 +dag-ogni.tk, 1 daganghalal.com, 1 +daganzo.tk, 1 dagbestedingwarrie.nl, 1 dagensannonser.se, 1 +dagestan.cf, 1 +dagestanci.tk, 1 +dagestanec.tk, 1 daggas.life, 1 daggastest.com, 1 dagirl.uno, 1 @@ -32522,11 +32717,13 @@ daikonsystems.com, 1 daikoz.com, 1 daily-puzzle.tk, 1 daily-sudoku.tk, 1 +dailyalerts.ga, 1 dailybihar.com, 1 dailybits.be, 1 dailyblocks.com, 1 dailyblogged.com, 1 dailybusiness.tk, 1 +dailycricnews.tk, 1 dailydealika.com, 1 dailydosehealth.com, 1 dailydote.com, 1 @@ -32534,15 +32731,18 @@ dailyemailinboxing.com, 1 dailyenglishchallenge.com, 1 dailyfantasysports101.com, 1 dailyfootballpredictions.com, 1 +dailyhealthylife.ml, 1 dailyhealthylife.tk, 1 dailykos.com, 1 dailykosbeta.com, 1 dailylime.kr, 1 dailymotion.com, 1 dailynewsclubs.ga, 1 +dailynewsfrommedjugorje.ml, 1 dailyphototips.com, 0 dailypop.ru, 1 dailypost.ng, 1 +dailyreels.ga, 1 dailyrenewblog.com, 1 dailyreporters.com, 1 dailyrover.com, 1 @@ -32563,6 +32763,7 @@ daisydevbi.net, 1 daisyindia.org, 1 daisypeanut.com, 1 daisypeel.com, 1 +daisyscars.cf, 1 daiwa-union.jp, 1 daja.ml, 1 dajaks.tk, 1 @@ -32573,6 +32774,7 @@ dajiale.org, 1 dajjal.org, 1 dak.org, 1 daken.hu, 1 +daki-host.tk, 1 dakin.nyc, 1 dakindesign.com, 1 dakinnyc.com, 1 @@ -32605,6 +32807,9 @@ dalianbbq.com, 1 dalil.tk, 1 dalilu.it, 1 dalingk.com, 1 +dalkhola-city.tk, 1 +dalkhola.tk, 1 +dalkholaphotos.tk, 1 dallapartedeltorto.tk, 1 dallas.gov, 1 dallas.lu, 1 @@ -32619,6 +32824,7 @@ dallasmenshealth.com, 1 dallaspolice.gov, 1 dallastexas.ml, 1 dallaswater.gov, 1 +dallaswestinternational.ga, 1 dallatana.tk, 1 dallemon.dk, 1 dalliard.ch, 1 @@ -32629,7 +32835,6 @@ dalmatians.tk, 1 daltoncraven.com, 1 daltonohio.gov, 1 daltons.tk, 1 -dalux.com, 1 damadam.pk, 1 damag.net, 1 damaged.org, 1 @@ -32640,6 +32845,7 @@ dambo.tk, 1 dame.cf, 1 damebe.com.br, 1 damedrogy.cz, 1 +dameeq.cf, 1 dameisports.com, 1 dameshoes.it, 1 damesly.com, 1 @@ -32672,12 +32878,14 @@ dampferchef.ch, 1 dampoo.com, 1 damscheid.de, 1 damuhan.tk, 1 +damvdolg.gq, 1 dan-bureau.com, 1 dan-informacijske-varnosti.si, 1 dan-maskiner.tk, 1 dan.me.uk, 1 dan124.com, 1 dana-hilliot.tk, 1 +danadameson.tk, 1 danads.com, 1 danaglennsmith.com, 1 danalina.by, 1 @@ -32686,6 +32894,7 @@ danamica.dk, 1 danandrum.com, 1 danangcitytours.com, 1 danarozmarin.com, 1 +danashamsters.tk, 1 danbailey.com, 1 danbaldwinart.com, 1 danbarrett.com.au, 0 @@ -32733,6 +32942,8 @@ danhoej.dk, 0 danholloway.online, 1 danhotels.co.il, 1 danhotels.com, 1 +dania.gq, 1 +dania.ml, 1 daniel-ayala.tk, 1 daniel-baumann.ch, 1 daniel-beilharz.com, 1 @@ -32757,9 +32968,11 @@ danielbeilharz.com, 1 danielbeilharz.de, 1 danieldavies.co.uk, 1 danielderidderfansite.tk, 1 +danieldevine.tk, 1 danielduran.tk, 1 daniele.tech, 1 danielehniss.de, 0 +danieleluttazzi.tk, 1 danieleoneta.it, 0 danielepestilli.com, 0 danielesalatti.com, 1 @@ -32771,6 +32984,7 @@ danielgray.email, 1 danielgray.me, 1 danielgraziano.ca, 1 danielguttfreundphd.net, 1 +danielhammond.tk, 1 danielheal.net, 0 danielhinterlechner.eu, 1 danielhurley.com, 1 @@ -32824,8 +33038,10 @@ danielzuzevich.com, 1 danifabi.eu, 1 danilapisarev.com, 1 danilov-abrosimov.org.ua, 1 +danish.cf, 1 danishiqbal.tk, 1 danismaden.com, 1 +danispage.tk, 1 danituuu7.tk, 1 daniweb.com, 1 daniya.tk, 1 @@ -32853,6 +33069,7 @@ danny-rohde.de, 1 danny-tittel.de, 1 danny.fm, 1 dannycairns.com, 1 +dannycavanagh.tk, 1 dannydiamondsconcrete.com, 1 dannygaidateraelgar.com, 1 dannyhoekstra.tk, 1 @@ -32867,6 +33084,7 @@ dannystevens.co.uk, 1 dannytemming.tk, 1 dannyvanwamelen.tk, 1 dannywall.com.au, 1 +danoji.cf, 1 danonsecurity.com, 1 danotage.tv, 1 danovamix.com.br, 1 @@ -32920,11 +33138,14 @@ daoro.net, 0 daoudi.it, 1 daphne.informatik.uni-freiburg.de, 1 daphnes-restaurant.co.uk, 1 +dapianw.com, 1 dapoxetinagenerico.cf, 1 +dapoxetine.gq, 1 dapperdom.net, 1 dapps.earth, 1 dappui.com, 1 dappworld.com, 1 +daprint.tk, 1 dapursolo.tk, 1 daracokorilo.com, 1 darador.net, 0 @@ -32958,6 +33179,7 @@ dariosirangelo.me, 1 darioturchetti.me, 1 dariusheghbali.tk, 1 darix.tk, 1 +dark-ages.tk, 1 dark-archive.com, 1 dark-crystal.tk, 1 dark-dreams.tk, 1 @@ -32972,8 +33194,10 @@ dark-wolf.tk, 1 dark.direct, 1 dark.fail, 1 darkag.ovh, 1 +darkartstudios.tk, 1 darkbin.net, 1 darkboysmedia.com, 1 +darkcelebration.tk, 1 darkcores.net, 1 darkct.com, 1 darkcure.tk, 1 @@ -32985,9 +33209,13 @@ darkerlystormy.com, 0 darkerstormy.com, 0 darkestproductions.net, 1 darkfeeling.tk, 1 +darkfilm.tk, 1 darkfire.ch, 1 darkfirestudios.tk, 1 +darkforceofhappiness.tk, 1 +darkgames.cf, 1 darkgrid.eu, 1 +darkhall.tk, 1 darkhunter.eu, 1 darkhuntersworld.tk, 1 darkinvasion.tk, 1 @@ -32996,6 +33224,7 @@ darkkeepers.tk, 1 darklang.com, 1 darklaunch.com, 1 darkleia.com, 1 +darklite.ml, 1 darkmail.cf, 1 darkmanthra.tk, 1 darkmemo.com, 1 @@ -33007,6 +33236,7 @@ darknessinme.tk, 1 darknetlive.com, 1 darknight.blog, 1 darkoctoberseance.com, 1 +darkoff.tk, 1 darkotip.tk, 1 darkovepredmety.cz, 1 darkpassionsite.tk, 1 @@ -33054,6 +33284,7 @@ darrenm.net, 1 dart-tanke.com, 1 dart-tanke.de, 1 dartbeginners.tk, 1 +dartcarrousel.tk, 1 dartcode.org, 0 dartdriving.com, 1 dartergroup.com, 1 @@ -33069,9 +33300,11 @@ darwinpark.tk, 1 darwinsearch.org, 1 darxx.com, 1 darya.tk, 1 +daryl-wilcher.tk, 1 daryl.moe, 1 darylcumbo.net, 1 darylwilcher.tk, 1 +das-clanpage.tk, 1 das-efx.tk, 1 das-forum24.de, 1 das-mediale-haus.de, 1 @@ -33100,7 +33333,8 @@ dashwebconsulting.com, 1 dasignsource.com, 1 dasinternetluegt.at, 1 daskirschhaus.com, 1 -dasler.eu, 1 +dasmailarchiv.ch, 1 +dasolindustrialpark.tk, 1 dassolutions.eu, 1 dastchin.live, 1 dastchin.shop, 1 @@ -33152,6 +33386,7 @@ datacenternews.asia, 1 datacenternews.co.nz, 1 datacenternews.us, 1 datacentrenews.eu, 1 +datacentresupport.com, 1 datacloud.gq, 1 datacommissioner.gov.au, 0 datacool.tk, 1 @@ -33164,6 +33399,7 @@ dataformers.at, 0 datagate.com.br, 1 datagir.ir, 0 datagrail.io, 1 +datagrid.ga, 1 dataguidance.com, 1 dataguru.lv, 1 dataharvest.at, 1 @@ -33245,6 +33481,7 @@ datenschutzgrundverordnung.de, 1 datenschutztag.org, 1 datenschutzzentrum.de, 1 datenwerkstatt.net, 1 +datessrit.tk, 1 dating.wedding, 1 datingadvice.gq, 1 datingbedrog.tk, 1 @@ -33279,6 +33516,7 @@ datumplus.co.uk, 1 datumstudio.jp, 1 datustribe.tk, 1 datutoday.tk, 1 +datutorials.tk, 1 daubecity.de, 1 daubehosting.de, 1 daughertyplasticsurgery.com, 1 @@ -33288,6 +33526,7 @@ daum-group.de, 1 daunatotala.ro, 1 dauphincounty.gov, 1 dausendschoen.de, 1 +davalochki.tk, 1 davangarte.com, 0 davaobasic.com, 1 davd.cf, 1 @@ -33339,6 +33578,7 @@ davidband.com.au, 1 davidbranco.me, 1 davidbrito.tech, 1 davidbrookes.me, 0 +davidbyrne.tk, 1 davidcraft.de, 1 daviddegner.com, 1 daviddietrich.com, 1 @@ -33356,7 +33596,6 @@ davidfuentes.es, 1 davidgouveia.net, 1 davidgreig.uk, 1 davidgroup.co.id, 1 -davidgroup.id, 1 davidgrudl.com, 1 davidhanle.com, 1 davidinteriors.tk, 1 @@ -33382,6 +33621,7 @@ davidmocq.com, 1 davidnadaski.com, 1 davidnoren.com, 0 davidops.com, 0 +davidovskakreu.tk, 1 davidpearce.com, 1 davidpearce.org, 1 davidpescarolo.it, 1 @@ -33390,7 +33630,6 @@ davidritchie.tk, 1 davids.online, 1 davidschadlich.com, 1 davidscherzer.at, 1 -davidschlachter.com, 1 davidsdika.com, 1 davidsimner.me.uk, 1 davidson-berquist.com, 1 @@ -33404,10 +33643,13 @@ davidsun.name, 1 davidtiffany.com, 1 davidundetiwan.com, 1 davidvig.com, 1 +davidvilla.tk, 1 +davidzarza.tk, 1 davidzeegers.nl, 1 davidzimmerman3.com, 1 davie3.com, 1 davimun.org, 1 +davinamccall.tk, 1 daviscannabisco.com, 1 daviscountyiowa.gov, 1 davisdieselandautorepair.com, 1 @@ -33421,6 +33663,7 @@ davros.eu, 1 davros.ru, 1 davulcuyuz.com, 1 davy-server.com, 1 +davyatletiek.tk, 1 davyjones.com.br, 1 davyjonesatacado.com.br, 1 davypropper.com, 1 @@ -33466,6 +33709,7 @@ dayofdays.be, 0 dayofthegirl.gc.ca, 1 days.one, 1 dayslater.tk, 1 +daysnews.tk, 1 daysoftheyear.com, 1 dayswithnostabbings.ca, 1 daytonahealthsolutions.com, 1 @@ -33533,6 +33777,7 @@ dbsbeautystore.cl, 1 dbsinergy.tk, 1 dbt3ch.com, 1 dbtechreviews.com, 1 +dbtotalnet.tk, 1 dbtsai.com, 0 dbtunder.tk, 1 dbw678.com, 1 @@ -33547,7 +33792,6 @@ dc-service.by, 1 dc-solutions.at, 1 dc-texas.com, 1 dc-zone.com, 1 -dc585.info, 1 dc7342.im, 1 dcain.me, 1 dcards.in.th, 1 @@ -33638,6 +33882,7 @@ ddosolitary.org, 1 ddproxy.cf, 1 ddracepro.net, 1 ddy.tw, 1 +de-basiliek.tk, 1 de-google-ify.org, 1 de-groot.it, 1 de-haas.dk, 1 @@ -33674,6 +33919,7 @@ deadpulse.com, 1 deadpvp.eu, 1 deadroot.tk, 1 deadsamaritan.tk, 1 +deadsea.tk, 1 deadshortaudio.com, 1 deadspin.com, 1 deaf.dating, 1 @@ -33701,7 +33947,8 @@ dealsmagnet.com, 1 dealstream.com, 1 dealstreet.fr, 1 dealzme.com, 1 -deamuseum.org, 0 +deamonmail.tk, 1 +deamsterdam.ml, 1 deanandnatalia.co.za, 1 deanbank.com, 1 deanconsultancy.co.uk, 1 @@ -33720,8 +33967,10 @@ deasyvow.com, 1 death.social, 1 deathberry.ddns.net, 1 deathcult.fun, 1 +deathlords.tk, 1 deathmarch.tk, 1 deathofspring.com, 0 +deathrockstar.tk, 1 deathsdomain.com, 1 deathwar.tk, 1 deathwarrior.tk, 1 @@ -33729,6 +33978,7 @@ deathy.ro, 1 deavel.com, 1 deavel.fr, 1 deavel.net, 1 +deavon.tk, 1 debacker.biz, 1 debarkader34.tk, 1 debarras-diogene.paris, 1 @@ -33740,6 +33990,7 @@ debarrascolombes.com, 1 debarrasnanterre.com, 1 debashishsahu.com, 1 debatereport.com, 1 +debats.tk, 1 debattinnlegg.no, 1 debauchery.ml, 1 debbiesblog.nl, 1 @@ -33765,6 +34016,7 @@ deblocking.ga, 1 debora-singkreis.de, 1 deborahkaty.tk, 1 deborahmarinelli.eu, 1 +debostero.tk, 1 deboutpourlemali.ml, 1 debraydesign.com.au, 1 debricked.com, 1 @@ -33803,8 +34055,10 @@ decibelnewmusic.com, 1 decide.hopto.org, 1 decidetreatment.org, 1 decimatechnologies.eu, 1 +decimation.tk, 1 decipe.com, 1 decis.fr, 1 +decisionssometimes.ml, 1 decisiontime.online, 0 decisivetactics.com, 1 decisora.com, 1 @@ -33835,6 +34089,7 @@ decoratingadvice.co.uk, 1 decorations-elmotamaiz.com, 1 decoratiunidulci.ro, 1 decorativeconcretewa.com.au, 1 +decorativecosmetics.tk, 1 decorativeflooring.com, 1 decorator.uk, 1 decoratore.roma.it, 1 @@ -33860,6 +34115,7 @@ dedelta.net, 1 dedeo.tk, 1 dedg3.com, 1 dedge.org, 1 +dedicatedservers.cf, 1 dedicatedtowomenobgyn.com, 1 dedirten.com, 0 dedmoroz.ga, 1 @@ -33926,6 +34182,8 @@ deepsoulutions.ga, 1 deepsoulutions.gq, 1 deepsoulutions.ml, 1 deepspace.dedyn.io, 1 +deepu-mathew.tk, 1 +deepumathew.tk, 1 deepvalley.tech, 1 deepwoodshop.com, 1 deerfieldapartmentsstl.com, 1 @@ -33957,6 +34215,7 @@ defensefrontit.com, 1 defenseweapon.tk, 1 defensie.tk, 1 defensivefirearmsinstruction.org, 1 +defensoresunidos.tk, 1 defero.io, 1 defesaaereanaval.com.br, 1 deffo.com.au, 0 @@ -33966,6 +34225,7 @@ defietsambassade.be, 1 defietsambassade.gent, 1 defietsambassadegent.be, 1 defifa.ga, 1 +defile.ml, 1 defiler.tk, 1 defimetier.fr, 1 define-atheism.com, 1 @@ -34024,6 +34284,7 @@ degrasboom.nl, 1 degrasboom.org, 1 degravel.net, 1 degreecollege.tk, 1 +degreeducation.tk, 1 degressif.com, 1 degroetenvanrosaline.nl, 1 degrootenslot.nl, 0 @@ -34057,6 +34318,8 @@ deitti.net, 1 deja-lu.de, 1 dejandayoff.com, 1 dejaren80.tk, 1 +dejavu.ml, 1 +dejected.ga, 1 dejfcold.cz, 1 dejiren.com, 1 dejmidarek.cz, 1 @@ -34090,6 +34353,8 @@ delavega.ua, 1 delawarehealth.tk, 1 delawarenation-nsn.gov, 1 delay-dengi.cf, 1 +delaydengy.tk, 1 +delaysoft.tk, 1 delbecqvo.be, 1 delcampomercado.com, 1 delcan.ga, 1 @@ -34102,11 +34367,13 @@ delduca.casa, 1 deleesanghers.tk, 1 delegao.moe, 1 deleidscheflesch.nl, 1 +delete.cf, 1 deletebin.com, 1 deletebin.org, 1 deletecat.com, 1 delfi.lt, 1 delfic.org, 1 +delfinus.tk, 1 delftstudy.nl, 1 delhicleanairforum.tk, 1 delhionlinegifts.com, 1 @@ -34134,6 +34401,7 @@ delitefully.com, 1 delitto.top, 1 deliuksta.lt, 1 deliverability.guru, 1 +delivereasy.tk, 1 deliveryman.site, 1 delivr.com, 1 delkomrockdrill.com, 1 @@ -34147,6 +34415,7 @@ delmation.nl, 0 delofderonvolmaaktheid.tk, 1 delogo.nl, 1 deloittequant.com, 0 +delontewest.tk, 1 delopt.co.in, 1 delorenzi.dk, 1 deloretta.com, 1 @@ -34154,6 +34423,7 @@ delosgaia.nl, 1 delpark.de, 1 delphia.ai, 1 delphia.com, 1 +delphibasics.tk, 1 delphinarabic.tk, 1 delphine.dance, 1 delpilarrungue.cl, 1 @@ -34195,10 +34465,10 @@ deltaworkssecurity.com, 1 deltaworkssecurity.nl, 1 deltna.com, 1 delunee.co, 1 +deluxe-bot.tk, 1 deluxe-dubai.com, 1 deluxecar.fr, 1 deluxewindowanddoor.com, 1 -deluxthaispa.ru, 1 delvemagazine.ca, 1 delvinoadegas.com.br, 1 delycate.com, 1 @@ -34222,6 +34492,7 @@ dementieva-pennetta.tk, 1 dementievriendelijk.gent, 1 dementievriendelijkgent.be, 1 demes.tk, 1 +demesos.tk, 1 demetra-site.com.ua, 1 demeyere-usedcars.be, 1 demfloro.ru, 1 @@ -34238,9 +34509,11 @@ demisch-tim.de, 1 demischtim.de, 1 demish.tk, 1 demmer.one, 1 +demo-ferma.ga, 1 demo.sb, 1 demo.swedbank.se, 1 democracy-news.tk, 1 +democracy.cf, 1 democracychronicles.com, 1 democracydirect.com, 1 democracyineurope.eu, 1 @@ -34249,12 +34522,16 @@ democraziaineuropa.eu, 1 demodata.eu, 1 demodoka.ddns.net, 1 demografia.tk, 1 +demokisisel.tk, 1 +demokrasi.tk, 1 demolandia.net, 1 demomanca.com, 1 demonbuster.tk, 1 demondms.com, 1 +demonforums.tk, 1 demoniak.ch, 0 demonicademorte.tk, 1 +demonicresurrection.tk, 1 demonics.tk, 1 demonized.tk, 1 demonmassacre.tk, 1 @@ -34262,6 +34539,7 @@ demonologyfieldguide.com, 1 demonstrably.live, 1 demontage.tk, 1 demonwav.com, 1 +demonwithin.tk, 1 demonwolfdev.com, 1 demopanel.tk, 1 demostweb.ga, 1 @@ -34290,13 +34568,18 @@ denarium.com, 1 denatured.tk, 1 denbkh.ru, 0 dencel.lv, 1 +denchik.tk, 1 dendi.tk, 1 dendibanget.tk, 1 +denegka-mgnovenno.cf, 1 denegmnogo.tk, 1 denejki.tk, 1 denet.pro, 1 dengg.name, 1 +dengidoma24.ml, 1 dengisam.ru, 1 +dengisrazu.tk, 1 +dengivdolg.ml, 1 dengivdolg.tk, 1 dengivdom.tk, 1 dengyt.net, 1 @@ -34308,6 +34591,7 @@ denimtoday.com, 1 denince.net, 1 denisaadolfova.com, 1 denisadinu.com, 1 +denisdimoski.tk, 1 denisewakeman.com, 1 denisglobal.com, 1 denisgrandverger.de, 1 @@ -34318,6 +34602,7 @@ denissealatinsoul.com, 1 denistruffaut.fr, 0 denisyakovlev.ga, 1 denisyakovlev.ml, 1 +denisyan.ml, 1 deniszczuk.pl, 1 deniz.uk, 1 denizdesign.co.uk, 1 @@ -34343,6 +34628,7 @@ dennisdoes.net, 0 dennishenrique.com.br, 1 dennishzg.com, 1 denniskoot.nl, 1 +dennislicht.tk, 1 dennismurphy.biz, 1 dennisrubin.tk, 1 dennisswiers.tk, 1 @@ -34364,6 +34650,7 @@ dental-colleges.com, 1 dental.gq, 1 dentalboutique.com.au, 1 dentalcareerfinder.com, 1 +dentalcolleges.tk, 1 dentalelegance.co.uk, 1 dentaloptimizer.com, 1 dentalreklamlari.tk, 1 @@ -34371,6 +34658,7 @@ dentals.cf, 1 dentalsupportuk.com, 1 dentaltalent.nl, 1 dentalturism.com, 1 +dented.gq, 1 dentelegan.com, 1 dentist-profi.ga, 1 dentistaaroma.com, 1 @@ -34391,6 +34679,7 @@ denuevestore.com, 1 denugka-vezde.gq, 1 denugka-vezde.tk, 1 denunzieren.tk, 1 +denver-design.cf, 1 denver.tk, 1 denverbph.com, 1 denverclassifieds.net, 1 @@ -34455,6 +34744,8 @@ depone.net, 0 depop.com, 1 deported.ml, 1 deportes.in, 1 +deportestalcahuano.tk, 1 +deportivo-pasto.tk, 1 depositart.com, 1 depositomerci.it, 1 depositomobili.it, 1 @@ -34519,8 +34810,10 @@ derincocuk.com, 1 derinsular.tk, 1 derivativeshub.pro, 1 derive.cc, 0 +derive.cf, 1 derk-jan.com, 0 derkach.io, 1 +derkarl.tk, 1 derkuki.de, 1 derlux.tk, 1 dermacarecomplex.com, 1 @@ -34533,6 +34826,7 @@ dermato.floripa.br, 1 dermatolog-ivanova.com, 1 dermatologie-morges.ch, 0 dermaup.it, 1 +dermax.tk, 1 dermedia.tk, 1 dermediq.nl, 1 dermnet.ai, 1 @@ -34553,6 +34847,8 @@ derpicdn.net, 1 derpy.pp.ua, 1 derre.fr, 1 derreichesack.com, 1 +derrybasketball.tk, 1 +dersimizmatematik.cf, 1 dersoundhunter.de, 1 derssonu.com, 1 derstulle.de, 1 @@ -34590,6 +34886,7 @@ desertbluffs.com, 1 desertfiredesigns.com, 1 desertfury.tk, 1 desertgrove.com, 1 +deserti.tk, 1 desertlinealuminium.com, 1 desertlinegroup.com, 1 desertmedaesthetics.com, 1 @@ -34600,6 +34897,7 @@ desgenst.ch, 1 deshevle-net.com, 1 deshiread.com, 1 deshobi.cloud, 1 +desiderantes.tk, 1 desideriushogeschool.be, 1 design-in-bad.eu, 1 design-n-art.tk, 1 @@ -34638,6 +34936,7 @@ designrhome.com, 1 designs.codes, 1 designsbyjanith.com, 1 designsite.tk, 1 +designsociety.tk, 1 designtrc.com, 1 designville.cz, 1 designville.sk, 1 @@ -34647,6 +34946,7 @@ desinfectionfrance.com, 1 desingslash.tk, 1 desipandora.com, 1 desiplex.tk, 1 +desire-host.tk, 1 desiree-lauber.de, 0 desirememory.cf, 1 desish.cf, 1 @@ -34703,6 +35003,7 @@ destom.be, 1 destreekboer.ml, 1 destroyed.ga, 1 destroyed.tk, 1 +destroysilence.cf, 1 destroysilence.ga, 1 destroysilence.gq, 1 destroysilence.ml, 1 @@ -34725,6 +35026,7 @@ detailingsp.com, 1 detakhukum.com, 1 detalika.ru, 1 detao.org, 1 +detc.tk, 1 detdom.tk, 1 detecmon.com, 1 detecte-fuite.ch, 0 @@ -34758,8 +35060,12 @@ detroit-english.de, 1 detroit.gov, 1 detroitjockcity.com, 1 detroitlocksmiths.net, 1 +detroitnews.tk, 1 detroitzoo.org, 1 +detsad.ml, 1 +detsad.tk, 1 detski.center, 1 +detskie-avto-kresla.tk, 1 detskysad.com, 1 detuinmuze.nl, 1 detusmascotas.com, 1 @@ -34774,6 +35080,8 @@ deuelcountyne.gov, 1 deunanube.com, 1 deurenfabriek.nl, 1 deurwaarderhelmond.nl, 1 +deustech-media.tk, 1 +deustech.tk, 1 deutex.fr, 1 deutsch-vietnamesisch-dolmetscher.com, 1 deutsche-tageszeitungen.de, 1 @@ -34803,15 +35111,18 @@ dev.moe, 1 dev.vu, 1 devafterdark.com, 1 devagency.fr, 1 +devahi.gq, 1 devalkincentives.nl, 1 devalps.eu, 1 devanstavern.tk, 1 devapi.pro, 1 devastacion.tk, 1 devcf.com, 1 +devchuli.ml, 1 devconf.nl, 1 devdeb.com, 1 devdesco.com, 1 +devdomain.cf, 1 devdoodle.net, 1 deve.software, 1 devel.cz, 1 @@ -34833,6 +35144,7 @@ develops.co.il, 1 develoself.ga, 1 develoupe.com, 1 develux.net, 1 +devendradox.ml, 1 devendrameena.tk, 1 devensys.com, 1 devenv.ml, 1 @@ -34874,10 +35186,12 @@ devlogr.com, 1 devloope.com, 1 devmanagersest.ga, 1 devmode.fm, 1 +devnet.tk, 1 devnull.team, 1 devnull.win, 1 devnull.zone, 1 devoc.net, 1 +devochki.ga, 1 devolution.ws, 1 devoncycles.co.uk, 1 devonport.tas.gov.au, 1 @@ -34887,6 +35201,7 @@ devopedia.org, 1 devopers.com.br, 1 devopsbookmarks.org, 1 devopsish.com, 1 +devos.ml, 1 devoted-atheist.tk, 1 devoteschlampe.net, 1 devotional.tk, 1 @@ -34921,11 +35236,13 @@ devtoys.ru, 1 devtty.org, 1 devuan.org, 0 devurandom.tk, 1 +devushki.cf, 1 devxify.com, 1 devyanijayakar.com, 1 devz.life, 1 dewalch.net, 1 dewapress.com, 1 +dewblog.ml, 1 dewereldvankina.be, 1 dewereldwerktthuis.com, 1 dewereldwerktthuis.eu, 1 @@ -34940,6 +35257,7 @@ dewittmi.gov, 1 dewka.tk, 1 dewolden.nl, 0 dexalo.de, 1 +dexcellentesidees.tk, 1 dexerto.com, 1 dexerto.es, 0 dexerto.fr, 0 @@ -34952,6 +35270,7 @@ dextermarket.com, 1 dexterseries.ru, 1 dextra.tk, 1 deyaar-sl.com, 1 +deyanadeco.com, 1 deyute.com, 1 dezea.net, 1 dezeregio.nl, 1 @@ -35018,6 +35337,7 @@ dggb.co.in, 1 dggm.ru, 1 dgl-24.de, 1 dgli.org, 1 +dgmedia.tk, 1 dgmutual.co.uk, 1 dgner.com, 1 dgo.co.il, 1 @@ -35037,6 +35357,7 @@ dh6729.com, 1 dh9397.com, 1 dh9721.com, 1 dhakawebhost.com, 1 +dhamdhamaanchalikcollege.tk, 1 dhammacitta.org, 1 dhanushtechno.in, 1 dharamkot.com, 1 @@ -35074,10 +35395,12 @@ dia-de.com, 1 dia.com.br, 1 dia.run, 1 diabetessucks.net, 1 -diabhal-staff.com, 1 diableros.tk, 1 +diables-noirs.tk, 1 +diablescastell.tk, 1 diabline.tk, 1 diablocarpet.com, 1 +diablos-obon.tk, 1 diabolic.chat, 1 diabolique.pt, 1 diaconat.ch, 0 @@ -35153,6 +35476,7 @@ diariosurnoticias.com, 1 diaroma.it, 1 diaryspace.tk, 1 diasdasemana.com, 1 +diasporan.cf, 1 diasporan.ga, 1 diasporan.gq, 1 diasporan.ml, 1 @@ -35198,6 +35522,9 @@ dicksakowicz.com, 1 diclofenac-75mg.ga, 1 diclofenacgel.cf, 1 diclofenacgel.ml, 1 +diclofenacgel1.tk, 1 +diclofenaconline.gq, 1 +diclofenactopical.ga, 1 diclofenactopical.tk, 1 dico-charentais.tk, 1 dicoado.org, 1 @@ -35272,6 +35599,7 @@ diegobarrosmaia.com.br, 1 diegocastagna.com, 1 diegoforlan.tk, 1 diegogelin.com, 0 +diegogranada.tk, 1 diegoisla.ga, 1 diegomeza.tk, 1 diegosalgado.tk, 1 @@ -35307,6 +35635,7 @@ diespark.com, 1 diesse.nl, 0 diesteppenreiter.de, 1 dieta-figura.tk, 1 +dietandexercises.tk, 1 dietbrand.eu, 1 dieter.one, 1 dieterglas.de, 1 @@ -35314,6 +35643,8 @@ dietergreven.de, 0 dietfordiabetics.tk, 1 diethood.com, 1 dieti-natura.com, 1 +dieti.ga, 1 +dieti.gq, 1 dieti.net, 1 dietitianmeetsmom.com, 1 dietitiansidehustle.com, 1 @@ -35334,8 +35665,12 @@ different.cz, 1 differenta.ro, 1 differentgirleveryday.ml, 1 differenziare.it, 1 +difficulty.ga, 1 diffnow.com, 1 +diflucangeneric.ml, 1 diflucanonline.tk, 1 +diflucanpill.ga, 1 +difon.tk, 1 difoosion.com, 1 difusionesnocomerciales.tk, 1 difusionmetalera.tk, 1 @@ -35409,8 +35744,10 @@ digitai.net, 1 digital-agency360.com, 1 digital-compounds.com, 1 digital-cs.tk, 1 +digital-e-library.tk, 1 digital-eastside.de, 1 digital-echo.io, 1 +digital-home.tk, 1 digital-insurance-engine.com, 1 digital-insurance-engine.de, 1 digital-insurance-platform.com, 1 @@ -35437,6 +35774,7 @@ digitalallies.co.uk, 1 digitalandsocialmediaacademy.com, 1 digitalarchitecture.com, 1 digitalbang.gr, 1 +digitalbd.tk, 1 digitalbitbox.com, 1 digitalblood.eu, 1 digitalbox.jp, 0 @@ -35462,6 +35800,7 @@ digitaldeli.us, 1 digitaldeliarchive.com, 1 digitaldem.it, 1 digitaldesign.ga, 1 +digitaldisaster.tk, 1 digitaldruck.info, 1 digitale-bibliothek.tk, 1 digitale-oekonomie.ch, 1 @@ -35489,8 +35828,11 @@ digitalgeckos.com, 1 digitalgeek.social, 1 digitalgov.gov, 1 digitalgyan.org, 1 +digitalgymnastics.tk, 1 digitalhabitat.io, 0 +digitalhands.tk, 1 digitalhealth.gov.au, 1 +digitalheart.tk, 1 digitalhurricane.io, 0 digitaliandm.com, 1 digitalid-sandbox.com, 1 @@ -35515,6 +35857,7 @@ digitalmarketingindallas.com, 1 digitalmarketingnetic.com, 1 digitalmarketingrocks.com, 0 digitalmind.su, 1 +digitalninja.tk, 1 digitalnomadsunderground.com, 1 digitalphone.tk, 1 digitalphoto.group, 1 @@ -35549,6 +35892,7 @@ digitaltcertifikat.dk, 1 digitaltech.vip, 1 digitaltepee.co.uk, 1 digitaltry.tk, 1 +digitalupcoming.tk, 1 digitalvag.tk, 1 digite.com, 1 digitec.ch, 1 @@ -35563,7 +35907,9 @@ digitreads.com, 1 digitren.co.id, 0 digityp.fi, 1 digitypa.fi, 1 +digivan.ml, 1 digminecraft.com, 1 +dignity.tk, 1 digpath.co.uk, 1 digpubdev.org, 1 digpubprd.org, 1 @@ -35611,7 +35957,6 @@ dima.pm, 0 dimagrimentoincorso.it, 1 dimanss47.net, 1 dimaweb.tk, 1 -dimdata.com, 1 dime-staging.com, 1 dimensionjapon.tk, 1 dimensions-ohs.com, 1 @@ -35643,6 +35988,7 @@ dimomaint.de, 1 dimomaint.es, 1 dimosoftware.fr, 1 dimseklubben.dk, 1 +dinamikarosta.ml, 1 dinamofilms.cl, 1 dincemlakmerkez.ga, 1 dind.one, 1 @@ -35698,7 +36044,9 @@ dipanshuparashar.ml, 1 dipdaq.com, 1 dipietro.id.au, 1 dipling.de, 1 +diplom-ru.tk, 1 diplomatcruises.co.uk, 1 +diplomatiegabon.ga, 1 diplona.de, 1 dipro.id, 1 dipsytroller.com, 1 @@ -35722,6 +36070,7 @@ directinspectionskc.com, 1 directlendingsolutions.com, 1 directlinkfunding.co.uk, 1 directlook.tk, 1 +directly.ga, 1 directmailctr.com, 1 directme.ga, 1 directmedica.fr, 1 @@ -35733,12 +36082,15 @@ directorios.tk, 1 directoriostelefonicos.com, 1 directorioz.com, 1 directorwebseo.tk, 1 +directory-aldo.tk, 1 +directory-ecco.tk, 1 directory-sunglasses.tk, 1 directorydashboard.ga, 1 directorydisc.cf, 1 directorydisc.ga, 1 directoryg.com, 1 directoryworld.tk, 1 +directpaydayloansonline.ga, 1 directreal.sk, 1 directspa.fr, 1 directstreet.tk, 1 @@ -35766,10 +36118,14 @@ dirtcraft.ca, 1 dirtinmyshoes.com, 1 dirty-tina.net, 1 dirtycat.ru, 1 +dirtycode.tk, 1 dirtycosplay.com, 1 dirtygeek.ovh, 1 +dirtygirl.ml, 1 dirtyherri.de, 1 dirtymusic.tk, 1 +dirtyporno.tk, 1 +dirtypretties.cf, 1 dirtypretties.ga, 1 dirtypretties.gq, 1 dirtypretties.ml, 1 @@ -35833,9 +36189,11 @@ discordextremelist.xyz, 1 discordghost.space, 1 discordhome.com, 1 discordservers.com, 1 +discordsworld.tk, 1 discotecamadrid.com, 1 discotheque.tk, 1 discount-course.com, 1 +discountforelectronics.tk, 1 discountisolatie.nl, 1 discounto.de, 1 discountpark.fr, 1 @@ -35847,6 +36205,7 @@ discover-mercure.com, 1 discover-shaken.com, 1 discoverapp.com, 1 discoverasr.com, 1 +discoveraustralia.tk, 1 discoverbrampton.co.uk, 1 discoverchinanow.cf, 1 discoverchinanow.ga, 1 @@ -35975,6 +36334,7 @@ disrupters.ch, 0 disruption.tk, 1 dissectix.io, 1 dissertationhelp.com, 1 +dissidence.ovh, 1 dissident.host, 1 dissieux.com, 1 dissolution-sci.com, 1 @@ -36042,6 +36402,7 @@ ditissaskia.nl, 1 dittvertshus.no, 1 div12.org, 1 divacresent.tk, 1 +divanmsk.ru, 1 divari.nl, 1 divatri.tk, 1 divcoder.com, 1 @@ -36810,7 +37171,6 @@ dojocasts.com, 1 dojodigital.co.uk, 1 dojozendebourges.fr, 1 dokanline.com, 1 -dokasen.com, 1 dokcar.com.br, 1 dokee.cn, 1 dokelio-idf.fr, 1 @@ -37108,7 +37468,6 @@ donnons.org, 0 donnoval.ru, 0 donostiweb.tk, 1 donotdepart.com, 1 -donotlink.it, 1 donpanda.cz, 1 donpietraos.tk, 1 donpomodoro.com.co, 1 @@ -37399,7 +37758,6 @@ dowellconsulting.com, 1 dowhatmakegood.de, 1 dowhatyoucannow.com, 1 dowin.at, 1 -dowina.org, 1 dowling.nz, 1 dowling.tk, 1 down-load.dynu.net, 1 @@ -37676,7 +38034,6 @@ drchristaengelbrecht.com, 1 drchristophepanthier.com, 0 drclub.tk, 1 drcp.tokyo, 1 -drcrhub.com, 1 drdavidricketts.com, 1 drdeath.tk, 1 drdegenhart.de, 1 @@ -38426,7 +38783,6 @@ dunkle-seite.org, 1 dunlaptn.gov, 1 dunmanelectric.com, 1 dunmanpoolandspa.com, 1 -dunneworthy.com, 1 dunningtonaudio.co.uk, 1 dunyahalleri.com, 1 duo-tauceti.com, 1 @@ -38815,6 +39171,7 @@ e-gc.de, 1 e-generator.tk, 1 e-geologia.tk, 1 e-guardian.com.br, 1 +e-guvence.com, 1 e-hair.tk, 1 e-havenotime.tk, 1 e-homebiz.tk, 1 @@ -39510,7 +39867,6 @@ eb-net.de, 1 eb7.jp, 1 eba.com.au, 1 eba.com.ua, 1 -ebabis.cz, 1 ebagroup.tk, 1 ebaifzf.com.br, 1 eban.bzh, 1 @@ -39562,6 +39918,7 @@ ebjork.se, 1 ebki-nsn.gov, 1 eblan.gq, 1 eblog.cf, 1 +eblog.ink, 1 ebola-hosting.cz, 1 ebolacharts.ga, 1 ebolavirus.tk, 1 @@ -40939,7 +41296,6 @@ elevanhairdressing.co.uk, 1 elevateandprosper.com, 1 elevated-esthetics.com, 1 elevatedarborcare.com.au, 1 -elevatedconstructionltd.com, 1 elevatenutrition.com, 1 elevationcreative.net, 1 elevationplumbingandheating.com, 1 @@ -41409,7 +41765,6 @@ emergency-broadcast-system.tk, 1 emergency-federal-register.gov, 1 emergencyautolocksmithmanchester.com, 0 emergencycommand.us, 1 -emergencyplumbertoronto.com, 1 emergencyportal.tk, 1 emergentvisiontec.com, 1 emergenzaduepuntozero.it, 1 @@ -41917,7 +42272,6 @@ enginx.net, 1 enginytech.com, 1 engione.com, 1 engl-amps.com, 1 -engl-amps.de, 1 engl-amps.net, 1 engl-customshop.com, 1 engl-customshop.de, 1 @@ -42820,7 +43174,7 @@ esoterikerforum.de, 1 espace-caen.fr, 0 espace-gestion.fr, 1 espace-habitat-francais.fr, 1 -espace-orenda.ch, 1 +espace-orenda.ch, 0 espace-vet.fr, 1 espace.network, 1 espace.spb.ru, 0 @@ -43643,7 +43997,6 @@ evolutionpets.com, 1 evolutive-records.tk, 1 evoluzione.fr, 1 evolvedevlabs.de, 1 -evolvetechnologies.co.uk, 1 evolvicity.org, 1 evolvingsouls.com, 1 evolvingthoughts.net, 1 @@ -44125,7 +44478,6 @@ eyecon.gr, 1 eyedea.ga, 1 eyedesignuniversity.com, 1 eyeglasses.com, 0 -eyejobs.com.au, 0 eyelash-mc.com, 1 eyelash-navi.com, 1 eyelash.tk, 1 @@ -44606,6 +44958,7 @@ fahrenwalde.de, 1 fahrschule-laux.de, 1 fahrwerk.io, 1 fahrzeug-talk.de, 1 +fai.gov, 1 faidanoi.it, 1 faidatefacile.it, 1 faieurope.it, 1 @@ -44886,6 +45239,7 @@ fansale.de, 1 fanschic.com, 1 fansided.com, 1 fansta.jp, 1 +fanstuff.ru, 1 fantacast.it, 1 fantasea.pl, 1 fantasiapainter.com, 1 @@ -46188,6 +46542,7 @@ financecontrol.tk, 1 financedepth.com, 1 financedraft.com, 1 financeguest.com, 1 +financehindi.com, 1 financeinterface.tk, 1 financejobs.ch, 1 financelong.com, 1 @@ -46390,7 +46745,6 @@ firebirdrangecookers.com, 1 firebounty.com, 1 fireboxfood.com, 1 firebrandchurch.com, 1 -firebugmusic.com, 1 firecask.com, 1 firechip.cc, 1 firechip.srl, 1 @@ -46503,6 +46857,7 @@ firstmarket.tech, 1 firstname.tk, 1 firstnet.gov, 1 firstnetwork.cf, 1 +firstnetworksouth.com, 1 firstphilec.com, 1 firstplace.ga, 1 firstq.xyz, 1 @@ -47164,7 +47519,6 @@ flowscale.com, 1 flowstars.tk, 1 flowstudios.com, 1 flowtex.tk, 1 -flowyapi-dev.azurewebsites.net, 1 flowyapp-dev.azurewebsites.net, 1 flox.io, 1 floydcountyga.gov, 1 @@ -47797,7 +48151,6 @@ formforger.com, 1 formhub.ru, 1 formi9.com, 1 formingequipment.tk, 1 -formini.dz, 1 formio.nl, 1 formodernkids.com, 1 formommiesbymommy.com, 1 @@ -47814,6 +48167,7 @@ formulacionquimica.com, 1 formulastudent.de, 1 formulaveevictoria.com.au, 1 formup.com.pl, 1 +formvibes.com, 1 fornarisandres.com, 1 fornata.it, 1 foro-coopfuture.tk, 1 @@ -48035,7 +48389,6 @@ fotografies.tk, 1 fotografija.tk, 1 fotografoivanalmeida.com.br, 1 fotohiking.com, 1 -fotohome.dk, 1 fotojenico.com, 1 fotokomorkomania.pl, 1 fotokorner.com, 1 @@ -48808,6 +49161,7 @@ frescamezcla.tk, 1 frescobol.tk, 1 fresh-hotel.org, 1 fresh-info.cf, 1 +fresh-info.gq, 1 fresh-info.tk, 1 fresh-networks.net, 1 fresh.co.il, 1 @@ -48975,6 +49329,7 @@ frogatto.com, 1 frogeye.fr, 1 froggitt.com, 1 frogsonamission.de, 1 +frogstage.com, 1 frogtown.capital, 1 froh-s.com, 1 froh.co.jp, 1 @@ -49636,6 +49991,7 @@ futureville.city, 1 futurewithoutfear.com, 1 futurewithoutfear.org, 1 futurewithoutfear.us, 1 +futureyouhealth.com, 1 futurezone.at, 1 futuristacademy.io, 1 futuristicarchitectures.tk, 1 @@ -49679,7 +50035,7 @@ fwup.org, 1 fx-rating.com, 1 fx-rk.com, 1 fxbrokerreview.org, 1 -fxe.pt, 1 +fxe.pt, 0 fxeuropa.com, 1 fxgame.online, 1 fxislamic.com, 1 @@ -49801,6 +50157,7 @@ gabaldon.nl, 1 gabapentin.gq, 1 gabbeh.jp, 1 gabby-online.tk, 1 +gabby.vn, 1 gabbyer.ga, 1 gabbyer.gq, 1 gabbyer.ml, 1 @@ -50007,6 +50364,7 @@ galilahiskye.com, 1 galilei.tk, 1 galileicompara.com, 1 galileo.io, 1 +galileohealth.com, 1 galim.org.il, 1 galina.ga, 1 galinas-blog.de, 1 @@ -50115,7 +50473,6 @@ gamegix.com, 1 gamegoddess.cf, 1 gamegoddess.tk, 1 gamegoone.tk, 1 -gamegossips.com, 1 gamegrad.tk, 1 gameharbor.eu, 1 gamehighquality.tk, 1 @@ -50493,7 +50850,6 @@ gatlink.tk, 1 gatolovers.es, 1 gatomix.net, 1 gatoslivres.org, 1 -gatot.id, 0 gattomatto.tk, 1 gauche.com, 1 gaudeamus-folklor.cz, 1 @@ -51173,7 +51529,6 @@ georgewatson.me, 1 georgewbushlibrary.gov, 1 georgiaaccess.gov, 1 georgiaautoglass.net, 1 -georgiabonepc.com, 1 georgiacriminaldefense.com, 1 georgiaglassrepair.com, 1 georgiainfo.ga, 1 @@ -51306,7 +51661,6 @@ gestionadministrativevirtuelle.com, 1 gestionth.com, 1 gestorehotel.com, 1 gestorestecnologicos.com, 1 -gestormensajeria.com, 1 gestus.co, 1 gestus.tk, 1 gesundessen.at, 1 @@ -51450,7 +51804,6 @@ getpublii.com, 1 getrambling.com, 1 getready2dance.tk, 1 getreadyforever.tk, 1 -getredem.io, 1 getrelish.com, 1 getresilience.org, 1 getsamegoal.com, 1 @@ -51462,7 +51815,6 @@ getsetbounce.co.uk, 1 getshouse.com, 1 getsilknow.com, 1 getsimone.online, 1 -getsmartaboutdrugs.gov, 0 getsmartlife.in, 1 getsmartlook.com, 1 getsocreative.com, 1 @@ -51999,7 +52351,7 @@ gjcampbell.co.uk, 1 gjengset.com, 1 gjnoonan.co.uk, 1 gjspunk.de, 0 -gjung.com, 0 +gjung.com, 1 gkbm.com, 1 gkconsultancy.tk, 1 gkdk.se, 1 @@ -52544,7 +52896,6 @@ goetzinger-web.de, 1 goffrie.com, 1 gofigure.fr, 0 gofile.io, 1 -gofile.link, 1 goflix.cf, 1 goflo.net, 1 gofobo.com, 1 @@ -52584,7 +52935,6 @@ goingreen.com.au, 1 goiymua.com, 1 goizalde.tk, 1 gojo.global, 1 -gojoy.vn, 1 gokazakhstan.com, 1 gokhankesici.com, 1 gokkastenstip.nl, 1 @@ -53700,7 +54050,7 @@ greyheads.cat, 1 greyline.tk, 1 greymatteroffline.tk, 1 greymattertechs.com, 1 -greypanel.com, 0 +greypanel.com, 1 greyrectangle.com, 1 greyskymedia.com, 1 greystonesmovement.com, 1 @@ -53752,6 +54102,7 @@ grillen-darf-nicht-gesund-sein.de, 1 grillfocused.com, 1 grillidellostretto.tk, 1 grilllness.com, 1 +grilltanksplus.com, 1 grillteller42.de, 1 grimdarkterrain.com, 1 grimetoshinecleaners.co.uk, 1 @@ -54152,6 +54503,7 @@ guelphhydropool.com, 1 guendra.dedyn.io, 1 guenther-freitag.tk, 1 guenthereder.at, 1 +guepardoinvest.com.br, 1 guerard.info, 1 guercioarchitecture.com, 1 guernica1913.tk, 1 @@ -54877,6 +55229,7 @@ haku.farm, 1 haku.vn, 1 hakufarm.vn, 1 hakugin.me, 1 +hakuna.live, 1 hal-9th.space, 1 hal52.nl, 1 halacs.hu, 1 @@ -55328,7 +55681,6 @@ hardweb.it, 1 hardwickvt.gov, 1 hardworm.tk, 1 hardy.bz, 1 -hardyboyplant.com, 1 hardyhaberland.com, 1 harelmallac.com, 0 harem.tk, 1 @@ -55604,7 +55956,6 @@ hawaiianlion.gq, 1 hawaiiforbernie.com, 1 hawaiiherb.co, 1 hawaiinet.tk, 1 -hawaiioceanproject.com, 1 hawat.cz, 1 hawawa.kr, 1 hawickvets.co.uk, 1 @@ -56197,7 +56548,6 @@ heat.gov, 1 heatcheck.security, 1 heatcleanerers.ga, 1 heatcleanerest.ga, 1 -heatedwater.co.uk, 1 heatershop.co.uk, 1 heatherbells.tk, 1 heatherleysephotography.com, 1 @@ -56222,7 +56572,6 @@ hebamme-cranio.ch, 1 hebamme-ebersberg.de, 1 hebamme-sabine.eu, 1 hebbelabi.tk, 1 -hebbenwealeenkabinet.nl, 1 hebbet.de, 1 hebe.stream, 1 heber.tk, 1 @@ -57210,6 +57559,7 @@ hippies.com.br, 1 hippler.cloud, 1 hippomovers.com, 1 hippopotamuses.org, 1 +hips.com, 1 hipsterpixel.co, 1 hiptwist.tk, 1 hipuranyhou.cz, 1 @@ -57413,7 +57763,6 @@ hkl-gruppe.de, 1 hklbgd.org, 1 hkmap.co, 1 hkmap.com, 1 -hkmap.live, 1 hkmap.net, 1 hkno.it, 1 hkr.at, 1 @@ -57944,7 +58293,6 @@ homemadetipsers.ga, 1 homemadetipsest.ga, 1 homemarks.ga, 1 homematicblog.de, 1 -homemdeferro.net, 1 homemediadb.org, 1 homemember.ga, 1 homemessenger.ga, 1 @@ -58916,7 +59264,6 @@ hu-a-u.com, 1 hu.search.yahoo.com, 0 hua-in.net, 1 huabianwa.com, 1 -huacos.com, 1 huagati.com, 1 huahinpropertylisting.com, 1 huang.nu, 1 @@ -59167,7 +59514,6 @@ hungryas.tk, 1 hungryginie.com, 1 hungryhealthyhappy.com, 1 hunhold.com, 1 -hunhun.ee, 1 huniverse.co, 1 hunngard.com, 1 hunqz.com, 1 @@ -59294,7 +59640,6 @@ hy1.com, 1 hyatt.com, 1 hyb7.com, 1 hybrid-crescent.tk, 1 -hybrid-hippie.com, 1 hybriden.cf, 1 hybriden.tk, 1 hybridiyhdistys.fi, 1 @@ -59717,7 +60062,7 @@ icecreamandclara.co.uk, 1 icecreamika.tk, 1 icecutethings.com, 1 icedox.ga, 1 -icedream.tech, 0 +icedream.tech, 1 icedterminal.com, 1 icedterminal.me, 1 icedude.tk, 1 @@ -59866,7 +60211,6 @@ idaeus.eu, 1 idahoansforliberty.net, 1 idahofalls.gov, 1 idahohealth.tk, 1 -idaholp.org, 1 idahomushroomclub.org, 1 idanie.cf, 1 idar-oberstein.de, 0 @@ -60174,6 +60518,7 @@ igloopreview.ca, 1 igloosandbox.com, 1 iglosujemy.pl, 1 igmus.org, 1 +ignace72.eu, 1 ignaciolacruz.com, 1 ignacjanskiednimlodziezy.pl, 1 ignat-mag.com, 1 @@ -60187,7 +60532,6 @@ ignet.gov, 1 ignite.cz, 1 ignitedmindz.in, 1 ignitelocal.com, 1 -ignitewellnessva.com, 1 ignition.gg, 1 igocarwraps.com, 1 igor-hristenko.tk, 1 @@ -61368,6 +61712,7 @@ informat.ga, 1 informaticapremium.com, 0 informaticien.tk, 1 informaticmousset.tk, 1 +informatico.pt, 1 informaticoalicante.tk, 1 informaticolamancha.tk, 1 informatiger.net, 1 @@ -61649,7 +61994,6 @@ inmoterrenas.com, 1 inmotionmktg.com, 1 inmucrom.com, 1 inmucrom.es, 1 -inmueblescartagena.com.co, 1 inmuseworld.tk, 1 inmusicfestival.com, 1 inmyhead.tk, 1 @@ -61917,6 +62261,7 @@ instituto18denoviembre.tk, 1 institutoessencia.com, 1 institutogiuseppe.com, 1 institutogiuseppe.com.ar, 1 +institutolancaster.com, 1 institutomaritimocolombiano.com, 1 institutomarketingdigital.net, 1 instocktho.cc, 1 @@ -61942,6 +62287,7 @@ insuranceclassic.ga, 1 insurancecompanylive.tk, 1 insuranceleep.ga, 1 insurancenews.gq, 1 +insurancequotes.tk, 1 insurancesaman.tk, 1 insurancesquaders.ga, 1 insurancesquadest.ga, 1 @@ -62005,7 +62351,6 @@ intelalumni.org, 1 intelghost.com, 1 intelhost.com.br, 1 intelhost.net, 1 -intelics.com.au, 1 intelius.cf, 1 intellar.com, 1 intelldynamics.com, 1 @@ -62121,6 +62466,7 @@ intermedinet.nl, 1 intermezzo-emmerich.de, 1 interminsk.tk, 1 intern.tax, 1 +internacionalista.tk, 1 internaldisfunction.tk, 1 internalfb.com, 1 internalframebackpack.tk, 1 @@ -62135,6 +62481,7 @@ internationalfashionjobs.com, 1 internationalflightstickets.com, 1 internationalfm.tk, 1 internationalfrom.com, 1 +internationaljoustingleague.tk, 1 internationalrugsdallas.com, 1 internationalschool.it, 1 internationalschoolnewyork.com, 1 @@ -62243,6 +62590,7 @@ intimidad.tk, 1 intimznakomstvo.tk, 1 intmissioncenter.org, 0 into-the-mountain.com, 1 +intomsk.tk, 1 inton.biz, 1 intoparking.com, 1 intoparking.fi, 1 @@ -62287,6 +62635,7 @@ inumcoeli.com.br, 1 inusasha.de, 1 inuyasha-petition.tk, 1 invadecafe.tk, 1 +invaded.ga, 1 invadelabs.com, 1 invalida.ru, 1 invantive-apps-for-dynamics-crm.com, 1 @@ -62337,6 +62686,7 @@ invest-stroj.tk, 1 investa.ph, 1 investactiv.tk, 1 investarholding.nl, 1 +investarter.nl, 1 investasiku.tk, 1 investasimudah.tk, 1 investasipasti.tk, 1 @@ -62359,6 +62709,7 @@ investingindiscovery.com, 1 investingtrader.net, 1 investinturkey.com.tr, 1 investinweed.com, 0 +investion.cf, 1 investir.ch, 0 investirdanslancien.fr, 1 investirenisrael.fr, 1 @@ -62372,6 +62723,7 @@ investlatam.com, 1 investment-adh.com, 1 investmentrankingsers.ga, 1 investmentrankingsest.ga, 1 +investmonitor.tk, 1 investnorthernontario.com, 1 investonline.cf, 1 investor-academy.jp, 1 @@ -62403,17 +62755,20 @@ invistics.com, 1 invitation-factory.tk, 1 invitationtrackerers.ga, 1 invitationtrackerest.ga, 1 +invitebiz.tk, 1 invitepeople.com, 1 invitescafe.com, 1 invitescene.com, 1 invitethemhome.com, 1 invitia.net, 1 +invito.tk, 1 invoiced.com, 1 invoicely.com, 1 invokingspirits.tk, 1 involic.com, 1 invuite.com, 1 invuite.com.au, 1 +inwit.tk, 1 inwonderofit.com, 1 inwx.at, 1 inwx.com, 1 @@ -62422,6 +62777,7 @@ inycia.com, 1 inyourcornerinsurance.com, 1 inyourowntime.zone, 1 inzdr.com, 1 +inzeitinteractive.tk, 1 inzelabs.com, 1 inzeni.pl, 1 inzernettechnologies.com, 1 @@ -62486,6 +62842,7 @@ iosme.ga, 1 iosnoops.com, 1 iosolutions.cl, 1 iosprivacy.com, 1 +iossearch.tk, 1 iossifovlab.com, 1 iostream.by, 1 iosxr.de, 1 @@ -62531,11 +62888,13 @@ ipal.name, 1 ipal.tel, 1 ipanchev.com, 1 iparduotuves.lt, 1 +iparenda.tk, 1 iparkki.com, 1 ipass.live, 1 ipcareers.net, 1 ipcfg.me, 1 ipclabs.tk, 1 +ipcmali.ml, 1 ipcom.com.br, 0 ipconsulting.se, 1 ipcontolsite.ga, 1 @@ -62576,6 +62935,8 @@ ipleak.net, 1 ipledgeonline.org, 0 iplist.cc, 1 iplog.info, 0 +iplookup.tk, 1 +ipmatic.ga, 1 ipmotion.ca, 1 ipnetworking.net, 1 ipnoze.com, 1 @@ -62614,6 +62975,7 @@ ipso.paris, 1 ipssl.li, 1 ipsum.dk, 1 ipswitch.com.tw, 1 +iptechnology.tk, 1 iptoasn.com, 1 iptops.com, 1 iptv.ge, 1 @@ -62621,6 +62983,7 @@ iptvfriend.ga, 1 iptvzoom.xyz, 1 ipty.de, 1 ipuservicedesign.com, 1 +ipushmail.tk, 1 ipv4.cf, 1 ipv4.cy, 1 ipv4.gr, 1 @@ -62639,6 +63002,7 @@ ipvbook.com, 0 ipview.tk, 1 ipwho.site, 1 iqos.com.ua, 1 +iqos.ml, 1 iqphone.cf, 1 iqphone.ga, 1 iqreview.ru, 1 @@ -62652,28 +63016,36 @@ iraanswersest.ga, 1 iraf.de, 1 irajsingh.tk, 1 iramellor.com, 1 +iran-best.cf, 1 iran-oil.tk, 1 +iran-speedex.tk, 1 iranactua.tk, 1 +irancenter.tk, 1 +iranconnect.tk, 1 irandex.ga, 1 irandex.gq, 1 irandm.club, 1 irando.co.id, 1 irandroid.ml, 1 iranfilmcity.tk, 1 +iranfreshfruit.cf, 1 irangeodesy.tk, 1 iranian.lgbt, 1 iranianholiday.com, 1 iranjeunesse.com, 1 iranjob.tk, 1 +iranlinks.tk, 1 iranminimalism.ir, 1 iranonline.tk, 1 iranophiles.com, 1 iranophiles.net, 1 iranophiles.org, 1 iranpay.biz, 1 +iranpedia.tk, 1 iranturkey.info, 1 iranvisa24.com, 1 iranwiki.ovh, 1 +iraq2u.tk, 1 iraq4u.tk, 1 iraqinews.ga, 1 iraqmartialarts.tk, 1 @@ -62688,8 +63060,10 @@ irc-results.com, 1 ircica.org, 1 ircmett.de, 1 ircnow.org, 0 +ircoholik.ml, 1 ircom.com.ar, 1 ircpad.com, 1 +ircsapiklari.tk, 1 irdll.com, 1 ireaco.com, 1 iready.ro, 1 @@ -62714,12 +63088,14 @@ ireps.gov.in, 1 iresineworld.tk, 1 irf2.pl, 1 irfan.id, 0 +irfanweb.cf, 1 irfs.org, 1 irgendeine.cloud, 0 irgit.pl, 1 iricky.art, 1 iridiumbrowser.de, 1 irina-beauty.de, 1 +irinaf.tk, 1 iringtone.net, 1 irioka.be, 1 irion-edm.com, 1 @@ -62751,10 +63127,12 @@ irisws-staging.co.uk, 1 irisws-testing.co.uk, 1 iritual.ru, 1 irkfap.com, 1 +irkutsk-studygood.ga, 1 irkutsk38.tk, 1 irland-firma.com, 1 irlfp.com, 1 irlprable.tk, 1 +irma-gadalka.tk, 1 irmag.ru, 1 irmakprefabrik.com, 1 irmgard-woelfle.de, 1 @@ -62782,6 +63160,7 @@ ironitekstil.com, 1 ironmagma.tk, 1 ironmaidenbootleghub.tk, 1 ironmongery.cf, 1 +ironmongery.ga, 1 ironmountainsolutions.com, 1 ironpeak.be, 1 ironraven.ch, 1 @@ -62791,7 +63170,9 @@ ironscales.com, 0 ironstar.tk, 1 irontigers.ga, 1 irontigers.gq, 1 +irontigers.ml, 1 ironwaytransport.com, 1 +ironwind.ga, 1 ironwolftechnology.com, 1 ironycats.net, 1 iroomz.co.uk, 1 @@ -62810,6 +63191,7 @@ irstaxforumsonline.com, 1 irturkey.com, 1 iruarts.ch, 1 iruca.co, 1 +iruniruten.tk, 1 irvingtonnj.gov, 1 irvingtx.gov, 1 irwinvalera.com, 1 @@ -62848,6 +63230,7 @@ isabellavandijk.nl, 1 isabelle-delannoy.com, 1 isabelle-delpech.com, 0 isabellehogarth.co.uk, 1 +isabellzaloof.ga, 1 isabellzaloof.gq, 1 isabelmurillo-ordonez.com, 0 isabelvalfer.com, 1 @@ -62897,6 +63280,7 @@ isidore.uk, 1 isiklitabela.tk, 1 isil.fi, 1 isimonbrown.co.uk, 1 +isimonline.tk, 1 isincheck.com, 1 isinolsun.com, 0 isinthe.uk, 1 @@ -62918,12 +63302,21 @@ iskaz.rs, 1 iskin.xyz, 1 iskkk.com, 1 iskkk.net, 1 +iskorka.tk, 1 iskurturkiye.cf, 1 iskurturkiye.ga, 1 +iskurturkiye.gq, 1 +islam-2day.tk, 1 +islam-azeri.tk, 1 +islam-doc.tk, 1 islam-net.tk, 1 islam.si, 1 +islam4all.tk, 1 +islam4congo.tk, 1 islamabadcourt.tk, 1 islamantarih.tk, 1 +islambolivia.tk, 1 +islamdersi.tk, 1 islamerkantho.com, 0 islamfirst.ml, 1 islamicacademy.tk, 1 @@ -62932,7 +63325,9 @@ islamicnews.tk, 1 islamicsolution.tk, 1 islaminbremen.de, 0 islamipages.tk, 1 +islamisgreat.tk, 1 islamiyet.tk, 1 +islamnews.ga, 1 islamnewss.tk, 1 islamo.tk, 1 islamonline.net, 1 @@ -62961,6 +63356,7 @@ islekyapi.com, 1 islensktlambakjot.is, 1 isleofman.tk, 1 isletech.net, 1 +isletmenlikkursuankara.tk, 1 isleyfarmsupply.com, 1 isliada.org, 1 islide-powerpoint.com, 1 @@ -62980,6 +63376,7 @@ iso.fr, 1 iso27001.dk, 1 iso27032.com, 1 isobook.ml, 1 +isofartak.com, 1 isognattori.com, 1 isoindonesiacenter.com, 0 isoip.org, 1 @@ -63001,6 +63398,8 @@ isotopes.gov, 1 isoverse.net, 1 isovideo.com, 1 ispalestinefree.com, 1 +ispanika.tk, 1 +ispaniola.ga, 1 ispanskijshuanom.ru, 1 ispartahaber.cf, 1 ispartahaber.gq, 1 @@ -63013,6 +63412,7 @@ ispro-ng.com, 1 isprox.com, 1 ispsoft.pro, 1 isputinstillpresident.com, 1 +ispymissions.ga, 1 isra-mag.com, 1 israel-alma.org, 1 israel-escorts.com, 1 @@ -63027,6 +63427,7 @@ israelcareersers.ga, 1 israelcareersest.ga, 1 israelimtovim.co.il, 1 israelitas.tk, 1 +israelitopbox.ga, 1 israelmesianico.tk, 1 israelnewswire.tk, 1 israelpalestineconfederation.org, 1 @@ -63055,6 +63456,7 @@ issnet.gq, 1 issuerconsulting.com, 1 issues.email, 1 ist-intim.de, 1 +istagb.ga, 1 istanbul.systems, 1 istanbulblog.tk, 1 istanbulbogazicienstitu.com, 1 @@ -63097,6 +63499,7 @@ istratov.tk, 1 istrosec.com, 1 istrosec.org, 1 istschonsolangeinrente.de, 1 +istudentpro.ml, 1 isuggi.com, 1 isultov.tk, 1 isutils.com, 1 @@ -63117,10 +63520,13 @@ it-academy.sk, 1 it-actual.ru, 1 it-actually.work, 1 it-biznes.com, 1 +it-blog.cf, 1 it-boss.ro, 1 it-com.ga, 1 it-cooking.com, 1 +it-ebook.ml, 1 it-enthusiasts.tech, 1 +it-expert.tk, 1 it-foro.com, 1 it-inside.ch, 1 it-inzhener.com, 1 @@ -63133,6 +63539,7 @@ it-maker.eu, 1 it-ngo.com, 1 it-novosti.tk, 1 it-ottweiler.de, 1 +it-perm.tk, 1 it-rotter.de, 1 it-seems-to.work, 1 it-service24.com, 1 @@ -63141,6 +63548,7 @@ it-support-stockholm.se, 1 it-tainment.de, 1 it-tekniker.nu, 1 it-ti.me, 1 +it-volgograd.tk, 1 it-web-entwicklung.de, 1 it-world.eu, 0 it-xperts.be, 1 @@ -63166,6 +63574,7 @@ italiachegioca.com, 1 italiale.tk, 1 italian-shoes.tk, 1 italian.dating, 1 +italiana-lacrima.tk, 1 italianerd.com, 1 italianfoodonlinestores.com, 1 italianforkids.com.au, 1 @@ -63177,6 +63586,7 @@ italianmodernart.org, 1 italiano-bello.com, 1 italianracingteam.tk, 1 italiansrent.com, 1 +italiansrit.tk, 1 italianweddingmusicians.com, 1 italianweddingvideographers.com, 1 italiaserie.org, 1 @@ -63185,6 +63595,7 @@ italiatopnews.tk, 1 italiensk-tolk.dk, 1 italik.co.uk, 1 italjet-tuning.tk, 1 +italk.ml, 1 italserrande.it, 1 italyinspires.com, 1 italyisbeautiful.com, 1 @@ -63273,10 +63684,12 @@ itis.gov, 1 itis4u.ch, 1 itisjustnot.cricket, 1 itisyourmoney.co.uk, 1 +itiweb.tk, 1 itkaufmann.at, 1 itleaked.gq, 1 itlife.tk, 1 itlitera.com, 1 +itlog.tk, 1 itlogic.com.au, 1 itludens.com, 1 itm-c.de, 1 @@ -63303,11 +63716,13 @@ itoxic.tk, 1 itpanda.pl, 1 itparty.tk, 1 itpaukku.tk, 1 +itperm.tk, 1 itpoint.kz, 0 itpol.dk, 1 itpro-mg.de, 1 itpro.ua, 1 itradeaims.net, 1 +itraffic.cf, 1 itraffic.tk, 1 itraincalisthenic.com, 1 itraveille.fr, 1 @@ -63333,6 +63748,7 @@ its4living.com, 1 its5oclock.eu, 1 itsabouncything.com, 1 itsakerhetspodden.se, 1 +itsalan.tk, 1 itsallaboutplumbing.com, 1 itsanicedoor.co.uk, 1 itsatrap.nl, 0 @@ -63345,6 +63761,7 @@ itsdcdn.com, 1 itsec.link, 1 itsecblog.de, 1 itsecrnd.com, 1 +itsecuritycoach.com, 1 itseeze.com, 1 itseovn.com, 1 itservis.org, 1 @@ -63380,6 +63797,7 @@ itsstefan.eu, 1 itstartswithme.ca, 1 itstatic.tech, 1 itsuka-world.com, 1 +itsupport24.tk, 1 itsupportguys.com, 1 itsynergy.co.uk, 1 itt-shop.bg, 1 @@ -63442,6 +63860,8 @@ ivanilla.org, 1 ivankuchin.tk, 1 ivanmeade.com, 1 ivanov.icu, 1 +ivanovka.ga, 1 +ivanovocity.tk, 1 ivanovolive.ru, 1 ivanpolchenko.com, 1 ivantedesco.tk, 1 @@ -63451,6 +63871,7 @@ ivanzorin.cf, 1 ivdnt.org, 1 ivelop.me, 1 ivendi.com, 1 +ivermectin.gq, 1 ivetazivot.cz, 1 ivetdata.com, 0 ivetebolos.com.br, 1 @@ -63458,6 +63879,7 @@ ivf114.com, 1 ivfausland.de, 1 ivi.cx, 1 ivifashion.tk, 1 +ivisa.ga, 1 ivisitkorea.com, 1 ivisitorinsurance.com, 1 ivixor.ru, 1 @@ -63518,6 +63940,7 @@ iwch.tk, 1 iwd.gc.ca, 1 iwebing.tk, 1 iwebolutions.com, 1 +iwebsolution.tk, 1 iwec.pk, 1 iwex.swiss, 1 iwhite.tk, 1 @@ -63540,6 +63963,7 @@ ixquick.eu, 1 ixquick.fr, 1 ixquick.info, 1 ixquick.nl, 1 +ixtan.ga, 1 ixuexi.tech, 1 ixypsilon.net, 1 iyan.es, 1 @@ -63565,6 +63989,7 @@ izbirateli.com, 1 izecubz.me, 1 izi-agency.com, 1 izieng.com, 1 +izipik.gq, 1 izkustvo.com, 1 izleorg2.org, 1 izm.ovh, 1 @@ -63572,17 +63997,21 @@ izmail-invertor.com.ua, 1 izmailovo.tk, 1 izmir-media.cf, 1 izmir-media.ga, 1 +izmir-media.gq, 1 izmir-organizasyon.tk, 1 izmirarabakiralama.name.tr, 1 izmirarackiralama.name.tr, 1 izmirescort.tk, 1 +izmireskortlari.tk, 1 izmirotokiralama.name.tr, 1 izmirprotestan.org, 1 izmirrentacar.name.tr, 1 +izmirtemizlik.tk, 1 izntz.com, 1 izodiacsigns.com, 1 izolyatsia.org, 1 izone.ua, 1 +izstore.net, 1 izttech.com, 1 izuba.info, 0 izumi-hirodental.com, 1 @@ -63595,6 +64024,7 @@ izzqz.me, 1 izzycat.net, 1 izzyforeal.com, 0 izzymendosa.net, 1 +izzyontour.tk, 1 izzys.casa, 1 j-annonce.co.il, 1 j-harrison-media.co.uk, 1 @@ -63669,6 +64099,8 @@ ja-no-me.ru, 1 ja-sobstvennik.tk, 1 ja-tay.sr, 1 ja-zur-gs.de, 1 +ja1deijssel.tk, 1 +jaago-pakistan.tk, 1 jaajko.eu, 1 jaajko.fi, 1 jaajko.site, 1 @@ -63691,7 +64123,7 @@ jabberdog.tk, 1 jabberfr.org, 1 jabbers.one, 1 jabberster.tk, 1 -jabberzac.org, 1 +jabboworld.tk, 1 jaberg-rutschi.ch, 1 jabergrutschi.ch, 1 jabjab.de, 1 @@ -63699,6 +64131,7 @@ jabodent.com, 1 jabou.co.uk, 1 jabramson.com, 1 jabramson.net, 1 +jabsolutions.tk, 1 jacaranda-deutschland.org, 1 jaccblog.com, 1 jacekowski.org, 1 @@ -63718,6 +64151,7 @@ jackblues.tk, 1 jackdawphoto.co.uk, 1 jacket-coat.tk, 1 jackets-coats.tk, 1 +jackets-coatsplus.tk, 1 jackets-for-men.tk, 1 jackf.me, 1 jackgreenrealty.com, 1 @@ -63817,6 +64251,7 @@ jagaimo.works, 1 jagan.be, 1 jagar.com.pl, 1 jagbouncycastles.co.uk, 1 +jagerkin.tk, 1 jagerman.com, 1 jagido.de, 1 jagogame.tk, 1 @@ -63839,6 +64274,7 @@ jailbreakingisnotacrime.org, 1 jailfood.ga, 1 jailfooders.ga, 1 jailfoodest.ga, 1 +jailstorm.ml, 1 jainmantras.com, 1 jaion.ml, 1 jaion.tech, 1 @@ -63860,6 +64296,7 @@ jake.eu.org, 1 jake.ml, 1 jake.nom.za, 1 jake.rodeo, 1 +jakegyllenhaal.ga, 1 jakejnx.com, 1 jakemansfield.com, 1 jakereynolds.co, 1 @@ -63868,6 +64305,7 @@ jakeslab.tech, 1 jaketremper.com, 0 jakewales.com, 1 jakincode.army, 1 +jako.tk, 1 jakob-kruse.de, 0 jakob-server.tk, 1 jakobczyk.org, 1 @@ -63987,6 +64425,7 @@ jan-becker.com, 1 jan-bretschneider.de, 1 jan-bucher.ch, 1 jan-daniels.de, 1 +jan-graca.tk, 1 jan-hill.com, 1 jan-melcher.de, 1 jan-reiss.de, 1 @@ -63998,6 +64437,7 @@ jan.su, 1 jana-rambusch.net, 1 janada.cz, 1 janaundgeorgsagenja.eu, 1 +janavish.tk, 1 janbennink.com, 1 janbilek.cz, 1 janbjerke.no, 1 @@ -64010,7 +64450,6 @@ jandev.de, 1 jandj.yachts, 0 jandonkers.com, 1 jandroegehoff.de, 1 -jands.co.id, 1 janduchene.ch, 1 jane.com, 1 janelauhomes.com, 1 @@ -64037,6 +64476,7 @@ jankamp.com, 1 janker.me, 1 janklokman.tk, 1 jann.is, 1 +jannehonkonen.tk, 1 jannekekaasjager.nl, 1 jannes-althoff.de, 1 jannhaber.de, 1 @@ -64070,6 +64510,7 @@ japanasonic.ru, 1 japanchiropractic.com.br, 1 japanduhoc.com, 1 japanese-cuisine.com, 1 +japanese-imperialism971.tk, 1 japanese-tantra-escort.com, 1 japaneseacupuncture.london, 1 japanesekeyboard.net, 1 @@ -64125,6 +64566,7 @@ jarondl.net, 1 jaroslavc.eu, 1 jarovske-udoli.cz, 1 jarovskeudoli.cz, 1 +jarquedelaval.tk, 1 jarrettgraham.com, 1 jarritos.com.sg, 1 jarritos.es, 1 @@ -64193,10 +64635,12 @@ jatransportadora.com, 1 jaumepons.net, 1 jav.st, 1 jav0x.com, 1 +java-fan.tk, 1 java-tracking.gq, 1 javaanalysisers.ga, 1 javaanalysisest.ga, 1 javabahia.tk, 1 +javabot.ml, 1 javacakegames.com, 1 javachinna.com, 1 javaexpert.tk, 1 @@ -64226,9 +64670,11 @@ javierguandalini.com, 1 javierjurado.tk, 1 javierlorente.es, 0 javiermascherano.tk, 1 +javiersanchez.tk, 1 javiscoffee.com, 1 javitron.tk, 1 javleech.com, 1 +javorina.tk, 1 javsod.top, 1 javtv.cc, 1 jawharati.tk, 1 @@ -64239,6 +64685,7 @@ jaxxnet.co.uk, 1 jaxxnet.org, 1 jay6.tech, 1 jayanthreddy.ml, 1 +jaybeez.tk, 1 jaybrokers.com, 1 jaycouture.com, 1 jayf.de, 1 @@ -64247,6 +64694,7 @@ jayharkess.uk, 1 jayharris.ca, 1 jayhost.cf, 1 jayhost.tk, 1 +jayjardine.cf, 1 jayjardine.ga, 1 jayjardine.gq, 1 jayjardine.ml, 1 @@ -64254,6 +64702,7 @@ jaylee.us, 1 jaylineko.com, 1 jaymecd.rocks, 1 jaypandit.me, 1 +jaypark.gq, 1 jaypeeonline.tk, 1 jaysaw.me, 1 jayspage.tk, 1 @@ -64268,6 +64717,8 @@ jazz-alliance.com, 1 jazz-alliance.org, 1 jazzab-online.tk, 1 jazzanet.com, 1 +jazzapart.tk, 1 +jazzband.tk, 1 jazzfeet.co.uk, 1 jazzindeck.com, 1 jazzman.tk, 1 @@ -64393,7 +64844,6 @@ jdlt.co.uk, 1 jdm.elk.pl, 1 jdm.pl, 1 jdmgarage.com.au, 1 -jdncr.com, 1 jdoi.pw, 1 jdpleisure.co.uk, 1 jdproofing.com, 1 @@ -64413,6 +64863,7 @@ jean-remy.ch, 1 jeancafe.ddns.net, 1 jeancampa.com, 1 jeancardeno.com, 1 +jeancarlos.tk, 1 jeandanielfaessler.ch, 1 jeangarcia.tk, 1 jeaninformatico.tk, 1 @@ -64426,13 +64877,16 @@ jeannekunst.tk, 1 jeannelucienne.fr, 1 jeanneret-combustibles.ch, 0 jeanniegraefe.tk, 1 +jeannotbel.tk, 1 jeanphilippe.io, 1 +jeans-butik.tk, 1 jeans-moda.tk, 1 jeans-shopping.tk, 1 jeans-stores.tk, 1 jeansbutik.tk, 1 jeansdemodacol.com, 1 jeansdiscounter.de, 1 +jeanslee.tk, 1 jeansmoda.tk, 1 jeansstyle.tk, 1 jeayalar.com, 1 @@ -64440,6 +64894,7 @@ jeboivlogs.nl, 1 jec-dekrone.be, 1 jecho.cn, 1 jecjacshop.com, 1 +jecnetwork.gq, 1 jed.site, 1 jeda.ch, 1 jeda.im, 1 @@ -64450,6 +64905,8 @@ jeddahlyn.nl, 1 jedepannetonordi.ch, 0 jedepannetonordi.com, 0 jedepannetonordi.fr, 0 +jedi-master.tk, 1 +jedi-online.tk, 1 jedicouncil.tk, 1 jedilukmas.tk, 1 jedipedia.net, 1 @@ -64457,6 +64914,7 @@ jedora.com, 0 jedwarddurrett.com, 1 jeek.jp, 1 jeemain.org, 1 +jeep-diagnost.ml, 1 jeep4ik.com, 1 jeepeg.com, 1 jeeptourpocos.com.br, 1 @@ -64572,6 +65030,7 @@ jenningsbet.com, 1 jenniwiltz.com, 1 jennyjones.tk, 1 jennysarl.ch, 0 +jennysource.tk, 1 jennystella.net, 1 jennythebaker.com, 1 jeno.cf, 1 @@ -64692,9 +65151,11 @@ jesucristo.ga, 1 jesuisadmin.fr, 1 jesuisunpapageek.fr, 1 jesus-rock.tk, 1 +jesuscapitan.tk, 1 jesuscnasistente.com, 1 jesusda.tk, 1 jesusdenazaret.com, 1 +jesusnazarenobaena.tk, 1 jesusthegoodshepherd.org, 1 jesusvasquez.tk, 1 jetable.org, 1 @@ -64704,6 +65165,7 @@ jetbbs.com, 1 jetchartercanada.com, 1 jetchartereurope.com, 1 jetcost.com, 1 +jetcraft.tk, 1 jetfirenetworks.com, 1 jetflex.de, 1 jethealthsolutions.com, 1 @@ -64869,6 +65331,7 @@ jimfranke.com, 1 jimfranke.nl, 1 jimgarrigan.info, 1 jimgarrigan.nyc, 1 +jimisfanvan.nl, 1 jimizhou.xyz, 1 jimkimmel.com, 1 jimmiestore.com, 1 @@ -65008,6 +65471,7 @@ jmce.eu, 1 jmcleaning.services, 1 jmdekker.it, 1 jmdiesel.com, 1 +jmedesign.tk, 1 jmedved.com, 1 jmeno.eu, 1 jmentertainment.co.uk, 1 @@ -65088,6 +65552,7 @@ jobbsafari.se, 1 jobcenter.tk, 1 jobcie.com, 1 jobflyapp.com, 0 +jobfresh.ga, 1 jobfrog.com.au, 1 jobfury.com, 1 jobgenic.com, 1 @@ -65208,7 +65673,6 @@ joeyvanvenrooij.nl, 1 joeyvilaro.com, 1 jofel-kinderkleding.tk, 1 jofogas.hu, 1 -jogadormaster.com, 1 joggers.tk, 1 joggingtips.ga, 1 jogi-server.de, 1 @@ -66125,7 +66589,6 @@ just-webdesign-berlin.de, 1 just3preety.com, 1 just6f.com, 1 justacoupleofclarkes.co.uk, 1 -justalilhippie.com, 1 justanorganizedhome.com, 1 justanothercompany.name, 1 justanotherday.tk, 1 @@ -66160,6 +66623,7 @@ justinellingwood.com, 1 justinfreid.com, 1 justinho.com, 1 justinmanders.nl, 1 +justinsinkula.com, 1 justinstago.com, 1 justinstandring.com, 1 justjavajobs.co.za, 1 @@ -66189,7 +66653,6 @@ justsellmycar.com, 1 justsem.org, 1 justshare.tk, 1 justtalk.site, 1 -justthinktwice.gov, 0 justupdate.me, 1 justweather.org, 1 justyardsign.com, 1 @@ -66352,7 +66815,7 @@ k86690.com, 0 k86813.com, 0 k86814.com, 0 k86830.com, 1 -k86833.com, 0 +k86833.com, 1 k86834.com, 1 k86853.com, 1 k86855.com, 1 @@ -66517,6 +66980,7 @@ kachelfm.nl, 1 kachka.cf, 1 kachlikova2.cz, 1 kack.website, 1 +kacperchmielowiec.pl, 1 kacy-kisha.com, 1 kada.lk, 1 kadalove.net, 1 @@ -66787,7 +67251,6 @@ kampunginggris-ue.com, 1 kampusku.tk, 1 kamrad.tk, 1 kamranmirhazar.com, 1 -kamui.co.uk, 1 kamuniang.org, 1 kan-ken.fr, 1 kan.bi, 1 @@ -67554,7 +68017,6 @@ kellyswordshop.com, 1 kellyvoice.tk, 1 kellywebcam.tk, 1 kelm.me, 1 -keln.net, 1 kelp.agency, 1 kelprof.com, 1 kelsa.io, 0 @@ -67947,7 +68409,6 @@ khmrynok.com.ua, 1 khoasweb.tk, 1 khodromedic.com, 1 khojhealth.com, 1 -khokey.com, 0 khorne.me, 1 khosroblog.ir, 1 khoteyev.tk, 1 @@ -68105,7 +68566,6 @@ kikbb.com, 1 kike.wtf, 1 kiki-voice.jp, 1 kikivega.net, 1 -kiknudes.co, 1 kikoskia.com, 1 kiku.pw, 1 kilencamping.no, 1 @@ -68785,7 +69245,6 @@ klub.tk, 1 klubcajovna.cz, 1 kluberphoto.hu, 1 klubfitness.pl, 1 -klubgerlach.sk, 1 klubwsl.tk, 1 kluck.me, 1 kludge.eu, 1 @@ -68820,7 +69279,6 @@ kn40la.com, 1 kn4ivj.com, 1 kn4ola.com, 1 kn6olc.org, 1 -knab-networks.com, 1 knabden.co.za, 1 knabstrup-autoophug.dk, 1 knallfrosch.ddnss.de, 1 @@ -68966,6 +69424,7 @@ kochi-death.ml, 1 kochinke.com, 1 kochinke.us, 1 kochrezepte.tk, 1 +kochura.tk, 1 kocka.cf, 1 kocka.tech, 1 kockanakocko.si, 1 @@ -69638,7 +70097,6 @@ kreno.tech, 1 krenstetter.at, 1 kreolis.net, 1 kresimir-blazevic.tk, 1 -krestanskydarek.cz, 1 kretaforum.dk, 1 kretschmann.consulting, 1 kreuzbergflieger.de, 1 @@ -70215,6 +70673,7 @@ kuschku.de, 1 kuscu.de, 1 kushner-cpa.co.il, 1 kushwanthreddy.com, 1 +kushwanthreddy.in, 1 kuslink.tk, 1 kusmuhendisi.com, 1 kusochi.eu, 1 @@ -70514,6 +70973,7 @@ labottegafinedistillates.it, 1 labouncycastlehire.co.uk, 1 labourreedevergheas.fr, 1 laboutiquedejuliette.com, 1 +laboutiquedeluminia.fr, 1 laboutiquemarocaineduconvoyeur.com, 1 laboutiquemarocaineduconvoyeur.ma, 1 laboxfaitsoncinema.com, 1 @@ -70732,6 +71192,7 @@ lagrottabergenopzoom.nl, 1 lagroza.tk, 1 laguiadeliman.com.ar, 1 laguiadelpapa.com, 1 +laguinguette.fr, 0 lagunadiosdalmatians.tk, 1 lagunakitchenandbath.com, 1 lagunaklub.tk, 1 @@ -71078,6 +71539,7 @@ laobai.me, 1 laobayy.com, 1 laoctavadireccion.tk, 1 laodongkynghi.info, 1 +laohei.org, 0 laolaweb.tk, 1 laoliang.ml, 1 laoriginalfm.com, 1 @@ -71140,7 +71602,7 @@ lapshore.com, 1 laptop-sewamurah.com, 0 laptopnaive.com, 1 laptopnewbie.eu.org, 1 -laptopsperu.com, 1 +laptopsperu.com, 0 laptopuri.tk, 1 laptopworld.dk, 1 lapulgaflamenco.com, 1 @@ -71955,6 +72417,7 @@ lecafedugeek.fr, 1 lecandide.info, 1 lecannabis.at, 1 lecannabis.ch, 1 +lecannabis.com, 1 lecannabis.de, 1 lecannabis.ru, 1 lecannabis.us, 1 @@ -72480,6 +72943,7 @@ leovanna.co.uk, 1 leowkahman.com, 1 lep.gov, 1 lepalierjuridique.com, 1 +lepallec.tv, 1 lepartiecomemoracoes.com.br, 1 lepblog.tk, 1 lepenetapeti.com, 1 @@ -72543,7 +73007,6 @@ lesas.tk, 1 lesatelierskosto.com, 1 lesberger.ch, 0 lesbi-porno-video.ru, 1 -lesbianfacesitting.com, 1 lesbianlovers.tk, 1 lesbicas.com.pt, 1 lesblogueuses.fr, 1 @@ -72835,7 +73298,7 @@ lhakustik.se, 1 lhasaapso.com.br, 1 lhconsult.tk, 0 lheinrich.org, 1 -lhffinanceira.online, 1 +lhero.org, 1 lhost.su, 1 lhp-creation.com, 1 lhp-creation.fr, 1 @@ -73665,7 +74128,6 @@ lionchita.tk, 1 lionessport.com, 1 lionhosting.nl, 1 lionland.tk, 1 -lionlyrics.com, 1 lionsk.tk, 1 lioprog.com, 1 lioraaja.com, 1 @@ -74632,7 +75094,6 @@ lommyfleet.com, 1 lomuarredi.com, 1 lomza.tk, 1 lon-so.com, 1 -lona.io, 1 lonasdigital.com, 1 lonavla.tk, 1 loncarlyonjenkins.com, 1 @@ -74828,7 +75289,6 @@ loremipsum.info, 1 lorena-salido.tk, 1 lorenadumitrascu.ro, 1 lorengraff.net, 1 -lorenstudioo.com, 1 lorenz-cloud.eu, 1 lorenz-hundler.co, 1 lorenzgoossens.be, 1 @@ -75118,7 +75578,6 @@ lovlyluna.org, 1 lovstabanan.se, 1 low-battery.tk, 1 low-diets.com, 1 -lowbidders.com, 1 lowcarbdietmealsmsk.ga, 1 lowcarbspark.com, 1 lowcosthost.cf, 1 @@ -75189,6 +75648,7 @@ lrssystems.com, 1 lrumeq.com, 1 lrv-grobbendonk.tk, 1 ls-alarm.de, 1 +ls-rp.es, 1 lsal.fr, 1 lsal.me, 1 lsbricks.com, 1 @@ -75431,7 +75891,6 @@ luisyr.com, 1 luiza-fashion.com, 1 luiza.ga, 1 luizkowalski.net, 1 -luizluz.com.br, 1 luje.net, 1 luje.nl, 1 lujin.ml, 1 @@ -75872,6 +76331,7 @@ m-gaming.tk, 1 m-generator.com, 1 m-h-b.fr, 1 m-hydravlika.com.ua, 1 +m-idav.ru, 1 m-idea.jp, 1 m-monitor.pl, 1 m-net.de, 1 @@ -76031,6 +76491,7 @@ machon.biz, 1 machtweb.de, 1 machulaexpeditions.com, 1 machupicchu.tk, 1 +machwasgeil.es, 1 macil.tech, 1 macintyremotorinn.net.au, 1 macinyasha.net, 1 @@ -76275,6 +76736,7 @@ magic-carpetcleaning.co.uk, 1 magic-cheerleading.tk, 1 magic-network.tk, 1 magic-photo-events.fr, 1 +magicafacil.com, 1 magical-secrets.com, 0 magical.rocks, 1 magicalwishes.tk, 1 @@ -76305,7 +76767,6 @@ magicorange.com, 1 magicpill.com.au, 1 magicsms.pl, 1 magicspaceninjapirates.de, 1 -magicstay.com, 1 magictable.com, 1 magictallguy.tk, 1 magicthecreation.tk, 1 @@ -76786,7 +77247,7 @@ malletsheetmetal.com, 1 mallettsheetmetal.com, 1 mallgastronomico.com.ar, 1 mallner.me, 1 -malloc.me, 1 +malloc.me, 0 mallonline.com.br, 1 mallorca.tk, 1 mallorcaautohuur.nl, 1 @@ -76835,6 +77296,7 @@ mamanetplus.fr, 1 mamaplus.net, 1 mamasorganizedchaos.com, 1 mamaxi.org, 1 +mamaznaet.ml, 1 mambas.cn, 1 mambos.tk, 1 mamburao.tk, 1 @@ -76891,6 +77353,7 @@ managr.net, 1 manalu.cz, 1 manaonetrading.com, 1 manasakcijas.lv, 1 +manaspaul.tk, 1 manateepao.gov, 1 manatees.com.au, 1 manatees.net, 1 @@ -76912,12 +77375,15 @@ mandai-sf.jp, 1 mandai-st.jp, 1 mandai-t.jp, 1 mandala-ausmalbilder.de, 1 +mandala-book.tk, 1 mandala-porn.com, 1 mandanudes.ae, 1 mandarinplay.tk, 1 mandcbouncycastlehire.co.uk, 1 mandediary.com, 1 +mandefender.tk, 1 mandela-effect-wiki.tk, 1 +mandelaeffect.tk, 1 manderstam.com, 1 mandiblackburnphoto.com, 1 mandilabeachhotel.com, 1 @@ -76952,8 +77418,10 @@ manfree.tk, 1 manga18.art, 1 mangabond.tk, 1 mangaboxes.ml, 1 +mangacat.ga, 1 mangadex.org, 1 mangaesp.tk, 1 +mangafreak.tk, 1 mangagaga.tk, 1 mangahigh.com, 1 mangalindustries.com, 1 @@ -76964,7 +77432,6 @@ mangareactor.tk, 1 mangarosa.pt, 1 mangatafestas.com.br, 1 mangaworld.gq, 1 -mangeeaudio.com, 1 mangeur-de-cigogne.tk, 1 mangfoldimai.no, 1 mangga.cloud, 1 @@ -76972,6 +77439,7 @@ mangio.co.uk, 1 mangnhuapvc.com.vn, 1 mango-zajm.gq, 1 mangomercado.com, 1 +mangoservers.tk, 1 mangotwoke.co.uk, 1 manguyen.de, 0 manhassetparkdistrictny.gov, 1 @@ -76987,6 +77455,7 @@ maniadicane.com.br, 0 maniaiti.nz, 1 manial4d2.ml, 1 maniasoft.pl, 1 +maniazul.tk, 1 manicbouncycastles.co.uk, 1 manicminers.tk, 1 manicode.com, 1 @@ -77015,6 +77484,7 @@ mann-und-maeuse.de, 1 mannafields.org, 1 mannat-hallmumbra.com, 1 manneguiden.no, 1 +mannenzang.tk, 1 mannhaarkunst.com, 1 mannheimbloggt.tk, 1 mannigroup.com, 1 @@ -77121,6 +77591,7 @@ manyproservices.com, 1 manytubes.ga, 1 manyzero.ml, 1 manzanita-nsn.gov, 1 +manzoorahmed.com, 1 manzunadh.com, 1 maomihz.com, 1 maone.net, 1 @@ -77187,6 +77658,7 @@ maquetting.com, 1 maquiguarda.pt, 1 maquinariahosteleriaocasion.com, 1 maquinariaspesadas.org, 0 +maquinasperfectas.tk, 1 maquinasquepiensan.tk, 1 mar-eco.no, 1 mar.pt, 1 @@ -77194,6 +77666,7 @@ mara.paris, 1 maraboutserieuxhonnete.com, 1 marabunta.io, 1 maracarlinicourses.com, 1 +maracit.tk, 1 maraichere-gourmande.org, 1 marajo.ml, 1 marajo.tk, 1 @@ -77205,6 +77678,7 @@ maranza.org, 1 marasma.tk, 1 marathoncitywi.gov, 1 marathons.tk, 1 +marauderos.tk, 1 marazul.tk, 1 marbermedical.com, 1 marble.com, 1 @@ -77227,7 +77701,6 @@ marcceleiro.com, 1 marcel-preuss.de, 1 marcel-waldvogel.ch, 1 marcelabarrozo.tk, 1 -marcelburger.vn, 1 marcelino.cf, 1 marcelinofranchini.com, 1 marcelinofranchini.eu, 1 @@ -77235,6 +77708,7 @@ marcelinofranchini.info, 1 marcelinofranchini.net, 1 marcelinofranchini.org, 1 marcelkooiman.com, 1 +marcell-jansen.tk, 1 marcellenatureza.com, 1 marcellodomenis.com, 1 marcelmarnitz.com, 1 @@ -77248,8 +77722,10 @@ marcenariaembh.com.br, 1 marcgoertz.de, 1 marchagen.nl, 1 marche-nordic-jorat.ch, 0 +marchellenevers.tk, 1 marcheuparis.com, 1 marchhappy.tech, 0 +marchinghatters.tk, 1 marchingnorth.com, 1 marchoffrichter.de, 1 marchouben.nl, 1 @@ -77282,6 +77758,7 @@ marcsello.com, 1 marcsferraripage.tk, 1 marcus-scheffler.com, 1 marcus.pw, 0 +marcusburghardt.tk, 1 marcusds.ca, 1 marcuskoh.com, 1 marcusporter.tk, 1 @@ -77302,6 +77779,7 @@ marengomi.gov, 1 maresencial.com, 1 marex.host, 1 marfadelivery.tk, 1 +marga-marga.tk, 1 marga.tech, 1 margagriesser.de, 1 margan.ch, 1 @@ -77328,6 +77806,7 @@ marhamat.cf, 1 marhobateren.tk, 1 maria-blanco.tk, 1 maria-galland.cz, 1 +maria-kirilenko.tk, 1 maria-sharapova.tk, 1 mariaangelamacario.com, 1 mariadelcastillo.com, 1 @@ -77349,6 +77828,7 @@ marianhoenscheid.de, 0 mariannenan.nl, 1 mariannethijssen.nl, 1 marianneveenstra.tk, 1 +marianrivera.tk, 1 mariansalzman.com, 1 mariapietropola.com, 1 mariasavchenko.com, 1 @@ -77459,6 +77939,7 @@ mark1998.com, 1 markaconnor.com, 1 markadamoda.com, 1 markandrosalind.co.uk, 1 +markantalyamasajsalonu-bayanmasoz-cim.cf, 1 markdain.net, 1 markdaine.com, 1 markdaine.net, 1 @@ -77504,6 +77985,7 @@ marketingpalace.tk, 1 marketingproducts.review, 1 marketingprofesszorok.hu, 1 marketingseo.fr, 1 +marketingstrategy.gq, 1 marketingtrendnews.com, 1 marketingvirtuales.com, 1 marketingwelt-lipp.de, 1 @@ -77603,6 +78085,7 @@ marmelo.digital, 1 marmista.roma.it, 1 marmo.tk, 1 marmotte.love, 1 +marmuif.fr, 0 marmurmedical.com, 1 marneetgondoireathletisme.fr, 1 marny.eu, 1 @@ -77642,6 +78125,7 @@ marry-fox.com, 1 marryfox.net, 1 mars.army, 1 mars.navy, 1 +marsafc.tk, 1 marsanvet.com, 1 marsatapp.com, 1 marseillekiteclub.com, 1 @@ -77862,6 +78346,7 @@ maslenka.tk, 1 maslin.io, 1 maslow.tk, 1 masmusica.tk, 1 +masmusicaradio.tk, 1 maso-corto.com, 1 masoncountyil.gov, 1 masoncountywa.gov, 1 @@ -77870,6 +78355,7 @@ masoncountywv.gov, 1 masonkysheriff.gov, 1 masquerade.site, 0 masqueradecostumes.tk, 1 +masrilanguage.tk, 1 masrud.com, 1 masrur.org, 1 mass.pt, 1 @@ -77921,7 +78407,6 @@ master-tmb.ru, 1 masteranimal.tk, 1 mastercardpac.com, 1 mastercareplus-demo.com, 1 -mastercareplus-staging.com, 1 mastercareplus-uat.com, 1 mastercareplus.com, 1 mastercheat.net, 1 @@ -77944,7 +78429,6 @@ masterofallscience.com, 1 masterofazoth.tk, 1 masterofbytes.ch, 1 masterpassword.org, 1 -masterpieceitaly.co.id, 1 masterpizzaiolo.com.br, 1 masterplc.com, 1 masterpro1.ru, 1 @@ -77961,6 +78445,7 @@ masterstuff.de, 1 mastertent.com, 1 masterton.com.au, 1 mastertutoriales.com, 0 +mastervision.tk, 1 masterwank.com, 1 masterwayhealth.com, 1 mastiffingles.com.br, 1 @@ -78071,6 +78556,7 @@ mathijskingma.nl, 1 mathilderegis.fr, 1 mathis.com.tr, 1 mathiteia.com, 1 +mathiveri.tk, 1 mathleaks.com, 1 mathleaks.se, 1 maths.network, 1 @@ -78156,6 +78642,7 @@ mattdbarton.com, 1 mattdrew.org, 1 mattelek.com, 1 mattelekharris.com, 1 +mattentaart.tk, 1 matteobrenci.com, 1 matteomarescotti.it, 1 matteosaturn.com, 1 @@ -78204,6 +78691,7 @@ matthiasott.ch, 1 matthiasott.com, 1 matthiasschwab.de, 1 matthiasweiler.de, 0 +matthieu-munoz.fr, 1 matthieuchedidweb.tk, 1 matthieuschlosser.fr, 1 matthijssen.info, 1 @@ -78259,16 +78747,19 @@ mauricechavez.tk, 1 mauricedb.nl, 1 mauriceje.ga, 1 mauricespapens.tk, 1 +mauricio-ochmann.tk, 1 mauriciog.com.ar, 0 mauricioghiorzi.com.ar, 0 mauricioquadradoconsultor.com.br, 1 mauricioquadradocontador.com.br, 1 +mauriciosilva.tk, 1 mauriciotoussaint.tk, 1 mauriciotoussaintarte.tk, 1 mauroalejandro.co, 1 maurovacca.com, 1 maury-moteurs.com, 1 mausmani.tk, 1 +mausoleum.ga, 1 maut1.de, 1 maveeranpasupathi.tk, 1 maven.ng, 0 @@ -78279,6 +78770,9 @@ mavenvets.co.uk, 1 maveris.com, 0 maviepearl.net, 1 mavrick.tk, 1 +mavro.cf, 1 +mavro.ga, 1 +mavro.gq, 1 mawidabp.com, 1 mawinguhost.co.ke, 1 mawo.olkusz.pl, 1 @@ -78362,10 +78856,12 @@ maxipcalls.com, 0 maxipro.ru, 1 maxiservak.ml, 1 maxisito.it, 1 +maxivisor.ga, 1 maxjacobs.com.au, 0 maxkaul.de, 1 maxlaumeister.com, 1 maxley.yachts, 1 +maxmanus.ga, 1 maxmarket.bg, 1 maxmatthe.ws, 1 maxmilton.com, 1 @@ -78375,6 +78871,7 @@ maxmuen.de, 1 maxmusic.tk, 1 maxmusical.ml, 1 maxnac.tk, 1 +maxopen.cf, 1 maxopolyworldnews.com, 1 maxp.info, 0 maxpl0it.com, 1 @@ -78390,12 +78887,15 @@ maxundlara.at, 1 maxundlara.com, 1 maxundlara.eu, 1 maxundlara.org, 1 +maxus.tk, 1 maxvaluedeals.com, 1 maxverboom.nl, 1 maxwaellenergie.de, 1 maxweiss.io, 1 maxwell-english.co.jp, 0 maxwellblog.com, 1 +maxwellcity.cf, 1 +maxwellcity.ga, 1 maxwellcity.ml, 1 maxwellcody.com, 1 maxwellmoore.co.uk, 1 @@ -78418,10 +78918,13 @@ maycarivero.com, 1 maydaystrategies.com, 1 maydex.info, 1 mayerbrownllz.com, 1 +mayflowerbocawina.tk, 1 mayflowercreative.com, 1 mayflowerfairytales.com, 1 mayhutmuibep.com, 1 mayito.tk, 1 +mayki.ga, 1 +maykitut.tk, 1 maynails.com.br, 1 maynardnetworks.com, 0 maynesoftware.co.uk, 1 @@ -78439,6 +78942,7 @@ maythai.pl, 1 maytretrungphuong.com, 1 maywood-il.gov, 1 mayx.eu.org, 1 +mazartdesign.tk, 1 mazavto.ml, 1 mazda-mps.de, 1 mazda-thermote.com, 1 @@ -78478,6 +78982,7 @@ mbed.com, 1 mbedcloud.com, 1 mbedcloudintegration.net, 1 mbeo.ch, 0 +mbfiles.tk, 1 mbilker.us, 1 mbinf.de, 0 mbinformatik.de, 0 @@ -78502,6 +79007,7 @@ mbwsignup.com, 1 mc-auth.com, 1 mc-dos.ru, 1 mc-jobs.net, 1 +mc-teemocraft.tk, 1 mc.ax, 1 mc007.xyz, 1 mc4free.cc, 1 @@ -78516,6 +79022,7 @@ mcblain.com, 1 mcbooks.vn, 0 mccarthystonefoundation.org, 1 mccn.pp.ua, 1 +mccommando.tk, 1 mcconciergerie.com, 1 mcconecountymt.gov, 1 mccoolesredlioninn.com, 1 @@ -78558,6 +79065,7 @@ mcgeelaneselfstorage.com, 1 mcgillsbuses.co.uk, 1 mcgovernance.com, 1 mcgrand.shop, 1 +mchaelkordomain.tk, 1 mchan.us, 1 mchel.net, 1 mchenrycountyclerkil.gov, 1 @@ -78633,6 +79141,7 @@ mcsidan.tk, 1 mcsinflatables.co.uk, 1 mcsmart.ru, 1 mcsnovatamabayan.com, 1 +mcsoneca.tk, 1 mcsrvstat.us, 1 mcstaralliance.com, 1 mcsteve.com, 1 @@ -78738,11 +79247,12 @@ meavagas.com, 1 meayne.ddns.net, 0 mebehliyetsinavsorulari.com, 1 mebel-dnr.ml, 1 +mebel-voronezh.cf, 1 mebelconcept.tk, 1 mebelipalitra.ru, 0 mebelisk.com.br, 1 mebelnik.pro, 1 -mebeloffice.com.ua, 1 +mebelshik.tk, 1 mec010.com, 1 mec020.com, 1 mec021.com, 1 @@ -79072,6 +79582,7 @@ mechasdepelo.com, 1 mechaspartans6648.com, 1 mechinfinity.tk, 1 mechmk1.me, 1 +mechta.gq, 1 mecomed.com, 1 mecp.de, 1 med-colleges.com, 1 @@ -79085,6 +79596,7 @@ med.tips, 1 med360.at, 1 medaboutme.ru, 1 medali21.tk, 1 +medaliturki.tk, 1 medalofvalor.gov, 1 medbiocompany.com, 1 medbiocompany.ml, 1 @@ -79122,8 +79634,10 @@ media-instance.ru, 1 media-land.tk, 1 media-library.co.uk, 1 media-serwis.com, 1 +media-start.tk, 1 media-store.ir, 1 media-valko.hu, 1 +media4u.tk, 1 mediaarea.net, 1 mediaareplural.ca, 1 mediabackoffice.co.jp, 1 @@ -79131,6 +79645,7 @@ mediablaster.com, 1 mediabogen.net, 1 mediabola.net, 1 mediabookdb.de, 0 +mediabooks.ml, 1 mediaboxfree.com, 1 mediacenter.dynv6.net, 1 mediacluster.de, 1 @@ -79152,6 +79667,7 @@ medialine.com, 1 medialinkz.ga, 1 medialunaventura.com, 1 medialys.ca, 1 +mediamarket42.tk, 1 mediamonitors.net, 1 mediamuda.com, 1 medianbases.ga, 1 @@ -79187,6 +79703,7 @@ medibooker.com.au, 1 medic-world.com, 1 medicairsolutions.com, 1 medical-assistant-colleges.com, 1 +medical-centr.tk, 1 medical-contact.de, 1 medical-safety-system.com, 1 medical-tiny.com, 1 @@ -79194,6 +79711,7 @@ medical-tiny.de, 1 medicalabroad.org, 0 medicalaegis.com, 1 medicalassistantadvice.com, 1 +medicalauction.ga, 1 medicalbillrights.gov, 1 medicalcountermeasures.gov, 1 medicaldispute.tk, 1 @@ -79202,6 +79720,7 @@ medicalonliner.tk, 1 medicalpeople.tk, 1 medicalphysicistservices.com, 1 medicals-i.com, 1 +medicalsite.tk, 1 medicalsland.com, 1 medicaltiny.com, 1 medicaltiny.de, 1 @@ -79217,6 +79736,7 @@ medicenteritalia.it, 1 medichat.ml, 1 medicina-antiage.com, 1 medicina-interventionala.ro, 1 +medicina-news.tk, 1 medicinae.solutions, 1 medicinaesolutions.com, 1 medicinaesolutions.com.br, 1 @@ -79228,6 +79748,7 @@ medicinesfast.com, 0 medicinia.com.br, 1 medicinskavranje.edu.rs, 1 mediciventures.com, 1 +mediclinik.tk, 1 medicm.jp, 1 medicompany.tk, 1 medicoresponde.com.br, 1 @@ -79238,6 +79759,7 @@ medienweite.de, 1 medifab.online, 1 medifirst.de, 1 medifit.si, 1 +medifoto.tk, 1 medigap-quote.net, 1 medik8.com.cy, 1 medikalakademi.com.tr, 1 @@ -79246,11 +79768,12 @@ medilogistics.co.za, 1 medimush.co.uk, 1 medinacountyohio.gov, 1 medinaelst.nl, 1 +medinc.tk, 1 medinetz-halle.de, 1 mediniti.com, 1 medino.com, 1 medinorte.es, 1 -medinside.ch, 1 +medinside.ch, 0 medinside.li, 1 medinsider.ch, 1 medinsider.li, 1 @@ -79268,8 +79791,10 @@ meditation-rennes.org, 1 meditbe.com, 1 meditel.nl, 1 meditez.ca, 1 +meditrak.ml, 1 meditrine.cd, 1 medium.com, 1 +mediums.cf, 1 mediumvoyant.be, 1 medivisionsc.com, 1 medivox.tk, 1 @@ -79284,11 +79809,13 @@ medonline.co.nz, 1 medosedu.in, 1 medousaclinique.com, 1 medovea.ru, 1 +medovoe.ml, 1 medpeer.co.jp, 1 medpeer.jp, 1 medportalmd.tk, 1 medprozone.com, 1 medreich.com, 1 +medrol.cf, 1 medsanuk.co.uk, 1 medsblalabs.com, 1 medschat.com, 1 @@ -79300,6 +79827,7 @@ medsi-online.tk, 1 medsister.tk, 1 medsourcelabs.com, 1 medsovet.tv, 1 +medspecial.tk, 1 medstatix-dev.com, 1 medstatix.co, 1 medstatix.com, 1 @@ -79317,6 +79845,7 @@ meduza.io, 1 medved1.ru, 1 medvedikorenka.cz, 1 medvedivka.tk, 1 +medvedka-nasekomoe.tk, 1 medvedkovo-hovrino.ru, 1 medvesajt.hu, 1 medvet.com.es, 1 @@ -79338,6 +79867,7 @@ meepbot.net, 1 meepbot.org, 1 meepbot.pro, 1 meer-der-ideen.de, 1 +meeras.ga, 1 meereskunst.de, 1 meerman.nl, 1 meerutcake.com, 1 @@ -79350,11 +79880,13 @@ meetdatingfriends.com, 1 meetfinch.com, 0 meetfranz.com, 1 meetfriends.tk, 1 +meeting-server.ml, 1 meetingapplication.com, 1 meetingvotes.com, 1 meetjeslandsetriathlon.tk, 1 meetmibaby.co.uk, 1 meetmygoods.com, 1 +meetmyown.ga, 1 meetmyown.tk, 1 meetthesinglessda.co.uk, 1 meettheslavs.com, 1 @@ -79372,6 +79904,7 @@ mega.co.nz, 1 mega.nz, 1 megaar.tk, 1 megabike.tk, 1 +megabook.ml, 1 megabounce.co.uk, 1 megabouncingcastles.com, 1 megadrol.com, 1 @@ -79383,17 +79916,20 @@ megaflowers.ru, 1 megagame.zapto.org, 1 megagifs.de, 1 megaherz.tk, 1 +megahostingbr.tk, 1 megaimpressao3d.com.br, 1 megainflatables.co.uk, 1 megainformatyk.pl, 1 megajatek.hu, 1 megakoncert90.cz, 1 +megalibportal.ga, 1 megalibrarygirl.ml, 1 megalogi.ma, 1 megalogistic.ru, 1 megalol.tk, 1 megalonomia.ml, 1 megam.host, 1 +megamillions.tk, 1 megamisja.pl, 1 megamov.eu, 1 megamov.fr, 1 @@ -79405,6 +79941,7 @@ meganmarston.cf, 1 meganmarston.ga, 1 meganruggiero.com, 0 megaobzor.com, 1 +megaparadise.ml, 1 megapixel.cz, 1 megaplan.cz, 1 megaplan.ru, 1 @@ -79459,6 +79996,7 @@ mehmetince.net, 1 mehode.com, 1 mehostdd.com, 0 mehrabpurtimes.tk, 1 +mehrgarh.tk, 1 mehrleben.at, 1 mehrnevesht.com, 1 mehrwert.de, 1 @@ -79474,9 +80012,9 @@ meijwebdesign.nl, 1 meikampf.de, 1 meikan.moe, 1 meiksbar.de, 0 +meiler.cf, 1 meilleur-casino-fiable.com, 1 meilleursavis.fr, 1 -meilleursjeuxporno.fr, 1 meilleurstrucs.com, 1 meima.cc, 1 meimeistartup.com, 1 @@ -79514,6 +80052,7 @@ meisterlabs.com, 1 meistertask.com, 1 meitan.gz.cn, 1 meitianyixiaobu.com, 1 +meiyi.ga, 1 meiyouad.com, 1 mejofi.com, 1 mejofi.eu, 1 @@ -79530,11 +80069,14 @@ mejoreswebscitas.com, 1 mejorfiltrodeagua.com, 1 mejorlimpiafondos.com, 1 mejorwork.com, 0 +mejovonakowogov.gq, 1 mekajen.com, 1 mekaleskirit.tk, 1 mekanika.com.my, 1 +mekanismo.tk, 1 mekanova.art, 1 mekatro.tech, 1 +mekatronika.tk, 1 mekatrotekno.com, 1 mekawy.tk, 1 mekegi.com, 1 @@ -79544,12 +80086,15 @@ mekkaoui.cf, 1 mekker.dk, 1 meklon.net, 1 mekongmontessori.com, 1 +melagenina.tk, 1 melanfengshui.com, 1 melanie-guy.fr, 1 melanie-schwarze.de, 1 melaniebernhardt.com, 1 +melaniec-thebest.tk, 1 melaniegruber.de, 1 melanieschweiger.com, 1 +melanin.cf, 1 melaodealmeirim.pt, 1 melatonin.fun, 1 melbar.com.au, 0 @@ -79591,11 +80136,13 @@ melissaadkins.com, 1 melissaauclaire.com, 1 melissacellini.com, 1 melissadeluxe.com, 1 +melissageorge.tk, 1 melissalb.tk, 1 melissameuwszen.nl, 1 melissasmith4mt.com, 1 melissasundwall.com, 1 meliyb.ga, 1 +melkiran.tk, 1 melkoghonning.no, 1 mellika.ch, 1 mellmon.com, 1 @@ -79627,6 +80174,7 @@ melted.me, 1 meltina-hotel.com, 1 melusine.eu, 1 melvillecity.com.au, 1 +melvinsfrance.tk, 1 mema.recipes, 1 memberbaz.ml, 1 members-arbourlake.com, 1 @@ -79658,6 +80206,7 @@ memorind.com, 1 memorycards.ie, 1 memoryex.net, 1 memoryjoggerlibrary.com, 1 +memorylines.ml, 1 memoryofyou.eu, 1 memoryplex.com, 1 mempool.chat, 1 @@ -79665,6 +80214,8 @@ mempool.de, 1 mempool.ninja, 1 mempool.space, 1 memrise.com, 1 +memurvadisi.tk, 1 +men-costumes.tk, 1 menanam.net, 1 menanwc.org, 1 menaraannonces.com, 1 @@ -79673,6 +80224,7 @@ menazimkhan.tk, 1 menchez.me, 1 menddie.com, 1 mendekuitxua.tk, 1 +mendel.tk, 1 menden.com, 1 mendipbouncycastles.co.uk, 1 mendix-apps.com, 1 @@ -79747,6 +80299,7 @@ mensconvoy.tk, 1 menselijkembryo.tk, 1 menshealthcollective.au, 1 menspeak.ga, 1 +menswear.tk, 1 mental-check.jp, 1 mentalcalculations.tk, 1 mentalcraft.tk, 1 @@ -79755,6 +80308,7 @@ mentalhealthmn.org, 1 mentalhealthtimes.tk, 1 mentalizes.tk, 1 mentalpage.com, 1 +mentalproblems.tk, 1 mentecuriosa.net, 1 menteofficial.com, 1 mentes-inquietas.tk, 1 @@ -79773,8 +80327,10 @@ menuel.me, 1 menufree.org, 1 menuiserie-deumer.be, 1 menupay.com, 1 +menureader.ml, 1 menurutparaahli.com, 1 menzel-motors.com, 0 +menzel4you.tk, 1 meodihoang.com, 1 meorca.com, 1 meow-games.com, 1 @@ -79822,6 +80378,7 @@ mercadolibre.com.py, 1 mercadolibre.com.sv, 1 mercadolibre.com.uy, 1 mercadolibre.com.ve, 1 +mercadolibrefz.tk, 1 mercadolivre.com.br, 1 mercadopago.cl, 1 mercadopago.com, 1 @@ -79861,6 +80418,7 @@ mercury.photo, 1 mercuryamericas.com, 0 mercurycards.com, 1 mercurysquad.tk, 1 +mercyseverity.tk, 1 merelskleertjes.tk, 1 merenbach.com, 1 merenita.com, 1 @@ -79872,11 +80430,14 @@ mergellina.tk, 1 meribook.com, 1 meric-graphisme.info, 1 meridanas.me, 1 +meridiangroup.ml, 1 meridianmetals.com, 1 meridianoshop.com.br, 1 meridianstore.com.br, 1 +merikserver.tk, 1 merionwest.com, 1 meripohi.edu.ee, 1 +merkattumaa.tk, 1 merkchest.tk, 1 merke.tk, 1 merkel.me, 1 @@ -79945,10 +80506,12 @@ mesotheliomacentre.tk, 1 mesotheliomalawfirm-worldwide.tk, 1 mesoyca.com, 1 mesquitegcd.gov, 1 +messageclient.gq, 1 messagescelestes-archives.ca, 1 messagevortex.com, 1 messagevortex.net, 1 messaha.tk, 1 +messcoutsandguides.tk, 1 messcustom.com, 1 messdorferfeld.de, 1 messen.tk, 1 @@ -79972,6 +80535,7 @@ mestovpohybu.cz, 1 mesutates.tk, 1 mesvision.com, 1 mesvt.com, 1 +meszlenyiattila.tk, 1 meta-db.com, 1 meta-word.com, 1 meta.com, 1 @@ -79989,15 +80553,19 @@ metadata.be, 1 metadata.io, 1 metadedi.net, 1 metaether.net, 1 +metafiz.ml, 1 metafurquest.net, 1 +metagaming.tk, 1 metahumanvpn.network, 1 metait.de, 1 metakari.one, 1 metal-madness.tk, 1 +metal-news.tk, 1 metal-rock.tk, 1 metalargentum.tk, 1 metalbus.tk, 1 metalcity.tk, 1 +metalcorenews.ga, 1 metalempire.tk, 1 metaleonsociety.io, 0 metalequipped.com, 1 @@ -80016,19 +80584,24 @@ metalloiskateli.com.ua, 1 metallomania.it, 1 metallosajding.ru, 1 metallrecycling.org, 1 +metalmaniac.tk, 1 metalmonocle.com, 1 metalnight.tk, 1 metalpesado.tk, 1 +metalsoviet.tk, 1 metaltracks.tk, 1 metalu.ch, 0 +metalunion.tk, 1 metalwarrior.tk, 1 metalweaverscreations.com, 1 metalworkingexpo.com, 1 +metamorfosis.cf, 1 metanoia8295.com, 1 metanoiaphotography.com, 1 metanomial.com, 1 metanumbers.com, 1 metapeen.nl, 1 +metaphilic.tk, 1 metaprivatewealth.com, 1 metapsychie.com, 1 metasearch.nl, 1 @@ -80045,6 +80618,7 @@ metaword.co.jp, 1 metaword.com, 1 metaword.net, 1 metaword.org, 1 +metayou.gq, 1 metebalci.com, 1 meteenonline.nl, 1 meteo-parc.com, 1 @@ -80059,6 +80633,7 @@ meteobox.pl, 1 meteobox.sk, 1 meteobox.tk, 1 meteocat.net, 1 +meteocuenca.tk, 1 meteohuertamur.tk, 1 meteonederbetuwe.nl, 1 meteoradar.ch, 1 @@ -80070,10 +80645,13 @@ meteowiki.tk, 1 meter.md, 1 meterhost.com, 1 meterinsight.com, 1 +metformin365.tk, 1 methamphetamine.co.uk, 1 method.com, 1 methodfactory.com, 1 methodprinting.com, 1 +methotrexatee.gq, 1 +methotrexates.gq, 1 methusalem.tk, 1 methylone.com, 1 metin2.download, 1 @@ -80110,7 +80688,9 @@ metron-eging.com, 1 metron-networks.com, 1 metron-online.com, 1 metron.mv, 1 +metronidazolee.gq, 1 metronik.it, 0 +metronome.ga, 1 metrophone.vn, 0 metroplex.me, 1 metropole.com.au, 1 @@ -80121,6 +80701,8 @@ metropolisdawn.net, 1 metropolisil.gov, 1 metropop.ch, 0 metrorealestatepros.com, 1 +metrothessalonikis.tk, 1 +metroval.tk, 1 metsasta.com, 1 mettelenejohansson.dk, 1 mettin.org, 1 @@ -80137,6 +80719,7 @@ meuhfolle.com, 1 meulenerkes.tk, 1 meulivro.biz, 1 meulk.co.uk, 1 +meulocal.ml, 1 meuluxomultimarcas.com.br, 1 meuneneoficial.com.br, 1 meupatrocinio.com, 1 @@ -80163,6 +80746,7 @@ mexico.sh, 1 mexicodental.co, 1 mexicojetcharter.com, 1 mexicom.org, 1 +mexicosrit.tk, 1 mexior.nl, 1 meyafloors.com, 1 meydan.tv, 1 @@ -80174,6 +80758,7 @@ mezcal.amsterdam, 1 mezedokamomata.tk, 1 meziblog.cz, 1 mezinfo.tk, 1 +mezquetillas.tk, 1 mezzanine.net, 1 mf-fischer.de, 1 mf-natuurfotografie.nl, 1 @@ -80346,11 +80931,13 @@ michael-simon.de, 1 michael-steinhauer.eu, 1 michael.band, 1 michael.ie.eu.org, 1 +michaelabbas.tk, 1 michaelamead.com, 1 michaelasawyer.com, 1 michaelband.co, 1 michaelband.com, 1 michaelbeer.co.uk, 1 +michaelbondar.tk, 1 michaelboogerd.tk, 1 michaelcailloux.com, 1 michaelcrane.live, 1 @@ -80375,6 +80962,8 @@ michaeljohnsrestaurant.com, 1 michaelkiske.tk, 1 michaelkleinert.de, 1 michaelklos.nl, 1 +michaelkorsgill.tk, 1 +michaelkuehn.tk, 1 michaell.xyz, 1 michaelleibundgut.com, 1 michaelloveys.com, 1 @@ -80418,9 +81007,11 @@ michalszotkowski.cz, 1 michalwiglasz.cz, 1 michaonline.de, 1 michasfahrschule.com, 1 +michel-kratochvil.tk, 1 michel-pilaert.coach, 1 michel-wein.de, 1 michel.cc, 1 +micheladisavino.tk, 1 michelangelo1978.com, 1 michelangelofoundation.org, 1 michelbenita.com, 1 @@ -80434,6 +81025,7 @@ michellavat.com, 1 michelledonelan.co.uk, 0 michellelowery.com, 1 michelletmc.com, 1 +michelletrachtenberg.tk, 1 michelskovbo.dk, 1 michelwolf.ch, 1 michey.tk, 1 @@ -80464,9 +81056,12 @@ micled.org, 1 micluz.shop, 1 micoff.tk, 1 micolab.com, 1 +micospa.gq, 1 micr0lab.org, 1 micra.org.uk, 1 micredito-ok.com, 1 +micro-credit.tk, 1 +microbiologist.tk, 1 microbiota-insect-vectors.group, 1 microbiote-insectes-vecteurs.group, 1 microbird.club, 1 @@ -80480,12 +81075,14 @@ microdesic.com, 1 microdots.de, 1 microdrive.pt, 1 microferma.site, 1 +microgreensworld.com, 1 microjovem.pt, 1 microl.ink, 1 microlog-online.de, 1 microlog.org, 1 microlz.com, 0 micromagic.fi, 1 +micromaid.cf, 1 micromata.de, 1 micromind.io, 1 micronotfound.gq, 1 @@ -80494,12 +81091,15 @@ micropigmentadordesucesso.com, 1 micropigpets.com, 1 micropress.co.uk, 1 microsoftedgeinsider.com, 1 +microtel2notch.tk, 1 +microtube.tk, 1 microvb.com, 1 microwesen.de, 1 microzubr.com, 1 micruity.com, 1 mics-notrack.com, 1 micsell.com, 1 +micsoft.gq, 1 miculturaservicios.gob.do, 1 midaero.co.uk, 1 midair.io, 1 @@ -80516,6 +81116,7 @@ middletowndelcopa.gov, 1 middletownri.gov, 1 mide.gob.do, 1 midenza.com, 1 +mideo.tk, 1 midgawash.com, 1 midi-coquillages.com, 1 midia.tk, 1 @@ -80561,6 +81162,7 @@ miemus.eu, 1 mieresabadus.ro, 1 mierloiu.ro, 1 miesmuschel.tk, 1 +mieszkania-wroclaw.tk, 1 mieterschutzkartei.de, 1 mietwohnungen-vermietung.com, 1 mieuxgrandir.ch, 0 @@ -80574,6 +81176,7 @@ mighit.ml, 1 mightful-noobs.de, 1 mightycause.com, 1 mightyfive.tk, 1 +mightytext-ios.tk, 1 mightytips.biz, 1 mightytips.hu, 1 migliorailtuoambiente.it, 1 @@ -80584,7 +81187,9 @@ migraine-en-werk.nl, 1 migrainereliefplan.com, 1 migrantskillsregister.org.uk, 1 migraplus.ru, 1 +migrations.tk, 1 migrinfo.fr, 1 +miguel-platteel.fr, 1 miguel.pw, 1 miguelalonso.tk, 1 miguelcollections.com, 1 @@ -80596,11 +81201,14 @@ miguelito.tk, 1 miguelmartinez.ch, 0 miguelmenendez.pro, 1 miguelmoura.com, 1 +migueloblitas.tk, 1 +miguelpallardo.tk, 1 miguia.tv, 1 mihaco.nl, 1 mihaiordean.com, 1 mihalgrameno.ml, 1 mihalicka.com, 1 +mihanwebtest.tk, 1 miharu.moe, 1 mihaylov.tk, 1 mihealth.link, 0 @@ -80643,6 +81251,7 @@ mika.moe, 1 mikadoe.nl, 1 mikaelf.com, 1 mikaeljansson.net, 1 +mikaelk.tk, 1 mikaelkulig.duckdns.org, 1 mikaelvesavuori.se, 1 mikaila.tk, 1 @@ -80670,11 +81279,12 @@ mikeguy.co.uk, 1 mikehamburg.com, 1 mikeklidjian.com, 1 mikekreuzer.com, 1 +mikelpradera.tk, 1 mikemcgeephotography.com, 1 mikemooresales.com, 1 mikeowens.us, 1 mikeprocopio.com, 1 -mikerichards.email, 1 +mikerichards.email, 0 mikerichards.gallery, 1 mikerichards.photography, 1 mikerichards.photos, 1 @@ -80702,6 +81312,9 @@ miki.community, 1 miki.it, 1 mikiclinic-sendai.com, 1 mikino.cf, 1 +mikino.ga, 1 +mikino.gq, 1 +mikino.ml, 1 mikkei.space, 1 mikkel.cc, 1 mikkelladegaard.dk, 0 @@ -80748,6 +81361,7 @@ milani.io, 1 milania.de, 1 milanmi.gov, 1 milano-web.it, 1 +milanoclownfestival.tk, 1 milanotoday.it, 1 milanow67.ml, 1 milanpala.cz, 0 @@ -80808,7 +81422,6 @@ millasexshopoficial.com.br, 1 millburyma.gov, 1 millcreekwa.gov, 1 millefleurs.eu, 1 -millenn.photos, 1 millennium-thisiswhoweare.net, 1 millenniumfalcon.org, 1 millenniumstem.org, 1 @@ -80833,10 +81446,8 @@ millikart.az, 1 millionaireclub.tk, 1 millionairemethodsacademy.tk, 1 millionairessecrets.com, 1 -millionclicker.com, 1 millioncloud.org, 1 millioncombolist.tk, 1 -millionen-von-sonnen.de, 1 milliongrounds.com, 1 millionlearn.org, 1 millionseha.com, 1 @@ -80846,6 +81457,7 @@ millonario.tk, 1 millscountyiowa.gov, 1 millsidecentre.org, 1 millwoodwa.gov, 1 +milmiedos.tk, 1 milnerga.gov, 1 milodistradfallning.com, 1 milpitas.gov, 1 @@ -80878,6 +81490,7 @@ mimm.gov, 1 mimmog.it, 1 mimocad.io, 1 mimonia.cf, 1 +mimonia.ga, 1 mimonia.gq, 1 mimorin.tk, 1 mimovrste.com, 1 @@ -80934,6 +81547,7 @@ mindfab.de, 1 mindfactory.de, 1 mindfulnessjourney.ca, 1 mindhand.com, 1 +mindjee.tk, 1 mindleaking.org, 1 mindlush.com, 1 mindmax.fi, 1 @@ -80942,6 +81556,7 @@ mindmusic.online, 1 mindomo.com, 1 mindonmymoney.nl, 1 mindox.com.br, 1 +mindresti.tk, 1 mindsetatx.com, 1 mindspliteffect.tk, 1 mindthe5.com, 1 @@ -80953,6 +81568,7 @@ mine-craftlife.com, 1 mine-pixl.de, 1 mine260309.me, 0 minebier.dk, 1 +minebitcoin.tk, 1 minecity.fun, 1 minecraft-forum.eu, 1 minecraft-game.ga, 1 @@ -80963,6 +81579,7 @@ minecraft.buzz, 1 minecraft.gen.tr, 1 minecraft.social, 1 minecraft.vip, 1 +minecraftbestroyale.gq, 1 minecraftdolarcube.gq, 1 minecrafteasy.gq, 1 minecraftforever.tk, 1 @@ -80978,8 +81595,14 @@ minecraftrealgold.ml, 1 minecraftruns.ml, 1 minecrafts.gq, 1 minecraftstal.com, 1 +minecraftwin.gq, 1 +minecraftx.ml, 1 +minefields.tk, 1 +minehash.tk, 1 minehattan.de, 1 minehub.de, 1 +minelands.ml, 1 +minelight.ml, 1 minepack.net, 1 mineralky.com, 1 mineralnibani.bg, 1 @@ -80994,6 +81617,7 @@ minervacars.com, 1 mines-stetienne.fr, 1 minesouls.fr, 1 minestealth.xyz, 1 +minestory.cf, 1 minesweepergame.de, 1 minetracker.dk, 1 mineturtle.de, 1 @@ -81009,8 +81633,10 @@ minhanwindow.vn, 1 minhng99.cloud, 1 minhng99.eu, 1 minhyukpark.com, 1 +mini-igra.tk, 1 mini-piraten.de, 1 mini2.fi, 1 +minialbums.ga, 1 miniatomium.tk, 1 minibackpackgirls.cf, 1 minibaggerverleih-aulendorf.de, 1 @@ -81020,6 +81646,7 @@ minibrewery.cf, 1 minibus-service.ru, 1 minicampingshalom.nl, 1 minican.net, 1 +miniclip.com, 1 minics.tk, 1 minidesign.se, 1 minigames.com, 1 @@ -81031,6 +81658,7 @@ minikin.tk, 1 minikneet.com, 1 miniliga.at, 1 minimal-apps.de, 1 +minimal-nothing.ml, 1 minimal-website.ch, 0 minimalistbaker.com, 1 minimalistmenu.com, 1 @@ -81041,6 +81669,7 @@ minimonies.tk, 1 minimotogp.tk, 1 minimvc.com, 1 minin.tk, 1 +mining-club.tk, 1 mining.diamonds, 1 miningtronics.com, 0 minintendo.tk, 1 @@ -81062,6 +81691,7 @@ minitruckin.net, 1 minitrucktalk.com, 1 minivaro.de, 1 miniverse.social, 1 +minivideoadapterssales.tk, 1 miniwallaby.com, 1 miniwaplus.com, 1 minix.jp, 1 @@ -81082,14 +81712,20 @@ minnisites.com, 1 minnit.chat, 1 minnpost.com, 1 minobar.com, 1 +minocyclinee.gq, 1 +minocyclinehere.gq, 1 +minocyclines.gq, 1 minohtaurov.cf, 1 minor.news, 1 +minorisa.tk, 1 minoritywhip.gov, 1 minotauro.com.ar, 1 minoxbahia.com.br, 1 minpingvin.dk, 1 minpolit.com, 1 minsk-city.tk, 1 +minsk-cops.tk, 1 +minsk-music.tk, 1 mint-frauen-bw.de, 0 mintclass.com, 1 mintdsmile.com.au, 1 @@ -81163,6 +81799,7 @@ miramaraddictionandrehabcenters.com, 1 mirandakids.bg, 1 mirasmun.tk, 1 miratechgroup.com, 1 +miraxe.cf, 1 miraxe.ga, 1 miraxe.gq, 1 mirazonline.tk, 1 @@ -81170,6 +81807,7 @@ mirazperu.tk, 1 mircarfinder.ru, 1 mircreditov.tk, 1 mircsohbet.tk, 1 +mirdetaley.tk, 1 mirdon.com, 1 mireiaseuba.com, 1 mireillewendling.com.br, 1 @@ -81184,15 +81822,20 @@ mirinfonews.tk, 1 mirjamderijk.nl, 1 mirkino.tk, 1 mirknighechek.tk, 1 +mirknighek.cf, 1 +mirknighek.gq, 1 mirkofranz.de, 1 mirkomainardi.com, 1 mirkvartir.tk, 1 mirmax.ch, 1 +mirnesnet.tk, 1 +mirnews.ml, 1 mirobuvi.com.ua, 1 mirokon.tk, 1 mironet.cz, 1 mironi.ml, 1 mironized.com, 1 +mironov.tk, 1 mirotakampus.com, 1 mirprav.tk, 1 mirrordream.net, 1 @@ -81202,6 +81845,7 @@ mirrorsedgearchive.ga, 1 mirrorwood.com, 1 mirshak.com, 0 mirstroy.su, 1 +mirtazapine.gq, 1 mirtentov.ru, 1 mirtes.cz, 1 mirtouf.fr, 1 @@ -81209,6 +81853,9 @@ mirumhongkong.com, 1 mirvent.site, 1 mirvolgograda.ml, 1 mirwild.cf, 1 +mirwild.gq, 1 +miryam-martinez.tk, 1 +mirzetonline.tk, 1 mis1042.com, 0 mis1042.top, 1 misaka.me, 1 @@ -81223,6 +81870,7 @@ mischolz.de, 1 misclick.net, 1 misclick.nl, 1 misconfigured.io, 1 +miscuadros.tk, 1 miscursosdebelleza.com, 1 misentropic.com, 1 misexam.com, 1 @@ -81256,7 +81904,6 @@ missblisshair.com.au, 1 missdoertie.net, 1 missdoggystyle.com, 1 missdream.org, 1 -misseguf.dk, 1 missevent.pl, 1 missfit.ru, 1 missflora.se, 1 @@ -81282,7 +81929,9 @@ misspoliticsaustralia.cf, 1 misspoliticsaustralia.ga, 1 misspoliticsaustralia.gq, 1 misspoliticsaustralia.ml, 1 +missthetoro.tk, 1 misstika-bijoux.com, 1 +misstress.cf, 1 missualready.com, 1 missuniverse.tk, 1 missworldinfo.tk, 1 @@ -81380,6 +82029,7 @@ mittagonghomestead.com.au, 1 mittdolcino.com, 1 mittelalter-lexikon.de, 1 mittelunsachlich.de, 1 +mittendorff.tk, 1 mittenofficesystems.com, 1 mittid.dk, 1 mittikimonos.com.br, 1 @@ -81390,6 +82040,7 @@ miui-germany.de, 1 miui.kr, 1 miukimodafeminina.com, 1 mivestuariolaboral.com, 1 +mividasecreta.tk, 1 mivm.cn, 1 mivne.co.il, 1 mivzak.im, 1 @@ -81405,6 +82056,7 @@ mivzakim.org, 1 mivzakim.tk, 1 mivzakim.tv, 1 mivzaklive.co.il, 0 +mix-books.ga, 1 mix-channel.ml, 1 mix-master.fr, 1 mix-recruit.jp, 1 @@ -81533,6 +82185,7 @@ mklpedia.de, 1 mkm.ee, 1 mkm.szczecin.pl, 1 mkmaster.tk, 1 +mkmedien.tk, 1 mknowles.com.au, 1 mkoppmann.at, 1 mkpdeepclean.com, 1 @@ -81573,9 +82226,11 @@ mllz.com, 1 mlm-hochzeit.de, 1 mlmjam.com, 1 mlmjunction.tk, 1 +mlnews.ml, 1 mlo.no, 1 mlohr.com, 1 mlonline.com.mx, 1 +mloska.tk, 1 mlp.horse, 1 mlpavimentosdehormigonimpreso.com, 1 mlpvcdn.top, 1 @@ -81615,6 +82270,7 @@ mmav.co, 1 mmav.live, 1 mmbb.org, 0 mmcalc.jp, 1 +mmcase.ml, 1 mmcwholesale.com, 1 mmgal.com, 1 mmgtx.com, 1 @@ -81649,6 +82305,7 @@ mmsteelny.com, 1 mmstick.tk, 1 mmstudio.tk, 1 mmucha.de, 1 +mmuclassifieds.tk, 1 mmulder.com, 1 mmwb.nl, 1 mmwtrademarks.com.au, 1 @@ -81686,7 +82343,10 @@ mnogoknighek.gq, 1 mnogoknighek.ml, 1 mnogoknighek.tk, 1 mnogosofta.tk, 1 +mnogoznai.tk, 1 +mnotrioesdp.ml, 1 mnprairie.gov, 1 +mnrloroli.tk, 1 mnrv.trade, 1 mns.co.jp, 1 mns.jp, 0 @@ -81698,6 +82358,7 @@ mnt-tech.fr, 1 mnt9.com, 0 mnt9.de, 1 mnvotes.gov, 1 +mo-en-karim.tk, 1 mo-journal.com, 1 mo-mochizuki.com, 1 mo-vvs.dk, 1 @@ -81720,6 +82381,7 @@ mobi-katalog.tk, 1 mobidesigns.org, 1 mobidevtalk.com, 1 mobigadget.tk, 1 +mobijo.tk, 1 mobikasa.com, 1 mobil-bei-uns.de, 1 mobil11.net, 1 @@ -81728,6 +82390,8 @@ mobilcom-debitel-empfehlen.de, 1 mobildeal.id, 1 mobile-holzofenpizza.de, 1 mobile-industrial-robots.com, 1 +mobile-ivr.tk, 1 +mobile-news.tk, 1 mobile.eti.br, 1 mobile.united.com, 0 mobile.usaa.com, 0 @@ -81745,14 +82409,18 @@ mobileit.cz, 1 mobilelobbyers.ga, 1 mobilelooper.com, 1 mobilemedics.com, 1 +mobilepartner.tk, 1 mobiler-handel.de, 1 mobileread.com, 1 mobileritelushi.com, 1 mobilesector.de, 1 mobilesettingers.ga, 1 mobilesignalsolutions.co.uk, 1 +mobilesnewsworld.ga, 1 +mobilestuff.tk, 1 mobiletechnews.tk, 1 mobileteleconferenceers.ga, 1 +mobiletirer.tk, 1 mobiletop.co.uk, 1 mobiletraff.co, 1 mobilewikiserver.com, 1 @@ -81825,6 +82493,7 @@ mocksvillenc.org, 1 mocomoco.jp, 1 mod.af, 1 moda-donna.cf, 1 +moda-line.ml, 1 moda-querida.de, 1 modacruz.com, 1 modaexecutiva.com.br, 1 @@ -81835,6 +82504,7 @@ modalogi.com, 1 modalrakyat.com, 1 modaltraining.co.uk, 1 modamoom.com.br, 1 +modanacrho.tk, 1 modanese.net, 1 modav.org, 1 modax.ua, 1 @@ -81842,7 +82512,6 @@ modbom.com.tw, 1 modcover.com, 1 modd.com.au, 1 modded-minecraft-server-list.com, 1 -moddedphones.com, 1 modderday.com, 1 moddescargas.com, 0 modding-forum.com, 1 @@ -81864,6 +82533,7 @@ modeldoll.tk, 1 modelearth.org, 1 modelflight.com, 1 modelfotografie.tk, 1 +modeli.tk, 1 modelisme-rc.net, 1 modelisme-voiture-rc.fr, 1 modelist.com.ua, 1 @@ -81893,6 +82563,7 @@ moderndukes.tk, 1 moderneraplumbingandgas.com.au, 1 moderniknihovna.cz, 1 modernindia.ml, 1 +modernliferoleplay.cf, 1 modernmomarchy.com, 1 modernqr.com, 1 modernrelations.dk, 1 @@ -81982,6 +82653,7 @@ mofbinsurance.com, 1 mofohome.dyndns.org, 1 mogamugi.com, 1 mogica.tk, 1 +mogilev-forum.tk, 1 mogomix.cf, 1 mogradus.com, 1 moguls.tv, 1 @@ -81989,17 +82661,22 @@ mogwailabs.de, 1 moha-swiss.com, 0 mohaabobclan.tk, 1 mohaanation.tk, 1 +mohabatein1.tk, 1 +mohamedalibenammarmaba.tk, 1 mohamedfouad.tk, 1 mohamedhamdy.tk, 1 mohamedhosting.tk, 1 mohamedsherif.ml, 1 mohamedsherif.tk, 1 +mohammad-yarahmadi.tk, 1 mohammadhamed.tk, 1 +mohammadreza-bakhtiari.tk, 1 mohammed.ga, 1 mohammedalrifai.tk, 1 mohave.gov, 1 mohela.com, 1 mohelafederal.com, 1 +moheyuddin.tk, 1 mohister.cn, 1 mohitchahal.com, 1 mohot.com.tw, 1 @@ -82007,6 +82684,7 @@ mohot.fit, 1 mohot.shop, 1 mohr-maschinenservice.de, 1 mohsen-pashootan.vercel.app, 1 +moi-sait.tk, 1 moikolhoz.ml, 1 moikolhoz.tk, 1 moipourtoit.ch, 0 @@ -82021,6 +82699,7 @@ mojadm.sk, 0 mojaknjiznica.com, 0 mojakursumlija.tk, 1 mojama3dz.com, 1 +mojartech.ml, 1 mojavenissanofbarstowparts.com, 1 mojdom.ba, 1 mojdrvar.tk, 1 @@ -82073,9 +82752,11 @@ molecularbiosystems.org, 1 moleestudio.com, 1 molehill.it, 0 molekula.hr, 1 +molenaagtekerke.tk, 1 molenaar-ricardo.tk, 1 moleskinestudio.com, 1 molidaytravel.com, 1 +molinillo.tk, 1 moliporex.pt, 1 molkerei-ammerland.com, 1 mollaretsmeningitis.org, 1 @@ -82431,7 +83112,6 @@ moonlit.cloud, 1 moonlit.games, 1 moonmelo.com, 1 moonmoondomain.com, 1 -moonpay.com, 1 moonpay.io, 1 moonracer.ga, 1 moonraptor.co.uk, 0 @@ -82562,7 +83242,6 @@ morgancountymo.gov, 1 morgancountysheriffal.gov, 1 morgancountyutah.gov, 1 morgandesort.com, 1 -morganhome.co.id, 1 morgansleisure.co.uk, 1 morganwilder.com, 1 morgen.news, 1 @@ -83243,6 +83922,7 @@ mtf.wiki, 1 mtfgnettoyage.fr, 1 mtfwiki.com, 1 mtfwiki.lgbt, 1 +mtfwiki.net, 1 mtfwiki.org, 1 mtfwiki.xyz, 1 mtgoptex.com, 1 @@ -83838,7 +84518,6 @@ mwnonline.net, 1 mwohlfarth.de, 1 mwork.tech, 1 mwpromotion.fr, 1 -mwps.co.uk, 1 mwr.team, 1 mwscouts.org, 1 mwskwong.com, 1 @@ -84070,7 +84749,6 @@ mycontactopticien.fr, 0 mycontrolmonitor.com, 1 mycoordinates.xyz, 1 mycounterstrike.ru, 1 -mycoupons.com, 1 mycr.eu, 1 mycreativeartsconsulting.com, 1 mycreativenook.com, 1 @@ -84084,7 +84762,6 @@ mycrowdstack.com, 1 mycrypnet.io, 1 mycustomwriting.com, 1 mycutebee.com, 1 -mydabb.com, 1 mydais.org, 1 mydarkness.cf, 1 mydarksite.tk, 1 @@ -84225,6 +84902,7 @@ myglobalopti.nl, 1 mygnmr.com, 1 mygobelin.tk, 1 mygolod.com, 1 +mygomel.tk, 1 mygov.scot, 1 mygreatjob.eu, 1 mygreatjobs.de, 0 @@ -84232,6 +84910,7 @@ mygreatlakes.org, 1 mygreatwebsite.co.uk, 1 mygreeley.com, 1 mygretchen.de, 1 +mygrodno.tk, 1 mygymer.ch, 1 myhappiness.tk, 1 myhealthchecked.com, 0 @@ -84303,7 +84982,6 @@ mylegacyvip.com, 1 mylene-chandelier.me, 1 mylever.com, 1 mylfca.com, 1 -mylife360mag.com, 1 mylifeabundant.com, 1 mylifeinbalance.be, 1 mylifesphotograph.com, 1 @@ -84749,7 +85427,6 @@ myyoutubepage.tk, 1 myyubikey.net, 1 myyubikey.org, 1 myzarabot.tk, 1 -myzetaspace.com, 1 myzina.cz, 0 mz-mz.net, 1 mza.com, 1 @@ -84945,6 +85622,7 @@ nagyandras.net, 1 nagybotond.com, 0 nah.nz, 1 nah.re, 1 +nahman.tk, 1 nahouw.net, 1 nahrag.tk, 1 nahrung.de, 1 @@ -85314,6 +85992,7 @@ nat-neocron.tk, 1 nat.ac, 1 nataez.tk, 1 nataldigital.com, 1 +natalia-in-quebec.tk, 1 natalia-shablo.ru, 1 natalia-venezuela.tk, 1 nataliaanderson.com.br, 1 @@ -85325,6 +86004,7 @@ natalsentido.com, 1 natanaelys.com, 1 nataniel-perissier.fr, 1 natarius.tk, 1 +natariusadvokat.ga, 1 natasa-theodoridou.tk, 1 natasabekvalac.tk, 1 natasasavija.tk, 1 @@ -85332,6 +86012,7 @@ nataschaskraamzorg.nl, 1 natashacampos.com.br, 1 natashacampos.nl, 1 natashavaz.nl, 1 +natashki.tk, 1 natasjaversantvoort.nl, 1 natation-nsh.com, 0 natchmatch.com, 1 @@ -85477,11 +86158,11 @@ nautiboat.it, 1 nauticlink.com, 1 nauticlux.com, 1 nautika.tk, 1 -nautiljon.com, 1 nautsch.de, 1 nauz-art.com, 1 nav.no, 1 navadebejar.tk, 1 +navalarchitect.tk, 1 navalkejigo.tk, 1 navaneethnagesh.com, 1 navarrete.tk, 1 @@ -85529,6 +86210,7 @@ naz-sciaves.eu, 1 nazad.com.br, 1 nazarenohuelva.tk, 1 nazarenoviso.tk, 1 +nazbol.tk, 1 nazevfirmy.cz, 1 nazimogluinsaat.com, 1 nazmulislam.cf, 1 @@ -85699,6 +86381,7 @@ ne.jo, 1 nea-security.com, 1 nea.gov, 1 nealvorusphd.com, 1 +neanderthalia.tk, 1 neapi.com, 1 near.sh, 1 near.social, 1 @@ -85727,6 +86410,7 @@ nebelheim.de, 1 nebenbeiblog.ch, 1 nebix.tk, 1 nebogame.com, 1 +nebohost.tk, 1 neboley.cf, 1 nebra.io, 1 nebracy.com, 1 @@ -85740,6 +86424,7 @@ neckbeard.xyz, 1 necord.com, 1 necormansir.com, 1 necretro.org, 1 +necromantia.tk, 1 necronaut.tk, 1 necronomusick.tk, 1 necropolis-online.tk, 1 @@ -85769,6 +86454,7 @@ nedvrf.ru, 1 nedzadalibegovic.com, 1 neecist.org, 1 needemand.com, 1 +needfire.ga, 1 needflare.com, 1 needing.cf, 1 needle-demo.azurewebsites.net, 1 @@ -86177,6 +86863,7 @@ nethask.ru, 1 nethead.at, 1 netheadsonair.com, 1 nethealth.cf, 1 +nethealth.ga, 1 nethealth.tk, 1 netherlandstypography.nl, 1 nethernet.nl.eu.org, 0 @@ -86216,6 +86903,7 @@ netobur.net, 1 netolink.co.il, 1 netolink.com, 1 netor.ga, 1 +netpenge.tk, 1 netpraetor.com, 1 netpreneur.co.za, 1 netprofile.com.au, 0 @@ -86236,6 +86924,7 @@ netrunner.xyz, 1 netrustcontractor.com, 0 nets.com.sg, 1 netschool.tk, 1 +netsearch.ga, 1 netsec.cloud, 1 netsecma.com, 1 netsite.dk, 1 @@ -86330,6 +87019,7 @@ netzklad.de, 1 netzona.org, 1 netzspielplatz.de, 0 netzsv.website, 1 +netztest.at, 1 netzvieh.de, 1 netzwerk-lq.com, 1 netzwerk-sozialliberal.de, 1 @@ -86428,6 +87118,7 @@ new-process.de, 1 new-process.eu, 1 new-smile.cf, 1 new-standart.tk, 1 +new-tuning.tk, 1 new-vip.com, 1 new-way.ml, 1 new-web-studio.com, 1 @@ -86471,6 +87162,7 @@ newburyparkelectrician.com, 1 newburyparkexteriorlighting.com, 1 newburyparklandscapelighting.com, 1 newburyparkoutdoorlighting.com, 1 +newcab.de, 0 newcapitaldev.com, 1 newcarlisleohio.gov, 1 newcars.tk, 1 @@ -86551,6 +87243,7 @@ newmuslims.tk, 1 newmuz.tk, 1 newodesign.com, 1 newonlineroad.com, 1 +neworiflame.tk, 1 newparadigmventures.net, 0 newparrot.tk, 1 newphysics.fi, 1 @@ -86565,8 +87258,10 @@ newreop.com, 1 news-and-blogs.tk, 1 news-big.com, 1 news-club.tk, 1 +news-novoros.cf, 1 news-of-russia.gq, 1 news-police.tk, 1 +news-srilanka.tk, 1 news-sy.cf, 1 news-technology.ml, 1 news-zp.tk, 1 @@ -86636,6 +87331,7 @@ newstone-tech.com, 1 newstraveltoday.gq, 1 newsuk.tk, 1 newsupdatesdaily.ga, 1 +newsuzbekistan.tk, 1 newsvideo.tk, 1 newsvoice.com, 1 newsworld247.tk, 1 @@ -86938,6 +87634,7 @@ nic.zip, 1 nic199.ru, 1 nicaieri.ro, 1 nicanordic.com, 1 +nicastrosalvatore.tk, 1 nicat.cf, 1 nicava.com.mx, 1 nice-autosurf.com, 1 @@ -86958,6 +87655,7 @@ nichearticlegalore.com, 1 nicheosala.tk, 1 nicheosala.xyz, 1 nicher.tk, 1 +nichesite.gq, 1 nichetest.tk, 1 nichevideogalore.com, 1 nichi.co, 1 @@ -87192,6 +87890,7 @@ nijiero-ch.com, 0 nijikata.com, 1 nijimama-life.com, 1 nijm.nl, 1 +nijniy-novgorod.tk, 1 nijofotografie.de, 1 nijzoon.nl, 0 nika-travel.ga, 1 @@ -87322,6 +88021,7 @@ ninjasproxy.com, 1 ninjasquad.fr, 1 ninjaworld.co.uk, 1 ninkt.com, 1 +ninmegam.gq, 1 ninofink.com, 1 ninohaslach.ch, 1 ninovayazilim.com, 1 @@ -87349,6 +88049,8 @@ nipplefucking.com, 1 nippon-tour.tk, 1 nippon.plus, 1 nipponkaigi.info, 1 +nipponkempoph.tk, 1 +nipponnews.tk, 1 nipponprinting.co.jp, 1 nipponsteelwelding-thai.co.th, 1 nippynet.tk, 1 @@ -87464,10 +88166,12 @@ nklwhx.com, 1 nko-rr.ru, 1 nko.org, 1 nkontur.com, 1 +nkorolev.tk, 1 nkp-media.de, 1 nksmart.ru, 1 nkvd-farm.ru, 1 nkx4sjyrk4tcv0sluhwajyc-n6icja9gchqxmhp.com, 0 +nl-comunistas.tk, 1 nl-ix.net, 1 nl.search.yahoo.com, 0 nl3ehv.nl, 1 @@ -87501,6 +88205,7 @@ nmontag.com, 1 nms-thoracic-surgery.com, 1 nmx.de, 1 nmx.moe, 1 +nn-vol.ga, 1 nn01.cc, 1 nn01.com, 1 nn04.org, 1 @@ -87514,6 +88219,7 @@ nn9721.com, 0 nn9728.co, 1 nna774.net, 1 nndfn.com, 1 +nnews.tk, 1 nnkkserver02.ddns.net, 1 nnlm.gov, 1 nnnovel.com, 1 @@ -87690,7 +88396,6 @@ noleggiobagnichimici.perugia.it, 1 noleggioimbarcazioni.it, 1 noleggiolimousine.roma.it, 1 nolinobaby.pl, 1 -nolische.com, 1 nolt.io, 1 nolte-tver.ru, 1 nolutut.ga, 1 @@ -88195,6 +88900,7 @@ novoodesabibl.tk, 1 novopromo.ru, 1 novoregalos.com, 1 novoresume.com, 0 +novorossiysk.tk, 1 novorussiya.tk, 1 novosad-kom.tk, 1 novosel.ga, 1 @@ -88326,6 +89032,7 @@ nsepapa.com, 1 nsfw-story.com, 1 nshepp-dct-development.azurewebsites.net, 0 nshipster.cn, 1 +nshipster.co.kr, 1 nshipster.com, 1 nshipster.es, 1 nsics.co.jp, 1 @@ -88393,8 +89100,6 @@ ntzwrk.org, 1 nu-pogodi.net, 1 nu.com.mx, 1 nu.fi, 1 -nu3tion.com, 1 -nu3tion.cz, 1 nu3vex.com, 1 nuacht.ie, 1 nuage365.de, 0 @@ -88652,6 +89357,7 @@ nwopage.tk, 1 nwperformanceandoffroad.com, 1 nwps.fi, 1 nwra.com, 1 +nwradio.tk, 1 nwshell.com, 1 nwspecialists.com, 1 nwtoys.com, 1 @@ -89039,9 +89745,9 @@ oceanspraymiami.com, 1 oceanspringsarchives.net, 0 oceansurplus.tk, 1 oceanviewde.gov, 1 -ocebs.com, 1 ocenilla.ml, 1 ocenilla.tk, 1 +ocenka-nedv.ml, 1 ocenka.tk, 1 ocenovani-inspekce.cz, 1 ocf.io, 1 @@ -89162,6 +89868,7 @@ oddtoes.com, 1 ode.red, 1 odedigitale.marketing, 1 odegua.com, 1 +odejdamoda.tk, 1 odensc.com, 1 odensc.me, 1 odenvilleal.gov, 1 @@ -89594,6 +90301,7 @@ oldiesmusicguide.tk, 1 oldiesradio.tk, 1 oldinnpub.tk, 1 oldita.ru, 1 +oldliverpoolrailways.tk, 1 oldno07.com, 1 oldnorthbanter.com, 1 oldonyosafaris.com, 1 @@ -89776,6 +90484,7 @@ omarbaba.shop, 1 omarhussien.tk, 1 omarov.tk, 1 omarpalos.com, 1 +omarsamarah.tk, 1 omarsuniagamusic.ga, 1 omarzunic.com, 1 omasporno.com, 1 @@ -89867,6 +90576,7 @@ omsdieppe.fr, 1 omshivalab.com, 1 omsknews.tk, 1 omskrock.com, 1 +omskweb.tk, 1 omtcloud.jp, 1 omva.de, 1 omveda.org, 1 @@ -89919,7 +90629,6 @@ onderwijscentrumgent.be, 1 ondevamosjantar.com, 1 ondiet.biz, 1 ondoorgrond.tk, 1 -ondrei.one, 1 ondrej.org, 1 ondrejbudin.cz, 0 ondrejhoralek.cz, 1 @@ -89975,7 +90684,6 @@ onefinitee.com, 1 onefinitee.in, 1 onefour.ga, 1 onegroup.ua, 1 -onehaven.com, 1 oneheartbali.church, 0 onehost.kz, 1 oneidacityny.gov, 1 @@ -89985,6 +90693,7 @@ oneigroup.net, 1 oneindex.tk, 1 oneirosociety.tk, 1 onejoon.de, 1 +oneless.tk, 1 onelifenutrition.co.uk, 1 onelinkbpo.com, 1 onemeter.com, 1 @@ -90191,6 +90900,7 @@ onlineshopsatkhira.tk, 1 onlinesmsbox.com, 1 onlinesorusor.cf, 1 onlinesports.cf, 1 +onlinesports.tk, 1 onlinestoresite.com.au, 1 onlinesudoku.tk, 1 onlinesystem.jp, 1 @@ -90261,7 +90971,7 @@ onpointinsights.us, 0 onpointplugins.com, 1 onpopup.ga, 1 onporn.fun, 1 -onrealt.ru, 1 +onrealt.ru, 0 onsemediagroup.ml, 1 onsenlaichelesdoigts.be, 1 onsetupdates.com, 1 @@ -90381,7 +91091,6 @@ open-co.com, 1 open-data-apps.org, 1 open-desk.org, 1 open-domotics.info, 1 -open-fixture-library.org, 1 open-future.be, 1 open-future.info, 1 open-gaming.net, 1 @@ -90629,6 +91338,7 @@ optiker-gilde.de, 1 optikflow.com, 1 optilan.tk, 1 optimale.co.uk, 1 +optimall.tk, 1 optimalrehab.se, 1 optimaner.pl, 1 optimausa.com, 1 @@ -90742,6 +91452,7 @@ orbitfoods.ca, 1 orbitforum.ga, 1 orbitgoods.ca, 1 orbitpro.co, 1 +orbits.ga, 1 orbitum.space, 1 orbu.net, 1 orby.ro, 1 @@ -90755,7 +91466,6 @@ orcawiki.nl, 1 orchardnh.org, 1 orchestra-ppm.io, 1 orchestra.tk, 1 -orchestredechambredulanguedoc.com, 1 orchidee-mariage.com, 1 orchidee-massage.tk, 1 orchideemilano.it, 1 @@ -90790,6 +91500,7 @@ ordervaltrexonlines.ga, 1 ordevanoranjenassau.nl, 1 ordigame.com, 1 ordilo.org, 1 +ordina.tk, 1 ordio.co.nz, 1 ordner.tk, 1 ordoh.com, 1 @@ -90802,7 +91513,6 @@ orefice.roma.it, 1 oregon2020census.gov, 1 oregonenergysaver.com, 1 oregonmenshealth.com, 1 -oreka.one, 1 oreka.online, 1 orel-city.ml, 1 orel-sait.tk, 1 @@ -90883,7 +91593,7 @@ originalescaro.tk, 1 originalmusicstream.tk, 1 originalniknihy.cz, 1 originalpharmacygrup.ml, 1 -originalseconds.com, 1 +originalseconds.com, 0 originaltee.uk, 1 origingames.tk, 1 originpc.com, 0 @@ -91102,6 +91812,7 @@ osssr.com, 1 osszekotatermeszettel.hu, 1 ostan-collections.net, 1 ostan-nku.tk, 1 +ostankino.tk, 1 ostechnix.com, 1 osteendiner.com, 1 ostek.tk, 1 @@ -91113,6 +91824,7 @@ osteopathe-st-maur.com, 1 osteopathe-voisine.com, 1 osteopathie-guggenberger.de, 1 osteopatiaymasaje.com, 1 +osteriabellavista.ch, 1 osteriadelponte.tk, 1 osterkraenzchen.de, 1 ostermcbride.com, 1 @@ -91161,6 +91873,7 @@ otariarutiunian.com, 1 otchecker.com, 1 otd-dentalcare.com, 1 otdel16.tk, 1 +otdelka56.ml, 1 otdelka76.tk, 1 otdelochnik.tk, 1 otdih-krim.tk, 1 @@ -91194,6 +91907,7 @@ otomny.fr, 1 otomobilforumu.com, 1 otooil.com, 1 otopan.com, 1 +otoplastik.ml, 1 otoplenie-ufa.ml, 1 otorino.tk, 1 otorium.gq, 1 @@ -91321,6 +92035,7 @@ outdoorlightingthousandoaks.com, 1 outdoorlightingwestlakevillage.com, 1 outdoormanufaktur.com, 0 outerface.net, 1 +outerheaven.pro, 1 outerlimitsdigital.com, 1 outernet.tk, 1 outerspace.ga, 1 @@ -91360,7 +92075,6 @@ outsourcingnominabogota.com, 1 outstack.vote, 1 outstanding.tk, 1 outstandingpromotion.com, 1 -outurnate.com, 0 outwoodz.co.uk, 1 ouvindo.com.br, 1 ouwerling.tk, 1 @@ -91406,6 +92120,7 @@ overmorgen.nl, 1 overnetfaq.tk, 1 overnetworld.tk, 1 overnightglasses.com, 1 +overpb.gq, 1 overps.cf, 1 overrated.ga, 1 overratedtech.com, 1 @@ -91804,6 +92519,7 @@ padmagroup.com, 1 padovaoggi.it, 1 padpilot.co, 1 padron.com.es, 1 +padshah.tk, 1 paducaheic.com, 1 padzilla.com, 1 pae.com, 1 @@ -91859,6 +92575,7 @@ pagewizz.com, 1 pagexl.com, 1 pagiamtzis.com, 1 pagina394.com.br, 1 +paginamaravillosa.tk, 1 paginas-web.net, 1 paging.blog, 0 pagliucadb.ddns.net, 1 @@ -91978,6 +92695,7 @@ palawan.jp, 0 palazzo.work, 1 palazzofiano.it, 1 palem.com, 1 +palenque.tk, 1 paleo.io, 1 paleodietfoodlist.com, 1 paleodietrecipes.com, 1 @@ -92042,6 +92760,7 @@ pamc.tk, 1 pamelaemarionimoveis.com.br, 1 pamiers-citoyenne.fr, 1 pamlightdesign.com, 1 +pamm.tk, 1 pamontecarloclub.tk, 1 pamperssamples.ca, 1 pamsorel.co.za, 1 @@ -92111,6 +92830,7 @@ pandora.com.tr, 1 pandoramutiara.id, 1 pandorarox.com, 1 pandorum.cf, 1 +panduan-hamil.tk, 1 pandymic.com, 1 panel-stroy.cf, 1 paneldewelopera.pl, 1 @@ -92202,6 +92922,7 @@ pap.la, 0 papa---mama.tk, 1 papa-online.tk, 1 papa-webzeit.de, 1 +papabrand.tk, 1 papadoccaffe.pt, 1 papadopoulos.me, 1 papakarlohas.ru, 1 @@ -92298,10 +93019,12 @@ parallel-creative.co.uk, 1 parallel-worlds.tk, 1 parallelpython.com, 1 paraluman.be, 1 +paralysis.ga, 1 paramapa.com.py, 1 paramaquetas.com, 1 paramarq.com, 1 paramascotas.vip, 1 +paramo-pineiro.tk, 1 paramusborough.gov, 1 paranoid.is, 1 paranoidandroid.tk, 1 @@ -92312,10 +93035,14 @@ paranoxer.hu, 1 paranoxido.tk, 1 parapenteciconia.tk, 1 parapickgames.ga, 1 +paraplyen.tk, 1 +parapsihologia.tk, 1 parareflex.fr, 1 paras.tk, 1 parasatria.tk, 1 parasitologyclub.org, 1 +parasomnia.tk, 1 +parastaran.tk, 1 parasympathy.com, 1 paratlan.hu, 1 paratlantalalkozas.hu, 1 @@ -92354,6 +93081,7 @@ parentsintouch.co.uk, 1 parenttheirpassion.com, 1 paretoit.com, 1 paretorule.cf, 1 +parfum-best.ml, 1 parfumer.tk, 1 parfumi.tk, 1 parfumtester-100.ml, 1 @@ -92410,6 +93138,7 @@ parkers.ga, 1 parkers.gq, 1 parkers.ml, 1 parkers.tk, 1 +parket.gq, 1 parketsn.ru, 1 parkettdielen.net, 1 parking4less.com, 0 @@ -92429,6 +93158,7 @@ parkvetgroup.com, 1 parkviewmotorcompany.com, 1 parkwayminyan.org, 1 parlakjurnal.com, 1 +parlament.cf, 1 parlamento.gub.uy, 1 parlamentum.com.br, 1 parleamonluc.fr, 1 @@ -92445,13 +93175,19 @@ parodesigns.com, 1 paroisses-theix-surzur.com, 1 paroli.pl, 1 parolu.io, 1 +parovozov.ga, 1 +paroxetine.gq, 1 parperfeito.pt, 1 +parque-batlle.tk, 1 +parquebatlle.tk, 1 parquettista.milano.it, 1 parquettista.roma.it, 1 parratennis.com.au, 1 parrocchiadimeana.tk, 1 parrocchiamontevecchia.it, 1 +parroquiacorazondemaria.tk, 1 parroquiadesanlesmes.tk, 1 +parrotbook.cf, 1 parry.org, 1 pars.work, 1 parsahosseinpour.com, 1 @@ -92472,8 +93208,11 @@ partecipa.tn.it, 1 partenopei.net, 1 parthkolekar.me, 1 particle-vision.ch, 1 +particles.cf, 1 partido-libertario.tk, 1 +partidolibertario.tk, 1 partigetir.com, 1 +partii.tk, 1 partijtjevoordevrijheid.nl, 0 partin.nl, 1 partiono.com, 1 @@ -92485,7 +93224,10 @@ partner-finden.tk, 1 partner.sh, 1 partner.su, 1 partnerbeam.com, 1 +partnerchik.tk, 1 +partnerforex.tk, 1 partnermobil.de, 1 +partnerobzor.tk, 1 partners4results.net, 1 partnersofprc.com, 1 partnertaxhub.com, 1 @@ -92493,6 +93235,7 @@ partnerwerk.de, 0 partofthequeue.cf, 1 partofthequeue.ga, 1 partofthequeue.gq, 1 +partofthequeue.ml, 1 parts4phone.com, 0 partsavto.tk, 1 partsbox.com, 1 @@ -92510,6 +93253,7 @@ partyaccommodationsest.ga, 1 partyausstatter24.de, 1 partybounceplay.co.uk, 1 partyclub.tk, 1 +partycoin.ga, 1 partydj.be, 1 partyevents.tk, 1 partyhireliverpool.co.uk, 1 @@ -92536,6 +93280,7 @@ pasaruang.id, 1 pasatiempos.tk, 1 pascal-bourhis.com, 1 pascal-koelsch.de, 1 +pascal-ua.tk, 1 pascal-vogel.com, 1 pascal-wittmann.de, 1 pascal90.de, 1 @@ -92552,6 +93297,7 @@ pascoaselecta.com, 1 pascocountyfl.gov, 1 pascopresents.com, 1 pascovotes.gov, 1 +pascualberniz.tk, 1 pascualinmuebles.com, 1 pasearch.nl, 1 paseelite.co, 1 @@ -92595,7 +93341,9 @@ passionegriglia.com, 1 passionpictures.eu, 1 passions-art.com, 1 passionsorigen.cat, 1 +passive-work.gq, 1 passiveseinkommen.tk, 1 +passivhaus.tk, 1 passky.org, 1 passover-fun.com, 1 passphrase.today, 1 @@ -92620,6 +93368,7 @@ passwd.org, 1 passwizard.com, 1 password-checker.de, 1 password.consulting, 1 +passwordgenerator.ml, 1 passwordkeeperbooks.com, 1 passwordlist.io, 0 passwords.google.com, 1 @@ -92651,19 +93400,23 @@ pasteworks.com, 1 pasticceria.milano.it, 1 pasticcerialorenzetti.com, 1 pasticceriaveneziana.ga, 1 +pastillased.gq, 1 pastimeproject.com, 1 pastinfluences.com.au, 1 pastorbelgagroenendael.com.br, 1 pastorcanadense.com.br, 1 pastordocaucaso.com.br, 1 pastorello.cf, 1 +pastorello.ga, 1 pastorello.gq, 1 pastori-kollegen.de, 1 +pastorluciano.tk, 1 pastormaremanoabruzes.com.br, 1 pastorsline.com, 1 pastorsuico.com.br, 1 pastrybakerymachinery.com, 1 pasugo.tk, 1 +paszkowski.tk, 1 pasztor.at, 1 patagosfm.tk, 1 patalie.cz, 0 @@ -92719,6 +93472,7 @@ patiosheders.ga, 1 patioshedest.ga, 1 patisserie918.herokuapp.com, 1 patlis.com, 1 +patmanx.tk, 1 patorganiser.co.uk, 1 patorganiser.com, 1 patorganiser.com.au, 1 @@ -92728,6 +93482,7 @@ patri.fr, 1 patric-lenhart.de, 1 patrice-carriere.tk, 1 patricefyffe.gq, 1 +patriceonline.tk, 1 patricia-lackovic.from.hr, 1 patriciadelamora.tk, 1 patriciakraken.at, 1 @@ -92751,6 +93506,7 @@ patricklustigmediation.com, 1 patrickod.com, 1 patrickpeeters.com, 1 patricksymmes.com, 1 +patrikjohan.cf, 1 patrikjohan.ga, 1 patrikjohan.gq, 1 patrikjohan.tk, 1 @@ -92760,6 +93516,7 @@ patrikzk.eu, 1 patriotbearingsupply.com, 1 patriotcs.tk, 1 patriotsaustralia.com, 1 +patriquefashion.tk, 1 patris-querre.com, 1 patrisnews.com, 1 patrocinio.com.br, 1 @@ -92778,6 +93535,7 @@ pattuka.com, 1 pattyboobs.net, 1 pattyliao.com, 1 patystation.com, 1 +pauct.com, 1 paudley.ca, 1 paudley.com, 1 paudley.org, 1 @@ -92800,7 +93558,6 @@ paulc-themovie.com, 1 paulcamper.de, 1 paulchua.tk, 1 paulcloud.fr, 1 -paulcoldren.com, 1 paulcoldren.org, 1 paulcooper.me.uk, 1 pauld.codes, 1 @@ -92813,14 +93570,19 @@ paulharrisoncars.com, 1 paulibean.tk, 1 paulinaschubert.net, 1 paulinewesterman.nl, 1 +paulini.ga, 1 +pauljackson.ga, 1 pauljmartinez.com, 1 pauljonathan.dk, 1 pauljrowland.co.uk, 1 pauljzak.com, 1 paullockaby.com, 1 paulmarc.org, 1 +paulmarvin.tk, 1 pauloalcobianeves.pt, 1 paulober.eu, 1 +paulocolacino.tk, 1 +paulogarcia.tk, 1 paulopeters.com.br, 1 paulorochago.com.br, 1 paulov.com, 1 @@ -92868,6 +93630,7 @@ pavelrebrov.com, 1 pavelstriz.cz, 1 paveltoman.cz, 1 paven.io, 0 +pavernosmatao.tk, 1 pavingtiles.tk, 1 pavlic.se, 1 pavlov-ledec.cz, 1 @@ -92880,11 +93643,14 @@ pawapuro.tk, 1 pawchewgo.com, 1 pawealthmanagement.com, 1 pawel-international.com, 1 +pawelgo.pl, 1 pawelnazaruk.com, 1 pawelurbanek.com, 1 pawelurbanski.com, 1 pawgearlab.com, 1 pawneecountyne.gov, 1 +pawnsoft.tk, 1 +pawpatrol.tk, 1 pawpawtownshipmi.gov, 1 pawserv.pw, 1 pawson.tk, 1 @@ -92977,14 +93743,17 @@ payupay.ru, 1 paywait.com, 1 payzang.com, 1 pazarlab.com, 1 +pazyarmonia.tk, 1 pb-design.ch, 1 pb-eatz.com, 1 pb.ax, 0 pba.org.uk, 1 pback.se, 1 +pbcables.tk, 1 pbcknd.ml, 1 pbcpao.gov, 1 pbern.xyz, 1 +pbest.tk, 1 pbmdiscounter.nl, 1 pbo.vic.gov.au, 1 pborn.eu, 1 @@ -93004,6 +93773,7 @@ pc-master.pl, 1 pc-porady.pl, 1 pc-remont.tk, 1 pc-servis-brno.com, 1 +pc-soft.gq, 1 pc-soft.tk, 1 pc-stuff.tk, 1 pc-taskal.net, 1 @@ -93036,6 +93806,7 @@ pcdroid.ga, 1 pcdroid.tk, 1 pcegy.com, 1 pcel.com, 1 +pcexpress.tk, 1 pcf-frankfurt.de, 1 pcf.com, 1 pcf92.fr, 1 @@ -93059,16 +93830,20 @@ pcmkrembangan.or.id, 1 pcmobile.tech, 1 pcmr.info, 1 pcmr.rocks, 1 +pcnewsoft.tk, 1 pcnotdienst-oldenburg-rastede.de, 1 pcpao.gov, 1 pcpirates.tk, 1 pcplaza.tk, 1 pcprkolo.pl, 1 pcproblem.tk, 1 +pcpromaroc.ma, 1 pcpuhastaja.tk, 1 pcrab.ml, 1 pcrecovery.ga, 1 pcrypt.org, 1 +pcsafe.cf, 1 +pcsbrasil.ml, 1 pcscotus.gov, 1 pcsetting.com, 1 pcsolottodraw.com, 1 @@ -93100,14 +93875,20 @@ pd1rnt.nl, 1 pd2bans.org, 1 pdf-archive.com, 0 pdfbear.com, 1 +pdfbook-dl.ml, 1 +pdfbooksonline.gq, 1 pdfconvert.me, 1 pdfflier.cf, 1 pdfget.com, 1 pdfko.com, 1 +pdflip.cf, 1 +pdfmanga.tk, 1 pdfmint.com, 1 pdfpassword.org, 1 pdfpasswort.de, 1 pdfpedia.cf, 1 +pdfprostore.cf, 1 +pdfquran.tk, 1 pdfresizer.com, 1 pdfsearch.org, 0 pdfsearches.com, 1 @@ -93166,6 +93947,7 @@ pearlteethers.ga, 1 pearlteethest.ga, 1 pearsonbsl.com, 1 pearstudios.cf, 1 +pearvn.tk, 1 pease.co.nz, 1 peathealth.co.nz, 1 peatsuki.com, 1 @@ -93175,8 +93957,10 @@ pebblenest.uk, 1 pebblepointapartmentsstl.com, 1 pebkac.gr, 0 peblet.be, 1 +pebook.tk, 1 pecadis.de, 1 pecetowicz.pl, 1 +pecheneg.tk, 1 pechibani.by, 0 pechka.tk, 1 pechnik-negara.ru, 0 @@ -93191,6 +93975,7 @@ pedagogiaaopedaletra.com, 1 pedagoplume.fr, 1 pedaleuse.be, 1 pedalia.cc, 1 +pedalirovanie.tk, 1 pedalr.eu, 1 pedalsbarcelona.com, 1 peddy.dyndns.org, 1 @@ -93212,13 +93997,16 @@ pedradatattoo.com, 1 pedrazanoticias.tk, 1 pedro-fonseca.com, 1 pedro.com.es, 1 +pedrobotias.tk, 1 pedrolamas.com, 1 pedrollo-ua.com, 1 pedroministro.pt, 1 +pedromunoz.tk, 1 pedrooliveira.tk, 1 pedrosanto.tk, 1 pedrosart.it, 1 pedrosaurus.com, 1 +pedrosillo-delosaires.tk, 1 pedrotimoteo.com, 1 pedziran.com, 1 peeekaaabooo.com, 1 @@ -93271,6 +94059,7 @@ pefricea.com, 1 pegas-studio.net, 1 pegasnet.tk, 1 pegrum.rocks, 1 +pegundugun.tk, 1 peifi.de, 0 peinture-77.fr, 1 peippo.at, 1 @@ -93289,8 +94078,10 @@ pelevin.gq, 1 pelgrimhof.be, 1 pelhamalrecreation.gov, 1 pelhamlibraryal.gov, 1 +pelhrimov-strmechy.tk, 1 pelican.ie, 1 pelicans.tk, 1 +peliculaonline.tk, 1 peliculas-viejas.com, 1 peliculaslatino.tk, 1 pelikan.xyz, 1 @@ -93299,6 +94090,7 @@ pellet.pordenone.it, 1 pelletgrillreviews.com, 1 pelletizermill.com, 1 pelletsprice.com, 1 +pelmeni.cf, 1 pelmeniuralskie.tk, 1 pelo.tk, 1 pelopogrund.com, 0 @@ -93322,6 +94114,9 @@ pemdas.xyz, 1 pemedia.de, 1 pemez.com, 1 pems.gov.au, 1 +pen15art.tk, 1 +pena-party.tk, 1 +pena600.tk, 1 penatizavarise.com, 1 penaugustin.com, 1 pencepay.com, 1 @@ -93360,16 +94155,20 @@ pennington.io, 1 pennsauken.gov, 1 pennyapp.io, 0 pennybot.tk, 1 +pennymail.ga, 1 pennywise.tk, 1 peno1.tk, 1 penon.tk, 1 penopoly.cf, 1 +penopoly.ga, 1 penopoly.gq, 1 penopoly.ml, 1 penopoly.tk, 1 +penosa.ga, 1 penpalezine.com, 1 penrite.pl, 1 penrithapartments.com.au, 1 +pens-money.cf, 1 pens-money.ga, 1 pens-money.gq, 1 pens.com, 1 @@ -93378,10 +94177,13 @@ pensacolawinterfest.org, 1 pensador.com, 1 pensador.info, 1 pensan.ge, 1 +pensatore.tk, 1 +pensia.tk, 1 pensieridigitali.tk, 1 pensioenfonds-ey.nl, 1 pension-am-alten-waschhaus.de, 1 pension-chevaux.com, 1 +pension-ua.tk, 1 pension-veldzigt.nl, 1 pension.ga, 1 pensionecani.roma.it, 1 @@ -93389,6 +94191,7 @@ pensioner-1000.tk, 1 pensionesdominicanas.com, 1 pensionstal.tk, 1 pensiontrackerers.ga, 1 +pensiun.ga, 1 pensiunea-maria.tk, 1 pensiunea-paco.ro, 1 pensiunealido.ro, 1 @@ -93397,6 +94200,7 @@ penstash.net, 1 pentacodes.com, 1 pentagon-area.tk, 1 pentagonix.com.br, 1 +pentagram.cf, 1 pentagram.me, 1 pentamexicali.tk, 1 pentandra.com, 1 @@ -93489,12 +94293,17 @@ percraft.com, 1 percussiontonal-forum.de, 1 percy.io, 1 percydutton.co.uk, 1 +percymagic.tk, 1 perd.re, 1 +perdanabagus.tk, 1 perdele-draperii.ro, 1 +perdita-capelli.tk, 1 perdolyathlendr.tk, 1 perecraft.com, 1 +peredovaya.tk, 1 peredoz.tk, 1 pereezd.ml, 1 +peremena.ml, 1 perenne.ee, 1 peresypchanka.tk, 1 pereuda.com, 1 @@ -93507,11 +94316,13 @@ perezplumbinginc.com, 1 perf1.com, 1 perfare.net, 1 perfect-carstyle.de, 1 +perfect-dream.tk, 1 perfect-privacy.com, 1 perfect-tour.ro, 1 perfect8.com.tw, 1 perfectbalance.tech, 1 perfectcloud.org, 1 +perfectcommunity.ga, 1 perfecteclass.com.cy, 1 perfectfocuseyecare.com, 1 perfectgift.com, 0 @@ -93519,6 +94330,9 @@ perfectgift.tk, 1 perfectlyluxe.ml, 1 perfectlyluxe.tk, 1 perfectmatch.cf, 1 +perfectme.ml, 1 +perfectme.tk, 1 +perfectosidiotaspunk.tk, 1 perfectplrarticles.ga, 1 perfectscook.com, 1 perfectsize.pl, 1 @@ -93526,6 +94340,7 @@ perfectsmilesdentistry.net, 1 perfectsnap.co.uk, 1 perfectsoft.tk, 1 perfectweb.today, 1 +perfectworldbot.tk, 1 perfei.com, 0 perfekt-style.com, 1 perfektesgewicht.com, 1 @@ -93553,6 +94368,7 @@ pergam.by, 1 pergam.kz, 1 pergamentka-apartments.cz, 1 pergamo.eu, 1 +pericsope.gq, 1 peridotcapitalpartners.com, 1 perini.com.au, 1 periodex.co, 1 @@ -93573,9 +94389,12 @@ perlina.co.il, 1 perm-avia.ru, 1 perm-jur.ch, 0 perm-juridique.ch, 0 +perm-l2.tk, 1 perm4.com, 1 +permaculture.cf, 1 permajackofstlouis.com, 1 permajackstlouis.com, 1 +permak.tk, 1 permanence-juridique.com, 0 permanencejuridique-ge.ch, 0 permanencejuridique.com, 0 @@ -93611,6 +94430,7 @@ perretes.com.es, 1 perrigo.it, 1 perritas.tk, 1 perritos.tk, 1 +perron.ml, 1 perroon.eu, 1 perroquet-passion.ch, 0 perrosenlapradera.com, 1 @@ -93645,6 +94465,7 @@ personalisiertesgeschenk.tk, 1 personalityjunkie.com, 1 personalizarmandops5.com, 1 personaljokes.cf, 1 +personaljokes.ml, 1 personaljokesers.ga, 1 personaljokesest.ga, 1 personaljourneys.co.nz, 1 @@ -93668,6 +94489,7 @@ perthtrains.net, 1 perthunicyclists.tk, 1 perthvintagelimousines.com.au, 1 perthweekend.com.au, 1 +pertwarp.tk, 1 perubusca.nl, 1 perugamerz.tk, 1 perugiatoday.it, 1 @@ -93675,6 +94497,8 @@ perulinks.tk, 1 perun.wiki, 1 perunderforos.tk, 1 perunsoft.rs, 1 +perupoemas.tk, 1 +peruprogramadores.tk, 1 perusteet.tk, 1 peruvianhairextension.tk, 1 peruvianhumanhair.tk, 1 @@ -93682,10 +94506,12 @@ peruvianphotography.com, 1 peruviantravel.tk, 1 pervacio.hu, 1 perved.org, 1 +pervejshijistochnik.tk, 1 perversa.cl, 1 perversas.cl, 1 pervesk.lt, 1 pervoklass.cf, 1 +pervomaysk-city.ml, 1 perzeidi.hr, 1 pesandansampai.tk, 1 pesar.tk, 1 @@ -93694,6 +94520,7 @@ pescanetworks.tk, 1 pescco.com.br, 1 pesitalia.tk, 1 pesnik.tk, 1 +pesnitut.ga, 1 pesquisasremuneradas.net, 1 pessa-webdesign.tk, 1 pessebrevivent-lallacuna.tk, 1 @@ -93706,18 +94533,21 @@ pestici.de, 1 pestkill.info, 1 pestleandmortar.hk, 1 pesto.video, 1 +pestpatrol.ga, 1 pestpilis.hu, 1 pestra.tk, 1 -pestzilla.ae, 0 +pet-cat-accessories.ml, 1 pet-distributor.cz, 1 pet-guide.net, 1 pet-hotel-mura.net, 1 pet-net.tk, 1 pet-tekk.co.uk, 1 +peta.tk, 1 petabits.de, 1 petabundant.ga, 1 petal-ms.gov, 1 petalkr.com, 1 +petalsoft.tk, 1 petamazing.ga, 1 petaouchnok.ch, 1 petar.fyi, 1 @@ -93727,6 +94557,7 @@ petblaster.ga, 1 petblender.ga, 1 petbooking.it, 1 petbrowser.ga, 1 +petburial.cf, 1 petcareonline.com, 1 petcareproject.com, 1 petcharte.ga, 1 @@ -93764,14 +94595,17 @@ petercawthron.com, 1 peterdavehello.org, 1 peterfiorella.com, 1 peterfolta.net, 1 +petergudo.tk, 1 peterheery.me, 0 peterhennes.de, 1 peterherman.tk, 1 peterhome.cn, 1 +peterhome.tk, 1 peterhuetz.at, 1 peterhuetz.com, 1 peterjin.org, 1 peterjohnson.io, 1 +peterkotula.tk, 1 peterkrivanek.com, 1 peterkshultz.com, 0 peterlajos.com, 1 @@ -93779,6 +94613,7 @@ peterlew.is, 1 peterlmai.com, 1 petermaar.com, 1 petermamo.com, 1 +petermuenster.tk, 1 peteroerlemans.be, 1 peters.consulting, 1 petersburgmi.gov, 1 @@ -93807,6 +94642,7 @@ petherwick.co.uk, 1 petherwick.com, 1 petherwicks.co.uk, 1 petherwicks.com, 1 +peticion.tk, 1 petimagine.ga, 1 petit-archer.com, 1 petitcyclone.fr, 1 @@ -93837,14 +94673,17 @@ petnow.gr, 1 petopedia.ga, 1 petopplis.ga, 1 petops.de, 1 +petos.tk, 1 petover.ga, 1 petpipe.ga, 1 petpower.eu, 1 +petpuppy.tk, 1 petr.as, 1 petr22shcool.tk, 1 petra-toroid.ro, 1 petrachuk.ru, 1 petrally.ga, 1 +petrarca.tk, 1 petrasestakova.cz, 1 petrates.ga, 1 petredhot.ga, 1 @@ -93857,13 +94696,13 @@ petrole.tk, 1 petroleum-schools.com, 1 petroll.ga, 1 petrologisticsllc.com, 1 -petroom.vn, 1 petroscand.eu, 1 petrostathis.com, 0 petrotranz.com, 1 petrotrustlibya.com, 1 petrov.engineer, 1 petrovich.pro, 0 +petrovitch.tk, 1 petrozavodsk.ga, 1 petruv-grunt.cz, 1 petruzz.net, 1 @@ -93875,8 +94714,10 @@ petschnighof.at, 1 petsdeners.ga, 1 petsdenest.ga, 1 petsnapshot.ga, 1 +petsnews.ga, 1 petsnowshoecats.com, 1 petsnvets.org, 1 +petspark.tk, 1 petsplash.ga, 1 petstick.ga, 1 petstok.com.br, 1 @@ -93889,6 +94730,7 @@ pettreasure.ga, 1 pettreats.com.br, 1 petunder.ga, 1 peturnashes.ga, 1 +petutility.tk, 1 petvisual.ga, 1 petwall.info, 1 petwatchersnj.com, 0 @@ -93914,6 +94756,7 @@ pfarchimedes-pensioen123.nl, 1 pfarreiengemeinschaft-neuerburg.de, 1 pfarrhaus-mon.ch, 1 pfcafeen.dk, 1 +pfcchavdar.tk, 1 pfcharland.com, 1 pfd-nz.com, 1 pfdevroye.com, 1 @@ -93950,6 +94793,7 @@ pg-mana.net, 1 pg-sec.com, 1 pg-sec.cz, 1 pg-sec.eu, 1 +pgazette.tk, 1 pgh-art.com, 1 pgklaw.com.au, 1 pglaum.tk, 1 @@ -93984,6 +94828,7 @@ phangelagroup.co.za, 1 phannuoc.net, 1 phantasia.tk, 1 phantasie.cc, 1 +phantasmag.gq, 1 phantastikon.de, 1 phantom-games.tk, 1 phantomfund.cf, 1 @@ -93991,6 +94836,7 @@ phantomfund.ml, 1 phantomfunders.ga, 1 phantomlighting.com, 1 phantomlord.tk, 1 +phantomphans.tk, 1 phantomware.tk, 1 phaochongtran.com, 1 pharma24.de, 1 @@ -94038,6 +94884,7 @@ phellow.de, 1 phellowseven.com, 1 phelx.de, 1 phen-garcinia.info, 1 +phenergan.ga, 1 phenergan.ml, 1 phenixairsoft.com, 1 phenixlab.fr, 1 @@ -94082,6 +94929,7 @@ philipdb.nl, 1 philipdeussen.com, 1 philipdeussen.de, 1 philiperiksson.se, 1 +philipkdick.tk, 1 philipkobelt.ch, 1 philiplowran.tk, 1 philipmordue.co.uk, 1 @@ -94094,13 +94942,16 @@ philippe-mignotte.fr, 1 philippebonnard.fr, 1 philippegoffin.be, 1 philippehannes.fr, 1 +philippekhau.tk, 1 philippemunn.photo, 1 philipperoose.be, 0 philippheenen.de, 0 philippinedroneassociation.org, 1 +philippinegreenparty.tk, 1 philippinenewsvanguard.tk, 1 philippkaindl.de, 1 philippkeschl.at, 1 +philipslater.cf, 1 philipslater.ga, 1 philipslater.gq, 1 philipslater.ml, 1 @@ -94122,6 +94973,7 @@ phillyinjurylawyer.com, 1 philna.sh, 1 philo.shop, 1 philographie.com, 1 +philology.tk, 1 philomathiclife.com, 1 philosoftware.com.br, 1 philosophers.tk, 1 @@ -94135,12 +94987,14 @@ philrights.org, 1 phils1990.com, 1 philsturgeon.uk, 1 philux.ch, 0 +philwilson-green.cf, 1 philwilson-green.ga, 1 philwilson-green.gq, 1 philwilson-green.ml, 1 phimtor.com, 1 phinikarides.net, 1 phinphanatic.com, 1 +phiomegachi.tk, 1 phishing-studie.org, 1 phishingusertraining.com, 1 phive.eu, 1 @@ -94161,6 +95015,7 @@ phographer.com, 1 pholder.com, 1 phone-hospital.eu, 1 phone-service-center.de, 1 +phone-spy.ml, 1 phone42.com, 1 phone888.cn, 1 phonearena.com, 1 @@ -94169,6 +95024,7 @@ phonefleet.fr, 1 phonegnome.com, 1 phoneincentivesers.ga, 1 phoneincentivesest.ga, 1 +phoneinformation.cf, 1 phoneinformation.ga, 1 phoneinformation.gq, 1 phoneinformation.ml, 1 @@ -94192,20 +95048,25 @@ phoneyourselfers.ga, 1 phoneyourselfest.ga, 1 phonix-company.fr, 1 phonosynthese.tk, 1 +phonosynthesis.tk, 1 phormance.com, 1 phosagro.biz, 0 phosagro.com, 0 phosagro.ru, 0 +phosforum.ga, 1 phosphene.io, 1 photistic.org, 1 photo-blowup.com, 0 photo-booth.ro, 1 photo-castings.com, 1 +photo-design.ml, 1 +photo-host.tk, 1 photo-journ.com, 0 photo-livesearch.com, 1 photo-news.tk, 1 photo-on-event.de, 1 photo-paysage.com, 1 +photo-travel.tk, 1 photoaid.com, 1 photoancestry.com, 1 photoartelle.com, 1 @@ -94213,12 +95074,15 @@ photobank.ml, 1 photoblock.tk, 1 photobooth-romania.ro, 1 photobooth.id, 1 +photobosco.tk, 1 photobyzachary.tk, 1 +photochka.tk, 1 photoclothing.tk, 1 photocode.co.rs, 1 photoconferenceers.ga, 1 photoconferenceest.ga, 1 photodeal.fr, 1 +photodyna.tk, 1 photofinale.com, 1 photogelique.be, 1 photogest.com, 1 @@ -94226,6 +95090,7 @@ photograni.ru, 1 photographe-reims.com, 0 photographeremploymenters.ga, 1 photographeremploymentest.ga, 1 +photographerforwedding.tk, 1 photographersdaydream.com, 1 photographershub.ng, 1 photography-workshops.net, 1 @@ -94261,7 +95126,9 @@ phototechnique.tk, 1 phototravel.uk, 1 phototrio.com, 1 photoutils.com, 1 +photowall.tk, 1 photowhimsybymegan.com, 1 +photowire.uk, 1 photune.net, 1 phoxden.net, 1 phoxworld.com, 1 @@ -94269,6 +95136,7 @@ php-tuning.de, 1 php.watch, 1 phparcade.com, 1 phpartners.org, 1 +phpbb-tutorials.cf, 1 phpbbchinese.com, 0 phpdevlabs.tk, 1 phpdorset.co.uk, 1 @@ -94287,6 +95155,7 @@ phpstan.org, 1 phpunit.de, 1 phr34kz.pw, 0 phra.gs, 1 +phreakaus.tk, 1 phreaker.ml, 1 phreaknet.org, 1 phrive.space, 1 @@ -94306,6 +95175,10 @@ phuket-nash.ga, 1 phuket-rawai.school, 1 phuket-tour.ga, 1 phuketbeach.tk, 1 +phuketroman.tk, 1 +phuketstyle.tk, 1 +phukettour.ga, 1 +phukettravel.gq, 1 phukienchanh.com, 1 phulyshop.com, 0 phumin.in.th, 1 @@ -94353,6 +95226,7 @@ pi-net.dedyn.io, 1 pi-supply.com, 1 pi1.io, 1 pia-bardo.tk, 1 +piadouwes.tk, 1 piajuly.net, 1 pialove.net, 1 pianetaottica.eu, 1 @@ -94370,11 +95244,13 @@ pianoschmitz.de, 1 pianostemmer.eu, 1 pianotuning.cn, 0 pianyigou.com, 1 +piaohong.tk, 1 piasativa.com, 1 piasto.com.cy, 1 piata-imobiliara.tk, 1 piataborrachas.com.br, 1 piatabrasil.com.br, 1 +piatenko.ml, 1 piatika.com, 1 piatika.in, 1 piavonpadberg.com, 1 @@ -94406,6 +95282,7 @@ pickaw.click, 1 pickaw.com, 1 pickaw.link, 1 pickawaycountyohio.gov, 1 +picked.cf, 1 pickelhaubes.com, 1 pickemsheet.com, 1 picketfence.tk, 1 @@ -94422,6 +95299,7 @@ pickswapest.ga, 1 pickupalliance.com, 1 pickupenc.ru, 1 piclect.com, 1 +picme.tk, 1 picobellos.tk, 1 picom365.com, 1 picone.com.au, 1 @@ -94453,6 +95331,7 @@ pieceofcake.solutions, 1 pieceofme.be, 0 piecestech.com, 1 piechart.ga, 1 +piedrahita.tk, 1 piedrasblancas.gov, 1 piedroshop.nl, 1 piekacz.co.uk, 1 @@ -94466,6 +95345,7 @@ pieland.eu, 1 piem.org, 1 piemonteeconomy.it, 1 piening.ddns.net, 1 +piensa-escribe.tk, 1 piepermail.nl, 1 piepschuimlogo.nl, 1 pieq.eu, 1 @@ -94486,16 +95366,20 @@ pierrejeansuau.fr, 1 pierreterrien.fr, 1 pierreyvesdick.fr, 1 piersmana.com, 1 +pierson.tk, 1 pierstone.com, 1 pierwsza-wyprawka.pl, 1 piesel-piepser.de, 1 +pietbrakman.tk, 1 pietechsf.com, 0 pieter-verweij.nl, 1 +pieterbamps.tk, 1 pieterbos.nl, 1 pieterdev.net, 1 pietrabarrasso.com, 1 pietraglobal.com, 1 pietron.name, 1 +pietrosoft.tk, 1 pietrzyk.it, 1 pietz.uk, 1 pieux-expert.com, 1 @@ -94603,9 +95487,12 @@ pincong.rocks, 1 pindakaas.ga, 1 pindakaas.tk, 1 pindanutjes.be, 0 +pindostan.tk, 1 pinebaylibrary.org, 1 -pinebeecreative.com, 1 +pinebeecreative.com, 0 +pinebrook.tk, 1 pinecitymn.gov, 1 +pinedadegiguela.tk, 1 pinellaslaser.com, 1 pinellastaxcollector.gov, 1 pinemountainnursery.com.au, 1 @@ -94616,6 +95503,7 @@ pinerivermi.gov, 1 pinetopazrealestate.com, 1 pinflix.com, 1 pinflux2.com, 1 +ping-books.cf, 1 pingandsue.us, 1 pingce.com, 1 pingpongparkinson.at, 1 @@ -94627,6 +95515,7 @@ pinhadigital.com, 1 pinigseu.xyz, 1 pinimg.com, 1 pink-check.school, 1 +pink-panther.tk, 1 pinkapple.com, 1 pinkband.tk, 1 pinkbike.com, 1 @@ -94698,18 +95587,20 @@ pintiaux.com, 1 pintoresiluro.com, 1 pintoselectricfencing.co.za, 1 pintosplumbing.co.za, 1 +pinupbets.gq, 1 pinupsex.com, 1 pioneer-car.eu, 1 pioneer-rus.ru, 1 pioneerbible.org, 1 pioneersenior.com, 1 pionierboat.cf, 1 +pionierboat.ga, 1 pionierboat.tk, 1 pionieren.tk, 1 pionplex.de, 1 pipa-shop.nl, 1 pipabella.com, 1 -pipelineengineeringsoftware.com, 1 +pipeclub.tk, 1 pipenav.gq, 1 pipenny.net, 1 piperswe.me, 1 @@ -94752,6 +95643,7 @@ pirateproxy.uno, 1 pirates-comic.com, 1 piratesbrewcoffee.net, 1 piratesforums.co, 1 +piratesofthewadden.tk, 1 piratez.tk, 1 pircher.co.uk, 1 pircher.tk, 1 @@ -94762,12 +95654,14 @@ pirnaaktuell.de, 1 pirnhub.xyz, 1 pirofire.bg, 1 pirofire.com, 1 +pirogi.ga, 1 piroleikki.co.jp, 1 pirscapital.com, 1 piruchita.com, 1 pirxpilot.me, 1 pisaggni.ch, 1 pisanpeikot.tk, 1 +pisarzowa.tk, 1 pisatoday.it, 1 piscestrade.com, 1 piscine.roma.it, 1 @@ -94776,26 +95670,34 @@ pisearch.cc, 1 pisearch.cn, 1 pisemnet.tk, 1 pisf.in, 1 +pishgamiran.tk, 1 piskenfuerwehr.de, 1 pisquettes.fr, 1 pissblau.com, 1 pissflaps.co.uk, 1 +pistonkandidatu.tk, 1 pistonpowered.com, 1 pisupp.ly, 1 piszmak.pl, 1 pit-book.com, 1 +pit-stop-sto.tk, 1 pitaiatrade.com, 1 +pitbooks.ga, 1 +pitbullclub.tk, 1 pitbullsecuritysolutions.ca, 1 pitch.com, 1 pitchforkunion.tk, 1 pitchup.com, 1 pitchupp.com, 0 pitctestdomain.gov, 1 +piter-print.tk, 1 piter178.tk, 1 piterfish.ru, 1 pitergolds.ru, 1 pitfire.io, 1 +pitius.tk, 1 pitman.tk, 1 +pitomec.tk, 1 pitot-rs.org, 1 pitou-minou.ca, 1 pitrick.tk, 1 @@ -94812,10 +95714,12 @@ piu.moe, 1 piucellulare.it, 1 piuincontri.com, 1 piuplayer.com, 1 +piurvolium.tk, 1 pius.com.br, 1 pivbar.tk, 1 pivnica.cf, 1 pivnica.ga, 1 +pivnica.gq, 1 pivnica.tk, 1 pivniraj.com, 1 pivotalshift.co.uk, 1 @@ -94833,6 +95737,7 @@ pixael.com, 1 pixalatio.tk, 1 pixca.mx, 1 pixe2019.org, 1 +pixel-history.tk, 1 pixel-perfection.com, 1 pixel-puls.de, 1 pixel.facebook.com, 0 @@ -94847,6 +95752,7 @@ pixelfiends.tk, 1 pixelglance.com, 1 pixelgliders.de, 1 pixelglue.com.au, 1 +pixelheaven.tk, 1 pixelhero.co.uk, 0 pixelion.tk, 1 pixelmattic.com, 1 @@ -94887,6 +95793,7 @@ pixxxels.cc, 1 pixyship.com, 1 pixzilla.de, 1 pizala.de, 1 +pizdelka.tk, 1 pizza-24.tk, 1 pizza-aachen.de, 1 pizza-calzone.com, 1 @@ -94905,6 +95812,7 @@ pizzahut.co.in, 1 pizzamc.eu, 1 pizzaplus.tk, 1 pizzariapartiupizza.com.br, 1 +pizzariaroma.cf, 1 pizzaslut.xyz, 1 pizzeriaamadeus.hr, 1 pizzeriasmallorca.com, 1 @@ -94923,6 +95831,8 @@ pjp.com.mt, 1 pjshop.cf, 1 pjsk.cc, 1 pjuu.com, 0 +pk-master.tk, 1 +pk-soft.tk, 1 pk.edu.ee, 1 pk.search.yahoo.com, 0 pk8k.com, 1 @@ -94940,6 +95850,8 @@ pkq5.com, 1 pkrank.com, 1 pkservice.tk, 1 pkshs.my, 1 +pkspskov.tk, 1 +pkwebsolutions.cf, 1 pl-cours.ch, 0 pl-trans.tk, 1 pl.search.yahoo.com, 0 @@ -94958,6 +95870,7 @@ placenet.fr, 1 placepugs.com, 1 placeralplato.com, 1 placercountyelections.gov, 1 +placidoandriolo.tk, 1 placker.com, 1 plagiarismcheck.org, 1 plagu.ee, 1 @@ -94977,6 +95890,7 @@ plaintextpledge.net, 1 plaintextpledge.org, 1 plaintray.com, 1 plaisirdumouvement.com, 1 +plaisiretsens.com, 1 plaisirs-coquins.com, 1 plakakodlari.com, 1 plakbak.nl, 1 @@ -95067,15 +95981,18 @@ planmemberpartners.com, 1 planned-cities.com, 1 plannedgrocery.com, 1 plannedlink.com, 1 +planning.ga, 1 planning.nl, 1 planningsagenda.nl, 1 plano.gq, 1 planodesaude.net.br, 1 planolowcarb.com, 1 planosvivointernet.com.br, 1 +planosylicencias.de, 1 planresto.com, 1 planrow.com, 1 plansaude.med.br, 1 +planshetnik.tk, 1 plansight.com, 1 plant-gift.jp, 1 plantarportugal.org, 1 @@ -95171,6 +96088,7 @@ play-casino-japan.com, 1 play-charades.com, 1 play-lu.com, 1 play-mate.tk, 1 +play-telochki.tk, 1 play.cash, 1 play.google.com, 1 play3niu1.com, 1 @@ -95204,6 +96122,7 @@ playelephant.com, 1 player.me, 1 player701.ru, 1 playerdb.co, 1 +playface.ml, 1 playgame.tk, 1 playgamenow.tk, 1 playhappywheelsunblocked.com, 1 @@ -95226,7 +96145,9 @@ playpower.tk, 1 playreal.city, 1 playreal.com.tw, 1 playsnake.org, 1 +playsoftware.tk, 1 playsprout.industries, 1 +playstation-network.ga, 1 playstationtrophies.org, 1 playtictactoe.org, 1 playtoearn.net, 1 @@ -95374,6 +96295,7 @@ plus.sandbox.google.com, 1 plus15.ml, 1 plus15.tk, 1 plus1s.site, 1 +plusbot.tk, 1 plushev.tk, 1 pluslink.co.jp, 1 plusmobile.fr, 1 @@ -95447,6 +96369,7 @@ pmoreau.org, 1 pmoscr.com, 1 pmp-art.com, 1 pmp6.fr, 1 +pmpm.tk, 1 pmrockstars.com, 1 pms.myiphost.com, 1 pmsacorp.com, 1 @@ -95612,6 +96535,8 @@ pocze.ch, 1 pod-emnik.by, 1 pod.lv, 1 podari-radost.tk, 1 +podari.tk, 1 +podarki-deda-moroza.tk, 1 podarkiboss.tk, 1 podarky.gq, 1 podarochek.tk, 1 @@ -95629,6 +96554,7 @@ podd.xyz, 1 podemos.info, 1 poderososconjurosyamarres.com, 1 podia.com.gr, 0 +podia.gq, 1 podipod.com, 1 podis.ro, 1 podivilov.com, 1 @@ -95646,6 +96572,7 @@ podroof.com, 0 podroof.com.au, 0 podshrink.de, 1 podsvojostreho.net, 1 +podvenec.tk, 1 podycust.co.uk, 1 poed.com.au, 1 poed.net.au, 1 @@ -95654,6 +96581,7 @@ poehlerflorian.de, 1 poemasonline.tk, 1 poemerx.com, 1 poemerx.net, 1 +poemindia.cf, 1 poemlife.com, 1 poems-bodywear.store, 1 poemwall.cf, 1 @@ -95665,7 +96593,9 @@ poetasmenores.tk, 1 poetenblog.tk, 1 poeticplanetimagery.com, 1 poetics.tk, 1 +poetka.tk, 1 poetry.ge, 1 +poetryinmusic.tk, 1 poetsjeboot.nl, 1 poezja.art, 1 poezja.com.pl, 1 @@ -95709,6 +96639,7 @@ points4unitedway.com, 1 pointum.com, 1 pointworksacademy.com, 1 pointzip.cf, 1 +pointzip.ml, 1 pointzipers.ga, 1 pointzipest.ga, 1 poiru.net, 1 @@ -95738,7 +96669,6 @@ pokemondb.net, 1 pokemonforums.tk, 1 pokemongoclub.tk, 1 pokemongosearch.com, 1 -pokemongostatus.org, 1 pokemonguide.tk, 1 pokemonlab.com, 1 pokemonsimulator.com, 1 @@ -95909,7 +96839,6 @@ pollpodium.nl, 1 polly-tix.uk, 1 polly.spdns.org, 1 polmods.com, 1 -polnischestoffe.eu, 1 polog.tk, 1 polomack.eu, 1 poloniainfo.com, 1 @@ -96053,6 +96982,7 @@ popinga.net, 1 popishop.tk, 1 popitsnack.com, 1 popjudge.cf, 1 +popjudge.ml, 1 popka.sk, 1 popki.tk, 1 popkins.cf, 1 @@ -96080,7 +97010,6 @@ poppinspayroll.com, 1 poppsylvie.com, 1 poppylala.com, 1 poprostuakwarystyka.pl, 1 -poprumor.com, 1 poptattoo.tk, 1 poptavka.net, 1 popular-male-kitten-names.tk, 1 @@ -96088,6 +97017,7 @@ popularcar.com, 1 popularculturegaming.tk, 1 populardiets.tk, 1 populardogs.ga, 1 +populardogs.gq, 1 populardogs.ml, 1 popularhairstyles.org, 1 population-ethics.com, 1 @@ -96123,7 +97053,6 @@ porcore.com, 1 porelcorazon.com, 1 porelsam.ml, 1 porevo.tk, 1 -porg.es, 1 poriadok.eu, 1 porinnuotiopojat.tk, 1 pork.org.uk, 1 @@ -96142,7 +97071,6 @@ pornbabetyra.org, 1 pornbay.eu, 1 pornbay.org, 1 pornblog.org, 1 -pornbot.co, 1 pornbs.com, 1 porncompanions.com, 1 porndoe.com, 1 @@ -96236,7 +97164,6 @@ portalcarriers.com, 1 portalchega.pt, 1 portaldamizade.com, 1 portaldocredito.pt, 1 -portaldogremista.com.br, 1 portaleldense.tk, 1 portalexpressservices.com, 1 portalm.tk, 1 @@ -96450,7 +97377,6 @@ potature.roma.it, 1 potcha.net, 1 potemkin.tk, 1 potentialcalm.co.uk, 1 -potentialproject.com, 1 poterepersonale.it, 1 poterscy.pl, 1 pothe.com, 1 @@ -97143,7 +98069,6 @@ princelishan.com.tw, 1 princemathew.tk, 1 princemolak.ga, 1 princes-st.org.nz, 1 -princesparktouch.com, 1 princess-vip-escort.com, 1 princess.software, 1 princessbackpack.de, 1 @@ -97857,6 +98782,7 @@ prostavropol.cf, 1 prostecheat.xyz, 1 prostitutka.cf, 1 prostitutka.ml, 1 +prostitutki-narvskaja.ga, 1 prostitytki-nijnevartovsk.club, 1 prosto-dengi.tk, 1 prostocash.com, 1 @@ -97906,6 +98832,7 @@ protegetudescanso.com, 1 proteh.com.ua, 1 protein-riegel-test.de, 1 proteinreport.org, 1 +protek.tk, 1 proteogenix-products.com, 1 proteogenix.science, 1 protestantsegemeentekaag.nl, 1 @@ -98019,7 +98946,6 @@ pru.hk, 1 pruchovi.tk, 1 pruebapg.cl, 1 pruma.com.br, 1 -pruna.org, 1 prushka.gq, 1 prushka.ml, 1 prushka.tk, 1 @@ -98123,6 +99049,7 @@ psiplex.gq, 1 psiquiatriamaubecin.com, 1 psishop.tk, 1 psitarz.com, 1 +psixotest.tk, 1 psixotesty.tk, 1 pskl.us, 1 pskov-daily.tk, 1 @@ -98831,7 +99758,6 @@ qetesh.de, 1 qetic.co.jp, 1 qewc.com, 1 qfes.qld.gov.au, 1 -qfiard.com, 1 qfinds.io, 1 qga.com.au, 1 qgblog.org, 0 @@ -99114,6 +100040,7 @@ quay.net, 1 quaydental.ie, 0 quba.fr, 1 qubes-os.org, 1 +qubhockey.tk, 1 qubicgames.com, 1 qubitechbd.com, 1 qubitsandbytes.co.uk, 1 @@ -99466,6 +100393,7 @@ raamattuopisto.fi, 1 raar.tk, 1 raaynk.com, 1 rabalefood.com, 1 +raballder.tk, 1 rabatcity.tk, 1 rabatt24.net, 1 rabatt24.org, 1 @@ -99492,6 +100420,7 @@ rabotaprofily.tk, 1 rabotayte.tk, 1 rabotenkadot.tk, 1 rabynska.eu, 1 +racaliz.tk, 1 racamera.com, 1 racasdecachorro.org, 1 raccoltadifferenziata.it, 1 @@ -99632,7 +100561,6 @@ radiocusco.tk, 1 radiodance.tk, 1 radiodarkwolf.tk, 1 radiodeluxe.ml, 1 -radiodetali-gold.ru, 1 radiodeutsch.com, 1 radiodevrijheid.tk, 1 radiodiagonal.tk, 1 @@ -99683,7 +100611,6 @@ radiomc.tk, 1 radiomedia.tk, 1 radiomercure.net, 1 radiometal.tk, 1 -radiometeor.com, 1 radiomikelerentxun.tk, 1 radiomixer.net, 1 radiomodem.dk, 1 @@ -99697,6 +100624,7 @@ radionrg.tk, 1 radiooffice.tk, 1 radioparquesur.tk, 1 radioperfect.tk, 1 +radiopharereims.tk, 1 radiopicaflor.tk, 1 radiopleer.net, 1 radiopolarniki.spb.ru, 1 @@ -99705,6 +100633,7 @@ radioprimerodemayo.tk, 1 radiopush.tk, 1 radior9.it, 1 radioradicchio.it, 1 +radiorainbow.tk, 1 radioranking.de, 1 radiorecord.ml, 1 radioregional.pt, 1 @@ -99776,7 +100705,7 @@ radzikow.ski, 1 raeder-test.azurewebsites.net, 1 raestingar.is, 1 raeu.me, 1 -raeven.nl, 1 +raeven.nl, 0 raevinnd.com, 1 raewardfresh.co.nz, 1 raf.org, 1 @@ -99908,6 +100837,7 @@ raissarobles.com, 1 raistrick.art, 1 raistrick.it, 1 raitza.de, 1 +rajaealhoceima.tk, 1 rajafashion.tk, 1 rajasatour.id, 1 rajeen.tk, 1 @@ -100097,6 +101027,7 @@ ranson.com.au, 1 rantalaholcomb.tk, 1 rantamplan.tk, 1 rantanda.com, 1 +rante.com, 1 ranters.nl, 1 ranyeh.co, 1 ranyeh.com, 1 @@ -100156,6 +101087,7 @@ rasadnikcvecaperic.rs, 0 rasagiline.com, 1 rasberry.cf, 1 rascals-castles.co.uk, 1 +rascals.ga, 1 rascalscastles.co.uk, 1 rascript.tk, 1 rascvet.tk, 1 @@ -100252,9 +101184,8 @@ ravhaaglanden.org, 1 ravihotel.com, 0 ravijuhend.ee, 1 ravik.tk, 1 -ravimiamet.ee, 1 +ravimiamet.ee, 0 ravinala-airports.aero, 1 -ravindran.me, 1 raviparekh.co.uk, 1 ravis.org, 1 ravkr.duckdns.org, 1 @@ -100287,6 +101218,7 @@ rayanou.com, 1 raycarruthersphotography.co.uk, 1 raycon.io, 1 raydius.de, 1 +raydolap.web.tr, 0 raydolapfiyat.com, 0 rayfalling.com, 1 rayiris.com, 1 @@ -100328,6 +101260,7 @@ razborpoletovsite.gq, 1 razborpoletovsite.tk, 1 razdolnoe.tk, 1 razeencheng.com, 1 +razgon.ga, 1 razgon.tk, 1 raziculacrimi.ro, 1 razoesparaacreditar.com, 1 @@ -100507,6 +101440,7 @@ readmynews.cf, 1 readnow.in, 1 readouble.com, 0 readpages.gq, 1 +readtome.co.in, 1 readup.tk, 1 ready2learn.eu, 1 ready4bf.tk, 1 @@ -100663,7 +101597,7 @@ rearmatch.cf, 1 rearmatch.ga, 1 reath.xyz, 1 reavaninc.com, 1 -reaven.nl, 1 +reaven.nl, 0 rebajasoferta.com, 1 rebalancenyc.com, 1 rebane2001.com, 1 @@ -100715,6 +101649,7 @@ recetips.com, 1 recettes-series.com, 1 rechenknaecht.de, 1 rechenwerk.net, 1 +recherchegruppe.tk, 1 rechky.tk, 1 recht.us, 1 rechten-konsens-brechen.tk, 1 @@ -100883,6 +101818,7 @@ redemption.gq, 1 redeortoestetica.com.br, 1 redes-neuronales.tk, 1 redeshoprural.com.br, 1 +redeyeguatemala.tk, 1 redfanatic-muenchen.com, 1 redfish.tk, 1 redflare.com.au, 1 @@ -100993,6 +101929,7 @@ reducealcoholism.com, 1 reducer.co.uk, 1 reducto.tk, 1 reduktorntc-k.com.ua, 1 +redunion.tk, 1 reduxlineberryfactorycart.com, 1 redvent.ru, 1 redwater.co.uk, 1 @@ -101645,6 +102582,7 @@ resc.la, 1 rescatec.com, 1 resch.pro, 1 rescms-secure.com, 1 +rescuer.gq, 1 rescuer.tk, 1 research-panel.jp, 1 research.facebook.com, 0 @@ -101665,6 +102603,7 @@ reservetonshift.com, 1 reservilaisliitto.fi, 1 resfriatech.com.br, 1 reshebnik.ml, 1 +reshka.ga, 1 residence-donatello.be, 1 residence-edelweiss.com, 1 residence-simoncelli.com, 1 @@ -102123,6 +103062,7 @@ rhodri.io, 1 rhona.cl, 1 rhost.nl, 1 rhowell.io, 1 +rhrli.com, 1 rhubarb.land, 1 rhumblineadvisers.com, 1 rhwebdesigns.co.uk, 1 @@ -102645,8 +103585,10 @@ roadtochina.tk, 1 roadtoglory.tk, 1 roadtopgm.com, 1 roadtripaustralia.com.au, 1 +roadtripusa.tk, 1 roalogic.com, 1 roamadvisors.com, 1 +roamfreun.tk, 1 roams.com.co, 1 roams.es, 1 roams.mx, 1 @@ -102680,7 +103622,6 @@ robert-reisemobil.de, 1 robert-victor.co.uk, 1 robert-wiek-transporte.de, 1 robertaltizer.com, 1 -robertamend.de, 1 robertattfield.com, 1 robertayamashita.com, 1 robertayamashita.com.br, 1 @@ -102994,6 +103935,7 @@ rolandlips.com, 1 rolandlips.nl, 1 rolandog.com, 1 rolandoredi.com, 1 +rolandozarate.tk, 1 rolandszabo.com, 1 rolandvanipenburg.com, 1 rolc.org.sg, 1 @@ -103127,6 +104069,7 @@ roodfruit.studio, 1 roodhealth.co.uk, 1 roodo.com, 1 roof.ai, 0 +roofer.cf, 1 roofingandconstructionllc.com, 1 roofingmaterials.tk, 1 roofingomaha.com, 1 @@ -103149,6 +104092,8 @@ room3b.eu, 1 room45.tk, 1 roombase.nl, 1 roomcube.tk, 1 +roomee.tk, 1 +roomguide.info, 1 roomhub.jp, 1 roomonline.tk, 1 roomoutside.com, 1 @@ -103207,6 +104152,7 @@ rorelseprojektet.se, 1 roromendut.online, 1 rorr.im, 1 roryneville.com, 1 +rosa-spain.tk, 1 rosabellas.co.uk, 1 rosabrasiv.ga, 1 rosaflorbijoux.com.br, 1 @@ -103219,6 +104165,7 @@ rosanerolife.tk, 1 rosaquest.ru, 0 rosaserra.es, 1 rosbass.ru, 1 +rosbiznes.tk, 1 roscommontownshipmi.gov, 1 rosdpk.ru, 1 rosdver.ru, 1 @@ -103301,6 +104248,7 @@ rot256.io, 1 rot47.net, 1 rotamap.net, 1 rotanaval.tk, 1 +rotaractclubtucuman.tk, 1 rotaracthelmond.tk, 1 rotary.org.ru, 1 rotaryceuta.tk, 1 @@ -103406,6 +104354,7 @@ rowlog.com, 1 rowra.org, 1 roxanaherguz.com, 1 roxanneguinoo.tk, 1 +roxburytech.tk, 1 roxhillmedia.com, 1 roxiesbouncycastlehire.co.uk, 1 roxville.tk, 1 @@ -103705,6 +104654,7 @@ ruanwen168.com, 1 ruavan.com, 1 rubashki-opt.ml, 1 rubashki.tk, 1 +rubbaduckee.tk, 1 rubber.cf, 1 rubberband.com, 1 rubberchicken.net, 1 @@ -103762,6 +104712,7 @@ rubyonremote.com, 1 rubyquincunx.com, 1 rubyquincunx.org, 1 rubystore.ga, 1 +ruchka-mashinka.gq, 1 rucinski.ch, 1 rucinski.eu, 1 rucinski.uk, 1 @@ -103798,12 +104749,14 @@ rueduparticulier.tk, 0 rueg.eu, 1 ruero.com, 1 ruerte.net, 1 +ruexpert.cf, 1 ruf888.com, 1 rufartabs.ml, 1 ruffbeatz.com, 1 ruffinstorage.com, 1 ruffkatt.com, 1 ruffm.com, 1 +ruffnecks.tk, 1 ruflay.ru, 1 ruforce.ml, 1 rugadgets.tk, 1 @@ -103879,6 +104832,7 @@ rumtaste.de, 1 rumus.co.id, 1 run-it-direct.co.uk, 1 runagain.ch, 0 +runame.ml, 1 runar-data.de, 1 runbo-australia.ga, 1 runbo-new-zealand.ga, 1 @@ -104020,6 +104974,7 @@ russianrandom.ru, 1 russiantranslation.tk, 1 russisch.tk, 1 russograffix.tk, 1 +rust.cf, 1 rust.mn, 1 rust.pm, 0 rustambek.tk, 1 @@ -104120,6 +105075,7 @@ rxo.com, 1 rxtx.pt, 1 rxxx.ml, 1 ry88url.com, 1 +ryabinushka.tk, 1 ryan-13.tk, 1 ryan-design.com, 1 ryan-gehring.com, 1 @@ -104308,6 +105264,7 @@ saberhortifruti.com.br, 1 sabghijewelers.com, 1 sabharwallawfirm.ca, 1 sabhijobs.com, 1 +sabians.tk, 1 sabine-forschbach.de, 1 sabineforschbach.de, 1 sablanout.com, 1 @@ -104432,6 +105389,7 @@ safefreepornsites.com, 1 safegas.com.ua, 1 safegold.ca, 1 safegroup.pl, 1 +safeguardcommerce.com, 1 safeguardhosting.ca, 1 safehero.com, 1 safehouse.zone, 1 @@ -104483,6 +105441,7 @@ safetymp3.com, 1 safetynames.com, 1 safetynation.co.uk, 1 safetynetwork.me, 1 +safetyrange.com, 1 safetyrisk.net, 1 safetysite.tips, 1 safeui.com, 0 @@ -104535,6 +105494,7 @@ sahb.dk, 1 sahibinden.com, 1 sahinozgenhukuk.com, 1 sahkotyot.eu, 1 +sahpa.co.za, 0 saibacomo.online, 1 saibotk.de, 1 said.id, 1 @@ -104574,7 +105534,10 @@ saint-aubin-sur-scie.fr, 1 saint-clan.tk, 1 saint-cyril.com, 1 saint-leonard.fr, 1 +saint-peterburg.tk, 1 saint-petersburg.cf, 1 +saint-petersburg.gq, 1 +saint-petersburg.ml, 1 saint-ssd.org, 1 saintaardvarkthecarpeted.com, 1 saintanne.net, 1 @@ -104602,7 +105565,9 @@ saintmaryna.com, 1 saintmaryscathedral-trenton.org, 1 saintmichaelpress.tk, 1 saintpatrick-norristown.net, 1 +saintpetersburg.cf, 1 saintpetersburg.ga, 1 +saintpetersburg.gq, 1 saintpetersburg.ml, 1 saintphilipneri.org, 1 saintpius.net, 1 @@ -104710,7 +105675,6 @@ saledump.nl, 1 saleem.cf, 1 salegor.tk, 1 saleh4unraid.cyou, 1 -salekaz.ru, 1 salemma.gov, 1 salensmotors-usedcars.be, 1 salento-nostro.tk, 1 @@ -104880,6 +105844,7 @@ samba.org, 1 sambaash.com, 1 sambeso.net, 1 sambot22.tk, 1 +sambuchanan.tk, 1 sambus.com, 1 samclarke.com, 1 samdev.io, 1 @@ -104908,6 +105873,7 @@ samifar.in, 1 samilyanov.tk, 1 samin.tk, 1 samir-software.tk, 1 +samiratv.tk, 1 samishnation.gov, 1 samisoft.ir, 1 samiysok.cf, 1 @@ -104945,6 +105911,7 @@ samsebe.tk, 1 samshouseofspaghetti.net, 1 samskaar.in, 1 samsonnetworks.org, 1 +samsreseller.com, 1 samstudios.tk, 1 samsunghalfmarathon.com, 1 samtalen.nl, 1 @@ -105063,7 +106030,6 @@ sandtears.com, 1 sandtime.io, 1 sandtler.moe, 1 sandton-plumbing.co.za, 1 -sandtonescorts.com, 1 sandtonplumber24-7.co.za, 1 sanduskycountyoh.gov, 1 sandwichclub.tk, 1 @@ -105079,10 +106045,12 @@ sanex.ca, 1 sanfernando.tk, 1 sanfranciscotours.org, 1 sangamonil.gov, 1 +sangen.ml, 1 sangheon.com, 1 sangina.eu, 1 sangiovannilipioni.tk, 1 sanglierhurlant.fr, 1 +sangoandmiroku.tk, 1 sangowen.xyz, 1 sangreytinta.tk, 1 sangriasenorial.com, 1 @@ -105187,10 +106155,12 @@ santevie.ch, 0 santhatela.com.br, 1 santhoshveer.com, 1 santiagogarza.co, 1 +santibanezdetera.tk, 1 santibz.es, 1 santimb.photos, 1 santing.net, 1 santippolito-borgo.tk, 1 +santjoandevilassar.tk, 1 santmark.eu, 1 santmark.info, 1 santmark.net, 1 @@ -105206,7 +106176,6 @@ santv.cc, 0 sanukarlos.tk, 1 sanweb.info, 1 sanych-msk.ru, 0 -saoneth.pl, 1 saorsa.fr, 1 saorsat.com, 1 saorsat.ie, 1 @@ -105290,6 +106259,7 @@ saraton-kasalligi.tk, 1 saratov24.tk, 1 saratovlive.tk, 1 saratovnews.ml, 1 +saratovtime.tk, 1 sarayeketabesoti.ir, 1 sarbash.ee, 1 sarbel.tk, 1 @@ -105624,7 +106594,6 @@ sbermobile.ru, 1 sberna-fotofast.cz, 1 sbestimes.com, 1 sbf888.com, 1 -sbgcred.com, 1 sbhscotland.org.uk, 1 sbiewald.de, 1 sbir.gov, 0 @@ -105798,6 +106767,7 @@ scheinlichter.de, 1 scheldestromen.nl, 1 schelkovo.tk, 1 schella.network, 1 +schellebelle.tk, 1 schellevis.net, 0 schemingmind.com, 1 schemmel.net, 1 @@ -105952,6 +106922,7 @@ schoolninja.net, 1 schoolofequineshiatsu.com, 1 schoolofphilosophy.org.au, 1 schoolotzyv.ru, 1 +schoolroom.ga, 1 schoolrumble.tk, 1 schoolsafety.gov, 1 schoolsonice.nl, 1 @@ -106034,6 +107005,7 @@ schwano-dent.at, 1 schwartz.pro, 1 schwarz-gelbe-fuechse.de, 1 schwarzegar.de, 1 +schwarzenberg.tk, 1 schwarzenhoelzer.net, 1 schwarzes-muenchen.de, 1 schwarztrade.cz, 1 @@ -106111,6 +107083,7 @@ scitopia.me, 1 scituateri.gov, 1 scity88.com, 1 scjtt.fr, 1 +sckc.stream, 1 scks.site, 1 scloud.link, 1 sclub7esp.tk, 1 @@ -106133,6 +107106,7 @@ scoolio.de, 1 scoop6.co.uk, 1 scoopcake.com, 1 scoopgalleries.com, 1 +scoopgh.com, 1 scootaloo.co.uk, 1 scootarama.com, 1 scooterinaustralia.tk, 1 @@ -106190,6 +107164,7 @@ scottshorter.com.au, 1 scottspainting.com, 1 scottsvalley.gov, 1 scottsvilleva.gov, 1 +scottyspot.tk, 1 scounter.tk, 1 scour.cc, 1 scourgesofcarpathia.tk, 1 @@ -106216,6 +107191,7 @@ scp-079.org, 0 scp-rustenholz-trens.notaires.fr, 1 scp-trens.notaires.fr, 1 scp500.com, 1 +scpe.eu.org, 1 scphotography.co.uk, 1 scpocahontas.nl, 1 scpsecretlab.com, 1 @@ -106277,6 +107253,7 @@ scriptjunkie.us, 1 scriptline.ga, 1 scriptmaker.tk, 1 scriptolab.com, 1 +scriptomania.tk, 1 scriptrock.com, 1 scriptsrus.tk, 1 scripty.org, 0 @@ -106566,10 +107543,12 @@ secret-bases.co.uk, 1 secret-queen.ga, 1 secret-queen.ml, 1 secret.garden, 1 +secretagentclub.tk, 1 secretar.is, 1 secretary-schools.com, 1 secretbase.cf, 1 secretbusiness.tk, 1 +secretdeals.ga, 1 secretgardendesigns.shop, 1 secrethub.io, 1 secretimports.com.br, 1 @@ -106585,6 +107564,7 @@ secretsdujeu.com, 1 secretserveronline.com, 1 secretsofuniverse.in, 1 secretstomartialarts.tk, 1 +secretworld.ml, 1 secretzone.bg, 1 secrium.io, 1 secs.london, 1 @@ -106761,6 +107741,7 @@ seeme.ai, 1 seemeagain.com, 1 seemomclick.com, 1 seemorehere.tk, 1 +seemyreality.tk, 1 seeonce.co, 1 seerainer.com, 1 seestersmexicancantina.com, 0 @@ -106858,6 +107839,7 @@ sekoia.io, 1 sekoya.org, 1 sekreti-biznesa.cf, 1 seks-znakomstva.tk, 1 +sekshikayeler.tk, 1 sektor-news.tk, 1 sektor.ro, 1 sektor.tech, 1 @@ -106884,19 +107866,23 @@ selectra.pt, 1 selectsplat.com, 1 selegiline.com, 1 selekzo.com, 1 +selena-armavir.ml, 1 selenapelletier.tk, 1 seleondar.ru, 1 selezionebarbrboguaccero.cf, 1 +selezionebarbrboguaccero.ga, 1 selezionebarbrboguaccero.tk, 1 self-business.tk, 1 self-evident.org, 1 self-signed.com, 1 selfassess.govt.nz, 1 +selfbattery.ga, 1 selfcaregate.com, 0 selfcateringstratford.co.uk, 1 selfdefinition.tk, 1 selfdevelopment.com.au, 1 selfelec.be, 1 +selfemployed.ga, 1 selfguidedholiday.com, 1 selfici.com, 1 selfici.cz, 1 @@ -106909,6 +107895,7 @@ selfretire.cf, 1 selfserverx.com, 0 selftech.tk, 1 selfycheck.it, 1 +selimcerkezi.tk, 1 selistina.tk, 1 selkiemckatrick.com, 1 sell2orbit.com, 1 @@ -106933,6 +107920,7 @@ sellocdn.com, 1 sellorbuy.uk, 1 sellorbuy.us, 1 sellphotos.tk, 1 +sellsmartwatches.tk, 1 selltobluefirefly.com, 1 selltobpp.com, 1 selltoec.com, 1 @@ -106941,6 +107929,7 @@ selltous.com.au, 1 sellwithsquare.com, 1 selma.com, 1 selmer-tn.gov, 1 +selo-cer.tk, 1 selo-grncare.tk, 1 selo.ru, 1 seloc.org, 1 @@ -106957,6 +107946,7 @@ semantica.cz, 0 semantics.ga, 1 semao.org, 1 semaphore-studios.com, 1 +sembosihosting.tk, 1 sembska.de, 1 sembyotic.com, 1 semcensurabrag.com.br, 1 @@ -106970,6 +107960,7 @@ semesur.com, 1 semi.social, 1 semianalog.com, 1 semiconductors.gov, 1 +semicvetik.tk, 1 semillasdelucha.com, 1 seminarioabdtic.com.br, 1 seminariruum.ee, 1 @@ -106980,6 +107971,7 @@ semiotika.tk, 1 semira.tk, 1 semirben.de, 1 semiread.com, 1 +semiretire.ga, 1 semiweb.ca, 1 semmuhely.tk, 1 semobr.cf, 1 @@ -107002,6 +107994,7 @@ senamexico.com, 1 senaofertaeducativa.co, 1 senaofertaeducativa.com, 1 senarea.nl, 1 +senarist.tk, 1 senarius.de, 1 senbil.net, 1 send.tk, 1 @@ -107021,6 +108014,7 @@ sendbird.com, 1 sendbox.cz, 1 sender.party, 1 sender.services, 1 +senderismoinfantil.tk, 1 sendigperu.com, 1 sendingbee.com, 1 senditvia.email, 1 @@ -107031,6 +108025,7 @@ sendthisfile.com, 1 sendtrix.nl, 1 sendzik.eu, 1 senego.com, 0 +senergiya.tk, 1 senergyconsultants.com, 1 senf-kren.at, 1 senfcall.de, 1 @@ -107038,6 +108033,7 @@ senffabrik.com, 1 senhorst.com, 1 senhost.tk, 1 seni-beladiri.tk, 1 +senior-sigan.ml, 1 seniorem.eu, 1 seniorhomexchange.com, 1 seniorhost.net, 1 @@ -107051,6 +108047,8 @@ senkyo.watch, 1 senmendai-reform.com, 1 senneeeraerts.be, 1 sennik.tk, 1 +senoctarsoft.tk, 1 +senok.ml, 1 senooken.jp, 1 senor-cheapo.nl, 1 senork.de, 1 @@ -107062,6 +108060,7 @@ sensebridge.net, 1 senseful-online.de, 1 senseful-online.eu, 0 senseful-online.info, 1 +senseiclassroom.tk, 1 senselabs.it, 1 sensepixel.com, 1 senshot.com, 1 @@ -107088,15 +108087,18 @@ sentandsecure.com, 1 sentencing.net, 1 sentenza.tk, 1 senteon.co, 1 +senterada.tk, 1 sentic.info, 1 sentidosdelatierra.org, 1 sentiment.rest, 1 sentiments.io, 1 sentinel.gov, 1 +sentinelnet.tk, 1 sentinelproject.io, 1 sentinels.tk, 1 sentirmebien.org, 1 sentitvia.email, 1 +sentmail.ga, 1 sentor.se, 1 sentorsecurity.com, 1 sentrafield.com, 1 @@ -107104,17 +108106,22 @@ sentry.io, 1 sentry.nu, 1 sentrybay.com, 1 sentworks.com, 1 -senu.pro, 1 senzaparole.de, 1 senzei.tk, 1 seo-analyse.com, 1 +seo-blog12.tk, 1 seo-dr-it.com, 1 seo-forum.nu, 0 seo-linz.at, 1 +seo-obmen.tk, 1 +seo-phpbb.cf, 1 +seo-piar.tk, 1 seo-portal.de, 1 +seo-portal.tk, 1 seo-promox.cf, 1 seo-promox.tk, 1 seo-reality.cf, 1 +seo-reklama.ml, 1 seo-reklama.tk, 1 seo-smo.ml, 1 seo-smo.tk, 1 @@ -107131,13 +108138,18 @@ seobgynpc.com, 1 seoblogs.cf, 1 seobook2015.cf, 1 seobook2015.ga, 1 +seobook2015.gq, 1 seobook2016.gq, 1 +seoclubs.tk, 1 +seocontents24.tk, 1 seocraft.me, 1 +seocreator-blog24.tk, 1 seodayo.com, 1 seodefinitivo.com, 1 seodelhi.com, 1 seodigital.nl, 1 seodoma.ml, 1 +seodrug.tk, 1 seoefectivo.com, 1 seoenmexico.com.mx, 1 seoexpert.com.br, 1 @@ -107145,15 +108157,21 @@ seoeye.ru, 1 seoforyou.nl, 1 seogeek.nl, 1 seogeky.com, 1 +seogood.cf, 1 seohackers.fr, 1 seohouston.com, 1 seoified.com, 1 seojaguar.tk, 1 seokaos.com, 0 +seokatka.tk, 1 seolabuitest.azurewebsites.net, 1 seolib.org, 1 +seoline.cf, 1 +seolister.cf, 1 +seolisting.cf, 1 seolisting.tk, 1 seolord.cf, 1 +seomag.tk, 1 seomarketing.bg, 1 seomaton.com, 1 seomaton.org, 1 @@ -107167,30 +108185,47 @@ seonaut.org, 1 seonoco.com, 1 seonow.ga, 1 seonurse.com, 1 +seoonline.cf, 1 +seoonlinejaipur.tk, 1 +seopiar.tk, 1 seoping.ru, 1 seopost.ga, 1 seoprnews.cf, 1 +seopromotion.tk, 1 seoproof.tk, 1 seoquero.com, 1 +seoranker.tk, 1 seorus.cf, 1 seorus.ml, 1 seoruse.com, 0 +seos.ga, 1 +seoscan.ga, 1 seoscribe.net, 1 seosearch.org, 1 +seoserfing.tk, 1 seosergio.com, 1 seoshanti.ru, 1 +seoshnik.tk, 1 +seosmart.gq, 1 seosof.com, 1 +seosos.gq, 1 seosos.ml, 1 seospecialist.ma, 0 +seosprint.gq, 1 +seostrit.cf, 1 seostrit.tk, 1 +seoteam.tk, 1 seotip.top, 1 seotipster.com, 1 +seotoolset.tk, 1 seoturkey.tk, 1 seotutorials32.tk, 1 seoulartcollective.tk, 1 seoulista.vn, 1 seovision.se, 1 seovisit.tk, 1 +seovisits.tk, 1 +seoviziti50.tk, 1 seovoorboekhouders.nl, 1 seowebcreative.com, 1 seowebexpert.co.uk, 0 @@ -107198,6 +108233,7 @@ seowerkz.com, 1 seowind.io, 1 seowordpress.pl, 1 seowork.tk, 1 +seozel.tk, 1 sep-online.com.pl, 1 sep.bydgoszcz.pl, 1 sep.cc, 1 @@ -107236,6 +108272,7 @@ septodont.ro, 1 septodontaucanada.ca, 1 septodontchina.com, 1 septodontusa.com, 1 +septonol.tk, 1 septs.blog, 1 sepulcharium.tk, 1 seputarfinansial.com, 1 @@ -107257,6 +108294,8 @@ serasa.com.br, 1 seratblog.ga, 1 serban.ro, 1 serbanpaun.ro, 1 +serbiaonline.tk, 1 +sercasindustry.tk, 1 serdarakyildiz.com, 1 serdarcal.com, 1 serdarwork.com, 1 @@ -107285,10 +108324,13 @@ serge-design.ch, 1 sergeemond.ca, 1 sergefonville.nl, 1 sergen.tk, 1 +sergeyburov.tk, 1 +sergeyesenin.tk, 1 sergeykozharinov.com, 1 sergi.tk, 1 sergicoll.cat, 1 sergije-stanic.me, 1 +sergio-rivero.tk, 1 sergiochica21.tk, 1 sergiocv.com, 1 sergiodemo.com, 1 @@ -107303,10 +108345,13 @@ sergivb01.me, 0 sergos.de, 0 serguzim.me, 1 serhan.in, 1 +serial-kinder.tk, 1 serial2000.tk, 1 serialas.ru, 1 +serialize.gq, 1 seriesdatv.pt, 1 seriesfeed.com, 0 +seriesgratis.tk, 1 serije.co, 1 serinamusic.com, 1 seriousclimbing.com, 1 @@ -107319,9 +108364,11 @@ sermerkt.is, 1 serondaredestrail.com, 1 seroquel50mg.tk, 1 seroquelonline.ga, 1 +seroquelonline.tk, 1 serotiuk.com, 0 serpenteq.com, 1 serpes.nz, 1 +serphost.ml, 1 serpic.photo, 1 serpuhof.ru, 0 serralheriaemcuritiba.com, 1 @@ -107376,6 +108423,7 @@ serverfix.net, 1 serverhost.no, 1 serverhunter.com, 1 serverion.ga, 1 +serverka.tk, 1 serverlauget.no, 1 serverlog.net, 1 servermacher.de, 1 @@ -107398,6 +108446,7 @@ serveursminecraft.org, 1 servfefe.com, 1 servgate.jp, 1 servi-tek.net, 1 +service-centre.cf, 1 service-soft.de, 1 service-ways.com, 1 service-wueste-vodafone.tk, 1 @@ -107425,6 +108474,7 @@ servicespot.ca, 1 servicestechnologiquesam.ca, 1 servicevie.com, 1 serviciales.com, 1 +servicii-funerare.tk, 1 serviciodebarralibreparaeventos.com, 1 serviciodigitalweb.com, 1 servicios-electricos.com, 1 @@ -107444,6 +108494,8 @@ servis-azd.cz, 1 servis4u.top, 1 servisin.id, 1 servisna.com, 1 +servitel.ga, 1 +servitor.cf, 1 servitproducts.com, 1 servivum.com, 1 serviziocolf.it, 1 @@ -107468,8 +108520,10 @@ serx.ml, 1 seryovpn.com, 1 ses-egy.com, 1 sesam-biotech.com, 1 +sesamomusical.tk, 1 sescoen.tk, 1 seseai.ga, 1 +sesenaonline.tk, 1 sesliturkgencligi.tk, 1 sesrdcem.cz, 1 sessile-oak.co.uk, 1 @@ -107480,6 +108534,7 @@ sestry.tk, 1 seteampty.net, 1 setenforce.one, 1 setesat.com.br, 1 +setevik.tk, 1 sethcaplan.com, 1 sethcorker.com, 1 sethcurry.ga, 1 @@ -107511,6 +108566,7 @@ seutens.be, 1 seutens.eu, 1 seva.fashion, 1 sevacy.net, 1 +sevastopol.tk, 1 sevathian.com, 1 seven-seas.ml, 1 sevenartzpublicidad.com, 1 @@ -107527,6 +108583,7 @@ severntrentinsuranceportal.com, 1 seviercountyar.gov, 1 sevilinux.es, 1 sevillacani.tk, 1 +sevillalinces.tk, 1 sevillanazarena.tk, 1 sevinci.ch, 1 sevitahealth.com, 1 @@ -107538,11 +108595,13 @@ sewa.nu, 1 sewalaptopm2i.com, 1 sewardcountyne.gov, 1 sewatec.com, 1 +sewavillamurah.tk, 1 sewfarsewgood.uk, 1 sewing-machines.com.ua, 1 sewing-world.ru, 1 sewinginsight.com, 0 sewoo.co.uk, 1 +seworld.ml, 1 sex-chat-geld-verdienen.com, 1 sex-education.com, 1 sex-sex-cam.com, 1 @@ -107558,6 +108617,7 @@ sexgarage.de, 1 sexgood.com.ua, 1 sexhab.guru, 1 sexi-model.ru, 1 +sexminister.tk, 1 sexmobil.de, 1 sexoclicker.com, 1 sexoclicker.net, 1 @@ -107572,6 +108632,7 @@ sexruby.com, 1 sexshopfacil.com.br, 1 sexshopnet.com.br, 1 sexswing.com, 0 +sextacy.tk, 1 sextapegermany.com, 1 sextoysproductstore.com, 1 sextreffendeutschland.com, 1 @@ -107643,6 +108704,7 @@ sft-framework.org, 1 sftool.gov, 1 sfumusic.com, 1 sfvonline.nl, 1 +sfweef.gq, 1 sg-elektro.de, 1 sg-gallerylive.it, 1 sg-strietwald.de, 1 @@ -107698,6 +108760,7 @@ sh68.cc, 0 sha.bi, 1 sha512.online, 1 shaadithailand.com, 1 +shabashka.ml, 1 shabiwangyou.com, 1 shackleton.io, 1 shad.waw.pl, 1 @@ -107715,8 +108778,10 @@ shadex.net, 1 shadhoc.com, 1 shadigee.org, 1 shadikhan.tk, 1 +shadow-forum.tk, 1 shadowandy.net, 1 shadowcp.eu, 1 +shadowdomain.ml, 1 shadowfight2.tk, 1 shadowfox.tk, 1 shadowguardian507.tk, 1 @@ -107747,12 +108812,14 @@ shadowuniverse.xyz, 1 shadowvolt.net, 1 shadwe.com, 1 shadynook.net, 1 +shadypark.tk, 1 shaftofdarkness.club, 1 shag-shag.ru, 1 shahar.cc, 0 shaharyaranjum.com, 1 shaheedirfani.tk, 1 shaheednawazirfani.tk, 1 +shahidafkar.tk, 1 shahidfakih.com, 0 shahidflix.ml, 1 shahidhashmi.net, 1 @@ -107761,6 +108828,7 @@ shahriar.ca, 1 shahriar.email, 1 shahriar.xyz, 1 shahrsazan.tk, 1 +shahrvand.ga, 1 shahsaadkhan.tk, 1 shahzaibm.com, 1 shaicoleman.com, 1 @@ -107786,19 +108854,25 @@ shakespearesolutions.com.au, 0 shakespearevet.com, 1 shakesprimer.tk, 1 shakingthehabitual.com, 1 +shaknews.tk, 1 shakraphix.tk, 1 shakthifacility.com, 1 shalaahmet.tk, 1 shaloc.site, 1 +shalomamuzik.tk, 1 +shalombolivia.tk, 1 +shalomcottage.tk, 1 shalyapin.by, 1 sham-rock.tk, 1 shamaev.me, 1 shamami.ml, 1 shamans.ga, 1 +shambala.cf, 1 shambhu.info, 1 shamed.tk, 1 shamimahmed.tk, 1 shamimmedia.ir, 1 +shamiphotos.tk, 1 shampoo63.ru, 1 shan.io, 0 shan.si, 1 @@ -107810,6 +108884,7 @@ shanevandermeer.com, 1 shanewadleigh.com, 1 shanghaimineral.com, 1 shangobud.com, 1 +shanhay.tk, 1 shaniainternational.tk, 1 shanikaonline.tk, 1 shanikofireor.gov, 1 @@ -107844,6 +108919,7 @@ share4brain.org, 1 shareabc.vip, 1 shareapollo.com, 1 shareasale-analytics.com, 1 +sharebot.ga, 1 shareby.cam, 1 sharedgoals.co, 1 sharedhost.de, 1 @@ -107874,6 +108950,8 @@ shariahlawcenter.com, 1 shariahlawcenter.org, 1 sharialawcenter.com, 1 sharialawcenter.org, 1 +shariftown.tk, 1 +sharik-msk.ga, 1 sharik.ml, 1 sharine.nl, 1 sharing-kyoto.com, 1 @@ -107881,6 +108959,7 @@ sharingcolombia.com, 1 sharingiscaring.cc, 1 sharingphotos.co, 0 sharix.ml, 1 +shark-host.tk, 1 shark5060.net, 1 sharkblog.tk, 1 sharkey.tk, 1 @@ -107890,6 +108969,7 @@ sharking.gq, 1 sharko.tk, 1 sharkpaint.tk, 1 sharks.football, 1 +sharmafamily.tk, 1 sharmalaw.com, 1 sharondavale.org, 1 sharonnh.gov, 1 @@ -107936,6 +109016,7 @@ shawnstarrcustomhomes.com, 0 shawnz.ca, 1 shawnz.org, 1 shawty.tk, 1 +shaytan.tk, 1 shazamkitpro.com.br, 1 shazbots.org, 1 shazzlemd.com, 1 @@ -107955,6 +109036,10 @@ shearwaterdental.com, 1 sheaspire.com, 1 sheboygancountywi.gov, 1 sheboyganfallswi.gov, 1 +shechipin.cf, 1 +shechipin.ga, 1 +shechipin.gq, 1 +shechipin.ml, 1 shed49.com, 1 shedrickflowers.com, 1 shedrin.tk, 1 @@ -107972,7 +109057,9 @@ sheet.host, 1 sheetengine.net, 1 sheetstutorial.com, 1 shef.com, 1 +sheffield-wednesday-fc.tk, 1 sheffieldjob.net, 1 +shefftunes.tk, 1 shehaal.com, 1 shehansanjula.me, 1 shehata.com, 1 @@ -107984,9 +109071,11 @@ shek.zone, 1 shelbycounty-il.gov, 1 sheldon.sk, 1 sheldoniowa.gov, 1 +shelehov.tk, 1 shelf.io, 1 shelfieretail.com, 1 shelfordsandstaplefordscouts.org.uk, 1 +shellavartanian.tk, 1 shellcon.io, 1 shellcore.fr, 1 shellday.cc, 1 @@ -108002,6 +109091,8 @@ shellshock.eu, 1 shellta.com, 1 shellta.net, 1 shellvatore.us, 1 +shellwhite.ga, 1 +shellwhite.tk, 1 shelma.tk, 1 shelter-bar.fr, 1 shelterislandtown.gov, 1 @@ -108016,6 +109107,7 @@ shemsconseils.ma, 1 shemsharples.co.uk, 1 shena.co.uk, 1 shenannigans.tk, 1 +shenderman.ml, 1 shenghaiautoparts.com, 1 shenghuang.tk, 1 shengrenyu.com, 1 @@ -108120,9 +109212,11 @@ shimmy1996.com, 1 shimo.im, 1 shimonfly.com, 1 shin-yo.de, 1 +shindocuba.tk, 1 shineindiarktutorial.ml, 1 shineleds.ga, 1 shinenet.cn, 1 +shines.ml, 1 shinetruckleads.com, 1 shinetsuamerica.com, 1 shinetsusilicones.com, 1 @@ -108163,6 +109257,7 @@ shipmonk.com, 1 shipnak.com, 1 shippercenter.info, 1 shippexx.com, 1 +shipping-trade.ga, 1 shippinglabel.de, 1 shiptek.co, 1 shiptron.com, 1 @@ -108177,15 +109272,21 @@ shiqi1.com, 1 shiqishidai.cc, 1 shiqisifu.cc, 1 shiraikuroko.com, 1 +shiranaitenshi.tk, 1 shirao.jp, 1 +shiraz-coffee.com, 1 +shirazi.tk, 1 shiresvets.com, 1 +shirevirtual.tk, 1 shireyishunjian.com, 1 shireyishunjian.group, 1 +shiriforum.tk, 1 shirley.li, 1 shirleydentalpractice.co.uk, 1 shirlygilad.com, 1 shiroanime.es, 1 shiroki-k.net, 1 +shiropaev.tk, 1 shirosaki-hana.fun, 1 shirro.com, 1 shirshik.xyz, 1 @@ -108209,6 +109310,8 @@ shitposts.se, 1 shitproductions.org, 1 shitsta.in, 1 shittyurl.org, 1 +shittywok.tk, 1 +shiva-temple.tk, 1 shivamber.com, 1 shivammathur.com, 1 shivenjoshi.com, 1 @@ -108227,23 +109330,32 @@ shkilna-kraina.com.ua, 1 shkola1.ml, 1 shkolamishlenia.tk, 1 shkolladigjitale.com, 1 +shkolnyimir.gq, 1 shkololo.cf, 1 +shkololo.ga, 1 +shkololo.gq, 1 shkololo.ml, 1 +shkololo.tk, 1 +shlang.tk, 1 shlemenkov.by, 1 shlink.cc, 1 shlmail.info, 1 +shlupka.ml, 1 +shlupka.tk, 1 shlyakpavel.tk, 1 shlyapa-com.tk, 1 shlyhi.tk, 1 shm.ac.jp, 1 shmidta.tk, 1 shmilyhua.com, 1 +shmotki.ml, 1 shmroom.tk, 1 shmulvad.com, 1 sho-furtwangen.de, 1 shoarq.com, 1 shochikubai.tk, 1 shock.ee, 1 +shockerdragon.tk, 1 shockproof.systems, 1 shodan.io, 1 shoe.club, 1 @@ -108253,6 +109365,7 @@ shoelevel.com, 1 shoemakerywc.com, 1 shoeracks.uk, 1 shoes4gentlemen.de, 1 +shoesoutlet.tk, 1 shoestorebiz.tk, 1 shoestorenet.tk, 1 shoestringeventing.co.uk, 1 @@ -108277,6 +109390,7 @@ shop-lingerie.tk, 1 shop-links.co, 1 shop-ok.tk, 1 shop-s.net, 1 +shop-slivki.tk, 1 shop3dmili.com, 1 shop4d.com, 1 shop4im.com, 1 @@ -108541,6 +109655,7 @@ shoruihokan.com, 1 shoshin-aikido.de, 1 shoshin.technology, 1 shossain.tk, 1 +shost.ga, 1 shota-sekkotsuin.com, 1 shota.pictures, 1 shota.vip, 1 @@ -108592,6 +109707,7 @@ shpiliak.com, 1 shpiliak.ru, 1 shpori.tk, 1 shrapnel.com, 1 +shrapnel.ga, 1 shraymonks.com, 1 shred.ch, 0 shredoptics.ch, 0 @@ -108747,7 +109863,6 @@ sidingsmedia.com, 1 sidiprojects.us, 1 sidirokastro.ga, 1 sidium.de, 1 -sidlicenceapp.herokuapp.com, 1 sidmax.ca, 1 sidneyhaberland.com, 1 sidnicio.us, 1 @@ -108852,6 +109967,7 @@ signing-milter.org, 1 signing.tools, 1 signinwithmc.com, 1 signix.net, 1 +signmycode.com, 1 signomatic.be, 1 signomatic.ch, 1 signomatic.co.nz, 1 @@ -108884,6 +110000,7 @@ sijbesmaverhuizingen.nl, 1 sijimi.cn, 1 sik-it.nl, 1 sikademy.com, 1 +sikaranbrotherhood.tk, 1 sikawebtools.com, 1 sikayetvar.com, 0 sike.org, 1 @@ -108948,6 +110065,7 @@ silvaserv.it, 1 silver-heart.co.uk, 1 silver-johnes.tk, 1 silverartcollector.com, 1 +silverback.is, 0 silverblog.org, 1 silverbowflyshop.com, 1 silverbox.ga, 1 @@ -109048,6 +110166,7 @@ silvershadow.cc, 1 silverstartup.sk, 1 silverstyle.ua, 1 silverswanrecruitment.com, 0 +silvertorrents.cf, 1 silverwaregames.io, 1 silverwind.io, 1 silvesrom.ro, 0 @@ -109247,6 +110366,7 @@ simranmehta.ga, 1 sims4hub.ga, 1 simscale.com, 1 simsfinnchiropractic.com.au, 1 +simsimi.ml, 1 simsnieuws.nl, 1 simstarstyle.tk, 1 simstime.net, 1 @@ -109302,6 +110422,7 @@ sinemakurd.tk, 1 sinergify.com, 1 sinergy.ch, 0 sinetron.ga, 1 +sinews.tk, 1 sinfield.com, 0 sinfoniettabelcanto.org, 1 sinfully.gq, 1 @@ -109345,6 +110466,7 @@ sinistragiovanile.tk, 1 sinkhole-florida.com, 1 sinkholerepairsflorida.com, 1 sinkip.com, 1 +sinluzvenezuela.tk, 1 sinmarea.com, 1 sinn-frei.tk, 1 sinner-rider.tk, 1 @@ -109412,6 +110534,7 @@ siqi.wang, 1 sirakov.tk, 1 siralyvisegrad.hu, 1 siranap.com, 1 +sirandorung.tk, 1 siraweb.org, 1 sirbouncealotcastles.co.uk, 1 sircharlesincharge.com, 1 @@ -109504,6 +110627,7 @@ site-oficial-inicio.com, 1 site-oflcial.com, 1 site-remont.ml, 1 site-romania.tk, 1 +site-ua.tk, 1 site.com, 1 site.mu, 1 site2002.tk, 1 @@ -109522,6 +110646,7 @@ sitederencontregratuite.com, 1 siteforce.com, 1 sitehizi.com, 1 siteintelstage.com, 1 +sitekatalog.tk, 1 sitelinks.ga, 1 sitelinks.ml, 1 sitelmexico.com, 0 @@ -109538,6 +110663,7 @@ siteru.tk, 1 sites.google.com, 1 sitesara.com, 1 siteschema.com, 1 +sitesdesign.tk, 1 sitesecurityscan.com, 1 sitesforward.com, 1 sitesko.de, 1 @@ -109630,6 +110756,7 @@ skachay-knighki.gq, 1 skachay-photo.gq, 1 skagen-feriebolig.dk, 1 skaginn.tv, 1 +skaiman.ga, 1 skaitliukas.tk, 1 skalar.sk, 1 skalcollective.com, 1 @@ -109764,6 +110891,7 @@ skiptadiabetes.com, 1 skipton.io, 1 skirent-masocorto.com, 1 skirted.cf, 1 +skirts.tk, 1 skirtskenya.tk, 1 skischule-wildewiese.de, 1 skitecsh.com, 1 @@ -109941,6 +111069,7 @@ skynetnetwork.eu.org, 1 skynetstores.ae, 1 skynetz.tk, 1 skyoy.com, 0 +skypanic.com, 1 skypark.tk, 1 skypce.net, 1 skype.com, 1 @@ -110035,8 +111164,8 @@ slayer.tech, 1 slayingqueen.com, 1 slb.ru, 1 slbknives.com, 1 +slc.is, 0 slcdn.net, 1 -sld08.com, 1 sldev.ovh, 1 sldlcdn.com, 1 slechtereview.nl, 1 @@ -110285,6 +111414,7 @@ smartchoices.ie, 1 smartcleaningcenter.nl, 1 smartclothing.pl, 1 smartcluster.ga, 1 +smartcover.tk, 1 smartcpa.ca, 1 smartdatafusion.jp, 1 smartdb.jp, 1 @@ -110507,6 +111637,7 @@ smpred.net, 1 smprime.com, 1 smrdim.cz, 1 smries.com, 1 +sms-pro.tk, 1 sms.storage, 1 sms1.ro, 1 sms72.tk, 1 @@ -110665,6 +111796,7 @@ snow.dog, 0 snowalerts.nl, 1 snowatka.com, 1 snowboard-break.tk, 1 +snowboardforum.tk, 1 snowcat.tk, 1 snowchamps.nl, 1 snowcrestdesign.com, 1 @@ -110706,6 +111838,7 @@ snrub.co, 1 sns-tg.pl, 1 sns.hu, 1 snsdomain.com, 1 +snsirius.cf, 1 sntial.co.za, 1 snuffstore.de, 1 snukep.kr, 1 @@ -110756,6 +111889,7 @@ socfactor.ru, 1 socheap.win, 1 sochi-sochno.ru, 1 sochi.tatar, 1 +sochionline.tk, 1 soci.ml, 1 sociaalwerknederland.nl, 1 sociability.dk, 1 @@ -110768,6 +111902,7 @@ social-work-colleges.com, 1 social-work.tk, 1 social.com.co, 1 socialab.gr, 1 +socialair.tk, 1 socialblaze.com.au, 1 socialbook2015.ga, 1 socialbook2015.gq, 1 @@ -110974,6 +112109,7 @@ soinvett.com, 0 soissons-technopole.org, 1 soji.io, 1 soju-delivery.com, 1 +sokak-sanati.tk, 1 sokakfotografi.com, 1 sokenconstruction.com, 1 soket.ee, 1 @@ -111030,6 +112166,7 @@ solden.be, 1 soldeoutubro.com, 1 soldesduck.be, 1 soldesduck.ch, 1 +soldierangels.tk, 1 soldiersmg.tk, 1 sole-erdwaermetauscher.de, 1 soledadpenades.com, 0 @@ -111197,8 +112334,10 @@ son-onlajn.cf, 1 son-onlajn.ga, 1 son-onlajn.gq, 1 son-onlajn.ml, 1 +son-onlajn.tk, 1 son-tolkovatel.cf, 1 son-tolkovatel.ga, 1 +son-tolkovatel.gq, 1 son-tolkovatel.ml, 1 son-tolkovatel.tk, 1 son.ru, 1 @@ -111274,6 +112413,7 @@ sonnik-znachenie-sna.gq, 1 sonnik-znachenie-sna.ml, 1 sonnik-znachenie-sna.tk, 1 sonnyland.tk, 1 +sonodrom.tk, 1 sonoecoracao.com.br, 1 sonofsunart.com, 1 sonohigurashi.blog, 1 @@ -111373,6 +112513,7 @@ sos.vg, 1 sos.yt, 1 sosafe-awareness.com, 1 sosaka.ml, 1 +sosaka.tk, 1 sosecu.red, 1 sosedisetka.tk, 1 soseletronica.com.br, 1 @@ -111401,7 +112542,6 @@ sosteam.jp, 1 sosteric.si, 1 sostm.org, 1 sosyalat.com, 1 -sosyalevin.com, 1 sot-te.ch, 1 sot.blue, 1 sot.red, 1 @@ -111499,6 +112639,7 @@ soundshepard.tk, 1 soundslike.gent, 1 soundtrash.tk, 1 soundtruckandautorepair.com, 1 +soundtube.tk, 1 soundwavefestival.tk, 1 soundzimega.tk, 1 soungui.cm, 1 @@ -112021,6 +113162,7 @@ spirit-hunters-germany.de, 1 spirit55555.dk, 1 spiritbionic.ro, 1 spiritedengineers.tk, 1 +spiritous.cf, 1 spiritscorp.ddns.net, 1 spiritshack.co.uk, 1 spiritual.dating, 1 @@ -112141,6 +113283,7 @@ sportprint.hr, 1 sports-colleges.com, 1 sports-equipmen.tk, 1 sports-online.cf, 1 +sports-sites.ml, 1 sports.dating, 1 sportsandnews.tk, 1 sportsbookpromocodes.com, 1 @@ -112190,6 +113333,7 @@ spotupload.com, 1 spotworld.co, 1 spotypal.com, 1 spotzlight.cf, 1 +spotzlight.tk, 1 sppin.fr, 1 sppit.com, 1 spr.id.au, 1 @@ -112402,8 +113546,10 @@ srinivasan.io, 1 sriramdigital.tk, 1 sriravana.tk, 1 sritafrican.tk, 1 +sritalaska.tk, 1 sritbeauty.tk, 1 sritbrazil.tk, 1 +sritcities.tk, 1 sritclassic.tk, 1 srithunters.tk, 1 sritidaho.tk, 1 @@ -112752,6 +113898,7 @@ starfieldguide.com, 1 starfiles.co, 1 starfm.de, 1 starfm.gq, 1 +starfriend.ru, 1 stargarder-jungs.de, 1 stargate.gq, 1 stargazer.de, 1 @@ -113291,7 +114438,6 @@ stichtingsticky.nl, 0 stichtingwwtoegankelijk.nl, 1 stick2bike.de, 1 stickandpoketattookit.com, 1 -stickeramoi.com, 1 stickerparadise.me, 1 stickers-garage.com, 1 stickertrade.me, 1 @@ -113369,7 +114515,6 @@ stirblaut.de, 1 stirling.co, 1 stisidores.org, 1 stitch.money, 1 -stitchfiddle.com, 1 stitchinprogress.com, 1 stjh.org.sg, 1 stjohncamden.com, 1 @@ -114039,7 +115184,6 @@ studiomarcella.com, 1 studiomenfis.com, 1 studiomko.com, 1 studionowystyl.pl, 1 -studiopanamaitalia.com, 1 studiopirrate.com, 1 studioproapp.com, 1 studioriehl.com, 1 @@ -115368,6 +116512,7 @@ sys-state.de, 1 sys-tm.com, 1 sys.pub, 0 sysadmin.pm, 1 +sysadmin.xyz, 1 sysadmin21.tk, 1 sysadmins.ro, 1 sysadvisors.pl, 1 @@ -115468,7 +116613,6 @@ szetoesq.com, 1 szhighsun.com, 1 szih.org.pl, 1 szilaghi.com, 1 -sziluett.xyz, 1 szinezdmagad.hu, 1 szkolajazdykaleta.pl, 1 szkolenia-dron.pl, 1 @@ -115481,6 +116625,7 @@ szotkowski.info, 1 szotkowski.online, 1 szpet.jp, 1 szpro.ru, 1 +szs-arbeitssicherheit.de, 1 szs.space, 1 sztfh.hu, 1 sztoriboljeles.hu, 1 @@ -115823,7 +116968,6 @@ taken.pl, 1 takeomi.jp, 1 takepicturesleavefootprints.com, 1 takeshi.cz, 1 -takesrv.jp, 1 takestars.tk, 1 takethatspainfanclub.tk, 1 takeyourpic.co.uk, 1 @@ -116402,6 +117546,7 @@ tbq-s1.com, 1 tbrindus.ca, 1 tbs-certificates.co.uk, 1 tbscan.com, 1 +tbsmportal.com, 1 tbspace.de, 1 tbsunday.tk, 1 tbtech.cz, 1 @@ -116423,7 +117568,6 @@ tcb-b.org, 1 tcbdarts.nl, 1 tccb.gov.tr, 1 tccc.org.tw, 1 -tcckonsult.com, 1 tccmb.com, 1 tccportal.com, 1 tcdn.tech, 1 @@ -116580,6 +117724,7 @@ teamcollins.org.nz, 1 teamconf.ru, 1 teamdarko.tk, 1 teamdaylo.xyz, 1 +teamdev.id, 1 teamdevelopers.ga, 1 teamdriven.tk, 1 teamdumondelibre.fr, 1 @@ -116662,6 +117807,7 @@ teatrarium.com, 1 teatroutopia.tk, 1 teazer.tk, 1 teb-akademia.pl, 1 +tebebo.com, 1 tebian.tk, 1 tebieer.com, 1 tebis-consulting.my-router.de, 1 @@ -117422,6 +118568,7 @@ terengganudaily.tk, 1 terenska-edinica.tk, 1 terento.org, 1 tereotech.net, 1 +teriiphotography.com, 1 teritwarsj.org, 1 teriyakisecret.com, 1 term-master.ru, 1 @@ -117482,7 +118629,6 @@ terrapinstationmd.com, 1 terraquercus.tk, 1 terrariatr.tk, 1 terrarium.tk, 1 -terrariumcare.com, 1 terrasandcooking.nl, 1 terrasearcher.tk, 1 terraso.org, 1 @@ -118001,7 +119147,6 @@ thebeeyard.org, 1 thebeginningviolinist.com, 1 thebengalinews.tk, 1 theberries.tk, 1 -thebertian.com, 1 thebestfun.co.uk, 1 thebestlaos.ga, 1 thebestnews.ga, 1 @@ -118189,6 +119334,7 @@ thedarkfusion.tk, 1 thedarksidesoftwaresecurity.ga, 1 thedarkteam.tk, 1 thedave.link, 1 +thedave.me, 1 thedave.photos, 1 thedawningofdarkness.tk, 1 thedeathmachine.tk, 1 @@ -118196,7 +119342,6 @@ thedeathofannakarina.tk, 1 thedebug.life, 1 thedefiled.tk, 1 thedefiningdifference.com, 1 -thedelightfuldiet.com, 0 thedermdetective.com, 1 thederminstitute.com, 1 thedev.id, 1 @@ -118720,7 +119865,6 @@ thepodcastreviewshow.com, 1 thepoetryclub.tk, 1 thepokerbank.com, 1 thepool.tk, 1 -theposhfudgecompany.co.uk, 1 thepowerboys.tk, 1 thepressleygirls.com, 1 thepriceisright.tk, 1 @@ -118748,7 +119892,6 @@ theralino.de, 1 therandombits.com, 0 therankkings.org, 1 therapie-psycho-emotionnelle.fr, 1 -therapiemi.ch, 1 therapiepraxis-westbezirk.de, 1 therapyclient.com, 1 therapyconnects.co.uk, 1 @@ -118891,7 +120034,6 @@ thesomepeople.org, 1 thesoundproofwindows.co.uk, 1 thesoundstageatstrangeland.com, 1 thespacegame.tk, 1 -thespicygadgematics.com, 1 thespiritfm.tk, 1 thesslstore.com, 1 thesslstore.in, 1 @@ -119010,7 +120152,6 @@ thevirtualdetective.games, 1 thevirtuousdog.com, 1 thevisasofoz.com, 1 thevisioncenterpa.com, 1 -thevitpro.com, 1 thevoga.com, 1 thevoice4you.tk, 1 thevoid.one, 1 @@ -119074,7 +120215,6 @@ thewraithmovie.tk, 1 thewrenchmonkey.ca, 1 thewrightflyer.com, 1 thewritegrl.com, 1 -thewrittencrown.com, 0 thexalla.tk, 1 thexme.de, 1 thexpert.ml, 1 @@ -119472,7 +120612,6 @@ tianyis.net, 1 tianyou-ecjtu.com, 1 tiaria.id, 1 tiaskipin.tk, 1 -tiavoo.com, 1 tib1.com, 1 tibber.com, 1 tibberdev.com, 1 @@ -119569,6 +120708,7 @@ tienerdienst-johanneskapel.tk, 1 tienic.com, 1 tiens-ib.cz, 1 tier5industries.com, 1 +tierarzt-karlsruhe-durlach.de, 1 tierarztpraxis-illerwinkel.de, 1 tierarztpraxis-weinert.de, 1 tiergear.com.au, 1 @@ -120192,7 +121332,6 @@ tobis-rundfluege.de, 1 tobis.cloud, 1 tobischo.de, 1 tobnm.gov, 1 -tobrien.me, 1 tobruxo.com.br, 1 tobtennis.tk, 1 toby.website, 1 @@ -120697,6 +121836,7 @@ topanimecharacters.com, 1 topanlage.de, 1 toparkinfo.hu, 1 topas.tk, 1 +topask.ru, 1 topaxi.codes, 1 topbestsellerproduct.com, 1 topbloc.com, 1 @@ -121914,7 +123054,6 @@ treatyoself.com.au, 1 trebek.club, 1 trebilfoundationsystems.com, 1 trebnie.nl, 1 -trecobox.com.br, 1 tredegar.com, 1 tredegarsurfaceprotection.com, 1 tredto.com, 1 @@ -122504,7 +123643,6 @@ truthdancer.com, 1 truthmessages.pw, 1 truthsayer.tk, 1 truthsocial.com, 1 -trutrip.co, 1 truvayangin.tk, 1 truvisory.com, 1 trux.tk, 1 @@ -122982,7 +124120,6 @@ turnover.cf, 1 turobot.casa, 1 turoktv.org, 1 turpinpesage.fr, 1 -tursiae.org, 1 turteka.com, 1 turtle.ai, 0 turtleduckstudios.com, 1 @@ -123091,7 +124228,6 @@ tv.kg, 1 tv2vie.org, 0 tvabullarbro.tk, 1 tvaerialsmanchester.com, 1 -tvatomic.com, 1 tvbracketman.co.uk, 1 tvcal.net, 1 tvchannelslive.tk, 1 @@ -123178,7 +124314,7 @@ twfwd.email, 1 twiddlebugdesigns.com, 1 twidy.jp, 0 twidy.uk, 1 -twig.sg, 1 +twig.sg, 0 twigandolive.com, 1 twilightcookies.ca, 1 twilightkingdom.tk, 1 @@ -123230,7 +124366,6 @@ two-step-verification.solutions, 1 twoandahalfvan.eu, 1 twobitbusker.com, 1 twobrothersbbq.com, 0 -twocatsinacaravan.xyz, 1 twocornertiming.com, 1 twodadsgames.com, 1 twoef.co.uk, 1 @@ -124269,6 +125404,7 @@ unluco.com, 1 unmanaged.space, 1 unmarkdocs.co, 1 unmask.earth, 1 +unmediodigital.com, 1 unminutomami.com, 1 unmo.com, 1 unn-edu.info, 1 @@ -124534,7 +125670,6 @@ urbanized.tk, 1 urbanizedrecords.tk, 1 urbanjunior.com, 1 urbanmic.com, 1 -urbanmsp.com, 1 urbannewsservice.com, 1 urbanology.tk, 1 urbanon.cz, 1 @@ -124824,7 +125959,6 @@ uteasybooki.com, 1 utensil.org, 1 utevai.tk, 1 uthavi.org, 1 -utheatre.org, 1 utiars.com, 1 uticagravel.com, 1 utilajexpert.ro, 1 @@ -125261,6 +126395,7 @@ vampyrium.com, 0 vampyrium.net, 0 van-assen.com, 1 van11y.net, 1 +vanadrighem.eu, 1 vanarok.xyz, 0 vanasperenschoenen.nl, 1 vanbalen.be, 1 @@ -125560,6 +126695,7 @@ ve.search.yahoo.com, 0 ve3oat.ca, 1 ve3zsh.ca, 1 veadoscomfome.tk, 1 +veast.network, 1 vebbankir-zajm-onlajn.gq, 1 veber.bg, 1 vecara.es, 1 @@ -127709,7 +128845,6 @@ vutrox.com, 1 vutruso.com, 1 vux.li, 1 vuzi.fr, 1 -vv1234.cn, 1 vv5197.co, 1 vv6729.co, 1 vv6729.com, 0 @@ -128148,7 +129283,6 @@ wangql.net, 1 wangqr.org, 1 wangqr.tk, 1 wangriwu.com, 1 -wangsongbo.online, 1 wangtanzhang.com, 1 wangwill.me, 1 wangyue.blog, 1 @@ -128824,7 +129958,6 @@ webforthemasses.tk, 1 webfronten.dk, 0 webfun.tk, 1 webgadgets.tk, 1 -webgaku.net, 1 webgamex.ml, 1 webgap.io, 0 webgarten.ch, 1 @@ -129434,7 +130567,6 @@ werwolf-live.de, 1 werxa.cz, 1 werxus.eu, 1 weryfikacjapodatnika.pl, 1 -wescuss.com, 1 weserv.nl, 1 wesleyanbank.co.uk, 1 wesleyarcher.com, 1 @@ -129515,6 +130647,7 @@ westoveral.gov, 1 westpennwire.com, 1 westplains.gov, 1 westpointne.gov, 1 +westportseaanglingfestival.eu, 1 westrandgardeningservices.co.za, 1 westrandmall.co.za, 1 westsalemwi.gov, 1 @@ -129699,7 +130832,6 @@ whereismyorigin.cf, 1 whereisthekeep.com, 1 whereiszakir.com, 1 wheresbuzz.com.au, 1 -whereuare.se, 1 whereveryougo.space, 1 whexit.nl, 1 whey-protein.ch, 1 @@ -131127,7 +132259,6 @@ worldnewsinbox.ga, 1 worldnewsphoto.tk, 1 worldofarganoil.com, 1 worldofbelia.de, 1 -worldofgeekstuff.com, 1 worldofghibli.id, 1 worldofheroes.ml, 1 worldoflegion.ml, 1 @@ -131417,7 +132548,6 @@ wsadek.ovh, 1 wsave.be, 1 wsb-immo.at, 1 wsb-immobilien.at, 1 -wsb.onl, 1 wsb.pl, 1 wscales.com, 0 wscauth.de, 1 @@ -131733,7 +132863,6 @@ wyydsb.com, 1 wyydsb.xin, 1 wyzphoto.nl, 1 wyzwaniemilosci.com, 1 -wz.lviv.ua, 1 wz.pt, 1 wz8.info, 1 wzajemnie.org.pl, 1 @@ -131751,7 +132880,6 @@ x-lan.be, 1 x-net24.pl, 1 x-one.co.jp, 1 x-orbit.dk, 1 -x-pertservice.com, 1 x-team.co.il, 1 x-way.org, 1 x.io, 1 @@ -132300,7 +133428,6 @@ xinyazhang.com, 1 xinyezx.com, 1 xinyitour.tw, 1 xio.moe, 1 -xion.nu, 1 xiphwork.de, 1 xiqonline.com, 1 xirion.net, 1 @@ -132382,7 +133509,6 @@ xn----7sbagi4akcjwfceu2aoi5e0eh.xn--p1ai, 1 xn----7sbarcdvrtr1be.org, 1 xn----7sbbagp2bcfwdeee1afm.xn--p1ai, 1 xn----7sbbak4cyaoedjf3m.xn--p1ai, 1 -xn----7sbbfsshjvgyde8g3c.xn--p1ai, 1 xn----7sbbgbr0arxb4a4exa.com.ua, 1 xn----7sbbhzfbdo6dnf.tk, 1 xn----7sbbncaddj9a9b6am9p.tk, 1 @@ -132394,7 +133520,6 @@ xn----7sblrfhjjgq8g.xn--p1ai, 1 xn----7sbmucgqdbgwwc5e9b.xn--p1ai, 1 xn----7sbq4auch5b4b.xn--p1ai, 1 xn----8hcdn2ankm1bfq.com, 1 -xn----8sbfkobhgmxahfmmhe8b8c6ff.xn--p1ai, 1 xn----dtbfemantkhdczc.tk, 1 xn----dtbfemmqjdddczc.tk, 1 xn----dtbhcpoeofgcvoic1s.xn--p1ai, 1 @@ -132404,6 +133529,7 @@ xn----ncfb.ws, 1 xn----rtbbavlecj.xn--p1ai, 1 xn----ylba7abgd9bnh0e.xn--qxa6a, 1 xn---35-6cdk1dnenygj.xn--p1ai, 1 +xn--0iv967ab7w.xn--rhqv96g, 0 xn--0kq33cbsi8bk6d417b.com, 1 xn--0kq33cz5c8wmwrqqw1d.com, 1 xn--12c3bpr6bsv7c.com, 1 @@ -132482,7 +133608,7 @@ xn--80aejhvi0at.xn--90ais, 1 xn--80aejljbfwxn.xn--p1ai, 1 xn--80affa6ai0a.tk, 1 xn--80ah4f.xn--p1ai, 1 -xn--80ahccom2a2c.xn--p1ai, 0 +xn--80ahccom2a2c.xn--p1ai, 1 xn--80ahclcaoccacrhfebi0dcn5c1jh.xn--p1ai, 1 xn--80ahcnlhmh.xn--p1ai, 1 xn--80ahjdhy.tk, 1 @@ -132552,7 +133678,6 @@ xn--c5w032d4vi.xn--fiqz9s, 1 xn--c5w27q.ml, 1 xn--c5wy5c025b.xn--fiqs8s, 1 xn--c5wy5c025b.xn--fiqz9s, 1 -xn--casaitala-n5a.com, 1 xn--cck4ax91r.com, 1 xn--cck7f515h.com, 1 xn--cckdrt0kwb4g3cnh.com, 1 @@ -132638,7 +133763,6 @@ xn--gs8h.eu.org, 1 xn--gstehaus-leipzig-vnb.de, 0 xn--gu1a.moe, 1 xn--h1aarew7ct.tk, 1 -xn--h1ahbcdb8g.xn--p1ai, 1 xn--heilendehnde-ocb.de, 1 xn--helhetsframtrdande-xtb.se, 1 xn--hfk-allgu-schwaben-stb.de, 1 @@ -133735,6 +134859,7 @@ yhanthydech.com, 0 yhaupenthal.org, 1 yhe.me, 1 yhenke.de, 0 +yhfou.com, 1 yhhvi.cf, 1 yhn.sh, 1 yhndnzj.com, 1 @@ -134471,7 +135596,6 @@ yw.com, 1 yxbet43.com, 1 yxc.xyz, 1 yxt521.com, 1 -yxzero.xyz, 1 yy-s.net, 1 yy153.com, 0 yy366.cc, 1 @@ -135210,6 +136334,7 @@ zeromoment.marketing, 1 zeronet.io, 1 zeroplast24.ru, 1 zeropoint.bg, 1 +zerosector.io, 1 zeroseteatacado.com.br, 1 zerosource.net, 1 zerotoleranceclan.tk, 1 @@ -135910,7 +137035,6 @@ zumberak.tk, 1 zummoricambi.com, 1 zumtaedanceschool.co.za, 1 zumturm.org, 1 -zumub.com, 1 zumwildenaffen.com, 1 zund-app.com, 1 zundapp.one, 1 diff --git a/services/settings/dumps/security-state/intermediates.json b/services/settings/dumps/security-state/intermediates.json index f598161ffb7e3..746905f29c911 100644 --- a/services/settings/dumps/security-state/intermediates.json +++ b/services/settings/dumps/security-state/intermediates.json @@ -1,7 +1,133 @@ { "data": [ { - "schema": 1660828067621, + "schema": 1661389023654, + "derHash": "zHJT696ffpLLope1ut7Rsi5c6spSXiAbTcQQ9PNQS14=", + "subject": "CN=CFCA EV OCA,O=China Financial Certification Authority,C=CN", + "subjectDN": "MFUxCzAJBgNVBAYTAkNOMTAwLgYDVQQKDCdDaGluYSBGaW5hbmNpYWwgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxFDASBgNVBAMMC0NGQ0EgRVYgT0NB", + "whitelist": false, + "attachment": { + "hash": "74214137d4d8e9fcca062824947ddab76b72e3385e4e90362d532dea748a76cf", + "size": 1898, + "filename": "Ub-bKk6h-qrzcElkX07080gHiz8CDNkXagA7GJtPu0I=.pem", + "location": "security-state-staging/intermediates/7b653369-09f2-4882-9c83-209a35b305e5.pem", + "mimetype": "application/x-pem-file" + }, + "pubKeyHash": "Ub+bKk6h+qrzcElkX07080gHiz8CDNkXagA7GJtPu0I=", + "crlite_enrolled": false, + "id": "2f50d8ff-d71a-4851-afa7-4fb7a4e14792", + "last_modified": 1661410623072 + }, + { + "schema": 1661388534953, + "derHash": "nDBRZJbhJbPQkx9Jh14pUW2dwlRz5dahBsH8+GbTBts=", + "subject": "CN=GTS Y2,O=Google Trust Services LLC,C=US", + "subjectDN": "MEIxCzAJBgNVBAYTAlVTMSIwIAYDVQQKExlHb29nbGUgVHJ1c3QgU2VydmljZXMgTExDMQ8wDQYDVQQDEwZHVFMgWTI=", + "whitelist": false, + "attachment": { + "hash": "e8c95c6e8334db472dd4dd81fc9057a756258573b6b2c815af66cdf0e960c6a0", + "size": 1906, + "filename": "zYGIkpoNQj_A8MrSV7BzubZdDqEk9LkLgAj8t8_U_ns=.pem", + "location": "security-state-staging/intermediates/4f5d4d0d-ab8d-454f-9170-45bee44c5db8.pem", + "mimetype": "application/x-pem-file" + }, + "pubKeyHash": "zYGIkpoNQj/A8MrSV7BzubZdDqEk9LkLgAj8t8/U/ns=", + "crlite_enrolled": false, + "id": "510e0089-ae37-4b96-8605-c4ba8a4f38f3", + "last_modified": 1661389023168 + }, + { + "schema": 1661374623728, + "derHash": "fXQDQbUZP1PmdeOh47SxCV5gJQn2Wl+nV2sOOlRw+cY=", + "subject": "CN=GTS Y1,O=Google Trust Services LLC,C=US", + "subjectDN": "MEIxCzAJBgNVBAYTAlVTMSIwIAYDVQQKExlHb29nbGUgVHJ1c3QgU2VydmljZXMgTExDMQ8wDQYDVQQDEwZHVFMgWTE=", + "whitelist": false, + "attachment": { + "hash": "639a1475e5dc0801f220279c12f2a7afd908a3c78a3734cd6f1be16127a0c9d7", + "size": 1906, + "filename": "V7Wxjz1qgqxtHdP2QmPdLItv2zRjJ79Zl1N6X7TYHVA=.pem", + "location": "security-state-staging/intermediates/7190cdca-d03a-4a38-9344-112721e008fd.pem", + "mimetype": "application/x-pem-file" + }, + "pubKeyHash": "V7Wxjz1qgqxtHdP2QmPdLItv2zRjJ79Zl1N6X7TYHVA=", + "crlite_enrolled": false, + "id": "a7a48ed8-bb53-4eac-b5dd-e7e62ded4fd6", + "last_modified": 1661389023157 + }, + { + "schema": 1661388534798, + "derHash": "yvOiKdRUWX8mKTnwfhBWg6cf3PkWRvxgoyr2s1T+Uq4=", + "subject": "CN=GIAG4 ECC,O=Google Trust Services LLC,C=US", + "subjectDN": "MEUxCzAJBgNVBAYTAlVTMSIwIAYDVQQKExlHb29nbGUgVHJ1c3QgU2VydmljZXMgTExDMRIwEAYDVQQDEwlHSUFHNCBFQ0M=", + "whitelist": false, + "attachment": { + "hash": "d250d9ee687cf9e4246b82644cb5630d09a6b047ffbc09e2710c262db5258086", + "size": 1033, + "filename": "BZc_5XFEr4iNHxqv9J30g896n5jT5IJLYZJnXyqUkIU=.pem", + "location": "security-state-staging/intermediates/0586b336-44bf-4b57-81a3-a597aa6ac696.pem", + "mimetype": "application/x-pem-file" + }, + "pubKeyHash": "BZc/5XFEr4iNHxqv9J30g896n5jT5IJLYZJnXyqUkIU=", + "crlite_enrolled": false, + "id": "6b4f13f9-70f4-409d-8480-f02c4bff0feb", + "last_modified": 1661389023147 + }, + { + "schema": 1661388534446, + "derHash": "KGdiAMQV2C0QJR9Senc+fnrJkCIy+rpD4aaMWtO32H0=", + "subject": "CN=GTS Y4,O=Google Trust Services LLC,C=US", + "subjectDN": "MEIxCzAJBgNVBAYTAlVTMSIwIAYDVQQKExlHb29nbGUgVHJ1c3QgU2VydmljZXMgTExDMQ8wDQYDVQQDEwZHVFMgWTQ=", + "whitelist": false, + "attachment": { + "hash": "486ab74ff1c4972cd1baab20287fa21027e8baa01565310ad4a6b2ba09b0db74", + "size": 1069, + "filename": "HS03mRwbGwWTfk-g79L17_0GMn7Rd5Xac10BclJV8_Q=.pem", + "location": "security-state-staging/intermediates/39a2b6b1-2661-49d8-8ecb-62edfe0d4253.pem", + "mimetype": "application/x-pem-file" + }, + "pubKeyHash": "HS03mRwbGwWTfk+g79L17/0GMn7Rd5Xac10BclJV8/Q=", + "crlite_enrolled": false, + "id": "35ccfbf8-d14e-443c-9642-d4ee52e72bcc", + "last_modified": 1661389023136 + }, + { + "schema": 1661388534621, + "derHash": "GB3Ivn6R7fFj5mzD+tFNl5ptrlO1Vtruj33KDhFMFPY=", + "subject": "CN=GTS Y3,O=Google Trust Services LLC,C=US", + "subjectDN": "MEIxCzAJBgNVBAYTAlVTMSIwIAYDVQQKExlHb29nbGUgVHJ1c3QgU2VydmljZXMgTExDMQ8wDQYDVQQDEwZHVFMgWTM=", + "whitelist": false, + "attachment": { + "hash": "f539ab8855770bc8a9e8f1286baa54629b8813ded2d2972aa64a9f3e37d83152", + "size": 1065, + "filename": "LbcjaXDdzSbOmLRKWKuGWSqd6T4QuNVJwnA_RYD9a1k=.pem", + "location": "security-state-staging/intermediates/5e1d14ec-bfc9-439f-a503-78429b0b2596.pem", + "mimetype": "application/x-pem-file" + }, + "pubKeyHash": "LbcjaXDdzSbOmLRKWKuGWSqd6T4QuNVJwnA/RYD9a1k=", + "crlite_enrolled": false, + "id": "e503815e-602e-4784-b2b8-996d3d90a704", + "last_modified": 1661389023125 + }, + { + "schema": 1661371063861, + "derHash": "tn5OkihuFoqRbz28rcPwuD28CtvkP5lcH6rTFt3sddg=", + "subject": "CN=HARICA Institutional TLS ECC,O=Hellenic Academic and Research Institutions CA,C=GR", + "subjectDN": "MG0xCzAJBgNVBAYTAkdSMTcwNQYDVQQKDC5IZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25zIENBMSUwIwYDVQQDDBxIQVJJQ0EgSW5zdGl0dXRpb25hbCBUTFMgRUND", + "whitelist": false, + "attachment": { + "hash": "69fdf558536961cc6ebb3d561bd8ab748fcf3d5d1fac6b6d203ca80228c802fa", + "size": 1333, + "filename": "-Ec0sIhFAVZsZ0KLzPuiGPCfJ2QZZXI3wE_cv2yp1GM=.pem", + "location": "security-state-staging/intermediates/1d4378a1-4d82-486b-b899-ef0248a5962a.pem", + "mimetype": "application/x-pem-file" + }, + "pubKeyHash": "+Ec0sIhFAVZsZ0KLzPuiGPCfJ2QZZXI3wE/cv2yp1GM=", + "crlite_enrolled": true, + "id": "b7d934aa-0f81-4c1f-8dfb-ba992f219852", + "last_modified": 1661374623282 + }, + { + "schema": 1661374125013, "derHash": "XqOFfqzUx8pay8qcRifibzByA40ZGinUw/lGSy5fAMY=", "subject": "CN=Microsoft RSA TLS Issuing EOC CA 01,O=Microsoft Corporation,C=US", "subjectDN": "MFsxCzAJBgNVBAYTAlVTMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xLDAqBgNVBAMTI01pY3Jvc29mdCBSU0EgVExTIElzc3VpbmcgRU9DIENBIDAx", @@ -14,9 +140,27 @@ "mimetype": "application/x-pem-file" }, "pubKeyHash": "Hx2OdoXOglUIj3kb/T+5J/UKwQBwkbW7wzR++8XZqAw=", - "crlite_enrolled": false, + "crlite_enrolled": true, "id": "85bb3b93-bc7b-4813-bd54-54de9d3a4778", - "last_modified": 1661194623196 + "last_modified": 1661374623270 + }, + { + "schema": 1661370832250, + "derHash": "Uzjr7I+yrGCZYSbT52qjT9DzMYrHjrt6yPbxNh9ISzM=", + "subject": "CN=Amazon RSA 2048 M01,O=Amazon,C=US", + "subjectDN": "MDwxCzAJBgNVBAYTAlVTMQ8wDQYDVQQKEwZBbWF6b24xHDAaBgNVBAMTE0FtYXpvbiBSU0EgMjA0OCBNMDE=", + "whitelist": false, + "attachment": { + "hash": "9960f53f3a4d362a258e972a50b6d094af8a8eb71887908dc69ece672b1da701", + "size": 1573, + "filename": "DxH4tt40L-eduF6szpY6TONlxhZhBd-pJ9wbHlQ2fuw=.pem", + "location": "security-state-staging/intermediates/3bbbdd93-4637-465f-933c-b59df5c30125.pem", + "mimetype": "application/x-pem-file" + }, + "pubKeyHash": "DxH4tt40L+eduF6szpY6TONlxhZhBd+pJ9wbHlQ2fuw=", + "crlite_enrolled": false, + "id": "efefd1fe-25c9-48a0-acda-ad37cb8c5d63", + "last_modified": 1661371063389 }, { "schema": 1660265823834, @@ -10800,24 +10944,6 @@ "id": "0aee0acd-3e30-437a-b011-55d61c8d46c4", "last_modified": 1643857049260 }, - { - "schema": 1643813312513, - "derHash": "tn5OkihuFoqRbz28rcPwuD28CtvkP5lcH6rTFt3sddg=", - "subject": "CN=HARICA Institutional TLS ECC,O=Hellenic Academic and Research Institutions CA,C=GR", - "subjectDN": "MG0xCzAJBgNVBAYTAkdSMTcwNQYDVQQKDC5IZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25zIENBMSUwIwYDVQQDDBxIQVJJQ0EgSW5zdGl0dXRpb25hbCBUTFMgRUND", - "whitelist": false, - "attachment": { - "hash": "69fdf558536961cc6ebb3d561bd8ab748fcf3d5d1fac6b6d203ca80228c802fa", - "size": 1333, - "filename": "-Ec0sIhFAVZsZ0KLzPuiGPCfJ2QZZXI3wE_cv2yp1GM=.pem", - "location": "security-state-staging/intermediates/1d4378a1-4d82-486b-b899-ef0248a5962a.pem", - "mimetype": "application/x-pem-file" - }, - "pubKeyHash": "+Ec0sIhFAVZsZ0KLzPuiGPCfJ2QZZXI3wE/cv2yp1GM=", - "crlite_enrolled": false, - "id": "b7d934aa-0f81-4c1f-8dfb-ba992f219852", - "last_modified": 1643813842985 - }, { "schema": 1643539730375, "derHash": "FD3+ZYMuID5NKOww+2C6c77jru4wij+NGUu2Hn0dm8A=", @@ -12096,24 +12222,6 @@ "id": "ef80dba5-2722-4073-94a2-06a8e7cf1eee", "last_modified": 1643209046651 }, - { - "schema": 1643205202035, - "derHash": "zHJT696ffpLLope1ut7Rsi5c6spSXiAbTcQQ9PNQS14=", - "subject": "CN=CFCA EV OCA,O=China Financial Certification Authority,C=CN", - "subjectDN": "MFUxCzAJBgNVBAYTAkNOMTAwLgYDVQQKDCdDaGluYSBGaW5hbmNpYWwgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxFDASBgNVBAMMC0NGQ0EgRVYgT0NB", - "whitelist": false, - "attachment": { - "hash": "74214137d4d8e9fcca062824947ddab76b72e3385e4e90362d532dea748a76cf", - "size": 1898, - "filename": "Ub-bKk6h-qrzcElkX07080gHiz8CDNkXagA7GJtPu0I=.pem", - "location": "security-state-staging/intermediates/7b653369-09f2-4882-9c83-209a35b305e5.pem", - "mimetype": "application/x-pem-file" - }, - "pubKeyHash": "Ub+bKk6h+qrzcElkX07080gHiz8CDNkXagA7GJtPu0I=", - "crlite_enrolled": true, - "id": "2f50d8ff-d71a-4851-afa7-4fb7a4e14792", - "last_modified": 1643209046628 - }, { "schema": 1643205202717, "derHash": "MGKRjZ3WF5JScbx/gIC4pqXSGFu9iA94Yv1MBDsZQZE=", @@ -12474,96 +12582,6 @@ "id": "a4d953b4-251b-4c06-931a-1e3ed439794e", "last_modified": 1641589043234 }, - { - "schema": 1641586240977, - "derHash": "nDBRZJbhJbPQkx9Jh14pUW2dwlRz5dahBsH8+GbTBts=", - "subject": "CN=GTS Y2,O=Google Trust Services LLC,C=US", - "subjectDN": "MEIxCzAJBgNVBAYTAlVTMSIwIAYDVQQKExlHb29nbGUgVHJ1c3QgU2VydmljZXMgTExDMQ8wDQYDVQQDEwZHVFMgWTI=", - "whitelist": false, - "attachment": { - "hash": "e8c95c6e8334db472dd4dd81fc9057a756258573b6b2c815af66cdf0e960c6a0", - "size": 1906, - "filename": "zYGIkpoNQj_A8MrSV7BzubZdDqEk9LkLgAj8t8_U_ns=.pem", - "location": "security-state-staging/intermediates/4f5d4d0d-ab8d-454f-9170-45bee44c5db8.pem", - "mimetype": "application/x-pem-file" - }, - "pubKeyHash": "zYGIkpoNQj/A8MrSV7BzubZdDqEk9LkLgAj8t8/U/ns=", - "crlite_enrolled": true, - "id": "510e0089-ae37-4b96-8605-c4ba8a4f38f3", - "last_modified": 1641589043222 - }, - { - "schema": 1641586241271, - "derHash": "fXQDQbUZP1PmdeOh47SxCV5gJQn2Wl+nV2sOOlRw+cY=", - "subject": "CN=GTS Y1,O=Google Trust Services LLC,C=US", - "subjectDN": "MEIxCzAJBgNVBAYTAlVTMSIwIAYDVQQKExlHb29nbGUgVHJ1c3QgU2VydmljZXMgTExDMQ8wDQYDVQQDEwZHVFMgWTE=", - "whitelist": false, - "attachment": { - "hash": "639a1475e5dc0801f220279c12f2a7afd908a3c78a3734cd6f1be16127a0c9d7", - "size": 1906, - "filename": "V7Wxjz1qgqxtHdP2QmPdLItv2zRjJ79Zl1N6X7TYHVA=.pem", - "location": "security-state-staging/intermediates/7190cdca-d03a-4a38-9344-112721e008fd.pem", - "mimetype": "application/x-pem-file" - }, - "pubKeyHash": "V7Wxjz1qgqxtHdP2QmPdLItv2zRjJ79Zl1N6X7TYHVA=", - "crlite_enrolled": true, - "id": "a7a48ed8-bb53-4eac-b5dd-e7e62ded4fd6", - "last_modified": 1641589043207 - }, - { - "schema": 1641586240688, - "derHash": "yvOiKdRUWX8mKTnwfhBWg6cf3PkWRvxgoyr2s1T+Uq4=", - "subject": "CN=GIAG4 ECC,O=Google Trust Services LLC,C=US", - "subjectDN": "MEUxCzAJBgNVBAYTAlVTMSIwIAYDVQQKExlHb29nbGUgVHJ1c3QgU2VydmljZXMgTExDMRIwEAYDVQQDEwlHSUFHNCBFQ0M=", - "whitelist": false, - "attachment": { - "hash": "d250d9ee687cf9e4246b82644cb5630d09a6b047ffbc09e2710c262db5258086", - "size": 1033, - "filename": "BZc_5XFEr4iNHxqv9J30g896n5jT5IJLYZJnXyqUkIU=.pem", - "location": "security-state-staging/intermediates/0586b336-44bf-4b57-81a3-a597aa6ac696.pem", - "mimetype": "application/x-pem-file" - }, - "pubKeyHash": "BZc/5XFEr4iNHxqv9J30g896n5jT5IJLYZJnXyqUkIU=", - "crlite_enrolled": true, - "id": "6b4f13f9-70f4-409d-8480-f02c4bff0feb", - "last_modified": 1641589043192 - }, - { - "schema": 1641564672818, - "derHash": "KGdiAMQV2C0QJR9Senc+fnrJkCIy+rpD4aaMWtO32H0=", - "subject": "CN=GTS Y4,O=Google Trust Services LLC,C=US", - "subjectDN": "MEIxCzAJBgNVBAYTAlVTMSIwIAYDVQQKExlHb29nbGUgVHJ1c3QgU2VydmljZXMgTExDMQ8wDQYDVQQDEwZHVFMgWTQ=", - "whitelist": false, - "attachment": { - "hash": "486ab74ff1c4972cd1baab20287fa21027e8baa01565310ad4a6b2ba09b0db74", - "size": 1069, - "filename": "HS03mRwbGwWTfk-g79L17_0GMn7Rd5Xac10BclJV8_Q=.pem", - "location": "security-state-staging/intermediates/39a2b6b1-2661-49d8-8ecb-62edfe0d4253.pem", - "mimetype": "application/x-pem-file" - }, - "pubKeyHash": "HS03mRwbGwWTfk+g79L17/0GMn7Rd5Xac10BclJV8/Q=", - "crlite_enrolled": true, - "id": "35ccfbf8-d14e-443c-9642-d4ee52e72bcc", - "last_modified": 1641567509585 - }, - { - "schema": 1641564672531, - "derHash": "GB3Ivn6R7fFj5mzD+tFNl5ptrlO1Vtruj33KDhFMFPY=", - "subject": "CN=GTS Y3,O=Google Trust Services LLC,C=US", - "subjectDN": "MEIxCzAJBgNVBAYTAlVTMSIwIAYDVQQKExlHb29nbGUgVHJ1c3QgU2VydmljZXMgTExDMQ8wDQYDVQQDEwZHVFMgWTM=", - "whitelist": false, - "attachment": { - "hash": "f539ab8855770bc8a9e8f1286baa54629b8813ded2d2972aa64a9f3e37d83152", - "size": 1065, - "filename": "LbcjaXDdzSbOmLRKWKuGWSqd6T4QuNVJwnA_RYD9a1k=.pem", - "location": "security-state-staging/intermediates/5e1d14ec-bfc9-439f-a503-78429b0b2596.pem", - "mimetype": "application/x-pem-file" - }, - "pubKeyHash": "LbcjaXDdzSbOmLRKWKuGWSqd6T4QuNVJwnA/RYD9a1k=", - "crlite_enrolled": true, - "id": "e503815e-602e-4784-b2b8-996d3d90a704", - "last_modified": 1641567509575 - }, { "schema": 1641502406176, "derHash": "WkmxWuYP9ifaJyqHQ9ZxYrrKEJYWggMhOs+CJ69MSUI=", @@ -25705,5 +25723,5 @@ "last_modified": 1559865863642 } ], - "timestamp": 1661194623196 + "timestamp": 1661410623072 }
This is an automated email from the git hooks/post-receive script.
richard pushed a commit to branch geckoview-102.3.0esr-12.0-1 in repository tor-browser.
commit 3e4c74f620f0348c4ee31676b365eeb5f739c7e4 Author: David Parks daparks@mozilla.com AuthorDate: Tue Aug 23 19:05:18 2022 +0000
Bug 1774453: Disable hiding cursor while typing on Windows. r=cpeterson, a=RyanVM
There are compat issues with the approach. There are future plans to restore the functionality but only when typing into a text area.
Differential Revision: https://phabricator.services.mozilla.com/D155275 --- modules/libpref/init/StaticPrefList.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/modules/libpref/init/StaticPrefList.yaml b/modules/libpref/init/StaticPrefList.yaml index c487b04a35872..3b38ccde5cd45 100644 --- a/modules/libpref/init/StaticPrefList.yaml +++ b/modules/libpref/init/StaticPrefList.yaml @@ -13658,7 +13658,7 @@
- name: widget.windows.hide_cursor_when_typing type: bool - value: true + value: false mirror: always #endif
This is an automated email from the git hooks/post-receive script.
richard pushed a commit to branch geckoview-102.3.0esr-12.0-1 in repository tor-browser.
commit 49eba737d88753cf9aaf4ffb187ad16b594b5c89 Author: Sergey Galich sgalich@mozilla.com AuthorDate: Mon Aug 22 14:49:32 2022 +0000
Bug 1559205, 1611093, 1748828 - support moz-proxy in about:logins r=dimi a=RyanVM
Uri.host throws when scheme is moz-proxy:// This leads to a series of bugs on about:logins when creating or editing moz-proxy URLs.
This patch is supposed to close bug 1559205, bug 1611093 and bug 1748828.
Differential Revision: https://phabricator.services.mozilla.com/D154925 --- toolkit/components/passwordmgr/LoginHelper.jsm | 12 +++++++++++- .../passwordmgr/test/unit/test_getPasswordOrigin.js | 4 ++++ 2 files changed, 15 insertions(+), 1 deletion(-)
diff --git a/toolkit/components/passwordmgr/LoginHelper.jsm b/toolkit/components/passwordmgr/LoginHelper.jsm index 927fed2d46ca0..38d28e2cf7af1 100644 --- a/toolkit/components/passwordmgr/LoginHelper.jsm +++ b/toolkit/components/passwordmgr/LoginHelper.jsm @@ -649,12 +649,22 @@ this.LoginHelper = { getLoginOrigin(uriString, allowJS = false) { let realm = ""; try { + const mozProxyRegex = /^moz-proxy:///i; + const isMozProxy = !!uriString.match(mozProxyRegex); + if (isMozProxy) { + // Special handling because uri.displayHostPort throws on moz-proxy:// + return ( + "moz-proxy://" + + Services.io.newURI(uriString.replace(mozProxyRegex, "https://")) + .displayHostPort + ); + } + let uri = Services.io.newURI(uriString);
if (allowJS && uri.scheme == "javascript") { return "javascript:"; } - // TODO: Bug 1559205 - Add support for moz-proxy
// Build this manually instead of using prePath to avoid including the userPass portion. realm = uri.scheme + "://" + uri.displayHostPort; diff --git a/toolkit/components/passwordmgr/test/unit/test_getPasswordOrigin.js b/toolkit/components/passwordmgr/test/unit/test_getPasswordOrigin.js index e0b8c11252c25..3aa72b62b05d7 100644 --- a/toolkit/components/passwordmgr/test/unit/test_getPasswordOrigin.js +++ b/toolkit/components/passwordmgr/test/unit/test_getPasswordOrigin.js @@ -23,6 +23,10 @@ const TESTCASES = [ ["https://%5B::1%5D:443/foo", "https://%5B::1]"], ["https://%5B::1%5D:8443/foo", "https://%5B::1%5D:8443"], ["ftp://username:password@[::1]:2121/foo", "ftp://[::1]:2121"], + [ + "moz-proxy://username:password@123.456.789.123:12345/foo", + "moz-proxy://123.456.789.123:12345", + ], ];
for (let [input, expected, allowJS] of TESTCASES) {
This is an automated email from the git hooks/post-receive script.
richard pushed a commit to branch geckoview-102.3.0esr-12.0-1 in repository tor-browser.
commit e6d3401ad0e316fe2910821842845da408add587 Author: Edgar Chen echen@mozilla.com AuthorDate: Wed Aug 24 20:56:16 2022 +0000
Bug 1782211 - Init feature policy; r=ckerschb, a=RyanVM
Differential Revision: https://phabricator.services.mozilla.com/D154161 --- docshell/base/nsDocShell.cpp | 2 ++ dom/base/Document.cpp | 8 ++++++-- dom/base/Document.h | 1 + 3 files changed, 9 insertions(+), 2 deletions(-)
diff --git a/docshell/base/nsDocShell.cpp b/docshell/base/nsDocShell.cpp index 3c634133e2710..d20c847dd74a0 100644 --- a/docshell/base/nsDocShell.cpp +++ b/docshell/base/nsDocShell.cpp @@ -6791,6 +6791,8 @@ nsresult nsDocShell::CreateAboutBlankContentViewer( // after being set here. blankDoc->SetSandboxFlags(sandboxFlags);
+ blankDoc->InitFeaturePolicy(); + // create a content viewer for us and the new document docFactory->CreateInstanceForDocument( NS_ISUPPORTS_CAST(nsIDocShell*, this), blankDoc, "view", diff --git a/dom/base/Document.cpp b/dom/base/Document.cpp index 5b7e6f79eec7d..3efc8c5e8945e 100644 --- a/dom/base/Document.cpp +++ b/dom/base/Document.cpp @@ -3888,8 +3888,8 @@ already_AddRefeddom::FeaturePolicy Document::GetParentFeaturePolicy() { return do_AddRef(child->GetContainerFeaturePolicy()); }
-nsresult Document::InitFeaturePolicy(nsIChannel* aChannel) { - MOZ_ASSERT(mFeaturePolicy, "we should only call init once"); +void Document::InitFeaturePolicy() { + MOZ_ASSERT(mFeaturePolicy, "we should have FeaturePolicy created");
mFeaturePolicy->ResetDeclaredPolicy();
@@ -3901,6 +3901,10 @@ nsresult Document::InitFeaturePolicy(nsIChannel* aChannel) { mFeaturePolicy->InheritPolicy(parentPolicy); mFeaturePolicy->SetSrcOrigin(parentPolicy->GetSrcOrigin()); } +} + +nsresult Document::InitFeaturePolicy(nsIChannel* aChannel) { + InitFeaturePolicy();
// We don't want to parse the http Feature-Policy header if this pref is off. if (!StaticPrefs::dom_security_featurePolicy_header_enabled()) { diff --git a/dom/base/Document.h b/dom/base/Document.h index a6b2636a07e55..fcaddc6c7bbac 100644 --- a/dom/base/Document.h +++ b/dom/base/Document.h @@ -1525,6 +1525,7 @@ class Document : public nsINode,
void DoNotifyPossibleTitleChange();
+ void InitFeaturePolicy(); nsresult InitFeaturePolicy(nsIChannel* aChannel);
protected:
This is an automated email from the git hooks/post-receive script.
richard pushed a commit to branch geckoview-102.3.0esr-12.0-1 in repository tor-browser.
commit 8e154d75a8894c9e1c13a2142e5cd2c7297524ac Author: Emilio Cobos Álvarez emilio@crisal.io AuthorDate: Thu Aug 25 02:34:37 2022 +0000
Bug 1785186 - Use zero threshold for lazyload observer. r=hiro, a=RyanVM
This matches WebKit, and the spec:
https://html.spec.whatwg.org/#lazy-load-intersection-observer
Blink has very weird behavior where it treats a zero-area intersection in this particular case with an intersectionRatio of one: https://bugs.chromium.org/p/chromium/issues/detail?id=1356250
Which causes them to load the image even though they have a numeric_limits::min threshold.
So this works in Chromium by chance, but should work per spec.
Differential Revision: https://phabricator.services.mozilla.com/D155501 --- dom/base/DOMIntersectionObserver.cpp | 4 ++-- .../image-loading-lazy-zero-intersection-area.html | 19 +++++++++++++++++++ 2 files changed, 21 insertions(+), 2 deletions(-)
diff --git a/dom/base/DOMIntersectionObserver.cpp b/dom/base/DOMIntersectionObserver.cpp index 23c807c3470d7..78450a64c816e 100644 --- a/dom/base/DOMIntersectionObserver.cpp +++ b/dom/base/DOMIntersectionObserver.cpp @@ -178,7 +178,7 @@ already_AddRefed<DOMIntersectionObserver> DOMIntersectionObserver::CreateLazyLoadObserver(Document& aDocument) { RefPtr<DOMIntersectionObserver> observer = new DOMIntersectionObserver(aDocument, LazyLoadCallback); - observer->mThresholds.AppendElement(std::numeric_limits<double>::min()); + observer->mThresholds.AppendElement(0.0f);
#define SET_MARGIN(side_, side_lower_) \ observer->mRootMargin.Get(eSide##side_) = PrefMargin( \ @@ -198,7 +198,7 @@ already_AddRefed<DOMIntersectionObserver> DOMIntersectionObserver::CreateLazyLoadObserverViewport(Document& aDocument) { RefPtr<DOMIntersectionObserver> observer = new DOMIntersectionObserver(aDocument, LazyLoadCallbackReachViewport); - observer->mThresholds.AppendElement(std::numeric_limits<double>::min()); + observer->mThresholds.AppendElement(0.0f); return observer.forget(); }
diff --git a/testing/web-platform/tests/html/semantics/embedded-content/the-img-element/image-loading-lazy-zero-intersection-area.html b/testing/web-platform/tests/html/semantics/embedded-content/the-img-element/image-loading-lazy-zero-intersection-area.html new file mode 100644 index 0000000000000..9962ce7837a9a --- /dev/null +++ b/testing/web-platform/tests/html/semantics/embedded-content/the-img-element/image-loading-lazy-zero-intersection-area.html @@ -0,0 +1,19 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<title>Image with zero intersection area is lazy-loaded</title> +<link rel="author" title="Emilio Cobos Álvarez" href="mailto:emilio@crisal.io"> +<link rel="author" title="Mozilla" href="https://mozilla.org"> +<link rel="help" href="https://html.spec.whatwg.org/multipage/#the-img-element"> +<link rel="help" href="https://html.spec.whatwg.org/#lazy-load-intersection-observer"> +<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1785186"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<div style="height: 0; overflow: hidden;"> + <img style="display: block" id=target loading="lazy" width="100" height="100"> +</div> +<script> + async_test(function(t) { + target.addEventListener("load", t.step_func_done(function() {})); + target.src = "resources/image.png?zero-intersection-area"; + }); +</script>
This is an automated email from the git hooks/post-receive script.
richard pushed a commit to branch geckoview-102.3.0esr-12.0-1 in repository tor-browser.
commit c7f95db015f8c1d4678fab7bcc968d8668e78e8c Author: ffxbld ffxbld@mozilla.com AuthorDate: Mon Aug 29 11:13:58 2022 +0000
No Bug, mozilla-esr102 repo-update HSTS HPKP remote-settings tld-suffixes - a=repo-update r=RyanVM
Differential Revision: https://phabricator.services.mozilla.com/D155829 --- netwerk/dns/effective_tld_names.dat | 13 + security/manager/ssl/StaticHPKPins.h | 2 +- security/manager/ssl/nsSTSPreloadList.inc | 778 +++++++++++++++------ .../main/devtools-compatibility-browsers.json | 517 +++++++++----- .../dumps/security-state/intermediates.json | 422 +++++++++-- 5 files changed, 1267 insertions(+), 465 deletions(-)
diff --git a/netwerk/dns/effective_tld_names.dat b/netwerk/dns/effective_tld_names.dat index 10beba6658bc4..626c7993907f3 100644 --- a/netwerk/dns/effective_tld_names.dat +++ b/netwerk/dns/effective_tld_names.dat @@ -10912,6 +10912,10 @@ theshop.jp shopselect.net base.shop
+// BeagleBoard.org Foundation : https://beagleboard.org +// Submitted by Jason Kridner jkridner@beagleboard.org +beagleboard.io + // Beget Ltd // Submitted by Lev Nekrasov lnekrasov@beget.com *.beget.app @@ -11690,6 +11694,11 @@ dynv6.net // Submitted by Vladimir Dudr info@e4you.cz e4.cz
+// Easypanel : https://easypanel.io +// Submitted by Andrei Canta andrei@easypanel.io +easypanel.app +easypanel.host + // eero : https://eero.com/ // Submitted by Yue Kang eero-dynamic-dns@amazon.com eero.online @@ -13599,6 +13608,10 @@ small-web.org // Submitted by Dan Kozak dan@smoove.io vp4.me
+// Snowflake Inc : https://www.snowflake.com/ +// Submitted by Faith Olapade faith.olapade@snowflake.com +streamlitapp.com + // Snowplow Analytics : https://snowplowanalytics.com/ // Submitted by Ian Streeter ian@snowplowanalytics.com try-snowplow.com diff --git a/security/manager/ssl/StaticHPKPins.h b/security/manager/ssl/StaticHPKPins.h index 3066430bb0b61..ff5c535d441ed 100644 --- a/security/manager/ssl/StaticHPKPins.h +++ b/security/manager/ssl/StaticHPKPins.h @@ -1125,4 +1125,4 @@ static const TransportSecurityPreload kPublicKeyPinningPreloadList[] = {
static const int32_t kUnknownId = -1;
-static const PRTime kPreloadPKPinsExpirationTime = INT64_C(1669892929282000); +static const PRTime kPreloadPKPinsExpirationTime = INT64_C(1670238524640000); diff --git a/security/manager/ssl/nsSTSPreloadList.inc b/security/manager/ssl/nsSTSPreloadList.inc index db6d0f8bd519f..fb08a3a826e00 100644 --- a/security/manager/ssl/nsSTSPreloadList.inc +++ b/security/manager/ssl/nsSTSPreloadList.inc @@ -8,7 +8,7 @@ /*****************************************************************************/
#include <stdint.h> -const PRTime gPreloadListExpirationTime = INT64_C(1672312124982000); +const PRTime gPreloadListExpirationTime = INT64_C(1672657719707000); %% 0--1.de, 1 0-0.io, 1 @@ -205,6 +205,7 @@ const PRTime gPreloadListExpirationTime = INT64_C(1672312124982000); 055268.com, 1 0553z6.com, 1 0555z6.com, 1 +056697.com, 0 0571z6.com, 1 0575z6.com, 1 058kb.com, 1 @@ -378,7 +379,6 @@ const PRTime gPreloadListExpirationTime = INT64_C(1672312124982000); 1-ae.com, 1 1-inv.com, 1 1-pujcky-uvery.tk, 1 -100-downloads.com, 1 100-i.com, 1 100-referencement.com, 1 10000hits.tk, 1 @@ -477,7 +477,6 @@ const PRTime gPreloadListExpirationTime = INT64_C(1672312124982000); 107996.com, 1 1079fm.ga, 1 10840.net, 1 -1091.jp, 1 10961096.xyz, 1 109k8.com, 1 10er-friseur.de, 1 @@ -2620,8 +2619,6 @@ const PRTime gPreloadListExpirationTime = INT64_C(1672312124982000); 3mediaweb.com, 1 3mind-solutions.com, 1 3ml.org.uk, 1 -3n5b.com, 0 -3n5b.net, 0 3niu10.com, 1 3niu11.com, 1 3niu111.com, 1 @@ -2996,6 +2993,7 @@ const PRTime gPreloadListExpirationTime = INT64_C(1672312124982000); 5000yz.com, 1 5002888.com, 1 5007999.com, 1 +500f500.com, 1 500fcw.com, 1 500k.nl, 1 500k8.com, 1 @@ -5056,6 +5054,7 @@ const PRTime gPreloadListExpirationTime = INT64_C(1672312124982000); 977kb.com, 1 9788876.com, 1 97bros.com, 1 +97display.com, 0 97m.cc, 1 9800.cc, 1 980709.xyz, 1 @@ -5589,6 +5588,7 @@ abcdthesis.net, 1 abceducationacademy.com, 1 abcempreendimentos.com.br, 1 abcensax.tk, 1 +abcfinance.co.uk, 1 abcgruppen.se, 1 abch2o.net, 1 abcheck.se, 1 @@ -5947,7 +5947,6 @@ acalcio.ga, 1 acallawayroofing.com, 1 acalvio.com, 1 acampar.com.br, 1 -acanbi.com, 1 acandroid.top, 1 acani.xyz, 1 acaonegocios.com.br, 1 @@ -6082,6 +6081,7 @@ acemypaper.com, 1 acendealuz.com.br, 1 aceofdiamondspainting.com, 1 aceparking.com, 1 +acephalafashion.com, 1 acercapartners.com, 1 acerentalandsales.com, 1 acerislaw.com, 1 @@ -6461,7 +6461,6 @@ adarsvidler.me, 1 adasbench.com, 1 adata.kz, 1 adativos.com.br, 1 -adauge.com, 1 adawolfa.cz, 1 adbexcavation.ca, 1 adblockextreme.com, 1 @@ -6592,7 +6591,6 @@ adinfinitum.gq, 1 adinternational.com.au, 1 adiprospero.it, 1 adiraku.co.id, 1 -adiscorduser.com, 1 aditro.com, 1 adityatelange.in, 1 adiyamanarackiralama.com, 1 @@ -6782,6 +6780,7 @@ adtgroup.com, 1 adti.pt, 0 adubosvidere.com.br, 1 adultbizz.eu, 1 +adultforum.gr, 1 adultgames.pro, 1 adultmalecontent.com, 1 adultshop.com.au, 1 @@ -6874,7 +6873,6 @@ adventurenow.nl, 1 adventureprooutdoors.com, 1 adventures.com, 1 adventuresofmo.com, 1 -adventureswithlillie.ca, 1 adventuringup.com, 1 adventurousway.com, 1 adventus.space, 1 @@ -6915,6 +6913,7 @@ advokat-dtp.gq, 1 advokat-dtp.ml, 1 advokat-dtp.tk, 1 advokat-malinovskii.ml, 1 +advokat-romanov.com, 1 advokat-teigstad.no, 1 advokat-vvp.com.ua, 1 advokat73.gq, 1 @@ -7006,6 +7005,7 @@ aegee-academy.eu, 1 aegee-academy.org, 1 aegee-utrecht.nl, 1 aegee.eu, 1 +aegee.org, 1 aegis.moe, 1 aegisaccounting.co.uk, 1 aegisalarm.co.uk, 1 @@ -7046,6 +7046,7 @@ aerisnetwork.com, 1 aerlux.md, 1 aero-pioneer.com, 1 aero.parts, 1 +aeroalbrook.com, 1 aerobasegroup.com, 1 aerobatt.com, 1 aerobiconline.tk, 1 @@ -7098,7 +7099,6 @@ aeternus-darkermonument.tk, 1 aeternus.tech, 1 aetherc0r3.eu, 1 aethereahealth.com, 1 -aethereal.xyz, 1 aetherlink.de, 1 aethonan.pro, 1 aethopy.ga, 1 @@ -7723,6 +7723,7 @@ agworkers.com, 1 agzlapp.com, 1 ahanet.tk, 1 ahansen.is, 0 +ahbap.org, 1 ahc.fyi, 1 ahccorleone.tk, 1 ahcpb.com, 1 @@ -7789,7 +7790,7 @@ ai-practitioners.com, 1 ai-soft.co.jp, 1 ai.design, 1 ai.gov, 1 -ai.mr, 1 +ai.mr, 0 ai00.vip, 1 ai1989.com, 1 ai2-jp.com, 1 @@ -7810,6 +7811,8 @@ aibolit.ml, 1 aibolitik.tk, 1 aibot.tk, 1 aibsoftware.mx, 1 +aibuz.net, 1 +aibuz.org, 1 aicamilwaukee.com, 1 aiccc.com.au, 1 aicfb.in, 1 @@ -8028,7 +8031,6 @@ airconditioningcondensers.tk, 1 airconditioningmidrand.co.za, 1 airconmidrand.co.za, 1 airconrandburg.co.za, 1 -airconsandton.co.za, 1 airconsboksburg.co.za, 1 airconsfourways.co.za, 1 airconsrandburg.co.za, 1 @@ -8678,6 +8680,7 @@ alchemisten.tk, 1 alchemiya.ru, 1 alchemy-media-marketing.com, 1 alchemy.gr, 1 +alchemyequities.com.au, 1 alchimic.ch, 0 alchimist-paulo-coelho.tk, 1 alchosting.net, 0 @@ -9082,6 +9085,7 @@ alitajran.com, 1 alitec.it, 1 alitpedia.ga, 1 aliv.biz, 1 +alivecast.co.jp, 1 alix-board.de, 1 aliyasin.org, 1 alizah.id, 1 @@ -9604,6 +9608,7 @@ alpinedentalhealth.com, 1 alpinehighlandrealty.com, 1 alpineitltd.co.uk, 0 alpineplanet.com, 1 +alpinepubliclibrary.org, 1 alpinestarmassage.com, 1 alpinisci.pro, 1 alplogopedia.it, 1 @@ -9653,7 +9658,6 @@ altaizemlya.tk, 1 altaplana.be, 1 altavaldinon.com, 1 altaynews.kz, 0 -altco.group, 1 altcoaching.fr, 1 altcoinandme.com, 1 altcoinfiyatlari.com, 1 @@ -9922,7 +9926,6 @@ amateurs.gq, 1 amateurtuning.tk, 1 amateurvoicetalent.com, 1 amati.solutions, 1 -amato.tk, 1 amatoryasamak.tk, 1 amatsuka.com, 1 amatutis.lt, 1 @@ -10808,6 +10811,7 @@ angiology.sk, 1 angione.ca, 1 angione.se, 1 angisonline.cz, 1 +angkapaito.net, 1 angkasa.net.id, 1 anglais-angouleme.com, 1 anglarsports.com, 1 @@ -11261,7 +11265,7 @@ anthonycarbonaro.com, 0 anthonychampagne.fr, 1 anthonychampagne.me, 1 anthonydegrande.tk, 1 -anthonyellis.com, 1 +anthonyellis.com, 0 anthonyfontanez.com, 1 anthonygaidot.fr, 1 anthonylaberge.tk, 1 @@ -11270,6 +11274,7 @@ anthonymineo.com, 0 anthonytimbers.com, 1 anthonytutorials.tk, 1 anthonyvadala.me, 1 +anthro.asia, 1 anthro.icu, 1 anthrocon.com, 1 anthrocon.net, 1 @@ -11591,7 +11596,6 @@ apercloud.es, 1 aperioadvice.ga, 1 aperiomoney.ga, 1 aperiotaxation.ga, 1 -apert.be, 1 aperta.ro, 1 aperta.shop, 1 apertis.org, 0 @@ -12206,7 +12210,6 @@ archimedesconsult.com, 1 archimedicx.com, 1 archina.ir, 1 archined.nl, 1 -archipaedia.org, 1 archispace.com.cn, 1 archit.in, 1 architect-cassiman.be, 1 @@ -15151,7 +15154,6 @@ azredistricting.gov, 1 azrhymes.com, 1 azs-nw.ru, 1 azsalud.gov, 1 -azsec.biz, 1 azsgeniedev.azurewebsites.net, 1 azso.pro, 1 azsupport.com, 1 @@ -16074,6 +16076,7 @@ bank-yahav.co.il, 1 bank.barclays.co.uk, 1 banka.space, 0 bankanswers.gov, 1 +bankassafa.com, 1 bankasubeleri.tk, 1 bankbranchlocator.com, 1 bankcardoffer.com, 1 @@ -16236,7 +16239,6 @@ bardtech.com, 1 bardziejkochani.pl, 1 barefoodinrome.it, 1 barelias.tk, 1 -barentsz.co, 1 barer.me, 1 baresquare.com, 1 bargaindentistsers.ga, 1 @@ -16794,7 +16796,6 @@ bdsmwiki.hu, 1 bdsu-connect.de, 1 bdsu-kongress.de, 1 bdsu.de, 1 -bdt001.com, 1 bdtc.com.bd, 1 bdtd.nl, 1 bdtechnews.tk, 1 @@ -16975,6 +16976,7 @@ beautyisfine.tk, 1 beautykiss.com, 1 beautylookz.nl, 1 beautymadel.de, 1 +beautyplace-buxtehude.de, 1 beautyschool.od.ua, 1 beautyseasons.ru, 1 beautyspot.tk, 1 @@ -17192,6 +17194,7 @@ bejo.by, 0 bejo.cl, 0 bejo.cn, 0 bejo.com, 0 +bejo.com.au, 0 bejo.com.br, 0 bejo.com.mx, 0 bejo.cz, 0 @@ -17206,6 +17209,7 @@ bejo.pt, 0 bejo.ro, 0 bejo.ru, 0 bejo.sk, 0 +bejo.ua, 0 bejo.vn, 0 bejoandes.cl, 0 bejogt.com, 0 @@ -17738,6 +17742,7 @@ besiktasmtsk.com, 1 besnard.me, 1 besnik.de, 0 besnik.tk, 1 +besola.de, 1 besole.ch, 1 besolov.tk, 1 besox.be, 1 @@ -17790,7 +17795,6 @@ best66.me, 1 besta.tk, 1 bestaction.tk, 1 bestafricaradio.tk, 1 -bestappliancedoctor.com, 1 bestarts.tk, 1 bestasquadradas.org, 1 bestatos.com, 1 @@ -18049,6 +18053,7 @@ bestpornclip.com, 1 bestporngirls.com, 1 bestpracticesblog.com, 1 bestproductsaudit.com, 1 +bestprofessionalchainsaw.com, 1 bestreleases.tk, 1 bestremote.io, 1 bestroofinginkansascity.com, 1 @@ -19071,7 +19076,6 @@ bio-place.com, 1 bio-verzeichnis.de, 1 bio24.si, 0 bioadva.com, 1 -bioamtw.com, 1 bioarchlinux.org, 1 bioaufvorrat.de, 1 bioblog.tk, 1 @@ -19140,6 +19144,7 @@ bioligo.ch, 0 biolika.ua, 1 biolmarket.ru, 1 biologiaygeologia.tk, 1 +biologie-seite.de, 1 biologis.ch, 1 biologo.club, 1 biology-colleges.com, 1 @@ -19613,6 +19618,7 @@ bkentertainments.co.uk, 1 bkgatl.com, 1 bkhonnun.is, 1 bkhpilates.co.uk, 1 +bkkf.at, 1 bkkposn.com, 1 bkl-ca-qa-employeeapp.azurewebsites.net, 1 bklaindia.com, 1 @@ -19849,7 +19855,6 @@ blasorchester-runkel.de, 1 blastentertainment.co.nz, 1 blastentertainment.com.au, 1 blastersklan.com, 1 -blastertag.com.ua, 1 blastoffbuisness.in, 1 blastofftherapy.com, 1 blastoise186.co.uk, 1 @@ -19905,7 +19910,6 @@ blender.io, 1 blenderinsider.com, 1 blenderrecipereviews.com, 1 blenderwallet.io, 1 -blendessencial.com, 1 blending.kr, 1 blendle.com, 1 blendle.nl, 1 @@ -19986,7 +19990,6 @@ blizko.tk, 1 blizora.com, 1 blk-booking.com, 1 blk-lunch.com, 1 -blk.me, 1 blkbx.eu, 1 blkj.com, 1 bllb.ru, 0 @@ -20004,7 +20007,6 @@ block-this.com, 1 block65.com, 1 blockchain.com, 1 blockchain.info, 1 -blockchain.poker, 1 blockchainaiintegra.com, 1 blockchainbulteni.com.tr, 1 blockchaindaigakko.jp, 1 @@ -20714,7 +20716,6 @@ bonsaiclubsanvi.tk, 1 bonsaimedia.nl, 1 bonsaitree.tv, 1 bonsaj.tk, 1 -bonsi.net, 0 bonte.tk, 1 bonukset.cf, 1 bonukset.tk, 1 @@ -20730,7 +20731,7 @@ bonvorur.is, 1 boo, 1 boodmo.com, 1 boof.com, 0 -boogboi.club, 1 +boogboi.club, 0 boogiedown.tk, 1 boogschutters-perk.tk, 1 boojiboysbasement.tk, 1 @@ -20792,6 +20793,7 @@ booldamm.llc, 1 boombangcreditos.tk, 1 boomboomboat.com, 1 boomerangworkouts.com, 1 +boomersclub.com.au, 1 boomersurf.com, 1 boomfestival.org, 1 boomgamer.ru, 1 @@ -20831,9 +20833,9 @@ boostitco.com, 1 boostplm.com, 1 boostport.com, 1 boostport.com.au, 1 +boostrpro.pl, 1 boostsafety.com, 1 boostup.ai, 1 -booter.es, 1 booths.cyou, 1 bootlesshacker.com, 1 bootmint.com, 1 @@ -20872,6 +20874,7 @@ borderless360.com, 1 borderzoo.tk, 1 bordes.com.ar, 1 bordes.me, 1 +bordo.com.au, 1 bordoeurope.com, 1 borduurcadeau.tk, 1 borduurpatronen.tk, 1 @@ -21499,6 +21502,7 @@ bravodeal.com, 1 bravodescuento.es, 1 bravogutschein.at, 1 bravogutschein.de, 1 +bravokorting.nl, 1 bravokupony.pl, 1 bravopromo.be, 1 bravopromo.fr, 1 @@ -23375,7 +23379,7 @@ c-g-h.net, 1 c-ma-copro.com, 1 c-netsys.fr, 1 c-ovidiu.tk, 1 -c-resource.tech, 1 +c-resource.tech, 0 c-rpg.eu, 1 c-rtx.com, 1 c-sagaseru.com, 1 @@ -23613,7 +23617,6 @@ cafecentraal.tk, 1 cafecentral.tk, 1 cafechesscourt.com, 1 cafechroma.tk, 1 -cafecliche.com, 1 cafecobus.tk, 1 cafedelcielo.co, 1 cafedesignbooks.com, 1 @@ -24281,6 +24284,7 @@ caodecristachines.com.br, 0 caodesantohumberto.com.br, 1 caos.ch, 1 caostura.com, 1 +caosudautieng.com.vn, 1 cap73.fr, 1 capa.digital, 1 capachitos.cl, 0 @@ -24387,7 +24391,6 @@ captalize.com, 1 captivationscience.com, 1 captivationtheory.com, 1 capturapp.com, 0 -capture-app.com, 1 capturebilling.com, 1 captured-symphonies.com, 1 capturelead.tk, 1 @@ -25420,7 +25423,6 @@ cbdlession.com, 1 cbdmarket.space, 1 cbdoilcures.co, 1 cbdtelegram.com, 1 -cbdvillage.co.uk, 1 cbecrft.net, 1 cbflleida.cat, 1 cbh.org, 1 @@ -25869,7 +25871,6 @@ centurylink.cf, 1 centurymedicaldental.com, 1 ceomonthlyest.ga, 1 ceopedia.org, 1 -cepapk.com, 0 cepek4d.com, 1 cephalexin.ga, 1 cephalexincapsules.ml, 1 @@ -25966,6 +25967,7 @@ cervera.com.br, 1 ces-ltd.co.uk, 0 cesantias.co, 0 cesar-hector.tk, 1 +cesarparedespacora.com, 1 cesarpinto.com, 1 cesarteixeiraimoveis.com.br, 1 cesboard.com, 1 @@ -26000,6 +26002,7 @@ cevo.com.hr, 1 cevt.ar, 1 cewek.ml, 1 cewood.xyz, 1 +ceyhanmolla.com, 1 ceyizlikelisleri.com, 1 cezdent.com, 1 cf-connect.nl, 1 @@ -26615,7 +26618,7 @@ chemicalcrux.org, 1 chemicalguys-ruhrpott.de, 1 chemicalpharm.com, 1 chemicalromance.tk, 1 -chemie-schule.de, 1 +chemie-schule.de, 0 chemiphys.com, 0 chemistry-schools.com, 1 chemolak.pl, 1 @@ -27567,7 +27570,7 @@ cisa.gov, 1 cisamexico.com, 1 ciscoasanetflow.com, 1 ciscocyberthreatdefense.com, 1 -ciscodude.net, 0 +ciscodude.net, 1 ciscom.tk, 1 cisconetflowleader.com, 1 cisconetflowpartners.com, 1 @@ -27629,6 +27632,7 @@ citizensleague.org, 1 citizing.org, 1 citos.ga, 1 citoyen.eu, 1 +citroenc3owners.com, 1 citrusbocc.gov, 1 citruscounty.gov, 1 citruspi.com, 1 @@ -28010,6 +28014,7 @@ claudiney.eti.br, 1 claudiney.id, 1 claudiney.info, 1 claudiohdz.com, 1 +claumarservice.com, 1 claus-bahr.de, 1 claus-cremer.tk, 1 clauseriksen.net, 1 @@ -28476,7 +28481,9 @@ cloudscribe.com, 1 cloudse.co.uk, 1 cloudsec.tk, 1 cloudsecurityalliance-europe.org, 1 +cloudsecurityalliance.ca, 1 cloudsecurityalliance.cloud, 1 +cloudsecurityalliance.cn, 1 cloudsecurityalliance.com, 1 cloudsecurityalliance.info, 1 cloudsecurityalliance.net, 1 @@ -28542,7 +28549,6 @@ clown-clan.tk, 1 clownish.co.il, 1 cloxy.com, 1 cloze.com, 1 -clpoule.nl, 1 clr3.com, 1 cls.im, 1 clsimage.com, 1 @@ -28751,7 +28757,6 @@ cnpkg.org, 1 cnpy.gdn, 1 cnre.eu, 1 cnss.gob.do, 1 -cnss.io, 1 cntraveller.com, 1 cnvt.fr, 1 co-founder-stuttgart.de, 1 @@ -28843,7 +28848,6 @@ cocobrother.ddnss.de, 1 cocodroid.com, 0 cocokmobi.ga, 1 cocolink.jp, 1 -cocoloco.co.nz, 1 cocomelody.co.za, 1 cocomelody.com, 0 cocomelody.de, 1 @@ -29291,7 +29295,9 @@ colocolochile.tk, 1 cololi.moe, 1 colombiahoy.news, 1 colombiajeans.co, 1 +colombian.cam, 1 colombian.dating, 1 +colombianas.webcam, 1 colombiasobreruedas.com, 1 colombyinai.ga, 1 coloniae.de, 1 @@ -29439,6 +29445,7 @@ comfy.cafe, 0 comfy.gay, 1 comfypc.com, 1 comhack.com, 1 +comic-kunstbilder.de, 1 comical.ml, 1 comicsans.tk, 1 comicsanshouse.ddns.net, 1 @@ -29449,6 +29456,7 @@ comicspornoxxx.com, 1 comicstrove.com, 1 comicsymanga.com, 1 comicwiki.dk, 1 +comicyears.com, 1 comidina.com, 1 comingto.icu, 1 comiq.io, 1 @@ -29628,6 +29636,7 @@ compliancebox.co, 1 compliancedictionary.com, 1 compliancerisksoftware.co.uk, 1 compliment.cf, 1 +compliq.se, 1 complt.xyz, 1 complyadvantage.com, 1 componentcore.com, 1 @@ -29812,7 +29821,6 @@ condonescadistas.tk, 1 condonline.app.br, 1 condosforcash.com, 1 condroz-motors.be, 0 -coneall.com, 1 conectada.tk, 1 conectadev.com, 1 conectumfinanse.pl, 1 @@ -29954,7 +29962,6 @@ conoha.vip, 1 conorboyd.info, 1 conory.com, 1 conotoxia.com, 1 -conpath.net, 1 conpins.nl, 1 conpsy.ro, 1 conpulpademanzana.es, 1 @@ -30158,7 +30165,6 @@ contro.ga, 1 contro.gq, 1 contro.ml, 1 contro.tk, 1 -controladores.net, 1 controlautocom.com.br, 1 controlbooth.com, 1 controle-exportations.fr, 1 @@ -30777,6 +30783,7 @@ covid19responsepod.com, 1 covid19scotland.co.uk, 0 covid19statstracker.com, 1 covidcoldfacts.com, 1 +coviddiary.live, 1 coviddrawings.org.uk, 1 covidfreeathome.org, 1 covidinfo.com.br, 1 @@ -31085,6 +31092,7 @@ createbeauty.tk, 1 createbeing.com, 1 createbot.ml, 1 createcode.pt, 1 +createconline.de, 1 createcos.com, 1 createcpanama.com, 1 creategyx.ga, 1 @@ -31446,7 +31454,6 @@ crsoresina.it, 1 crsserviceogkloak.dk, 1 crstat.ru, 1 crsujind.org, 1 -crt.cloud, 1 crt.sh, 1 crt2014-2024review.gov, 1 crtalleres.com, 1 @@ -31865,10 +31872,10 @@ cubyhome.com, 1 cucabot.tk, 1 cucaracha.tk, 1 cuchichi.es, 1 -cuckold-secrets.tk, 1 cuckoldjungle.com, 1 cuckoo.ee, 1 cuddlecat.io, 1 +cuddlecomfort.com, 1 cuddlingyaks.com, 1 cuddlybeardaycare.com.au, 1 cudesa.gq, 1 @@ -32154,7 +32161,6 @@ cvalda.tk, 1 cvbp.nl, 1 cvc.digital, 1 cvdeexpo.com, 1 -cvdesigner.lk, 1 cve-le-carrousel.ch, 0 cve.sh, 1 cvec.org, 1 @@ -32826,7 +32832,6 @@ dallastexas.ml, 1 dallaswater.gov, 1 dallaswestinternational.ga, 1 dallatana.tk, 1 -dallemon.dk, 1 dalliard.ch, 1 dalliastore.com.br, 1 dallinbryce.com, 1 @@ -32835,6 +32840,7 @@ dalmatians.tk, 1 daltoncraven.com, 1 daltonohio.gov, 1 daltons.tk, 1 +dalux.com, 0 damadam.pk, 1 damag.net, 1 damaged.org, 1 @@ -32926,6 +32932,7 @@ dandie.tk, 1 danduran.ca, 1 dandymodz.tk, 1 dandymrsb.com, 1 +daneiakartes.info, 0 danelska.pl, 1 danelski.pl, 1 daneshtools.tk, 1 @@ -33417,7 +33424,6 @@ dataloft.tk, 1 datalysis.ch, 0 dataman.ml, 1 datamatic.ru, 1 -datapathology.ma, 1 datapiped.com, 1 dataprivacysolution.com, 1 datapun.ch, 1 @@ -33467,6 +33473,7 @@ datenreiter.gq, 1 datenreiter.org, 1 datenretter.tk, 1 datensalat.info, 1 +datenschutz-consult.de, 1 datenschutz-gruenwald.de, 1 datenschutz-individuell.de, 1 datenschutz-isny.de, 1 @@ -33745,7 +33752,6 @@ dbas.cz, 1 dbase.cf, 1 dbb.wtf, 1 dbcartography.com, 1 -dbdc.co.za, 1 dbeilharz.com, 1 dbeilharz.de, 1 dbeilharz.eu, 1 @@ -35216,7 +35222,6 @@ devries.one, 1 devrim.io, 1 devs-from.asia, 1 devs.host, 1 -devs.icu, 1 devs.men, 1 devs4.com, 1 devsectools.com, 1 @@ -36587,7 +36592,6 @@ djfilms.tk, 1 djfrenchy.com, 1 djfunkyju.de, 1 djgarcia.tk, 1 -djhardy.co.uk, 1 djharun.tk, 1 djhooligan.tk, 1 djhouse.tk, 1 @@ -37083,6 +37087,7 @@ doesinfotech.com, 1 doesmycodehavebugs.today, 1 doetwat.nl, 1 dofashion.tk, 1 +dofedex.com, 1 dofus-aide.tk, 1 dofus.market, 1 dofuspvp.com, 0 @@ -37171,6 +37176,7 @@ dojocasts.com, 1 dojodigital.co.uk, 1 dojozendebourges.fr, 1 dokanline.com, 1 +dokasen.com, 1 dokcar.com.br, 1 dokee.cn, 1 dokelio-idf.fr, 1 @@ -37179,6 +37185,7 @@ doklinik.com, 1 dokonline.tk, 1 dokspot.cf, 1 dokspot.ga, 1 +doktererectie.com, 1 doktorplyusheva.ml, 1 doku-gilde.de, 1 dokuboard.com, 1 @@ -37571,6 +37578,7 @@ doreyaromatherapy.com, 1 dorfbrunnen.eu, 1 dorfkultur.net, 1 dorfpark-falkenburg.de, 1 +dorfrock.com, 1 dorfzittig.de, 1 doriangardes.fr, 1 doriangirod.ch, 0 @@ -37591,7 +37599,6 @@ dormitengernyikaland.hu, 1 dormiu.com, 1 dormiu.com.br, 1 dormkitty.com, 1 -dornhecker.me, 1 dornikaweb.com, 1 dorogaminina.tk, 1 dorpshuis-dwarsgracht.nl, 1 @@ -38783,6 +38790,7 @@ dunkle-seite.org, 1 dunlaptn.gov, 1 dunmanelectric.com, 1 dunmanpoolandspa.com, 1 +dunneworthy.com, 1 dunningtonaudio.co.uk, 1 dunyahalleri.com, 1 duo-tauceti.com, 1 @@ -39655,6 +39663,7 @@ eaglexiang.org, 0 eagleyecs.com, 1 eaimty.com, 1 eainjurycenter.com, 1 +eajglobal.net, 1 ealadel.com, 1 ealekseyev.ml, 1 ealev.de, 1 @@ -39918,7 +39927,6 @@ ebjork.se, 1 ebki-nsn.gov, 1 eblan.gq, 1 eblog.cf, 1 -eblog.ink, 1 ebola-hosting.cz, 1 ebolacharts.ga, 1 ebolavirus.tk, 1 @@ -40359,6 +40367,7 @@ educa2.es, 1 educabis.tk, 1 educacionnm.ml, 1 educacionvirtual.com.ar, 1 +educaenvivo.com, 1 educaestado.com, 1 educampus.cl, 1 educanada.in, 1 @@ -41388,6 +41397,7 @@ elinternadolagunanegra.tk, 1 eliolita.com, 1 eliott.cc, 1 eliottlavier.com, 1 +eliquid-manufaktur.de, 1 elisa.ee, 0 elisabeth-kostecki.de, 1 elisabeth-raendel.de, 1 @@ -41583,7 +41593,6 @@ elreportero.net, 1 elreportero.tk, 1 elri.blog, 1 elrincondelotaku.tk, 1 -elrincondeltrabajo.com, 0 elrinconderovica.com, 1 elron.ee, 0 elrond.com, 1 @@ -41836,7 +41845,6 @@ emissionssafe.org, 1 emita.ee, 1 emivauthey.com, 0 emkanrecords.com, 0 -emkei.cz, 1 emkode.pl, 1 emkrivoy.com, 1 emlakvar.com, 1 @@ -41942,6 +41950,7 @@ emporioarchitect.com, 1 emporiodosperfumes.com.br, 1 emporioonline.com.br, 1 emporiopurochile.com.br, 1 +empoweraces.com, 1 empowerdb.com, 1 empoweren.com, 1 empowernation.org, 1 @@ -42357,6 +42366,7 @@ enlnf.link, 1 enloestatebank.com, 1 enlyft.com, 0 enmieux.be, 1 +enmowe.tech, 0 enno.mom, 1 ennori.jp, 1 ennova.com, 1 @@ -42522,7 +42532,6 @@ enwillyado.tk, 1 enxadahost.com, 1 enzofardone.ga, 1 enzosoares.com, 1 -enzyme-sensor.net, 1 eo-literaturo.tk, 1 eocservices.co.uk, 1 eod.su, 1 @@ -42759,7 +42768,6 @@ erbt.tk, 1 erciyesspor.tk, 1 erclab.kr, 1 erclaim.com, 1 -ercnationwide.com, 1 erctra.com, 1 erda.gov, 1 erdekesseg.com, 1 @@ -43348,7 +43356,6 @@ estudiarparaser.com, 1 estudiaryaprenderingles.com, 1 estudiemosvirtualmente.com, 1 estudio21pattern.com, 0 -estudioaguiar.com.br, 1 estudiogarcia-rada.com, 1 estudiomantis.tk, 1 estudionale.com, 0 @@ -43392,7 +43399,6 @@ etaoinwu.com, 1 etaoinwu.win, 1 etath.com, 1 etaxigraz.com, 1 -etazapzap.cyou, 1 etccooperative.org, 0 etch.co, 1 etch44.com, 1 @@ -43997,6 +44003,7 @@ evolutionpets.com, 1 evolutive-records.tk, 1 evoluzione.fr, 1 evolvedevlabs.de, 1 +evolvetechnologies.co.uk, 1 evolvicity.org, 1 evolvingsouls.com, 1 evolvingthoughts.net, 1 @@ -45709,7 +45716,7 @@ fcg.fyi, 1 fcgmd.gov, 1 fcic.gov, 1 fcijobportalodisha.com, 1 -fcingolstadt.de, 1 +fcingolstadt.de, 0 fcit-tems.org, 1 fcitasc.com, 1 fcl.guru, 1 @@ -46329,7 +46336,6 @@ fieggen.net, 1 fiekeoffringa.nl, 1 fieldsgynroboticsurgery.com, 1 fienaliri.tk, 1 -fierce-escarpment-59441.herokuapp.com, 1 fierman.eu, 0 fierman.net, 0 fierman.us, 0 @@ -46396,7 +46402,6 @@ fijnefeestdageneneengelukkignieuwjaar.nl, 1 fijnewoensdag.nl, 1 fika.com.vn, 1 fikaauto.com, 1 -fikain.com, 1 fiken.no, 1 fikirtasarim.net, 1 fikong.com, 1 @@ -46745,6 +46750,7 @@ firebirdrangecookers.com, 1 firebounty.com, 1 fireboxfood.com, 1 firebrandchurch.com, 1 +firebugmusic.com, 1 firecask.com, 1 firechip.cc, 1 firechip.srl, 1 @@ -46955,7 +46961,7 @@ fitkram.cz, 1 fitleads.nl, 1 fitmeat.at, 1 fitmommyinheels.com, 1 -fitmybike.eu, 1 +fitmybike.eu, 0 fitness-challenge.co.uk, 1 fitness-world.ga, 1 fitness.gov, 1 @@ -47519,6 +47525,7 @@ flowscale.com, 1 flowstars.tk, 1 flowstudios.com, 1 flowtex.tk, 1 +flowyapi-dev.azurewebsites.net, 1 flowyapp-dev.azurewebsites.net, 1 flox.io, 1 floydcountyga.gov, 1 @@ -47585,7 +47592,6 @@ flybis.net, 1 flyboarder.tk, 1 flyboyfpv.com, 1 flycheaps.com, 1 -flycoo.net, 0 flydoc.org, 1 flyeagle.com.br, 1 flyer.tools, 1 @@ -48151,6 +48157,7 @@ formforger.com, 1 formhub.ru, 1 formi9.com, 1 formingequipment.tk, 1 +formini.dz, 1 formio.nl, 1 formodernkids.com, 1 formommiesbymommy.com, 1 @@ -48167,7 +48174,6 @@ formulacionquimica.com, 1 formulastudent.de, 1 formulaveevictoria.com.au, 1 formup.com.pl, 1 -formvibes.com, 1 fornarisandres.com, 1 fornata.it, 1 foro-coopfuture.tk, 1 @@ -48389,6 +48395,7 @@ fotografies.tk, 1 fotografija.tk, 1 fotografoivanalmeida.com.br, 1 fotohiking.com, 1 +fotohome.dk, 1 fotojenico.com, 1 fotokomorkomania.pl, 1 fotokorner.com, 1 @@ -48551,7 +48558,7 @@ fracreazioni.it, 1 fractieplanner.nl, 1 fractionalciso.com, 1 fracturedfx.com, 1 -fracturedperspective.com, 0 +fracturedperspective.com, 1 fragara.com, 1 fragclub.tk, 1 fragdenstaat.de, 1 @@ -49513,6 +49520,7 @@ ftgeufyihreufheriofeuozirgrgd.tk, 1 ftgho.com, 1 fthat.link, 1 ftl-gaming.tk, 1 +ftl13.com, 1 ftm.wiki, 1 ftmc.tk, 1 ftmwiki.com, 1 @@ -50330,7 +50338,6 @@ galaxus.fr, 1 galaxy.edu.pe, 1 galaxyeuropemusic.com, 1 galaxymedia.tk, 1 -galaxymusicpromo.com, 1 galaxyplex.tk, 1 galaxyscientific.com, 1 galaxystaking.space, 1 @@ -50915,6 +50922,7 @@ gazette365.com, 1 gazizov.tk, 1 gazoakley.com, 1 gazobeton-don.ru, 1 +gazoneo.fr, 1 gazor.tk, 1 gazoz.ga, 1 gazza.tk, 1 @@ -51529,6 +51537,7 @@ georgewatson.me, 1 georgewbushlibrary.gov, 1 georgiaaccess.gov, 1 georgiaautoglass.net, 1 +georgiabonepc.com, 1 georgiacriminaldefense.com, 1 georgiaglassrepair.com, 1 georgiainfo.ga, 1 @@ -51752,6 +51761,7 @@ gethdporn.com, 1 gethere.gq, 1 gethome.ru, 1 gethost.co.zw, 1 +gethttpsforfree.com, 1 gethyas.com, 1 geti2p.com, 1 getidmcc.com, 1 @@ -51765,7 +51775,6 @@ getitlive.de, 1 getitpeople.com, 1 getjadedlocal.com, 1 getjms.com, 1 -getjobtoday.net, 0 getlantern.org, 0 getlawnbuddy.com, 1 getlawyered.com.au, 1 @@ -51809,6 +51818,7 @@ getresilience.org, 1 getsamegoal.com, 1 getscif.com, 1 getsecure.nl, 1 +getserm.com, 1 getserum.xyz, 1 getsession.org, 1 getsetbounce.co.uk, 1 @@ -52070,7 +52080,6 @@ giftcard.net, 1 giftcardgranny.com, 1 giftcardstarz.com, 1 giftedconsortium.com, 1 -giftedhealthcare.com, 1 giftedmindies.art, 1 giftedmodels.com, 1 giftex.cz, 1 @@ -52534,7 +52543,6 @@ globalconsulting.ml, 1 globaldataline.ml, 1 globaldefensa.tk, 1 globaldestruction.tk, 1 -globaleducationservices.net, 1 globalenergyinterconnection.com, 0 globalentertainment.ga, 1 globalepsilon.com, 1 @@ -52811,7 +52819,6 @@ goatbot.xyz, 1 goathub.io, 1 goatlord.tk, 1 goatstore.ca, 1 -goaudits.com, 1 gobarrelroll.com, 1 gobetweenfilms.com, 1 gobeyondtheimpossible.com, 1 @@ -53743,6 +53750,7 @@ grattan.co.uk, 1 grattecenne.com, 1 gratuitweb.tk, 1 graumeier.de, 1 +grauwasser-blog.de, 1 gravedad-zero.tk, 1 gravedigger.tk, 1 gravelshooters.com, 1 @@ -54088,7 +54096,6 @@ griendencollege.tk, 1 grienenberger.eu, 1 griesser2.de, 1 griffinsrfc.tk, 1 -griffioenconsulting.com, 1 griffithobservatory.org, 1 griffophotography.tk, 1 grifomarchetti.com, 0 @@ -54405,7 +54412,6 @@ gsmpreview.com, 1 gsmsale.nl, 1 gsmtool.tk, 1 gsmvermist.tk, 1 -gsoc.se, 1 gsp.com, 1 gspcreations.com, 1 gspilar.tk, 1 @@ -54713,6 +54719,7 @@ gustarfsberg.cf, 1 gustarfsberg.ga, 1 gustarfsberg.gq, 1 gustarfsberg.tk, 1 +gustavapp.com, 1 gustavo-lima.ml, 1 gustavo.website, 1 gustavomolina.com, 1 @@ -55225,11 +55232,9 @@ hakkariradyo.tk, 1 hakkasan.com, 1 hakkasannightclub.com, 1 hakon.lol, 1 -haku.farm, 1 haku.vn, 1 hakufarm.vn, 1 hakugin.me, 1 -hakuna.live, 1 hal-9th.space, 1 hal52.nl, 1 halacs.hu, 1 @@ -55502,6 +55507,7 @@ hant.se, 1 hantera.fi, 1 hantse.com, 1 hanxv.pw, 1 +hanyingw.com, 1 hanys.xyz, 1 hanzcollection.online, 1 hanzubon.jp, 1 @@ -56496,6 +56502,7 @@ healtmainwp.tk, 1 healtyersworld.tk, 1 heanbian.com, 1 heap.zone, 1 +heapsofheaven.com, 1 heardcountyathletics.com, 1 hearfool.cc, 1 hearingshofar.com, 1 @@ -56654,7 +56661,6 @@ heiden-wir-helfen.de, 1 heidifuller.com, 1 heidihills.com, 1 heidirange.tk, 1 -heidisheroes.org, 1 heidiwoodgate.com, 1 heidns.cn, 1 heighton.com.au, 1 @@ -57367,7 +57373,6 @@ hifly.aero, 1 hifly.com.tw, 1 hifrds.com, 1 hifrnds.in, 1 -hifumi.us, 1 hig.gov, 1 higgsboson.tk, 1 high-flying.co.uk, 1 @@ -57763,6 +57768,7 @@ hkl-gruppe.de, 1 hklbgd.org, 1 hkmap.co, 1 hkmap.com, 1 +hkmap.live, 1 hkmap.net, 1 hkno.it, 1 hkr.at, 1 @@ -57893,7 +57899,7 @@ hocoma.net, 1 hocoma.org, 1 hoctienganhgiaotiep.ga, 1 hoctracnghiem.com, 1 -hocz.net, 0 +hocz.net, 1 hodeis.ga, 1 hodes.tk, 1 hodgeman.gov, 1 @@ -58070,6 +58076,7 @@ holytransaction.com, 1 holyubofficial.net, 1 holywhite.com, 1 holywr.it, 1 +holz.nu, 1 holzed.com, 1 holzschutz-holzbearbeitung.de, 1 holzspielzeug-shop.ch, 1 @@ -58760,7 +58767,7 @@ hotel-rosner.at, 1 hotel-rosskopf.it, 1 hotel-selva-gardena.net, 1 hotel-siret.ro, 1 -hotel-teresa.com, 1 +hotel-teresa.com, 0 hotel-valgardena.net, 1 hotel-vipiteno.net, 1 hotel-waldheim.eu, 1 @@ -58903,7 +58910,6 @@ household-appliances.tk, 1 householdheroes.com.au, 1 householdjournalers.ga, 1 householdjournalest.ga, 1 -householdofmercy.org, 1 houseinfonews.tk, 1 housekeeperlondon.co.uk, 1 houselocal.co.uk, 1 @@ -59738,6 +59744,7 @@ hypetrix.com, 1 hypevents.net, 1 hyphen.co.za, 1 hyphenpda.co.za, 1 +hypixelstudios.com, 1 hypno-thera.fr, 1 hypnobb.com, 1 hypnos.hu, 1 @@ -59850,7 +59857,6 @@ i4net.eu, 1 i4ware.fi, 1 i51365.com, 1 i5197.co, 1 -i5i5i58.com, 1 i5y.co.uk, 1 i5y.org, 1 i6729.co, 1 @@ -60062,7 +60068,7 @@ icecreamandclara.co.uk, 1 icecreamika.tk, 1 icecutethings.com, 1 icedox.ga, 1 -icedream.tech, 1 +icedream.tech, 0 icedterminal.com, 1 icedterminal.me, 1 icedude.tk, 1 @@ -60449,7 +60455,6 @@ iforced.net, 1 iformbuilder.com, 0 ifort.fr, 1 ifosep.fr, 0 -ifoss.me, 1 iframefinancement.be, 1 ifreemax.ml, 1 ifreetion.cn, 1 @@ -60664,7 +60669,6 @@ ikall.net, 1 ikall.org, 1 ikama.cz, 1 ikari-san.tk, 1 -ikaria.com.gr, 1 ikaros.tk, 1 ikasgela.com, 1 ikazumitsu.tk, 1 @@ -60835,6 +60839,7 @@ ilmiogiardiniere.it, 1 iloft.xyz, 1 iloli.name, 1 ilona-france.tk, 1 +ilona.graphics, 1 ilonajewelry.com, 1 ilondres.es, 1 ilonewolfs.com, 1 @@ -60943,7 +60948,6 @@ imamenu.com, 1 imanageproducts.co.uk, 1 imanageproducts.com, 1 imanageproducts.uk, 1 -imaneferiani.art, 1 imanna.ru, 1 imanolbarba.net, 1 imanoles.ddns.net, 1 @@ -61690,7 +61694,6 @@ infomeddnews.com, 1 infomexico.tk, 1 infomir.eu, 1 infomoney.com.br, 1 -infonova.com.br, 1 infopaperiguatemi.com.br, 1 infopedia.tk, 1 infopico.com, 1 @@ -61712,7 +61715,6 @@ informat.ga, 1 informaticapremium.com, 0 informaticien.tk, 1 informaticmousset.tk, 1 -informatico.pt, 1 informaticoalicante.tk, 1 informaticolamancha.tk, 1 informatiger.net, 1 @@ -61994,6 +61996,7 @@ inmoterrenas.com, 1 inmotionmktg.com, 1 inmucrom.com, 1 inmucrom.es, 1 +inmueblescartagena.com.co, 1 inmuseworld.tk, 1 inmusicfestival.com, 1 inmyhead.tk, 1 @@ -62474,7 +62477,6 @@ internalkmc.com, 1 internally.ga, 1 international-arbitration-attorney.com, 1 international-books.org, 1 -international-friends.net, 1 international-genealogy-services.com, 1 internationalbussines.tk, 1 internationalfashionjobs.com, 1 @@ -62673,7 +62675,6 @@ inventoryimages.co.uk, 1 inventos.tk, 1 inventtheworld.com.au, 1 inventum.cloud, 1 -inventum.es, 1 inverness.gov, 1 inversegravity.net, 1 inverselink-user-content.com, 1 @@ -63556,7 +63557,6 @@ it-zt.at, 1 it.com.eg, 0 it.search.yahoo.com, 0 it1b.com, 1 -it4sure.nl, 1 it76.tk, 1 it82.com, 1 it9.bar, 1 @@ -63875,7 +63875,6 @@ ivermectin.gq, 1 ivetazivot.cz, 1 ivetdata.com, 0 ivetebolos.com.br, 1 -ivf114.com, 1 ivfausland.de, 1 ivi.cx, 1 ivifashion.tk, 1 @@ -63951,6 +63950,7 @@ iwtsd.gov, 1 iww.me, 1 iww.mx, 1 iww.org.nz, 1 +ix.run, 1 ix8.ru, 0 ixiatiao.com, 1 ixit.cz, 1 @@ -64011,7 +64011,6 @@ izntz.com, 1 izodiacsigns.com, 1 izolyatsia.org, 1 izone.ua, 1 -izstore.net, 1 izttech.com, 1 izuba.info, 0 izumi-hirodental.com, 1 @@ -64092,7 +64091,6 @@ j95zz.com, 0 j9721.com, 1 j9728.co, 1 j9s.de, 1 -ja-gps.com.au, 1 ja-hypnose.de, 1 ja-jirei-ienohikari.com, 1 ja-no-me.ru, 1 @@ -64524,7 +64522,6 @@ japannext.co.jp, 1 japanphilosophy.com, 0 japanroll.cf, 1 japansepuzzel.tk, 1 -japansm.com, 1 japantravel.tk, 1 japanwatches.xyz, 1 jape.today, 1 @@ -64577,6 +64574,7 @@ jarroba.com, 1 jarrods.tech, 1 jarsater.com, 0 jarski.eu, 1 +jas-ac.com, 1 jas-team.net, 1 jasawebbisnis.com, 0 jasch.tk, 1 @@ -65204,7 +65202,6 @@ jewelleryoutlook.com, 1 jewelleryrack.com, 1 jewelry-directories.tk, 1 jewelrycoverers.ga, 1 -jewishboyscouts.com, 1 jewishinseattle.org, 1 jewishjourneys.org, 1 jewishmusic.tk, 1 @@ -65589,7 +65586,6 @@ jobsknowlgee.tk, 1 jobsmali.ml, 1 jobsmarthasvineyard.com, 1 jobsnearme.london, 1 -jobsocity.com, 0 jobsoid.com, 1 jobsportalbookmarking.tk, 1 jobsuchmaschine.ch, 1 @@ -65919,7 +65915,6 @@ jonslife.tk, 1 jonssheds.direct, 1 jonstar.tk, 1 jony.tk, 1 -jooblis.com, 0 joodari.fi, 1 jooksuratas.ee, 1 jooli.tk, 1 @@ -66637,7 +66632,6 @@ justmyblog.net, 1 justmysocks.tk, 1 justmysocks.xyz, 1 justnajoua.tk, 1 -justnaw.co.uk, 1 justneworleans.com, 1 justninja.com, 1 justnu.se, 0 @@ -67038,7 +67032,6 @@ kai.cool, 0 kaibinyang.com, 1 kaibo.cz, 1 kaibo.eu, 1 -kaibol.com, 1 kaiche.com, 1 kaidoblogi.eu, 1 kaigojj.com, 1 @@ -67251,6 +67244,7 @@ kampunginggris-ue.com, 1 kampusku.tk, 1 kamrad.tk, 1 kamranmirhazar.com, 1 +kamui.co.uk, 1 kamuniang.org, 1 kan-ken.fr, 1 kan.bi, 1 @@ -67338,6 +67332,7 @@ kanz.jp, 1 kanzashi.com, 1 kanzlei-hhh.de, 1 kanzlei-oehler.com, 1 +kanzlei-sixt.de, 1 kanzshop.com, 1 kaohongshu.blog, 1 kaosintesta.tk, 1 @@ -67967,7 +67962,6 @@ keke-shop.ch, 1 kekku.li, 0 kekoskee.gov, 1 keksi.io, 1 -kektime.com, 1 kekz.org, 1 kela.jp, 1 kelamanproduction.tk, 1 @@ -68638,6 +68632,7 @@ kimxxx.org, 1 kin-mail.at, 1 kin-mail.de, 1 kin-mail.net, 1 +kin-to-kin.ca, 0 kin.life, 1 kin.pet, 1 kinaesthetics-begleitung-zuhause.at, 1 @@ -69395,7 +69390,6 @@ kobb.tk, 1 kobejet.com, 1 koberl.com, 1 kobet.tk, 1 -kobevanhecke.be, 1 kobezda.net, 1 kobieta.guru, 1 kobietydokodu.pl, 1 @@ -69520,6 +69514,7 @@ kokoiroworks.com, 1 kokomo.cloud, 1 kokona.ch, 1 kokoroheart.cf, 1 +kokotaj.de, 1 kokotaru.com, 1 kokteili.tk, 1 koktelparty.tk, 1 @@ -70097,6 +70092,7 @@ kreno.tech, 1 krenstetter.at, 1 kreolis.net, 1 kresimir-blazevic.tk, 1 +krestanskydarek.cz, 1 kretaforum.dk, 1 kretschmann.consulting, 1 kreuzbergflieger.de, 1 @@ -70254,6 +70250,7 @@ kryshodel.ml, 1 krystal-framework.ml, 1 krytykawszystkiego.com, 1 krytykawszystkiego.pl, 1 +kryx.de, 1 krzeslaonline.pl, 1 ks-19.com, 1 ks-39.com, 1 @@ -70673,7 +70670,6 @@ kuschku.de, 1 kuscu.de, 1 kushner-cpa.co.il, 1 kushwanthreddy.com, 1 -kushwanthreddy.in, 1 kuslink.tk, 1 kusmuhendisi.com, 1 kusochi.eu, 1 @@ -71399,6 +71395,7 @@ lancerm.com, 1 lanceyip.com, 1 lanchong.tk, 1 lancyvbc.ch, 0 +land-schlachterei-reinke.de, 1 land.nrw, 0 landart.tk, 1 landassessmentservices.com, 1 @@ -71602,7 +71599,7 @@ lapshore.com, 1 laptop-sewamurah.com, 0 laptopnaive.com, 1 laptopnewbie.eu.org, 1 -laptopsperu.com, 0 +laptopsperu.com, 1 laptopuri.tk, 1 laptopworld.dk, 1 lapulgaflamenco.com, 1 @@ -71870,7 +71867,6 @@ laupapk.edu.ee, 1 laura.network, 1 lauraandwill.wedding, 0 laurable.com, 1 -lauracookeconsulting.com, 1 lauraenvoyage.fr, 1 laurahausmann.de, 1 laurainnes.tk, 1 @@ -73054,6 +73050,7 @@ lesquatredauphins.fr, 0 lessavonnables.fr, 1 lessets-graphiques.com, 1 lessiamia.net, 1 +lessing.consulting, 1 lessis.moe, 1 lesspass.com, 1 lestanzedelgattopardo.it, 1 @@ -73298,7 +73295,7 @@ lhakustik.se, 1 lhasaapso.com.br, 1 lhconsult.tk, 0 lheinrich.org, 1 -lhero.org, 1 +lhffinanceira.online, 1 lhost.su, 1 lhp-creation.com, 1 lhp-creation.fr, 1 @@ -73723,6 +73720,7 @@ likemyporn.com, 1 likenewhearing.com.au, 1 likenosis.com, 1 likere.com, 1 +likesforinsta.com, 1 likestudio.com.ua, 1 likewatercs.com, 1 likhner.com, 1 @@ -75468,6 +75466,7 @@ lounge.guide, 1 loungecafe.net, 1 loungecafe.org, 1 lourdesigns.tk, 1 +lourencolar.com, 0 lourissa.tk, 1 loursaint.tk, 1 lousingchaphu.com, 1 @@ -75583,7 +75582,6 @@ lowcarbspark.com, 1 lowcosthost.cf, 1 lowcostivf.net, 1 lowcostwire.com.au, 1 -lowendpay.com, 1 lower-level.tk, 1 lower.nu, 1 lowerchancefordtwppa.gov, 1 @@ -75648,7 +75646,6 @@ lrssystems.com, 1 lrumeq.com, 1 lrv-grobbendonk.tk, 1 ls-alarm.de, 1 -ls-rp.es, 1 lsal.fr, 1 lsal.me, 1 lsbricks.com, 1 @@ -75841,6 +75838,7 @@ ludum-polus.xyz, 1 ludum.pl, 1 ludunwayoo.com, 1 ludwig.im, 1 +ludwiggrill.de, 1 ludwigjohnson.se, 1 ludwigpro.net, 1 luedeke-bremen.eu, 1 @@ -77117,6 +77115,7 @@ makhmudov.net, 1 maki-chan.de, 1 maki.cafe, 1 makilingchallenge.tk, 1 +makingbusinessmatter.co.uk, 0 makingmemoney.cf, 1 makingmemoney.ga, 1 makingmemoney.gq, 1 @@ -77754,6 +77753,7 @@ marcossamerson.com, 1 marcossan.com, 1 marcosteixeira.tk, 1 marcotolk.com, 1 +marcschlagenhauf.de, 0 marcsello.com, 1 marcsferraripage.tk, 1 marcus-scheffler.com, 1 @@ -77890,7 +77890,6 @@ mario-sarto.com, 1 mario.com.ua, 1 mario420.ga, 1 marioabela.com, 1 -marioafonso.com, 1 marioberluchi.by, 0 mariogarcia.tk, 1 mariogasparini.com.br, 1 @@ -78173,6 +78172,7 @@ martian.tk, 1 martide.com, 1 martijnschreuders.tk, 1 martijnvdputten.tk, 1 +martin-burger.net, 1 martin-caslavsky.tk, 1 martin-loewer.de, 1 martin-mattel.com, 1 @@ -78407,6 +78407,7 @@ master-tmb.ru, 1 masteranimal.tk, 1 mastercardpac.com, 1 mastercareplus-demo.com, 1 +mastercareplus-staging.com, 1 mastercareplus-uat.com, 1 mastercareplus.com, 1 mastercheat.net, 1 @@ -78663,6 +78664,7 @@ matthewgallagher.co.uk, 1 matthewgraybosch.com, 1 matthewgrow.com, 1 matthewimaniphotography.ga, 1 +matthewj.ca, 1 matthewkairys.com, 1 matthewkenny.co.uk, 1 matthewkerley.com, 1 @@ -78718,6 +78720,7 @@ mattsavin.me, 0 mattshi.com, 1 mattsmotorclub.com, 1 mattsvensson.com, 1 +matty.digital, 1 matucloud.de, 1 matuntu.ml, 1 matuslab.net, 1 @@ -78889,7 +78892,6 @@ maxundlara.eu, 1 maxundlara.org, 1 maxus.tk, 1 maxvaluedeals.com, 1 -maxverboom.nl, 1 maxwaellenergie.de, 1 maxweiss.io, 1 maxwell-english.co.jp, 0 @@ -79252,6 +79254,7 @@ mebelconcept.tk, 1 mebelipalitra.ru, 0 mebelisk.com.br, 1 mebelnik.pro, 1 +mebeloffice.com.ua, 1 mebelshik.tk, 1 mec010.com, 1 mec020.com, 1 @@ -79673,7 +79676,7 @@ mediamuda.com, 1 medianbases.ga, 1 mediantechnologies.com, 1 mediapart.fr, 1 -mediapath.gr, 1 +mediapath.gr, 0 mediapuller.com, 1 mediarithmics.com, 1 mediarithmics.io, 1 @@ -80060,8 +80063,6 @@ mejofi.net, 1 mejofi.nl, 1 mejofi.org, 1 mejor-broker.com, 1 -mejorator.com, 1 -mejorator.es, 1 mejorator.net, 1 mejorator.org, 1 mejorespatineteselectricos.es, 1 @@ -80380,7 +80381,7 @@ mercadolibre.com.uy, 1 mercadolibre.com.ve, 1 mercadolibrefz.tk, 1 mercadolivre.com.br, 1 -mercadopago.cl, 1 +mercadopago.cl, 0 mercadopago.com, 1 mercadopago.com.ar, 1 mercadopago.com.br, 1 @@ -81075,7 +81076,6 @@ microdesic.com, 1 microdots.de, 1 microdrive.pt, 1 microferma.site, 1 -microgreensworld.com, 1 microjovem.pt, 1 microl.ink, 1 microlog-online.de, 1 @@ -81422,6 +81422,7 @@ millasexshopoficial.com.br, 1 millburyma.gov, 1 millcreekwa.gov, 1 millefleurs.eu, 1 +millenn.photos, 1 millennium-thisiswhoweare.net, 1 millenniumfalcon.org, 1 millenniumstem.org, 1 @@ -81501,7 +81502,6 @@ mimumimu.net, 1 mimundodxn.com, 1 mimusic.cf, 1 min-forsyning.dk, 1 -min-sky.no, 1 min.kiwi, 0 minacellini.com, 1 minacssas.com, 1 @@ -81745,7 +81745,6 @@ minttang.cn, 0 minu.link, 1 minube.co.cr, 1 minucaelena.com, 1 -minul.in, 1 minungdomsbolig.dk, 1 minutashop.ru, 1 minuteflightdeals.com, 1 @@ -82400,7 +82399,6 @@ mobileague.ml, 1 mobilebingoclub.co.uk, 1 mobilebokep.com, 1 mobilebooster.tk, 1 -mobilecasas.com, 1 mobilecontractcomparison.com, 1 mobilecraftingco.com, 1 mobiledatabank.jp, 1 @@ -82617,7 +82615,6 @@ moe.ci, 1 moe.tools, 1 moe4sale.in, 1 moeali.com, 1 -moeblog.cn, 1 moeblog.top, 1 moec.top, 1 moechel.com, 1 @@ -83859,7 +83856,6 @@ msquadrat.de, 0 msquared.id.au, 1 msrohkwrstock.com, 1 msroot.de, 1 -msrumon.com, 1 mssa.jp, 1 msscholz.de, 1 mssm-portal.com, 1 @@ -83969,7 +83965,6 @@ mtz-info.gq, 1 mtz-sng.gq, 1 mtz80-mtz82.gq, 1 mtzbelarus.gq, 1 -mtzfederico.com, 1 mu-sigma.com, 1 mu-thunder.online, 1 mu-venezuela.tk, 1 @@ -83992,6 +83987,7 @@ muchisimos.com, 1 muchohentai.com, 1 muchoruidoacademy.com, 1 muchotrolley.tk, 1 +muckingabout.eu, 1 muclan.tk, 1 mucmail.de, 1 mudanzasjuniorh.com, 1 @@ -84058,6 +84054,7 @@ muii.com.br, 1 muii.in, 1 muilties.com, 1 muir.eu.org, 1 +muir.fun, 1 muir.pp.ua, 1 muisoft.fi, 1 muizenpagina.tk, 1 @@ -84270,7 +84267,6 @@ musacomo.com, 1 musafir-aceh.tk, 1 musasionline.com, 1 musaslush.com, 1 -musavirlik.net, 1 musavirsahan.com, 1 muscatinecountyiowa.gov, 1 muscle-tg.com, 1 @@ -84703,6 +84699,7 @@ mychamberlain.co.nz, 1 mychamberlain.com, 1 mychamberlain.com.au, 1 mychamberlain.eu, 1 +mycharlestontherapist.com, 1 mychawinda.cf, 1 mychemromance.tk, 1 mychicken.info, 1 @@ -86158,6 +86155,7 @@ nautiboat.it, 1 nauticlink.com, 1 nauticlux.com, 1 nautika.tk, 1 +nautiljon.com, 1 nautsch.de, 1 nauz-art.com, 1 nav.no, 1 @@ -87019,7 +87017,6 @@ netzklad.de, 1 netzona.org, 1 netzspielplatz.de, 0 netzsv.website, 1 -netztest.at, 1 netzvieh.de, 1 netzwerk-lq.com, 1 netzwerk-sozialliberal.de, 1 @@ -87099,7 +87096,6 @@ nevim-co-varit.cz, 1 nevivur.net, 1 nevkurse.tk, 1 nevntech.com, 1 -nevocloud.com, 1 nevolution.me, 1 nevoxo.com, 0 nevrodiversitet.no, 1 @@ -87509,7 +87505,7 @@ ngarate.com, 1 ngatikuri.tk, 1 ngawa-avocat-paris.fr, 1 ngc.gov, 0 -ngclearing.com, 1 +ngclearing.com, 0 ngefics.tk, 1 ngegame.id, 1 ngergs.de, 1 @@ -87821,7 +87817,6 @@ nigdeescort.tk, 1 nigelvm.com, 1 nigeriaimagefoundation.org, 1 nigeriaportal.tk, 1 -nigger.racing, 1 nigglipads.com.br, 1 niggo.eu, 1 night-academy.pl, 1 @@ -88099,7 +88094,6 @@ nitrous-networks.com, 0 nitschinger.at, 1 nittel-gaertner.at, 1 nitter.hu, 1 -nitter.it, 1 nitter.net, 1 nitttrbhopal.org, 1 niuco.com.br, 1 @@ -88485,7 +88479,6 @@ nootropicpedia.com, 1 nootropil.cf, 1 noovell.com, 1 nooverviewavailable.com, 1 -noozy.org, 1 nopagefound.com, 1 nopaincenter.ro, 0 nopajam.tk, 1 @@ -88693,7 +88686,6 @@ nostalgie.tk, 1 nostalgiktv.ml, 1 nostalgimidi.se, 1 nostalgische-attracties.nl, 1 -nostaljicicekcilik.com, 1 nostoautomaatti.fi, 1 nostosh.eu.org, 1 nostradansacornella.tk, 1 @@ -89032,7 +89024,6 @@ nsepapa.com, 1 nsfw-story.com, 1 nshepp-dct-development.azurewebsites.net, 0 nshipster.cn, 1 -nshipster.co.kr, 1 nshipster.com, 1 nshipster.es, 1 nsics.co.jp, 1 @@ -90109,7 +90100,7 @@ oheila.com, 1 ohentpay.com, 1 ohhappy.win, 1 ohhere.xyz, 1 -ohifonly.com, 1 +ohifonly.com, 0 ohioag.gov, 1 ohioago.gov, 1 ohiobrewweek.com, 1 @@ -90396,7 +90387,7 @@ oliverspringer.eu, 1 oliverst.com, 1 oliverwenz.de, 1 olivetbgc.org, 1 -olivetchurch.org.uk, 1 +olivetchurch.org.uk, 0 olivetownship-mi.gov, 1 olivia.cf, 1 olivialufkin.tk, 1 @@ -90452,7 +90443,6 @@ oludeniz.tk, 1 olustvere.edu.ee, 1 olxa.tk, 1 olxdir.tk, 1 -olydent.com, 1 olyfed.com, 1 olygazoo.com, 1 olymp-arts.world, 1 @@ -90629,6 +90619,7 @@ onderwijscentrumgent.be, 1 ondevamosjantar.com, 1 ondiet.biz, 1 ondoorgrond.tk, 1 +ondrei.one, 1 ondrej.org, 1 ondrejbudin.cz, 0 ondrejhoralek.cz, 1 @@ -91015,7 +91006,6 @@ onvey.io, 1 onvi.nl, 1 onvori.com, 1 onvori.de, 1 -onvousment.fr, 1 onwie.com, 1 onwie.fr, 1 onysix.de, 1 @@ -91091,6 +91081,7 @@ open-co.com, 1 open-data-apps.org, 1 open-desk.org, 1 open-domotics.info, 1 +open-fixture-library.org, 1 open-future.be, 1 open-future.info, 1 open-gaming.net, 1 @@ -91513,6 +91504,7 @@ orefice.roma.it, 1 oregon2020census.gov, 1 oregonenergysaver.com, 1 oregonmenshealth.com, 1 +oreka.one, 1 oreka.online, 1 orel-city.ml, 1 orel-sait.tk, 1 @@ -92035,7 +92027,6 @@ outdoorlightingthousandoaks.com, 1 outdoorlightingwestlakevillage.com, 1 outdoormanufaktur.com, 0 outerface.net, 1 -outerheaven.pro, 1 outerlimitsdigital.com, 1 outernet.tk, 1 outerspace.ga, 1 @@ -92239,7 +92230,6 @@ oxinarf.pt, 1 oxizonia.com, 1 oxlab.com.ar, 0 oxo.cloud, 0 -oxoo.ooo, 1 oxos.com, 1 oxots.com, 1 oxotscovid.com, 1 @@ -92651,7 +92641,6 @@ pakingas.lt, 1 pakistan24.tk, 1 pakistanblogger.tk, 1 pakistanheadline.tk, 1 -pakistani.dating, 1 pakistanientertainers.ga, 1 pakistanmusic.tk, 1 pakistanpost.ga, 1 @@ -92753,7 +92742,6 @@ palonhs.tk, 1 palotahaz.hu, 1 palpitediario.com.br, 1 paltopro.com, 1 -palucamoveis.com.br, 1 pamaniqu.nl, 1 pamashield.com, 1 pamc.tk, 1 @@ -92911,7 +92899,6 @@ panzerscreen.dk, 1 panzerwarmodsru.tk, 1 pao.moe, 1 paocaibang.net, 1 -paocloud.co.th, 1 paofu.cat, 0 paolodemichele.it, 0 paolomargari.tk, 1 @@ -92942,6 +92929,7 @@ papendal.nl, 1 paper-republic.org, 1 paper.sc, 1 paper.wf, 1 +papergamer.co.uk, 1 paperhoney.by, 1 papermasters.com, 1 papermotion.fr, 1 @@ -93170,6 +93158,7 @@ parmatoday.it, 1 parmels.com.br, 1 parmoli.tk, 1 parnassys.net, 1 +parniplus.com, 1 parnizaziteksasko.cz, 1 parodesigns.com, 1 paroisses-theix-surzur.com, 1 @@ -94696,6 +94685,7 @@ petrole.tk, 1 petroleum-schools.com, 1 petroll.ga, 1 petrologisticsllc.com, 1 +petroom.vn, 1 petroscand.eu, 1 petrostathis.com, 0 petrotranz.com, 1 @@ -95273,7 +95263,6 @@ piccolinokids.gr, 1 piccolo-parties.co.uk, 1 picdefacer.com, 1 pichainlabs.com, 1 -pichlerei.at, 1 pick.aw, 1 pick150.hu, 1 picka.gift, 1 @@ -95289,7 +95278,7 @@ picketfence.tk, 1 pickhdtvers.ga, 1 pickhdtvest.ga, 1 pickherznyeremeny.hu, 1 -picklinik.id, 1 +picklinik.id, 0 pickmysoap.gr, 1 picknetworkiscoming.sg, 1 picknyeroizek.hu, 1 @@ -95584,7 +95573,6 @@ pinterest.pt, 1 pinterest.ru, 1 pinterjann.is, 1 pintiaux.com, 1 -pintoresiluro.com, 1 pintoselectricfencing.co.za, 1 pintosplumbing.co.za, 1 pinupbets.gq, 1 @@ -95730,7 +95718,7 @@ pivovarcunak.cz, 1 pivx2bitcoin.com, 1 pivxblockchain.com, 1 pivxblockchaindownload.com, 1 -piw.pw, 1 +piw.pw, 0 piwko.co, 1 pix5.de, 1 pixael.com, 1 @@ -95890,7 +95878,6 @@ plaintextpledge.net, 1 plaintextpledge.org, 1 plaintray.com, 1 plaisirdumouvement.com, 1 -plaisiretsens.com, 1 plaisirs-coquins.com, 1 plakakodlari.com, 1 plakbak.nl, 1 @@ -96551,6 +96538,7 @@ podcrto.si, 1 podcrypters.ga, 1 podcryptest.ga, 1 podd.xyz, 1 +podeacontecer.com.br, 1 podemos.info, 1 poderososconjurosyamarres.com, 1 podia.com.gr, 0 @@ -96606,7 +96594,6 @@ pogljad-brest.tk, 1 pogodavolgograd.tk, 1 pogodok.tk, 1 pogomate.com, 1 -pogoswine.com, 1 pogotowie-komputerowe.tk, 1 pogotowiekomputeroweolsztyn.pl, 1 pogrebisky.net, 1 @@ -96839,9 +96826,10 @@ pollpodium.nl, 1 polly-tix.uk, 1 polly.spdns.org, 1 polmods.com, 1 +polnischestoffe.eu, 1 polog.tk, 1 polomack.eu, 1 -poloniainfo.com, 1 +poloniainfo.com, 0 polonialidzbark.tk, 1 polski-dentysta-birmingham.uk, 1 polskiemalzenstwo.org, 1 @@ -97673,6 +97661,7 @@ prateep.io, 1 pratelloshop.tk, 1 pratemarkets.com, 1 praticienmedecinechinoise.be, 1 +pratikorganizasyon.com, 1 pratiquefitness.com.br, 1 prato-allo-stelvio.org, 1 pratopronto.org, 1 @@ -97810,6 +97799,7 @@ premierbouncycastles.co.uk, 1 premierchef.co.th, 1 premiercreditmasters.com, 1 premierdisco.co.uk, 1 +premiereco.com.sg, 1 premieresloges.ca, 0 premierevents.ie, 1 premierheart.com, 1 @@ -97868,7 +97858,6 @@ presbvm.org, 1 presbyterian-colleges.com, 1 preschoole.gq, 1 presdesdunes.com, 1 -presence-relation.fr, 0 presenciainternet.com, 1 present-m.com, 1 presentacionesweb.com, 1 @@ -97931,7 +97920,6 @@ prestigebouncycastles.co.uk, 1 prestigeeventshire.co.uk, 1 prestigehealthservices.au, 1 prestigehealthservices.com.au, 1 -prestigemad.com, 1 prestigemix.com, 1 prestigeproviders.com, 1 prestigerepairs.com.au, 1 @@ -98458,6 +98446,7 @@ profmatheus.com, 1 profmetod.com, 1 proformer.io, 1 proformi.com, 1 +proforo.co, 1 profritual.ru, 1 profsaranya.com, 1 profservice.it, 1 @@ -98946,12 +98935,12 @@ pru.hk, 1 pruchovi.tk, 1 pruebapg.cl, 1 pruma.com.br, 1 +pruna.org, 1 prushka.gq, 1 prushka.ml, 1 prushka.tk, 1 pruve.it, 1 prvcy.one, 1 -prvnirodinna.cz, 1 prwid.com, 1 prwid.gov, 1 pry.co, 1 @@ -99703,7 +99692,6 @@ qani.me, 1 qapital.com, 0 qaq.cloud, 1 qaq.jp, 1 -qaq.sh, 1 qarto.com, 1 qasa2ed.online, 1 qask.ml, 1 @@ -99800,6 +99788,7 @@ qiscience.tk, 1 qitano.com, 1 qitarabutrans.com, 1 qitzune.com, 1 +qiu.moe, 1 qiu006.com, 1 qivonline.pt, 1 qiwi.be, 1 @@ -101992,10 +101981,8 @@ refluxogastroesofagico.ga, 1 refood-cascaiscpr.eu, 1 refood.com, 1 reform.ee, 1 -reformasiluro.com, 1 reformation.financial, 1 reformatreality.com, 1 -reformayobra.com, 1 refpa.top, 1 refresh-dc.org, 1 refreshcartridges.co.uk, 1 @@ -102277,7 +102264,6 @@ relojes-online.com, 1 relookdecoration.fr, 1 relsak.cz, 1 reltio.com, 1 -relution.io, 1 relvan.com, 1 relvan.tech, 1 relyonnutec.com, 1 @@ -102482,6 +102468,7 @@ renwerks.com, 1 renxinge.cn, 0 renyiyou.com, 1 reo.gov, 0 +reolestate.com, 1 reorz.com, 0 reox.at, 1 repaircafe-hanau.de, 1 @@ -102497,7 +102484,6 @@ reparacionesdecalefones.com, 1 reparacionmovilescartagena.com, 1 reparacionmovilesmurcia.com, 1 reparatiecrm.nl, 1 -reparatii-injectoare-buzau.com, 1 reparation-traceur.com, 1 reparaturcafe-pfullendorf.de, 1 reparizy.com, 1 @@ -102557,6 +102543,7 @@ republicghana.com, 1 republicmo.gov, 1 republictelecom.net, 1 republik-sombora.tk, 1 +republikapost.com, 1 republique.org, 1 repuestosmedellin.com, 1 repugnant-conclusion.com, 1 @@ -103011,7 +102998,6 @@ rgdt.tk, 1 rgf.be, 1 rgfundraising.com, 1 rggraphics.mx, 1 -rghost.net, 1 rgiohio.com, 1 rgpd-elearning.com, 1 rgpdkit.io, 1 @@ -103033,6 +103019,7 @@ rheijmans.io, 1 rheijmans.nl, 1 rheimsandcohen.ltd, 1 rhein-liebe.de, 1 +rhein-web.com, 1 rheinturm.nrw, 1 rhese.net, 1 rhetorical.ml, 0 @@ -103066,7 +103053,6 @@ rhrli.com, 1 rhubarb.land, 1 rhumblineadvisers.com, 1 rhwebdesigns.co.uk, 1 -rhwonline.de, 1 rhye.tk, 1 rhyme.com, 1 rhymesofreason.com, 1 @@ -103109,6 +103095,7 @@ ribmountainwi.gov, 1 ribolov.tk, 1 ribtours.co, 1 ric-rac.org, 1 +ricardo.nu, 1 ricardojsanchez.com.ar, 1 ricardopq.com, 1 ricardoquaresma.tk, 1 @@ -103118,7 +103105,6 @@ riccardopiccioni.it, 1 riccy.org, 1 riceadvice.info, 1 ricecountymn.gov, 1 -ricettesemplicieveloci.altervista.org, 1 rich-good.com, 0 richadams.me, 1 richandsteph.co.uk, 1 @@ -103662,7 +103648,6 @@ robin.co.kr, 1 robin.info, 1 robinb0s.nl, 1 robinbos.nl, 1 -robindeheer.nl, 0 robinevandenbos.nl, 1 robinflikkema.nl, 1 robinfrancq.ml, 1 @@ -104817,7 +104802,6 @@ rumbies.co.uk, 0 rumble.cloud, 1 rumble.com, 1 rumbleline.ga, 1 -rumdulhospital.com, 1 rumeli.edu.tr, 1 rumenka.tk, 1 ruminecraftru.tk, 1 @@ -105364,7 +105348,6 @@ safatech.me, 1 safc.tk, 1 safeacs.com, 1 safeadmin.ga, 1 -safeandsecureserver.com, 1 safearth.training, 1 safeathomeohio.gov, 1 safebaseflorida.com, 1 @@ -105905,6 +105888,7 @@ samplefashion.nl, 1 sampurna.shop, 1 samri.pt, 1 samroelants.com, 1 +sams.wtf, 1 samscollection.in, 1 samsebe.ml, 1 samsebe.tk, 1 @@ -106176,6 +106160,7 @@ santv.cc, 0 sanukarlos.tk, 1 sanweb.info, 1 sanych-msk.ru, 0 +saoneth.pl, 1 saorsa.fr, 1 saorsat.com, 1 saorsat.ie, 1 @@ -106550,6 +106535,7 @@ sayfr.com, 1 sayhanabi.eu.org, 1 sayheymike.com, 1 sayhuahuo.com, 1 +sayhuahuo.xyz, 1 sayprepay.com, 1 sayrodigital.com, 0 says.lol, 1 @@ -106594,6 +106580,7 @@ sbermobile.ru, 1 sberna-fotofast.cz, 1 sbestimes.com, 1 sbf888.com, 1 +sbgcred.com, 1 sbhscotland.org.uk, 1 sbiewald.de, 1 sbir.gov, 0 @@ -106654,6 +106641,7 @@ scalesbiolab.com, 1 scaligerorooms.it, 1 scaling.solutions, 0 scalive.tv, 1 +scallyboy.uk, 1 scallywagsbouncycastles.co.uk, 1 scallywagskids.co.uk, 1 scalpel.com, 1 @@ -106748,6 +106736,7 @@ schattenwoelfe.tk, 1 schatzibaers.de, 1 schauergroup.com, 1 schaumburgil.gov, 1 +schaumstoff-meister.de, 1 schauraum.tk, 1 schauspielbuehnen.de, 1 schausteller.de, 1 @@ -107438,7 +107427,6 @@ season.moe, 1 seasons.nu, 0 seasonsboutique.com.au, 1 seaspineortho.com, 1 -seaspiration.com, 1 seatbeltpledge.com, 1 seatinglane2u.com, 1 seatsurfing.de, 1 @@ -107722,6 +107710,7 @@ seedandleisure.co.uk, 1 seedboite.ovh, 1 seedbox.fr, 1 seedbox.hosting, 1 +seedcom.dk, 0 seedcoworking.es, 1 seedisclaimers.com, 1 seedno.de, 1 @@ -107797,6 +107786,7 @@ sehat-solusi-makmur.com, 1 sehatpoin.com, 1 sehatyab.com, 1 sehd.top, 1 +sehenderson.com, 1 sei-yu.net, 1 seibert.ninja, 1 seibu-kikaku.co.jp, 1 @@ -108331,11 +108321,15 @@ sergi.tk, 1 sergicoll.cat, 1 sergije-stanic.me, 1 sergio-rivero.tk, 1 +sergio4u.com, 1 +sergio4you.com, 1 sergiochica21.tk, 1 sergiocv.com, 1 sergiodemo.com, 1 sergioforsanmateo.com, 1 sergioforse.com, 1 +sergioforu.com, 1 +sergioforyou.com, 1 sergiogm.es, 1 sergiogug.tk, 1 sergiomur.tk, 1 @@ -109168,7 +109162,6 @@ shieldnsheath.com, 1 shieldofachilles.in, 1 shiellc.com, 1 shif.tk, 0 -shifaat.com, 1 shift-record.com, 1 shift-to.co.jp, 1 shift.email, 1 @@ -109897,6 +109890,7 @@ siesapps.com, 1 sietejefes.com.ar, 1 sieulog.com, 1 sieuthithangmay.com, 1 +sifasharing.tk, 1 sifecs.ml, 1 sifreuret.com, 0 sift-tool.org, 0 @@ -110066,7 +110060,6 @@ silver-heart.co.uk, 1 silver-johnes.tk, 1 silverartcollector.com, 1 silverback.is, 0 -silverblog.org, 1 silverbowflyshop.com, 1 silverbox.ga, 1 silvercrossbaby.com, 1 @@ -110254,7 +110247,7 @@ simonschmitt.ch, 1 simonspeich.ch, 1 simonsreich.de, 1 simonssh.ddns.net, 1 -simonweil.com, 1 +simonweil.com, 0 simonwessel.net, 1 simonwoodside.com, 1 simonzoellner.de, 1 @@ -110359,6 +110352,7 @@ simplysmartgardening.com, 1 simplytiles.com, 1 simplyuniforms.com.au, 1 simplyvoting.com, 1 +simpson.id, 1 simpsoncountyky.gov, 1 simpul.nl, 1 simrail.nl, 1 @@ -110692,6 +110686,7 @@ situsbandarq.ml, 1 situsbandarq.tk, 1 sitypro.com, 1 sitz.ch, 1 +sitzpolster24.de, 1 sitzungsdienst.net, 1 siulam-wingchun.org, 1 siusto.com, 1 @@ -110959,7 +110954,6 @@ skrin.ru, 1 skripta.tk, 1 skriptorium.de, 1 skrivargarden-nes.cf, 1 -skrivebeskyttet.dk, 1 skrivebordet.tk, 1 skrprojects.com.au, 1 skrsv.net, 1 @@ -111166,6 +111160,7 @@ slb.ru, 1 slbknives.com, 1 slc.is, 0 slcdn.net, 1 +sld08.com, 1 sldev.ovh, 1 sldlcdn.com, 1 slechtereview.nl, 1 @@ -111329,7 +111324,6 @@ slytigers.tk, 1 slyvon.com, 1 slzr.cloud, 1 sm-kyoushitsu.com, 1 -sm-stream.com, 1 sm-supplements.gr, 1 sm.link, 1 sm.ms, 1 @@ -111341,21 +111335,25 @@ smackhappy.com, 1 smadav.ml, 1 smaksbanken.no, 1 smalandscountryclub.tk, 1 +small-blog.cf, 1 small-king.ml, 1 smallbytedesign.co, 1 smallchat.nl, 1 smallcloudsolutions.co.za, 1 smallcloudsolutions.com, 1 +smallcraftadvisory.tk, 1 smallcubed.com, 1 smalldata.tech, 1 smalldeveloper.ml, 1 smalle-voet.de, 1 +smallfoot.tk, 1 smallplanet.com, 1 smalls-world.tk, 1 smallsiri.gq, 1 smallsites.eu, 1 smalltalkconsulting.com, 1 smalltunepress.tk, 1 +smallville.tk, 1 smallville25.tk, 1 smallwhitebear.ga, 1 smaltimento-rifiuti.com, 1 @@ -111393,8 +111391,10 @@ smart-lab.ch, 1 smart-mirror.de, 1 smart-mrt.co.il, 1 smart-profile.ro, 1 +smart-travel.tk, 1 smart-tux.de, 1 smart-wohnen.net, 1 +smart-zona.tk, 1 smart.gov, 1 smartacademy.ge, 1 smartacademy.pro, 1 @@ -111406,6 +111406,7 @@ smartart.gr, 1 smartart.tk, 1 smartass.space, 1 smartass0027.com, 1 +smartassembly.tk, 1 smartbiz.vn, 1 smartblock.cloud, 1 smartcar.com, 1 @@ -111418,6 +111419,7 @@ smartcover.tk, 1 smartcpa.ca, 1 smartdatafusion.jp, 1 smartdb.jp, 1 +smartdigital.ga, 1 smarteco.tk, 1 smartedukasi.co.id, 0 smarterskies.gov, 1 @@ -111428,6 +111430,7 @@ smartfaktor.pl, 1 smartfit.cz, 1 smartfitkitchen.bg, 1 smartfixmarburg.de, 1 +smartfons.tk, 1 smartfooding.com, 1 smartftp.com, 1 smartgirledits.com, 1 @@ -111471,6 +111474,7 @@ smartpanelsmm.com, 1 smartpatika.hu, 1 smartpheromones.com, 1 smartphone-pliable.wtf, 1 +smartphonecases.tk, 1 smartphonechecker.co.uk, 1 smartphonefixen.be, 1 smartphonesolution.tk, 1 @@ -111490,6 +111494,7 @@ smartshiftme.com, 1 smartshop.gr, 1 smartshoppers.es, 1 smartsitio.com, 1 +smartspace.ml, 1 smartspace.tk, 1 smartsparrow.com, 0 smartstep.pt, 1 @@ -111505,10 +111510,12 @@ smartwritingservice.com, 1 smartwurk.nl, 0 smarty.cz, 1 smash-gg.club, 1 +smashbros-chile.tk, 1 smashbylaney.com, 1 smashcooper.tk, 1 smashingconf.com, 1 smashingmagazine.com, 1 +smashnl.tk, 1 smashno.ru, 1 smatch.com, 0 smb-analytics.pw, 1 @@ -111527,6 +111534,7 @@ sme-gmbh.net, 1 smeetsengraas.com, 1 smelly.cloud, 1 smeso.it, 1 +smeta.ml, 1 smetak.cz, 1 smetana.pro, 1 smetbuildingproducts.com, 1 @@ -111548,6 +111556,7 @@ smilechic.com, 1 smilecliniq.com, 1 smilecon.cf, 1 smiledirectsales.com, 1 +smilegenerator.tk, 1 smilemantra.clinic, 1 smilenwa.com, 1 smilephi.com, 1 @@ -111561,6 +111570,7 @@ smimea.info, 1 smipty.cn, 1 smipty.com, 1 smiraus.cz, 1 +smishnik.tk, 1 smit.com.ua, 1 smith-tech.ga, 1 smith.bz, 1 @@ -111578,6 +111588,7 @@ smithsanchez.com, 1 smithsstational-fpd.gov, 1 smithsstational.gov, 1 smithsystem.net, 1 +smithteresa.tk, 1 smits.com, 1 smits.frl, 1 smitsmail.net, 1 @@ -111609,10 +111620,13 @@ smokefreestage.jp, 1 smokeping.pl, 1 smoker.tk, 1 smokinghunks.com, 1 +smokingtapes.ga, 1 smokkelenken.no, 0 smol.cat, 1 smolbotbot.com, 1 smolensk-i.ru, 1 +smolensk.ml, 1 +smolensk.tk, 1 smolkatours.com, 1 smolnikova.tk, 1 smoo.st, 1 @@ -111653,6 +111667,7 @@ smsprivacy.org, 1 smsstock.tk, 1 smstorems.com.br, 1 smstoreoficial.com.br, 1 +smszone.tk, 1 smtchahal.com, 1 smtcn.cc, 1 smtenants.cn, 1 @@ -111674,6 +111689,7 @@ smxconventioncenter.com, 1 smyrilline.com, 1 smys.uk, 1 sn0int.com, 1 +snab-ural.ga, 1 snabbacash.no, 1 snabbfoting.com, 1 snabbfoting.se, 1 @@ -111689,6 +111705,7 @@ snaildos.tk, 1 snajdr.online, 1 snajdrova.eu, 1 snakafya.com, 1 +snakeanarchy.tk, 1 snakejs.ga, 1 snakesandladders.tk, 1 snakesolid.nl, 1 @@ -111723,6 +111740,7 @@ sndbouncycastles.co.uk, 1 sndcdn.com, 1 snea-kers.tk, 1 sneak.berlin, 1 +sneakers-sports.tk, 1 sneakers88.it, 1 sneakersmexs.com, 1 sneakpod.de, 1 @@ -111742,6 +111760,7 @@ snellius.tk, 1 snelshops.nl, 1 snelwebshop.nl, 1 snelwegzen.nl, 1 +snem.tk, 1 snerith.com, 1 snesdev.com, 1 snetts.com, 1 @@ -111825,6 +111844,7 @@ snowrippers.ro, 0 snowschool.tk, 1 snowshoedistrictwv.gov, 1 snowsubs.moe, 1 +snowvictoria.ga, 1 snowy.ink, 1 snowy.land, 1 snowyluma.com, 1 @@ -111861,8 +111881,10 @@ soat.fr, 1 soatplus.com, 1 soax.com, 1 sobakasite.tk, 1 +sobaki.tk, 1 sobatiment.fr, 1 sobchak.blog, 1 +sobchak.ga, 1 sobersys.com, 1 sobie.ch, 1 sobieray.dyndns.org, 1 @@ -111873,7 +111895,6 @@ sobrelixo.tk, 1 sobreperros.org, 1 sobreporcentagem.com, 1 sobuj.me, 1 -soc.com.br, 1 soc.net, 1 soc247.cloud, 1 socal-babes.com, 1 @@ -111894,6 +111915,7 @@ soci.ml, 1 sociaalwerknederland.nl, 1 sociability.dk, 1 social-class.ga, 1 +social-directory-list.tk, 1 social-engineering.tk, 1 social-line.tk, 1 social-media-strategy.org.uk, 1 @@ -111924,25 +111946,31 @@ socialhead.io, 1 socialhp.com, 1 socialism.tk, 1 socialist-alliance.org, 1 +socialistyouth.tk, 1 +socializator.tk, 1 socialmarketingday.nl, 1 socialmedia-manager.gr, 1 socialmedias.tk, 1 socialmeeps.ml, 1 +socialnet.ml, 1 socialnetworkdemo.tk, 1 socialnews.ga, 1 socialnitro.com, 1 socialnous.co, 1 +socialproject.ml, 1 socialprotection.gov.bd, 1 socials.gq, 1 socialsecrets-coaching.de, 1 socialsecurity.gov, 0 socialstrata.com, 1 socialsurvivalist.net, 1 +socialtactics.cf, 1 socialtactics.ga, 1 socialtactics.gq, 1 socialtactics.ml, 1 socialtoolsonline.com, 1 socialtournaments.com, 0 +socialtranslation.ga, 1 socialtrends.pl, 1 socialwave.tk, 1 socialworkout.com, 1 @@ -111959,17 +111987,21 @@ societatis.fr, 1 societe-chablaisienne-de-revetements.com, 1 societe-chablaisienne-de-revetements.fr, 1 societyofbur-q-ua.tk, 1 +societyparty.ga, 1 socii.network, 1 sociobiology.com, 1 sociocosmos.com, 1 +sociology-bg.gq, 1 sociology-schools.com, 1 sociologyk.nl, 1 sociopampers.com.ar, 1 sociopathy.org, 1 sociosalafuerza.tk, 1 +sociusian.gq, 1 sockfetish.net, 1 sockscap64.com, 1 socktopus.io, 1 +socomforums.tk, 1 soconj.gov, 1 socratec-pharma.de, 1 socraticsolutions.us, 1 @@ -111981,8 +112013,10 @@ socstar.ml, 1 socstation.com, 1 soczu.duckdns.org, 1 soda-net.com, 1 +soda.ga, 1 sodadigital.com.au, 1 sodafilm.de, 1 +sodalai.tk, 1 sodel-sa.eu, 1 sodelicious.recipes, 1 sodependable.com, 1 @@ -112018,6 +112052,7 @@ sofi.codes, 1 sofiadaoutza.gr, 1 sofiaestado.com, 1 sofialobocera.com, 1 +sofianeves.tk, 1 sofias.tk, 1 sofiavanmoorsel.com, 1 sofibox.com, 1 @@ -112030,6 +112065,8 @@ sofoco.us, 1 sofortcutie24.de, 1 sofortimplantate-muenchen.de, 1 sofpedia.ro, 0 +soft-key.tk, 1 +soft-office.tk, 1 soft-search-system.tk, 1 soft.taipei, 1 soft41.ru, 1 @@ -112059,6 +112096,7 @@ softonic.vn, 1 softonline.net, 1 softowe.com, 1 softpark.cf, 1 +softpark.ml, 1 softplay4hire.co.uk, 1 softprayog.in, 1 softsecmatheodexelle.be, 1 @@ -112071,6 +112109,7 @@ softview.gq, 1 softview.tk, 1 softw.net, 1 software-search.com, 1 +software-tech.tk, 1 software-voor-projecten.nl, 1 software.rocks, 1 softwarebeveiligingtestdomein.be, 1 @@ -112079,6 +112118,7 @@ softwarecloud.ml, 1 softwareclub.tk, 1 softwaregeek.nl, 1 softwarepara.net, 1 +softwarepatenten.tk, 1 softwarepixie.com, 1 softwaresecurityandradefernando.be, 1 softwaresolved.com, 1 @@ -112098,6 +112138,7 @@ sogravatas.net.br, 1 sogudo.com, 0 sogutma.com.tr, 1 sohamroy.me, 1 +sohanakhan.tk, 1 sohka.eu, 1 soia.ca, 1 soilegustafsson.fi, 1 @@ -112116,6 +112157,7 @@ soket.ee, 1 soko.nl, 1 soko.reisen, 1 sokolmelnik.tk, 1 +sokolovskyi.ml, 1 sokolslavkov.tk, 1 sokosport.com, 1 sokouchousa.net, 1 @@ -112129,31 +112171,41 @@ solace.com, 1 solacyre.ch, 0 solaland.co.uk, 1 solalt.com, 1 +solana-active.tk, 1 solanacasinos.io, 1 solanaroyale.com, 1 solanocounty.gov, 1 solanowonen.nl, 1 solar-electric-propulsion.pl, 1 +solarace.tk, 1 solaradventures.icu, 1 solarbattery.ga, 1 solarbynatureinc.com, 1 solareagricola.it, 1 solarfaa.ir, 1 solarfever.ga, 1 +solargaming.tk, 1 +solarhome.ml, 1 solarhome.tk, 1 solariilacheie.ro, 1 solarium.gov, 1 solarium.milano.it, 1 solarloon.com, 1 solarnatur.es, 1 +solaronics.tk, 1 +solarpanels.tk, 1 solarplan-berlin.de, 1 solarrights.org, 1 solarseason.ga, 1 solarstats.net, 1 solarstrom.net, 1 +solartek.cf, 1 +solartek.ga, 1 solartek.gq, 1 solartrackerapp.com, 1 +solartravel.tk, 1 solarwave.tk, 1 +solarwind.cf, 1 solautoescuela.com, 1 solaxfaq.com, 1 solbit.xyz, 1 @@ -112169,6 +112221,8 @@ soldesduck.ch, 1 soldierangels.tk, 1 soldiersmg.tk, 1 sole-erdwaermetauscher.de, 1 +soleanos.tk, 1 +soledadmataro.tk, 1 soledadpenades.com, 0 soleil33.net, 1 solemare-hotel.it, 1 @@ -112183,8 +112237,11 @@ solidariaautos.com, 1 solidariedadecultura.pt, 1 solidarita-kosovo.net, 1 solidarityzone.org, 1 +solidform.ml, 1 +solidhost.cf, 1 solidian.com, 1 solidimage.com.br, 1 +solidincome.ga, 1 solidnet.software, 1 solidnetwork.org, 1 solidpurenonsense.tk, 1 @@ -112210,6 +112267,7 @@ solliv.com, 1 solmek.co.uk, 1 solnascentepapelaria.com.br, 1 solnet.ao, 1 +solntsezaschitnye-ochki.tk, 1 solo-shoes.ru, 1 solo.com.sa, 1 solocalcetines.com, 1 @@ -112217,6 +112275,7 @@ solochubasqueros.com, 1 solodukhin.tk, 1 solofajas.online, 1 solofi.fr, 1 +sologetaway.ga, 1 sologoc.com, 1 sologstrand.com, 1 sologstrand.dk, 1 @@ -112253,6 +112312,7 @@ solostocks.pl, 1 solostocks.pt, 1 solovey.su, 1 solovyovalawfirm.com, 1 +solsi.ga, 1 solsocog.de, 1 solucion.gq, 1 solucionesihd.com, 1 @@ -112285,6 +112345,7 @@ somaar.tk, 1 somaini.li, 1 somaliagenda.com, 1 somaliaonline.com, 1 +somalilandtalk.tk, 1 somanao.com, 1 somautomotivobr.com.br, 1 somecrazy.com, 1 @@ -112304,6 +112365,7 @@ something-blue.tk, 1 something-else.cf, 1 somethingsimilar.com, 1 somethingsketchy.net, 1 +somewherenews.cf, 1 somewherenews.ga, 1 somewherenews.gq, 1 somewherenews.ml, 1 @@ -112315,6 +112377,7 @@ sommefeldt.com, 1 sommeilsante.com, 1 sommerhusudlejning.com, 1 sommerplassen.no, 1 +somnam.tk, 1 somnium.click, 1 somnusoft.com, 1 somnusoft.eu, 1 @@ -112345,6 +112408,7 @@ sona-gaming.com, 1 sona.fr, 1 sonacupalova.cz, 1 sonalkolfiyatlari.com, 1 +sonar.ga, 1 sonaraamat.com, 1 sonarsource.com, 1 sonate.jetzt, 1 @@ -112364,12 +112428,16 @@ sondersobk.dk, 1 sondoro.tk, 1 sondriotoday.it, 1 sonerezh.bzh, 1 +sonesinafar.tk, 1 +sonesisonesi.tk, 1 +sonesonesisi.tk, 1 song.ski, 1 songclan.tk, 1 songdew.com, 1 songesdeplumes.fr, 1 songlifty.com, 1 songslaura.tk, 1 +songsonline.tk, 1 songsterr.com, 1 songsthatsavedyourlife.com, 1 songstothesiren.com, 1 @@ -112391,6 +112459,8 @@ soniclink.tk, 1 sonicshop.tk, 1 sonicwanderer.tk, 1 sonicworld.tk, 1 +sonidoslibertarios.tk, 1 +sonik.tk, 1 sonimei.cn, 0 sonimusic.tk, 1 soninger.ru, 1 @@ -112409,6 +112479,7 @@ sonnendeal.tk, 1 sonnenta.de, 1 sonneundstrand.de, 1 sonnik-znachenie-sna.cf, 1 +sonnik-znachenie-sna.ga, 1 sonnik-znachenie-sna.gq, 1 sonnik-znachenie-sna.ml, 1 sonnik-znachenie-sna.tk, 1 @@ -112418,11 +112489,13 @@ sonoecoracao.com.br, 1 sonofsunart.com, 1 sonohigurashi.blog, 1 sonologic.nl, 1 +sonology.tk, 1 sonomacounty.gov, 1 sonomacountywriterscamp.com, 1 sonoratexas.gov, 1 sons.cf, 1 sons.tk, 1 +sonsight.tk, 1 sonsonate.cf, 1 sonsonate.tk, 1 sontaycamera.com, 1 @@ -112438,8 +112511,10 @@ soontm.net, 1 soopure.nl, 1 soopy.moe, 1 soora.jp, 1 +sopelaotaez.tk, 1 sopenguin.com, 1 soph.jp, 1 +soph.tk, 1 soph.us, 1 sopheos.com, 0 sopher.io, 1 @@ -112523,9 +112598,11 @@ sosgate.com, 1 soshin.cf, 1 sosimple.academy, 1 sosinfotech.com, 1 +sosisuka.ga, 1 sosko.in.rs, 1 soslsd.org, 1 sosmicro.tk, 1 +sosnovka.ga, 1 soso.ga, 1 soso.ml, 1 soso.stream, 1 @@ -112542,6 +112619,7 @@ sosteam.jp, 1 sosteric.si, 1 sostm.org, 1 sosyalat.com, 1 +sosyalevin.com, 1 sot-te.ch, 1 sot.blue, 1 sot.red, 1 @@ -112551,6 +112629,8 @@ sotar.us, 1 soterdev.com, 1 sotin-hr.tk, 1 sotiran.com, 0 +sotnya.cf, 1 +sotnyk.ml, 1 sotoasobi.net, 1 sotocine.tk, 1 sotolar.com, 1 @@ -112580,6 +112660,7 @@ souletter.com, 1 souleymanecamara.com, 1 soulike.tech, 1 soulinbusiness.ga, 1 +soulla.tk, 1 soulmate.dating, 1 soulmating.de, 1 soulmusic.tk, 1 @@ -112589,8 +112670,10 @@ soulplay.com, 1 soulpowercoaching.ga, 1 soulreapers.tk, 1 soulshow.tk, 1 +soulsinner.tk, 1 soulsteer.com, 0 soulveda.com, 1 +soulwinning.tk, 1 souly.cc, 1 soulyi.io, 1 soumen.tk, 1 @@ -112622,6 +112705,7 @@ soundgo.gq, 1 soundhunter.xyz, 0 soundinthesignals.tk, 1 soundlight.tk, 1 +soundman.ga, 1 soundmix.tk, 1 soundmk.ch, 1 soundmoney.club, 1 @@ -112630,6 +112714,7 @@ soundmoney.tech, 1 soundonmike.tk, 1 soundorabilia.com, 1 soundprotectionllc.com, 1 +soundrecords.tk, 1 soundresource.tk, 1 soundrise.tk, 1 sounds-familiar.info, 1 @@ -112741,11 +112826,15 @@ sovereignpcs.com, 1 soverin.net, 1 sovest.ml, 1 sovhoz.tk, 1 +sovmestimost-goroskop.cf, 1 +sovmestimost-goroskop.ga, 1 +sovmestimost-goroskop.gq, 1 sovmestimost-goroskop.ml, 1 +sovmestimost-zodiak.gq, 1 sovos.com, 1 -sovraindebitamento.net, 1 sovremenik.tk, 1 sovtech.tk, 1 +sovxoz.gq, 1 sowhat.dk, 1 sowncloud.de, 1 sowndfinancial.com, 1 @@ -112758,6 +112847,7 @@ soydxn.com, 1 soyezonline.fr, 1 soyladani.com, 1 soytusitio.com, 1 +soyuznik.ml, 1 soyvigilante.com, 1 sozai-good.com, 1 sozai.tk, 1 @@ -112789,6 +112879,7 @@ space-for.business, 1 space-inc.co.jp, 1 space-it.de, 1 space-mining.cf, 1 +space-net.ml, 1 space-station.tk, 1 space-time-elements.com, 1 space-y.cf, 1 @@ -112818,6 +112909,7 @@ spacepirates.tk, 1 spacepixel.ml, 1 spacepunks.de, 1 spacerocksmc.tk, 1 +spaceshells.tk, 1 spacestation13.com, 1 spacetime.am, 0 spaceunique.de, 1 @@ -112868,13 +112960,16 @@ spanda.io, 1 spandrusyszyn.com, 1 spanien.guide, 1 spanier.es, 1 +spanischunterricht.tk, 1 spanishblackboard.com, 1 spanishdogs.tk, 1 spanishnewsarticles.tk, 1 spanishnow.tk, 1 spanjeautohuur.nl, 1 spanmass-portal.org, 1 +spanner.tk, 1 spanner.works, 1 +spanpine.gq, 1 spanstindrundt.no, 1 spantrix.com, 1 spanyolul.hu, 1 @@ -112909,19 +113004,21 @@ sparkplug.tk, 1 sparkresearch.net, 1 sparksga.gov, 1 sparkweb.com.au, 1 -sparkwood.org, 1 sparkz.no, 1 sparmedo.de, 1 sparprofi.at, 1 sparrius.com, 1 sparrowwallet.com, 1 sparta-en.org, 1 +sparta-szczekociny.tk, 1 sparta-upice.tk, 1 sparta.ee, 1 spartac.be, 1 spartacuslife.com, 1 spartaermelo.nl, 1 +spartamet.tk, 1 spartan300.tk, 1 +spartanis.tk, 1 spartankids.in, 1 spartantheatre.org, 1 sparvagn.tk, 1 @@ -112962,14 +113059,18 @@ speakersbusiness.com, 1 speakersden.tk, 1 speakertwpmi.gov, 1 speakthewordaudio.com, 1 +spear.ga, 1 spec-auto.com.ua, 1 spec-ranking.pl, 1 specdrones.us, 1 special-equipment.tk, 1 specialcameras.tk, 1 speciale.cf, 1 +specialeffect.tk, 1 +specialelectronics.tk, 1 specialized-hosting.eu, 1 specialnoise.tk, 1 +specialofficesupplies.tk, 1 specialprojectsdesk.com, 1 specialproperties.com, 1 specialsite.tk, 1 @@ -112989,6 +113090,7 @@ spectacles.com, 1 spectemur.tk, 1 spectrafox.com, 1 spectraspatial.com, 1 +spectre-network.tk, 1 spectrocoin.com, 1 spectrosoftware.de, 1 spectrum-markets.com, 1 @@ -113004,9 +113106,11 @@ speechmate.com, 1 speechmore.ml, 1 speed-bonus.tk, 1 speed-strike.tk, 1 +speedcam.tk, 1 speedcubing.tk, 1 speeddate.it, 0 speeddating.mx, 1 +speeder-vpn.tk, 1 speeder.cf, 1 speeder.one, 1 speeders.cf, 1 @@ -113039,6 +113143,7 @@ speeli.com, 1 speeltoneel.nl, 1 speerpunt.info, 1 speets.ca, 1 +spegeltankar.tk, 1 speich.net, 1 speights-law.com, 1 spek.tech, 1 @@ -113088,6 +113193,7 @@ sphynx-cats.com, 1 sphynx.vn, 1 sphynxboyz.com.au, 1 spice-club.tk, 1 +spicegirlschart.tk, 1 spiceislandhome.com, 1 spicejungle.com, 1 spicemail.cc, 1 @@ -113095,6 +113201,7 @@ spicemoney.com, 1 spicerack.co.uk, 1 spicerack.uk, 1 spiceywraps.co.uk, 1 +spichki.tk, 1 spicture.in, 1 spicydog.org, 1 spicydog.tk, 1 @@ -113108,8 +113215,10 @@ spidernet.tk, 1 spideroak.com, 1 spiders.org.ua, 1 spidersweb.cf, 1 +spidersweb.ga, 1 spidersweb.gq, 1 spidertechpromotions.com, 1 +spidometr.ml, 1 spidometrus.ru, 1 spiegels-op-maat.nl, 0 spieka.info, 1 @@ -113141,6 +113250,7 @@ spillhosting.no, 1 spillmaker.no, 0 spilnu.dk, 1 spiludennemid.com, 1 +spinal.ga, 1 spindelnet.dk, 1 spinderella.tk, 1 spindle.com.ph, 1 @@ -113161,6 +113271,7 @@ spirella-shop.ch, 1 spirit-hunters-germany.de, 1 spirit55555.dk, 1 spiritbionic.ro, 1 +spiritdesigns.tk, 1 spiritedengineers.tk, 1 spiritous.cf, 1 spiritscorp.ddns.net, 1 @@ -113173,6 +113284,9 @@ spiritualpsychologyofacting.com, 1 spiritualvybz.com, 1 spiritworld.ml, 1 spiro.se, 1 +spiski-domenov.tk, 1 +spisochek.tk, 1 +spisok-domenov.tk, 1 spit.com.au, 1 spitalbuhusi.ro, 1 spitalulbuzau.ro, 1 @@ -113180,6 +113294,7 @@ spitfiredialers.com, 1 spitfireuav.com, 1 spithoven.tk, 1 spjaet.dk, 1 +splashily.gq, 1 splashstoretw.com, 1 splatprofcare.com, 1 spleis.no, 1 @@ -113187,6 +113302,7 @@ splendadent.it, 1 splendidspoon.com, 1 splendorservizi.it, 1 spli.co, 1 +splibrary.tk, 1 splikity.com, 1 splimtechco.tk, 1 splintercake.tk, 1 @@ -113203,6 +113319,7 @@ splorge.website, 1 splosh.me, 1 splunk.net, 1 splytech.io, 1 +spm-servis.tk, 1 spmax.design, 1 spmswiss.com, 1 spn-it.de, 1 @@ -113236,8 +113353,11 @@ sporq.de, 1 sport-in-sundern.de, 1 sport-news.ml, 1 sport-news24hs.tk, 1 +sport-obzor.tk, 1 +sport-online-ru.cf, 1 sport-potreby.cz, 1 sport-potreby.sk, 1 +sport-school.tk, 1 sport-socken.net, 1 sport24.by, 1 sportabatese.tk, 1 @@ -113258,6 +113378,7 @@ sportfits.eu, 1 sportfogadas.tk, 1 sporthotel-rasen.com, 1 sportify-design.fr, 1 +sportinfon.cf, 1 sportingclubdacruz.pt, 0 sportivo.cf, 1 sportivo.ga, 1 @@ -113266,6 +113387,7 @@ sportlesplanner.be, 1 sportli.sk, 1 sportlinks.tk, 1 sportllux.com.br, 1 +sportmedia.ga, 1 sportmultimedia.pt, 1 sportmundschutz-info.de, 1 sportnesia.com, 1 @@ -113280,10 +113402,13 @@ sportpiacenza.it, 1 sportplaatje.nl, 0 sportposch.com, 1 sportprint.hr, 1 +sportraucher.tk, 1 sports-colleges.com, 1 sports-equipmen.tk, 1 +sports-news-today.ml, 1 sports-online.cf, 1 sports-sites.ml, 1 +sports-wear.tk, 1 sports.dating, 1 sportsandnews.tk, 1 sportsbookpromocodes.com, 1 @@ -113307,6 +113432,7 @@ sportticino.ch, 0 sporttomorrow.com, 1 sporttown.it, 1 sportvereine.online, 1 +sportverzorging.tk, 1 sportvision.ml, 1 sportvissenfun.tk, 1 sportwetten-anbieter.com, 1 @@ -113314,6 +113440,7 @@ sportwettenschweiz.net, 1 sportxt.ru, 0 sportygirlsjewels.ga, 1 sportztalk.com, 1 +spot-cleaner.tk, 1 spot-lumiere-led.com, 1 spot-pro.jp, 1 spotifyfreetrial.co.uk, 1 @@ -113340,6 +113467,8 @@ spr.id.au, 1 sprachenlernen24.org, 1 sprachfreudehoch3.de, 1 sprashivalka.com, 1 +spravka-internet.tk, 1 +spravka.tk, 1 spravki.cf, 1 sprawdz-nip.pl, 1 sprax2013.de, 1 @@ -113423,6 +113552,7 @@ sputnik1net.org, 1 spy-net.tk, 1 spycam.hopto.me, 1 spychala-it.de, 1 +spyclub.tk, 1 spydar007.com, 1 spydar007.net, 1 spydar007.wiki, 1 @@ -113451,6 +113581,7 @@ sqlinjection.cz, 1 sqlinjection.rocks, 1 sqliteonline.com, 1 sqlwrapper.com, 1 +sqmin.tk, 1 sqr-training.com, 1 sqreemtech.com, 1 sqrl.ch, 1 @@ -113459,6 +113590,7 @@ sqsd.xyz, 1 squad.fr, 1 squality2.xyz, 1 squardllc.ml, 1 +square-gamers.tk, 1 square-gaming.org, 0 square-phone.com, 1 square-src.de, 0 @@ -113469,6 +113601,7 @@ square.it, 1 square.ly, 1 square.mx, 1 square.site, 1 +squaredancedance.tk, 1 squaredseven.com, 1 squaredtechnologies.com, 1 squareeye.com, 1 @@ -113500,8 +113633,10 @@ squeaksscalesandtails.com, 1 squeaky.services, 1 squealing-filth.tk, 1 squeezemetrics.com, 1 +squelcher.cf, 1 squibby.ml, 1 squid.gay, 1 +squidnovels.tk, 1 squido.ch, 1 squidparty.com, 1 squids.space, 1 @@ -113511,6 +113646,7 @@ squirtlesbians.net, 1 squirtqueen.org, 1 sqxb0.ga, 1 sr-33.com, 1 +sr-f.tk, 1 sr.ht, 1 sr2.uk, 1 sr33.com, 1 @@ -113546,21 +113682,29 @@ srinivasan.io, 1 sriramdigital.tk, 1 sriravana.tk, 1 sritafrican.tk, 1 +sritalabama.tk, 1 sritalaska.tk, 1 sritbeauty.tk, 1 sritbrazil.tk, 1 +sritcalifornia.tk, 1 sritcities.tk, 1 sritclassic.tk, 1 +sritculture.tk, 1 +sritegypt.tk, 1 srithunters.tk, 1 sritidaho.tk, 1 +sritsafety.ml, 1 sritspanish.tk, 1 +srittheatre.tk, 1 sritvermont.tk, 1 +srix.ml, 1 srkarra.com, 1 srkb.net, 1 srle.tk, 1 srmi.biz, 1 srnl.gov, 1 sro.fi, 1 +srochno-pohudeti.tk, 1 srochnozaim.gq, 1 srochnyj-zajm.ga, 1 sroma.tk, 1 @@ -113570,7 +113714,6 @@ sroturkey.tk, 1 srp.gov, 1 srpx.de, 1 srqpedals.com, 1 -srrdb.com, 1 srroddy.com, 1 srsforward.email, 1 srsfwd.com, 1 @@ -113639,6 +113782,7 @@ ssl247.co.uk, 1 ssl247.com.mx, 1 ssl247.de, 1 ssl247.dk, 1 +ssl4all.gq, 1 sslbrain.com, 1 sslc.gov, 1 sslcentral.co.uk, 1 @@ -113672,6 +113816,7 @@ ssmwebportal.tk, 1 ssnetwork.jp, 1 ssone.ee, 1 ssprod.tk, 1 +sspu.ml, 1 ssr.llc, 1 ssradio.live, 1 ssready.io, 1 @@ -113740,6 +113885,7 @@ stadtundbaum.de, 1 staer.ro, 1 staff.direct, 1 staffhours.com, 1 +staffi.tk, 1 staffingnation.com, 1 staffordpk.tk, 1 stage-metrobible.org, 1 @@ -113807,13 +113953,15 @@ stallardjw.me, 1 stallionsnow.com, 1 stallone.pl, 1 stalphonsusks.org, 1 +stalplus.ml, 1 +stalstroi.ml, 1 stalworld.tk, 1 stamboomforum.nl, 1 stamboomgids.nl, 1 -stameystreet.com, 1 stamgent.be, 1 stamit.nl, 1 stamkassa.nl, 1 +stammering.ga, 1 stammtisch-bauwagen.tk, 1 stammtisch.domains, 1 stamonicatourandtravel.com, 1 @@ -113844,6 +113992,7 @@ standsearch.cf, 1 standupcomedy.cf, 1 standupcomedy.ga, 1 standupcomedy.tk, 1 +standwithsergio.com, 1 stanfordny.gov, 1 stang.moe, 1 stangeland.tk, 1 @@ -113855,6 +114004,7 @@ stanmed24.pl, 1 stanmirstudio.pl, 1 stannesvets.co.uk, 1 stannri.org, 1 +stanonline.tk, 1 stanron.com, 1 stansweather.net, 1 stantabler.com, 1 @@ -113864,9 +114014,11 @@ stantoncountyne.gov, 1 stanza.group, 1 staplestx.gov, 1 stapvoorstapduurzaam.nl, 1 +star-24.cf, 1 star-citizen.wiki, 1 star-clean.it, 1 star-darom.co.il, 1 +star-life.tk, 1 star-one.co.uk, 1 star.my.id, 1 star.watch, 1 @@ -113883,11 +114035,13 @@ starcitizenreferral.codes, 1 starcoachservices.ca, 1 starcomproj.com, 1 starconnect.at, 1 +starcraftsource.tk, 1 starcroisieres.com, 1 starcys.xyz, 1 stardanceacademy.net, 1 stardev.ovh, 1 stardomino.tk, 1 +stardrive.cf, 1 starease.com, 1 starease.net, 1 stareplanymiast.pl, 1 @@ -113898,6 +114052,7 @@ starfieldguide.com, 1 starfiles.co, 1 starfm.de, 1 starfm.gq, 1 +starfm.ml, 1 starfriend.ru, 1 stargarder-jungs.de, 1 stargate.gq, 1 @@ -113926,6 +114081,7 @@ starlinkz.tk, 1 starlux.cz, 1 starman.agency, 1 starmtech.fr, 1 +starmyworld.ga, 1 staroch.name, 1 starorusing.com, 0 starover.tk, 1 @@ -113953,6 +114109,7 @@ starskim.cn, 1 starsoft.io, 1 starsportstours.com, 0 starsub.com.au, 1 +start-knighki.gq, 1 start-nadlan.co.il, 1 start-school.online, 1 start.ag, 1 @@ -113962,12 +114119,14 @@ start2dance.tk, 1 startablog.tv, 1 startag.xyz, 1 startaninflatablebusiness.com, 1 +startbetter.tk, 1 startbiz.biz.id, 1 startbiz.co.id, 1 startbiz.my.id, 1 startbiz.web.id, 1 startekstil.ru, 1 startersiteweb.com, 1 +startgeophysical.ga, 1 starthubs.uk, 1 starti.com.ua, 1 startingent.be, 1 @@ -114031,11 +114190,15 @@ stastka.ch, 1 stasyan.ga, 1 staszic.waw.pl, 1 stat.ink, 1 +statcenter.tk, 1 state-of-body-and-mind.com, 1 statecollegemortgages.com, 1 +stated.gq, 1 statefundca.com, 1 statefunddirect.com, 1 +stateidea.ga, 1 statelibraryofiowa.gov, 1 +statelines.ga, 1 statelywork.com, 1 statemercantile.com.au, 1 staterun.tk, 1 @@ -114054,6 +114217,7 @@ stationa.ch, 0 stationary-traveller.eu, 1 stationaryengines.tk, 1 stationcharlie.co.za, 1 +stationmedia.tk, 1 stationstuinenbarendrecht.nl, 1 statisticalsurveys.com, 1 statistician-online.com, 0 @@ -114079,7 +114243,9 @@ statz.pl, 1 stau-a.de, 1 stauffer-media.net, 1 stavanger.kommune.no, 1 +stavinchains.tk, 1 stavnager.net, 1 +stavropol-news.ga, 1 staxflax.tk, 1 stay-curious.at, 1 stayby.me, 1 @@ -114102,6 +114268,7 @@ stbartholomewmanchester.org, 1 stbl.org, 1 stc-istok.com.ua, 1 stcable.net, 1 +stcatharinesromawolves.tk, 1 stccordoba.com, 1 stceciliakearny.org, 1 stcharlescountycsfamo.gov, 1 @@ -114133,12 +114300,14 @@ steamcarddelivery.com, 1 steamcars.be, 1 steamcleaning.expert, 1 steamcn.info, 1 +steamcrack.ga, 1 steamdb.info, 1 steamdeckinfo.org, 1 steamerrors.com, 1 steamgifts.com, 1 steamid.net, 1 steamid.tools, 1 +steamkeyget.ga, 1 steamlevelmarket.com, 1 steamold.com, 0 steamosaic.com, 1 @@ -114160,7 +114329,6 @@ steef389.eu, 1 steel-roses.de, 1 steelbeasts.org, 1 steelecountymn.gov, 1 -steelehollowvintage.com, 1 steelephys.com.au, 1 steelfencestlouis.com, 1 steelfirm.ga, 1 @@ -114199,6 +114367,7 @@ stefania.tk, 1 stefaniepetermann.eu, 1 stefaniharvilla.tk, 1 stefanknobel.ch, 1 +stefanolsdal.tk, 1 stefanorossi.it, 0 stefanovski.io, 1 stefanrusie.ro, 1 @@ -114230,6 +114399,7 @@ steinibox.de, 1 steinmassl.org, 1 steinmetz.cloud, 1 stekelenburg.me, 1 +steklein.de, 1 stekosouthamerica.com, 1 stelfox.net, 1 stelga.ca, 1 @@ -114252,6 +114422,8 @@ stelletjeafgebeuktemongolen.tk, 1 stelling.nl, 1 stellmacher.name, 1 stelovisual.pl, 1 +stels.ml, 1 +stels.tk, 1 stem16plus.gent, 1 stematechnologies.ga, 1 stembureauledenindenhaag.nl, 1 @@ -114298,6 +114470,7 @@ stephenlam.ca, 1 stephenperreira.com, 1 stephenreescarter.net, 1 stephenschirle.gq, 1 +stephenschirle.ml, 1 stephenschrauger.com, 1 stephenschrauger.org, 1 stephenscity.gov, 1 @@ -114328,6 +114501,7 @@ stereoamistadmomos.ml, 1 stereob.it, 1 stereochro.me, 0 stereoscopio.es, 1 +stereostudio.cf, 1 stereotyped.de, 1 sterilium.tk, 1 sterling.com, 1 @@ -114338,6 +114512,7 @@ stern-freunde.de, 1 stern.koeln, 1 sternadel.pl, 1 sternenbund.info, 1 +sterno.cf, 1 sternplastic.com, 1 sternsinus.com, 1 sterohouse.com, 1 @@ -114359,6 +114534,7 @@ steuerboard.org, 1 steuerkanzlei-edel.de, 1 steuern-recht-wirtschaft.de, 1 steuertipps-sonderausgaben.de, 1 +steve-mason.tk, 1 steve.kiwi, 1 stevebanks.info, 1 steveborba.com, 1 @@ -114376,6 +114552,7 @@ stevemonteyne.be, 1 steven-klix.de, 0 steven.photos, 1 stevenapate.com, 1 +stevenavaldez.tk, 1 stevenberg.net, 1 stevenbolgartersnakes.com, 1 stevendearstyne.com, 1 @@ -114412,6 +114589,7 @@ stevezone.in, 1 steviate.com, 1 steviate.de, 1 stevinson.org, 1 +stewards.tk, 1 stewart.tk, 1 stewonet.nl, 1 stewpolley.com, 1 @@ -114466,6 +114644,7 @@ stiebelservice.com.au, 1 stiebelstore.com.au, 1 stiehler-leipzig.tk, 1 stiff.wang, 1 +stifflersmom.ga, 1 stift-kremsmuenster.at, 1 stift-kremsmuenster.net, 1 stiftung-lq.ch, 1 @@ -114474,6 +114653,7 @@ stiftung-lq.net, 1 stiftunglq.com, 1 stigharder.com, 1 stigviewer.com, 1 +stihiya.tk, 1 stijlvol-wonen.com, 1 stijndv.com, 1 stijnodink.nl, 1 @@ -114507,6 +114687,7 @@ stinici.site, 1 stinkefingereinhorn.de, 1 stinkmemes.com, 1 stinsky.com, 1 +stinter.cf, 1 stintup.com, 0 stipanama.com, 1 stiphosting.nl, 1 @@ -114532,6 +114713,7 @@ stjosephri.org, 1 stjosephspringcity.com, 1 stjosephtownship.com, 1 stjscatholicchurch.org, 1 +stjude-ettekkar.tk, 1 stjustin.org, 1 stkeverneparishcouncil.org.uk, 1 stkevin-stbenedict.org, 1 @@ -114584,6 +114766,7 @@ stmosesbookstore.org, 1 stmsolutions.pl, 1 stmsouthcoventry.com, 1 stn.me.uk, 0 +stnews.ga, 1 stnguyen.net, 1 stnl.de, 0 stntrading.eu, 1 @@ -114602,11 +114785,13 @@ stockmaquinas.com.br, 1 stockmarkettoday.news, 1 stockpile.com, 1 stockslam.ga, 1 +stocksnews.tk, 1 stockstuck.com, 1 stockt-shirtdesigns.com, 1 stocktonengineering.co.uk, 1 stocktout.info, 1 stocktrader.com, 1 +stockway.tk, 1 stockx.com, 1 stockyards.com, 1 stocp.org, 1 @@ -114629,6 +114814,7 @@ stokrotkadelikatesy.pl, 1 stolarka.tk, 1 stolarstvi-jiriholy.cz, 1 stolbart.com, 1 +stolensun.tk, 1 stolin.info, 1 stolina.de, 1 stolkpotplanten.nl, 1 @@ -114637,6 +114823,7 @@ stollen-wurm.de, 1 stollenwurm.de, 1 stolpe.tk, 1 stolpe5674.tk, 1 +stolpersteine-dithmarschen.tk, 1 stolpi.is, 0 stoltz-it.de, 1 stomaline.com.ua, 1 @@ -114644,7 +114831,9 @@ stomatolog-czestochowa.cf, 1 stomatolog-czestochowa.ga, 1 stomatolog-czestochowa.gq, 1 stomatolog.cf, 1 +stomatolog.ga, 1 stomatologiya.gq, 1 +stomatologiya.ml, 1 stomproced.ro, 1 stomt.com, 1 stoneagehealth.com.au, 1 @@ -114666,9 +114855,11 @@ stonemain.eu, 1 stonemanbrasil.com.br, 1 stoneocean.net, 1 stoneproperty.ie, 1 +stonerwitch.tk, 1 stonesgarden.pl, 1 stonetribute.tk, 1 stonewallwcidtx.gov, 1 +stoneworld.ga, 1 stonewuu.com, 1 stoningtonboroughct.gov, 1 stonystratford.org, 1 @@ -114691,6 +114882,7 @@ stoomtreinreizen.org, 1 stop-activ.ga, 1 stop-bankrotstvu.ru, 1 stop-microsoft.org, 1 +stop-nikotin.tk, 1 stop-russia.tk, 1 stop.pe, 1 stopaggressivedriving.com, 1 @@ -114698,6 +114890,7 @@ stopbullying.gov, 1 stopforumspam.com, 1 stopfraud.gov, 1 stoph.at, 1 +stopka.tk, 1 stopkadr-studio.ru, 1 stoplossoff.tk, 1 stopmetbellen.be, 1 @@ -114708,14 +114901,17 @@ stopransomware.gov, 1 stoprat.fr, 1 stopsmoke.gq, 1 stopssherdenking.tk, 1 +stopsvet.ml, 1 stopthemoss.com, 1 stoptheperio.com, 1 stopthethyroidmadness.com, 1 stopthinkconnect.jp, 1 stoptrading.co.uk, 1 +stopves.tk, 1 stopvirus.in, 1 stor-guard.com, 1 storage-base.de, 1 +storage-books.gq, 1 storage-in-motion.com, 1 storageideas.uk, 1 storageshedsnc.com, 1 @@ -114761,6 +114957,7 @@ storm-news.tk, 1 stormairsoft.tk, 1 stormboost.cz, 1 stormdamages.claims, 1 +stormestudios.tk, 1 stormfest.tk, 1 stormhub.ml, 1 stormi.io, 1 @@ -114777,6 +114974,7 @@ storyark.eu, 1 storybuilder.me, 1 storycollective.film, 1 storycollective.nl, 1 +storycycle.tk, 1 storyland.ie, 1 storyliebe.de, 1 storymalayalam.com, 1 @@ -114805,6 +115003,7 @@ stpatricksmapleridge.ca, 1 stpatsschool.org, 1 stpaulcatholicchurcheastnorriton.net, 1 stpaulsbullville.org, 1 +stperseo.tk, 1 stpetersresidence.org, 0 stphilipneripreschool.com, 1 stpioparish.com, 1 @@ -114830,9 +115029,11 @@ straightnude.com, 1 strail-english.jp, 1 strajnar.si, 1 straka.name, 1 +strakh.tk, 1 strakonak.cz, 1 stralenpoedercoaten.nl, 1 stralingsonzin.com, 1 +strana-snov.tk, 1 strana.ga, 1 strandedinotter.space, 1 strandfuif.tk, 1 @@ -114854,6 +115055,7 @@ strangemusicbox.com, 1 strangemusichollywood.com, 1 strangemusicinc.com, 1 strangemusicinc.net, 1 +strangeonline.tk, 1 strangerthanusual.de, 1 strangestfacts.cf, 1 strangevip.com, 1 @@ -114867,6 +115069,7 @@ straphael-holyangels.com, 1 strappazzon.xyz, 1 strashtrading.com, 1 strass-sur-mesure.fr, 1 +strassberger.tk, 1 strata-gallery.com, 1 strate.io, 1 strategery.io, 1 @@ -114913,8 +115116,10 @@ strawberrydreadlocks.tk, 1 strawpoll.fi, 1 stray-soul.com, 1 straydio.co.uk, 1 +straylight.tk, 1 strcat.ga, 1 strd.co, 1 +stream-box.tk, 1 stream.gifts, 1 streamblur.net, 1 streamchan.org, 1 @@ -114947,6 +115152,8 @@ streemprn.xyz, 1 streengis.tk, 1 streepjesenstipjes.nl, 1 street-clic.tk, 1 +street-hoops.tk, 1 +street-legal.tk, 1 street-medics.fr, 1 street-race.tk, 1 street-racing.tk, 1 @@ -114965,6 +115172,7 @@ streetsalad.tk, 1 streetshirts.co.uk, 1 streetspirit.tk, 1 streetspotr.com, 1 +streetstunters.tk, 1 streetvendors.africa, 1 streetview.wien, 1 streetwitnessing.org, 1 @@ -114999,6 +115207,7 @@ strikers.cf, 1 strikers.futbol, 1 strikevectorex.com, 1 strikezonesalessystems.com, 1 +strings.cf, 1 stringtoolbox.com, 1 stripe.com, 1 stripe.network, 1 @@ -115019,10 +115228,12 @@ stroccounioncity.org, 1 stroeder.com, 1 stroeder.de, 1 stroeerdigital.de, 1 +stroginopk.ga, 1 strogov.me, 1 strogova.me, 1 stroifenix.ru, 1 stroigid.tk, 1 +stroimsami.tk, 1 stroimvse.ml, 1 stroiproect.tk, 1 strojmaster.tk, 1 @@ -115044,6 +115255,7 @@ strongpassword.club, 1 strongprorealty.com, 1 strongrandom.com, 0 strongsalpinesucculents.com, 1 +strongtomorrow.tk, 1 strongtowerpc.com, 1 stroomacties.nl, 1 stroopwafel.ch, 1 @@ -115055,10 +115267,13 @@ strotmann.de, 1 stroudtimes.com, 1 strousberg.net, 1 stroy-klg.ru, 1 +stroyca.tk, 1 +stroydvor.tk, 1 stroyka-iz-brusa.ru, 1 stroykomi.tk, 1 stroylandiya.ru, 1 stroymart.bg, 1 +stroynet.ml, 1 stroyservice-tver.ru, 1 strozik.de, 1 strrl.com, 1 @@ -115105,6 +115320,7 @@ stubbmail.de, 1 stubentiga.de, 1 stuckateur-bruno.de, 0 stucki-bagger.ch, 1 +stuckwithme.tk, 1 stucydee.nl, 1 stud-lib.ml, 1 studay.fr, 1 @@ -115150,8 +115366,10 @@ studio-architetto.com, 1 studio-fotografico.ru, 1 studio-impress.com, 1 studio-jaguar.ru, 1 +studio-mir.tk, 1 studio-n.pl, 1 studio-np.ru, 1 +studio32.tk, 1 studio4101.ga, 1 studio413.net, 1 studio54.tk, 1 @@ -115159,6 +115377,7 @@ studio678.com, 0 studio91.tk, 1 studioadevents.com, 1 studioamai.be, 1 +studioandrew.tk, 1 studioavvocato.milano.it, 1 studioavvocato.roma.it, 1 studioavvocato24.it, 1 @@ -115172,11 +115391,13 @@ studiodoprazer.com.br, 1 studiodpe.com, 1 studiodriban.com, 0 studioelo.com.br, 1 +studioevent.tk, 1 studiofpvet.it, 1 studiogears.com, 1 studiograou.com, 1 studiohelder.fr, 0 studiohomebase.amsterdam, 1 +studiolegalemarchi.tk, 1 studiolegalepaternostro.it, 1 studiolu.tk, 1 studiolupotti.it, 1 @@ -115205,6 +115426,7 @@ studipro-marketing.fr, 1 studipro.fr, 1 studisys.net, 1 studium.cz, 1 +studius.gq, 1 studiweb.pro, 1 studlan.no, 1 studport.rv.ua, 1 @@ -115213,6 +115435,7 @@ studsovet.tk, 1 studuj.digital, 1 studujdigital.cz, 1 studujdigital.eu, 1 +studwebs.ml, 1 study-support-beans.com, 1 studyarabic.info, 1 studyarch.tk, 1 @@ -115230,6 +115453,7 @@ studyportal.net, 1 studyservice.net, 1 studysive.com, 1 studyspanish-lapaz-bolivia.tk, 1 +studystack.ml, 1 studytactics.com, 1 studytour.ml, 1 studytube.nl, 1 @@ -115257,10 +115481,12 @@ stunningwarsaw.com, 1 stunningwroclaw.com, 1 stunov.ga, 1 stunov.gq, 1 +stuntman.ga, 1 stuntman.tk, 1 stuntmen.xyz, 1 stuntx-server.ga, 1 stupendousproduce.com, 1 +stuphid.tk, 1 stupidcupid.tk, 1 stupidest.org, 1 stupidstatetricks.com, 1 @@ -115289,6 +115515,7 @@ stwola.eu, 1 stworzwirusa.tk, 1 stx.ie, 1 stygium.net, 0 +styilishdress.tk, 1 stylaq.com, 1 stylearray.com, 1 stylebajumuslim.com, 1 @@ -115302,23 +115529,27 @@ styledbysally.com.au, 1 styleelite.tk, 1 styleetvieperfumes.com, 1 styleflow.nl, 1 +stylemall.tk, 1 stylepixo.com, 1 stylerecap.com, 1 stylesaag.com, 1 stylesinmotion.co, 1 stylesound.tk, 1 +styletheweb.cf, 1 styletron.org, 1 stylett.ru, 1 stylewe.com, 1 stylewish.me, 1 stylezutra.com, 1 stylidafm.gr, 1 +stylingstudio.ga, 1 stylistbazaar.com, 0 stylle.me, 1 styllussports.com.br, 1 stylodessens.fr, 1 styloeart.com, 1 stylspire.com, 1 +styplon.cf, 1 stypr.com, 1 styxxx.de, 1 stzur.com, 1 @@ -115334,16 +115565,21 @@ suaudeau.org, 1 suayslim.com, 1 sub-net.at, 1 sub.media, 0 +subahankamal.tk, 1 subalert.com, 1 subanelvolumen.tk, 1 subarupartsdeal.com, 1 +subarus.tk, 1 subastasdecarros.net, 1 +subbacultcha.tk, 1 subbl.co, 1 subdev.org, 1 subdivider.tk, 1 subestan.tk, 1 +subgirl.ga, 1 subic.ga, 1 subilarch.net, 1 +subject-barred.cf, 1 subject-barred.ga, 1 subjecto.com, 0 subjekty.tk, 1 @@ -115358,8 +115594,10 @@ subliminalrecordingsystem.com, 1 submedia.tv, 0 submeet.vet, 1 submelon.tech, 1 +submit-link.cf, 1 submiteads.tk, 1 submityou-rlink.tk, 1 +submityour-link.tk, 1 subology.co, 1 suborbital.io, 1 subpage.tk, 1 @@ -115372,6 +115610,7 @@ subsoft.tk, 1 substances.be, 1 substitutealert.com, 1 substore.co.il, 1 +subteen.gq, 1 subterra.tk, 1 subtitry.ru, 1 subtituleros.tk, 1 @@ -115384,10 +115623,14 @@ suburbanurologic.com, 1 suburbanweldingandsteel.com, 1 suburbass.tk, 1 suburbservice.net, 0 +subversionnews.tk, 1 subvetcustoms.com, 1 +subwaysurfers.tk, 1 +subwaytrain.tk, 1 succ.in, 1 succesprojekter.dk, 1 successbox.vn, 1 +successclicker.tk, 1 successdeliv.com, 1 successemails.ml, 1 successful-online-business.com, 1 @@ -115408,6 +115651,7 @@ sucsses.ga, 1 sucsses.gq, 1 sucyshop.fr, 1 sudabaus.com, 1 +sudak-turizm.tk, 1 sudametrica.tk, 1 sudanell.tk, 1 sudanindependent.com, 1 @@ -115454,6 +115698,7 @@ sugarondemand.com, 1 sugaropencloud.eu, 1 sugaropencloud.uk, 1 sugarpiano.com, 1 +sugarroll.ml, 1 sugarsalted.com, 1 sugarshin.net, 1 sugartownfarm.com, 1 @@ -115464,11 +115709,13 @@ suggea.com, 1 suggestim.ch, 0 sugoicraft.tk, 1 sugos.cf, 1 +sugos.ga, 1 sugos.gq, 1 sugos.ml, 1 suhaildawood.com, 1 suhost.com.br, 1 suicide.gq, 1 +suicidegirls.cf, 1 suicidepreventioncenter.tk, 1 suike.com, 1 suikerspinnetje.nl, 1 @@ -115490,14 +115737,19 @@ sukker-oaxaca.com, 1 sukoyaka-labo.com, 1 sukoyakapp.com, 1 sukrie.net, 1 +sukruarslan.tk, 1 suksit.com, 0 sulabs.org, 1 sulavius.tech, 1 sulawesi-adventure.tk, 1 suleeka.tk, 1 sulek.eu, 1 +sulemanmalik.tk, 1 +sulemanquotes.tk, 1 +suleri.tk, 1 sulfegate.org, 1 sulishospital.com, 1 +sulkmen.tk, 1 sullivancountypa.gov, 1 sulman4paf.tk, 1 sulphurspringsar.gov, 1 @@ -115519,6 +115771,7 @@ sumatrabarat.tk, 1 sumatraselatan.cf, 1 sumatraselatan.ga, 1 sumatraselatan.gq, 1 +sumatraselatan.ml, 1 sumatraselatan.tk, 1 sumatrautara.cf, 1 sumatrautara.ga, 1 @@ -115526,10 +115779,15 @@ sumatrautara.gq, 1 sumatrautara.ml, 1 sumatrautara.tk, 1 sumatriptan365.tk, 1 +sumbur.ga, 1 sumcrevillent.tk, 1 sumecho.com, 1 +sumguy.com, 1 +sumhost.ml, 1 +sumisa.cf, 1 sumit.blog, 1 sumit.sh, 1 +sumitbot.ga, 1 sumitchahal.blog, 1 sumitchahal.com, 1 sumiyakimatsu.com, 1 @@ -115545,6 +115803,7 @@ summermc.cc, 1 summermovies.nyc, 1 summerslandingwr.com, 1 summerstylessalon.com, 1 +summing.ga, 1 summit-humanpotential.com, 1 summit-level.ru, 1 summitcountyboe.gov, 1 @@ -115554,6 +115813,7 @@ summitescorts.com, 1 summiteyekc.com, 1 summitlighthousela.org, 1 summitseodesign.com, 1 +sumochki.tk, 1 sumppumpchicagoil.com, 1 sumran.in, 1 sumter.info, 1 @@ -115561,6 +115821,7 @@ sumtercountysc.gov, 1 sumthing.com, 1 sumutoday.com, 1 sun-beach.com.ua, 1 +sun-host.ml, 1 sun-lounge.be, 1 sun-studio.tk, 1 sun-wellness-online.com.vn, 1 @@ -115577,12 +115838,14 @@ sunbeltsolomon.com, 1 sunbike-driver.com, 1 sunbirdgrove.com, 1 sunbit.com, 1 +sunblind.tk, 1 sunburstdata.com, 1 sunbury.xyz, 1 sunby.org, 1 suncanary.tk, 1 suncat.tk, 1 sunchasercats.com, 1 +sunchild.ml, 1 suncity288.com, 1 suncity288.net, 1 suncity8118.cn, 1 @@ -115605,6 +115868,7 @@ sundanceusa.com, 1 sunday.pm, 1 sundayfundayjapan.com, 1 sundhedsvejen.dk, 1 +sundiel.tk, 1 suneilpatel.com, 1 sunfeathers.net, 1 sunfiregold.com, 1 @@ -115614,6 +115878,7 @@ sunflyer.cn, 0 sunfox.cz, 1 sunfulong.blog, 1 sunfulong.me, 1 +sungalsses.ml, 1 sunglassstyle.co.nz, 1 sungreen.info, 1 sunhaoxiang.net, 1 @@ -115621,12 +115886,14 @@ sunhills23.ru, 1 suniru.com, 0 sunjiutuo.com, 1 sunjob.tk, 1 +sunkar.tk, 1 sunkavallymd.com, 1 sunkimurology.com, 1 sunlit.cloud, 1 sunn.ie, 1 sunnuslight.com, 1 sunny.co.uk, 1 +sunnyhome.tk, 1 sunnylyx.com, 1 sunnynetworks.net, 1 sunnyoxygen.xyz, 1 @@ -115659,6 +115926,7 @@ sunsetweb.fr, 1 sunsetwx.com, 1 sunshilin.tk, 1 sunshine-cleaners.com.au, 1 +sunshinefrontier.tk, 1 sunshinelife.tk, 1 sunshinelocksmith.com, 1 sunshinelogix.vn, 1 @@ -115691,16 +115959,21 @@ suomiheraa.com, 1 suomika.pl, 1 suourl.com, 0 supa.sexy, 1 +supdajuice.tk, 1 supedio.com, 1 supedium.com, 1 supedium.link, 1 supedium.shop, 1 supel.cf, 1 supel.ga, 1 +supel.gq, 1 supel.ml, 1 super-baik.tk, 1 +super-boy.tk, 1 super-erotica.ru, 1 super-gs.jp, 1 +super-knighki.gq, 1 +super-lolitas.tk, 1 super-net.tk, 1 super-o-blog.com, 1 super-trophy.de, 1 @@ -115709,6 +115982,7 @@ super365.info, 1 superaficionados.com, 1 superalem.org, 1 superbart.nl, 1 +superbaskirskij-med.tk, 1 superbdistribute.com, 1 superbestpalsclub.tk, 1 superbir.net, 1 @@ -115740,6 +116014,7 @@ supercraft.shop, 1 supercursosonline.store, 1 superdaddy.club, 1 superdeals.cf, 1 +superdolly.cf, 1 superdolly.ga, 1 superdolly.gq, 1 superdolly.ml, 1 @@ -115757,16 +116032,20 @@ superfluous.tk, 1 superfly.tk, 1 superfoodsexplained.com, 1 superform-staging.herokuapp.com, 1 +superfury.tk, 1 superglidewardrobes.co.uk, 1 supergmtransport.com.au, 1 supergood.ga, 1 +supergoods.tk, 1 supergrandmasternetwork.com, 1 supergreentonik.com, 1 +supergroup.tk, 1 superguide.com.au, 1 superhappiness.com, 1 superhappyfun.club, 1 superherba.cz, 1 superherofactory.hu, 1 +superhits.gq, 1 superhome.com.au, 1 superhumanendurance.ga, 1 superidea.in, 1 @@ -115775,6 +116054,7 @@ superiordetail.tk, 1 superiorinnercore.game-host.org, 1 superiorinngrandmarais.com, 1 superiormanifestations.com, 1 +superiormusic.tk, 1 superioroptical.com, 1 superioropticalva.com, 1 superiorseamlessinc.com, 1 @@ -115782,22 +116062,28 @@ superiorseating.com, 1 superis.eu, 1 superklima.ro, 0 superkonsult.se, 1 +superkrasota.tk, 1 superlight.tk, 1 superlisa.nl, 1 superlog.tk, 1 +superlol.tk, 1 supermae.pt, 1 supermagna.tk, 1 +supermanera.tk, 1 supermarkets.ga, 1 +supermart.tk, 1 supermarx.nl, 1 supermedia.cool, 1 supermercadosdia.com.ar, 1 supermercato24.it, 1 supermil.ch, 1 +supermini-games.tk, 1 supermustang.tk, 1 supern0va.net, 0 supernatural-fans.tk, 1 supernaturalbrand.com, 1 supernaut.info, 1 +supernogi.ga, 1 supernovicebaker.com, 1 superops.ai, 1 superpase.com, 1 @@ -115809,6 +116095,9 @@ supersandro.de, 1 superseguros.gob.do, 1 superservers.ml, 1 supershrooms.nl, 1 +supersisi.cf, 1 +supersisi.ml, 1 +superskidki.cf, 1 supersocial.net, 1 supersole.net, 0 supersolenoid.tk, 1 @@ -115816,6 +116105,7 @@ supersonicsoft.com, 1 superspeller.ng, 1 superstargossip.com, 1 superstarhost.tk, 1 +superstart.tk, 1 supersteosbouncycastles.com, 1 superstone.diamonds, 1 superstropdas.nl, 1 @@ -115830,6 +116120,7 @@ supervasan.se, 1 supervets.com.au, 1 superway.es, 1 superwhoopi.tk, 1 +superzaim.ga, 1 supfood.cz, 1 supioka.com, 1 suplementasi.com, 1 @@ -115842,6 +116133,7 @@ suplments.pt, 1 supmil.net, 1 suppdeals.eu, 1 supperclub.net, 1 +supplement.cf, 1 supplementaanbiedingen.nl, 1 supplementalconditions.com, 1 supplementpolice.tk, 1 @@ -115865,11 +116157,13 @@ suppos-net.tk, 1 supra.tf, 1 supracube.com, 1 supraelco.com, 1 +suprax365.tk, 1 suprem.biz, 0 suprem.ch, 0 supremaa.com, 1 supremacrypt.com, 1 supreme-council.me, 1 +supreme-court.tk, 1 suprememale.tk, 1 supremestandards.com, 1 supriville.com.br, 1 @@ -115894,6 +116188,7 @@ surfnetparents.com, 1 surfocal.com, 0 surfocal.net, 1 surfoleon.tk, 1 +surfseo.ml, 1 surfseo.tk, 1 surfsm2.ddns.net, 1 surgeholdinggroup.com, 1 @@ -115905,6 +116200,7 @@ surgispa.net, 1 surialternat.tk, 1 suricate.ru, 1 surikov.tk, 1 +suriname.tk, 1 surl.win, 1 surma.tk, 1 surmoms.com, 1 @@ -115917,6 +116213,7 @@ surpreem.com, 1 surpriz-net.tk, 1 surprizeme.ru, 1 surrealdb.com, 1 +surrealistas.tk, 1 surreyheathyc.org.uk, 0 surrogacyaccount.com, 1 surrycountync.gov, 1 @@ -115940,6 +116237,7 @@ survivebox.net, 1 survivingmesothelioma.com, 1 suryayurveda.com, 1 susajja.com, 1 +susanagomez.tk, 1 susanbpilates.co, 1 susanbpilates.com, 1 susanmmeyersauthor.com, 1 @@ -115949,10 +116247,12 @@ susanvelez.com, 1 susbit.com, 1 susconam.org, 1 suseki.ga, 1 +sushi-sakura.tk, 1 sushi.roma.it, 1 sushibesteld.nl, 1 sushifrick.de, 1 sushikatze.de, 1 +sushilmedicos.tk, 1 susiestoddart.tk, 1 suska.tk, 1 susoft.tk, 1 @@ -115974,6 +116274,7 @@ sustekova.eu, 1 susthx.com, 1 susumulus.ml, 1 sut-b.de, 1 +sutabi.tk, 1 suternetwork.ch, 1 suth.jp, 1 sutherlinoregon.gov, 1 @@ -115996,6 +116297,7 @@ suwcountyfl.gov, 1 suwebcreativa.com, 1 suzannecooper.com, 1 suzannejauchius.com, 1 +suzdalgrad.cf, 1 suzi3d.com, 1 suziekovner.com, 1 suziepachecoart.com, 1 @@ -116033,6 +116335,7 @@ svarovani.tk, 1 svatba.cf, 1 svatba.ml, 1 svatbamisiaviti.tk, 1 +svatyjur.tk, 1 svauto.ks.ua, 1 svc-sitec.com.mx, 1 svc-sitec.mx, 1 @@ -116062,18 +116365,25 @@ svenpeter.info, 1 svenpeter.me, 1 svenpeter.net, 1 svenpeter.org, 1 +svenskakyrkansunga.tk, 1 svenskapsalmer.se, 1 svenskarnaochinternet.se, 1 svenskdam.se, 1 svenskmediabevakning.se, 1 svensson-generators.be, 1 sverdlov.spb.ru, 1 +sverdlovsk.gq, 1 sverdlovsk.ml, 1 +sverdlovsk.tk, 1 +sverlo.cf, 1 +svet.tk, 1 svetandroida.cz, 1 svetapublic.com, 1 svetila.com, 1 +svetlanamamedova.tk, 1 svetlayarus.tk, 1 svetlilo.com, 1 +svetlograd.tk, 1 svetoch.ga, 1 svetoch.tk, 1 svetodiod.gq, 1 @@ -116358,6 +116668,7 @@ sycorr.com, 1 sydgrabber.tk, 1 sydney.dating, 1 sydneyaustralia.tk, 1 +sydneybamboo.com.au, 1 sydneybusinessweb.com.au, 1 sydneychillies.com.au, 1 sydneyhelicopters.com.au, 1 @@ -117214,6 +117525,7 @@ tanz-kreativ.de, 0 tanz.info, 1 tanzania-chameleon.ga, 1 tanzanianfilms.tk, 1 +tanzhijun.com, 1 tanzpartner.tk, 1 tao-energie.tk, 1 taoaworld.com, 1 @@ -117821,7 +118133,6 @@ teboorthodontics.com, 1 tebothetooth.com, 1 tebsa.org, 1 tebsonati.tk, 1 -tebuscotrabajo.com, 0 tec24.ga, 1 tec3000.ch, 0 tecart-cloud.de, 1 @@ -118372,7 +118683,6 @@ telka-online.tk, 1 telkom.co.id, 1 telkomakses.co.id, 1 tellaresdo.com, 1 -tellerify.com, 1 tellet.tel, 1 telling-voices.tk, 1 telling.xyz, 1 @@ -118973,7 +119283,6 @@ thalhammer.it, 1 thalia.nu, 1 thalikkunushivatemple.tk, 1 thalliman.com, 1 -thallinger.me, 1 thalmann.fr, 0 thambaru.com, 1 thamesfamilydentistry.com, 1 @@ -119147,6 +119456,7 @@ thebeeyard.org, 1 thebeginningviolinist.com, 1 thebengalinews.tk, 1 theberries.tk, 1 +thebertian.com, 1 thebestfun.co.uk, 1 thebestlaos.ga, 1 thebestnews.ga, 1 @@ -119191,7 +119501,6 @@ theboats.com, 1 theboats.de, 1 theboats.online, 1 theboats.pro, 1 -theboats.site, 1 thebobcoin.io, 1 thebodylanguageguide.tk, 1 thebodyshop.bg, 1 @@ -119766,6 +120075,7 @@ theo546.ovh, 1 theobg.co, 1 theobora.fr, 1 theobromos.fr, 0 +theoc.co, 1 theoc4ever.tk, 1 theocharis.org, 1 theocjournal.tk, 1 @@ -120708,7 +121018,6 @@ tienerdienst-johanneskapel.tk, 1 tienic.com, 1 tiens-ib.cz, 1 tier5industries.com, 1 -tierarzt-karlsruhe-durlach.de, 1 tierarztpraxis-illerwinkel.de, 1 tierarztpraxis-weinert.de, 1 tiergear.com.au, 1 @@ -121698,7 +122007,6 @@ tonguetechnology.com, 1 toni-dis.ch, 0 toniduarte.tk, 1 tonifarres.net, 1 -tonight.de, 1 tonik.tk, 1 tonimorena.net, 1 tonkawaok.gov, 1 @@ -121734,7 +122042,7 @@ too.com.ua, 1 too.gy, 1 too.tl, 1 toobi.co.uk, 1 -toobug.net, 1 +toobug.net, 0 tooelecountyvotes.gov, 1 toofab.com, 1 tookan.tech, 1 @@ -121836,7 +122144,6 @@ topanimecharacters.com, 1 topanlage.de, 1 toparkinfo.hu, 1 topas.tk, 1 -topask.ru, 1 topaxi.codes, 1 topbestsellerproduct.com, 1 topbloc.com, 1 @@ -121910,7 +122217,6 @@ toplistforum.tk, 1 toplockshop.com, 1 topmanitas.es, 1 topmarketplace.com.br, 1 -topmejores.org, 1 topmmogames.org, 1 topmoods.com, 1 topmotoric.com, 1 @@ -122193,6 +122499,7 @@ touchable.gq, 1 touchanddraw.tk, 1 touchboobs.ml, 1 touchdown.co, 1 +touche-international.com, 1 touchka.ga, 1 touchmark.tk, 1 touchoflife.in, 1 @@ -122294,6 +122601,7 @@ towessi.tk, 1 town-night.jp, 1 townforge.net, 1 townfremontwi.gov, 1 +townhouseregister.com.au, 1 townifi.ga, 1 townlaretsota.gq, 1 townofadamswi.gov, 1 @@ -122432,7 +122740,6 @@ toyduck.ga, 1 toymagazine.com.br, 1 toymania.de, 1 toymarket.tk, 1 -toyokawa-fan.com, 1 toyonut.co.jp, 1 toyopac.com, 1 toyota-gabelstapler.info, 1 @@ -123124,7 +123431,7 @@ trends-news.tk, 1 trends2day.com, 1 trendsettersre.com, 1 trendsuites.co, 1 -trendtesettur.com, 1 +trendtesettur.com, 0 trendus.no, 1 trendware.de, 1 trendycrowds.com, 1 @@ -123643,6 +123950,7 @@ truthdancer.com, 1 truthmessages.pw, 1 truthsayer.tk, 1 truthsocial.com, 1 +trutrip.co, 1 truvayangin.tk, 1 truvisory.com, 1 trux.tk, 1 @@ -123811,6 +124119,7 @@ tt9721.com, 1 tt9728.co, 1 tt9799.com, 1 ttb.gov, 1 +ttbonline.gov, 1 ttc-birkenfeld.de, 1 ttcak.ddns.net, 1 ttcf.ca, 1 @@ -123868,7 +124177,6 @@ tubs4fun.co.uk, 1 tubuenpedido.com, 1 tubul.net, 1 tubuscador.tk, 1 -tubuscadordeempleo.com, 0 tucarora.tk, 1 tucasacanadevi.com.mx, 1 tucepihotelalga.com, 1 @@ -124120,6 +124428,7 @@ turnover.cf, 1 turobot.casa, 1 turoktv.org, 1 turpinpesage.fr, 1 +tursiae.org, 1 turteka.com, 1 turtle.ai, 0 turtleduckstudios.com, 1 @@ -124228,6 +124537,7 @@ tv.kg, 1 tv2vie.org, 0 tvabullarbro.tk, 1 tvaerialsmanchester.com, 1 +tvatomic.com, 1 tvbracketman.co.uk, 1 tvcal.net, 1 tvchannelslive.tk, 1 @@ -124419,6 +124729,7 @@ ty587.com, 1 ty593.com, 1 ty5998.com, 1 ty613.com, 1 +ty632.com, 1 ty637.com, 1 ty650.com, 1 ty679.com, 1 @@ -124428,6 +124739,7 @@ ty716.com, 1 ty723.com, 0 ty736.com, 1 ty739.com, 1 +ty750.com, 1 ty756.com, 1 ty7788.cc, 1 ty785.com, 1 @@ -125259,7 +125571,6 @@ unisunvn.com, 1 unisyssecurity.com, 1 unit-soft.com, 0 unit15.net, 1 -unit3d.site, 1 unit7jazz.org, 1 unitanzania.com, 1 unite-ka.de, 1 @@ -126250,6 +126561,7 @@ valasi.eu, 1 valassis.com, 1 valcano-krd.ru, 1 valcano.ru, 1 +valdecaballeros.tk, 1 valdega.org, 1 valdelcubo.tk, 1 valdifunes.com, 1 @@ -126333,6 +126645,7 @@ vallejoca.gov, 1 valleyautofair.com, 1 valleycountyne.gov, 1 valleydalecottage.com.au, 1 +valleyofdeath.tk, 1 valleyradiologypad.com, 1 valleyradiologyufe.com, 1 valleyshop.ca, 1 @@ -126350,6 +126663,7 @@ valorem-tax.ch, 0 valoremtax.ch, 0 valoremtax.com, 0 valorizofficial.com, 1 +valparaiso.tk, 1 valpareso.tk, 1 valphenn.blue, 1 valsenales.it, 1 @@ -126414,6 +126728,7 @@ vancouverwademolition.com, 1 vancouverwaseo.org, 1 vandaalen.email, 1 vandalfsen.me, 1 +vandals.ml, 1 vandam.io, 1 vandegriftplasticsurgery.com, 1 vandemeent.eu, 1 @@ -126438,6 +126753,7 @@ vandortgroep.nl, 1 vandrielschoenen.nl, 1 vandyhacks.org, 1 vanesaleiro.tk, 1 +vanessaamorosi.tk, 1 vanessabalibridal.com, 1 vanessaglendagarcia.tk, 1 vanessarivas.com, 1 @@ -126455,6 +126771,7 @@ vanhaos.com, 1 vanhatten.com, 1 vanheede.com, 1 vanhelsing.ml, 1 +vanhelsing.tk, 1 vanherle-dakdichting.be, 1 vanhoudt-usedcars.be, 1 vanhoutte.be, 0 @@ -127364,6 +127681,7 @@ videovt.tk, 1 videownload.com, 1 videozv.tk, 1 viderma.com.br, 1 +videt-son.cf, 1 videt-son.ml, 1 videt-son.tk, 1 vidiobokep.xyz, 1 @@ -127442,8 +127760,10 @@ vietnamvisa.cf, 1 vietnamvisa.ga, 1 vietnamwomenveterans.org, 1 vieux.pro, 1 +vievolution.tk, 1 view-page-source.com, 1 viewbook.com, 1 +viewer.ga, 1 viewey.com, 1 viewflix.win, 1 viewgardencentre.co.uk, 1 @@ -127482,6 +127802,8 @@ viilup.com, 1 viirujateippi.fi, 1 viitanen.xyz, 1 vijay-international.com, 1 +vijayam.ml, 1 +vijaymishra.tk, 1 vijoe.org, 1 vijverbenodigdheden.nl, 1 vik.im, 1 @@ -127518,6 +127840,7 @@ vilabiamodas.com.br, 1 vilablancasanxenxo.com, 1 vilafloridacapivari.com.br, 1 vilafrancaeagles.tk, 1 +vilamarija.tk, 1 vilantice.cz, 1 vilavilma.si, 1 vilavyhlidka.cz, 1 @@ -127530,6 +127853,7 @@ vilgain.com, 1 vilhe.com, 1 vilhe.fi, 1 vilhelmjunnila.fi, 1 +vilife.tk, 1 viliravnjak.tk, 1 viliv.com.co, 1 villa-christina.com, 1 @@ -127540,8 +127864,10 @@ villa-romantica-zillertal.at, 1 villa-toscana.berlin, 1 villablancaluarca.es, 1 villablino.tk, 1 +villacarralon.tk, 1 villadelprado.tk, 1 villaditirano.tk, 1 +villaespanola.tk, 1 villafiore.com.br, 1 villafrancis.org.sg, 1 villagecardshop.co.uk, 1 @@ -127594,6 +127920,7 @@ villakarma.at, 1 villakiralik.com, 1 villalmanzo.tk, 1 villamenty.com, 1 +villanew.tk, 1 villapads.com, 1 villaparkil.gov, 1 villapiknik.tk, 1 @@ -127604,6 +127931,7 @@ villasenor.online, 1 villasfinistere.fr, 1 villasforsale-bali.com, 1 villasintrabali.com, 1 +villaumbrales.tk, 1 villavaltava.fi, 1 villaville.com, 1 villawirz.it, 1 @@ -127634,10 +127962,12 @@ vimbom.tk, 1 vimeo.com, 1 vimeosucks.nyc, 1 vimexx.nl, 1 +vimka.gq, 1 vimoksa.com, 1 vimworld.com, 1 vinacocha.com, 0 vinarstvimodryhrozen.cz, 1 +vinaygakhar.tk, 1 vinaygarg.com, 1 vinc.me, 1 vinc.name.tr, 1 @@ -127648,6 +127978,7 @@ vincentdame.net, 1 vincenticosmeticsurgery.tk, 1 vincentiliano.tk, 1 vincentpancol.com, 1 +vincentpo.tk, 1 vincentsimon.de, 1 vincentwolsink.nl, 0 vinceracing.tk, 1 @@ -127678,6 +128009,7 @@ vineethavarma.com, 1 vinepower.co.nz, 1 vineripenutrition.com, 1 vinesauce.info, 1 +vineta.tk, 1 vinetalk.net, 1 vinetech.co.nz, 1 vineyard-wash.com, 1 @@ -127699,6 +128031,7 @@ vinnie.gq, 1 vinny.tk, 1 vinnyvidivici.com, 1 vinodoc.cz, 1 +vinohradiv.tk, 1 vinokourovnet.tk, 1 vinokurov.tk, 1 vinolli.de, 1 @@ -127730,9 +128063,11 @@ vinumenu.com, 1 vinyl-digital.com, 1 vinylbasement.tk, 1 vinylfencestlouis.com, 1 +vinzer.tk, 1 vinzite.com, 1 viocleannettoyage.com, 1 violarenate.com, 1 +violetfairy.tk, 1 violetraven.co.uk, 1 violettecleaning.be, 1 violin4fun.nl, 1 @@ -127743,10 +128078,12 @@ vionity.co, 1 viosey.com, 1 vip-6132.com, 1 vip-agency-escort.com, 1 +vip-banner.tk, 1 vip-escort-agency.com, 1 vip-it.pl, 1 vip-moda.ga, 1 vip-sauna.tk, 1 +vip-soski.tk, 1 vip-ssl.com, 1 vip-transfer.by, 1 vip.de, 1 @@ -127774,6 +128111,7 @@ viphackers.tk, 1 vipi.es, 1 vipkit.com, 1 vipku.ru, 1 +viplata-mgnovenno.ml, 1 viplc4.com, 0 viplc6.com, 0 viplc68.com, 1 @@ -127785,7 +128123,10 @@ vipmercedes.by, 1 viporiflame.tk, 1 vippclub.be, 0 vips.pl, 1 +vipsauna.gq, 1 vipsexvault.com, 1 +vipshop.ga, 1 +vipsibir.cf, 1 vipstat.pl, 1 viptamol.com, 1 viptravel.tk, 1 @@ -127799,6 +128140,7 @@ vir-tec.eu, 0 vir2.me, 1 virajtharinda.tk, 1 viral32111.com, 1 +virala.tk, 1 viralboombox.xyz, 1 viralcreate.com, 0 viralhua.com, 1 @@ -127807,6 +128149,7 @@ viraljobs.ga, 1 viraloffer.ga, 1 viralpop.it, 0 viralsv.com, 1 +viraltech.cf, 1 viralted.ml, 1 viraltobuzz.tk, 1 viraltube.my, 1 @@ -127814,6 +128157,7 @@ viralvids.gq, 1 viran-khodro.tk, 1 virazh58.tk, 1 vircloud.net, 1 +virgi.tk, 1 virgil.gg, 1 virginiaabc.gov, 1 virginiabeachcoolsculpting.com, 1 @@ -127831,8 +128175,10 @@ viridis-milites.cz, 1 viris.si, 1 virostack.com, 1 virtasktic.com, 1 +virtbaza.cf, 1 virtit.fr, 1 virtlinux.eu, 1 +virtola.ml, 1 virtool.ca, 1 virtua.com.tr, 1 virtual-assistant.ml, 1 @@ -127908,12 +128254,14 @@ visatitans.com, 1 visaya.com.co, 1 viscoelastico.com.br, 1 visconapp.com, 1 +visconde-de-maua.com.br, 1 viscondedemaua.com.br, 1 viscopic.com, 1 vise.com, 0 visegradieskuvo.hu, 1 visegradtours.hu, 1 viseum.co.uk, 1 +vishenka.tk, 1 vishnujyothi.co.uk, 1 vishwashantiyoga.com, 1 visibleone.com, 1 @@ -127931,6 +128279,7 @@ visionduweb.fr, 1 visioneducation.tk, 1 visiongamestudios.com, 1 visionnissancanandaiguaparts.com, 1 +visionnocturne.tk, 1 visionpeak.net, 1 visionproductssoutheast.com, 1 visionsmind.xyz, 1 @@ -127969,9 +128318,12 @@ visitorsguide.is, 1 visitorslist.com, 1 visitosalnes.com, 1 visitrainscounty.com, 1 +visits.ga, 1 +visits.tk, 1 visittartu.com, 1 visittci.com, 1 visitthematrix.tk, 1 +visituzbekistan.tk, 1 visitvalenca.com, 0 visitzug.ga, 1 visma-apps.com, 1 @@ -128014,6 +128366,8 @@ vitaalcheck.nl, 1 vitaalfitcoaching.nl, 1 vitacare.com.au, 1 vitahook.pw, 1 +vitahost.ml, 1 +vitakov.tk, 1 vital-pack.com, 1 vital-tel.co.uk, 1 vitalamin.at, 1 @@ -128040,6 +128394,7 @@ vitamaxxi.com.br, 1 vitamed.ca, 1 vitamina.cl, 1 vitamina.com, 1 +vitaminka.tk, 1 vitaminmovie.ga, 1 vitaminoutlet.net, 1 vitamixromania.ro, 1 @@ -128060,6 +128415,7 @@ vitra-showrooms.co.uk, 1 vitra-vcare.co.uk, 1 vitrade.de, 1 vitrado.de, 1 +vitrinachasov.cf, 1 vitromex.tk, 1 vitron.ru, 1 vitsearch.link, 1 @@ -128078,6 +128434,7 @@ viv.fi, 1 viva.ua, 1 viva2000.com, 1 vivablogger.com, 1 +vivabraslav.ga, 1 vivace.parts, 1 vivachile.tk, 1 vivaelmusculo.com, 1 @@ -128095,11 +128452,14 @@ vivantstays.com, 1 vivaocredito.com.br, 1 vivapharma.net, 1 vivas.cf, 1 +vivas.gq, 1 vivas.ml, 1 vivas.tk, 1 vivatbet.com.ee, 1 vivatbet.ee, 1 +vivates.tk, 1 vivatv.com.tw, 1 +vivavox.tk, 1 vive.com, 0 vive.link, 1 vivediabetes-sanamente.com, 1 @@ -128127,9 +128487,11 @@ vivianaball.ro, 1 vivianadavila.com, 1 vivianlms.ga, 1 vivianmaier.cn, 1 +vivichannel.tk, 1 vivid-academy.com, 1 vivide.re, 1 vividinflatables.co.uk, 1 +viviennelinettevandenassem.tk, 1 viviennevandenbos.nl, 1 vivirenelmundo.com, 1 vivirenelpoblado.com, 1 @@ -128153,8 +128515,10 @@ vizija-nepremicnine.si, 1 vizion.com, 1 vizional.com, 0 vizirinvestimentos.com, 1 +vizit-obmen.tk, 1 vizit.ml, 1 vizit.tk, 1 +vizitfree.ml, 1 vizitnik.tk, 1 vizmart.ml, 1 vizyonpara.com, 1 @@ -128167,6 +128531,7 @@ vjuliano.net, 1 vk-agent.ru, 1 vk-group.com, 1 vk-k.com, 1 +vk-random.ml, 1 vk-srv.ru, 1 vk.group, 1 vk1fj.net, 1 @@ -128206,7 +128571,10 @@ vladimir.ml, 1 vladimirovka.ml, 1 vladimirpenev.tk, 1 vladislavstoyanov.com, 1 +vladivostok-city.tk, 1 vladivostok.cf, 1 +vladivostok.tk, 1 +vladivostokportal.tk, 1 vladmoraru.org, 1 vladreview.com, 1 vladsfads.com, 1 @@ -128218,6 +128586,8 @@ vlak.hr, 1 vlakem.net, 1 vlance.gq, 1 vlaser.es, 1 +vlasov.ml, 1 +vlasova-sova.ml, 1 vlcentre.org, 1 vldkn.net, 1 vldz.co, 1 @@ -128229,6 +128599,7 @@ vleij.se, 1 vleo.me, 1 vliegherrie.nl, 1 vlijmscherrup.tk, 1 +vlike.ml, 1 vlissingse-oratoriumvereniging.nl, 1 vlndc.org, 1 vlnv.ca, 1 @@ -128265,12 +128636,14 @@ vmonetke.ru, 1 vmotosoco.lv, 0 vmsurgery.org, 1 vmug.pl, 1 +vmurmanske.tk, 1 vn.search.yahoo.com, 0 vnctdj.fr, 1 vnd.cloud, 1 vndb.org, 1 vneftekamske.tk, 1 vnetboard.com, 1 +vnikolaev.tk, 1 vnlfrk.com, 1 vnministries.org, 1 vnovosibirske.tk, 1 @@ -128354,10 +128727,13 @@ vogler.name, 1 vogt.works, 1 vogue.co.uk, 1 vogue.cz, 1 +voguefrontier.tk, 1 voi.ch, 1 voice-of-design.com, 1 voice-pic.com, 1 voicedata.tk, 1 +voiceofcricket.tk, 1 +voiceofserbia.tk, 1 voicesoflabor.com, 1 voicesofspirit.at, 1 voicesuk.co.uk, 1 @@ -128373,7 +128749,6 @@ voidnya.com, 1 voidp.de, 1 voidpay.net, 1 voidpay.org, 1 -voidptr.eu, 1 voidshift.com, 1 voidx.top, 1 voinuocsago.com, 1 @@ -128389,6 +128764,7 @@ vokativy.cz, 1 vokieciupamokos.lt, 1 vokimberlywi.gov, 1 vokov.ml, 1 +vokrug.ga, 1 vokzalperm.ru, 1 volant.digital, 1 volantinaggioaroma.it, 1 @@ -128397,6 +128773,7 @@ volarikcapital.eu, 1 volatile.pw, 1 volatilesystems.org, 1 volatilethunk.com, 1 +volatiliza.ga, 1 volatimer.com, 1 volcain.io, 1 volcanconcretos.com, 1 @@ -128415,10 +128792,14 @@ volga.us, 1 volgar.name, 1 volgares.ru, 1 volgavibes.ru, 0 +volgograd-34.tk, 1 volgograd-privolzskiy.ga, 1 +volgograd34.tk, 1 volha.tk, 1 volichat.com, 1 +volin.tk, 1 volk.ga, 1 +volk.gq, 1 volkanyilmaz.com.tr, 1 volker-gropp.de, 1 volkergropp.de, 1 @@ -128431,6 +128812,7 @@ volkov.ga, 1 volkstuinwaregem.tk, 1 volksvorschlagpmar.ch, 1 volkswagen.io, 1 +volkswagengolf.tk, 1 volkswagenmiennam.com.vn, 1 volkswagensaigon.net, 0 volkswurst.de, 1 @@ -128532,7 +128914,6 @@ vosgym.jp, 1 voshod.org, 1 vosjesweb.nl, 1 vosk-cream.tk, 1 -vosky.fr, 1 vosn.de, 1 voss-klinik.com, 1 voss-zaehne.com, 1 @@ -128845,6 +129226,7 @@ vutrox.com, 1 vutruso.com, 1 vux.li, 1 vuzi.fr, 1 +vv1234.cn, 1 vv5197.co, 1 vv6729.co, 1 vv6729.com, 0 @@ -129163,6 +129545,7 @@ walker-foundation.org, 1 walkera-fans.de, 1 walkermi.gov, 1 walkersplayground.tk, 1 +walkhighlandsandislands.com, 0 walking-algarve.tk, 1 walkingandcycling.org.uk, 1 walkingforhealth.org.uk, 0 @@ -129584,7 +129967,6 @@ wausharacountywi.gov, 1 wauwatosa.gov, 1 wauzaji.com, 1 wav-productions.com, 1 -wav.tv, 1 wave-inc.co.jp, 1 wave.is, 1 wave.red, 1 @@ -129691,6 +130073,7 @@ wdf.ink, 1 wdic.org, 1 wdmcheng.cn, 1 wdmg.com.ua, 1 +wdmleds.com, 1 wdmpa.org, 1 wdnmd.ac.cn, 1 wdnmd.online, 1 @@ -129958,6 +130341,7 @@ webforthemasses.tk, 1 webfronten.dk, 0 webfun.tk, 1 webgadgets.tk, 1 +webgaku.net, 1 webgamex.ml, 1 webgap.io, 0 webgarten.ch, 1 @@ -130428,6 +130812,7 @@ wellness-spa-suedtirol.com, 1 wellnesscheck.net, 1 wellnessever.com, 1 wellnesshotel-weimar.de, 1 +wellnessmassage-eitorf.de, 1 wellsolveit.com, 0 wellspringsga.com, 1 wellsprung.net, 1 @@ -130647,7 +131032,6 @@ westoveral.gov, 1 westpennwire.com, 1 westplains.gov, 1 westpointne.gov, 1 -westportseaanglingfestival.eu, 1 westrandgardeningservices.co.za, 1 westrandmall.co.za, 1 westsalemwi.gov, 1 @@ -130935,7 +131319,6 @@ whiteweb.tk, 1 whitewebhosting.com, 1 whitewinterwolf.com, 1 whitfieldcountyga.gov, 1 -whitkirk.com, 1 whitkirkchurch.org.uk, 0 whitlockconstruction.ca, 1 whittle.in, 1 @@ -131156,7 +131539,6 @@ wikijunior.net, 1 wikijunior.org, 1 wikileaks.ch, 1 wikileaks.com, 1 -wikileaks.org, 1 wikilibrary.tk, 1 wikilink.cf, 1 wikilink.tk, 1 @@ -132178,6 +132560,7 @@ workwelltoday.net, 1 workwithgo.com, 0 workwithusaid.gov, 1 worky.ph, 1 +world-avto.fun, 1 world-citizen-report.com, 1 world-documentary.ml, 1 world-education-association.org, 1 @@ -132546,8 +132929,6 @@ wsa.org.nz, 1 wsa.poznan.pl, 1 wsadek.ovh, 1 wsave.be, 1 -wsb-immo.at, 1 -wsb-immobilien.at, 1 wsb.pl, 1 wscales.com, 0 wscauth.de, 1 @@ -132863,8 +133244,8 @@ wyydsb.com, 1 wyydsb.xin, 1 wyzphoto.nl, 1 wyzwaniemilosci.com, 1 +wz.lviv.ua, 1 wz.pt, 1 -wz8.info, 1 wzajemnie.org.pl, 1 wzfou.com, 1 wzh.one, 1 @@ -133428,6 +133809,7 @@ xinyazhang.com, 1 xinyezx.com, 1 xinyitour.tw, 1 xio.moe, 1 +xion.nu, 1 xiphwork.de, 1 xiqonline.com, 1 xirion.net, 1 @@ -134049,6 +134431,7 @@ xpsrobotics.com, 1 xpwn.cz, 0 xq.com, 1 xq55.com, 1 +xqin.net, 1 xqk7.com, 1 xqwqx.com, 1 xr1s.me, 1 @@ -134804,6 +135187,7 @@ yescareer.ga, 1 yescool.cn, 0 yesfone.com.br, 1 yesglasses.com, 1 +yesh.lk, 1 yesiammaisey.me, 1 yesichat.com, 1 yesilfindik.com, 1 @@ -134859,7 +135243,6 @@ yhanthydech.com, 0 yhaupenthal.org, 1 yhe.me, 1 yhenke.de, 0 -yhfou.com, 1 yhhvi.cf, 1 yhn.sh, 1 yhndnzj.com, 1 @@ -134997,7 +135380,6 @@ yogaillustrations.tk, 1 yogamarlene.ch, 1 yogananda-roma.org, 1 yogaovelser.dk, 1 -yogaportalen.dk, 1 yogaprague.com, 1 yogaschule-herzraum.de, 1 yogasolution.tk, 1 @@ -135596,6 +135978,7 @@ yw.com, 1 yxbet43.com, 1 yxc.xyz, 1 yxt521.com, 1 +yxzero.xyz, 1 yy-s.net, 1 yy153.com, 0 yy366.cc, 1 @@ -136688,11 +137071,11 @@ zlarin.tk, 1 zlatakus.cz, 1 zlatan-ibrahimovic.tk, 1 zlatanonline.tk, 1 -zlatnictvoadamas.sk, 1 zlatograd.bg, 1 zlatom.ru, 1 zlatopil.com, 0 zlavomat.sk, 1 +zlc1994.com, 0 zlhuodong.vip, 1 zlima12.com, 1 zlogic.xyz, 1 @@ -136833,7 +137216,6 @@ zonaperu.tk, 1 zonaquimica.tk, 1 zonarumbera.tk, 1 zonatelevision.tk, 1 -zonautas.com, 1 zondervanacademic.com, 1 zone-5.de, 1 zone-de-confiance.fr, 1 @@ -136917,7 +137299,6 @@ zorte.net, 1 zorz.info, 1 zorzorfm.ml, 1 zoske.it, 1 -zoso.ro, 0 zotan.email, 1 zotan.network, 1 zotan.photography, 1 @@ -136954,6 +137335,7 @@ zprogramming.tk, 1 zq.com.sg, 1 zqstudio.top, 0 zqwqz.org, 1 +zr-dienstleistungen.de, 1 zravyobrazky.cz, 1 zravypapir.cz, 1 zrejstejna.cz, 1 @@ -137035,6 +137417,7 @@ zumberak.tk, 1 zummoricambi.com, 1 zumtaedanceschool.co.za, 1 zumturm.org, 1 +zumub.com, 1 zumwildenaffen.com, 1 zund-app.com, 1 zundapp.one, 1 @@ -137052,6 +137435,7 @@ zurlin.de, 1 zurmas-design.tk, 1 zuru.ml, 1 zuru.tk, 1 +zusammen-grossartig.de, 1 zusjesvandenbos.nl, 1 zuss.tk, 1 zusterjansen.nl, 1 diff --git a/services/settings/dumps/main/devtools-compatibility-browsers.json b/services/settings/dumps/main/devtools-compatibility-browsers.json index 9f3efcf5f1a16..fd78bcc571f4a 100644 --- a/services/settings/dumps/main/devtools-compatibility-browsers.json +++ b/services/settings/dumps/main/devtools-compatibility-browsers.json @@ -1,301 +1,436 @@ { "data": [ { - "name": "Firefox", - "schema": 1658310286031, - "status": "nightly", - "version": "104", - "browserid": "firefox", - "id": "d04af615-530c-4da3-8c55-e1330d022c94", - "last_modified": 1658311483673 + "name": "Chrome", + "schema": 1661424896547, + "status": "planned", + "version": "107", + "browserid": "chrome", + "id": "9d2108d1-9159-4687-b424-e690f1b73dfa", + "last_modified": 1661426998189 }, { - "name": "Firefox for Android", - "schema": 1658310289421, - "status": "nightly", - "version": "104", - "browserid": "firefox_android", - "id": "3a03a711-cd19-4829-92b2-d950189fbc9d", - "last_modified": 1658311483669 + "name": "Chrome", + "schema": 1661424897277, + "status": "planned", + "version": "108", + "browserid": "chrome", + "id": "bd5893da-e8a4-4bee-8b4f-078dacadeb80", + "last_modified": 1661426998187 }, { - "name": "Oculus Browser", - "schema": 1658310291111, - "status": "current", - "version": "22.0", - "browserid": "oculus", - "id": "218e5b1c-b10f-4e94-a306-3a4c8a32d030", - "last_modified": 1658311483664 + "name": "Chrome", + "schema": 1661424898187, + "status": "planned", + "version": "109", + "browserid": "chrome", + "id": "2e1149a2-542e-46e6-b9e7-0873ea194532", + "last_modified": 1661426998184 }, { - "name": "Opera", - "schema": 1658310294586, - "status": "nightly", - "version": "91", - "browserid": "opera", - "id": "09a83dac-0707-4e07-938a-7fabfebce5df", - "last_modified": 1658311483660 + "name": "Chrome", + "schema": 1661424899078, + "status": "planned", + "version": "110", + "browserid": "chrome", + "id": "51a62bb5-f0d0-46d5-a791-c91f9337778f", + "last_modified": 1661426998182 }, { - "name": "Opera Android", - "schema": 1658310296174, - "status": "current", - "version": "70", - "browserid": "opera_android", - "id": "d391d199-7410-48f1-811e-f7b8ebe6f35f", - "last_modified": 1658311483656 + "name": "Chrome Android", + "schema": 1661424902767, + "status": "planned", + "version": "107", + "browserid": "chrome_android", + "id": "79610bbe-aba5-47ad-be55-0f4a3b3f1e43", + "last_modified": 1661426998179 }, { - "name": "Firefox", - "schema": 1658310284445, - "status": "current", - "version": "102", - "browserid": "firefox", - "id": "3dd6dd60-d657-49f5-bea5-453ae44af969", - "last_modified": 1658311483651 + "name": "Chrome Android", + "schema": 1661424903615, + "status": "planned", + "version": "108", + "browserid": "chrome_android", + "id": "4e80773c-3d67-4c20-b1c1-c159e4387dda", + "last_modified": 1661426998177 }, { - "name": "Firefox for Android", - "schema": 1658310287657, - "status": "current", - "version": "102", - "browserid": "firefox_android", - "id": "6c78180a-3c6a-4309-956c-d429c928e4d9", - "last_modified": 1658311483648 + "name": "Chrome Android", + "schema": 1661424904322, + "status": "planned", + "version": "109", + "browserid": "chrome_android", + "id": "851b1fa9-01b4-4c28-8878-dc57084b9507", + "last_modified": 1661426998174 }, { - "name": "Opera", - "schema": 1658310293755, - "status": "beta", - "version": "90", - "browserid": "opera", - "id": "e31ddc38-d62b-4e61-8236-8fff66fa3fb2", - "last_modified": 1658311483632 + "name": "Chrome Android", + "schema": 1661424905046, + "status": "planned", + "version": "110", + "browserid": "chrome_android", + "id": "7b3adc78-1bce-4cdd-aa53-794a56487ad2", + "last_modified": 1661426998172 }, { - "name": "Opera", - "schema": 1658310292836, + "name": "Deno", + "schema": 1661424906442, "status": "current", - "version": "89", - "browserid": "opera", - "id": "e54a1264-efa9-4485-ab7c-be08d0fada09", - "last_modified": 1658311483629 + "version": "1.24", + "browserid": "deno", + "id": "0395aba6-1101-4115-bc9e-64e7c8404e1e", + "last_modified": 1661426998169 }, { - "name": "Firefox for Android", - "schema": 1658310288593, - "status": "beta", - "version": "103", - "browserid": "firefox_android", - "id": "881ecc40-fca1-4352-8ee1-b21fb0478e17", - "last_modified": 1658311483623 + "name": "Edge", + "schema": 1661424909430, + "status": "nightly", + "version": "106", + "browserid": "edge", + "id": "1ffcd339-878f-4869-b982-b21aa22552b6", + "last_modified": 1661426998167 }, { "name": "Firefox", - "schema": 1658310285237, - "status": "beta", - "version": "103", - "browserid": "firefox", - "id": "a953b744-0b2e-4410-b3f3-e06106ce55c1", - "last_modified": 1658311483619 - }, - { - "name": "Chrome", - "schema": 1656923576611, + "schema": 1661424912463, "status": "nightly", "version": "105", - "browserid": "chrome", - "id": "095b32ff-2291-4bd7-a017-ca6c4d822933", - "last_modified": 1656923973394 + "browserid": "firefox", + "id": "d049e9d9-8818-4b85-8b7f-4f3d782e022e", + "last_modified": 1661426998164 }, { - "name": "Chrome", - "schema": 1656923577410, + "name": "Firefox", + "schema": 1661424913341, "status": "planned", "version": "106", - "browserid": "chrome", - "id": "535ddd57-1cfa-440f-9a48-e3121cefd26b", - "last_modified": 1656923973389 + "browserid": "firefox", + "id": "395a946b-38df-4bb6-b6bc-8a982deb7f91", + "last_modified": 1661426998162 }, { - "name": "Chrome Android", - "schema": 1656923581192, + "name": "Firefox", + "schema": 1661424914168, + "status": "planned", + "version": "107", + "browserid": "firefox", + "id": "6edb8bcb-112c-46dd-908e-7ca147d39d50", + "last_modified": 1661426998159 + }, + { + "name": "Firefox", + "schema": 1661424914844, + "status": "planned", + "version": "108", + "browserid": "firefox", + "id": "ef065d2e-9c33-4431-9c2c-e87f8c06d59c", + "last_modified": 1661426998157 + }, + { + "name": "Firefox for Android", + "schema": 1661424918058, "status": "nightly", "version": "105", - "browserid": "chrome_android", - "id": "c853a996-9eb9-410e-acc2-41a3a3c12bd4", - "last_modified": 1656923973384 + "browserid": "firefox_android", + "id": "7ce3c750-d7f4-42d2-9d09-2c19859ee325", + "last_modified": 1661426998154 }, { - "name": "Chrome Android", - "schema": 1656923581952, + "name": "Firefox for Android", + "schema": 1661424918976, "status": "planned", "version": "106", - "browserid": "chrome_android", - "id": "46287ce1-5b74-4f14-ab44-a0c7651b5fd0", - "last_modified": 1656923973379 + "browserid": "firefox_android", + "id": "294851c1-58c0-4bba-bd6f-41bccb1a993a", + "last_modified": 1661426998152 }, { - "name": "Deno", - "schema": 1656923584253, + "name": "Firefox for Android", + "schema": 1661424919798, + "status": "planned", + "version": "107", + "browserid": "firefox_android", + "id": "03c1945a-ba95-4958-b46b-14c15df2da8f", + "last_modified": 1661426998149 + }, + { + "name": "Firefox for Android", + "schema": 1661424920520, + "status": "planned", + "version": "108", + "browserid": "firefox_android", + "id": "5b3ec919-1261-4013-9ab7-ea5a5f085ba3", + "last_modified": 1661426998147 + }, + { + "name": "Node.js", + "schema": 1661424922206, + "status": "esr", + "version": "16.17.0", + "browserid": "nodejs", + "id": "a7efd4b1-c035-4333-bfa9-148cd9878ac9", + "last_modified": 1661426998144 + }, + { + "name": "Oculus Browser", + "schema": 1661424923866, "status": "current", - "version": "1.23", - "browserid": "deno", - "id": "f6bf4896-cc0d-4403-a881-fe672d6ce7ba", - "last_modified": 1656923973374 + "version": "23.0", + "browserid": "oculus", + "id": "371ced3b-8ff1-4540-a230-bc1827964bda", + "last_modified": 1661426998142 }, { - "name": "Edge", - "schema": 1656923588029, + "name": "Opera", + "schema": 1661424926838, "status": "nightly", - "version": "105", - "browserid": "edge", - "id": "942f3f7b-2c9d-40bb-b895-c2c1f82ab9f6", - "last_modified": 1656923973369 + "version": "92", + "browserid": "opera", + "id": "5c14c5e1-9a77-4ae5-a9a6-a8009b2681d5", + "last_modified": 1661426998139 }, { "name": "Safari", - "schema": 1656923602914, - "status": "beta", - "version": "16", + "schema": 1661424928603, + "status": "current", + "version": "15.6", "browserid": "safari", - "id": "f531e59e-4328-4acb-9b7e-559039415afd", - "last_modified": 1656923973335 + "id": "532abdb1-1283-43bc-a2dd-bbf42926e6c9", + "last_modified": 1661426998136 }, { "name": "Safari on iOS", - "schema": 1656923605199, - "status": "beta", - "version": "16", + "schema": 1661424930296, + "status": "current", + "version": "15.6", "browserid": "safari_ios", - "id": "2dd45c10-6eae-4755-9a4b-3b48450c331b", - "last_modified": 1656923973330 + "id": "3e898649-403c-456e-ad18-21373b479dbf", + "last_modified": 1661426998134 }, { - "name": "WebView Android", - "schema": 1656923612234, - "status": "nightly", - "version": "105", - "browserid": "webview_android", - "id": "1f245984-40e3-4f70-a30c-dc70d348b16a", - "last_modified": 1656923973325 + "name": "Samsung Internet", + "schema": 1661424931735, + "status": "current", + "version": "18.0", + "browserid": "samsunginternet_android", + "id": "36d4b20e-19d0-422b-898f-c5b522f65b14", + "last_modified": 1661426998131 }, { "name": "WebView Android", - "schema": 1656923612963, + "schema": 1661424935537, "status": "planned", - "version": "106", + "version": "107", "browserid": "webview_android", - "id": "2e3d08f8-2a09-4e92-b49a-a70045e8209b", - "last_modified": 1656923973320 + "id": "040c8600-5853-4a9f-8dc2-a428c1305985", + "last_modified": 1661426998129 }, { - "name": "Samsung Internet", - "schema": 1656923608255, - "status": "current", - "version": "17.0", - "browserid": "samsunginternet_android", - "id": "33853107-4475-46de-a22b-84972be87dfd", - "last_modified": 1656923973290 + "name": "WebView Android", + "schema": 1661424936282, + "status": "planned", + "version": "108", + "browserid": "webview_android", + "id": "b52a98f0-eccd-49c9-ba0d-4a1a99e4923c", + "last_modified": 1661426998126 }, { - "name": "Safari on iOS", - "schema": 1656923606773, - "status": "current", - "version": "15.5", - "browserid": "safari_ios", - "id": "880d9032-1db7-4989-936a-d935fd344b36", - "last_modified": 1656923973287 + "name": "WebView Android", + "schema": 1661424937058, + "status": "planned", + "version": "109", + "browserid": "webview_android", + "id": "9c710ff8-a0ea-409b-aee4-cce38f3d5742", + "last_modified": 1661426998124 }, { - "name": "Safari", - "schema": 1656923604385, - "status": "current", - "version": "15.5", - "browserid": "safari", - "id": "d18a11fc-76c1-4a25-b40c-16b6834ad3e3", - "last_modified": 1656923973283 + "name": "WebView Android", + "schema": 1661424937825, + "status": "planned", + "version": "110", + "browserid": "webview_android", + "id": "a34cab01-b617-4ded-a09a-7dcfb4c1dd1d", + "last_modified": 1661426998121 }, { "name": "Chrome", - "schema": 1656923575043, + "schema": 1661424893983, "status": "current", - "version": "103", + "version": "104", "browserid": "chrome", - "id": "98226134-72f5-4e8b-9fe1-91c6f0a73db8", - "last_modified": 1656923973261 + "id": "8444e15e-d3b2-4f23-8d6f-0c28e373519e", + "last_modified": 1661426998117 }, { "name": "Chrome Android", - "schema": 1656923579639, + "schema": 1661424900442, "status": "current", - "version": "103", + "version": "104", "browserid": "chrome_android", - "id": "38e7422e-9f31-44d4-81f8-8f273d675d1b", - "last_modified": 1656923973254 + "id": "38279b6e-1e18-4b12-a647-efd4fec6b433", + "last_modified": 1661426998115 }, { "name": "Edge", - "schema": 1656923586542, + "schema": 1661424907983, "status": "current", - "version": "103", + "version": "104", "browserid": "edge", - "id": "4afba52a-82ff-43e3-974b-3a00dd9def94", - "last_modified": 1656923973247 + "id": "05f600cd-62ff-4390-9653-7a23da28649b", + "last_modified": 1661426998113 }, { "name": "WebView Android", - "schema": 1656923610666, + "schema": 1661424933096, "status": "current", - "version": "103", + "version": "104", "browserid": "webview_android", - "id": "a07ea66a-9e79-4dae-937f-0b5c42b961bb", - "last_modified": 1656923973232 + "id": "11641e40-94f8-49db-925b-8e3a294bd277", + "last_modified": 1661426998111 + }, + { + "name": "WebView Android", + "schema": 1661424934849, + "status": "nightly", + "version": "106", + "browserid": "webview_android", + "id": "2e3d08f8-2a09-4e92-b49a-a70045e8209b", + "last_modified": 1661426998095 }, { "name": "WebView Android", - "schema": 1656923611492, + "schema": 1661424933930, "status": "beta", - "version": "104", + "version": "105", "browserid": "webview_android", - "id": "11641e40-94f8-49db-925b-8e3a294bd277", - "last_modified": 1656923973208 + "id": "1f245984-40e3-4f70-a30c-dc70d348b16a", + "last_modified": 1661426998093 }, { "name": "Edge", - "schema": 1656923587277, + "schema": 1661424908744, "status": "beta", - "version": "104", + "version": "105", "browserid": "edge", - "id": "05f600cd-62ff-4390-9653-7a23da28649b", - "last_modified": 1656923973197 + "id": "942f3f7b-2c9d-40bb-b895-c2c1f82ab9f6", + "last_modified": 1661426998091 + }, + { + "name": "Chrome Android", + "schema": 1661424902043, + "status": "nightly", + "version": "106", + "browserid": "chrome_android", + "id": "46287ce1-5b74-4f14-ab44-a0c7651b5fd0", + "last_modified": 1661426998087 }, { "name": "Chrome Android", - "schema": 1656923580463, + "schema": 1661424901364, "status": "beta", - "version": "104", + "version": "105", "browserid": "chrome_android", - "id": "38279b6e-1e18-4b12-a647-efd4fec6b433", - "last_modified": 1656923973193 + "id": "c853a996-9eb9-410e-acc2-41a3a3c12bd4", + "last_modified": 1661426998085 }, { "name": "Chrome", - "schema": 1656923575872, + "schema": 1661424895636, + "status": "nightly", + "version": "106", + "browserid": "chrome", + "id": "535ddd57-1cfa-440f-9a48-e3121cefd26b", + "last_modified": 1661426998083 + }, + { + "name": "Chrome", + "schema": 1661424894811, "status": "beta", - "version": "104", + "version": "105", "browserid": "chrome", - "id": "8444e15e-d3b2-4f23-8d6f-0c28e373519e", - "last_modified": 1656923973189 + "id": "095b32ff-2291-4bd7-a017-ca6c4d822933", + "last_modified": 1661426998081 }, { - "name": "Node.js", - "schema": 1653491297010, - "status": "esr", - "version": "16.15.0", - "browserid": "nodejs", - "id": "7004c884-919c-4aac-b326-48813ff979ff", - "last_modified": 1653491615303 + "name": "Firefox", + "schema": 1661424911103, + "status": "current", + "version": "103", + "browserid": "firefox", + "id": "a953b744-0b2e-4410-b3f3-e06106ce55c1", + "last_modified": 1661426998078 + }, + { + "name": "Firefox for Android", + "schema": 1661424916419, + "status": "current", + "version": "103", + "browserid": "firefox_android", + "id": "881ecc40-fca1-4352-8ee1-b21fb0478e17", + "last_modified": 1661426998076 + }, + { + "name": "Opera", + "schema": 1661424925328, + "status": "current", + "version": "90", + "browserid": "opera", + "id": "e31ddc38-d62b-4e61-8236-8fff66fa3fb2", + "last_modified": 1661426998072 + }, + { + "name": "Opera", + "schema": 1661424926152, + "status": "beta", + "version": "91", + "browserid": "opera", + "id": "09a83dac-0707-4e07-938a-7fabfebce5df", + "last_modified": 1661426998066 + }, + { + "name": "Firefox for Android", + "schema": 1661424917337, + "status": "beta", + "version": "104", + "browserid": "firefox_android", + "id": "3a03a711-cd19-4829-92b2-d950189fbc9d", + "last_modified": 1661426998062 + }, + { + "name": "Firefox", + "schema": 1661424911790, + "status": "beta", + "version": "104", + "browserid": "firefox", + "id": "d04af615-530c-4da3-8c55-e1330d022c94", + "last_modified": 1661426998060 + }, + { + "name": "Opera Android", + "schema": 1658310296174, + "status": "current", + "version": "70", + "browserid": "opera_android", + "id": "d391d199-7410-48f1-811e-f7b8ebe6f35f", + "last_modified": 1658311483656 + }, + { + "name": "Safari", + "schema": 1656923602914, + "status": "beta", + "version": "16", + "browserid": "safari", + "id": "f531e59e-4328-4acb-9b7e-559039415afd", + "last_modified": 1656923973335 + }, + { + "name": "Safari on iOS", + "schema": 1656923605199, + "status": "beta", + "version": "16", + "browserid": "safari_ios", + "id": "2dd45c10-6eae-4755-9a4b-3b48450c331b", + "last_modified": 1656923973330 }, { "name": "Node.js", @@ -334,5 +469,5 @@ "last_modified": 1645448267500 } ], - "timestamp": 1658311483673 + "timestamp": 1661426998189 } diff --git a/services/settings/dumps/security-state/intermediates.json b/services/settings/dumps/security-state/intermediates.json index 746905f29c911..960e225cf4199 100644 --- a/services/settings/dumps/security-state/intermediates.json +++ b/services/settings/dumps/security-state/intermediates.json @@ -1,7 +1,25 @@ { "data": [ { - "schema": 1661389023654, + "schema": 1661647749235, + "derHash": "lzpBJ2/9AeAnoqrUnjTDeEbT6Xb/amILZxLjODIEGqY=", + "subject": "CN=Go Daddy Secure Certificate Authority - G2,OU=http://certs.godaddy.com/repository/,O=GoDaddy.com%5C%5C, Inc.,L=Scottsdale,ST=Arizona,C=US", + "subjectDN": "MIG0MQswCQYDVQQGEwJVUzEQMA4GA1UECBMHQXJpem9uYTETMBEGA1UEBxMKU2NvdHRzZGFsZTEaMBgGA1UEChMRR29EYWRkeS5jb20sIEluYy4xLTArBgNVBAsTJGh0dHA6Ly9jZXJ0cy5nb2RhZGR5LmNvbS9yZXBvc2l0b3J5LzEzMDEGA1UEAxMqR28gRGFkZHkgU2VjdXJlIENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcy", + "whitelist": false, + "attachment": { + "hash": "a111efc20329e87b541cfc3e7f526fc54bb24624fddf210f4347b9fadfb1ab6b", + "size": 1727, + "filename": "8Rw90Ej3Ttt8RRkrg-WYDS9n7IS03bk5bjP_UXPtaY8=.pem", + "location": "security-state-staging/intermediates/a2a04dfe-6201-4d0a-b8cf-80d2975bfb51.pem", + "mimetype": "application/x-pem-file" + }, + "pubKeyHash": "8Rw90Ej3Ttt8RRkrg+WYDS9n7IS03bk5bjP/UXPtaY8=", + "crlite_enrolled": true, + "id": "549c92e2-3738-4c8c-ae37-407e4e6158ce", + "last_modified": 1661648223209 + }, + { + "schema": 1661626623588, "derHash": "zHJT696ffpLLope1ut7Rsi5c6spSXiAbTcQQ9PNQS14=", "subject": "CN=CFCA EV OCA,O=China Financial Certification Authority,C=CN", "subjectDN": "MFUxCzAJBgNVBAYTAkNOMTAwLgYDVQQKDCdDaGluYSBGaW5hbmNpYWwgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxFDASBgNVBAMMC0NGQ0EgRVYgT0NB", @@ -14,9 +32,333 @@ "mimetype": "application/x-pem-file" }, "pubKeyHash": "Ub+bKk6h+qrzcElkX07080gHiz8CDNkXagA7GJtPu0I=", - "crlite_enrolled": false, + "crlite_enrolled": true, "id": "2f50d8ff-d71a-4851-afa7-4fb7a4e14792", - "last_modified": 1661410623072 + "last_modified": 1661648223198 + }, + { + "schema": 1661647748900, + "derHash": "QciXRzsDafp0sfT51/iRKUhcGjBcBxmoZ9yHFOCHAgA=", + "subject": "CN=D-TRUST EV CA 1-20-1 2020,O=D-Trust GmbH,C=DE", + "subjectDN": "MEgxCzAJBgNVBAYTAkRFMRUwEwYDVQQKEwxELVRydXN0IEdtYkgxIjAgBgNVBAMTGUQtVFJVU1QgRVYgQ0EgMS0yMC0xIDIwMjA=", + "whitelist": false, + "attachment": { + "hash": "e7243885420768bcfaeaac83d278d2ecce102cec4ec1d4dfe7dcd96b7fd8729d", + "size": 1662, + "filename": "SJEHwcDvLp0G_-CfkfLyIPLHc6_k-E4CaepcoEBFq5s=.pem", + "location": "security-state-staging/intermediates/ff509022-df05-462c-8f12-7d582a910132.pem", + "mimetype": "application/x-pem-file" + }, + "pubKeyHash": "SJEHwcDvLp0G/+CfkfLyIPLHc6/k+E4CaepcoEBFq5s=", + "crlite_enrolled": true, + "id": "5767e4fa-0b6e-4802-be9d-d4bf52538de8", + "last_modified": 1661648223187 + }, + { + "schema": 1661647749062, + "derHash": "GZqyqq//QEAeCjt7h+6ZZGWe/6lKH+y+kYrhNuS04Kg=", + "subject": "CN=D-TRUST BR CA 1-20-1 2020,O=D-Trust GmbH,C=DE", + "subjectDN": "MEgxCzAJBgNVBAYTAkRFMRUwEwYDVQQKEwxELVRydXN0IEdtYkgxIjAgBgNVBAMTGUQtVFJVU1QgQlIgQ0EgMS0yMC0xIDIwMjA=", + "whitelist": false, + "attachment": { + "hash": "83449537aac8862f1ea8058fb335366b6fa8c7a51110de57bb5435ab54ab0804", + "size": 1662, + "filename": "kVO5KcVhLn-EO7KjAiRhLgxhA1OOzdUgODPbCEfZ-kQ=.pem", + "location": "security-state-staging/intermediates/75be562f-315d-4bd4-a243-fe93b83b194b.pem", + "mimetype": "application/x-pem-file" + }, + "pubKeyHash": "kVO5KcVhLn+EO7KjAiRhLgxhA1OOzdUgODPbCEfZ+kQ=", + "crlite_enrolled": true, + "id": "cc812a01-562a-4570-bb57-65b903984b64", + "last_modified": 1661648223176 + }, + { + "schema": 1661561330852, + "derHash": "O2+rCrEcFO75Axlp4K2wN8j8wzZnKKZWdiPTwms2Mss=", + "subject": "CN=Amazon RSA 4096 M04,O=Amazon,C=US", + "subjectDN": "MDwxCzAJBgNVBAYTAlVTMQ8wDQYDVQQKEwZBbWF6b24xHDAaBgNVBAMTE0FtYXpvbiBSU0EgNDA5NiBNMDQ=", + "whitelist": false, + "attachment": { + "hash": "34bf53680a87649997ed01605801e9d3b8b70a68912f9c199f9c337b93a11e4f", + "size": 2268, + "filename": "iZEKooQ3Z2hRlfox5B5j5upQGSBxBNialNi2XBoFqSc=.pem", + "location": "security-state-staging/intermediates/6c0364a6-c99d-4709-837b-affccae1d280.pem", + "mimetype": "application/x-pem-file" + }, + "pubKeyHash": "iZEKooQ3Z2hRlfox5B5j5upQGSBxBNialNi2XBoFqSc=", + "crlite_enrolled": false, + "id": "2f15de25-e0d0-4a35-8fd0-ebfb645c709f", + "last_modified": 1661561823149 + }, + { + "schema": 1661561329955, + "derHash": "9A2kVb4Tbg2zGhFv/TwwArHrvFkVWEk/5jCpyMmvrXA=", + "subject": "CN=Amazon ECDSA 384 M03,O=Amazon,C=US", + "subjectDN": "MD0xCzAJBgNVBAYTAlVTMQ8wDQYDVQQKEwZBbWF6b24xHTAbBgNVBAMTFEFtYXpvbiBFQ0RTQSAzODQgTTAz", + "whitelist": false, + "attachment": { + "hash": "86b10dab50bee3f45091a9ecfddc42ba6680d817ca24ea41be6aaf3aaa00c57d", + "size": 1122, + "filename": "usZw2qTFJ4qcr9M5rzEibaC45ka1MVh3UTG1JnYOLUU=.pem", + "location": "security-state-staging/intermediates/020c27d9-8f2b-4358-90ca-c7e1b7b079bd.pem", + "mimetype": "application/x-pem-file" + }, + "pubKeyHash": "usZw2qTFJ4qcr9M5rzEibaC45ka1MVh3UTG1JnYOLUU=", + "crlite_enrolled": false, + "id": "78f4fa53-96f6-49dc-82cf-f7ad7aa4f553", + "last_modified": 1661561823142 + }, + { + "schema": 1661561329138, + "derHash": "LMOfZ4m5Z7AoKurKRUj2AqGydOkNJgdz6eew98DxNDI=", + "subject": "CN=Amazon RSA 4096 M02,O=Amazon,C=US", + "subjectDN": "MDwxCzAJBgNVBAYTAlVTMQ8wDQYDVQQKEwZBbWF6b24xHDAaBgNVBAMTE0FtYXpvbiBSU0EgNDA5NiBNMDI=", + "whitelist": false, + "attachment": { + "hash": "36b459dadf1ae81b06a1a296babb5453455cc61d98c287ecae1516aab89cc7c9", + "size": 2268, + "filename": "Z2B_Qo9zcoKyitUg31ADZFus4Q75K2JIBBm9wSkjyIA=.pem", + "location": "security-state-staging/intermediates/46bab996-659a-463c-84b0-639116cabdd8.pem", + "mimetype": "application/x-pem-file" + }, + "pubKeyHash": "Z2B/Qo9zcoKyitUg31ADZFus4Q75K2JIBBm9wSkjyIA=", + "crlite_enrolled": false, + "id": "13532219-6957-4705-ae1c-ad9544b02037", + "last_modified": 1661561823135 + }, + { + "schema": 1661561328272, + "derHash": "Qb3AdOuVMeyB/vCNn/oWU29h/Fl4kmXpXomkmCrvP5E=", + "subject": "CN=Amazon RSA 4096 M03,O=Amazon,C=US", + "subjectDN": "MDwxCzAJBgNVBAYTAlVTMQ8wDQYDVQQKEwZBbWF6b24xHDAaBgNVBAMTE0FtYXpvbiBSU0EgNDA5NiBNMDM=", + "whitelist": false, + "attachment": { + "hash": "6252c9f3228e9bc532d49c1987fcd448ebcf0bad5801030567028b12e9916f5c", + "size": 2268, + "filename": "g_Ugk7jmp2vbs_AT4CuAjxXteaWqr_ztjrmsNwrL3bE=.pem", + "location": "security-state-staging/intermediates/69bc118e-ba59-4734-a5c1-546158301582.pem", + "mimetype": "application/x-pem-file" + }, + "pubKeyHash": "g/Ugk7jmp2vbs/AT4CuAjxXteaWqr/ztjrmsNwrL3bE=", + "crlite_enrolled": false, + "id": "656b8121-d96d-4d65-ba29-0508adecf1e6", + "last_modified": 1661561823129 + }, + { + "schema": 1661561323950, + "derHash": "3+NcdAz0HAsFPiIC6lr8LwIfcL+QsmvIYf4dmgv8Tx4=", + "subject": "CN=Amazon ECDSA 384 M01,O=Amazon,C=US", + "subjectDN": "MD0xCzAJBgNVBAYTAlVTMQ8wDQYDVQQKEwZBbWF6b24xHTAbBgNVBAMTFEFtYXpvbiBFQ0RTQSAzODQgTTAx", + "whitelist": false, + "attachment": { + "hash": "42da450f52d50b3ee609748e63503b182b6b21818f0f0bf4e8f57e6edacb5658", + "size": 1122, + "filename": "RM3y5tcn1oEOdEd-IzeZYwxr-FiMF6DAbydz8US9IHA=.pem", + "location": "security-state-staging/intermediates/b5c9a2e1-5433-4a48-a84a-caff8d512f05.pem", + "mimetype": "application/x-pem-file" + }, + "pubKeyHash": "RM3y5tcn1oEOdEd+IzeZYwxr+FiMF6DAbydz8US9IHA=", + "crlite_enrolled": false, + "id": "cdc04459-16a6-4084-bb8f-413baeee84e8", + "last_modified": 1661561823122 + }, + { + "schema": 1661561322241, + "derHash": "E4vfbiOslx605iayed1qJvBXUQ8d45QpOl7qKGDeAZs=", + "subject": "CN=Amazon RSA 2048 M04,O=Amazon,C=US", + "subjectDN": "MDwxCzAJBgNVBAYTAlVTMQ8wDQYDVQQKEwZBbWF6b24xHDAaBgNVBAMTE0FtYXpvbiBSU0EgMjA0OCBNMDQ=", + "whitelist": false, + "attachment": { + "hash": "3fd6a67306830c682f642e1458bbe239ac874cfb208e513d2d69a7a408cc3fe8", + "size": 1573, + "filename": "G9LNNAql897egYsabashkzUCTEJkWBzgoEtk8X_678c=.pem", + "location": "security-state-staging/intermediates/8d8a1a2b-4e4e-42cf-86ad-f0bddf6dd18b.pem", + "mimetype": "application/x-pem-file" + }, + "pubKeyHash": "G9LNNAql897egYsabashkzUCTEJkWBzgoEtk8X/678c=", + "crlite_enrolled": false, + "id": "70ed5476-f737-4dba-bb87-563abc6d0075", + "last_modified": 1661561823115 + }, + { + "schema": 1661561327403, + "derHash": "sPMwoxoMUJh+HDp7sCwt2mgpkdMWW1F71E+6SmAgvZQ=", + "subject": "CN=Amazon RSA 2048 M02,O=Amazon,C=US", + "subjectDN": "MDwxCzAJBgNVBAYTAlVTMQ8wDQYDVQQKEwZBbWF6b24xHDAaBgNVBAMTE0FtYXpvbiBSU0EgMjA0OCBNMDI=", + "whitelist": false, + "attachment": { + "hash": "2b97f25007709fabcfdc7f1421c6c2619d3aa9b5d5b9406531af231a111d647a", + "size": 1573, + "filename": "18tkPyr2nckv4fgo0dhAkaUtJ2hu2831xlO2SKhq8dg=.pem", + "location": "security-state-staging/intermediates/428b12bc-6cd5-4015-9246-8998285520ab.pem", + "mimetype": "application/x-pem-file" + }, + "pubKeyHash": "18tkPyr2nckv4fgo0dhAkaUtJ2hu2831xlO2SKhq8dg=", + "crlite_enrolled": false, + "id": "9f31f9c2-c59b-4b3a-bd5c-580178033148", + "last_modified": 1661561823108 + }, + { + "schema": 1661561325712, + "derHash": "0kEZLM5X1DiYZyOXLdbxi1o6NFanCOjyc9FHIjq2+l0=", + "subject": "CN=Amazon ECDSA 256 M04,O=Amazon,C=US", + "subjectDN": "MD0xCzAJBgNVBAYTAlVTMQ8wDQYDVQQKEwZBbWF6b24xHTAbBgNVBAMTFEFtYXpvbiBFQ0RTQSAyNTYgTTA0", + "whitelist": false, + "attachment": { + "hash": "3ce0e57793930070dcb59f4baf0e716cef8295746f98dd9346833cc81d073b93", + "size": 1037, + "filename": "8dcSZIGOkkJAXV71MH2lsFJuG8T2GkkAq3oGwdC4sHo=.pem", + "location": "security-state-staging/intermediates/5ba01136-cb9d-42b7-9009-79d5e3b8cd87.pem", + "mimetype": "application/x-pem-file" + }, + "pubKeyHash": "8dcSZIGOkkJAXV71MH2lsFJuG8T2GkkAq3oGwdC4sHo=", + "crlite_enrolled": false, + "id": "a9fa59e9-1551-4d4d-b912-0024e88cf96c", + "last_modified": 1661561823102 + }, + { + "schema": 1661561331720, + "derHash": "R/0RrVUqsmTX8nJ3DTtVkKrhRUEvStYIG9xIUpjY4AA=", + "subject": "CN=Amazon ECDSA 384 M04,O=Amazon,C=US", + "subjectDN": "MD0xCzAJBgNVBAYTAlVTMQ8wDQYDVQQKEwZBbWF6b24xHTAbBgNVBAMTFEFtYXpvbiBFQ0RTQSAzODQgTTA0", + "whitelist": false, + "attachment": { + "hash": "e633493b8c8cc9cb2eee8c019886d44339cdbba66970181e59375105dcd06a6f", + "size": 1122, + "filename": "o_dEE2RF7HEyYEYGA0EpZHFv7rjZnYSU6_574VsBiVY=.pem", + "location": "security-state-staging/intermediates/4a5b886c-8f4f-4861-b304-e3caf581db5a.pem", + "mimetype": "application/x-pem-file" + }, + "pubKeyHash": "o/dEE2RF7HEyYEYGA0EpZHFv7rjZnYSU6/574VsBiVY=", + "crlite_enrolled": false, + "id": "26f055fb-77ea-4ea0-a8d5-4ecbc6a59202", + "last_modified": 1661561823095 + }, + { + "schema": 1661561326562, + "derHash": "p9FeYseIJZGftZveWO/PsCJbQQffxgAmiFQgGF3Gm2M=", + "subject": "CN=Amazon ECDSA 384 M02,O=Amazon,C=US", + "subjectDN": "MD0xCzAJBgNVBAYTAlVTMQ8wDQYDVQQKEwZBbWF6b24xHTAbBgNVBAMTFEFtYXpvbiBFQ0RTQSAzODQgTTAy", + "whitelist": false, + "attachment": { + "hash": "7694a8ef8c7aaf69abaecc3b05262945607bd60899528570d93ce85ea9859917", + "size": 1122, + "filename": "0Yzy98IG0oPAJ2UzD253NkswQJH7XFYXIgCWppwVPbQ=.pem", + "location": "security-state-staging/intermediates/c1258ec4-f8e9-4fad-ae81-7789d99c7f47.pem", + "mimetype": "application/x-pem-file" + }, + "pubKeyHash": "0Yzy98IG0oPAJ2UzD253NkswQJH7XFYXIgCWppwVPbQ=", + "crlite_enrolled": false, + "id": "1ff6197c-5263-4e83-b354-360d0db926fb", + "last_modified": 1661561823088 + }, + { + "schema": 1661561320561, + "derHash": "v4ppAnvMjS1CpubSW91Ic/ajS4+Q7fB+hsXWkW2guTM=", + "subject": "CN=Amazon RSA 2048 M03,O=Amazon,C=US", + "subjectDN": "MDwxCzAJBgNVBAYTAlVTMQ8wDQYDVQQKEwZBbWF6b24xHDAaBgNVBAMTE0FtYXpvbiBSU0EgMjA0OCBNMDM=", + "whitelist": false, + "attachment": { + "hash": "7e0ddf74af77639eb14ff4608979cf3539ee193c8d27f436eca0b6c068f39f7c", + "size": 1573, + "filename": "vxRon_El5KuI4vx5ey1DgmsYmRY0nDd5Cg4GfJ8S-bg=.pem", + "location": "security-state-staging/intermediates/6dc00bc6-c455-409b-a24c-790b8cf09e7f.pem", + "mimetype": "application/x-pem-file" + }, + "pubKeyHash": "vxRon/El5KuI4vx5ey1DgmsYmRY0nDd5Cg4GfJ8S+bg=", + "crlite_enrolled": false, + "id": "e6f0f6d1-50db-4673-8606-c86cfa51ffdc", + "last_modified": 1661561823081 + }, + { + "schema": 1661561321402, + "derHash": "MysQFTn6icpOIocZ/lKHq2hprzGrIcvxEPXdPFmUwcc=", + "subject": "CN=Amazon ECDSA 256 M01,O=Amazon,C=US", + "subjectDN": "MD0xCzAJBgNVBAYTAlVTMQ8wDQYDVQQKEwZBbWF6b24xHTAbBgNVBAMTFEFtYXpvbiBFQ0RTQSAyNTYgTTAx", + "whitelist": false, + "attachment": { + "hash": "bc9627b077f8e49740f4a758d95cf104d557357e7ff2d32a3d1b71ff7f66af51", + "size": 1041, + "filename": "Qn2rVbyC3wQTe4rKJB9XU1WaCtwtBNpusM7f5eHjj9M=.pem", + "location": "security-state-staging/intermediates/b355804b-4052-46bc-8216-e19067687e45.pem", + "mimetype": "application/x-pem-file" + }, + "pubKeyHash": "Qn2rVbyC3wQTe4rKJB9XU1WaCtwtBNpusM7f5eHjj9M=", + "crlite_enrolled": false, + "id": "5cc801d8-6a8e-49a7-8156-422a38db6b13", + "last_modified": 1661561823074 + }, + { + "schema": 1661561324860, + "derHash": "+WkyVZM7aBWdFoqpokfaHcZuI8BiAzjvcUnkj4Oxrnk=", + "subject": "CN=Amazon ECDSA 256 M02,O=Amazon,C=US", + "subjectDN": "MD0xCzAJBgNVBAYTAlVTMQ8wDQYDVQQKEwZBbWF6b24xHTAbBgNVBAMTFEFtYXpvbiBFQ0RTQSAyNTYgTTAy", + "whitelist": false, + "attachment": { + "hash": "960f585c95350d0f3af0983bb0cdf9ec14ef932a553228568ec01d3931a4ba41", + "size": 1041, + "filename": "lyXQLG_81tHkNq6AspMb9zMj2vhe29x5k_iuxJHpsms=.pem", + "location": "security-state-staging/intermediates/ee24440a-cafa-4fbc-8101-8963db58c40b.pem", + "mimetype": "application/x-pem-file" + }, + "pubKeyHash": "lyXQLG/81tHkNq6AspMb9zMj2vhe29x5k/iuxJHpsms=", + "crlite_enrolled": false, + "id": "1d66c671-4640-4887-a303-da01cc17a608", + "last_modified": 1661561823067 + }, + { + "schema": 1661561323109, + "derHash": "QP4o3JJdGoprj4YYY+tXzTDGd2QWq4qZkgusfJJaQXQ=", + "subject": "CN=Amazon RSA 4096 M01,O=Amazon,C=US", + "subjectDN": "MDwxCzAJBgNVBAYTAlVTMQ8wDQYDVQQKEwZBbWF6b24xHDAaBgNVBAMTE0FtYXpvbiBSU0EgNDA5NiBNMDE=", + "whitelist": false, + "attachment": { + "hash": "dfa8552f1a25377b7875e689ee5febd25cea8c88bbc2ce0a14c3150ae8c9c81f", + "size": 2268, + "filename": "gPI4HNthHVSIbODF1ry6NYD4gjsOabolcpW-LEix0BY=.pem", + "location": "security-state-staging/intermediates/d4f5427c-1e67-49a4-a618-e8dc465c36f8.pem", + "mimetype": "application/x-pem-file" + }, + "pubKeyHash": "gPI4HNthHVSIbODF1ry6NYD4gjsOabolcpW+LEix0BY=", + "crlite_enrolled": false, + "id": "cfee27d0-e82d-4360-a733-a0b8ee36f617", + "last_modified": 1661561823060 + }, + { + "schema": 1661561319687, + "derHash": "ST547ujMofJuZJTtkkmFrz+p5hEOqmHDIU6Nc7QEcxY=", + "subject": "CN=Amazon ECDSA 256 M03,O=Amazon,C=US", + "subjectDN": "MD0xCzAJBgNVBAYTAlVTMQ8wDQYDVQQKEwZBbWF6b24xHTAbBgNVBAMTFEFtYXpvbiBFQ0RTQSAyNTYgTTAz", + "whitelist": false, + "attachment": { + "hash": "36c68a3ea49bef4f1fa2c32a364339daac12b83fdaa6cbfbf194c06029b62b14", + "size": 1041, + "filename": "EeanMg3Yqy6aN2LhC28wADhHDB_czZ9k4RcepvoGwRg=.pem", + "location": "security-state-staging/intermediates/e758a729-50b0-4eca-a11d-6aaa41a9672d.pem", + "mimetype": "application/x-pem-file" + }, + "pubKeyHash": "EeanMg3Yqy6aN2LhC28wADhHDB/czZ9k4RcepvoGwRg=", + "crlite_enrolled": false, + "id": "c4316e4b-fd16-4947-93cd-4451816e1922", + "last_modified": 1661561823053 + }, + { + "schema": 1661414196626, + "derHash": "yeQPToM5bzSnyGGBe07as9wfi6xpn9UMsmH6kSPVXvQ=", + "subject": "CN=SwissSign Personal Silver CA 2014 - G22,O=SwissSign AG,C=CH", + "subjectDN": "MFYxCzAJBgNVBAYTAkNIMRUwEwYDVQQKEwxTd2lzc1NpZ24gQUcxMDAuBgNVBAMTJ1N3aXNzU2lnbiBQZXJzb25hbCBTaWx2ZXIgQ0EgMjAxNCAtIEcyMg==", + "whitelist": false, + "attachment": { + "hash": "8b3dff1c600553b50452dcbd5783cbfaa219a177d66705c2de0f41eb51b439a5", + "size": 2398, + "filename": "m0Mz3XVaph4DGN-UfcVV7i83DtSCwW0evxwDvZf_j18=.pem", + "location": "security-state-staging/intermediates/2b6e11e8-fc81-45eb-9865-4123414df1e4.pem", + "mimetype": "application/x-pem-file" + }, + "pubKeyHash": "m0Mz3XVaph4DGN+UfcVV7i83DtSCwW0evxwDvZf/j18=", + "crlite_enrolled": false, + "id": "59ced421-04b9-4022-85c6-56f10093da01", + "last_modified": 1661453823145 }, { "schema": 1661388534953, @@ -252,24 +594,6 @@ "id": "6444a572-8d81-4739-990d-40d7f53f47be", "last_modified": 1660265823315 }, - { - "schema": 1660265332511, - "derHash": "lzpBJ2/9AeAnoqrUnjTDeEbT6Xb/amILZxLjODIEGqY=", - "subject": "CN=Go Daddy Secure Certificate Authority - G2,OU=http://certs.godaddy.com/repository/,O=GoDaddy.com%5C%5C, Inc.,L=Scottsdale,ST=Arizona,C=US", - "subjectDN": "MIG0MQswCQYDVQQGEwJVUzEQMA4GA1UECBMHQXJpem9uYTETMBEGA1UEBxMKU2NvdHRzZGFsZTEaMBgGA1UEChMRR29EYWRkeS5jb20sIEluYy4xLTArBgNVBAsTJGh0dHA6Ly9jZXJ0cy5nb2RhZGR5LmNvbS9yZXBvc2l0b3J5LzEzMDEGA1UEAxMqR28gRGFkZHkgU2VjdXJlIENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcy", - "whitelist": false, - "attachment": { - "hash": "a111efc20329e87b541cfc3e7f526fc54bb24624fddf210f4347b9fadfb1ab6b", - "size": 1727, - "filename": "8Rw90Ej3Ttt8RRkrg-WYDS9n7IS03bk5bjP_UXPtaY8=.pem", - "location": "security-state-staging/intermediates/a2a04dfe-6201-4d0a-b8cf-80d2975bfb51.pem", - "mimetype": "application/x-pem-file" - }, - "pubKeyHash": "8Rw90Ej3Ttt8RRkrg+WYDS9n7IS03bk5bjP/UXPtaY8=", - "crlite_enrolled": true, - "id": "549c92e2-3738-4c8c-ae37-407e4e6158ce", - "last_modified": 1660265823304 - }, { "schema": 1660265332678, "derHash": "RVgDgOS8DZcoyfMJite2CrJyEtD/FCAgxSMIkauEcb4=", @@ -5454,24 +5778,6 @@ "id": "e944087f-76e7-41f9-a1bb-8ef5a2cd787a", "last_modified": 1648609047053 }, - { - "schema": 1648543719121, - "derHash": "QciXRzsDafp0sfT51/iRKUhcGjBcBxmoZ9yHFOCHAgA=", - "subject": "CN=D-TRUST EV CA 1-20-1 2020,O=D-Trust GmbH,C=DE", - "subjectDN": "MEgxCzAJBgNVBAYTAkRFMRUwEwYDVQQKEwxELVRydXN0IEdtYkgxIjAgBgNVBAMTGUQtVFJVU1QgRVYgQ0EgMS0yMC0xIDIwMjA=", - "whitelist": false, - "attachment": { - "hash": "e7243885420768bcfaeaac83d278d2ecce102cec4ec1d4dfe7dcd96b7fd8729d", - "size": 1662, - "filename": "SJEHwcDvLp0G_-CfkfLyIPLHc6_k-E4CaepcoEBFq5s=.pem", - "location": "security-state-staging/intermediates/ff509022-df05-462c-8f12-7d582a910132.pem", - "mimetype": "application/x-pem-file" - }, - "pubKeyHash": "SJEHwcDvLp0G/+CfkfLyIPLHc6/k+E4CaepcoEBFq5s=", - "crlite_enrolled": false, - "id": "5767e4fa-0b6e-4802-be9d-d4bf52538de8", - "last_modified": 1648544242415 - }, { "schema": 1648543717132, "derHash": "smjRaTSrW6Iy8XnNn1x/wH6oWDpWqafB1stY/ggjv1o=", @@ -5490,24 +5796,6 @@ "id": "9f5f757a-0664-40de-9df0-ddb2f904aa4b", "last_modified": 1648544242406 }, - { - "schema": 1648543718185, - "derHash": "GZqyqq//QEAeCjt7h+6ZZGWe/6lKH+y+kYrhNuS04Kg=", - "subject": "CN=D-TRUST BR CA 1-20-1 2020,O=D-Trust GmbH,C=DE", - "subjectDN": "MEgxCzAJBgNVBAYTAkRFMRUwEwYDVQQKEwxELVRydXN0IEdtYkgxIjAgBgNVBAMTGUQtVFJVU1QgQlIgQ0EgMS0yMC0xIDIwMjA=", - "whitelist": false, - "attachment": { - "hash": "83449537aac8862f1ea8058fb335366b6fa8c7a51110de57bb5435ab54ab0804", - "size": 1662, - "filename": "kVO5KcVhLn-EO7KjAiRhLgxhA1OOzdUgODPbCEfZ-kQ=.pem", - "location": "security-state-staging/intermediates/75be562f-315d-4bd4-a243-fe93b83b194b.pem", - "mimetype": "application/x-pem-file" - }, - "pubKeyHash": "kVO5KcVhLn+EO7KjAiRhLgxhA1OOzdUgODPbCEfZ+kQ=", - "crlite_enrolled": false, - "id": "cc812a01-562a-4570-bb57-65b903984b64", - "last_modified": 1648544242397 - }, { "schema": 1648514935045, "derHash": "0WuprLdP7kqoCH7kguhuf29fVfrFAlY5cwdT/h5wXjw=", @@ -13968,24 +14256,6 @@ "id": "91d09b08-504f-4a5f-88f7-6c58778026f2", "last_modified": 1640098697439 }, - { - "schema": 1640098223070, - "derHash": "yeQPToM5bzSnyGGBe07as9wfi6xpn9UMsmH6kSPVXvQ=", - "subject": "CN=SwissSign Personal Silver CA 2014 - G22,O=SwissSign AG,C=CH", - "subjectDN": "MFYxCzAJBgNVBAYTAkNIMRUwEwYDVQQKEwxTd2lzc1NpZ24gQUcxMDAuBgNVBAMTJ1N3aXNzU2lnbiBQZXJzb25hbCBTaWx2ZXIgQ0EgMjAxNCAtIEcyMg==", - "whitelist": false, - "attachment": { - "hash": "8b3dff1c600553b50452dcbd5783cbfaa219a177d66705c2de0f41eb51b439a5", - "size": 2398, - "filename": "m0Mz3XVaph4DGN-UfcVV7i83DtSCwW0evxwDvZf_j18=.pem", - "location": "security-state-staging/intermediates/2b6e11e8-fc81-45eb-9865-4123414df1e4.pem", - "mimetype": "application/x-pem-file" - }, - "pubKeyHash": "m0Mz3XVaph4DGN+UfcVV7i83DtSCwW0evxwDvZf/j18=", - "crlite_enrolled": true, - "id": "59ced421-04b9-4022-85c6-56f10093da01", - "last_modified": 1640098697429 - }, { "schema": 1640098223357, "derHash": "d9bCr1p7hvY9mRjIdTN3nyrwjTXPoU2kk4yAP1PeGKE=", @@ -25723,5 +25993,5 @@ "last_modified": 1559865863642 } ], - "timestamp": 1661410623072 + "timestamp": 1661648223209 }
This is an automated email from the git hooks/post-receive script.
richard pushed a commit to branch geckoview-102.3.0esr-12.0-1 in repository tor-browser.
commit da2b9096bb84210bb72eebb37c24fe536944d124 Author: Johan Lorenzo jlorenzo@mozilla.com AuthorDate: Mon Aug 29 09:46:13 2022 +0000
Bug 1787674 - Snap: Run `apt-get update` before downloading apt packages. r=jcristau, a=RyanVM
Differential Revision: https://phabricator.services.mozilla.com/D155823 --- taskcluster/docker/firefox-snap/runme.sh | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-)
diff --git a/taskcluster/docker/firefox-snap/runme.sh b/taskcluster/docker/firefox-snap/runme.sh index c5a98fb7e0584..308640a8c8e4f 100755 --- a/taskcluster/docker/firefox-snap/runme.sh +++ b/taskcluster/docker/firefox-snap/runme.sh @@ -57,6 +57,12 @@ for locale in $locales; do "$CANDIDATES_DIR/${VERSION}-candidates/build${BUILD_NUMBER}/linux-x86_64/xpi/${locale}.xpi" done
+# In addition to the packages downloaded below, snapcraft fetches deb packages from ubuntu.com, +# when a snap is built,. They may bump packages there and remove the old ones. Updating the +# database allows snapcraft to find the latest packages. +# For more context, see 1448239 +apt-get update + # Extract gtk30.mo from Ubuntu language packs apt download language-pack-gnome-*-base for i in *.deb; do @@ -74,11 +80,6 @@ cd "${WORKSPACE}" # Make sure snapcraft knows we're building amd64, even though we may not be on this arch. export SNAP_ARCH='amd64'
-# When a snap is built, snapcraft fetches deb packages from ubuntu.com. They may bump packages -# there and remove the old ones. Updating the database allows snapcraft to find the latest packages. -# For more context, see 1448239 -apt-get update - snapcraft
mv -- *.snap "$TARGET_FULL_PATH"
This is an automated email from the git hooks/post-receive script.
richard pushed a commit to branch geckoview-102.3.0esr-12.0-1 in repository tor-browser.
commit 06dd4b32f0e4432646d3d7c5ecbf9597ec3f91ec Author: Karl Tomlinson karlt+@karlt.net AuthorDate: Tue Aug 23 00:23:51 2022 +0000
Bug 1781759 factor out ChannelMediaResource::MediaElement() helper r=chunmin a=RyanVM
Differential Revision: https://phabricator.services.mozilla.com/D154039 --- dom/media/ChannelMediaResource.cpp | 36 ++++++++++++++---------------------- dom/media/ChannelMediaResource.h | 2 ++ 2 files changed, 16 insertions(+), 22 deletions(-)
diff --git a/dom/media/ChannelMediaResource.cpp b/dom/media/ChannelMediaResource.cpp index 804884b1e359e..7266998f60fc9 100644 --- a/dom/media/ChannelMediaResource.cpp +++ b/dom/media/ChannelMediaResource.cpp @@ -512,6 +512,15 @@ nsresult ChannelMediaResource::Open(nsIStreamListener** aStreamListener) { return NS_OK; }
+dom::HTMLMediaElement* ChannelMediaResource::MediaElement() const { + MOZ_ASSERT(NS_IsMainThread()); + MediaDecoderOwner* owner = mCallback->GetMediaOwner(); + MOZ_DIAGNOSTIC_ASSERT(owner); + dom::HTMLMediaElement* element = owner->GetMediaElement(); + MOZ_DIAGNOSTIC_ASSERT(element); + return element; +} + nsresult ChannelMediaResource::OpenChannel(int64_t aOffset) { MOZ_ASSERT(NS_IsMainThread()); MOZ_DIAGNOSTIC_ASSERT(!mClosed); @@ -529,11 +538,7 @@ nsresult ChannelMediaResource::OpenChannel(int64_t aOffset) { NS_ENSURE_SUCCESS(rv, rv);
// Tell the media element that we are fetching data from a channel. - MediaDecoderOwner* owner = mCallback->GetMediaOwner(); - MOZ_DIAGNOSTIC_ASSERT(owner); - dom::HTMLMediaElement* element = owner->GetMediaElement(); - MOZ_DIAGNOSTIC_ASSERT(element); - element->DownloadResumed(); + MediaElement()->DownloadResumed();
return NS_OK; } @@ -556,11 +561,7 @@ nsresult ChannelMediaResource::SetupChannelHeaders(int64_t aOffset) { NS_ENSURE_SUCCESS(rv, rv);
// Send Accept header for video and audio types only (Bug 489071) - MediaDecoderOwner* owner = mCallback->GetMediaOwner(); - MOZ_DIAGNOSTIC_ASSERT(owner); - dom::HTMLMediaElement* element = owner->GetMediaElement(); - MOZ_DIAGNOSTIC_ASSERT(element); - element->SetRequestHeaders(hc); + MediaElement()->SetRequestHeaders(hc); } else { NS_ASSERTION(aOffset == 0, "Don't know how to seek on this channel type"); return NS_ERROR_FAILURE; @@ -669,10 +670,7 @@ void ChannelMediaResource::Suspend(bool aCloseImmediately) { return; }
- MediaDecoderOwner* owner = mCallback->GetMediaOwner(); - MOZ_DIAGNOSTIC_ASSERT(owner); - dom::HTMLMediaElement* element = owner->GetMediaElement(); - MOZ_DIAGNOSTIC_ASSERT(element); + dom::HTMLMediaElement* element = MediaElement();
if (mChannel && aCloseImmediately && mIsTransportSeekable) { CloseChannel(); @@ -691,10 +689,7 @@ void ChannelMediaResource::Resume() { return; }
- MediaDecoderOwner* owner = mCallback->GetMediaOwner(); - MOZ_DIAGNOSTIC_ASSERT(owner); - dom::HTMLMediaElement* element = owner->GetMediaElement(); - MOZ_DIAGNOSTIC_ASSERT(element); + dom::HTMLMediaElement* element = MediaElement();
if (mSuspendAgent.Resume()) { if (mChannel) { @@ -712,10 +707,7 @@ nsresult ChannelMediaResource::RecreateChannel() { nsLoadFlags loadFlags = nsICachingChannel::LOAD_BYPASS_LOCAL_CACHE_IF_BUSY | (mLoadInBackground ? nsIRequest::LOAD_BACKGROUND : 0);
- MediaDecoderOwner* owner = mCallback->GetMediaOwner(); - MOZ_DIAGNOSTIC_ASSERT(owner); - dom::HTMLMediaElement* element = owner->GetMediaElement(); - MOZ_DIAGNOSTIC_ASSERT(element); + dom::HTMLMediaElement* element = MediaElement();
nsCOMPtr<nsILoadGroup> loadGroup = element->GetDocumentLoadGroup(); NS_ENSURE_TRUE(loadGroup, NS_ERROR_NULL_POINTER); diff --git a/dom/media/ChannelMediaResource.h b/dom/media/ChannelMediaResource.h index 695e490c6f7c0..892dca1de081d 100644 --- a/dom/media/ChannelMediaResource.h +++ b/dom/media/ChannelMediaResource.h @@ -213,6 +213,8 @@ class ChannelMediaResource nsresult OnChannelRedirect(nsIChannel* aOld, nsIChannel* aNew, uint32_t aFlags, int64_t aOffset);
+ // Use only before MediaDecoder shutdown. Main thread only. + dom::HTMLMediaElement* MediaElement() const; // Opens the channel, using an HTTP byte range request to start at aOffset // if possible. Main thread only. nsresult OpenChannel(int64_t aOffset);
This is an automated email from the git hooks/post-receive script.
richard pushed a commit to branch geckoview-102.3.0esr-12.0-1 in repository tor-browser.
commit ba3564bcf0e5b8773ad04275f0ade02cbaaa5ef0 Author: Karl Tomlinson karlt+@karlt.net AuthorDate: Tue Aug 23 00:23:51 2022 +0000
Bug 1781759 use media element node principal instead of channel loading principal for cross-origin resource test r=padenot a=RyanVM
When the media resource is loaded as a document, the response from the initial document load gets reused, as an optimization, as an emulated load for the resource of the media host element in the generated HTML document. https://searchfox.org/mozilla-central/rev/5644fae86d5122519a0e34ee03117c88c6... https://html.spec.whatwg.org/multipage/browsing-the-web.html#read-media The loadingPrincipal of the initial channel comes from the parent document, and so is not useful to determine whether the response is cross-origin with the media element.
This change makes the cross-origin test on the initial document load consistent with subsequent requests on the same resource and non-document loads, which already use the node principal for the loadingPrincipal. https://searchfox.org/mozilla-central/rev/1061fae5e225a99ef5e43dbdf560a91a0c... https://searchfox.org/mozilla-central/rev/4f2984be127d2e7c788cf1848d63dca630...
Depends on D154039
Differential Revision: https://phabricator.services.mozilla.com/D154040 --- dom/media/ChannelMediaResource.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/dom/media/ChannelMediaResource.cpp b/dom/media/ChannelMediaResource.cpp index 7266998f60fc9..e0a44ab805d52 100644 --- a/dom/media/ChannelMediaResource.cpp +++ b/dom/media/ChannelMediaResource.cpp @@ -827,7 +827,7 @@ void ChannelMediaResource::UpdatePrincipal() { // media element, they are not considered opaque when verifying // network responses; they can be mixed with non-opaque responses from // subsequent loads on the same-origin finalURI. - !nsContentUtils::CheckMayLoad(loadInfo->GetLoadingPrincipal(), mChannel, + !nsContentUtils::CheckMayLoad(MediaElement()->NodePrincipal(), mChannel, /*allowIfInheritsPrincipal*/ true); if (!hadData) { // First response with data mSharedInfo->mFinalResponsesAreOpaque = finalResponseIsOpaque;
This is an automated email from the git hooks/post-receive script.
richard pushed a commit to branch geckoview-102.3.0esr-12.0-1 in repository tor-browser.
commit 50d697de731208685db0168b9fcef2e7260996fa Author: Karl Tomlinson karlt+@karlt.net AuthorDate: Tue Aug 23 00:23:52 2022 +0000
Bug 1781759 Test cross origin load of media document in parts r=chunmin a=RyanVM
Depends on D154040
Differential Revision: https://phabricator.services.mozilla.com/D154041 --- .../read-media/cross-origin-video.html | 32 ++++++++++++++++++++++ .../read-media/resources/iframe-document.sub.html | 5 ++++ 2 files changed, 37 insertions(+)
diff --git a/testing/web-platform/tests/html/browsers/browsing-the-web/read-media/cross-origin-video.html b/testing/web-platform/tests/html/browsers/browsing-the-web/read-media/cross-origin-video.html new file mode 100644 index 0000000000000..b99658facb29b --- /dev/null +++ b/testing/web-platform/tests/html/browsers/browsing-the-web/read-media/cross-origin-video.html @@ -0,0 +1,32 @@ +<!doctype html> +<title>Test cross origin load of media document in parts</title> +<link rel="motivation" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1781759"> +<script src=/resources/testharness.js></script> +<script src=/resources/testharnessreport.js></script> +<script src="/common/get-host-info.sub.js"></script> +<body></body> +<script> +promise_test(async () => { + const frame = document.createElement('iframe'); + const dir = location.pathname.replace(//[^/]*$/, '/'); + frame.src = + // remote origin intermediate document + get_host_info().HTTP_NOTSAMESITE_ORIGIN + dir + // iframe-document.sub.html has an iframe with src=childsrc. + + 'resources/iframe-document.sub.html?childsrc=' + // same origin video document, so that we can play(). + + get_host_info().ORIGIN + // 'PartialContent' ensures that the entire video resource does not load + // in one fetch. + + '/service-workers/service-worker/resources/fetch-access-control.py?' + + 'VIDEO%26PartialContent'; + + document.body.appendChild(frame); + await new Promise(resolve => frame.onload = resolve); + + const inner = frame.contentWindow.frames[0]; + const video = inner.document.body.childNodes[0]; + video.muted = true; // to allow playback + return video.play(); +}); +</script> diff --git a/testing/web-platform/tests/html/browsers/browsing-the-web/read-media/resources/iframe-document.sub.html b/testing/web-platform/tests/html/browsers/browsing-the-web/read-media/resources/iframe-document.sub.html new file mode 100644 index 0000000000000..69523efa7abc7 --- /dev/null +++ b/testing/web-platform/tests/html/browsers/browsing-the-web/read-media/resources/iframe-document.sub.html @@ -0,0 +1,5 @@ +<!doctype html> +<html> +<iframe src="{{GET[childsrc]}}"> +</iframe> +</html>
This is an automated email from the git hooks/post-receive script.
richard pushed a commit to branch geckoview-102.3.0esr-12.0-1 in repository tor-browser.
commit 4b97f47d5532e8f7dd0c82a743f992d75ddd6c9d Author: Karl Tomlinson karlt+@karlt.net AuthorDate: Wed Aug 24 01:55:02 2022 +0000
Bug 1781063 don't use tainting for cross-origin check on document media resource loads r=chunmin a=RyanVM
When the media resource is loaded as a document, the response from the initial document load gets reused, as an optimization, as an emulated load for the resource of the media host element in the generated HTML document. https://searchfox.org/mozilla-central/rev/5644fae86d5122519a0e34ee03117c88c6... https://html.spec.whatwg.org/multipage/browsing-the-web.html#read-media
Depends on D154041
Differential Revision: https://phabricator.services.mozilla.com/D154042 --- dom/media/ChannelMediaResource.cpp | 27 ++++++++++++++++++++------- 1 file changed, 20 insertions(+), 7 deletions(-)
diff --git a/dom/media/ChannelMediaResource.cpp b/dom/media/ChannelMediaResource.cpp index e0a44ab805d52..1bff255343ef1 100644 --- a/dom/media/ChannelMediaResource.cpp +++ b/dom/media/ChannelMediaResource.cpp @@ -814,14 +814,27 @@ void ChannelMediaResource::UpdatePrincipal() { mode == nsILoadInfo::SEC_ALLOW_CROSS_ORIGIN_INHERITS_SEC_CONTEXT || mode == nsILoadInfo::SEC_ALLOW_CROSS_ORIGIN_SEC_CONTEXT_IS_NULL, "no-cors request"); + MOZ_ASSERT(!hadData || !mChannel->IsDocument(), + "Only the initial load may be a document load"); bool finalResponseIsOpaque = - // GetChannelResultPrincipal() returns the original request URL for - // null-origin Responses from ServiceWorker, in which case the URL - // does not indicate the real source of data. Such null-origin - // Responses have Basic LoadTainting. CORS filtered Responses from - // ServiceWorker also cannot be mixed with no-cors cross-origin - // responses. - loadInfo->GetTainting() == LoadTainting::Opaque && + // NS_GetFinalChannelURI() and GetChannelResultPrincipal() return the + // original request URI for null-origin Responses from ServiceWorker, + // in which case the URI does not necessarily indicate the real source + // of data. Such null-origin Responses have Basic LoadTainting, and + // so can be distinguished from true cross-origin responses when the + // channel is not a document load. + // + // When the channel is a document load, LoadTainting indicates opacity + // wrt the parent document and so does not indicate whether the + // response is cross-origin wrt to the media element. However, + // ServiceWorkers for document loads are always same-origin with the + // channel URI and so there is no need to distinguish null-origin + // ServiceWorker responses to document loads. + // + // CORS filtered Responses from ServiceWorker also cannot be mixed + // with no-cors cross-origin responses. + (mChannel->IsDocument() || + loadInfo->GetTainting() == LoadTainting::Opaque) && // Although intermediate cross-origin redirects back to URIs with // loadingPrincipal will have LoadTainting::Opaque and will taint the // media element, they are not considered opaque when verifying
This is an automated email from the git hooks/post-receive script.
richard pushed a commit to branch geckoview-102.3.0esr-12.0-1 in repository tor-browser.
commit cfa8596ba261cc51b39d842a4c0a692b28d7b09d Author: Chris Martin cmartin@mozilla.com AuthorDate: Mon Aug 29 19:12:58 2022 +0000
Bug 1776655 - Allocate input report context for each gamepad. r=mccr8, a=RyanVM
Differential Revision: https://phabricator.services.mozilla.com/D152938 --- dom/gamepad/cocoa/CocoaGamepad.cpp | 48 ++++++++++++++++++++++++-------------- 1 file changed, 30 insertions(+), 18 deletions(-)
diff --git a/dom/gamepad/cocoa/CocoaGamepad.cpp b/dom/gamepad/cocoa/CocoaGamepad.cpp index f9f0feb7e5983..8a813b24542a1 100644 --- a/dom/gamepad/cocoa/CocoaGamepad.cpp +++ b/dom/gamepad/cocoa/CocoaGamepad.cpp @@ -28,7 +28,6 @@ namespace {
using namespace mozilla; using namespace mozilla::dom; -using std::vector; class DarwinGamepadService;
DarwinGamepadService* gService = nullptr; @@ -80,6 +79,11 @@ const unsigned kBackUsage = 0x224; // 50ms is arbitrarily chosen. const uint32_t kDarwinGamepadPollInterval = 50;
+struct GamepadInputReportContext { + DarwinGamepadService* service; + size_t gamepadSlot; +}; + class Gamepad { private: IOHIDDeviceRef mDevice; @@ -120,7 +124,8 @@ class Gamepad {
GamepadHandle mHandle; RefPtr<GamepadRemapper> mRemapper; - std::vector<uint8_t> mInputReport; + nsTArray<uint8_t> mInputReport; + UniquePtr<GamepadInputReportContext> mInputReportContext; };
void Gamepad::init(IOHIDDeviceRef aDevice, bool aDefaultRemapper) { @@ -179,7 +184,7 @@ void Gamepad::init(IOHIDDeviceRef aDevice, bool aDefaultRemapper) { class DarwinGamepadService { private: IOHIDManagerRef mManager; - vector<Gamepad> mGamepads; + nsTArray<Gamepad> mGamepads;
nsCOMPtr<nsIThread> mMonitorThread; nsCOMPtr<nsIThread> mBackgroundThread; @@ -272,14 +277,14 @@ void DarwinGamepadService::DeviceAdded(IOHIDDeviceRef device) { }
size_t slot = size_t(-1); - for (size_t i = 0; i < mGamepads.size(); i++) { + for (size_t i = 0; i < mGamepads.Length(); i++) { if (mGamepads[i] == device) return; if (slot == size_t(-1) && mGamepads[i].empty()) slot = i; }
if (slot == size_t(-1)) { - slot = mGamepads.size(); - mGamepads.push_back(Gamepad()); + slot = mGamepads.Length(); + mGamepads.AppendElement(Gamepad()); }
// Gather some identifying information @@ -322,13 +327,15 @@ void DarwinGamepadService::DeviceAdded(IOHIDDeviceRef device) { }
mGamepads[slot].mHandle = handle; - mGamepads[slot].mInputReport.resize(remapper->GetMaxInputReportLength()); + mGamepads[slot].mInputReport.SetLength(remapper->GetMaxInputReportLength()); + mGamepads[slot].mInputReportContext = UniquePtr<GamepadInputReportContext>( + new GamepadInputReportContext{this, slot}); mGamepads[slot].mRemapper = remapper.forget();
IOHIDDeviceRegisterInputReportCallback( - device, mGamepads[slot].mInputReport.data(), - mGamepads[slot].mInputReport.size(), ReportChangedCallback, - &mGamepads[slot]); + device, mGamepads[slot].mInputReport.Elements(), + mGamepads[slot].mInputReport.Length(), ReportChangedCallback, + mGamepads[slot].mInputReportContext.get()); }
void DarwinGamepadService::DeviceRemoved(IOHIDDeviceRef device) { @@ -337,13 +344,16 @@ void DarwinGamepadService::DeviceRemoved(IOHIDDeviceRef device) { if (!service) { return; } - for (size_t i = 0; i < mGamepads.size(); i++) { - if (mGamepads[i] == device) { + for (Gamepad& gamepad : mGamepads) { + if (gamepad == device) { IOHIDDeviceRegisterInputReportCallback( - device, mGamepads[i].mInputReport.data(), 0, NULL, &mGamepads[i]); + device, gamepad.mInputReport.Elements(), 0, NULL, + gamepad.mInputReportContext.get()); + + gamepad.mInputReportContext.reset();
- service->RemoveGamepad(mGamepads[i].mHandle); - mGamepads[i].clear(); + service->RemoveGamepad(gamepad.mHandle); + gamepad.clear(); return; } } @@ -354,7 +364,10 @@ void DarwinGamepadService::ReportChangedCallback( void* context, IOReturn result, void* sender, IOHIDReportType report_type, uint32_t report_id, uint8_t* report, CFIndex report_length) { if (context && report_type == kIOHIDReportTypeInput && report_length) { - reinterpret_cast<Gamepad*>(context)->ReportChanged(report, report_length); + auto reportContext = static_cast<GamepadInputReportContext*>(context); + DarwinGamepadService* service = reportContext->service; + service->mGamepads[reportContext->gamepadSlot].ReportChanged(report, + report_length); } }
@@ -388,8 +401,7 @@ void DarwinGamepadService::InputValueChanged(IOHIDValueRef value) { IOHIDElementRef element = IOHIDValueGetElement(value); IOHIDDeviceRef device = IOHIDElementGetDevice(element);
- for (unsigned i = 0; i < mGamepads.size(); i++) { - Gamepad& gamepad = mGamepads[i]; + for (Gamepad& gamepad : mGamepads) { if (gamepad == device) { // Axis elements represent axes and d-pads. if (Axis* axis = gamepad.lookupAxis(element)) {
This is an automated email from the git hooks/post-receive script.
richard pushed a commit to branch geckoview-102.3.0esr-12.0-1 in repository tor-browser.
commit 344e8654b59ec8b052cb6a2ab1bf28d37d81d559 Author: Jonathan Kew jkew@mozilla.com AuthorDate: Tue Jul 5 07:55:56 2022 +0000
Bug 1777209 - Use DrawSurface rather than FillRect to paint <canvas>, and don't use EXTEND_PAD when writing to PDF. r=jrmuizel, a=RyanVM
Differential Revision: https://phabricator.services.mozilla.com/D150601 --- gfx/2d/DrawTargetCairo.cpp | 12 ++++++++- layout/generic/nsHTMLCanvasFrame.cpp | 50 ++++++++++++++++++++---------------- layout/reftests/bugs/reftest.list | 2 +- 3 files changed, 40 insertions(+), 24 deletions(-)
diff --git a/gfx/2d/DrawTargetCairo.cpp b/gfx/2d/DrawTargetCairo.cpp index e0e7607936de7..1877ddc2ba226 100644 --- a/gfx/2d/DrawTargetCairo.cpp +++ b/gfx/2d/DrawTargetCairo.cpp @@ -884,7 +884,17 @@ void DrawTargetCairo::DrawSurface(SourceSurface* aSurface, const Rect& aDest, cairo_pattern_set_matrix(pat, &src_mat); cairo_pattern_set_filter( pat, GfxSamplingFilterToCairoFilter(aSurfOptions.mSamplingFilter)); - cairo_pattern_set_extend(pat, CAIRO_EXTEND_PAD); + // For PDF output, we avoid using EXTEND_PAD here because floating-point + // error accumulation may lead cairo_pdf_surface to conclude that padding + // is needed due to an apparent one- or two-pixel mismatch between source + // pattern and destination rect sizes when we're rendering a pdf.js page, + // and this forces undesirable fallback to the rasterization codepath + // instead of simply replaying the recording. + // (See bug 1777209.) + cairo_pattern_set_extend( + pat, cairo_surface_get_type(mSurface) == CAIRO_SURFACE_TYPE_PDF + ? CAIRO_EXTEND_NONE + : CAIRO_EXTEND_PAD);
cairo_set_antialias(mContext, GfxAntialiasToCairoAntialias(aOptions.mAntialiasMode)); diff --git a/layout/generic/nsHTMLCanvasFrame.cpp b/layout/generic/nsHTMLCanvasFrame.cpp index bfb9f1f71c034..09d6358e8e0cd 100644 --- a/layout/generic/nsHTMLCanvasFrame.cpp +++ b/layout/generic/nsHTMLCanvasFrame.cpp @@ -298,19 +298,20 @@ class nsDisplayCanvas final : public nsPaintedDisplayItem { nsRect dest = nsLayoutUtils::ComputeObjectDestRect( area, intrinsicSize, intrinsicRatio, f->StylePosition());
- gfxRect destGFXRect = presContext->AppUnitsToGfxUnits(dest); - - // Transform the canvas into the right place - gfxPoint p = destGFXRect.TopLeft(); - Matrix transform = Matrix::Translation(p.x, p.y); - transform.PreScale(destGFXRect.Width() / canvasSizeInPx.width, - destGFXRect.Height() / canvasSizeInPx.height); gfxContextMatrixAutoSaveRestore saveMatrix(aCtx);
- aCtx->SetMatrix( - gfxUtils::SnapTransformTranslation(aCtx->CurrentMatrix(), nullptr)); - if (RefPtrlayers::Image image = canvas->GetAsImage()) { + gfxRect destGFXRect = presContext->AppUnitsToGfxUnits(dest); + + // Transform the canvas into the right place + gfxPoint p = destGFXRect.TopLeft(); + Matrix transform = Matrix::Translation(p.x, p.y); + transform.PreScale(destGFXRect.Width() / canvasSizeInPx.width, + destGFXRect.Height() / canvasSizeInPx.height); + + aCtx->SetMatrix( + gfxUtils::SnapTransformTranslation(aCtx->CurrentMatrix(), nullptr)); + RefPtrgfx::SourceSurface surface = image->GetAsSourceSurface(); if (!surface || !surface->IsValid()) { return; @@ -338,23 +339,28 @@ class nsDisplayCanvas final : public nsPaintedDisplayItem { } renderer->FirePreTransactionCallback(); const auto snapshot = renderer->BorrowSnapshot(); - if (!snapshot) return; + if (!snapshot) { + return; + } const auto& surface = snapshot->mSurf; - - transform = gfxUtils::SnapTransform( - transform, gfxRect(0, 0, canvasSizeInPx.width, canvasSizeInPx.height), - nullptr); + DrawTarget& dt = *aCtx->GetDrawTarget(); + gfx::Rect destRect = + NSRectToSnappedRect(dest, presContext->AppUnitsPerDevPixel(), dt);
if (!renderer->YIsDown()) { - // y-flip - transform.PreTranslate(0.0f, canvasSizeInPx.height).PreScale(1.0f, -1.0f); + // Calculate y-coord that is as far below the bottom of destGFXRect as + // the origin was above the top, then reflect about that. + float y = destRect.Y() + destRect.YMost(); + Matrix transform = Matrix::Translation(0.0f, y).PreScale(1.0f, -1.0f); + aCtx->Multiply(transform); } - aCtx->Multiply(transform);
- aCtx->GetDrawTarget()->FillRect( - Rect(0, 0, canvasSizeInPx.width, canvasSizeInPx.height), - SurfacePattern(surface, ExtendMode::CLAMP, Matrix(), - nsLayoutUtils::GetSamplingFilterForFrame(f))); + const auto& srcRect = surface->GetRect(); + dt.DrawSurface( + surface, destRect, + Rect(float(srcRect.X()), float(srcRect.Y()), float(srcRect.Width()), + float(srcRect.Height())), + DrawSurfaceOptions(nsLayoutUtils::GetSamplingFilterForFrame(f)));
renderer->FireDidTransactionCallback(); renderer->ResetDirty(); diff --git a/layout/reftests/bugs/reftest.list b/layout/reftests/bugs/reftest.list index 557cefccf4f2b..03dcde776fc1b 100644 --- a/layout/reftests/bugs/reftest.list +++ b/layout/reftests/bugs/reftest.list @@ -1567,7 +1567,7 @@ random-if(winWidget) fuzzy(0-1,0-480) needs-focus == 598726-1.html 598726-1-ref. # the idealized rendering. As such we assume we fail the old test, and pass the # new test. See bug 1580534 for more details. fuzzy-if(Android,0-8,0-20) fails-if(!useDrawSnapshot) == 602200-3.html 602200-3-ref.html -fuzzy-if(useDrawSnapshot,255-255,44-44) == 1580534.html 1580534-ref.html +fuzzy-if(useDrawSnapshot,255-255,34-34) == 1580534.html 1580534-ref.html == 602200-4.html 602200-4-ref.html == 603423-1.html 603423-1-ref.html == 604737.html 604737-ref.html
This is an automated email from the git hooks/post-receive script.
richard pushed a commit to branch geckoview-102.3.0esr-12.0-1 in repository tor-browser.
commit 409cc69a678c16058b913e7aad6dd4230fe5b525 Author: ffxbld ffxbld@mozilla.com AuthorDate: Thu Sep 1 11:20:49 2022 +0000
No Bug, mozilla-esr102 repo-update HSTS HPKP remote-settings - a=repo-update r=RyanVM
Differential Revision: https://phabricator.services.mozilla.com/D156169 --- security/manager/ssl/StaticHPKPins.h | 2 +- security/manager/ssl/nsSTSPreloadList.inc | 1268 ++++++++++++++++---- .../dumps/blocklists/addons-bloomfilters.json | 507 +++++++- .../dumps/security-state/intermediates.json | 476 ++++++-- 4 files changed, 1946 insertions(+), 307 deletions(-)
diff --git a/security/manager/ssl/StaticHPKPins.h b/security/manager/ssl/StaticHPKPins.h index ff5c535d441ed..8a5d0d9060140 100644 --- a/security/manager/ssl/StaticHPKPins.h +++ b/security/manager/ssl/StaticHPKPins.h @@ -1125,4 +1125,4 @@ static const TransportSecurityPreload kPublicKeyPinningPreloadList[] = {
static const int32_t kUnknownId = -1;
-static const PRTime kPreloadPKPinsExpirationTime = INT64_C(1670238524640000); +static const PRTime kPreloadPKPinsExpirationTime = INT64_C(1670497950671000); diff --git a/security/manager/ssl/nsSTSPreloadList.inc b/security/manager/ssl/nsSTSPreloadList.inc index fb08a3a826e00..8b3314f8101bc 100644 --- a/security/manager/ssl/nsSTSPreloadList.inc +++ b/security/manager/ssl/nsSTSPreloadList.inc @@ -8,7 +8,7 @@ /*****************************************************************************/
#include <stdint.h> -const PRTime gPreloadListExpirationTime = INT64_C(1672657719707000); +const PRTime gPreloadListExpirationTime = INT64_C(1672917145796000); %% 0--1.de, 1 0-0.io, 1 @@ -379,6 +379,7 @@ const PRTime gPreloadListExpirationTime = INT64_C(1672657719707000); 1-ae.com, 1 1-inv.com, 1 1-pujcky-uvery.tk, 1 +100-downloads.com, 1 100-i.com, 1 100-referencement.com, 1 10000hits.tk, 1 @@ -395,6 +396,7 @@ const PRTime gPreloadListExpirationTime = INT64_C(1672657719707000); 1000serien.com, 1 1000wordsevents.com, 0 1001firms.com, 1 +1001fonts.com, 1 1001home.cf, 1 1001kartini.com, 1 1001kerstpakketten.com, 0 @@ -505,7 +507,6 @@ const PRTime gPreloadListExpirationTime = INT64_C(1672657719707000); 11082.com, 1 110cl.com, 1 110na.com, 1 -111111.online, 1 111111.plus, 1 1111365t.com, 1 1111k8.com, 1 @@ -1547,6 +1548,7 @@ const PRTime gPreloadListExpirationTime = INT64_C(1672657719707000); 215dy.net, 1 218strand.com, 1 219k8.com, 1 +21appart.com, 1 21cbd.com, 1 21ce.com, 1 21domain.com, 1 @@ -1561,6 +1563,7 @@ const PRTime gPreloadListExpirationTime = INT64_C(1672657719707000); 21hours.com, 1 21isp.com, 1 21jobs.com, 1 +21kampus.com, 1 21love.com, 1 21new.com, 1 21nurse.com, 1 @@ -1674,6 +1677,7 @@ const PRTime gPreloadListExpirationTime = INT64_C(1672657719707000); 233vps.com, 1 2340365.com, 0 23436565.com, 1 +2345.lgbt, 1 2345666365.com, 0 2345678365.com, 1 23456789365.com, 0 @@ -1844,6 +1848,7 @@ const PRTime gPreloadListExpirationTime = INT64_C(1672657719707000); 2au.ru, 1 2b2b.pro, 1 2b2t.fi, 1 +2ba.cc, 1 2badvintage.tk, 1 2bas.nl, 1 2bcompany.ch, 0 @@ -1967,6 +1972,8 @@ const PRTime gPreloadListExpirationTime = INT64_C(1672657719707000); 30019cc.com, 1 3007337.com, 1 300jjjj.com, 1 +301.moe, 1 +301.sh, 1 301.technology, 1 302422.com, 1 3033888.com, 1 @@ -2346,7 +2353,6 @@ const PRTime gPreloadListExpirationTime = INT64_C(1672657719707000); 365y99.com, 0 365yapan.com, 1 365ypw.com, 1 -365yuwen.com, 1 365zg.org, 1 369369.xyz, 1 369dp.com, 1 @@ -2559,6 +2565,7 @@ const PRTime gPreloadListExpirationTime = INT64_C(1672657719707000); 3dgep.com, 1 3dgifts.ro, 1 3dicomviewer.com, 0 +3dinosaurs.com, 1 3dissue.com, 1 3djapan.com, 1 3djava.ml, 1 @@ -2619,6 +2626,7 @@ const PRTime gPreloadListExpirationTime = INT64_C(1672657719707000); 3mediaweb.com, 1 3mind-solutions.com, 1 3ml.org.uk, 1 +3newsnow.com, 1 3niu10.com, 1 3niu11.com, 1 3niu111.com, 1 @@ -2660,6 +2668,7 @@ const PRTime gPreloadListExpirationTime = INT64_C(1672657719707000); 3niu7.com, 1 3niu711.com, 1 3niu768.com, 1 +3niu770.com, 1 3niu771.com, 1 3niu777.com, 1 3niu7777.com, 1 @@ -2669,6 +2678,7 @@ const PRTime gPreloadListExpirationTime = INT64_C(1672657719707000); 3niu855.com, 1 3niu868.com, 1 3niu88.com, 1 +3niu880.com, 1 3niu888.com, 1 3niu89.com, 1 3niu9.com, 1 @@ -2820,7 +2830,7 @@ const PRTime gPreloadListExpirationTime = INT64_C(1672657719707000); 43klive.com, 1 44-k.com, 1 44168365.com, 1 -443.one, 1 +443.one, 0 44321365.com, 0 443658.com, 0 44365t.com, 1 @@ -2913,6 +2923,7 @@ const PRTime gPreloadListExpirationTime = INT64_C(1672657719707000); 4fit.ro, 1 4flex.info, 1 4freepress.com, 1 +4freeprintable.com, 1 4g-server.eu, 0 4game.my.id, 1 4garage.com.br, 1 @@ -3035,6 +3046,7 @@ const PRTime gPreloadListExpirationTime = INT64_C(1672657719707000); 50plusnet.nl, 1 50refer.tk, 1 50ten40.com, 1 +511in.org, 1 5132vip.com, 1 513651.com, 1 51365a.com, 1 @@ -3404,6 +3416,7 @@ const PRTime gPreloadListExpirationTime = INT64_C(1672657719707000); 5tar.jp, 1 5tart.tk, 1 5thchichesterscouts.org.uk, 1 +5thfloormedia.com, 1 5thgenrams.com, 1 5thmedia.com, 1 5tiptop.com, 1 @@ -4027,6 +4040,7 @@ const PRTime gPreloadListExpirationTime = INT64_C(1672657719707000); 75codes.com, 1 75refer.tk, 1 761.com, 1 +761link.net, 1 762.ch, 0 763365.com, 1 76365365.com, 1 @@ -4108,7 +4122,6 @@ const PRTime gPreloadListExpirationTime = INT64_C(1672657719707000); 7lb.de, 1 7links.com.br, 1 7milesglobal.com, 1 -7mu.top, 1 7pets.net, 1 7plus.com.au, 1 7press.com, 1 @@ -4637,6 +4650,7 @@ const PRTime gPreloadListExpirationTime = INT64_C(1672657719707000); 8ballbombom.uk, 1 8balls.nl, 1 8bet86.com, 1 +8bitpickle.com, 1 8bitsafe.com, 1 8cent.com, 1 8crafty.com, 1 @@ -5295,6 +5309,7 @@ a-hitoduma.com, 1 a-invest.de, 1 a-ix.net, 1 a-little-linux-box.at, 1 +a-louest.info, 1 a-moe.com, 1 a-msystems.com, 1 a-oben.org, 1 @@ -5509,6 +5524,7 @@ aave.com, 0 aavienna.com, 1 aavstudio.com, 1 aawt.net.au, 0 +aayan.com, 1 aayub.xyz, 1 ab-design.tk, 1 ab-mfbnigeria.com, 0 @@ -5613,7 +5629,6 @@ abdelsater.net, 1 abdened.tk, 1 abdesign.tk, 1 abdijmale.tk, 1 -abdl.link, 1 abdsirketim.com, 1 abdul.cloud, 1 abdulawal.tk, 1 @@ -5717,7 +5732,7 @@ abminiplex.in, 1 abminv.com, 1 abmledger.ca, 1 abn-consultants.ie, 1 -abnamropensioenen.nl, 1 +abnamropensioenen.nl, 0 abnarnro.com, 0 abnehmen-sport-fitness.de, 1 abnehmen.com, 1 @@ -5809,7 +5824,9 @@ aboutyou.ch, 1 aboutyou.com, 1 aboutyou.cz, 1 aboutyou.de, 1 +aboutyou.hr, 1 aboutyou.nl, 1 +aboutyou.pt, 1 aboutyou.si, 1 aboveall.love, 1 aboveaverageplumbing.com, 1 @@ -5818,6 +5835,7 @@ abox-kb.com, 1 aboyle.ca, 1 abpis.hr, 1 abplive.com, 1 +abpmuhendislik.com, 1 abpoolsub.com, 1 abr.ru, 1 abracadabra.co.jp, 0 @@ -5926,6 +5944,7 @@ ac0g.dyndns.org, 1 acab.love, 1 acacia-gardens.co.uk, 1 academiacivilbalonmano.tk, 1 +academiacomercialalpina.com, 1 academiadelmolino.com.uy, 1 academiadeufologia.com.br, 1 academiaeureka.tk, 1 @@ -6188,6 +6207,7 @@ acpcoils.com, 0 acperu.ch, 0 acpica.org, 1 acpinformatique.fr, 1 +acpny.com, 1 acquadiparma.kr, 1 acquaparrucchieri.it, 1 acquari.roma.it, 1 @@ -6255,6 +6275,7 @@ actingcxo.com, 1 action-intell.com, 1 action-parapente.fr, 1 action-verite.fr, 1 +action.eu, 1 actionablefuturist.com, 1 actioncameraaccessories.ga, 1 actioncleaningnd.com, 1 @@ -6329,6 +6350,7 @@ actualsizemusic.tk, 1 actualsolutions.am, 1 actuatemedia.com, 1 actuse.tk, 1 +actzero.ai, 1 acuarios.tk, 1 acuarismo-iquique.tk, 1 acuarius.tk, 1 @@ -6411,7 +6433,6 @@ adamfontenot.com, 1 adamgian.com, 1 adamgibbins.com, 1 adamh.us, 1 -adamh.website, 1 adamjoycegames.co.uk, 1 adamkostecki.de, 1 adamlevine.ga, 1 @@ -6501,6 +6522,7 @@ addnine.com, 1 addo-addo.com, 1 addon.watch, 1 addones.org, 1 +addownit.com, 1 addr.space, 1 addresstobe.com, 1 addscoop.ml, 1 @@ -6731,6 +6753,7 @@ adriarae.xyz, 1 adriatic.hr, 1 adriatika.tk, 1 adriatrans.ga, 1 +adrienfelsmann.fr, 1 adrieng.fr, 1 adrienkohlbecker.com, 1 adriennekiss.net, 1 @@ -6780,6 +6803,7 @@ adtgroup.com, 1 adti.pt, 0 adubosvidere.com.br, 1 adultbizz.eu, 1 +adulteducation.org.uk, 1 adultforum.gr, 1 adultgames.pro, 1 adultmalecontent.com, 1 @@ -7005,7 +7029,6 @@ aegee-academy.eu, 1 aegee-academy.org, 1 aegee-utrecht.nl, 1 aegee.eu, 1 -aegee.org, 1 aegis.moe, 1 aegisaccounting.co.uk, 1 aegisalarm.co.uk, 1 @@ -7037,6 +7060,7 @@ aeonmall.global, 1 aepx.org, 1 aequometer.de, 1 aeradesign.com, 1 +aeradoresgaivota.com.br, 1 aerandir.fr, 1 aeraustral.com.au, 1 aerelon.de, 1 @@ -7100,6 +7124,7 @@ aeternus.tech, 1 aetherc0r3.eu, 1 aethereahealth.com, 1 aetherlink.de, 1 +aethernia.net, 1 aethonan.pro, 1 aethopy.ga, 1 aevo-vergleich.de, 1 @@ -7122,7 +7147,7 @@ afbrlf.com, 1 afbrtv.com, 1 afbrunswick.com, 1 afbryt.com, 1 -afc-capital.mx, 1 +afcmrs.org, 0 afcmrstest.org, 1 afcurgentcarelyndhurst.com, 0 afdah.se, 1 @@ -7943,6 +7968,7 @@ air-flot.tk, 1 air-planning.co.jp, 1 air-rishon.tk, 1 air-soft.ga, 1 +air-swift.com, 1 air-techniques.fr, 1 air-ticket.ga, 1 airbender.tk, 1 @@ -8008,6 +8034,7 @@ airbnb.lu, 1 airbnb.mx, 1 airbnb.nl, 1 airbnb.no, 1 +airbnb.org, 1 airbnb.pl, 1 airbnb.pt, 1 airbnb.ru, 1 @@ -8024,6 +8051,7 @@ aircharteradvisors.com, 1 airchartervirginislands.com, 1 aircheapfare.com, 1 aircheapfares.com, 1 +aircleansystems.com, 1 aircomet.tk, 1 aircompressormachine.com, 1 airconditioning.tk, 1 @@ -8238,6 +8266,8 @@ aisedomains.ga, 1 aisera.com, 1 aish.ml, 1 aisi316l.net, 1 +aisklabs.com, 1 +aiskskin.com, 1 aispirit.tk, 1 aisrvs.net, 1 aissel.com, 1 @@ -8327,6 +8357,7 @@ ak68.tk, 1 ak85.tk, 1 ak96.tk, 1 aka.ms, 1 +aka.pw, 1 akabandokonlamierda.tk, 1 akachanikuji.com, 1 akachanwebsite.tk, 1 @@ -8348,7 +8379,6 @@ akaritakai.net, 1 akaritaste.ch, 1 akasha.world, 1 akashdsouza.now.sh, 1 -akashstephen.com, 1 akasi.cf, 1 akaxaka.tk, 1 akaziya.cf, 1 @@ -8436,6 +8466,7 @@ akritikos.info, 1 akrobat.cf, 1 akronohiorescue.gov, 1 akropolis-ravensburg.de, 1 +akrzon.com, 1 aksaramedia.com, 1 aksehir.bel.tr, 1 akselinurmio.fi, 1 @@ -8593,6 +8624,7 @@ alb-flirt.de, 1 alb-media.tk, 1 albaadani.com, 1 albadon.tk, 1 +albaform.com, 1 albagold.tk, 1 albagora.nl, 1 albakham.eu.org, 1 @@ -9043,7 +9075,6 @@ alilepro.cf, 1 alilialili.ga, 1 alimanaka-rabesata.tk, 1 aliment-covid19.com, 1 -alimentosemgluten.com.br, 1 alimentosmcf.com, 1 alimentsduquebecaumenu.com, 1 alimenty.tk, 1 @@ -9084,6 +9115,7 @@ alitabergert.tk, 1 alitajran.com, 1 alitec.it, 1 alitpedia.ga, 1 +aliud.be, 1 aliv.biz, 1 alivecast.co.jp, 1 alix-board.de, 1 @@ -9141,6 +9173,7 @@ all4web.tk, 1 all878.com, 1 alla.tk, 1 allaboutclassifieds.com, 1 +allaboutcovers.co.za, 1 allaboutfunuk.com, 1 allaboutgoats.com, 1 allaboutgreg.net, 1 @@ -9192,6 +9225,7 @@ allcarecorrectionalpharmacy.com, 1 allcarepharmacy.com, 1 allcarespecialty.pharmacy, 1 allcelebs.tk, 1 +allchan.io, 1 allcinema.net, 1 allcleanservices.ca, 1 allcloud.com, 1 @@ -9222,6 +9256,7 @@ allegrettovineyard.com, 1 allegrettovineyards.com, 1 allegrettowine.com, 1 allegrettowines.com, 1 +allegromicro.com, 1 allemanniamarburg.at, 1 allemoz.com, 1 allemoz.fr, 1 @@ -9378,6 +9413,7 @@ allstarautokiaparts.com, 1 allstarcashforcars.com, 1 allstarcustompools.com, 1 allstarquilts.com, 1 +allstatedealerservices.com, 1 allsun.online, 1 allsurpl.us, 1 allsync.com, 1 @@ -9474,6 +9510,7 @@ almost.cf, 1 almost.fit, 1 almost.gq, 1 almostobjective.com, 1 +almudenallacer.com, 1 almukhtar.se, 0 almusbahperfume.com, 1 almut-zielonka.de, 1 @@ -9509,11 +9546,13 @@ aloo.ga, 1 aloop.cloud, 1 alopocos.com, 1 aloris-controle.fr, 1 +aloro.io, 1 alotso.com, 1 alottajava.com, 1 alov.blog, 1 aloys233.top, 1 alp.od.ua, 1 +alp1ne.net, 1 alpaca.haus, 1 alpahandling.com, 1 alpan.ml, 1 @@ -9549,6 +9588,7 @@ alpha-showcase.com, 1 alpha.ch, 1 alpha88uat.com, 1 alphaantileak.net, 1 +alphaassurances.com, 1 alphabet-z.xyz, 1 alphabeta.com, 1 alphabetmobilier.com, 1 @@ -9702,6 +9742,7 @@ alternativehosting.com, 1 alternativeinternet.ca, 1 alternativet.party, 1 alternativetomeds.com, 1 +alternativewireless.com, 1 alternativnizivot.tk, 1 alternatiwa.tk, 1 alternatyv.ch, 1 @@ -9744,6 +9785,7 @@ altopia.com, 1 altoplan.de, 1 altorise.com, 1 altos.tk, 1 +altospam.net, 1 altovalemarmoraria.com.br, 1 altovoltaggio.tk, 1 altoweb.tk, 1 @@ -9926,6 +9968,7 @@ amateurs.gq, 1 amateurtuning.tk, 1 amateurvoicetalent.com, 1 amati.solutions, 1 +amato.tk, 1 amatoryasamak.tk, 1 amatsuka.com, 1 amatutis.lt, 1 @@ -9993,6 +10036,7 @@ ambra.net.nz, 1 ambrosiamosaicos.co, 1 ambrosio.tk, 1 ambrosius.io, 1 +ambujagold.com, 1 ambulanceplus.cz, 1 ambulancieros.tk, 1 ambulanza.it, 1 @@ -10099,14 +10143,19 @@ amerimex.cc, 1 amerimex.org, 1 amerion.nl, 1 ameriondental.nl, 1 +ameripacfund.com, 1 amesagesse.com, 1 amesgen.de, 1 amesite.me, 1 +amessage.de, 1 +amessage.eu, 1 +amessage.info, 1 amesvacuumrepair.com, 1 amethystbodyart.co.za, 1 amethystcards.co.uk, 1 amethystdevelopment.co.uk, 1 amethystwebsitedesign.com, 1 +ametrin.biz, 1 amevoice.com, 1 amex.ua, 1 amexemp.com, 1 @@ -10131,6 +10180,7 @@ amicusjunior.ro, 1 amifoundation.net, 1 amigatraktor.tk, 1 amigodeltoro.tk, 1 +amigoenergy.com, 1 amigosdelvalenciadeastorga.tk, 1 amigosencanada.com, 1 amigosgranada4050.tk, 1 @@ -10274,6 +10324,7 @@ ampledesigners.com, 1 ampleinfographics.com, 1 ampleitsolutions.com.au, 1 ampleroads.com, 1 +amplifiedit.com, 1 amplifier-technics.tk, 1 ampparit.com, 1 ampproject.com, 1 @@ -10341,6 +10392,7 @@ amywinehouseaddicted.tk, 1 amyyeung.com, 1 amzik.tk, 1 amzinfotech.com, 1 +amzn.com, 1 amzn.rocks, 1 amzndrivers.com, 1 amznworks.com, 1 @@ -10426,6 +10478,7 @@ ananyagupta.tk, 1 ananyoo.com, 0 anaprieto.com, 1 anapsi.tk, 1 +anar.biz, 1 anarajaoui.ma, 1 anarcasmetalicos.tk, 1 anarchie-in-lippe.tk, 1 @@ -10567,6 +10620,7 @@ andreaswirth.com, 1 andreasxp.me, 1 andreatedeschi.it, 1 andrecanuto.com.br, 1 +andrecarvalho.net.br, 1 andredaus.com, 1 andreeapasat.ro, 1 andreferreira.website, 1 @@ -10680,6 +10734,7 @@ androidtelefony.cz, 1 androidtools.gq, 1 androidtotal.ml, 1 androidwale.ga, 1 +androidzone.me, 1 androlab.tk, 1 andromeda.se, 1 andropia-online.fr, 1 @@ -10793,6 +10848,7 @@ angelspabeauty.co.uk, 1 angelswar.ga, 1 angeltechone.com, 1 angeltorri.tk, 1 +angelvisionary.com, 1 angelzapien.com, 1 angem.gq, 1 angem.tk, 1 @@ -10861,6 +10917,7 @@ anihonetwallpaper.com, 1 anikabyaabi.com, 1 anikaras.ga, 1 anikaras.ml, 1 +anikschwall.com, 1 anilasansor.com, 1 anillosdecompromiso.co, 1 anilom.tk, 1 @@ -11265,7 +11322,7 @@ anthonycarbonaro.com, 0 anthonychampagne.fr, 1 anthonychampagne.me, 1 anthonydegrande.tk, 1 -anthonyellis.com, 0 +anthonyellis.com, 1 anthonyfontanez.com, 1 anthonygaidot.fr, 1 anthonylaberge.tk, 1 @@ -11275,7 +11332,6 @@ anthonytimbers.com, 1 anthonytutorials.tk, 1 anthonyvadala.me, 1 anthro.asia, 1 -anthro.icu, 1 anthrocon.com, 1 anthrocon.net, 1 anthrocon.org, 1 @@ -11481,6 +11537,7 @@ anyi.in, 1 anyilin.cn, 1 anyma.it, 1 anymeta-global.com, 1 +anymuscle.com, 1 anyone.cf, 1 anypeer.net, 1 anyplant.ga, 1 @@ -11553,7 +11610,6 @@ apachelounge.com, 1 apadmi.com, 0 apadrinaunolivo.org, 1 apadvantage.com, 1 -apalachicolaboatslips.com, 1 apalancamiento.trade, 1 apambiente.pt, 1 apaniwebsite.xyz, 1 @@ -11590,6 +11646,7 @@ apedreira.com, 1 apef.ch, 0 apefrog.tk, 1 apeiri.de, 1 +apeironassets.com, 1 apelsin.ml, 1 aperature.com, 1 apercloud.es, 1 @@ -11921,6 +11978,7 @@ appuals.com, 1 appub.co.jp, 1 appugo.tk, 1 appui-de-fenetre.fr, 1 +appunwrapped.com, 1 appveyor.com, 1 appwardbeta.com, 1 appworld.ga, 1 @@ -11947,12 +12005,12 @@ apropotv.tk, 1 aprpullmanportermuseum.org, 0 aprsdroid.org, 1 apruebaexamenes.com, 1 +apruvd.com, 1 aprz.de, 1 apsa.paris, 1 apsb.cz, 1 apsbengdubi.org, 1 apse.ga, 1 -apssb.in, 1 apssolucoesfinanceiras.online, 1 apstats.tk, 1 apstudynotes.org, 1 @@ -11963,9 +12021,9 @@ aptechka.ga, 1 apteka38.com, 1 aptekakolska.pl, 1 aptekas.tk, 1 -aptelink.pl, 1 aptitudetests.org, 1 aptive.co.uk, 1 +aptos.com, 1 aptumseguros.mx, 1 apu-board.de, 1 apuestalegal.com, 1 @@ -11981,6 +12039,7 @@ apw-dortmund.de, 1 aqalat.com.sa, 1 aqarategypt.com, 1 aqarbab.com, 1 +aqdance.com.sg, 1 aqdun.com, 1 aqlivia.com, 1 aqqrate.com, 1 @@ -12321,7 +12380,6 @@ arekatieandchrisgettingmarried.com, 1 arekatieandchrisgettingmarried.today, 1 arekatieandchrismarriedyet.com, 1 areminder.co, 1 -arena-lemgo.de, 1 arena-news.tk, 1 arenaalbionu.pl, 1 arenadagon.tk, 1 @@ -12365,9 +12423,11 @@ argentinatrabaja.org, 1 argentinaxp.com, 1 argentinetownship.gov, 1 argentumonline.tk, 1 +argico.com, 1 argilo.net, 1 argon2.online, 1 argonium.com.au, 1 +argos.co.uk, 1 argosasist.co.uk, 1 argovpay.com, 1 argovpn.com, 1 @@ -12504,6 +12564,7 @@ arlingtonelectric.com, 1 arlingtonva.gov, 1 arlon.com, 1 arm.gov, 0 +arma3.com, 1 armacom.tk, 1 armadale.wa.gov.au, 1 armadalelearningpathways.co.uk, 1 @@ -12629,7 +12690,6 @@ arose.io, 1 around-cms.de, 1 around-tables.co.jp, 1 arouparia.com, 1 -arouzing.xyz, 1 arowsoft.tk, 1 arox.eu, 1 arp-arena.ml, 1 @@ -12795,6 +12855,7 @@ arteya.net, 1 artfabrics.com, 1 artfullyelegant.com, 1 artfuryou.com, 1 +artgaragecrewe.com, 1 artgorod.tk, 1 artgranit.tk, 1 arthousecarousel.co.uk, 1 @@ -12876,6 +12937,7 @@ arto.bg, 1 artofclouds.ru, 1 artofcode.co.uk, 1 artofeyes.nl, 1 +artofgears.com, 1 artofhappyliving.com, 1 artoflinesmd.ca, 1 artofmonitoring.com, 0 @@ -12973,6 +13035,7 @@ as-kapmea-mark-swissbear.azurewebsites.net, 1 as.roma.it, 1 as200753.com, 1 as200753.net, 1 +as203145.com, 1 as204982.net, 1 as207618.net, 1 as211960.net, 1 @@ -13187,10 +13250,10 @@ askaret.cz, 1 askatrans.tk, 1 askcaisse.com, 1 askcascade.com, 0 +askcustomboxes.com, 1 askdeliver.tk, 1 asker-massasje.no, 1 askerweb.cf, 1 -askeustache.com, 1 askeygeek.com, 1 askfree.net, 1 askgamblers.com, 1 @@ -13199,6 +13262,7 @@ askindia.tk, 1 askizzy.org.au, 1 askkaren.gov, 1 asklawyersforjustice.com, 1 +askllp.com, 1 askmagicconch.com, 0 askme-events.vip, 0 askme-fast.tk, 1 @@ -13557,6 +13621,7 @@ ateliernaruby.cz, 1 atelierssud.swiss, 1 atelierverbeelding.nl, 1 atemon.com, 1 +aten.xyz, 1 atenasconservadora.com.br, 1 atencionbimbo.com, 0 atenealaser.com, 1 @@ -13593,6 +13658,7 @@ athenasfoodtrucks.com, 1 athenaspark.com, 1 athenasystems.com, 1 athenasystems.net, 1 +athens-escorts.com, 1 athensdrunktour.com, 1 athenstn.gov, 1 athensvantours.com, 1 @@ -13821,6 +13887,7 @@ aubonmanger.fr, 0 auburn-housekeeper.com, 1 auburnma.gov, 1 auburnperio.com, 1 +auburnpub.com, 1 auc.ch, 1 aucarresainteloi.com, 1 aucc.org.nz, 1 @@ -14144,6 +14211,7 @@ autocadperfmon.azurewebsites.net, 1 autocartruck.com, 1 autocashmachine.tk, 1 autocenters.ca, 1 +autocheck.co.nz, 1 autocirkel.tk, 1 autoclassics.com, 1 autocmall.com, 1 @@ -14632,6 +14700,7 @@ avelecollege.edu.ws, 1 avelengo.org, 1 avelinodiaz.gal, 1 avellinotoday.it, 1 +aveloair.com, 1 avelon.cloud, 1 avelux.ru, 1 avenad.com, 1 @@ -14820,6 +14889,7 @@ avweb.tk, 1 aw.gov.pl, 1 aw.net, 1 awaan.ae, 1 +awakenaija.com, 1 awakengr.com, 0 awakening-guild.com, 1 awakenwow.ga, 1 @@ -15154,6 +15224,7 @@ azredistricting.gov, 1 azrhymes.com, 1 azs-nw.ru, 1 azsalud.gov, 1 +azsec.biz, 1 azsgeniedev.azurewebsites.net, 1 azso.pro, 1 azsupport.com, 1 @@ -15414,6 +15485,8 @@ b9999yy.com, 1 b9999zz.com, 0 b99iosapp.com, 0 b9winner.com, 1 +ba7jcm.live, 1 +ba7jcm.top, 1 ba7rain.tk, 1 baaam.se, 1 baac-dewellmed.com, 1 @@ -15602,6 +15675,7 @@ backupauthentication.com, 1 backupcloud.ru, 1 backwardsalphabet.tk, 1 backyardaddict.com, 1 +backyardbella.com, 1 backyardtaco.com, 1 baclofen.ga, 1 baclofen.gq, 1 @@ -15894,6 +15968,7 @@ baliklar.tk, 1 balilingo.ooo, 0 balimoves.com, 1 balinese.dating, 1 +balingwiredirect.com, 1 balintjanvari.com, 1 balist.es, 1 balivacationhomes.com, 1 @@ -15962,6 +16037,8 @@ bamaland.org, 1 bamberger-maelzerei.de, 1 bamboehof.nl, 1 bambooforest.nl, 1 +bamboohr.co.uk, 1 +bamboohr.com, 1 bamboorelay.com, 1 bamboostage.com, 1 bambrick.com.au, 1 @@ -16233,7 +16310,6 @@ barcoder.tk, 1 barcodewiz.com, 1 bardak.ga, 1 bardes.org, 1 -bardiel.com.br, 1 bardiharborow.com, 1 bardtech.com, 1 bardziejkochani.pl, 1 @@ -16320,6 +16396,7 @@ barriotoboardroom.com, 1 barro.ga, 1 barronbankruptcyattorney.com, 1 barruntos.tk, 1 +barry-callebaut.com, 1 barrydenicola.com, 1 barrymarkus.tk, 1 barrytownshipmn.gov, 1 @@ -16445,6 +16522,7 @@ basisonline.nl, 1 basisonlinefiles.nl, 1 basitplan.com, 1 basket-ballworld.fr, 1 +basket-malaunay.fr, 1 basket-sint-truiden.tk, 1 basketball-malavan.tk, 1 basketballnewz.tk, 1 @@ -16462,6 +16540,7 @@ bassbase.tk, 1 bassblog.net, 1 bassculture.tk, 1 bassdentistry.com, 1 +basse-chaine.info, 1 bassethound.tk, 1 bassguy.tk, 1 basskickers.tk, 1 @@ -16649,6 +16728,7 @@ bazarmag.ir, 1 bazarotehijos.com, 1 bazdell.com, 0 bazdidaval.ir, 1 +bazel.build, 1 bazendefter.com, 1 bazhan.me, 1 bazhan.wang, 1 @@ -16979,6 +17059,7 @@ beautymadel.de, 1 beautyplace-buxtehude.de, 1 beautyschool.od.ua, 1 beautyseasons.ru, 1 +beautyspaceshop.com, 1 beautyspot.tk, 1 beaver-creek.ga, 1 beaver.com.br, 1 @@ -17042,6 +17123,7 @@ bedels.nl, 1 bedenica.hr, 1 bedford911.com, 1 bedfordnissanparts.com, 1 +bedful.com, 1 bedlingtonterrier.com.br, 1 bedofcorpses.tk, 1 bedouille.com, 1 @@ -17083,6 +17165,7 @@ beeldbankgent.be, 1 beelit.com, 0 beeming.net, 1 beemprimelogistics.com, 1 +beepcar.ru, 1 beer-sheva.city, 1 beer9.com, 1 beerarchy.tk, 1 @@ -17478,6 +17561,7 @@ benjaminblack.net, 1 benjamindietrich.com, 1 benjamindietrich.de, 1 benjaminfox.net, 1 +benjaminfulford.net, 1 benjaminjurke.com, 1 benjaminkopelke.com, 1 benjaminleupold.com, 1 @@ -17556,6 +17640,7 @@ beonline.ml, 1 beospain.tk, 1 bep.gov, 1 bepayd.com, 1 +bepersia.com, 1 bephoenix.org.uk, 0 beplephan.com, 1 bepositive.ml, 1 @@ -17622,6 +17707,7 @@ beritatopbanten.com, 0 berjadagar.is, 1 berjou.me, 1 berk.tk, 1 +berkadia.com, 1 berkat-luqs.ddns.net, 1 berkbrands.com, 1 berkeleyca.gov, 1 @@ -17629,6 +17715,7 @@ berkhills.com, 1 berkkalkan.com.tr, 1 berksabstract.com, 1 berksestateplanning.com, 1 +berkshireesupply.com, 1 berksnetworking.com, 1 berkswatertech.com, 1 berlin-cuisine.com, 1 @@ -18043,6 +18130,7 @@ bestofjazz.org, 1 bestoldmusic.tk, 1 bestoliveoils.com, 1 bestomania.tk, 1 +bestparking.com, 1 bestparking.xyz, 1 bestpartyhire.com, 1 bestperfumebrands.com, 1 @@ -18348,7 +18436,6 @@ betterhome.ml, 1 betterjapanese.blog, 1 betterjapanese.org, 1 betterjapanese.xyz, 1 -betterlifekidsclub.com, 1 betterna.me, 1 betternet.co, 1 betternews.eu, 1 @@ -18541,6 +18628,7 @@ bgmedia.tk, 1 bgmn.me, 1 bgmontaggi.com, 1 bgmsquad.com, 1 +bgoewert.com, 1 bgp.space, 1 bgr34.cz, 1 bgs-game.com, 1 @@ -18610,6 +18698,7 @@ biberonshop.bg, 1 bibet365.com, 1 bibi-xxx.com, 1 bibica.net, 1 +bibimanga.com, 1 bibitbunga.com, 1 bible-maroc.com, 1 bible.ru, 1 @@ -18819,6 +18908,7 @@ bigtix.io, 1 bigtown.tk, 1 bigtrucker.co.uk, 1 bigudi.ee, 1 +biigtigconsulting.ca, 1 bij-juud.nl, 1 bijlesbart.nl, 1 bijlesportal.nl, 1 @@ -19174,9 +19264,11 @@ biontech24.pl, 1 biopreferred.gov, 1 biopro-st.com, 1 biopsychiatry.com, 1 +bioreference.com, 1 bioresonanz-ibiza.com, 1 biorev.com, 0 biosafe.ch, 0 +biosafetech.com, 1 biosalts.it, 1 biosbits.org, 1 biosearch.tk, 1 @@ -19408,6 +19500,7 @@ bitcoinwalletscript.tk, 1 bitcoinx.ro, 1 bitcork.io, 1 bitcrazy.org, 1 +bitdefender.de, 1 bitdizzle.xyz, 1 bitech-ec.com, 1 bitedge.com, 0 @@ -19703,6 +19796,7 @@ blackcatinformatics.ca, 1 blackcatinformatics.com, 1 blackcatwanderlust.com, 1 blackchristmas.tk, 1 +blackchrome.com.au, 1 blackcicada.com, 1 blackco.ga, 1 blackcorner.cl, 1 @@ -19730,6 +19824,7 @@ blackhat.dk, 1 blackhat.nz, 1 blackheads.tk, 1 blackhealthwealth.com, 1 +blackheartbar.com, 1 blackhelicopters.net, 1 blackhillsinfosec.com, 1 blackhistorymonth.gov, 1 @@ -19855,6 +19950,7 @@ blasorchester-runkel.de, 1 blastentertainment.co.nz, 1 blastentertainment.com.au, 1 blastersklan.com, 1 +blastertag.com.ua, 1 blastoffbuisness.in, 1 blastofftherapy.com, 1 blastoise186.co.uk, 1 @@ -19990,6 +20086,7 @@ blizko.tk, 1 blizora.com, 1 blk-booking.com, 1 blk-lunch.com, 1 +blk.me, 1 blkbx.eu, 1 blkj.com, 1 bllb.ru, 0 @@ -20137,6 +20234,7 @@ bloodyhawks.tk, 1 bloom.ec, 1 bloom.sh, 1 bloombergadria.com, 1 +bloomberglp.com, 1 bloomingpink.in, 1 bloomingtonelectionsil.gov, 1 bloomingtonil.gov, 1 @@ -20145,6 +20243,7 @@ bloomnail.net, 1 bloomppm.com, 1 bloomscape.com, 1 blopezabogado.es, 1 +blorbo.link, 1 blossom.so, 1 blossomtexas.gov, 1 blountsherifftn.gov, 1 @@ -20201,11 +20300,13 @@ blueflare.org, 1 bluefuzz.nl, 1 bluegifts.ro, 1 bluegoat.jp, 1 +bluegolf.com, 1 bluegorilla.es, 1 bluegrottoscuba.com, 0 bluehillhosting.com, 1 bluehillme.gov, 1 blueimp.net, 1 +bluejeans.com, 1 bluekrypt.com, 1 bluelighter.tk, 1 bluelily.ga, 1 @@ -20229,7 +20330,6 @@ blueparrotpainting.com, 1 bluepearl.tk, 1 blueperil.de, 1 bluepostbox.de, 1 -blueprintma.com, 1 blueprintrealtytn.com, 1 bluepromocode.com, 1 bluerange.io, 1 @@ -20316,6 +20416,7 @@ bm-dataprotect.ch, 1 bm-i.ch, 0 bm-immo.ch, 0 bm-trading.nl, 1 +bmak.xyz, 1 bmbfiltration.com, 1 bmcorp.online, 1 bmeia.gv.at, 1 @@ -20346,7 +20447,6 @@ bnboy.cn, 1 bnbsinflatablehire.co.uk, 1 bnc.sh, 1 bnck.me, 1 -bnct.us, 1 bnd.house, 1 bnext.tech, 1 bngdigital.com, 1 @@ -20358,6 +20458,7 @@ bnin.org, 1 bnjscastles.co.uk, 1 bnkconsulting.info, 1 bnnuy.com, 1 +bnpparibas.de, 1 bnrailstories.com, 1 bnstree.com, 0 bnty.net, 1 @@ -20442,6 +20543,7 @@ bodegademuebles.com, 1 bodegagarces.tk, 1 bodegasvirei.com, 0 bodemplaten4x4.nl, 1 +boden.co.uk, 1 bodesi.com, 1 bodhi.fedoraproject.org, 1 bodin.cz, 1 @@ -20871,6 +20973,7 @@ borderfever.ga, 1 borderfever.ml, 1 borderless.ro, 1 borderless360.com, 1 +borderlessmigration.com, 1 borderzoo.tk, 1 bordes.com.ar, 1 bordes.me, 1 @@ -20915,6 +21018,7 @@ bornhack.dk, 1 bornreality.tk, 1 borntobetogether.eu, 1 borntocover.pl, 1 +borntoraid.com, 1 boros.tk, 1 borowski.pw, 1 borraxeiros.tk, 1 @@ -21136,12 +21240,14 @@ bourestonmedia.com, 1 bourgeoisdoor.com, 1 bourgeoisdoorco.com, 1 bournefun.co.uk, 1 +bourrasque-info.org, 1 bourse-aux-jouets.org, 0 bourse-aux-vetements.org, 0 bourse-puericulture.org, 0 bourseauxservices.com, 1 boutiquedecanetas.com.br, 1 boutiquedelhogar.cl, 1 +boutiquedoartista.com.br, 1 boutiqueguenaelleverdin.com, 1 boutiqueinove.com.br, 1 boutoncoupdepoing.fr, 1 @@ -21153,6 +21259,7 @@ bouwbedrijfdevor.nl, 1 bouwbedrijfjstam.nl, 1 bouwbedrijfkorstanje.nl, 1 bouwhuisman.nl, 1 +bouwplaatscheckin.nl, 1 bouzouada.com, 1 bouzouks.net, 1 bovenwebdesign.nl, 1 @@ -21550,7 +21657,6 @@ breakingdeal.fr, 1 breakingnewskenya.tk, 1 breakingtech.fr, 1 breakingthesilence.org.il, 1 -breakingvap.fr, 1 breakmaps.net, 1 breakofdawn.tk, 1 breakout.careers, 1 @@ -21710,6 +21816,7 @@ brickstreettrio.com, 1 brickvortex.com, 1 brickweb.co.uk, 1 brickwerks.io, 1 +brickzfinance.com, 1 bricmon.tk, 1 bricolajeux.ch, 0 bricolea.fr, 1 @@ -21820,6 +21927,7 @@ bring-heaven.com, 1 bringfido.com, 1 bringform.ml, 1 brinkbem.com, 1 +brinker.com, 1 brinkhu.is, 1 brinksurl.com, 1 brinokidzonline.tk, 1 @@ -21914,7 +22022,6 @@ broadsheet.com.au, 1 broadwayfamilydentalpc.com, 1 broadwayva.gov, 1 broadwayvets.co.uk, 1 -broadyexpress.com.au, 1 broansunited.tk, 1 broca.dk, 1 broca.io, 0 @@ -22048,6 +22155,7 @@ brudkista.se, 1 brudkistan.nu, 1 brudkistan.se, 1 bruechner.net, 1 +brueggers.com, 1 brueggi.tk, 1 brueser-gmbh.de, 1 brugerklub.info, 1 @@ -22073,12 +22181,14 @@ bruno-pelletier.tk, 1 brunoamaral.eu, 1 brunobattaglia.tk, 1 brunobeauvoir.com, 1 +brunobertini.com, 1 brunocesarlima.com.br, 1 brunodomingos.com, 1 brunolt.nl, 1 brunoramos.com, 0 brunoreno.be, 1 brunroom.tk, 1 +brunswick.com, 1 brush.ninja, 1 brushcreekyachts.com, 1 brusselsbe.tk, 1 @@ -22117,7 +22227,6 @@ bryanski.tk, 1 bryantluk.com, 1 bryggebladet.dk, 1 bryte-rp.tk, 1 -brztec.com, 1 bs-network.net, 1 bs-security.com, 1 bs.sb, 1 @@ -22183,7 +22292,6 @@ bsuess.de, 1 bsurfcr.com, 1 bsuru.xyz, 1 bsvfincorp.com, 1 -bsvmaterborn-1924.de, 1 bsw-solution.de, 1 bswears.com, 1 bsystem.net, 0 @@ -22340,6 +22448,7 @@ budgetwebsites.com.au, 1 budidayatani.com, 1 budilnik.ml, 1 budofjoy.com, 1 +budokan-essen.de, 1 budolangnau.ch, 1 budolfs.de, 1 bueltge.de, 1 @@ -22437,6 +22546,8 @@ buildthewall2022.com, 1 buildworkout.com, 1 buileo.com, 1 builterra2.azurewebsites.net, 1 +builtinboston.com, 1 +builtinla.com, 1 builtinseattle.com, 1 builtinsf.com, 1 builtory.my, 1 @@ -22496,6 +22607,7 @@ bulletin.com, 1 bulletpoint.cz, 1 bullettags.com, 1 bullfitta.tk, 1 +bullfrogpooltilecleaning.com, 1 bulli.tk, 1 bullish.com, 1 bullmarketing.nl, 1 @@ -22638,7 +22750,6 @@ burnimage.co.uk, 1 burning-team.tk, 1 burning-wheels.tk, 1 burningbase.com, 1 -burningbird.net, 1 burningbooks.org, 1 burningflame.tk, 1 burningflipside.com, 0 @@ -22693,7 +22804,6 @@ buscagenealogia.tk, 1 buscahost.com, 1 buscalotodo.com, 1 buscandolosmejores.com, 1 -buscasimple.com, 1 buscatea.com, 1 buscatodo.tk, 1 buschavdar.tk, 1 @@ -22852,6 +22962,7 @@ businessinsanfrancisco.tk, 1 businessinsanjose.ga, 1 businessinseattle.ga, 1 businessinside.ml, 1 +businessinsider.id, 1 businessinsurancemanagement.tk, 1 businessinvest.cf, 1 businessinvestment.tk, 1 @@ -23366,7 +23477,6 @@ bziaks.xyz, 1 bzik.cf, 1 bzsparks.com, 0 bztech.com.br, 1 -bztech.ru, 1 bztraveler.net, 0 bzv-fr.eu, 1 c-14.de, 1 @@ -23494,6 +23604,7 @@ cabcard.services, 1 cabeceirasdebasto.pt, 0 cabecera-descendimiento.tk, 1 cabelgrano.tk, 1 +cabenoap.com.br, 1 cabezadeframontanos.tk, 1 cabezadelcaballo.tk, 1 cabina-photobooth.ro, 1 @@ -23781,6 +23892,7 @@ calefones-electricos.com, 1 calehoo.com, 1 calendar.cf, 0 calendar.google.com, 1 +calendarinspiration.com, 1 calendarpensers.ga, 1 calendarpensest.ga, 1 calendarr.com, 1 @@ -23833,6 +23945,7 @@ callantonia.com, 1 callawayracing.se, 0 callaworker.ml, 1 callbackform.tk, 1 +callbell.eu, 1 callboyz.net, 1 callcenterdeluxecalls.nl, 1 callear.org, 1 @@ -24097,6 +24210,7 @@ canadafactcheck.ca, 1 canadamails.tk, 1 canadapet.club, 1 canadapets.club, 1 +canadapost-postescanada.ca, 1 canadapropertyexpert.ca, 1 canadaradon.com, 1 canadasmotorcycle.ca, 1 @@ -24112,6 +24226,8 @@ canadiansrit.tk, 1 canadiantouristboard.com, 1 canajoana.eu, 1 canal-onanismo.org, 1 +canal4.com.ni, 1 +canalconfidencial.com.br, 1 canaldelaespartera.tk, 1 canalecontracting.com, 1 canalescape.tk, 1 @@ -24179,6 +24295,7 @@ candydoll3.com, 1 candydoll7.com, 1 candydoll8.com, 1 candydoll9.com, 1 +candyflavor.com, 1 candylion.rocks, 1 candypalace.tk, 1 candysailing.ml, 1 @@ -24257,6 +24374,7 @@ canterburynh.gov, 1 canters.tk, 1 cantik.co, 1 cantinhodapetala.com.br, 1 +cantongroup.com, 1 cantonmi.gov, 1 cantonms.gov, 1 cantor.cloud, 1 @@ -24284,7 +24402,6 @@ caodecristachines.com.br, 0 caodesantohumberto.com.br, 1 caos.ch, 1 caostura.com, 1 -caosudautieng.com.vn, 1 cap73.fr, 1 capa.digital, 1 capachitos.cl, 0 @@ -24300,6 +24417,7 @@ capecoral.gov, 1 capecycles.co.za, 1 capehipandknee.co.za, 1 capekeen.com, 1 +capellacapital.com.au, 1 capellan.pe, 1 capellen.tk, 1 capeprivacy.com, 0 @@ -24316,8 +24434,10 @@ capitainebaggy.ch, 0 capitains.tk, 1 capital-electronics.ml, 1 capital-match.com, 1 +capital2020.cat, 1 capitalcap.com, 1 capitalcollections.org.uk, 1 +capitalendurancegroup.com, 1 capitalgyan.com, 1 capitalibre.com, 1 capitalism.party, 1 @@ -24339,6 +24459,7 @@ capitalquadatv.org.nz, 1 capitalrooms.ga, 1 capitalroomsers.ga, 1 capitalscum.tk, 1 +capitalsejours.fr, 1 capitalspiderers.ga, 1 capitalstakepool.info, 1 capitaltruepartner.hk, 1 @@ -24363,6 +24484,7 @@ caprice-holdings.co.uk, 1 caprichosdevicky.com, 1 caprigo.ru, 1 capris.cr, 1 +capro.global, 1 caps-hats.tk, 1 caps.equipment, 1 caps.is, 1 @@ -24386,6 +24508,7 @@ captainjanks.tk, 1 captainpassword.com, 1 captainratnesh.tk, 1 captainscarlet.tk, 1 +captainsonic.com, 1 captainsunshine.tk, 1 captalize.com, 1 captivationscience.com, 1 @@ -24534,6 +24657,7 @@ career-conduct.jp, 1 careerandjobsearch.tk, 1 careercapital.co.za, 1 careerdiary.co.uk, 1 +careerfoundry.com, 1 careergo.org, 1 careeroptionscoach.com, 1 careertransformed.com, 1 @@ -24561,6 +24685,7 @@ careyshop.cn, 1 carezza.net, 1 carezzaperu.com, 1 carfax.ca, 1 +carfaxcanadaappgateway.azurewebsites.net, 1 carfinancehelp.com, 1 carfinans.ru, 1 carforme.gr, 1 @@ -24595,6 +24720,7 @@ carintegrado.com.co, 1 carinthia.eu, 1 carioca-romania.ro, 1 cariocabelos.com.br, 1 +cariproperti.com, 1 carisenda.com, 1 carium.com, 1 carkeysystem.com, 1 @@ -24650,7 +24776,6 @@ carlosjeurissen.nl, 1 carlosmfalves.eu, 1 carlospiga.fr, 1 carlosvelezmarketing.com, 1 -carlot-j.com, 1 carlovanwyk.com, 1 carls-fallout-4-guide.com, 1 carlsbadluxuryhotels.ga, 1 @@ -25111,6 +25236,7 @@ casinolistings.com, 1 casinomucho.com, 1 casinomucho.org, 1 casinomucho.se, 1 +casinonieuws.nl, 1 casinoonline39.com, 1 casinoonlineprova.com, 1 casinoportugal.pt, 1 @@ -25119,6 +25245,7 @@ casinoreal.com, 1 casinorewards.info, 1 casinorobots.com, 1 casinosblockchain.io, 1 +casinosnederland.com, 1 casinospesialisten.net, 1 casinospilnu.dk, 1 casinotokelau.tk, 1 @@ -25633,7 +25760,6 @@ cedric-garcia.tk, 1 cedricbonhomme.org, 1 cedriccassimo.ch, 0 cedriccassimo.com, 0 -cedricwalter.ch, 1 cee.io, 1 cee3.net, 1 ceebee.com, 1 @@ -25759,6 +25885,7 @@ centenodigital.es, 1 center-elite.ml, 1 center-surgery.ru, 1 centeragro.com.br, 1 +centerenergytherapy.ru, 1 centerforamericangreatness.com, 1 centergate.se, 1 centermk.ru, 1 @@ -25776,6 +25903,7 @@ centos.pub, 1 centr.dn.ua, 1 central-apartman.tk, 1 central4.me, 1 +centralbank.ae, 1 centralbetsers.ga, 1 centralbetsest.ga, 1 centralcityjuniorkindergarten.com, 1 @@ -25889,11 +26017,9 @@ ceramiche.roma.it, 1 ceramicoatingspecialists.com, 1 cerastar.com, 1 cerber.re, 1 -cerber.us, 1 cerberis.com, 1 cerberusecurity.com, 1 cerbottana.duckdns.org, 1 -cerbus.nl, 1 cerby.com, 0 cercidiana.pt, 1 cerda-avocats.com, 1 @@ -26076,6 +26202,7 @@ cgpe.com, 1 cgplumbing.com, 1 cgps.xyz, 1 cgsmart.com, 1 +cgsociety.org, 1 cgstprayagraj.gov.in, 1 cgt-univ-nantes.fr, 1 cgtburgos.org, 1 @@ -26431,6 +26558,7 @@ chatu.me, 1 chatucomputers.com, 1 chatup.cf, 1 chaturbate.com, 1 +chaturbate.eu, 1 chaturbate.global, 1 chaturbates.org, 1 chaturbates.xyz, 0 @@ -26680,7 +26808,6 @@ cherryq.com.my, 1 cherubicsoft.com, 1 cheryltweedy.tk, 1 cherysunzhang.com, 1 -chesapeakebank.com, 0 chesapeakebaychristmas.com, 1 chesapeakecluttercontrol.com, 1 chesapeakeopticallab.com, 1 @@ -26815,6 +26942,7 @@ childrens-room.com, 1 childrensdentalranch.com, 1 childrensentertainmentleicester.co.uk, 1 childrensfurniture.co.uk, 1 +childrensmentalhealthcampaign.org, 1 childrensrecipes.tk, 1 childstats.gov, 1 childswear.tk, 1 @@ -26998,6 +27126,7 @@ choesfirm.tk, 1 chofan.tk, 1 choiceautoloan.com, 1 choicemediaworks.com, 1 +choiceorganics.co.za, 0 choirofbeirut.cf, 1 choisirmoneau.blog, 1 chokladfantasi.net, 1 @@ -27148,6 +27277,7 @@ christianoliff.com, 1 christianotero.co, 1 christianr.me, 1 christianrasch.de, 1 +christianreimold.de, 1 christians.dating, 1 christiansayswords.com, 1 christiansburgva.gov, 1 @@ -27570,7 +27700,7 @@ cisa.gov, 1 cisamexico.com, 1 ciscoasanetflow.com, 1 ciscocyberthreatdefense.com, 1 -ciscodude.net, 1 +ciscodude.net, 0 ciscom.tk, 1 cisconetflowleader.com, 1 cisconetflowpartners.com, 1 @@ -27818,6 +27948,7 @@ ck-pms.com, 1 ck.cx, 1 ck0.eu, 1 ck1020.cc, 1 +ck12.org, 1 ckcameron.net, 1 ckcg.tk, 1 ckdemo.herokuapp.com, 1 @@ -28024,7 +28155,6 @@ clav1d.com, 1 clavit4.zone, 1 clawe.de, 1 clawedfrogs.tk, 1 -clayandcottonkirkwood.com, 1 claycountyne.gov, 1 clayelections.gov, 1 claygregory.com, 1 @@ -28071,6 +28201,7 @@ cleansweepaa.com, 1 cleanway.dk, 1 clear.ml, 1 clearance365.co.uk, 1 +clearbit.com, 1 clearbooks.co.uk, 1 clearbookscdn.uk, 1 clearbrand.com, 1 @@ -28192,6 +28323,7 @@ clicheshishalounge.co.uk, 1 click-7979.com, 1 click-cat.tk, 1 click-generator.com, 1 +click2bet.top, 1 click2order.co.uk, 1 click4click.ga, 1 clickalphaville.com.br, 1 @@ -28261,6 +28393,7 @@ climatizzatore.roma.it, 1 climatizzatoriprezzi.it, 1 climaverde.gr, 1 climbing.tk, 1 +climeradar.com, 1 clinchcountyga.gov, 1 clindamycin-150mg.ga, 1 clindamycin-phosphate.ga, 1 @@ -28338,6 +28471,7 @@ clockcaster.com, 1 clockka.com, 1 clockka.it, 1 clocklab.design, 1 +clocklink.com, 1 clodo.it, 1 clodoteam.ga, 1 clojurescript.ru, 1 @@ -28389,6 +28523,7 @@ cloud.fail, 1 cloud.google.com, 1 cloud.gov, 1 cloud10.io, 1 +cloud24x7.us, 1 cloud255.com, 1 cloud42.ch, 0 cloud7.news, 1 @@ -28423,6 +28558,7 @@ clouddog.com.br, 1 clouddomain.tk, 1 clouddownloader.net, 1 cloudeezy.com, 1 +cloudengage.com, 1 cloudera.com, 1 cloudeways.com, 1 cloudey.net, 1 @@ -28548,6 +28684,7 @@ clowd.ovh, 1 clown-clan.tk, 1 clownish.co.il, 1 cloxy.com, 1 +cloyes.com, 1 cloze.com, 1 clr3.com, 1 cls.im, 1 @@ -28765,6 +28902,7 @@ co.lu, 1 co.search.yahoo.com, 0 co2eco.cn, 0 co2fr.ee, 0 +co3app.com, 1 coach-enligne.fr, 1 coach-hpe.ch, 0 coach-immobilier-neuf.fr, 1 @@ -28839,8 +28977,10 @@ cockfile.com, 1 cockmonkey.tk, 1 cockybot.com, 1 coco-01.gq, 1 +coco-apo.de, 1 coco-cool.fr, 1 coco-line.ch, 1 +coco.one, 1 cocoa-job.jp, 1 cocoafl.gov, 1 cocobollo-sallanches.com, 1 @@ -28960,6 +29100,7 @@ codereview.appspot.com, 1 codereview.chromium.org, 1 coderhangout.com, 1 coderjesus.com, 1 +codero.com, 1 coderofdreams.com, 1 coderoute-enligne.com, 1 coderpad.io, 1 @@ -29048,6 +29189,7 @@ coffeehousewriters.com, 1 coffeemakemachines.com, 1 coffeemoment.nl, 1 coffeeonlinemagazine.com, 1 +coffeeplazahamburg.com, 1 coffeestain.ltd, 1 coffeestory.in.ua, 1 coffeetom.de, 1 @@ -29110,6 +29252,7 @@ coinforce.com, 1 coinfundit.com, 1 coingate.com, 1 coinjar-sandbox.com, 1 +coinjar.com, 1 coinlend.org, 1 coinloan.io, 1 coinmarketturkiye.com, 1 @@ -29358,6 +29501,7 @@ columbiacountywi.gov, 1 columbiail.gov, 1 columbiaproemergencymovers.com, 1 columbiascaffolding.com, 1 +columbiathreadneedle.com, 1 columbiatwpmi.gov, 1 columbushydroxide.com, 1 columbushydroxide.net, 1 @@ -29412,6 +29556,7 @@ comedimagrire.it, 1 comedyhuis.nl, 1 comenc.ddns.net, 1 comengpt.com, 1 +comenityremediation.com, 1 comeoishii.com, 1 comeoneileen.tk, 1 comercialcolombia.tk, 1 @@ -29456,7 +29601,6 @@ comicspornoxxx.com, 1 comicstrove.com, 1 comicsymanga.com, 1 comicwiki.dk, 1 -comicyears.com, 1 comidina.com, 1 comingto.icu, 1 comiq.io, 1 @@ -29497,6 +29641,7 @@ commissionagenda.com, 1 commissioner.tk, 1 commitsandrebases.com, 1 commlabindia.com, 0 +commodore-rekord.de, 1 commonapp.org, 1 commoncode.com.au, 1 commoncode.io, 0 @@ -29635,6 +29780,7 @@ compliance-systeme.de, 1 compliancebox.co, 1 compliancedictionary.com, 1 compliancerisksoftware.co.uk, 1 +complianz.io, 1 compliment.cf, 1 compliq.se, 1 complt.xyz, 1 @@ -29724,6 +29870,7 @@ computron.ga, 1 comquadro.com.br, 1 comradesofmight.tk, 1 comsoli.com.br, 1 +comsolibrasil.com.br, 1 comswp.com, 1 comtex.com.au, 1 comtily.com, 1 @@ -29870,7 +30017,6 @@ confiscation.tk, 1 confiseriedubonheur.com, 1 confiwall.de, 1 conflidentliving.cf, 1 -conform.one, 1 conformal.com, 0 conformax.com.br, 1 conformist.jp, 1 @@ -29950,11 +30096,10 @@ connictro.de, 1 conniesacademy.com, 1 connollycove.com, 1 connorhatch.com, 1 -connorjc.io, 1 connorlim.net, 1 connornoddin.com, 1 conntrack.com, 1 -connyduck.art, 1 +connyduck.art, 0 connyduck.at, 1 conocchialidasole.it, 1 conocedordigital.com, 1 @@ -30393,6 +30538,7 @@ corepacks.tk, 1 corepartners.com.ua, 1 corerad.net, 1 coresos.com, 1 +coresystems.hu, 1 coretema.eu, 1 coreum.ca, 1 coreup.de, 1 @@ -30640,6 +30786,7 @@ costumestylesers.ga, 1 costurin.com, 1 cosummitconstruction.com, 1 cosumnescsd.gov, 1 +cosuno.com, 1 cosyden.tk, 1 cotak.gov, 1 cotandoseguro.com, 1 @@ -30783,7 +30930,6 @@ covid19responsepod.com, 1 covid19scotland.co.uk, 0 covid19statstracker.com, 1 covidcoldfacts.com, 1 -coviddiary.live, 1 coviddrawings.org.uk, 1 covidfreeathome.org, 1 covidinfo.com.br, 1 @@ -30796,6 +30942,7 @@ covidtests.gov, 1 covidtracker.fr, 1 covisa.cl, 1 covisian.com, 1 +covo.one, 1 covybrat.cz, 1 cow-ims.herokuapp.com, 1 cowbird.org, 1 @@ -30811,6 +30958,7 @@ coxcapitalmanagement.com, 1 coxxs.me, 1 coxxs.moe, 1 coya.tw, 1 +coyo.tl, 1 coyote.cf, 1 cozanne.fr, 1 coze.zone, 1 @@ -30873,6 +31021,7 @@ cps-sante.ml, 1 cpsa.co.uk, 1 cpsecureapp.com, 1 cpsq.fr, 1 +cpstest.org, 1 cpsurvey.com, 1 cptoon.com, 1 cptvl.de, 1 @@ -31127,9 +31276,11 @@ creativelaw.eu, 1 creativeliquid.com, 1 creativelysustainable.com, 1 creativemindslms.tk, 1 +creativenz.govt.nz, 1 creativephysics.ml, 1 creativescorpio.tk, 1 creativesectors.tk, 1 +creativesmm.com.ua, 1 creativestories.me, 1 creativetechsolution.in, 1 creativeweb.biz, 1 @@ -31191,6 +31342,8 @@ cremalleradenuria.tk, 1 crematory.tk, 1 cremedigital.com, 1 cremepassion.de, 1 +cremicro.com, 1 +crena.ch, 1 crepa.ch, 0 crepusculofansmexico.tk, 1 crescent-moon.tk, 1 @@ -31213,6 +31366,7 @@ creteangle.com, 1 cretica.no, 1 creusalp.ch, 0 crew.moe, 1 +crewpictures.com, 1 crewsing.tk, 1 crewvision.pt, 1 crex24.com, 1 @@ -31223,6 +31377,7 @@ criandosites.com.br, 1 criativedesign.com.br, 1 cribboker.net, 1 cribcore.com, 1 +cric-grenoble.info, 1 cricket-betting-online.in, 1 cricketarena.ml, 1 cricketnmore.com, 1 @@ -31376,6 +31531,7 @@ cronicademuro.tk, 1 cronix.cc, 1 cronjob.de, 1 cronmaster.online, 1 +cronobox.one, 1 cronologie.de, 1 cronometer.com, 1 cronoscentral.be, 1 @@ -31454,6 +31610,7 @@ crsoresina.it, 1 crsserviceogkloak.dk, 1 crstat.ru, 1 crsujind.org, 1 +crt.cloud, 1 crt.sh, 1 crt2014-2024review.gov, 1 crtalleres.com, 1 @@ -31467,6 +31624,7 @@ crufad.org, 0 cruicky.co.uk, 1 cruicky.uk, 1 cruiseaddicts.com, 1 +cruiseamerica.com, 1 cruisecheap.com, 1 cruisecontrolnovels.com, 1 cruisefashion.tk, 1 @@ -31513,6 +31671,7 @@ crypticdeath.tk, 1 crypticface.tk, 1 crypticonseattle.com, 1 crypticstench.tk, 1 +cryptii.com, 1 cryptingup.com, 1 cryptizy.com, 1 cryptme.in, 1 @@ -31589,6 +31748,7 @@ cryptopaste.org, 1 cryptophobia.nl, 1 cryptopyramide.com, 1 cryptorival.com, 1 +cryptoruay.com, 1 cryptoseb.pw, 1 cryptoshot.pw, 1 cryptosolicitations.com, 1 @@ -31772,9 +31932,9 @@ csvalpha.nl, 1 csvplot.com, 1 cswapps.com, 1 cswebi.net, 1 -cswgmbh.de, 1 csx.co.za, 1 csy.hu, 1 +ct-static.com, 1 ct-watches.dk, 1 ct.search.yahoo.com, 0 ctcloud.ml, 1 @@ -31914,6 +32074,7 @@ culturaanarquista.tk, 1 culturaarabe.tk, 1 culturabrasilia.tk, 1 culturaeuropea.tk, 1 +culturagenial.com, 1 culturahack.tk, 1 culturaldiversity.tk, 1 culturalmaninhos.tk, 1 @@ -32001,6 +32162,7 @@ curieux.digital, 0 curinline.com, 1 curio-shiki.com, 1 curio.lk, 1 +curiocity.com, 1 curiocity.tk, 1 curiosidadeanimal.cf, 1 curiosity-driven.org, 1 @@ -32008,7 +32170,6 @@ curiositytrained.com, 1 curiosoando.com, 1 curiousspoonfoods.com, 1 curioustea.com, 1 -curiozitate.com, 1 curl.tw, 0 curlie.tk, 1 curlify.com, 1 @@ -32034,6 +32195,7 @@ currynissanmaparts.com, 1 curseus.com, 1 cursillosdezaragoza.tk, 1 cursoalia.com, 0 +cursoandroid.com, 1 cursocatolico.com, 1 cursodehipnosis.tk, 1 cursodememorizacao.ml, 1 @@ -32213,6 +32375,7 @@ cwrau.de, 1 cwrau.info, 1 cwrau.io, 1 cwrau.rocks, 1 +cwtrade.co.uk, 1 cwwise.com, 1 cx.cx, 1 cx100.io, 1 @@ -32371,6 +32534,7 @@ cybertron.cf, 1 cybertronics.tk, 1 cybertu.be, 1 cyberwandelendetakjes.tk, 1 +cyberwars.dk, 1 cyberweightloss.com, 1 cyberwire.nl, 1 cyberworldexpert.tk, 1 @@ -32536,6 +32700,7 @@ d2.gg, 1 d21laxujm54z8h.cloudfront.net, 1 d24zgh0u05bzjw.cloudfront.net, 1 d25sxbgdpzj1st.cloudfront.net, 1 +d2evs.net, 1 d2i06m35fc7thi.cloudfront.net, 1 d2ph.com, 1 d2toledo.com, 1 @@ -32553,6 +32718,7 @@ d42.no, 1 d4done.com, 1 d4fx.de, 1 d4h.live, 1 +d4insight.com, 1 d4wson.com, 1 d4x.de, 1 d500world.tk, 1 @@ -32748,6 +32914,7 @@ dailynewsfrommedjugorje.ml, 1 dailyphototips.com, 0 dailypop.ru, 1 dailypost.ng, 1 +dailyprogress.com, 1 dailyreels.ga, 1 dailyrenewblog.com, 1 dailyreporters.com, 1 @@ -33297,6 +33464,7 @@ dartdriving.com, 1 dartergroup.com, 1 darthbraden.com, 1 dartmold.com, 1 +dartmouth-health.org, 1 dartnallministorage.com, 1 dartstart.tk, 1 dartydiscount.fr, 1 @@ -33545,6 +33713,7 @@ davebuis.tk, 1 davecardwell.com, 1 davedevries.nl, 1 daveedave.de, 0 +davelbostoncoach.com, 1 davelucia.com, 1 davemusic.tk, 1 davenportok.gov, 1 @@ -33579,6 +33748,7 @@ david-reess.de, 1 david-schiffmann.de, 1 david.kitchen, 1 davidadrian.org, 1 +davidalbert.me, 1 davidandersson.se, 1 davidandrewcoaching.com, 1 davidband.com.au, 1 @@ -33648,6 +33818,7 @@ davidstuff.net, 1 davidsun.info, 1 davidsun.name, 1 davidtiffany.com, 1 +davidtorres4congress.com, 1 davidundetiwan.com, 1 davidvig.com, 1 davidvilla.tk, 1 @@ -33928,6 +34099,7 @@ deadsamaritan.tk, 1 deadsea.tk, 1 deadshortaudio.com, 1 deadspin.com, 1 +deaecom.gov, 1 deaf.dating, 1 deaf.eu.org, 1 deafsound.tk, 1 @@ -34072,6 +34244,7 @@ deck.academy, 1 deckenplatten.org, 1 deckersheaven.com, 1 deckfix.co.nz, 1 +deckshop.pro, 1 declarando.es, 1 declarativ.ga, 1 declaredme.com, 1 @@ -34083,10 +34256,10 @@ decock-usedcars.be, 1 decode.ga, 1 decodeanddestroy.com, 1 decofire.pl, 0 -decohome.ee, 1 decompression.tk, 1 deconstructind.ro, 1 decor-anna.com, 1 +decor-essentials.com, 1 decor-live.ru, 1 decor-prazdnik.ru, 1 decorahia.gov, 1 @@ -34143,6 +34316,7 @@ dee.pe, 1 dee.su, 1 deechtebakkers.nl, 1 deeded.ca, 1 +deeds.com, 1 deedyinc.com, 1 deegeeinflatables.co.uk, 1 deejayevents.ro, 0 @@ -34162,7 +34336,6 @@ deep-chess.com, 0 deep-core.tk, 1 deep-labs.com, 1 deep-wave-hair-extensions.tk, 1 -deep.club, 1 deep6.ai, 1 deepaero.com, 1 deeparamaraj.com, 1 @@ -34174,6 +34347,7 @@ deepfake-porn.com, 1 deepgame.tk, 1 deephill.com, 1 deephouse.ovh, 1 +deephousex.ru, 1 deepinnov.com, 1 deepinsight.io, 1 deeplink-medical.com, 1 @@ -34207,6 +34381,7 @@ defeestboek.nl, 1 defeestridders.tk, 1 defelo.de, 1 defelo.ml, 1 +defence.pk, 1 defenceenterprise.com, 1 defend2.org, 1 defendanimals.com, 1 @@ -34300,7 +34475,6 @@ dehaanadvocatenkantoor.nl, 1 dehaancaravans.nl, 1 dehkade3.ml, 1 dehoga-reisen.de, 1 -dehoogewaerder.nl, 1 dehop.re, 1 dehopre.com, 1 dehuidstudio.nl, 1 @@ -34308,6 +34482,7 @@ dehumanizer.com, 1 deidee.nl, 1 deimos.gq, 1 deimos.pro, 1 +deimos.ws, 1 dein-baumdienst.de, 1 dein-trueffel.de, 1 deinballon.de, 1 @@ -34356,6 +34531,8 @@ delahrzolder.nl, 1 delam.site, 1 delasamericas.tk, 1 delavega.ua, 1 +delavska-hranilnica.si, 1 +delavska.si, 1 delawarehealth.tk, 1 delawarenation-nsn.gov, 1 delay-dengi.cf, 1 @@ -34500,6 +34677,7 @@ dementievriendelijkgent.be, 1 demes.tk, 1 demesos.tk, 1 demetra-site.com.ua, 1 +demeubelmakelaar.nl, 1 demeyere-usedcars.be, 1 demfloro.ru, 1 demibaguette.com, 1 @@ -34568,7 +34746,6 @@ dena.pro, 1 denabot.pw, 1 denachtegaalferwert.tk, 1 denaehula.com, 1 -denagallery.ir, 1 denali.net, 1 denarium.com, 1 denatured.tk, 1 @@ -34630,7 +34807,6 @@ denninger.jp, 1 denningny.gov, 1 dennisang.com, 1 denniscsl.com, 1 -dennisdoes.net, 0 dennishenrique.com.br, 1 dennishzg.com, 1 denniskoot.nl, 1 @@ -34722,14 +34898,11 @@ departureboard.io, 1 depcompower.com, 1 depeche.ga, 1 depechemode-live.com, 1 -deped.blog, 1 deped.io, 1 depedclick.net, 1 -depedclick.org, 1 depedcommons.org, 1 depedept.com, 0 depedsurigaodelnorte.com, 1 -depedtambayan.blog, 1 depedtambayan.net, 1 depedtayo.com, 1 depedtayo.ph, 1 @@ -34814,6 +34987,7 @@ derhaeuptling.de, 1 derhil.de, 1 derincocuk.com, 1 derinsular.tk, 1 +derivative-calculator.net, 1 derivativeshub.pro, 1 derive.cc, 0 derive.cf, 1 @@ -34918,6 +35092,7 @@ designarea.tk, 1 designartepublicidad.com, 1 designburners.com, 1 designcanada.com, 1 +designcrowd.com, 1 designdecorativ.ro, 1 designed-cybersecurity.com, 1 designedcybersecurity.com, 1 @@ -35118,6 +35293,7 @@ dev.vu, 1 devafterdark.com, 1 devagency.fr, 1 devahi.gq, 1 +devalbert.com, 1 devalkincentives.nl, 1 devalps.eu, 1 devanstavern.tk, 1 @@ -35169,6 +35345,7 @@ devil-radio.tk, 1 devil.wtf, 1 devilbyte.tk, 1 devildog.tk, 1 +devilishsecurity.com, 1 devillers-occasions.be, 0 devilmaycry.ga, 1 devilmaycry.tk, 1 @@ -35211,7 +35388,6 @@ devos.ml, 1 devoted-atheist.tk, 1 devoteschlampe.net, 1 devotional.tk, 1 -devpage.lv, 1 devpost.com, 1 devpp.com.br, 1 devpsy.info, 1 @@ -35316,6 +35492,7 @@ dfile.tech, 0 dflcares.com, 1 dfmn.berlin, 1 dfmvf.org, 1 +dfpg.com, 1 dfranke.com, 1 dfspdfl.gov, 1 dfstoryteller.com, 1 @@ -35385,6 +35562,7 @@ dhlcotizadorexpo-qa.azurewebsites.net, 1 dhlinux.org, 1 dhlkh.com, 1 dhome.at, 1 +dhr-rgv.com, 1 dhrupad.tk, 1 dhruv.nz, 1 dhtr.pw, 1 @@ -35450,6 +35628,7 @@ diamondpkg.org, 1 diamondsystem.ro, 1 diamondyacca.co.uk, 1 diamorphine.com, 1 +diamwall.com, 1 diana-und-aaron.de, 1 dianaconsultancy.com, 1 dianaconta.pt, 1 @@ -35806,6 +35985,7 @@ digitaldeliarchive.com, 1 digitaldem.it, 1 digitaldesign.ga, 1 digitaldisaster.tk, 1 +digitaldruck-kw.de, 1 digitaldruck.info, 1 digitale-bibliothek.tk, 1 digitale-oekonomie.ch, 1 @@ -35835,6 +36015,7 @@ digitalgov.gov, 1 digitalgyan.org, 1 digitalgymnastics.tk, 1 digitalhabitat.io, 0 +digitalhack.ro, 1 digitalhands.tk, 1 digitalhealth.gov.au, 1 digitalheart.tk, 1 @@ -35912,6 +36093,7 @@ digitreads.com, 1 digitren.co.id, 0 digityp.fi, 1 digitypa.fi, 1 +digityza.com, 1 digivan.ml, 1 digminecraft.com, 1 dignity.tk, 1 @@ -35941,6 +36123,7 @@ dijitaller.com, 1 dijitalzade.com, 1 dijkmanmuziek.nl, 0 dijks.com, 1 +dijoncter.info, 1 dik-manusch.tk, 1 dikiaap.id, 1 dikkevettescania.tk, 1 @@ -35955,13 +36138,13 @@ diligenciasprime.com.br, 1 diligo.ch, 0 dillewijnzwapak.nl, 1 dillonco.gov, 1 -dillonm.io, 1 dilmahtea.me, 1 dilmarames.com, 1 dima.pm, 0 dimagrimentoincorso.it, 1 dimanss47.net, 1 dimaweb.tk, 1 +dimdata.com, 1 dime-staging.com, 1 dimensionjapon.tk, 1 dimensions-ohs.com, 1 @@ -36143,6 +36326,7 @@ dirtytiles.xyz, 1 dirtywarez.org, 1 dirtywoman.tk, 1 dirunreddy.tk, 1 +disaana.jp, 1 disability.gov, 1 disabilitydischarge.com, 1 disabled-world.com, 1 @@ -36372,6 +36556,7 @@ distri.com.ua, 1 distribuidoracristal.com.br, 1 distribuidoradecierres.com, 1 distribuidoraplus.com, 1 +distribuidorguarani.com.br, 1 distribuidorveterinario.es, 1 distributed.cafe, 1 distributedsource.com, 1 @@ -36460,6 +36645,7 @@ divorceattorneyshouston.com, 1 divorceattorneysny.com, 1 divorceformsfiller.com, 1 divorcelawyer365.com, 1 +divorcemortgage.com, 1 divorceonline.com, 1 divort.org, 1 divstack.io, 1 @@ -36711,6 +36897,7 @@ dkos7.com, 1 dkos8.com, 1 dkos9.com, 1 dkravchenko.su, 0 +dksh.com, 1 dksinger.tk, 1 dksoft-2130.ddns.net, 1 dksoft.online, 1 @@ -36753,7 +36940,6 @@ dlmixcloud.com, 1 dlouwrink.nl, 0 dlp-demo.com, 1 dlrg-cux-ohz.de, 0 -dlscomputers.com.au, 1 dlsolutions-inc.com, 1 dlt.green, 1 dluxelab.com, 1 @@ -36969,6 +37155,7 @@ docedic.com, 1 docemeldoces.com, 1 docertify.com, 0 docesmartini.com.br, 1 +docguide.com, 1 docha.tk, 1 dochimera.com, 1 dochub.com, 1 @@ -36977,6 +37164,7 @@ dockerbook.com, 0 dockerm.com, 1 dockerup.net, 1 dockflow.com, 1 +dockinabsolute.com, 1 dockmastersonline.com, 1 dockstarter.com, 1 dockysearch.com, 1 @@ -37065,6 +37253,7 @@ doddy.tk, 1 dodecaedro.tk, 1 dodgecountymn.gov, 1 dodgecountyne.gov, 1 +dodgersway.com, 1 dodgevillewi.gov, 1 dodi-alhelo.tk, 1 dodiedods.fr, 1 @@ -37149,7 +37338,6 @@ dogsnaturallymagazine.com, 1 dogsnow.com, 1 dogtowneastpowell.com, 1 dogtrack.tk, 1 -dogtrainermadison.com, 1 dogtrainerorangecounty.com, 1 dogtrainersreno.com, 1 dogualp.com, 1 @@ -37284,6 +37472,7 @@ domainhostingcompany.tk, 1 domainics.ml, 1 domainmonitor.net, 1 domainoo.com, 1 +domainoo.fr, 1 domainops.gov, 1 domainproactive.com, 1 domains-hoarden-ist-ein-ernstes-problem-suchen-sie-sich-hilfe.jetzt, 1 @@ -37431,6 +37620,7 @@ donaldtrump.ga, 1 donaldwarner.com, 1 donamflor.com, 1 donarmany.online, 1 +donat.cloud, 1 donate.lol, 1 donateabox.org, 1 donateaday.net, 1 @@ -37478,6 +37668,7 @@ donotdepart.com, 1 donpanda.cz, 1 donpietraos.tk, 1 donpomodoro.com.co, 1 +donquix.nl, 1 donselaarbouw.nl, 1 donsremovals.com.au, 1 dont.re, 1 @@ -37620,6 +37811,7 @@ dosei.net, 1 dosenkiwi.at, 1 dosenpintar.com, 1 dosensosiologi.com, 1 +dosequis.com, 1 doserres.tk, 1 dosevue.com, 1 dosgratus.tk, 1 @@ -37656,6 +37848,7 @@ dosyaa.tk, 1 dosyanet.cf, 1 dosyanet.tk, 1 doszkocs-zsuzsa.hu, 1 +dot.la, 1 dot.sb, 1 dot42.no, 1 dota2free.tk, 1 @@ -37853,6 +38046,7 @@ dpim.org.my, 1 dpisecuretests.com, 1 dpjuse.tk, 1 dpk.es, 1 +dploy.biz, 1 dplpmtud.com, 1 dpm-ident.de, 0 dpmc.govt.nz, 1 @@ -38132,6 +38326,7 @@ dreifaltigkeitskirchgemeinde.de, 1 dreigold.de, 1 dreinulldrei.de, 1 dreischneidiger.de, 1 +dreistaxservices.com, 1 dreizwosechs.de, 0 drema.tk, 1 drendermobilyaservisi.com, 1 @@ -38149,6 +38344,7 @@ dresdner-stollen-von-reimann.de, 0 dresdner-stollen.shop, 1 dress-cons.com, 1 dressabelle.tk, 1 +dresscodeny.com, 1 dressedinlovebridal.com, 1 dressesbal.tk, 1 dressestore.tk, 1 @@ -38248,6 +38444,7 @@ drive.google.com, 1 drive.xyz, 1 driveandpark.de, 1 driveandpark.nl, 1 +drivebespokelab.media, 1 drivecrestwood.com, 1 drivedannyherman.com, 1 drivedavis.com, 1 @@ -38257,6 +38454,7 @@ driveexport.com, 1 driveforact.com, 1 driveforadtransport.com, 1 driveforartur.com, 1 +driveincleveland.com, 1 drivemorganvanlines.com, 1 driven2shine.eu, 1 drivenes.net, 1 @@ -38383,6 +38581,7 @@ dropsite.com.au, 1 droso.dk, 1 drosophila.tk, 1 drost.la, 1 +drought.gov, 1 drown.photography, 1 drpa.ca, 1 drpetersenobgynal.com, 1 @@ -38459,6 +38658,7 @@ druzya.store, 1 drwang.group, 0 drweissbrot.net, 1 drwilfredbrown.com, 1 +drwongsuni.com.sg, 1 dry-cleaning.tk, 1 dryashplasticsurgery.com, 1 dryasinakgul.com, 1 @@ -39074,6 +39274,7 @@ dynamitejobs.com, 1 dynamix-tec.com, 1 dynamofanforum.de, 1 dynapptic.com, 1 +dynasend.com, 1 dynasoft.co.ke, 1 dynastic.co, 1 dynasty-warriors.net, 1 @@ -39124,6 +39325,7 @@ dziurdzia.pl, 1 dzmonarchie.tk, 1 dzndk.net, 1 dzndk.org, 1 +dzogchentoday.org, 1 dzomo.org, 0 dzsi.bi, 0 dzsibi.com, 1 @@ -39663,7 +39865,9 @@ eaglexiang.org, 0 eagleyecs.com, 1 eaimty.com, 1 eainjurycenter.com, 1 +eajglobal.com, 1 eajglobal.net, 1 +eajglobal.org, 1 ealadel.com, 1 ealekseyev.ml, 1 ealev.de, 1 @@ -39702,6 +39906,7 @@ earthbox.com, 1 earthcore.com, 1 earthcorporation.cf, 1 eartheld.tk, 1 +earthjustice.org, 1 earthpixz.com, 1 earthpoints.org, 1 earthshotprize.org, 1 @@ -39736,7 +39941,6 @@ easthaddamct.gov, 1 eastheaven.ml, 1 eastlothianbouncycastles.co.uk, 1 eastmaintech.com, 1 -eastmedo.com, 1 eastmedo.pl, 1 eastnorschool.co.uk, 1 easton.ga, 1 @@ -39766,6 +39970,7 @@ easy-katka.ga, 1 easy-rpg.org, 0 easyaddress.io, 1 easyadsnbanners.tk, 0 +easybank.at, 1 easybom.com, 1 easybot.tk, 1 easybrazilianrecipes.com, 1 @@ -39784,6 +39989,7 @@ easyfiles.ch, 1 easyfiles.gq, 1 easyfm.cz, 1 easyfoto.tk, 1 +easygenerator.com, 1 easygrow.tk, 1 easyhomebiz.tk, 1 easyhtml.tk, 1 @@ -39897,6 +40103,7 @@ ebatech.nl, 1 ebatech.org, 1 ebatechenergiedisplay.nl, 1 ebatechenergiemanagement.nl, 1 +ebay-kleinanzeigen.de, 1 ebayinc.com, 1 ebaymotorssucks.com, 1 ebcfx.com, 1 @@ -39914,6 +40121,7 @@ ebest.co.jp, 1 ebetbananom.tk, 1 ebikemod.de, 1 ebilanzplus.de, 1 +ebill.pl, 1 ebino.pl, 1 ebiografia.com, 1 ebiografias.com.br, 1 @@ -39927,6 +40135,7 @@ ebjork.se, 1 ebki-nsn.gov, 1 eblan.gq, 1 eblog.cf, 1 +eblog.ink, 1 ebola-hosting.cz, 1 ebolacharts.ga, 1 ebolavirus.tk, 1 @@ -40011,6 +40220,7 @@ echoit.net.au, 1 echoit.services, 1 echopaper.com, 1 echorecovery.org, 1 +echosearch.co, 1 echosixmonkey.com, 1 echosnature.fr, 1 echosystem.fr, 1 @@ -40210,11 +40420,13 @@ edapt.org.uk, 1 edas.info, 0 edb.cz, 1 edb.eu, 1 +edb.gov.sg, 1 edcaptain.com, 1 edcdn.net, 1 edchart.com, 1 edd-miles.com, 1 eddesign.ch, 1 +eddi.org.au, 1 eddie.website, 1 eddmil.es, 1 eddokloosterman.com, 1 @@ -40238,6 +40450,7 @@ edel-suff.de, 1 edelveiys.tk, 1 edelweiskapel.tk, 1 edelweiss-pinzolo.com, 1 +edelweissalternatives.com, 1 eden-project-insight.tk, 1 eden.bz, 1 eden.co.uk, 1 @@ -40301,6 +40514,7 @@ edisonnj.gov, 1 edisonstreet.com, 1 edist.ro, 1 edit.co.uk, 1 +edit.org, 1 edit.yahoo.com, 0 edited.de, 1 edithlouw.tk, 1 @@ -40413,6 +40627,7 @@ edugeton.com, 1 eduhublisbon.com, 1 eduid.se, 1 eduif.nl, 0 +eduium.io, 1 edukle.com, 0 edularidea.com, 1 edularism.com, 1 @@ -40439,6 +40654,7 @@ edusanjal.com, 1 eduschool.ml, 1 edusercontent.com, 1 eduson.pl, 1 +eduspiresolutions.org, 1 edutour.ml, 1 edutrum.com, 1 eduxpro.com, 1 @@ -40510,6 +40726,7 @@ eemoor.com, 1 een-eenvoudige-test-voor-de-maximum-lengte-van-een-nederlandse.nl, 1 eencompass.com, 1 eenmailsturen.nl, 1 +eennieuwepc.nl, 1 eentweevijf.be, 1 eenvoudhup.com, 1 eenvren.com, 1 @@ -40556,6 +40773,7 @@ effectivepapers.com, 1 effectory.com, 1 effectpointphotography.cf, 1 effectualness.co.za, 1 +effectualness.web.za, 1 effer.me, 1 effex.ru, 1 effexorgeneric.ml, 1 @@ -40871,6 +41089,7 @@ ejkweb.nl, 1 ejkwebdesign.nl, 1 ek-networks.de, 0 ekalisch.de, 1 +ekamfoundationmumbai.org, 1 ekamus.tk, 1 ekati.ru, 1 ekawaiishop.com, 1 @@ -41150,6 +41369,7 @@ electroniko.cf, 1 electronis.ru, 1 electronmag.tk, 1 electronsweatshop.com, 1 +electroschematics.com, 1 electrosoftcloud.com, 0 electrostatics.com, 1 electrostore.com.ec, 1 @@ -41288,6 +41508,7 @@ elepover.com, 1 elesconditedelola.com, 1 eletesstilus.hu, 1 eletminosegert.ro, 1 +eletom.pl, 1 eletor.com, 1 eletor.pl, 1 eletrotel.com, 1 @@ -41395,6 +41616,7 @@ elinks.tk, 1 elinspector.tk, 1 elinternadolagunanegra.tk, 1 eliolita.com, 1 +eliotchs.org, 1 eliott.cc, 1 eliottlavier.com, 1 eliquid-manufaktur.de, 1 @@ -41578,6 +41800,7 @@ elplugins.xyz, 1 elpo.net, 1 elpoderdelespiritu.org, 1 elpreciosostud.com, 1 +elpreparacionista.com, 1 elprincipevegeta.tk, 1 elprofeshows.com, 1 elpromaucae.tk, 1 @@ -41652,6 +41875,7 @@ elvismania.tk, 1 elvispresley.net, 1 elvorti.bg, 1 elvorti.com, 1 +elvtr.com, 1 elwave.org, 1 elweronete.tk, 1 elwix.com, 1 @@ -41750,6 +41974,8 @@ emdesigns.tk, 1 emdrupholm.dk, 1 emdvcorasia.com, 1 emdynint.io, 1 +emechternach.com, 1 +emed.com, 1 emedos.es, 1 emeetattd.ddns.net, 1 emeliecrystal.net, 1 @@ -41848,6 +42074,7 @@ emkanrecords.com, 0 emkode.pl, 1 emkrivoy.com, 1 emlakvar.com, 1 +emlcloud.com, 1 emls.fr, 1 emlyn.xyz, 1 emma-central.tk, 1 @@ -41948,6 +42175,7 @@ emporiaks.gov, 1 emporikonathenshotel.com, 1 emporioarchitect.com, 1 emporiodosperfumes.com.br, 1 +emporioguarani.com.br, 1 emporioonline.com.br, 1 emporiopurochile.com.br, 1 empoweraces.com, 1 @@ -41978,6 +42206,7 @@ emptypath.com, 1 emptysmile.tk, 1 empyrean-advisors.com, 1 emrah.io, 1 +emrawi.org, 1 emreaydinfan.tk, 1 emrecicekmuhendislik.com, 1 emresaglam.com, 1 @@ -42205,6 +42434,7 @@ energygroup.tk, 1 energyguru.tk, 1 energyhomeservice.ca, 1 energyhybrid.ga, 1 +energylink.com, 1 energylocal.com.au, 1 energylocals.com, 1 energylocals.com.au, 1 @@ -42240,11 +42470,11 @@ enflow.nl, 1 enforcement-trends-dev.azurewebsites.net, 1 enforcement-trends-test.azurewebsites.net, 1 enforcement-trends.azurewebsites.net, 1 +enfusion.com, 1 eng-erlangen.de, 0 eng3corp.com, 1 eng4arab.tk, 1 engageapp.net, 1 -engagebranding.com, 1 engagelogic.com, 1 engagewarnerrobinsga.gov, 1 engagewell.com, 1 @@ -42450,6 +42680,7 @@ entersoftsecurity.com, 1 entersynapse.com, 1 entertaiment-news.tk, 1 entertainerzone.tk, 1 +entertainment-nation.co.uk, 1 entertainmentblog.tk, 1 entertainmentformitzvahs.com, 1 entertainmentsrit.tk, 1 @@ -42561,7 +42792,6 @@ epa.com.es, 1 epagos.com.ar, 1 epal.pt, 1 epasar.my, 0 -epassafe.com, 1 epasuno.org, 1 epavape.eu, 1 epave.paris, 1 @@ -42684,6 +42914,7 @@ eprzybornik.pl, 1 epsamsg.com, 1 epsi.io, 1 epsilon.dk, 1 +epsilonhomebasedqualitycare.com, 1 epsilontel.com, 1 epsmil.it, 1 epspolymer.com, 1 @@ -42770,7 +43001,6 @@ erclab.kr, 1 erclaim.com, 1 erctra.com, 1 erda.gov, 1 -erdekesseg.com, 1 erdethamburgeronsdag.no, 1 ereader.uno, 1 erechimimoveis.com.br, 1 @@ -43125,6 +43355,7 @@ esg-abi2001.de, 1 esgen.org, 1 esgr.in, 1 esh.ink, 1 +eshappy.tours, 1 esher.ac.uk, 1 eshigami.com, 1 eshoeft.com, 1 @@ -43144,6 +43375,7 @@ esigtorg.ru, 0 esiliati.org, 1 esilva.me, 1 esite.ch, 1 +eskandarient.ir, 1 eskapi.fr, 1 eskdale.net, 1 eskiceviri.cf, 1 @@ -43182,7 +43414,7 @@ esoterikerforum.de, 1 espace-caen.fr, 0 espace-gestion.fr, 1 espace-habitat-francais.fr, 1 -espace-orenda.ch, 0 +espace-orenda.ch, 1 espace-vet.fr, 1 espace.network, 1 espace.spb.ru, 0 @@ -43194,6 +43426,7 @@ espacetendance.fr, 0 espacetheosophie.fr, 1 espachavo.tk, 1 espacioantiguo.com, 1 +espaciohebe.es, 1 espacioprofundo.com.ar, 0 espacioseideas.mx, 1 espacioweb.tk, 1 @@ -43228,7 +43461,6 @@ espocada.com, 1 esport-agency.fr, 1 esporters.today, 1 esportsbattles.ga, 1 -esportsinnovationcenter.com, 1 espower.com.sg, 1 espressob2b.com, 1 espressodokter.nl, 1 @@ -43322,6 +43554,7 @@ esteriliza-me.org, 1 esterilizacion-perros.es, 1 estespr.com, 0 estet.tk, 1 +estetica.host, 1 esteticamicali.com.ar, 1 esteticanorte.com.br, 1 esteticaprofana.it, 1 @@ -43429,6 +43662,7 @@ eternalsymbols.com, 1 eternegy.co, 1 eternit.roma.it, 1 eternitdesio.it, 1 +eternl.io, 1 etestyonline.tk, 1 etf.nu, 1 etf2l.org, 1 @@ -43548,7 +43782,6 @@ etulasin.tk, 1 etury.online, 1 etutsplus.com, 1 etv.cx, 1 -etwalldentalpractice.co.uk, 1 etyd.org, 1 etyka.cz, 1 eu-darlehen-finanzierung.de, 1 @@ -43611,6 +43844,7 @@ eurban.life, 1 eurbanos.tk, 1 eurekaca.gov, 1 eurekagames.tk, 1 +eurekapools.com.my, 1 eurekatech.eti.br, 1 eurekatownshipmi.gov, 1 euren.se, 1 @@ -43643,6 +43877,7 @@ eurodontic.co.uk, 0 euroenergy.tk, 1 euroestetica.ec, 1 euroexpres.info, 1 +eurofins.com, 1 eurofire.tk, 1 euroflora.com, 1 euroflora.mobi, 1 @@ -43819,7 +44054,6 @@ eveningtaxservices.com, 1 evenstar-gaming.com, 1 evenstargames.com, 1 event-blick.de, 1 -event-fullyyours.com, 1 event-reisen.tk, 1 event-trac.com, 1 event1teamstore.com, 0 @@ -43828,6 +44062,7 @@ eventact.com, 0 eventaro.com, 1 eventblog2017.tk, 1 eventcore.tk, 1 +eventdata.co.uk, 1 eventdays.tk, 1 eventerlebnis.ch, 1 eventfun.tk, 1 @@ -43839,6 +44074,7 @@ eventosbgp.com, 1 eventosdeluchalibre.tk, 1 eventosenmendoza.com.ar, 1 eventosformativos.tk, 1 +eventpark.cz, 1 eventprazdnik.ru, 1 events.bt, 1 eventsbytma.com, 1 @@ -43855,6 +44091,7 @@ everesthealthgroup.com, 1 everettduiattorneys.com, 1 everettsautorepair.com, 0 everfine.com.tw, 1 +everfreecoloring.com, 1 everglow.co.jp, 1 evergreenal.gov, 1 evergreenilder.tk, 1 @@ -43928,7 +44165,6 @@ everythingstech.com, 1 everythinq.com, 1 everytrycounts.gov, 1 everyveterancountsohio.gov, 1 -everzocial.com, 1 evesan.com, 1 eveshaiwu.com, 1 eveshamglass.co.uk, 1 @@ -44088,6 +44324,7 @@ exambot.ga, 1 exambot.gq, 1 exambot.tk, 1 examedge.com, 1 +examgraduate.com, 1 examika.ru, 1 examinrush.com, 1 example.sc, 1 @@ -44117,6 +44354,7 @@ excelbroadcast.com, 1 exceleron.in, 1 excelglobalpartners.com, 1 excelhot.com, 1 +excelindonesia.com, 1 excelindonesia.id, 1 excelkursdirekt.eu, 1 excella.me, 1 @@ -44159,6 +44397,7 @@ exclusivebeautystudio.com.au, 1 exclusivebouncycastles.co.uk, 1 exclusivedesignz.com, 1 exclusivelyuk.co.uk, 1 +exclusiveresorts.com, 1 exclusivityglobal.tech, 0 excluzive.ml, 1 excoins.biz, 1 @@ -44242,6 +44481,7 @@ expandacatering.com, 1 expanddigital.media, 1 expandor.cz, 1 expansion-lidl.es, 1 +expansive.info, 1 expatads.com, 1 expatfinancial.com.hk, 1 expatinpoland.com, 1 @@ -44253,8 +44493,11 @@ expecting.com.br, 1 expeditiegrensland.nl, 0 expedition247.com.au, 1 expelliarmus.tk, 1 +expensify.com, 1 expensivejewelsest.ga, 1 exper.gr, 1 +experens.com, 1 +experience.com, 1 experienceoz.com.au, 1 experiment-626.tk, 1 experimentalguruji.cf, 1 @@ -44514,6 +44757,7 @@ eyktasarim.tk, 1 eylif.is, 1 eynio.com, 1 eyona.com, 1 +eyoo.mayfirst.org, 1 eyps.net, 1 eyrid.com, 1 eytosh.net, 1 @@ -44588,6 +44832,7 @@ f1ltr0.com, 1 f1minute.com, 1 f1nal-lap.be, 1 f1nalboss.de, 1 +f1nn.space, 1 f1pr.com, 1 f1report.net, 1 f1sh.de, 1 @@ -44597,6 +44842,7 @@ f1sport.tk, 1 f1tv-streams.live, 1 f1worldwide.tk, 1 f2h.io, 1 +f2pool.com, 1 f36533.com, 1 f3r.xyz, 1 f42.net, 1 @@ -44757,6 +45003,7 @@ faasviddy.nl, 1 faazmusic.com, 1 fabbro-roma.org, 1 fabbro.roma.it, 1 +fabconvert.com, 1 fabelturen.tk, 1 faber.org.ru, 0 faberoclub.tk, 1 @@ -44853,7 +45100,6 @@ facenews.ml, 1 facepainting.gr, 1 facepalmsecurity.com, 1 facerepo.com, 1 -faceresources.org, 1 facesdr.com, 1 facesnf.com, 1 faceup.dk, 1 @@ -45089,8 +45335,10 @@ falcona.io, 1 falconelectric.co.uk, 1 falconerny.gov, 1 falconfrag.com, 1 +falconicapital.com, 1 falconstap.tk, 1 falcoz.co, 1 +falcoz.net, 1 faldoria.de, 1 fale.io, 1 falegname-roma.it, 1 @@ -45173,6 +45421,7 @@ familledessaint.fr, 1 familleenfete.fr, 1 familleshilton.com, 1 family-clinic.tk, 1 +familyandpets.com, 1 familyclinicstl.com, 1 familyconventioners.ga, 1 familyd-c.com, 1 @@ -45209,6 +45458,7 @@ fanaticosdehectorlavoeenperu.tk, 1 fanatka.tk, 1 fanbike.de, 1 fanboi.ch, 1 +fanbolt.com, 1 fanclubblackhills.tk, 1 fanclubmariaciobanu.tk, 1 fanclubs.tk, 1 @@ -45244,6 +45494,7 @@ fans-darkangel.tk, 1 fans-lily-allen.tk, 1 fansale.de, 1 fanschic.com, 1 +fanshenzhiyi.com, 1 fansided.com, 1 fansta.jp, 1 fanstuff.ru, 1 @@ -45458,6 +45709,7 @@ fashionoutlets.tk, 1 fashionplus.ml, 1 fashionrecovery.co.nz, 1 fashionreview.ml, 1 +fashionsista.co, 1 fashionstylenews.tk, 1 fashionsuits.tk, 1 fashionsummer.tk, 1 @@ -46201,6 +46453,8 @@ fevolden.com, 1 fewo-hafeninsel-stralsund.de, 1 fewo-thueringer-wald.de, 1 fewo-wildrosenpfad.de, 1 +fewo.plus, 1 +fewo.reise, 1 fewo32.de, 1 fexopay.com, 1 fey-web.tk, 1 @@ -46293,6 +46547,7 @@ fiamtorino.eu, 1 fianna.tk, 1 fiasgo.dk, 1 fiataldivat.hu, 1 +fiberland.it, 1 fiberoptikz.tk, 1 fiberxl.com, 1 fibery.io, 1 @@ -46402,6 +46657,7 @@ fijnefeestdageneneengelukkignieuwjaar.nl, 1 fijnewoensdag.nl, 1 fika.com.vn, 1 fikaauto.com, 1 +fikain.com, 1 fiken.no, 1 fikirtasarim.net, 1 fikong.com, 1 @@ -46431,7 +46687,6 @@ filejet.io, 1 filek.ga, 1 fileon.com, 1 fileplanet.com, 1 -filepunks.com, 1 filequit.xyz, 1 files.com, 0 files.from-me.org, 1 @@ -46562,6 +46817,7 @@ financetwenty.com, 1 financewhile.com, 1 financewithcromulent.com, 1 financial-law.tk, 1 +financialexecutives.org, 1 financialfreedomaus.com, 1 financialhost.org, 1 financialmoveers.ga, 1 @@ -46750,7 +47006,6 @@ firebirdrangecookers.com, 1 firebounty.com, 1 fireboxfood.com, 1 firebrandchurch.com, 1 -firebugmusic.com, 1 firecask.com, 1 firechip.cc, 1 firechip.srl, 1 @@ -46835,6 +47090,7 @@ first.org, 1 first4it.com, 1 firstbaptistchurchofchrist.org, 1 firstbooks.ml, 1 +firstbus.co.uk, 1 firstcentralsavings.com, 1 firstchoicebouncycastlehire.co.uk, 1 firstchoicefriseur.at, 1 @@ -46848,6 +47104,7 @@ firstclinic.tk, 1 firstcoastsir.com, 1 firstcoastteaco.com, 1 firstcolonyengraving.com, 1 +firstcommunity.com, 1 firstcontact.cf, 1 firstderm.com, 1 firstdry.com.br, 1 @@ -46907,6 +47164,7 @@ fishexport.eu, 1 fishfive.top, 1 fishgen.no, 1 fishingworld.tk, 1 +fishingzone.bg, 1 fishlanestudios.com, 1 fishman.idv.tw, 1 fishoftheday.tv, 1 @@ -46987,6 +47245,7 @@ fittelo.cz, 1 fittingperfetto.it, 1 fitxxxsandy.net, 1 fitzsim.org, 1 +fius.de, 1 five-wyches-farm.co.uk, 1 five.sh, 1 fiveboosts.xyz, 1 @@ -47030,6 +47289,7 @@ fixpoint.co.at, 1 fixpoint.systems, 1 fixthetimeline.com, 1 fixthetimeline.org, 1 +fixturemundial.com, 1 fixverkaufen.de, 1 fixvoltage.ru, 1 fiyatgrafik.com, 1 @@ -47541,7 +47801,6 @@ flubiostudios.com, 1 flubiostudios.de, 1 flucky.xyz, 1 fluconazole.gq, 1 -fluenciamodas.com.br, 1 fluencytech.com, 1 fluessiggas.de, 1 fluff.im, 1 @@ -47552,10 +47811,12 @@ fluglektuere.com, 1 flugplatz-edvc.de, 1 flugplatzmanager.de, 1 flugsimulatorfrankfurt.com, 1 +fluidattacks.co, 1 fluidattacks.com, 1 fluidbb.co.uk, 1 fluidpicturesinc.com, 1 fluids.ac.uk, 1 +fluidsignal.com, 1 fluig.com, 1 fluitbeurt.nl, 1 flukestar.tk, 1 @@ -47689,6 +47950,7 @@ fnkr.net, 1 fnof.ch, 1 fnordserver.eu, 1 fnpro.eu, 1 +fnpvenues.com, 1 fnrs.nl, 1 fnscatania.tk, 1 foair.me, 1 @@ -47703,6 +47965,7 @@ focalpoint.tk, 1 focalpointvr.com, 1 focanamoda.com.br, 1 focanocliente.com.br, 1 +focusbet-api.com, 1 focusbet.cc, 1 focusbet.club, 1 focusbet.io, 1 @@ -47723,6 +47986,7 @@ foej.net, 1 foepwned.com, 1 foerderverein-horrheim.de, 1 fof-clan.tk, 1 +fogcreek.com, 1 foggi.cf, 1 foggi.ml, 1 foggiatoday.it, 1 @@ -47811,6 +48075,7 @@ fontnegar.ir, 1 fontocean.com, 1 fonts2u.com, 1 fonts4free.net, 1 +fontsinuse.com, 1 fonzone.it, 0 foo, 1 foo.fo, 1 @@ -47909,6 +48174,7 @@ foodnations.ga, 1 foodnature.ga, 1 foodnature.tk, 1 foodnight.ga, 1 +foodo.cz, 1 foodoffline.ga, 1 foodomega.ga, 1 foodonbook.com, 1 @@ -48045,6 +48311,7 @@ fordeetv.com, 1 fordlibrarymuseum.gov, 1 fordpartsgiant.com, 1 fordpartsprime.com, 1 +fordservicetraining.com, 1 fordshop.by, 0 fordtrac.com.br, 1 foreammatti.fi, 1 @@ -48091,6 +48358,7 @@ forex-site.com, 1 forex-trading-tutorial.tk, 1 forex-up.cf, 1 forex.ee, 1 +forexallday.com, 1 forexarby.com, 1 forexchef.de, 1 forexcity.cf, 1 @@ -48166,6 +48434,7 @@ formosus.de, 0 formotherrussia.tk, 1 forms.gov, 1 formsbyair.com, 1 +formsite.com, 1 formsmarts.com, 1 formsmarts.net, 1 formula-ot.ru, 1 @@ -48224,7 +48493,6 @@ fortabletoys.com, 1 fortatkinsonia.gov, 1 fortatkinsonwi.gov, 1 fortawesome.org, 1 -fortbertholddiabetes.com, 1 fortcollinsathletefactory.com, 1 fortcommunity.com, 1 fortdeposital.gov, 1 @@ -48326,6 +48594,7 @@ forvisualdesign.com, 0 forward-fly-fishing.ch, 0 forward-proxy.email, 1 forward.com, 0 +forwardadvantage.com, 1 forwardemail.net, 1 forwardfever.tk, 1 forwardfinancingest.ga, 1 @@ -48451,7 +48720,6 @@ foundmyself.com, 1 foundrehotels.com, 1 foundsounds.me, 1 fountainco.gov, 1 -fountainvalleyseniorcare.us, 1 fourashesgolfcentre.uk, 1 fourbrothers.tk, 1 fourcask.com, 1 @@ -48482,6 +48750,8 @@ fowlsmurf.net, 1 fowos.de, 1 fox-zulu.de, 1 fox.my, 0 +fox47news.com, 1 +fox4now.com, 1 foxandfish.be, 1 foxbenjaminfox.com, 1 foxbnc.co.uk, 1 @@ -48526,6 +48796,7 @@ fpaci.org, 1 fpalzira.es, 1 fpasca.com, 1 fpc.gov, 1 +fpcdn.io, 1 fpersona.com, 1 fpgamania.com, 1 fpgaretro.com, 1 @@ -48853,7 +49124,6 @@ frebib.co.uk, 1 frebib.com, 1 frebib.me, 1 frebib.net, 1 -fred-dresken.nl, 1 fred-latrace.com, 1 fred26.fr, 1 fredbarboo.cf, 1 @@ -48984,6 +49254,7 @@ freefridgeprogram.com.au, 1 freegame-mugen.jp, 1 freegutters.com, 1 freehdporn.tv, 1 +freehorseracingtv.com, 1 freehotline.ru, 1 freehqporno.com, 1 freeinet.cf, 1 @@ -49053,6 +49324,7 @@ freeradical.zone, 1 freereal.ml, 1 freerealincest.com, 1 freergform.org, 1 +freeride-dragobrat.com, 1 freertomorrow.com, 1 freerun.cn, 0 freeschool.cf, 1 @@ -49097,6 +49369,7 @@ freetsa.org, 1 freeuseporn.org, 1 freevisits.tk, 1 freewarez.org, 1 +freewayinsurance.com, 1 freewebh0st.tk, 1 freeweibo.com, 1 freewerkt.nl, 1 @@ -49126,9 +49399,9 @@ freifunk-in-solingen.de, 1 freifunk-lindlar.net, 1 freifunk-remscheid.de, 1 freiheitjetzt.com, 1 -freimeldungen.de, 1 freinetmiddenschool.gent, 1 freischaffende-architekten.de, 1 +freitas.org, 1 freitasm.com, 1 freitasul.com.br, 1 freitasul.io, 1 @@ -49191,6 +49464,7 @@ freshmail.com, 1 freshmans-pizza.de, 1 freshmusicsheets.com, 1 freshplus62.com, 1 +freshporno.net, 1 freshpounds.com, 1 freshproducemusic.tk, 1 freshseafood.in, 1 @@ -49429,6 +49703,7 @@ frugro.be, 1 fruit-farm.tk, 1 fruit.ga, 1 fruit.ml, 1 +fruitbouquets.com, 1 fruition.co.jp, 1 fruitlandmi.gov, 1 fruitlawers.ga, 1 @@ -49532,6 +49807,7 @@ ftprivacy.cloud, 1 ftptest.net, 1 ftrac.com.br, 1 ftrucks.com.au, 0 +ftth.eu.org, 1 ftv.re, 1 ftworthhousekeeper.com, 1 ftx.com, 1 @@ -49669,6 +49945,7 @@ fumerolles.ch, 0 fumify.tk, 1 fumilink.com, 1 fumonegliocchi.it, 1 +fumotousa.com, 1 fun-baby.ru, 1 fun-bounce.co.uk, 1 fun-club-35.com, 1 @@ -49823,7 +50100,6 @@ funny-rates.tk, 1 funny-wedding.ga, 1 funnyanimalvideos.ml, 1 funnybee.tk, 1 -funnybikini.com, 1 funnybubu.ro, 1 funnychristianjokes.tk, 1 funnycommercials.ga, 1 @@ -49899,6 +50175,7 @@ furnfurs.com, 1 furnishedproperty.com.au, 1 furniteco.com, 1 furniture-for-home.tk, 1 +furniture-warehouse.co.za, 1 furnitureconcept.co.uk, 1 furnitureforlife.com, 1 furnitureforlifeboulder.com, 1 @@ -49977,11 +50254,13 @@ futurageindia.com, 1 futurama-il.tk, 1 future-dance.tk, 1 futureaudiographics.com, 0 +futurecharcoal.space, 1 futurefive.asia, 1 futurefive.co.nz, 1 futurefive.com.au, 1 futureforward.coop, 1 futurefund.com, 1 +futurefund.gov.au, 1 futurefundapp.com, 1 futuregrowthva.com, 1 futurehack.io, 1 @@ -50266,7 +50545,6 @@ gafan.cf, 1 gaff-rig.co.uk, 1 gaflooring.com, 1 gafrecomex.com, 1 -gaga-debki.pl, 1 gaganenterprises.in, 1 gagarin.ga, 1 gagekroljic.com, 1 @@ -50327,6 +50605,7 @@ galavanmoskou.tk, 1 galaw.gov, 1 galax.tech, 1 galax.us, 1 +galaxialejana.com, 1 galaxieblog.com.my, 0 galaxit.ch, 1 galaxus.at, 1 @@ -50426,7 +50705,6 @@ gambitnash.co.uk, 1 gambitnash.com, 1 gambitprint.com, 1 gamblerhealing.com, 1 -gamblernd.com, 1 gamblersgaming.eu, 1 gamblerspick.com, 1 gambling-business.club, 1 @@ -50456,7 +50734,6 @@ gamebrott.com, 1 gamecarddelivery.com, 1 gamecdn.com, 0 gamechefpummarola.eu, 1 -gamechurch.de, 1 gameclimax.cf, 1 gameclimax.tk, 1 gameclue.jp, 1 @@ -50665,10 +50942,10 @@ ganodermatiendaonline.com, 1 gant.tk, 1 ganyouxuan.com, 1 ganzgraph.de, 1 -ganztagplus.de, 1 gao.rocks, 1 gao4.pw, 1 gaodebo.com, 1 +gaoice.top, 1 gaoinnovation.gov, 1 gaoinnovationlab.gov, 1 gaoinnovations.gov, 1 @@ -50847,6 +51124,7 @@ gatesstlouis.com, 1 gatestoaesgaard.tk, 1 gatewaybridal.com, 1 gatewaydentalinc.com, 1 +gatewayfurniture.com, 1 gatewayp.com, 1 gathegi.ga, 1 gatherling.com, 1 @@ -50983,6 +51261,7 @@ gcwatx.gov, 1 gcwcid1tx.gov, 1 gcxstudio.cn, 1 gd1214b.icu, 1 +gdacs.org, 1 gdax.com, 1 gddzqg.com, 1 gde-kupyt.ru, 1 @@ -51010,6 +51289,7 @@ geafworks.tk, 1 gealot.com, 1 geansunter.com, 1 gear-acquisition-syndrome.community, 1 +gear4music.fr, 1 gearallnews.com, 1 gearbot.rocks, 1 gearboxhero.com, 1 @@ -51264,6 +51544,7 @@ generalinsuranceservices.com, 1 generalliabilityinsure.com, 1 generalpsych.cf, 1 generalservice.eu, 1 +generalshale.com, 1 generalsync.com, 1 generaly.ga, 1 generateur-thot.fr, 1 @@ -51527,6 +51808,7 @@ georgemaschke.net, 1 georgemudie.com, 1 georgenad.duckdns.org, 1 georgepancescu.ro, 1 +georges-sadeler.com, 1 georges.nu, 1 georgesand.be, 1 georgeshobeika.cf, 1 @@ -51537,7 +51819,6 @@ georgewatson.me, 1 georgewbushlibrary.gov, 1 georgiaaccess.gov, 1 georgiaautoglass.net, 1 -georgiabonepc.com, 1 georgiacriminaldefense.com, 1 georgiaglassrepair.com, 1 georgiainfo.ga, 1 @@ -51704,6 +51985,7 @@ getawaycab.tk, 1 getawayline.com, 1 getbellhop.co, 1 getbestbooks.com, 1 +getbodysmart.com, 1 getbookked.com, 1 getbooks.co.il, 1 getbootstrap.com, 1 @@ -51728,6 +52010,7 @@ getcyber.org, 1 getdash.io, 1 getdeclutter.com, 1 getdinghy.com, 1 +getdirectcredit.com, 1 getdishnow.tk, 1 getdoges.tk, 1 getdone.club, 1 @@ -51756,7 +52039,6 @@ getgeek.io, 1 getgeek.no, 1 getgeek.nu, 1 getgeek.pl, 1 -getgeek.se, 1 gethdporn.com, 1 gethere.gq, 1 gethome.ru, 1 @@ -51817,7 +52099,6 @@ getrelish.com, 1 getresilience.org, 1 getsamegoal.com, 1 getscif.com, 1 -getsecure.nl, 1 getserm.com, 1 getserum.xyz, 1 getsession.org, 1 @@ -51829,6 +52110,7 @@ getsmartlife.in, 1 getsmartlook.com, 1 getsocreative.com, 1 getstat.net, 1 +getstream.io, 1 getsubs.net, 1 getsus.com, 1 getswadeshi.com, 1 @@ -51870,7 +52152,6 @@ geus-okna.eu, 1 gevelreinigingtiel.nl, 1 gevme.com, 1 gewasteelt.ga, 1 -gewel.io, 1 gewinn.tk, 1 gexobiz.tk, 1 geyduschek.be, 0 @@ -52017,6 +52298,7 @@ giac.org, 1 giacomopelagatti.it, 1 giakki.eu, 0 gialupa.tk, 1 +giamcanhieuqua.vn, 1 giancarlomarino.com, 1 giangma.tk, 1 giannakis.tk, 1 @@ -52035,6 +52317,7 @@ giantsquid.gq, 1 giantsquid.tk, 1 gianttree.de, 1 gianturl.net, 1 +giaohangtietkiem.vn, 1 giardinaggio.milano.it, 1 giardinaggio.napoli.it, 1 giardinaggio.roma.it, 1 @@ -52113,6 +52396,7 @@ gigagroup.cf, 1 giganet.tk, 1 gigantar.com, 1 gigantism.com, 1 +gigantron.com, 1 gigaone.pl, 1 gigarange.xyz, 1 gigasoft.tk, 1 @@ -52188,7 +52472,6 @@ gintonic.tk, 1 ginza-viola.com, 1 ginzaj.com, 1 gio-abbigliamento.it, 1 -giocheriamagic.ch, 1 giochistem.it, 1 giocolive.com, 1 gioielleriamolena.com, 1 @@ -52363,6 +52646,7 @@ gjspunk.de, 0 gjung.com, 1 gkbm.com, 1 gkconsultancy.tk, 1 +gkdforum.eu.org, 1 gkdk.se, 1 gkdworld.com, 1 gkdworld.xyz, 1 @@ -52506,7 +52790,6 @@ global-business-solutions.cf, 1 global-content.net, 1 global-electronic-music.tk, 1 global-factory.co.jp, 1 -global-free-classified-ads.com, 1 global-monitoring.com, 1 global-motherboard.com, 1 global-mt.ru, 1 @@ -52644,7 +52927,6 @@ glofox.com, 1 gloning.name, 1 glont.net, 1 gloomy.tk, 1 -gloomyspark.com, 1 glorenza.org, 1 gloria.tv, 1 glorycamrealty.com, 1 @@ -52669,6 +52951,7 @@ glovementor.com, 1 glowfic.com, 1 glowmedspaencino.com, 1 glpreparation.com, 1 +gls-spain.es, 1 glubbforum.de, 1 glue.tk, 1 gluechapter.ga, 1 @@ -52717,6 +53000,7 @@ gmgard.com, 1 gmgcyouth.org, 1 gmhostingservices.co.uk, 1 gmind.ovh, 1 +gmkdetailing.cz, 1 gml4d2.ml, 1 gmod.de, 1 gmopconsortium.org, 1 @@ -52870,6 +53154,7 @@ godsofhell.de, 1 godsowncountry.tk, 1 godsrollercoaster.co.uk, 1 godstoghosts.com, 1 +godsunchained.com, 1 godswila.be, 1 godswill.tk, 1 godzillaencastellano.tk, 1 @@ -52943,6 +53228,7 @@ goiymua.com, 1 goizalde.tk, 1 gojo.global, 1 gokazakhstan.com, 1 +gokhangumus.com, 1 gokhankesici.com, 1 gokkastenstip.nl, 1 gokmenguresci.com, 1 @@ -53018,6 +53304,7 @@ goldloeckchen159.net, 1 goldmancarpetcare.com, 1 goldminer.ga, 1 goldnbraces.com, 1 +goldoniclothing.com, 1 goldpreisfinder.at, 1 goldschmiede-suessenguth.de, 1 goldsilver.org.ua, 1 @@ -53117,6 +53404,7 @@ gonepal.com, 1 gongik.info, 1 gongjianwei.com, 1 gongjuhao.com, 1 +gonitro.com, 1 gonortheast.co.uk, 1 gonorthwest.co.uk, 1 gonumber.ga, 1 @@ -53134,6 +53422,8 @@ good4good.es, 1 gooday.life, 1 goodbits.tech, 1 goodbriar.com, 1 +goodcas.ca, 1 +goodcas.com, 1 goodcasinos.org, 1 gooddatingsites.ml, 1 goodday.finance, 1 @@ -53367,6 +53657,7 @@ gotovka.tk, 1 gotowebstore.com, 1 gotoxy.at, 1 gotrail.fr, 1 +gotravel.blog, 1 gotravel.hu, 1 gotravel.us, 1 gotravelmexico.com.mx, 1 @@ -53465,11 +53756,13 @@ gpltimes.org, 1 gplvilla.com, 1 gpm.ltd, 1 gpna.org, 1 +gpnotebook.com, 1 gpodev.gov, 1 gpolanco.com, 1 gpony.fr, 1 gppro.com, 0 gpremium.cl, 1 +gps-coordinates.net, 1 gps-fleettracking.ga, 1 gps-track-sys.info, 1 gps.com.br, 1 @@ -53544,6 +53837,7 @@ graetnewsnetwork.com, 1 graetreport.com, 1 graf-igor.ch, 1 graf.re, 1 +grafana.com, 1 grafcaps.com, 1 grafe.com, 1 grafenberg.tk, 1 @@ -53767,7 +54061,6 @@ gravirpro.ru, 1 gravitascreative.net, 1 gravitational.co, 1 gravitational.com, 1 -gravitco.com, 1 gravitlauncher.ml, 1 graviton.work, 1 gravity-inc.net, 1 @@ -53904,7 +54197,6 @@ greenface.it, 1 greenfever.pl, 1 greenfieldlaxwi.gov, 1 greenforum.tk, 1 -greenfy.de, 1 greengarden.tk, 1 greengates.co.uk, 1 greengo.shop.pl, 1 @@ -53996,7 +54288,6 @@ greghouse.tk, 1 gregmartyn.com, 1 gregmarziomedia.com, 1 gregmc.ru, 1 -gregmilton.com, 1 gregmilton.org, 1 gregmote.com, 1 grego.pt, 1 @@ -54148,6 +54439,7 @@ grizzenergygum.com, 1 grizzlead.com, 1 grizzlys.com, 1 grizzlys.tk, 1 +grm.com.co, 1 grnbank.com, 1 gro.life, 1 groaccess.com, 1 @@ -54317,6 +54609,7 @@ grundig.co.uk, 1 grundlage.com.ua, 1 grundlage.fi, 1 grundschule-mittelbuch.de, 1 +grundschulratgeber.de, 1 grundskoleboken.ga, 1 grundskoleboken.gq, 1 grundskoleboken.tk, 1 @@ -54433,6 +54726,7 @@ gtb-nsn.gov, 1 gtbeyes.com, 1 gtbgames.com, 1 gtbprivacy.com, 1 +gtc.com.gt, 1 gtcountymi.gov, 1 gtcprojects.com, 1 gtd.cloud, 1 @@ -54591,6 +54885,7 @@ guidograuer.ch, 1 guidopedia.ga, 1 guikemarijwielhandel.nl, 1 guild.xyz, 1 +guilded.gg, 1 guildgearscore.cf, 1 guildnet.tk, 1 guilfordct.gov, 1 @@ -54721,7 +55016,7 @@ gustarfsberg.gq, 1 gustarfsberg.tk, 1 gustavapp.com, 1 gustavo-lima.ml, 1 -gustavo.website, 1 +gustavo.website, 0 gustavomolina.com, 1 gustavovelasco.ml, 1 gustavscelmins.tk, 1 @@ -54776,6 +55071,7 @@ guzelresim.tk, 1 guzelsozlerim.tk, 1 guzelvideo.tk, 1 guzey.me, 1 +guzgu.me, 1 guzlewski.pl, 1 gv-kirchberg.ch, 1 gv-neumann.de, 1 @@ -54799,10 +55095,10 @@ gvvsicilia.tk, 1 gvwgroup.cloud, 1 gvwgroup.com, 1 gvwparts.com, 1 +gw-uks-app-test-coreapi-02.azurewebsites.net, 1 gw.fi, 1 gw.lu, 1 gw2efficiency.com, 1 -gw2zone.net, 0 gw66.cc, 0 gwbet99.cc, 1 gwen-lovecoach.com, 1 @@ -55032,7 +55328,6 @@ hackendoz.com, 1 hackengine.ga, 1 hackenkunjeleren.nl, 1 hackenturet.dk, 1 -hacker.club, 1 hacker.deals, 1 hacker.holiday, 1 hacker.im, 1 @@ -55191,6 +55486,7 @@ hairloss.com, 1 hairlossadvice.tk, 1 hairphoto.tk, 1 hairpins.tk, 1 +hairs.london, 1 hairsalon-wish.com, 1 hairstyles-salon.tk, 1 haislipcorp.com, 1 @@ -55232,6 +55528,7 @@ hakkariradyo.tk, 1 hakkasan.com, 1 hakkasannightclub.com, 1 hakon.lol, 1 +haku.farm, 1 haku.vn, 1 hakufarm.vn, 1 hakugin.me, 1 @@ -55393,6 +55690,8 @@ hand.community, 1 hand2h.com, 1 handballmania.tk, 1 handbrake.fr, 1 +handelsbanken.co.uk, 1 +handelsbanken.com, 1 handelsbanken.se, 1 handhockeyers.ga, 1 handhockeyest.ga, 1 @@ -55688,6 +55987,7 @@ hardwickvt.gov, 1 hardworm.tk, 1 hardy.bz, 1 hardyhaberland.com, 1 +hardzone.es, 1 harelmallac.com, 0 harem.tk, 1 harery.com, 1 @@ -55977,6 +56277,7 @@ hawkofgeorgia.com, 1 hawkon.dk, 1 hawkrovers.tk, 1 hawksguild.com, 0 +hawle-service.at, 1 hawler.tk, 1 hawo.academy, 1 hax.to, 1 @@ -56053,6 +56354,8 @@ hbvip.com, 1 hbweb.io, 1 hbxianghang.com, 0 hby.cx, 1 +hc-sc.gc.ca, 1 +hcahealthcare.co.uk, 1 hcaz.io, 1 hcbj.io, 1 hcc-s.de, 1 @@ -56140,6 +56443,7 @@ heaaart.com, 1 head-hunters.tk, 1 head.org, 1 head.ru, 1 +headbox.com, 1 heade.cf, 1 headforcloud.com, 1 headhuntercolombia.com, 1 @@ -56273,7 +56577,6 @@ healthdowntown.ga, 1 healthdraw.ga, 1 healtheagle.ga, 1 healtheffectsofasbestos.com, 1 -healthefoundation.eu, 1 healthekids.tk, 1 healthemden.tk, 1 healthequity.com, 1 @@ -56509,6 +56812,8 @@ hearingshofar.com, 1 hearingthecall.org, 1 hearkener.com, 1 heart-cartoons.tk, 1 +heart-valve-surgery.com, 1 +heart2heartcpr.com, 1 heartbeat24.de, 1 heartbomb.co.jp, 1 heartbound.wiki, 1 @@ -56661,6 +56966,7 @@ heiden-wir-helfen.de, 1 heidifuller.com, 1 heidihills.com, 1 heidirange.tk, 1 +heidisheroes.org, 1 heidiwoodgate.com, 1 heidns.cn, 1 heighton.com.au, 1 @@ -56979,7 +57285,9 @@ hentai.baby, 1 hentaigogo.com, 1 hentaimaster.net, 1 hentaipornography.com, 1 +hentairead.com, 1 hentairoulette.com, 1 +hentaishit.com, 1 hentaiworld.cc, 0 hentaiz.net, 1 hentaiz.pro, 1 @@ -57026,6 +57334,7 @@ herbsupplements.co.uk, 1 herbweb.net, 1 herbweb.org, 1 herbymiast.waw.pl, 1 +herculesslr.com, 1 herculex.fi, 1 herderradio.ml, 1 herdingcatshere.com, 1 @@ -57126,7 +57435,6 @@ hersheyfeis.com, 1 hersmartchoice.com, 1 herthaloewen.tk, 1 hertsbouncycastles.com, 1 -hertz.zone, 1 heru.tk, 1 herumixer.ga, 1 herus.net.pl, 1 @@ -57194,6 +57502,7 @@ hewavitharanamv.tk, 1 hewlettbayparkny.gov, 1 hex.nl, 1 hexagon-e.com, 1 +hexagonitsolutions.com, 1 hexalinq.com, 1 hexane.cf, 1 hexapt.com, 1 @@ -57209,6 +57518,7 @@ hexhu.net, 1 hexiaohu.cn, 0 hexid.me, 0 hexieshe.com, 1 +hexil.org, 1 hexis.hr, 1 hexo.ink, 0 hexo.io, 0 @@ -57231,6 +57541,7 @@ heybritney.tk, 1 heybyrdie.com, 1 heycrab.xyz, 1 heydorff.duckdns.org, 1 +heyfiesta.com, 1 heyfordpark.com, 1 heyfringe.com, 1 heyghost.io, 1 @@ -57336,6 +57647,7 @@ hiddenmalta.net, 1 hiddenpalms.tk, 1 hiddenredknights.tk, 1 hiddenrefuge.eu.org, 1 +hiddenremote.com, 1 hiddens.tk, 1 hiddout.com, 1 hide-in.cloud, 1 @@ -57530,10 +57842,12 @@ hinduworld.tk, 1 hindweb.tk, 1 hingehealth.com, 0 hingle.me, 1 +hinit.no, 1 hinkel.tk, 1 hinketsujyoshi-no-torisetsu.com, 1 hinksonlabs.com, 1 hino.moe, 1 +hinolab-m.com, 1 hinsdaledental.com, 1 hintergedanken.com, 0 hinterposemuckel.de, 1 @@ -57659,7 +57973,6 @@ hitchpin.com, 1 hitchunion.org, 1 hitech-news.ml, 1 hitech-zone.com, 0 -hitechgr.eu, 1 hiteco.com, 1 hitekcomputing.net, 1 hitel.tk, 1 @@ -57771,6 +58084,7 @@ hkmap.com, 1 hkmap.live, 1 hkmap.net, 1 hkno.it, 1 +hkp-usa.com, 1 hkr.at, 1 hks-projekt.at, 1 hks.pw, 1 @@ -58034,6 +58348,7 @@ holmenwi.gov, 1 holmes.ie, 1 holmeselectionsfl.gov, 1 holmesian.org, 1 +holmeslaw.ie, 1 holmesworkholding.co.uk, 1 holmium-laser.ru, 1 holmq.dk, 1 @@ -58076,7 +58391,6 @@ holytransaction.com, 1 holyubofficial.net, 1 holywhite.com, 1 holywr.it, 1 -holz.nu, 1 holzed.com, 1 holzschutz-holzbearbeitung.de, 1 holzspielzeug-shop.ch, 1 @@ -58337,6 +58651,7 @@ homepropertyinfo.tk, 1 homepropertynews.tk, 1 homepropertyunique.tk, 1 homepropertyworld.tk, 1 +homeprotech.com, 1 homequality.tk, 1 homerail.ga, 1 homerally.ga, 1 @@ -58406,7 +58721,6 @@ homunyan.com, 1 homyak.gq, 1 homyneeds.com, 1 homyremedies.com, 1 -honaragah.com, 1 honda2wheelersindia.com, 1 hondajoyclub.com, 1 hondapartsnow.com, 1 @@ -58571,7 +58885,6 @@ horochx.org, 0 horodance.dk, 1 horoscopimages.tk, 1 horoscopo.ml, 1 -horoscopos-amor.com, 0 horotoday.tk, 1 horozo.com, 1 horrell.ca, 1 @@ -58650,6 +58963,7 @@ hostalsanmarcos.tk, 1 hostarea51.com, 1 hostathome.fr, 1 hostatic.com, 1 +hostboxonline.com, 1 hostcloud.ml, 1 hostco.nl, 1 hostcoz.com, 1 @@ -58774,6 +59088,7 @@ hotel-waldheim.eu, 1 hotelallago.it, 1 hotelalpino.com, 1 hotelamgarnmarkt.at, 0 +hotelandplace.com, 1 hotelarevalo.com, 1 hotelastor.com, 1 hotelbiz.cf, 1 @@ -58842,6 +59157,7 @@ hotiii.ga, 1 hotiks.tk, 1 hotjuice.com, 1 hotlab.in, 1 +hotlinenum.com, 1 hotlinetohell.cf, 1 hotlistproducts.com, 0 hotlog.tk, 1 @@ -59049,6 +59365,7 @@ hozana.si, 0 hozdhaza.hu, 0 hozinga.de, 1 hozio.com, 1 +hozkomurcu.com, 1 hp-67.com, 1 hp-lexicon.org, 1 hp42.de, 1 @@ -59067,6 +59384,7 @@ hplace.com.br, 1 hpneo-conseil.com, 1 hps.digital, 1 hpsdigital.hu, 1 +hpsldc.com, 1 hpv-info.ee, 1 hpvtimmerwerken.nl, 1 hq77.ru, 1 @@ -59211,6 +59529,7 @@ hti.digital, 1 htikeagkyaw.com, 1 htl.wiki, 1 htlball.at, 1 +htm-partners.com, 1 htmanager.fr, 1 htmdom.com, 1 html-builder.tk, 1 @@ -59361,7 +59680,6 @@ hughfitzgerald.com, 1 hughtodd.ink, 1 hugi.is, 1 huglen.info, 1 -hugo.pro, 1 hugobarral.me, 1 hugochilemme.com, 1 hugodubois.ch, 1 @@ -59389,6 +59707,7 @@ huininga.nl, 1 huininga.org, 1 huipc.com, 1 huirongis.me, 1 +huis-en-tuin.be, 1 huisaandecosta.nl, 1 huisartsen-ict.nl, 1 huisartsenpraktijkheemraadssingel.nl, 1 @@ -59646,6 +59965,7 @@ hy1.com, 1 hyatt.com, 1 hyb7.com, 1 hybrid-crescent.tk, 1 +hybrid-hippie.com, 1 hybriden.cf, 1 hybriden.tk, 1 hybridiyhdistys.fi, 1 @@ -59782,6 +60102,7 @@ hytale.com, 1 hytzongxuan.com, 1 hytzongxuan.top, 1 hyunbridge.com, 1 +hyundaifinance.de, 1 hyundaipartsdeal.com, 1 hyundaisrilanka.lk, 1 hyunjoonkim.net, 1 @@ -59878,6 +60199,7 @@ i9s.in, 1 ia.net, 1 ia1000.com, 1 iaa.ee, 1 +iaata.info, 1 iab-diva.ru, 1 iabot.tk, 1 iacee.org, 1 @@ -59890,6 +60212,7 @@ iadttaveras.com, 1 iaeste.no, 1 iaeste.or.jp, 1 iaf.gov, 1 +iafd.com, 1 iahemobile.net, 1 iain.tech, 1 iainsimms.co.uk, 1 @@ -59990,6 +60313,7 @@ iberion.pl, 1 ibertel.eu, 1 ibestproduct.com, 0 ibetora.com, 1 +ibex.co, 1 ibexcore.com, 1 ibexmultiday.com, 1 ibexrepair.co.uk, 0 @@ -60002,6 +60326,7 @@ ibiz.mk, 1 ibizaautohuur.nl, 1 ibizads.tk, 1 ibizaluxuryachts.com, 1 +ibk.at, 1 iblackfriday.ro, 1 ibliss.digital, 0 iblog.pk, 1 @@ -60017,6 +60342,7 @@ ibon.org, 1 iboy1069.com, 0 ibpegasus.tk, 1 ibps-recruitment.in, 1 +ibpservice.de, 1 ibpsrecruitment.co.in, 1 ibq.life, 1 ibrainmedicine.org, 1 @@ -60053,6 +60379,7 @@ iccorporateinteriors.com.au, 1 iccupplatoon.tk, 1 icddd.pl, 1 icdp.org.ua, 1 +ice.org.uk, 1 icebat.dyndns.org, 1 iceberg.academy, 0 iceberg.cyou, 1 @@ -60068,7 +60395,7 @@ icecreamandclara.co.uk, 1 icecreamika.tk, 1 icecutethings.com, 1 icedox.ga, 1 -icedream.tech, 0 +icedream.tech, 1 icedterminal.com, 1 icedterminal.me, 1 icedude.tk, 1 @@ -60182,6 +60509,7 @@ ict.govt.nz, 1 ictbaneninnederland.nl, 1 ictbiz.com.au, 1 ictcareer.ch, 1 +ictfreak.nl, 1 ictinforensics.org, 1 ictkaisha.be, 1 ictmjc.com, 1 @@ -60537,7 +60865,6 @@ ignet.gov, 1 ignite.cz, 1 ignitedmindz.in, 1 ignitelocal.com, 1 -ignition.gg, 1 igocarwraps.com, 1 igor-hristenko.tk, 1 igor-usov.tk, 1 @@ -60592,6 +60919,7 @@ ihkk.net, 1 ihls.world, 0 ihmphila.org, 1 ihmsp.org, 1 +ihonk.com, 1 ihorizon.jp, 1 ihorvorotnov.com, 1 ihost.md, 1 @@ -60669,6 +60997,7 @@ ikall.net, 1 ikall.org, 1 ikama.cz, 1 ikari-san.tk, 1 +ikaria.com.gr, 1 ikaros.tk, 1 ikasgela.com, 1 ikazumitsu.tk, 1 @@ -60832,6 +61161,7 @@ illuxat.com, 1 illuzionclothing.com, 1 ilmaestro.net, 1 ilmainensanakirja.fi, 1 +ilmanifesto.it, 1 ilmataat.ee, 1 ilmcorp.com, 1 ilmiobusinessonline.it, 1 @@ -60922,6 +61252,7 @@ imagerecall.tk, 1 imagerive.ch, 0 imageshare.web.id, 1 imagesport.fr, 1 +imagetostl.com, 1 imageurs.com, 1 imagevillage.ir, 1 imageworld.tk, 1 @@ -61118,6 +61449,7 @@ imoxin.net, 1 impact-flash.com, 1 impact-lyon.fr, 1 impact-visual.tk, 1 +impact.com, 1 impact.health.nz, 1 impactartstudy.com, 1 impactdepth.com, 1 @@ -61126,6 +61458,7 @@ impactparcels.co.uk, 1 impactparcels.com, 1 impactpub.ch, 0 impakho.com, 1 +impalaparts.com, 1 impartesco.com, 1 impartner.com, 1 impas.se, 1 @@ -61169,7 +61502,6 @@ implosion.tk, 1 implude.com, 0 impns.org, 1 imponet.com.ar, 1 -imporcayu.cl, 1 import-shopping.de, 1 importanteducation.tk, 1 importeria.com, 1 @@ -61191,7 +61523,6 @@ imprendo.co, 1 imprendo.pro, 1 imprensaglobal.com.br, 1 imprensaglobal.org, 1 -imprenta-es.com, 1 impresa-di-pulizie.milano.it, 1 impresa-di-pulizie.org, 1 impresa-pulizie.it, 1 @@ -61290,6 +61621,7 @@ inbox.google.com, 1 inboxceo.com, 1 inboxen.org, 1 inboxsms.tk, 1 +inbrain-api-v2.azurewebsites.net, 1 inbrand.agency, 1 incarceratedwombats.com, 1 incarter.ga, 1 @@ -61582,6 +61914,7 @@ infinitybas.com, 1 infinitybc.se, 1 infinitybooksindia.in, 1 infinitybots.gg, 1 +infinityels.com, 1 infinityengine.org, 1 infinityepos.co.uk, 1 infinityfaces.tk, 1 @@ -61715,6 +62048,7 @@ informat.ga, 1 informaticapremium.com, 0 informaticien.tk, 1 informaticmousset.tk, 1 +informatico.pt, 1 informaticoalicante.tk, 1 informaticolamancha.tk, 1 informatiger.net, 1 @@ -62028,6 +62362,7 @@ innohb.com, 1 innolabfribourg.ch, 1 innopharmaeducation.com, 1 innopharmatechnology.com, 1 +innoraft.com, 1 innotec.security, 1 innoteil.com, 1 innoteknology.com, 1 @@ -62148,7 +62483,6 @@ insideevs.com.tr, 1 insideevs.de, 1 insideevs.fr, 1 insideevs.ru, 1 -insidegroup.cl, 1 insidehook.com, 1 insideofgaming.de, 1 insideperu.tk, 1 @@ -62354,6 +62688,7 @@ intelalumni.org, 1 intelghost.com, 1 intelhost.com.br, 1 intelhost.net, 1 +intelics.com.au, 1 intelius.cf, 1 intellar.com, 1 intelldynamics.com, 1 @@ -62414,9 +62749,12 @@ intercom-attachments-1.com, 1 intercom-attachments-5.com, 1 intercom-attachments-6.com, 1 intercom-attachments-9.com, 1 +intercom-attachments.com, 1 +intercom-mail.com, 1 intercom-sheets.com, 1 intercom.com, 1 intercom.io, 1 +intercomcdn.com, 1 intercomp-cbu.ru, 1 intercomunicador.org, 1 intercomunicadores.org, 1 @@ -62589,6 +62927,7 @@ intim-ru.tk, 1 intima-mente.com, 1 intimastoreatacado.com.br, 1 intimidad.tk, 1 +intimmix.ru, 1 intimznakomstvo.tk, 1 intmissioncenter.org, 0 into-the-mountain.com, 1 @@ -62673,8 +63012,10 @@ inventortesters.ga, 1 inventortestest.ga, 1 inventoryimages.co.uk, 1 inventos.tk, 1 +inventoseinventores.com, 1 inventtheworld.com.au, 1 inventum.cloud, 1 +inventum.es, 0 inverness.gov, 1 inversegravity.net, 1 inverselink-user-content.com, 1 @@ -62713,6 +63054,7 @@ investinweed.com, 0 investion.cf, 1 investir.ch, 0 investirdanslancien.fr, 1 +investire.biz, 1 investirenisrael.fr, 1 investirfazbem.com.br, 1 investirsolidaire.fr, 1 @@ -62832,6 +63174,7 @@ iop.intuit.com, 1 iopex.com, 1 iopool.us, 1 iorgroup.org, 1 +iorn.org, 1 ios.fm, 1 ios11018.com, 1 iosartstudios.gr, 1 @@ -62939,6 +63282,7 @@ iplog.info, 0 iplookup.tk, 1 ipmatic.ga, 1 ipmotion.ca, 1 +ipmscoutek.com, 0 ipnetworking.net, 1 ipnoze.com, 1 ipnrt.net, 1 @@ -63006,6 +63350,7 @@ iqos.com.ua, 1 iqos.ml, 1 iqphone.cf, 1 iqphone.ga, 1 +iqredirect.com, 1 iqreview.ru, 1 iqsecurity.eu, 1 iqsmn.org, 1 @@ -63058,6 +63403,7 @@ irayo.net, 1 irbe.ch, 1 irbisweb.com, 0 irc-results.com, 1 +irchat.cn, 1 ircica.org, 1 ircmett.de, 1 ircnow.org, 0 @@ -63226,6 +63572,7 @@ isab.run, 1 isab.top, 1 isabelaflores.com, 1 isabelcaviedes.com, 1 +isabelladeroldao.com.br, 1 isabellainlove.com, 1 isabellavandijk.nl, 1 isabelle-delannoy.com, 1 @@ -63376,6 +63723,7 @@ isn.education, 1 iso.fr, 1 iso27001.dk, 1 iso27032.com, 1 +isoauditr.com, 1 isobook.ml, 1 isofartak.com, 1 isognattori.com, 1 @@ -63444,6 +63792,7 @@ isreedyinthe.us, 1 isreedyintheuk.com, 1 issa.org.pl, 0 issaias.net, 0 +issaquah.cam, 1 issasfrissa.se, 1 isscouncil.com, 1 isseenterprises.com, 1 @@ -63557,6 +63906,7 @@ it-zt.at, 1 it.com.eg, 0 it.search.yahoo.com, 0 it1b.com, 1 +it4sure.nl, 1 it76.tk, 1 it82.com, 1 it9.bar, 1 @@ -63569,6 +63919,7 @@ itaja.com, 1 ital-gamma.be, 0 italbavaro.com, 1 italentado.ml, 1 +italia-facile.ru, 1 italia-store.com, 1 italiachegioca.com, 1 italiale.tk, 1 @@ -63630,6 +63981,7 @@ itcoolie.in, 1 itcreative.ro, 1 itcs.services, 1 itcyber.pl, 1 +itdaan.com, 0 itdashboard.gov, 1 itdata.tk, 1 itdoneproperly.com, 1 @@ -63722,6 +64074,7 @@ itpol.dk, 1 itpro-mg.de, 1 itpro.ua, 1 itradeaims.net, 1 +itradenetwork.com, 1 itraffic.cf, 1 itraffic.tk, 1 itraincalisthenic.com, 1 @@ -63767,6 +64120,7 @@ itseovn.com, 1 itservis.org, 1 itsevident.com, 1 itsforu.de, 1 +itsgottabedark.com, 1 itsgreener.com, 1 itshamradio.com, 1 itshka.rv.ua, 1 @@ -63954,6 +64308,7 @@ ix.run, 1 ix8.ru, 0 ixiatiao.com, 1 ixit.cz, 1 +ixn.com, 1 ixplayer.com, 1 ixquick-proxy.com, 1 ixquick.co.uk, 1 @@ -64277,6 +64632,7 @@ jainmantras.com, 1 jaion.ml, 1 jaion.tech, 1 jaion.xyz, 1 +jairbehr.com.br, 0 jairoenfrancien.tk, 1 jaisa.in, 1 jaisiam.co.th, 1 @@ -64407,6 +64763,7 @@ jamiemagee.co.uk, 1 jamiemagee.dk, 1 jamiematthews.ml, 1 jamiepleasants.com, 1 +jamiesnape.io, 1 jamieweb.net, 1 jamjestsimon.pl, 1 jammucake.com, 1 @@ -64812,6 +65169,7 @@ jcmo.gov, 1 jcmunz.com, 1 jcontspoord.nl, 1 jcor.me, 0 +jcoscia.com, 1 jcphotography.dk, 1 jcra.net, 1 jcrhcdwy.gov, 1 @@ -64876,7 +65234,6 @@ jeannelucienne.fr, 1 jeanneret-combustibles.ch, 0 jeanniegraefe.tk, 1 jeannotbel.tk, 1 -jeanphilippe.io, 1 jeans-butik.tk, 1 jeans-moda.tk, 1 jeans-shopping.tk, 1 @@ -64988,6 +65345,7 @@ jelmoli-shop.ch, 1 jelmyto.com, 1 jelo.tk, 1 jelobox.tk, 1 +jelocalise.fr, 1 jem.gov, 1 jem.style, 1 jembatankarir.com, 1 @@ -65202,6 +65560,7 @@ jewelleryoutlook.com, 1 jewelleryrack.com, 1 jewelry-directories.tk, 1 jewelrycoverers.ga, 1 +jewishboyscouts.com, 1 jewishinseattle.org, 1 jewishjourneys.org, 1 jewishmusic.tk, 1 @@ -65297,6 +65656,7 @@ jiguang.com, 1 jigyoushoukei.co.jp, 1 jiheng.tk, 1 jiid.ga, 1 +jiji.co.ci, 1 jiji.co.ke, 1 jiji.co.rw, 1 jiji.co.tz, 1 @@ -65304,6 +65664,7 @@ jiji.com.et, 1 jiji.com.gh, 1 jiji.ke, 1 jiji.ng, 1 +jiji.sn, 1 jiji.ug, 1 jijistatic.com, 1 jikarentalcar.com, 1 @@ -65486,6 +65847,7 @@ jmorahan.net, 1 jmp.chat, 1 jmpb.hu, 1 jms8.net, 1 +jmservices.pro, 1 jmsjms.cc, 1 jmsjms.me, 1 jmsjms.org, 1 @@ -65769,6 +66131,7 @@ johutha.ch, 1 joi-bangla.tk, 1 joi-dhl.ch, 0 joifur.com, 1 +join.com, 1 joinamericacorps.gov, 1 joinamericorps.gov, 1 joincahoot.com, 1 @@ -65809,7 +66172,6 @@ joliettech.com, 1 jolinebrussel.nl, 1 jollausers.de, 1 jolle.io, 1 -jolliffeinstitute.com, 1 jollyfun.tk, 1 jollygoodspudz.ca, 1 jollykidswobbleworld.co.uk, 1 @@ -65946,6 +66308,7 @@ jordandevelopment.com, 1 jordanhamilton.me, 1 jordankmportal.com, 1 jordanmetal.tk, 1 +jordanmlu.nl, 1 jordannight.net, 1 jordanp.engineer, 1 jordanprice.ml, 1 @@ -66023,6 +66386,7 @@ josephziegler.com, 0 joserafaelsosa.tk, 1 joserecetas.com, 1 josericaurte.com, 1 +josestiller.de, 1 joshanders.com, 1 joshdiamant.com, 1 joshfoley.co.uk, 1 @@ -66042,6 +66406,7 @@ joshrickert.com, 1 joshruppe.com, 1 joshs.photos, 1 joshschmelzle.com, 1 +joshthewanderer.com, 1 joshu.am, 1 joshua-kuepper.de, 1 joshuadiamant.com, 1 @@ -66058,6 +66423,7 @@ josmith.co.za, 1 joso.tk, 1 josoansi.de, 1 josprox.com, 1 +josprox.ovh, 1 josueteconecta.mx, 1 josups.cyou, 1 josvir.sytes.net, 1 @@ -66082,6 +66448,7 @@ journalism-schools.com, 1 journalism.org, 1 journaliste.tk, 1 journalisticapp.com, 1 +journalstar.com, 1 journeedesfilles.gc.ca, 1 journeyfriday.rocks, 1 journeying.ca, 1 @@ -66183,6 +66550,8 @@ jpst.it, 1 jpvermogensregie.com, 1 jqlin.com, 1 jqlsql.com, 1 +jqpowerwash.com, 1 +jqrecycling.com, 1 jquery.wtf, 1 jr-signalisation.fr, 1 jr5devdoug.xyz, 1 @@ -66254,6 +66623,7 @@ jsme.cz, 1 jsme.fun, 1 jsnfwlr.com, 1 jsnfwlr.io, 1 +jso-crescendo.ch, 1 json.download, 1 json.id, 1 jsonbeautifier.net, 1 @@ -66435,6 +66805,7 @@ julienstalder.ch, 0 julientartarin.com, 1 julier.com.br, 1 juliesararealtor.com, 1 +julieskitchensf.com, 1 julieskyhigh.net, 1 juliet-squad.tk, 1 julietous.be, 1 @@ -66484,6 +66855,7 @@ jumpman-iphone-design.de, 1 jumpnplay.co.uk, 1 jumpnplay.com.au, 1 jumprun.com, 1 +jumpseller.com, 1 jun-e-jay.com, 1 junbread.win, 1 junco.nl, 1 @@ -66584,6 +66956,7 @@ just-webdesign-berlin.de, 1 just3preety.com, 1 just6f.com, 1 justacoupleofclarkes.co.uk, 1 +justaisk.com, 1 justanorganizedhome.com, 1 justanothercompany.name, 1 justanotherday.tk, 1 @@ -66606,6 +66979,7 @@ justgalak.org, 1 justgamblers.com, 1 justgardenoffices.co.uk, 1 justgayvideo.com, 1 +justgiving.com, 1 justice-rains-from-above.tk, 1 justice.gov, 1 justiceforjameela.org, 1 @@ -66624,6 +66998,7 @@ justinstandring.com, 1 justjavajobs.co.za, 1 justkidsdental.com, 1 justknigi.gq, 1 +justknit.shop, 1 justlovecoffeefranchise.com, 1 justmade.com.br, 1 justmensgloves.com, 1 @@ -66725,6 +67100,7 @@ jykinturah.io, 1 jyllandsakvariet.dk, 1 jyoba.co.jp, 1 jyoti-fairworks.org, 1 +jyprj.com, 1 jyrilaitinen.fi, 1 jyvaskylantykkimies.fi, 1 jz.lc, 1 @@ -66981,11 +67357,13 @@ kadalove.net, 1 kadenafss.com, 1 kadenba.ch, 1 kadence.tk, 1 +kadenhealth.com, 1 kadet.net.ru, 1 kadett-c-club-limburg.tk, 1 kadhal-kirukkan.tk, 1 kadhambam.in, 1 kadidak.com, 1 +kadifeli.com, 1 kadima.co.il, 1 kadinhaber.tk, 1 kadinsaglikhaber.tk, 1 @@ -67024,6 +67402,7 @@ kagomesashi.tk, 1 kagutech.com, 1 kaha.co.id, 1 kahane.org, 1 +kahoot.it, 1 kahvakiekkotalkoot.fi, 1 kai-justin.de, 1 kai-ratzeburg.de, 1 @@ -67039,6 +67418,7 @@ kaijo-physics-club.work, 1 kaik.io, 1 kaika-facilitymanagement.de, 1 kaikei7.com, 1 +kaikrups.com, 1 kaileymslusser.com, 0 kaimassagechairs.com, 1 kaimi.io, 1 @@ -67172,6 +67552,7 @@ kalohan.tk, 1 kaloix.de, 1 kalolina.farm, 0 kalombo.ru, 1 +kalompaturi.com, 1 kalpavriksh.org, 1 kalsa.ga, 1 kalsbouncies.com, 1 @@ -67643,6 +68024,7 @@ katja-bjoern.de, 1 katja-nikolic-design.de, 1 katjapratschke.de, 1 katka.info, 1 +katnip.it, 1 katnunn.co.uk, 1 kato-yane.com, 1 katoikos.world, 1 @@ -67705,6 +68087,7 @@ kawaiiku.de, 1 kawamura-inc.jp, 1 kawasakipartsonline.co.uk, 1 kawayii.com, 1 +kawigraphics.com, 1 kay.la, 1 kay.moe, 1 kayakaventura.tk, 1 @@ -67835,6 +68218,7 @@ kde-je-skladem.cz, 1 kdex.de, 1 kdistech.nz, 1 kdl-group.pl, 1 +kdo-vola.cz, 1 kdproduction.cz, 1 kdramaholic.com, 1 kdrive.tk, 1 @@ -67959,9 +68343,11 @@ kejpop.pl, 1 keka.org, 1 kekarimi.com, 1 keke-shop.ch, 1 +keke125.com, 1 kekku.li, 0 kekoskee.gov, 1 keksi.io, 1 +kektime.com, 1 kekz.org, 1 kela.jp, 1 kelamanproduction.tk, 1 @@ -68012,7 +68398,6 @@ kellyvoice.tk, 1 kellywebcam.tk, 1 kelm.me, 1 kelp.agency, 1 -kelprof.com, 1 kelsa.io, 0 kelsall39.com, 1 kelteks.com, 1 @@ -68136,7 +68521,6 @@ kerb.com, 1 kerbin.org, 1 kercovaparty.tk, 1 kerebro.com, 1 -kerforhome.com, 0 keridos.de, 1 kerijacoby.com, 1 kerimusta.com, 1 @@ -68185,7 +68569,6 @@ keshav.cc, 1 kesifasya.com, 1 keskeces.com, 1 keskikorpimotorsport.fi, 0 -kessawear.com, 1 kessel-runners.com, 1 kesselrun.goip.de, 1 kesslerandsons.com, 1 @@ -68300,6 +68683,7 @@ keyphotojs.cf, 1 keys.fedoraproject.org, 1 keyscore.me, 1 keyserver.sexy, 0 +keysix.com, 1 keysmedspa.com, 1 keysofart.com, 1 keysso.net, 1 @@ -68412,6 +68796,7 @@ khouryalexandre.com, 0 khoxuongchothuegiare.vn, 1 khramtsov.org, 1 khristov.com, 1 +khronos.org, 1 khs1994.com, 1 khslaw.com, 1 khste-ceciliamoorsel.tk, 1 @@ -68528,7 +68913,7 @@ kienhuon.com, 1 kienlen.org, 1 kientrucnamcuong.vn, 1 kienviethung.com, 1 -kieran-mcguire.uk, 0 +kieran-mcguire.uk, 1 kieran.de, 1 kieran.ie, 1 kieranjones.uk, 1 @@ -68537,7 +68922,7 @@ kieranweightman.me, 1 kieronbartsch.de, 1 kierweb.co.uk, 1 kiesjeplek.nl, 1 -kiesmedia.com, 1 +kiesmedia.com, 0 kiesuwarbeidsrechtadvocaat.nl, 1 kiesuwkerstkaart.nl, 1 kietblog.tk, 1 @@ -68926,6 +69311,7 @@ kistipro.tk, 1 kisulki.tk, 1 kisumuterraceapartments.tk, 1 kisvasut.tk, 1 +kisytech.fr, 1 kita-freie-schule.de, 1 kita-sun.com, 1 kitabat.com, 1 @@ -69274,6 +69660,7 @@ kn40la.com, 1 kn4ivj.com, 1 kn4ola.com, 1 kn6olc.org, 1 +knab-networks.com, 1 knabden.co.za, 1 knabstrup-autoophug.dk, 1 knallfrosch.ddnss.de, 1 @@ -69510,6 +69897,7 @@ kokensupport.com, 1 koketteriet.se, 1 kokica.si, 1 koko.news, 1 +koko.today, 1 kokoiroworks.com, 1 kokomo.cloud, 1 kokona.ch, 1 @@ -69690,6 +70078,7 @@ konsultaciya-astrologa.ga, 1 konsultaciya-astrologa.gq, 1 konsultaciya-astrologa.ml, 1 konsultaciya-astrologa.tk, 1 +konsultacje-elektryczne.pl, 1 konsultation.nu, 1 konsultermedipv6.se, 1 kontabilitet.tk, 1 @@ -69870,6 +70259,7 @@ kosturk.ru, 1 kostya.ws, 1 kostyumi.tk, 1 kosuzu.moe, 1 +koszmetics.com, 1 kot.gay, 1 kotaartsklan.com, 1 kotabogor.org, 1 @@ -69975,6 +70365,7 @@ kra2laiz.eu, 1 kraakgeluiden.tk, 1 krabathor.tk, 1 krabbelsisters.tk, 1 +krabbit.tw, 1 krabo.nl, 1 krachtinverbinding.nl, 1 kradalby.no, 1 @@ -70112,6 +70503,7 @@ krillz.se, 1 krilotek.com, 1 krilov.tk, 1 krimikiosk.de, 1 +krimisound.it, 1 krimzeta.com, 1 krinetzki.de, 0 kringla.xyz, 1 @@ -70160,6 +70552,7 @@ kristyvonkashyyyk.net, 1 kriswauters.tk, 1 kritik.com.br, 1 kritikawebu.cz, 1 +kritikos.io, 1 kriyayoga.fr, 1 kriyayoga.mx, 1 krizevci.info, 1 @@ -70222,7 +70615,6 @@ krumpf.de, 1 kruno.ooo, 1 krup.com.ua, 1 krupa.net.pl, 0 -kruselegal.com.au, 0 krusesec.com, 1 krusic22.com, 1 krustyland.net, 1 @@ -70625,7 +71017,6 @@ kurirplus.tk, 1 kuritsa.tk, 1 kurnia.tk, 1 kurniadwin.to, 1 -kuroha.co.uk, 1 kuroinu.jp, 1 kuroisalva.xyz, 0 kuroit.com, 1 @@ -70761,6 +71152,7 @@ kx197.com, 1 kxah35.com, 1 kxnrl.com, 1 ky.rs, 1 +kyaba-kura.jp, 1 kyango.com, 1 kyanjames.com, 1 kyaru.net, 1 @@ -70819,6 +71211,7 @@ kylinseating.in, 1 kylttimax.fi, 1 kylvaja.fi, 1 kymcojp.com, 1 +kymta.com, 1 kyn.be, 1 kynaston.org.uk, 1 kynastonwedding.co.uk, 1 @@ -71186,6 +71579,7 @@ lagrollabz.it, 1 lagrotta.pizza, 1 lagrottabergenopzoom.nl, 1 lagroza.tk, 1 +lagsoftware.com, 0 laguiadeliman.com.ar, 1 laguiadelpapa.com, 1 laguinguette.fr, 0 @@ -71605,6 +71999,7 @@ laptopworld.dk, 1 lapulgaflamenco.com, 1 laqira.io, 1 laqueuedevache.be, 1 +laquintaresort.com, 1 lara-eu.org, 1 larabergmann.de, 1 laracode.eu, 1 @@ -71654,6 +72049,7 @@ laromlab.tk, 1 larondenet.tk, 1 larondinedisinfestazione.com, 1 larosadelosvientos.tk, 1 +larotative.info, 1 larousse-edu.fr, 1 larpkalender.ch, 1 larptreff.de, 1 @@ -71755,6 +72151,7 @@ lastkaj14.tk, 1 lastlowtest.tk, 1 lastmile.ml, 1 lastmohicans.tk, 1 +lastnighton.com, 1 lastorder.icu, 1 lastorderguild.tk, 1 lastorders.tk, 1 @@ -71890,6 +72287,7 @@ laurencesmits.com, 0 laurenell.com, 1 laurenleesmith.tk, 1 laurenlobue.com, 1 +laurenslatest.com, 1 laurensvanderblom.nl, 1 laurentfinance.com, 1 lauresta.lt, 1 @@ -72235,6 +72633,7 @@ ldx.design, 1 le-bar.org, 1 le-cannabis.de, 1 le-caprice.co.uk, 1 +le-clos-st-loup.fr, 1 le-club.co, 1 le-controle-parental.fr, 1 le-creux-du-van.ch, 0 @@ -72344,6 +72743,7 @@ learningman.top, 1 learningsolution.tk, 1 learnk12.org, 1 learnlux.com, 1 +learnosity.com, 1 learnpedestal.com, 1 learnpianogreece.com, 1 learnpine.com, 1 @@ -72444,6 +72844,7 @@ lechiennoir.net, 1 lechite.ga, 1 lechocolatier.com, 1 lechompenchaine.fr, 1 +lechrismaran.com, 1 lechuanginu.ru, 1 lechuck.tk, 1 lecken.tk, 1 @@ -72553,7 +72954,6 @@ legacygame.ga, 1 legacygame.gq, 1 legacyofkain.tk, 1 legacysoft.ml, 1 -legacyumc.com, 1 legacyumc.org, 1 legadental.com, 1 legadosindumentaria.com.ar, 1 @@ -72792,6 +73192,7 @@ lemilane.it, 1 leminhduong.com, 1 lemitti.com, 1 lemler.family, 1 +lemmamedia.com, 1 lemmy.ca, 0 lemni.top, 1 lemoine.at, 1 @@ -72958,6 +73359,7 @@ leppis-it.de, 1 lepraconsf.com, 1 leprado.com, 1 leprekon.tk, 1 +lepressoir-info.org, 1 leps.fr, 1 lepsos.com, 0 leptotrichia.tk, 1 @@ -73296,6 +73698,7 @@ lhasaapso.com.br, 1 lhconsult.tk, 0 lheinrich.org, 1 lhffinanceira.online, 1 +lhm.de, 1 lhost.su, 1 lhp-creation.com, 1 lhp-creation.fr, 1 @@ -73335,6 +73738,7 @@ lib.pm, 1 lib64.net, 1 libbitcoin.org, 1 libble.eu, 1 +libcal.net, 1 libcip.org, 1 libcmodbus.org, 1 libcrc.org, 1 @@ -73371,6 +73775,7 @@ libertyga.tk, 1 libertygrovewi.gov, 1 libertylakewapd.gov, 1 libertyland.tk, 1 +libertyreverse.com, 1 libertytereconoce.com, 1 libertyvault.us, 1 libertywines.co.uk, 0 @@ -73470,7 +73875,6 @@ lichttechnik-tumler.com, 1 lichtval.tk, 1 licia-music.com, 1 lickingcounty.gov, 1 -lickthesalt.com, 1 licloud.homeip.net, 1 licx.cf, 1 licx.ml, 1 @@ -73537,6 +73941,7 @@ life-tec.tk, 1 life-time.nl, 1 life24korea.com, 1 life29.com, 1 +life360.com, 1 life4net.tk, 1 lifeandhealthtips.tk, 1 lifeandhowtosurviveit.com, 1 @@ -73822,7 +74227,6 @@ limitshareers.ga, 1 limitshareest.ga, 1 limiturls.ga, 1 limnt.cn, 1 -limo.pl, 1 limo.sh, 1 limoairporttoronto.net, 1 limoforsale.com, 1 @@ -73915,6 +74319,7 @@ lineadmins.com, 1 lineaesse5.it, 1 lineageos.org, 1 lineamortal.tk, 1 +linearb.io, 1 linearmap.com, 1 linebooks.cf, 1 linedance.tk, 1 @@ -73952,6 +74357,7 @@ link-man.net, 1 link-medital.com, 1 link-net.ga, 1 link-sanitizer.com, 1 +link.co, 1 link24.tk, 1 link26.tk, 1 link2link.tk, 1 @@ -74112,7 +74518,6 @@ linuxlatbot.tk, 1 linuxlounge.net, 1 linuxmalta.tk, 1 linuxnetflow.com, 1 -linuxnews.de, 1 linuxonline.tk, 1 linuxsecurity.expert, 1 linuxtech.ru, 1 @@ -74232,7 +74637,6 @@ listening-skills.eu, 1 lister-kirchweg.de, 1 listiclepal.com, 1 listim.com, 1 -listing-here.com, 0 listing.gq, 1 listisima.com, 1 listkeeper.io, 1 @@ -74394,7 +74798,6 @@ liveatliveoakapts.com, 1 livebandphotos.com, 1 livebarmenu.com, 1 livebestbooks.gq, 1 -livebetterwith.com, 1 livebookmark.ml, 1 livebox-mag.fr, 1 livebythesun.de, 1 @@ -74453,6 +74856,7 @@ livepaperhelp.com, 1 liveperformersmeeting.net, 1 livepl.eu, 1 liveradiocanada.com, 1 +liveradios.online, 1 liverado.com, 1 liverano.com, 1 liveregistratie.nl, 1 @@ -74469,6 +74873,7 @@ liveskype.com, 1 livesportts.ml, 1 livestone.tk, 1 livestrana.tk, 1 +livestreamtvbox.com, 1 livesure.com, 1 liveteachers.in, 1 livethereservega.com, 1 @@ -74954,6 +75359,7 @@ loichot.ch, 0 loiit.ga, 1 loipinelplus.com, 1 loire-en-bateau.fr, 1 +loirevalley.co, 1 lois.cf, 1 loisircreatif.net, 0 loisirsdouville.com, 1 @@ -74999,6 +75405,7 @@ lojavirtualinfopaper.com.br, 1 lojavisamed.com.br, 1 lojavivacortinas.com.br, 1 lojaxo.com.br, 1 +lojistaguarani.com.br, 1 lojix.com, 0 lojj.pt, 1 lokal-speisen.de, 1 @@ -75287,6 +75694,7 @@ loremipsum.info, 1 lorena-salido.tk, 1 lorenadumitrascu.ro, 1 lorengraff.net, 1 +lorenstudioo.com, 1 lorenz-cloud.eu, 1 lorenz-hundler.co, 1 lorenzgoossens.be, 1 @@ -75626,6 +76034,7 @@ lphispano.tk, 1 lpiem.fr, 1 lpkosovo.tk, 1 lpmkonji.cf, 1 +lpnm.us, 1 lprr.fr, 1 lps.in.ua, 1 lpt-nebreziny.cz, 1 @@ -75640,6 +76049,7 @@ lrc.cn, 1 lrcr.ch, 0 lrdo.net, 1 lriese.ch, 1 +lrn.com, 1 lroc.com.au, 1 lrs.lt, 1 lrssystems.com, 1 @@ -76026,6 +76436,7 @@ lunascope.ru, 1 lunasqu.ee, 1 lunastrail.com, 1 lunaticminx.com, 1 +luncfreak.com, 1 lunchrush.com, 1 lundlist.net, 1 lundscape.com, 1 @@ -76082,6 +76493,7 @@ luqsus.pl, 1 luripump.se, 1 lurishop.com.br, 1 lurkmirror.ml, 1 +lusart.ru, 1 lushclub.tk, 1 lushersolutions.com, 1 lushijun.com, 1 @@ -76316,7 +76728,6 @@ lzwc.nl, 1 lzzr.me, 1 m-16.ml, 1 m-22.com, 1 -m-a-i-l.us, 1 m-a-s.cc, 1 m-ast.de, 1 m-beshr.tk, 1 @@ -76349,6 +76760,7 @@ m.sb, 1 m08.co, 1 m0t0k1ch1.com, 1 m0v0.com, 1 +m1-garand-rifle.com, 1 m132.eu, 1 m134.eu, 1 m1gun.tk, 1 @@ -76541,6 +76953,7 @@ macx.cc, 1 mad-in-love.com, 1 mad-rabbit.com, 1 mad.ninja, 1 +madaboutsports.in, 1 madadmin.com, 1 madae.nl, 1 madagui.com, 1 @@ -76554,6 +76967,7 @@ madamove.com, 1 madbicicletas.com, 1 madbin.com, 1 madbouncycastles.co.uk, 1 +madcloud.io, 1 madcosao.gov, 1 madcs.nl, 1 maddi.biz, 1 @@ -76591,6 +77005,8 @@ madewithcollab.com, 1 madewithopendata.org, 1 madge.tk, 1 madhawaweb.tk, 1 +madhon.co.uk, 1 +madhon.com, 1 madhyrecords.com, 1 madian.tk, 1 madinina.tk, 1 @@ -76678,7 +77094,7 @@ mafiamohaa.tk, 1 mafiapenguin.club, 1 mafiasi.de, 1 mafiatown.pl, 1 -mafondue.ch, 0 +mafondue.ch, 1 mafworld.com, 1 mafy.fi, 1 magaaral.com, 1 @@ -76765,6 +77181,7 @@ magicorange.com, 1 magicpill.com.au, 1 magicsms.pl, 1 magicspaceninjapirates.de, 1 +magicstay.com, 1 magictable.com, 1 magictallguy.tk, 1 magicthecreation.tk, 1 @@ -77000,7 +77417,6 @@ mainhattan-handwerker.de, 1 mainhuyahan.tk, 1 mainlined.org, 1 mainone.net, 0 -mainquest.org, 1 mainstortho.com, 1 mainstreetartisans.com, 1 maintainyourwebsite.help, 1 @@ -77080,6 +77496,7 @@ makechanges.com.au, 1 makecharcoal.com, 1 makedin.net, 1 makedonija.net.mk, 1 +makefreecallsonline.com, 1 makeh2o.com, 1 makeit-so.de, 0 makeitshort.ml, 1 @@ -77363,6 +77780,7 @@ manawill.jp, 1 manawithtea.com, 1 manbetx1998.live, 1 manboy.tk, 1 +mancaverevolution.com, 1 manchester.careers, 1 manchesterjobsboard.com, 1 manchestertechservices.co.uk, 1 @@ -77423,6 +77841,7 @@ mangaesp.tk, 1 mangafreak.tk, 1 mangagaga.tk, 1 mangahigh.com, 1 +mangakio.com, 1 mangalindustries.com, 1 mangamonde.fr, 1 manganimefan.tk, 1 @@ -77441,6 +77860,7 @@ mangomercado.com, 1 mangoservers.tk, 1 mangotwoke.co.uk, 1 manguyen.de, 0 +manh.com, 1 manhassetparkdistrictny.gov, 1 manhattanchoralensemble.org, 1 manhattandermatologistsnyc.com, 1 @@ -77449,6 +77869,7 @@ manhattanks.gov, 1 manhole.club, 1 manhuagui.com, 1 mani.tw, 1 +maniac.msk.ru, 1 maniacoland.com, 1 maniadicane.com.br, 0 maniaiti.nz, 1 @@ -77461,6 +77882,7 @@ manicode.com, 1 manicur-salon.tk, 1 manicuradegel.com, 1 manicuradegel.es, 1 +manif-est.info, 1 manikinuk.tk, 1 manilacrawl.com, 1 manimassage.fr, 1 @@ -77551,6 +77973,7 @@ manuall.pt, 1 manuall.ro, 1 manuall.se, 1 manuall.sk, 1 +manualowl.com, 1 manualscollection.com, 1 manuel-herrmann.de, 1 manuel-schefczyk.de, 1 @@ -77594,6 +78017,7 @@ manzoorahmed.com, 1 manzunadh.com, 1 maomihz.com, 1 maone.net, 1 +maorilandfilm.co.nz, 1 maorx.cn, 1 maoshuai.bid, 1 maoshuai.cc, 1 @@ -78157,7 +78581,6 @@ martellosecurity.com, 1 martelus.com, 1 martemeo-wetterau.de, 1 marten-buer.de, 0 -martensmxservice.nl, 1 martensson.io, 1 marthajackson.co.uk, 1 marthakenney.com, 1 @@ -78219,6 +78642,7 @@ martinschulze.org, 1 martinschurdak.tk, 1 martinsferryoh.gov, 1 martinstepar.cz, 1 +martinsvillebulletin.com, 1 martinus.cafe, 1 martinverkerkonline.tk, 1 martinvillalba.com, 1 @@ -78275,7 +78699,6 @@ marxists.org, 1 marxmyths.org, 1 marxpark.tk, 1 mary-e-kay.tk, 1 -maryamghorbani.com, 1 marycliffpress.com, 1 marycowanceramics.com, 1 maryeclark.com, 1 @@ -78330,6 +78753,7 @@ mashoom.co.uk, 1 mashrlab.com, 1 mashrmail.com, 1 mashtibax.ga, 1 +masinaspalat.info, 1 masiniunelte.store.ro, 1 masinky.tk, 1 masite.net, 1 @@ -78430,7 +78854,6 @@ masterofallscience.com, 1 masterofazoth.tk, 1 masterofbytes.ch, 1 masterpassword.org, 1 -masterpizzaiolo.com.br, 1 masterplc.com, 1 masterpro1.ru, 1 masterquest.tk, 1 @@ -78472,6 +78895,7 @@ maszdobro.pl, 1 mat-berenbostel.de, 1 mat.com.vn, 1 mat.tt, 1 +mat6tube.com, 1 mat99.dk, 1 mata-i-nautisme.fr, 1 matafonov.tk, 1 @@ -78739,7 +79163,6 @@ maudfourier.com, 1 mauditeboisson.tk, 1 maudok.gov, 1 mauhalito.tk, 1 -mauicharm.com, 1 mauldincookfence.com, 1 mauletsmallorca.tk, 1 maumovie.ml, 1 @@ -78892,6 +79315,7 @@ maxundlara.eu, 1 maxundlara.org, 1 maxus.tk, 1 maxvaluedeals.com, 1 +maxverboom.nl, 1 maxwaellenergie.de, 1 maxweiss.io, 1 maxwell-english.co.jp, 0 @@ -78946,6 +79370,7 @@ maywood-il.gov, 1 mayx.eu.org, 1 mazartdesign.tk, 1 mazavto.ml, 1 +mazcue.com, 1 mazda-mps.de, 1 mazda-thermote.com, 1 mazda626.net, 1 @@ -79022,6 +79447,7 @@ mcbe.ninja, 1 mcblain.ca, 1 mcblain.com, 1 mcbooks.vn, 0 +mccannhealth.com, 1 mccarthystonefoundation.org, 1 mccn.pp.ua, 1 mccommando.tk, 1 @@ -79034,6 +79460,7 @@ mcculloughjchris.com, 0 mcculloughsgolf.com, 1 mccurtainems.gov, 1 mcdanieldevelopmentservices.com, 1 +mcdean.com, 1 mcdeed.net, 1 mcdermottautomotive.com, 1 mcdgenclikkulubu.org, 1 @@ -79109,6 +79536,7 @@ mcmk.in, 1 mcmo.is, 1 mcmrkt.com, 1 mcnairinternational.com, 1 +mcnav.net, 1 mcnb.top, 1 mcneill.io, 1 mcnet.care, 1 @@ -79633,6 +80061,7 @@ medhy.fr, 1 medi.com.br, 1 media-cable-solutions.de, 1 media-credit.eu, 1 +media-fleet.fr, 1 media-instance.ru, 1 media-land.tk, 1 media-library.co.uk, 1 @@ -79806,6 +80235,7 @@ mediziner-goettingen.tk, 1 medja.net, 1 medklee.com, 1 medlineplus.gov, 1 +medmark.com, 1 medo64.com, 1 medofis.com, 1 medonline.co.nz, 1 @@ -79887,6 +80317,7 @@ meeting-server.ml, 1 meetingapplication.com, 1 meetingvotes.com, 1 meetjeslandsetriathlon.tk, 1 +meetmarlo.com, 1 meetmibaby.co.uk, 1 meetmygoods.com, 1 meetmyown.ga, 1 @@ -80100,7 +80531,6 @@ melaodealmeirim.pt, 1 melatonin.fun, 1 melbar.com.au, 0 melbet.com, 1 -melbet.ru, 1 melbetapp.com, 1 melbourne.dating, 1 melbourneapartments.website, 1 @@ -80141,8 +80571,8 @@ melissageorge.tk, 1 melissalb.tk, 1 melissameuwszen.nl, 1 melissasmith4mt.com, 1 -melissasundwall.com, 1 meliyb.ga, 1 +melkboshigh.co.za, 1 melkiran.tk, 1 melkoghonning.no, 1 mellika.ch, 1 @@ -80413,6 +80843,7 @@ merchifyapp.com, 1 merchstudio.ru, 1 mercici.com, 1 merco.com.au, 1 +mercode.eu.org, 1 mercredifiction.io, 1 mercury.foundation, 0 mercury.photo, 1 @@ -80550,6 +80981,7 @@ metacoda.com, 1 metacode.biz, 1 metacompliance.com, 1 metacortex.cf, 1 +metacritic.com, 1 metadata.be, 1 metadata.io, 1 metadedi.net, 1 @@ -80646,6 +81078,7 @@ meteowiki.tk, 1 meter.md, 1 meterhost.com, 1 meterinsight.com, 1 +metfolio.com, 1 metformin365.tk, 1 methamphetamine.co.uk, 1 method.com, 1 @@ -80787,6 +81220,7 @@ mft.global, 1 mfxbe.de, 0 mfxer.com, 1 mfxm.fr, 1 +mg-culture.net, 1 mg-productions.net, 1 mgae.com, 1 mgatreeservices.com, 1 @@ -80947,6 +81381,7 @@ michaeldancot.com, 1 michaeldavidsonmusic.com, 1 michaeldjoseph.com, 1 michaelduhamel.com, 1 +michaelgijselhart.nl, 1 michaelglaser.de, 1 michaelgroves.tk, 1 michaelgwynn.tk, 1 @@ -81039,6 +81474,7 @@ michig.tk, 1 michiganacousticneuroma.com, 1 michiganearhearing.com, 1 michiganhealth.tk, 1 +michiganrebates.com, 1 michiganstateuniversityonline.com, 1 michiganunionoptout.com, 0 michilaw.com, 1 @@ -81084,6 +81520,7 @@ microlz.com, 0 micromagic.fi, 1 micromaid.cf, 1 micromata.de, 1 +micromicro.cc, 1 micromind.io, 1 micronotfound.gq, 1 micropigmentacaobh.com.br, 1 @@ -81422,9 +81859,10 @@ millasexshopoficial.com.br, 1 millburyma.gov, 1 millcreekwa.gov, 1 millefleurs.eu, 1 -millenn.photos, 1 +millennialmoney.id, 1 millennium-thisiswhoweare.net, 1 millenniumfalcon.org, 1 +millenniumhotels.com, 1 millenniumstem.org, 1 millenniumweb.com, 0 miller-alex.de, 1 @@ -81458,6 +81896,7 @@ millonario.tk, 1 millscountyiowa.gov, 1 millsidecentre.org, 1 millwoodwa.gov, 1 +milmesetas.com, 1 milmiedos.tk, 1 milnerga.gov, 1 milodistradfallning.com, 1 @@ -81470,6 +81909,7 @@ miltor.by, 1 miltor.com.ua, 1 miltor.ru, 1 miluneetsens.fr, 1 +milvus.com.br, 1 milwaukee-webdesigner.com, 1 milwaukeecreative.com, 1 milwaukeeinternational.tk, 1 @@ -81567,6 +82007,7 @@ mindyourwater.com, 1 mine-craftlife.com, 1 mine-pixl.de, 1 mine260309.me, 0 +minebbs.com, 1 minebier.dk, 1 minebitcoin.tk, 1 minecity.fun, 1 @@ -81621,6 +82062,7 @@ minestory.cf, 1 minesweepergame.de, 1 minetracker.dk, 1 mineturtle.de, 1 +minewiki.net, 1 minez-nightswatch.com, 0 minf3-games.de, 1 minfin.gov.ua, 1 @@ -81745,6 +82187,7 @@ minttang.cn, 0 minu.link, 1 minube.co.cr, 1 minucaelena.com, 1 +minul.in, 1 minungdomsbolig.dk, 1 minutashop.ru, 1 minuteflightdeals.com, 1 @@ -81903,6 +82346,7 @@ missblisshair.com.au, 1 missdoertie.net, 1 missdoggystyle.com, 1 missdream.org, 1 +misseguf.dk, 1 missevent.pl, 1 missfit.ru, 1 missflora.se, 1 @@ -81921,6 +82365,7 @@ missmaid.co.uk, 1 missmaid.com, 1 missmeydan.com, 1 misson.ovh, 1 +missoulian.com, 1 missouri-sky.tk, 1 missouriheatingcoolingadvice.com, 1 missoy.me, 1 @@ -82349,7 +82794,6 @@ mnrloroli.tk, 1 mnrv.trade, 1 mns.co.jp, 1 mns.jp, 0 -mns.llc, 1 mnsenate.gov, 1 mnsure.org, 1 mnsvu.org, 1 @@ -82387,6 +82831,7 @@ mobil11.net, 1 mobila-chisinau.md, 1 mobilcom-debitel-empfehlen.de, 1 mobildeal.id, 1 +mobile-discothek.at, 1 mobile-holzofenpizza.de, 1 mobile-industrial-robots.com, 1 mobile-ivr.tk, 1 @@ -82561,6 +83006,7 @@ moderndukes.tk, 1 moderneraplumbingandgas.com.au, 1 moderniknihovna.cz, 1 modernindia.ml, 1 +modernize.com, 1 modernliferoleplay.cf, 1 modernmomarchy.com, 1 modernqr.com, 1 @@ -82615,6 +83061,7 @@ moe.ci, 1 moe.tools, 1 moe4sale.in, 1 moeali.com, 1 +moeblog.cn, 1 moeblog.top, 1 moec.top, 1 moechel.com, 1 @@ -82649,6 +83096,7 @@ mof.gov.ws, 1 mofbinsurance.com, 1 mofohome.dyndns.org, 1 mogamugi.com, 1 +mogbox.net, 1 mogica.tk, 1 mogilev-forum.tk, 1 mogomix.cf, 1 @@ -82713,6 +83161,7 @@ mojizuri.com, 1 mojizuri.jp, 1 mojkragujevac.net, 1 mojleksikon.com, 1 +mojnet.eu, 1 mojnet.net, 1 mojo.az, 1 mojo.so, 1 @@ -82891,6 +83340,7 @@ moneygo.se, 1 moneygrup.tk, 1 moneymania.tk, 1 moneymint.com, 1 +moneymorning.com, 1 moneyniti.com, 1 moneyonchain.com, 1 moneypark.ch, 1 @@ -82983,6 +83433,7 @@ monoxoro.tk, 1 monpanier-procter-et-gamble.fr, 1 monpc-pro.fr, 0 monplay.host, 1 +monrasp.ddns.net, 1 monroe27.com, 1 monroecountyny-opi.gov, 1 monroecountywv.gov, 1 @@ -83042,6 +83493,7 @@ montgomeryvotesal.gov, 1 monti.fi, 1 monticelloky.gov, 1 montillafarm.com, 1 +montoan.com, 1 montoneros.tk, 1 montop.tk, 1 montourcountypa.gov, 1 @@ -83109,6 +83561,7 @@ moonlit.cloud, 1 moonlit.games, 1 moonmelo.com, 1 moonmoondomain.com, 1 +moonpay.com, 1 moonpay.io, 1 moonracer.ga, 1 moonraptor.co.uk, 0 @@ -83207,6 +83660,7 @@ more-terrain.de, 1 more4ham.com, 1 moreal.co, 1 moreapp.co.uk, 1 +morebus.co.uk, 1 morechance.de, 1 morecigarettes.tk, 1 morecreativelife.com, 1 @@ -83382,6 +83836,7 @@ mosttaza.com, 1 mosurist.tk, 1 moswand.nl, 1 motd.ch, 1 +mote.com, 1 motekforce.link, 1 motekforcelink.com, 1 motekforcelink.eu, 1 @@ -83593,11 +84048,13 @@ moviro.net, 1 movlib.org, 1 movnest.com, 1 mowing-the-lawn.com, 1 +moxfield.com, 1 moxiegirlz.id, 1 moy-biznes.tk, 1 moy-gorod.od.ua, 0 moy.cat, 1 moybiznes.tk, 1 +moyens.net, 1 moyer.pub, 0 moylen.eu, 1 moyminsk.tk, 1 @@ -83611,6 +84068,7 @@ mozgb.ru, 1 mozgovoy.tk, 1 mozilla-russia.org, 1 mozilla.cz, 1 +mozo.com.au, 1 moztime.com, 1 mozzak.tk, 1 mozzez.de, 1 @@ -83819,6 +84277,7 @@ msetalk.fr, 1 msfishingcharter.com, 1 msgallery.tk, 1 msgmon.com, 1 +msgr.com, 1 msha.gov, 1 mshemailmarketer.com.au, 1 mshgame.ga, 1 @@ -84205,6 +84664,7 @@ mungdog.com, 1 munialajuela.go.cr, 1 munibilling.com, 1 munich-eventlocations.de, 1 +munihei.de, 1 munkavedelemaruhaz.hu, 0 munki.org, 1 munkibuilds.org, 1 @@ -84270,6 +84730,7 @@ musaslush.com, 1 musavirsahan.com, 1 muscatinecountyiowa.gov, 1 muscle-tg.com, 1 +muscleandrecovery.com, 1 musclecarresearch.com, 1 musclecarsillustrated.com, 1 muscles.cf, 1 @@ -84277,6 +84738,7 @@ muscolinomusic.com, 1 muscularbabes.net, 1 muscuolisq.cf, 1 musearchengine.com, 1 +musecal.com, 1 museclef.com, 1 musecomunicazione.it, 1 musedash.moe, 1 @@ -84436,7 +84898,6 @@ mutualofomahamedicareplans.com, 1 mutuals.cool, 1 mutuelle-catalane.fr, 1 mutuelle.fr, 1 -mutuocasafacile.it, 1 muuglu.es, 1 muunnin.net, 1 muurari.tk, 1 @@ -84560,6 +85021,7 @@ my-gode.fr, 1 my-gps-tracker.co.uk, 1 my-health-homes.com, 1 my-host.ovh, 1 +my-how-to-draw.com, 1 my-hps.de, 1 my-ifms.com, 1 my-ip.work, 1 @@ -84597,10 +85059,12 @@ my-tunisia.tk, 1 my-visualforce.com, 1 my-web.xyz, 1 my-webcloud.at, 1 +my-woodcraft.com, 1 my.cat, 1 my.onlime.ch, 0 my.urown.cloud, 1 my.usa.gov, 1 +my1login.com, 1 my4g.net, 1 my4thtelco.com.sg, 1 my4thtelco.sg, 1 @@ -84701,6 +85165,7 @@ mychamberlain.com.au, 1 mychamberlain.eu, 1 mycharlestontherapist.com, 1 mychawinda.cf, 1 +mychekker.com, 1 mychemromance.tk, 1 mychicken.info, 1 mychicken.nl, 1 @@ -84739,6 +85204,7 @@ myconf.es, 1 myconf.uk, 1 myconferencion.tk, 1 myconnection.ie, 1 +myconradsiegel.com, 1 myconsultation.be, 1 myconsulting.ch, 0 mycontactacuvue.fr, 0 @@ -84878,7 +85344,6 @@ mygaming.news, 1 mygate.at, 0 mygaysitges.com, 1 mygd.org, 1 -mygear.live, 1 mygedit.com, 1 mygedit.info, 1 mygedit.net, 1 @@ -84924,10 +85389,12 @@ myhmz.bid, 1 myhollywoodnews.com, 1 myhome-24.pl, 1 myhomeworkpapers.com, 1 +myhomice.de, 1 myhoor.ga, 1 myhostname.net, 1 myhotgirls.ml, 1 myhouse.rocks, 1 +myhu.bz, 1 myhub.eu.org, 1 myhurlburt.marketing, 1 myhuthwaite.com, 1 @@ -84967,6 +85434,7 @@ mykitchen.gq, 1 mykolhoz.tk, 1 mykonos-island.tk, 1 mykontool.de, 1 +mykoreankitchen.com, 1 mykumedir.com, 1 mykurgan.tk, 1 mykursumlija.tk, 1 @@ -85026,6 +85494,7 @@ mymed.de, 1 mymed.eu, 1 mymedia.gotdns.com, 1 mymediabox.com, 1 +mymedicareaccount.com, 1 mymedz.nl, 1 mymerlin.co.nz, 1 mymerlin.com.au, 1 @@ -85095,6 +85564,7 @@ myonlinemovies.ga, 1 myonlinevehicleinsurance.com, 1 myopd.in, 1 myorder-pg.com, 1 +myorders.co, 1 myoregon.gov, 1 myotopie.de, 0 myoueb.fr, 1 @@ -85149,6 +85619,7 @@ mypowersergca.ca, 1 mypress.mx, 1 myprfsite.com, 1 myprintcard.de, 1 +myprivatedns.uk, 1 myproblog.com, 1 mypromocode.com, 1 myproof.me, 1 @@ -85319,6 +85790,7 @@ mystore24.us, 1 mystorydoctor.com, 1 mystorymonster.com, 1 mystown.org, 1 +mystream.com, 1 mystreet.ga, 1 mystudy.me, 1 mystudycart.com, 1 @@ -85337,7 +85809,6 @@ mytea.life, 1 mytefl.com, 1 mytests.tk, 1 mytfg.de, 1 -mythemeshop.com, 0 mythen-fonds.ch, 1 mythenfonds.ch, 1 mythicdelirium.com, 1 @@ -85372,6 +85843,7 @@ myturf.com.au, 1 mytuzla.tk, 1 mytwilight.tk, 1 myunitard.uk, 1 +myunitypoint.org, 1 myunraid.ru, 1 myupdatestudio.com, 1 myupdatesystems.com, 1 @@ -85526,6 +85998,7 @@ nabidkydnes.cz, 1 nabiev.tk, 1 nabitrix.tk, 1 nabokov.tk, 1 +naboplastic.com, 1 nabosoft.tk, 1 nabytek-valmo.cz, 1 nabzgroup.com, 1 @@ -85577,6 +86050,7 @@ nadjabenaissa.tk, 1 nadjasummer.com, 1 nadlan.immo, 1 nadlerdentistry.com, 1 +nadoba-msk.ru, 1 nadomna-rabota.tk, 1 nadoske.info, 1 nadsandgams.com, 1 @@ -85641,6 +86115,7 @@ naika.clinic, 1 nailattitude.ch, 0 nailchiodo.com, 1 nailclub.tk, 1 +naildesignsjournal.com, 1 nails-n-more.be, 1 nailsart.roma.it, 1 nailshop.gq, 1 @@ -85785,10 +86260,10 @@ nanfangstone.com, 1 nange.cn, 1 nangluongxanhbinhphuoc.com, 1 nanhuimed.com, 1 -nanhuistory.com, 1 nanhuitop.com, 1 naninossoftware.tk, 1 nanji123.com, 1 +nanjie.com.tw, 1 nanjiyy.com, 1 nankiseamansclub.com, 1 nanmu.me, 1 @@ -85871,6 +86346,7 @@ naraku.cc, 1 naranonsantabarbara.org, 1 narardetval.se, 1 narasi.tv, 1 +narayanahealth.org, 1 narazaka.net, 1 narcissism.tk, 1 narco-center.com, 1 @@ -86112,6 +86588,7 @@ naturaldisasters.tk, 1 naturalezafengshui.com, 1 naturalflowerpower.com, 1 naturalkitchen.co.uk, 1 +naturalreaders.com, 1 naturalspacesdomes.com, 1 naturalstyle.tk, 1 naturana.news, 1 @@ -86185,6 +86662,7 @@ navlnachekg.cz, 1 navnet.ml, 1 navoiyrapmafia.tk, 1 navot.co.il, 1 +navoto.com, 1 navroopsahdev.in, 1 navstevnik.sk, 1 navycs.com, 1 @@ -86284,6 +86762,7 @@ nbwp.uk, 1 nc-beautypro.fr, 1 nc-formation.fr, 1 nc-network.io, 1 +nc3rs.org.uk, 1 ncamarquee.co.uk, 1 ncands.net, 1 ncarmine.com, 1 @@ -86300,6 +86779,7 @@ ncctouring.com, 1 ncdc.pt, 1 ncdwlq.space, 1 ncea.net.au, 1 +nceahelp.com, 1 ncegs.sk, 1 ncem.gov, 1 nchaf-dynamic.gov, 1 @@ -86375,7 +86855,6 @@ ndy.sex, 1 ne-games.com, 1 ne-on.org, 1 ne.ax, 1 -ne.jo, 1 nea-security.com, 1 nea.gov, 1 nealvorusphd.com, 1 @@ -86437,6 +86916,7 @@ nedcv-preview.nl, 1 nedcv.nl, 1 nedela.tk, 1 nederbetuwe.nl, 0 +nederlandmobiel.nl, 1 nederlands-vastgoedfonds.nl, 1 nedermisp.nl, 1 nedhome.ml, 1 @@ -86458,6 +86938,7 @@ needing.cf, 1 needle-demo.azurewebsites.net, 1 needle.net.nz, 1 needle.nz, 1 +needmytranscript.com, 1 needrom.com, 1 needsth.top, 1 needsupport.us, 1 @@ -86492,6 +86973,7 @@ negfi.com, 1 negocieipanema.com.br, 1 negociemos.com.co, 1 negocios-imatore.com, 1 +negociosdigitales.club, 1 negociosparaoptimistas.com, 1 negociosurbanos.net, 1 negoya-shokai.info, 1 @@ -86573,6 +87055,7 @@ nelosculpteur.fr, 1 nelson-marine.com, 1 nelsonrecruitmentservices.co.uk, 1 nelsonrodrigues.tk, 1 +nelsonworldwide.com, 1 nelty.be, 1 nemagiya.tk, 1 nemahacountyne.gov, 1 @@ -86619,6 +87102,7 @@ neocenter.org, 1 neochan.net, 1 neochan.ru, 1 neocharge.net, 1 +neocirc.org, 1 neocities.org, 1 neoclan.tk, 1 neocyd.com, 1 @@ -86733,6 +87217,7 @@ nerdsweide.nl, 1 nerdwallet.com, 1 nerdydev.net, 1 nerdyfam.tech, 1 +nerdyspace.net, 1 nerfcity.tk, 1 nerfroute.com, 1 nerion.tk, 1 @@ -87017,6 +87502,7 @@ netzklad.de, 1 netzona.org, 1 netzspielplatz.de, 0 netzsv.website, 1 +netztest.at, 1 netzvieh.de, 1 netzwerk-lq.com, 1 netzwerk-sozialliberal.de, 1 @@ -87024,6 +87510,7 @@ netzwerkwerk.de, 1 netzwolf.info, 1 neuber-it.de, 1 neuber.uno, 1 +neuca24.pl, 1 neuch.info, 0 neue-energien.tk, 1 neuelandschaft-welzow.de, 1 @@ -87243,8 +87730,11 @@ neworiflame.tk, 1 newparadigmventures.net, 0 newparrot.tk, 1 newphysics.fi, 1 +newplxx.online, 1 +newpointeg.com, 1 newpoke.net, 0 newportbus.co.uk, 1 +newportit.com, 1 newposts.ru, 1 newpraguemn.gov, 1 newpress24.tk, 1 @@ -87834,6 +88324,7 @@ nightclassifieds.com, 1 nightdreamer.me, 1 nightfirecat.com, 1 nightfish.co, 1 +nightflow.com, 1 nighthawks.tk, 1 nighthawkstrategies.com, 1 nightkiss66.org, 1 @@ -88153,6 +88644,7 @@ nkapliev.org, 1 nkbwnx.com, 1 nkg-mosbach.de, 1 nkg.com.au, 1 +nkghas.com, 1 nkinka.de, 1 nkjwmn.com, 1 nkjwrs.com, 1 @@ -88375,6 +88867,7 @@ nokia.la, 1 noknow.ovh, 1 nokobike.com, 1 nokono.com, 1 +nokoshop.fr, 1 noktadedektor.com, 1 noktaradyo.com, 1 nokumbaya.com, 1 @@ -88479,6 +88972,7 @@ nootropicpedia.com, 1 nootropil.cf, 1 noovell.com, 1 nooverviewavailable.com, 1 +noozy.org, 1 nopagefound.com, 1 nopaincenter.ro, 0 nopajam.tk, 1 @@ -88537,6 +89031,7 @@ nordvpn.com, 1 nordvpnteams.com, 1 nordwal.de, 1 nordwaldzendo.de, 1 +norebase.com, 1 noref.tk, 1 noregrets.tk, 1 noreply.mx, 1 @@ -88737,6 +89232,7 @@ note7forever.com, 1 notebin.xyz, 1 noteboat.net, 1 notebooksbilliger.de, 1 +notebooksteurer.shop, 1 notebrook.com, 1 notecoffee.tw, 1 noted.de, 1 @@ -88828,6 +89324,7 @@ novafreixo.pt, 1 novaintegra.co, 1 novaintegra.com, 1 novak.cf, 1 +novakola.bg, 1 novalevante.info, 1 novalite.rs, 1 novanetnettoyage.fr, 0 @@ -88912,6 +89409,7 @@ novsti.cf, 1 novu.com, 1 novumsafe.com, 1 novurania.com, 1 +novy.software, 1 novy.vip, 1 novye-kuhni.ml, 1 novysvit.com.ua, 1 @@ -89084,7 +89582,7 @@ ntppool.net, 1 ntppool.org, 1 ntr.ac.cn, 1 ntsp.team, 1 -ntut.edu.tw, 1 +ntuchinesesociety.com, 1 ntx360grad-fallakte.de, 1 ntz.im, 1 ntzwrk.org, 1 @@ -89232,6 +89730,7 @@ nureg.xyz, 1 nuria-fergo.tk, 1 nuriaamat.com, 1 nuriacamaras.com, 1 +nurkamol.com, 1 nurlyn.com, 0 nurmio.fi, 1 nurnabi.ml, 1 @@ -89270,6 +89769,8 @@ nutriclub.co.id, 1 nutrienti.eu, 1 nutrifyyourself.com, 1 nutrijets.com, 1 +nutriklin.com, 1 +nutrimedcn.com, 1 nutriment.co.uk, 1 nutripedia.gr, 1 nutrisidangym.com, 1 @@ -89387,6 +89888,7 @@ nyangasm.org, 0 nyanor.cloud, 1 nyansparkle.com, 1 nyantec.com, 1 +nyap.org, 1 nyatane.com, 1 nyawau.ch, 1 nyawork.com, 1 @@ -89412,6 +89914,7 @@ nygbtourguide.tk, 1 nyhaoyuan.net, 1 nyhemsgarden.se, 1 nyheter-sverige.ga, 1 +nyheter24.se, 1 nyiaarhus.dk, 1 nyiarlumar.tk, 1 nyiooc.org, 1 @@ -89442,6 +89945,7 @@ nyxum.com, 1 nyyu.tk, 1 nyzed.com, 1 nz.search.yahoo.com, 0 +nzb.su, 1 nzbr.de, 1 nzcorp.dk, 1 nzdata.org, 1 @@ -89511,6 +90015,7 @@ o9297.co, 1 o9397.com, 1 o9728.co, 1 o98.net, 1 +o9solutions.com, 1 oabtherapy.com, 1 oadeo.com, 1 oahpmdata.net, 1 @@ -89538,6 +90043,7 @@ oaktree-realtors.com, 1 oaktreelodge.org.uk, 1 oakwood-park.tk, 1 oandareview.co, 1 +oanow.com, 1 oase-fuer-wohlbefinden.ch, 1 oasegroen.nl, 1 oasiristorantebagno.it, 1 @@ -89552,6 +90058,7 @@ oauth.how, 1 oauthaccountmanager.googleapis.com, 1 oauthdb.com, 1 ob-salon.ru, 1 +obagg.com, 1 obala.ga, 0 obalawebsolutions.ml, 1 obalky-obaly.sk, 1 @@ -89718,6 +90225,7 @@ oceandns.eu, 1 oceandns.net, 1 oceandns.nl, 1 oceane.training, 1 +oceanfirst.com, 1 oceaniahome.tk, 1 oceaniaservergroup.com, 1 oceanings.com, 1 @@ -89736,6 +90244,7 @@ oceanspraymiami.com, 1 oceanspringsarchives.net, 0 oceansurplus.tk, 1 oceanviewde.gov, 1 +oceanvisuals.com, 1 ocenilla.ml, 1 ocenilla.tk, 1 ocenka-nedv.ml, 1 @@ -89880,6 +90389,7 @@ odinseye.net, 1 odinson.tk, 1 odiris.lk, 1 odishainfo.tk, 1 +odishatv.in, 1 odisseo.io, 1 odlicomul.ga, 1 odnostranichnik.tk, 1 @@ -89889,6 +90399,7 @@ odonata-editions.fr, 1 odonti.com, 1 odontologiawilliampizarro.com, 1 odoo.co.th, 1 +odoranswers.com, 1 odoru.ga, 1 odorucinema.ga, 1 odosblog.de, 1 @@ -89907,6 +90418,7 @@ odysseytraining.com.au, 1 odziezrobocza.pl, 1 odzyskaniedomeny.pl, 1 odzyskiwanie-danych-z-dysku.pl, 1 +odzyskiwanie.biz, 1 odzywianie.info.pl, 1 oe0fcdncxjpdd05b.myfritz.net, 1 oea.gov, 1 @@ -89993,6 +90505,7 @@ officeefficient.de, 1 officeface.cf, 1 officeforstudents.org.uk, 1 officefundays.co.uk, 1 +officeguide.cz, 1 officeinteriors.co.nz, 1 officemovepro.com, 1 officerjones.tk, 1 @@ -90040,6 +90553,7 @@ oficoex.es, 1 oficomercr.com, 0 ofileo.fr, 1 ofis.tk, 1 +ofisas.cloud, 1 ofisescort.ga, 1 ofisescort.tk, 1 ofkodasplace.nl, 1 @@ -90051,6 +90565,7 @@ ofogh.co, 1 oformi.net, 1 oformit-zajm-kruglosutochno.ga, 1 oformlaj.ga, 1 +ofpad.com, 1 ofrion.lu, 1 ofsetas.lt, 1 oftamedic.com, 0 @@ -90066,6 +90581,7 @@ oge.gov, 1 ogfarms.in, 1 oggw.us, 1 oggyp.com, 1 +ogilvy.com, 1 ogis.gov, 1 ogkw.de, 1 oglecountyil.gov, 1 @@ -90225,7 +90741,6 @@ okotelecom.ml, 1 okotoksbeach.ca, 1 okpo.tk, 1 okqubit.net, 1 -okr.pub, 1 okremarketing.com, 1 oksafe-t.org, 1 oksanakazakova.tk, 1 @@ -90301,7 +90816,6 @@ oldriver.tk, 1 oldroadswhippets.tk, 1 oldrun.is, 1 oldrup.dk, 1 -oldrup.net, 1 oldscans.tk, 1 oldschool-criminal.com, 1 oldschool.wiki, 1 @@ -90320,6 +90834,7 @@ oldtimers.tk, 1 oldtimesecurity.tk, 1 oldtoystuff.com, 1 oldvaliken.tk, 1 +oldvps.com, 1 oleam.org, 1 olecoin.io, 1 olegchursin.com, 1 @@ -90384,7 +90899,6 @@ olivernaraki.com, 1 oliverniebuhr.de, 1 oliverschmid.space, 1 oliverspringer.eu, 1 -oliverst.com, 1 oliverwenz.de, 1 olivetbgc.org, 1 olivetchurch.org.uk, 0 @@ -90434,6 +90948,7 @@ olphseaside.org, 1 olqoa.org, 1 olschurch.com, 1 olsen-town.tk, 1 +olsenban.de, 1 olsh-hilltown.com, 1 olshop.ai, 1 olson25.org, 1 @@ -90469,6 +90984,7 @@ omandatapark.com, 1 omangrid.com, 1 omanhr.cf, 1 omanmegadeals.com, 1 +omaosurveys.org, 0 omarans.com, 1 omarbaba.shop, 1 omarhussien.tk, 1 @@ -90583,6 +91099,7 @@ on-the-wave.com, 1 on-tv.tk, 1 on2it.net, 1 on2it.nl, 1 +on3static.com, 1 on5.co.id, 1 on9.link, 1 ona.io, 1 @@ -90792,6 +91309,7 @@ online-car-show.com, 1 online-carhire.tk, 1 online-clothing-store.tk, 1 online-consulting-corp.com, 1 +online-content.ru, 1 online-diary.tk, 1 online-divorce.co.za, 1 online-eikaiwa-guide.com, 1 @@ -90900,6 +91418,7 @@ onlinetextil.cz, 1 onlineth.com, 1 onlinetrainer.co.za, 1 onlinetravelmoney.co.uk, 1 +onlineunionbankph.info, 1 onlineunitedcountry.com, 1 onlinevardenafil.gq, 1 onlineverdienen.tk, 1 @@ -90962,7 +91481,7 @@ onpointinsights.us, 0 onpointplugins.com, 1 onpopup.ga, 1 onporn.fun, 1 -onrealt.ru, 0 +onrealt.ru, 1 onsemediagroup.ml, 1 onsenlaichelesdoigts.be, 1 onsetupdates.com, 1 @@ -91133,11 +91652,13 @@ opendata.cz, 1 opendataincubator.eu, 1 opendecide.com, 1 opendolls.com, 1 +opendoorcounselingpa.com, 1 openevic.info, 1 openfir.st, 0 openfitapi-falke.azurewebsites.net, 1 openforvintage.com, 1 openfuture.digital, 1 +opengameart.org, 1 opengovpartnership.de, 1 openhistory.de, 1 openid.net.br, 1 @@ -91158,6 +91679,7 @@ openmtbmap.org, 1 opennet.fund, 1 opennippon.com, 1 opennippon.ru, 1 +openpictures.ch, 1 openpolicing.org, 1 openproject.com, 1 openproton.cf, 1 @@ -91434,6 +91956,7 @@ orbeimaginario.com, 1 orbesurgeons.com.au, 1 orbik.com, 1 orbit.church, 1 +orbita.zp.ua, 1 orbitabaja.com, 1 orbitaclub.cf, 1 orbital3.com, 1 @@ -91539,6 +92062,7 @@ organicindiausa.com, 1 organicossuliani.com.br, 1 organicpoint.in, 1 organicrootsfestival.tk, 1 +organicsearcher.com, 1 organicseo4u.com, 1 organictanningest.ga, 1 organisatieteam.nl, 1 @@ -91786,6 +92310,7 @@ osmt.cc, 1 osnova.cz, 1 osobniterapeutka.cz, 1 osobnyak.tk, 1 +osohq.com, 1 osolutionscorp.com, 1 osom.finance, 1 osomagicmountain.com, 1 @@ -91887,6 +92412,7 @@ otixz.com, 1 otkm-stuttgart.tk, 1 otmns.net, 1 otmorozki.tk, 1 +otng.us, 1 otoblok.com, 1 otocekicitekirdag.com, 1 otogeworks.com, 1 @@ -91972,6 +92498,7 @@ ourevents.net, 1 ourgame.ie, 1 ourgems.com.au, 1 ourharvest.com, 1 +ourhr.club, 1 ourindiana.gov, 1 ourladymountcarmel.net, 1 ourladymtcarmel.org, 0 @@ -92027,6 +92554,7 @@ outdoorlightingthousandoaks.com, 1 outdoorlightingwestlakevillage.com, 1 outdoormanufaktur.com, 0 outerface.net, 1 +outerheaven.pro, 1 outerlimitsdigital.com, 1 outernet.tk, 1 outerspace.ga, 1 @@ -92100,12 +92628,14 @@ overener.net, 1 overener.org, 1 overener.tech, 1 overener.us, 1 +overflow.io, 1 overframe.gg, 1 overgear.tk, 1 overground.tk, 1 overheek.tk, 1 overlevers.tk, 1 overlook.tk, 1 +overlooklakeaustin.com, 1 overlord.network, 1 overmorgen.nl, 1 overnetfaq.tk, 1 @@ -92230,6 +92760,7 @@ oxinarf.pt, 1 oxizonia.com, 1 oxlab.com.ar, 0 oxo.cloud, 0 +oxoo.ooo, 1 oxos.com, 1 oxots.com, 1 oxotscovid.com, 1 @@ -92403,7 +92934,7 @@ pabloarteaga.uk, 1 pabloarteaga.xyz, 1 pablocamino.tk, 1 pablocelorio.com, 1 -pablofain.com, 1 +pablofain.com, 0 pablofonta.es, 1 pablomachado.tk, 1 pablomolina.tk, 1 @@ -92612,6 +93143,7 @@ paintingindurban.co.za, 1 paintingrepair.ga, 1 paintlabcustom.com.br, 1 paintprotectionfilm.store, 1 +paintscratch.com, 1 paio2-rec.com, 1 paipuman.jp, 1 paireepinart.com, 1 @@ -92821,6 +93353,7 @@ pandorum.cf, 1 panduan-hamil.tk, 1 pandymic.com, 1 panel-stroy.cf, 1 +panelbear.com, 1 paneldewelopera.pl, 1 paneldoorsolutions.com, 1 paneldoorsolutions.de, 1 @@ -92929,7 +93462,6 @@ papendal.nl, 1 paper-republic.org, 1 paper.sc, 1 paper.wf, 1 -papergamer.co.uk, 1 paperhoney.by, 1 papermasters.com, 1 papermotion.fr, 1 @@ -93006,6 +93538,7 @@ paralellesjuridiques.com, 1 parallel-creative.co.uk, 1 parallel-worlds.tk, 1 parallelpython.com, 1 +paralleum.cz, 1 paraluman.be, 1 paralysis.ga, 1 paramapa.com.py, 1 @@ -93080,7 +93613,6 @@ paribus.io, 1 parichadrelax.se, 1 parideal.com, 1 parideal.de, 1 -paridokhtmoshkzad.com, 1 parikmaxeru.tk, 1 parina.vn, 1 pario.li, 1 @@ -93145,6 +93677,7 @@ parktownpatrols.co.za, 1 parkvetgroup.com, 1 parkviewmotorcompany.com, 1 parkwayminyan.org, 1 +parkwhiz.com, 1 parlakjurnal.com, 1 parlament.cf, 1 parlamento.gub.uy, 1 @@ -93158,7 +93691,6 @@ parmatoday.it, 1 parmels.com.br, 1 parmoli.tk, 1 parnassys.net, 1 -parniplus.com, 1 parnizaziteksasko.cz, 1 parodesigns.com, 1 paroisses-theix-surzur.com, 1 @@ -93175,12 +93707,13 @@ parratennis.com.au, 1 parrocchiadimeana.tk, 1 parrocchiamontevecchia.it, 1 parroquiacorazondemaria.tk, 1 +parroquiadelpilarpamplona.es, 1 parroquiadesanlesmes.tk, 1 parrotbook.cf, 1 parry.org, 1 pars.work, 1 -parsahosseinpour.com, 1 parsdev.com, 0 +parsec.app, 1 parsemail.org, 1 parser.nu, 1 parsonsfamilyhomes.com, 1 @@ -93285,6 +93818,7 @@ paschmid.ch, 1 pascoaselecta.com, 1 pascocountyfl.gov, 1 pascopresents.com, 1 +pascosheriff.com, 1 pascovotes.gov, 1 pascualberniz.tk, 1 pascualinmuebles.com, 1 @@ -93331,6 +93865,7 @@ passionpictures.eu, 1 passions-art.com, 1 passionsorigen.cat, 1 passive-work.gq, 1 +passivebook.com, 1 passiveseinkommen.tk, 1 passivhaus.tk, 1 passky.org, 1 @@ -93345,6 +93880,7 @@ passport.yandex.ru, 1 passport.yandex.ua, 1 passports.govt.nz, 1 passporttrails.com, 1 +passportunlimited.com, 1 passrhce.com, 1 passrhcsa.com, 1 passthepopcorn.me, 1 @@ -93621,7 +94157,6 @@ paveltoman.cz, 1 paven.io, 0 pavernosmatao.tk, 1 pavingtiles.tk, 1 -pavlic.se, 1 pavlov-ledec.cz, 1 pavlova.es, 1 paw.cloud, 1 @@ -93661,6 +94196,7 @@ payat.io, 1 paybackfx.com, 1 payblog.org, 1 payboy.biz, 1 +payboy.click, 1 payboy.rocks, 1 paybro.eu, 1 paycaptain.com, 1 @@ -93674,8 +94210,10 @@ paycore.io, 1 paydarplasticsurgery.com, 1 paydepot.com, 1 paydigital.pt, 1 +paydollar.com, 1 payexpresse.com, 1 payfazz.com, 1 +payfit.com, 1 payforpeople.nl, 1 paygvpn.com, 1 payjunction.com, 1 @@ -93707,6 +94245,7 @@ paypaq.com, 1 paypcns.co.uk, 1 paypod.org, 1 paypro.nl, 0 +payproglobal.com, 1 payps.ru, 1 payroll.ch, 0 payroll.myftp.org, 1 @@ -93738,6 +94277,8 @@ pb-eatz.com, 1 pb.ax, 0 pba.org.uk, 1 pback.se, 1 +pband.ch, 1 +pbbm.com.ph, 1 pbcables.tk, 1 pbcknd.ml, 1 pbcpao.gov, 1 @@ -93830,15 +94371,18 @@ pcpromaroc.ma, 1 pcpuhastaja.tk, 1 pcrab.ml, 1 pcrecovery.ga, 1 +pcrobot.cz, 1 pcrypt.org, 1 pcsafe.cf, 1 pcsbrasil.ml, 1 pcscotus.gov, 1 pcsetting.com, 1 +pcsoft.fr, 1 pcsolottodraw.com, 1 pcsolutionsofwillis.ga, 1 pcsolutionsofwillis.gq, 1 pcsremodel.com, 1 +pcstonks.ru, 1 pcstoronto.ca, 1 pcsuniverse.ga, 1 pcsx2.net, 1 @@ -93920,6 +94464,7 @@ peakseoservices.co.uk, 1 peaksloth.com, 1 peakvets.co.uk, 1 peanutbase.org, 1 +peanutbutter.com, 1 peanutpay.de, 1 peanutproductionsnyc.com, 1 pearbloom.com, 1 @@ -93998,7 +94543,6 @@ pedrosaurus.com, 1 pedrosillo-delosaires.tk, 1 pedrotimoteo.com, 1 pedziran.com, 1 -peeekaaabooo.com, 1 peekier.com, 1 peelawayyourpain.com, 1 peelmachineryrepair.com, 1 @@ -94037,6 +94581,7 @@ peers.gq, 1 peers.tk, 1 peersquaders.ga, 1 peersquadest.ga, 1 +peerview.com, 1 peerweb.com, 1 peerwebdc.tk, 1 peetah.com, 0 @@ -94216,6 +94761,8 @@ penza-on-line.tk, 1 penza-today.tk, 1 penzaonline.cf, 1 penzionvzahrade.cz, 1 +people.ai, 1 +people.deloitte, 1 people2hire.co.uk, 1 peopleandchange.nl, 1 peoplecanfly.com, 1 @@ -94294,6 +94841,7 @@ peredoz.tk, 1 pereezd.ml, 1 peremena.ml, 1 perenne.ee, 1 +perennialwomens.com, 1 peresypchanka.tk, 1 pereuda.com, 1 perevedi.org, 1 @@ -94413,7 +94961,7 @@ perot.me, 1 perpetual.ga, 1 perpetualemotion.com, 1 perpetuum.tk, 1 -perrau.lt, 1 +perrau.lt, 0 perreiraproperties.com, 1 perretes.com.es, 1 perrigo.it, 1 @@ -94468,8 +95016,6 @@ personlookup.com.au, 1 personnedisparue.fr, 1 perspective.com.tr, 0 perspectivum.com, 0 -perspektive-brunsbuettel.de, 1 -perspektive-kruemmel.de, 1 perspektivwechsel-coaching.de, 0 perspio.io, 1 persson.me, 1 @@ -94516,6 +95062,7 @@ pessebrevivent-lallacuna.tk, 1 pestalertsers.ga, 1 pestalertsest.ga, 1 pestcontrol.co.uk, 1 +pesterchum.online, 1 pesterchum.xyz, 1 pesthotelers.ga, 1 pestici.de, 1 @@ -94525,6 +95072,7 @@ pesto.video, 1 pestpatrol.ga, 1 pestpilis.hu, 1 pestra.tk, 1 +pestzilla.ae, 1 pet-cat-accessories.ml, 1 pet-distributor.cz, 1 pet-guide.net, 1 @@ -94724,6 +95272,7 @@ petutility.tk, 1 petvisual.ga, 1 petwall.info, 1 petwatchersnj.com, 0 +petyolo.org, 1 peuf.shop, 1 peukert.cc, 1 pevat-ua.tk, 1 @@ -95082,7 +95631,6 @@ photographeremploymenters.ga, 1 photographeremploymentest.ga, 1 photographerforwedding.tk, 1 photographersdaydream.com, 1 -photographershub.ng, 1 photography-workshops.net, 1 photographyandvideo.tk, 1 photographyforchange.com, 1 @@ -95213,6 +95761,7 @@ phytosunaroms.com, 1 phyxion.net, 1 pi-dash.com, 1 pi-net.dedyn.io, 1 +pi-sa.fr, 1 pi-supply.com, 1 pi1.io, 1 pia-bardo.tk, 1 @@ -95263,6 +95812,7 @@ piccolinokids.gr, 1 piccolo-parties.co.uk, 1 picdefacer.com, 1 pichainlabs.com, 1 +pichlerei.at, 1 pick.aw, 1 pick150.hu, 1 picka.gift, 1 @@ -95357,7 +95907,6 @@ pierreyvesdick.fr, 1 piersmana.com, 1 pierson.tk, 1 pierstone.com, 1 -pierwsza-wyprawka.pl, 1 piesel-piepser.de, 1 pietbrakman.tk, 1 pietechsf.com, 0 @@ -95386,6 +95935,7 @@ pigop.com, 1 pigslv.com, 1 pigzilla.co, 1 pii.bz, 1 +piizapp.com, 1 pijamasbichopreguica.com.br, 1 pijuice.com, 1 pijusmagnificus.com, 1 @@ -95559,6 +96109,7 @@ pinterest.co.kr, 1 pinterest.co.uk, 1 pinterest.com, 1 pinterest.com.au, 1 +pinterest.com.mx, 1 pinterest.de, 1 pinterest.engineering, 1 pinterest.es, 1 @@ -95572,6 +96123,7 @@ pinterest.ph, 1 pinterest.pt, 1 pinterest.ru, 1 pinterjann.is, 1 +pinterst.com, 1 pintiaux.com, 1 pintoselectricfencing.co.za, 1 pintosplumbing.co.za, 1 @@ -95651,6 +96203,7 @@ pisaggni.ch, 1 pisanpeikot.tk, 1 pisarzowa.tk, 1 pisatoday.it, 1 +piscesdwarf.com, 1 piscestrade.com, 1 piscine.roma.it, 1 piseach.be, 1 @@ -95672,6 +96225,7 @@ pit-stop-sto.tk, 1 pitaiatrade.com, 1 pitbooks.ga, 1 pitbullclub.tk, 1 +pitbullinu.io, 1 pitbullsecuritysolutions.ca, 1 pitch.com, 1 pitchforkunion.tk, 1 @@ -95695,6 +96249,7 @@ pitshift.com, 1 pitsstop.nu, 1 pitsundaorgan.tk, 1 pittmancentertn.gov, 1 +pittohio.com, 1 pittsburgtx.gov, 1 pittsvillemd.gov, 1 pitu.gov, 1 @@ -95863,6 +96418,7 @@ placker.com, 1 plagiarismcheck.org, 1 plagu.ee, 1 plagued.tk, 1 +plaid.com, 1 plainbulktshirts.co.za, 1 plainfieldil.gov, 1 plainfieldpolicenj.gov, 1 @@ -95887,6 +96443,7 @@ plan-immobilier.fr, 1 plan-it-events.de, 1 plan-und-los.de, 1 planafy.com, 1 +planbase.com, 1 planchasvertical.es, 1 plancke.io, 1 plandecorones.net, 1 @@ -95947,7 +96504,6 @@ planetsoftware.com.au, 1 planetstimes.com, 1 planettimer.com, 1 planetweb.tk, 1 -planhub.com, 1 planify.io, 0 planisanin.tk, 1 planiserin.tk, 1 @@ -95970,6 +96526,7 @@ plannedgrocery.com, 1 plannedlink.com, 1 planning.ga, 1 planning.nl, 1 +planningcenter.com, 1 planningsagenda.nl, 1 plano.gq, 1 planodesaude.net.br, 1 @@ -96049,6 +96606,7 @@ platinumalertsest.ga, 1 platinumcalendarest.ga, 1 platinumcat.info, 1 platinumgatesecurity.co.uk, 1 +platinumkids.com.br, 1 platinumsystems.biz, 1 platinumtalkers.ga, 1 platinumtalkest.ga, 1 @@ -96231,6 +96789,7 @@ plomberie-rivesud.ca, 1 plomin.tk, 1 plongee-phuket.fr, 1 ploof-cleaning.gr, 1 +plooij.it, 1 ploptec.tk, 1 plotbubble.com, 1 plothost.com, 1 @@ -96538,7 +97097,6 @@ podcrto.si, 1 podcrypters.ga, 1 podcryptest.ga, 1 podd.xyz, 1 -podeacontecer.com.br, 1 podemos.info, 1 poderososconjurosyamarres.com, 1 podia.com.gr, 0 @@ -96594,6 +97152,7 @@ pogljad-brest.tk, 1 pogodavolgograd.tk, 1 pogodok.tk, 1 pogomate.com, 1 +pogoswine.com, 1 pogotowie-komputerowe.tk, 1 pogotowiekomputeroweolsztyn.pl, 1 pogrebisky.net, 1 @@ -97095,7 +97654,6 @@ pornofilme.top, 1 pornogo.sex, 0 pornogo.tube, 1 pornohypnosis.tk, 1 -pornojimo.com, 1 pornokran.com, 1 pornomens.be, 1 pornomovies.mobi, 1 @@ -97238,6 +97796,7 @@ positivastudios.tk, 1 positive-thinking-for-you.com, 1 positive.com.cy, 1 positive.photography, 1 +positivecoach.org, 1 positivegeek.com, 1 positivenames.net, 1 positiveone.tk, 1 @@ -97325,6 +97884,7 @@ postmistress.email, 1 postmoderns.info, 1 postmusicologia.tk, 1 postn.eu, 1 +postnet.club, 1 postnext.com, 1 postolia.cf, 1 postoyanstvo.cf, 1 @@ -97352,7 +97912,6 @@ potatiz.com, 1 potato.im, 1 potatochip.tk, 1 potatodiet.ca, 1 -potatoinspirations.com, 1 potatolighting.com, 1 potatopro.com, 1 potatosouprecipe.ml, 1 @@ -97512,6 +98071,7 @@ powersport.lt, 1 powersubmitter.tk, 1 powersurgedatasystems.com, 1 powertecno.ml, 1 +powertofly.com, 1 powertoolsrater.net, 1 powertop.com, 1 powertrike.tk, 1 @@ -97704,9 +98264,11 @@ prazeremamamentar.com.br, 1 prc.gov, 1 prcarrier.tk, 1 prcsurvey.com, 1 +prd-use-device-api.azurewebsites.net, 1 prdashboard.tk, 1 pre-commit.ci, 1 pre-renewal.com, 1 +prebas.com, 1 precambridge.tk, 1 precedecaritas.com.br, 1 precedencemedia.com, 1 @@ -97832,6 +98394,7 @@ premiumweb.co.id, 1 premiumwebdesign.it, 1 premkumar.net, 1 premsarswat.me, 1 +premstarinc.com, 1 premtech.nl, 1 prensaalterna.com, 1 prensahispana.ga, 1 @@ -97893,10 +98456,12 @@ presscenter.jp, 1 presscommunity.tk, 1 presscuozzo.com, 1 presseagrume.net, 1 +pressed.com, 1 pressemeddelelse.dk, 1 pressertech.com, 1 presses.ch, 0 pressfreedomtracker.us, 1 +pressidium.com, 1 pressimize.com, 1 pressnet.tk, 1 pressnetwork.tk, 1 @@ -98104,6 +98669,7 @@ printmydesigns.ml, 1 printpoint.tk, 1 printrr.ca, 1 printshopbd.com, 1 +printtolife.com.au, 1 printus.pro, 1 printwasteminimizer.com, 1 prinz.gg, 1 @@ -98364,6 +98930,7 @@ production.vn, 1 productionscime.com, 1 productiv.com, 1 productive-garden.com, 1 +productive.io, 1 productivemachine.net, 1 productosdeteruel.es, 0 productosquimicosrd.com, 1 @@ -98437,6 +99004,7 @@ profit24.ml, 1 profitable-textilien.ch, 1 profitablewebprojects.com, 1 profitdouble.tk, 1 +profithuntershub.com, 1 profitmiracle.tk, 1 profitopia.de, 1 profkom.tk, 1 @@ -98480,7 +99048,6 @@ prognozis.cf, 1 progolfjourney.com, 1 progolfnow.com, 1 progon.cf, 1 -prograce.info, 1 program-and.work, 1 programadaaninha.com.br, 1 programador-web-freelance.es, 1 @@ -98519,6 +99086,7 @@ progresswww.nl, 1 progresszivnyomda.hu, 1 progrillcleaning.com, 1 progtime.net, 1 +prohashing.com, 1 prohelpers.tk, 1 prohibition.tk, 1 prohost24.tk, 1 @@ -98558,7 +99126,6 @@ projectimagine.com, 1 projectinferno.tk, 1 projectinnovation.org, 1 projection.gq, 1 -projectionpictures.com, 0 projectl1b1t1na.tk, 1 projectlarix.com, 1 projectleague.lol, 1 @@ -98591,6 +99158,8 @@ projekt-allianz.de, 1 projekt-manufaktur.de, 1 projekt-umbriel.de, 1 projekt-wild.tk, 1 +projektanfrage24.de, 1 +projektanfragen24.de, 1 projektarbeit-projektplanung.de, 1 projektentwicklung-westfalen.de, 1 projektmydlo.pl, 1 @@ -98677,6 +99246,7 @@ prontointerventoimmediato.it, 1 prontossl.com, 1 proofofwork.art, 1 proofpoint.com, 1 +proofpointessentials.com, 1 proofwiki.org, 1 proos.nl, 1 propacquisitions.com, 1 @@ -98805,6 +99375,8 @@ proteccaocivil.com, 1 proteccaocivil.net, 1 proteccaocivil.org, 1 protech.ge, 1 +protecht.com.au, 1 +protechtgroup.com, 1 proteco.sk, 1 protectasecurity.pe, 1 protectedpayments.net, 1 @@ -98822,6 +99394,7 @@ proteh.com.ua, 1 protein-riegel-test.de, 1 proteinreport.org, 1 protek.tk, 1 +protenus.com, 1 proteogenix-products.com, 1 proteogenix.science, 1 protestantsegemeentekaag.nl, 1 @@ -98941,6 +99514,7 @@ prushka.ml, 1 prushka.tk, 1 pruve.it, 1 prvcy.one, 1 +prvnirodinna.cz, 1 prwid.com, 1 prwid.gov, 1 pry.co, 1 @@ -99693,7 +100267,6 @@ qapital.com, 0 qaq.cloud, 1 qaq.jp, 1 qarto.com, 1 -qasa2ed.online, 1 qask.ml, 1 qatarmegadeals.com, 1 qatartimes.tk, 1 @@ -99704,6 +100277,8 @@ qazweek.kz, 0 qbasic.tk, 1 qbasicsite.tk, 1 qbd.eu, 1 +qbicheating.co.uk, 1 +qbicwashrooms.co.uk, 1 qbit.website, 1 qbookstaxpros.com, 1 qbrix.dk, 1 @@ -100262,6 +100837,7 @@ quotable.ga, 1 quotaverified.com, 1 quoteidiot.com, 1 quoteoftheday300.ga, 1 +quotescover.com, 1 quotesnsayings.net, 1 quotesofgta.tk, 1 quotev.com, 1 @@ -100550,6 +101126,7 @@ radiocusco.tk, 1 radiodance.tk, 1 radiodarkwolf.tk, 1 radiodeluxe.ml, 1 +radiodetali-gold.ru, 1 radiodeutsch.com, 1 radiodevrijheid.tk, 1 radiodiagonal.tk, 1 @@ -100787,6 +101364,7 @@ rainbowbrains.com, 1 rainbowcomputer.tk, 1 rainbowflowers.co.uk, 0 rainbowinflatables.co.uk, 1 +rainbowlaserspewpew.xyz, 1 rainbowloompattern.com, 1 rainbowloompatterns.com, 1 rainbowmath.tk, 1 @@ -100943,6 +101521,7 @@ random-project.com, 1 random-samplings.org, 1 random-stat.work, 1 random.org, 1 +randomactsofkindness.org, 1 randomadversary.com, 1 randomarticle.ml, 1 randombit.eu, 0 @@ -101166,6 +101745,7 @@ ravenousravendesign.com, 1 ravenrealms.tk, 1 ravenrockrp.com, 1 ravenstonejeweler.com, 1 +raventechnology.es, 1 ravenx.me, 1 raveseguros.com, 1 ravesteijn.nl, 1 @@ -101426,7 +102006,6 @@ readingrats.de, 1 readlater.de, 1 readless.cf, 1 readmynews.cf, 1 -readnow.in, 1 readouble.com, 0 readpages.gq, 1 readtome.co.in, 1 @@ -101435,6 +102014,7 @@ ready2learn.eu, 1 ready4bf.tk, 1 ready5g.net, 1 readyblinds.com.au, 1 +readycentral.com, 1 readychurchsites.com, 1 readycolorado.gov, 1 readydedis.com, 1 @@ -101672,6 +102252,7 @@ recoa.tk, 1 recoilbox.com, 1 recolic.cc, 1 recolic.net, 1 +recollective.com, 1 recolor.ml, 1 recomendador.cl, 1 recommend.pro, 1 @@ -101713,7 +102294,6 @@ rectecforum.com, 1 rectoraudiparts.com, 1 recuperation-points.fr, 1 recuperatucuentaya.com, 1 -recuperatufigura.com, 1 recupero.it, 1 recuperodatiraidfastec.it, 1 recurly.com, 1 @@ -101743,7 +102323,6 @@ red-trigger.net, 1 red-wine.tk, 1 red031000.com, 1 red1it.net, 1 -red2fred2.com, 1 redable.hosting, 1 redable.nl, 1 redacted.finance, 1 @@ -101792,6 +102371,7 @@ reddingsbrigade-zwolle.nl, 1 reddiseals.com, 0 reddit.com, 1 reddit2kindle.com, 1 +redditinc.com, 1 reddraggone9.com, 1 reddyai.com, 1 rede-reim.de, 1 @@ -101955,6 +102535,7 @@ reezocar.be, 1 reezocar.com, 1 ref1oct.nl, 1 refalm.com, 1 +refbanners.com, 1 refer.codes, 1 referat.club, 1 referati.tk, 1 @@ -101984,6 +102565,8 @@ reform.ee, 1 reformation.financial, 1 reformatreality.com, 1 refpa.top, 1 +refpanjoke.com, 1 +refpaydc.top, 1 refresh-dc.org, 1 refreshcartridges.co.uk, 1 refreshingserum.com, 1 @@ -102064,6 +102647,7 @@ regiosalland.nl, 1 regiovertrieb.de, 0 regis.tech, 0 regisearch.co.uk, 1 +registech.com, 1 register.to, 0 registerex.me, 1 registerforevent.co.uk, 1 @@ -102108,11 +102692,12 @@ rehasport-marketing.de, 1 rehau-ua.com, 1 reher.pro, 1 rehobothma.gov, 1 -rei.codes, 0 rei.ki, 1 reichardt-home.goip.de, 1 reichel-steinmetz.de, 1 reichelt-cloud.de, 1 +reichelt.com, 1 +reichelt.de, 1 reichl-online.net, 1 reiciunas.lt, 1 reidasbombas.com, 1 @@ -102135,6 +102720,7 @@ reimaginebelonging.de, 1 reimaginebelonging.org, 0 reimann.me, 1 reimers.de, 1 +reimsmediaslibres.info, 1 reimu.asia, 1 rein.kr, 1 reinaertvandecruys.com, 1 @@ -102162,6 +102748,7 @@ reintjens.de, 1 reinventersontravail.com, 0 reinventetoi.com, 0 reirei.cc, 1 +reisdemuthwiltgen.com, 1 reisen.ga, 1 reisenbauer.at, 0 reiseversicherung-werner-hahn.de, 1 @@ -102332,6 +102919,7 @@ remonto.tk, 1 remontpc.cf, 1 remontpc.tk, 1 remontportal.tk, 1 +remontstrong.ru, 1 remora.tk, 1 remorques-du-nord.fr, 1 remorse.ga, 1 @@ -102586,6 +103174,7 @@ resepimok.com, 0 resepsimbok.com, 1 reservabiosferavalledelcabriel.com, 1 reservadecitasonline.com, 1 +reserveandreceive.com, 1 reservetonshift.com, 1 reservilaisliitto.fi, 1 resfriatech.com.br, 1 @@ -102846,7 +103435,6 @@ revers.tk, 1 reverse1999.wiki, 1 reverseaustralia.com, 1 reversecanada.com, 1 -reversecrucifixkm.altervista.org, 1 reversedns.tk, 1 reverseloansolutions.com, 1 reverselookupphone.us, 1 @@ -102872,6 +103460,7 @@ reviewpipe.com, 1 reviews.anime.my, 0 reviewsonline.ml, 1 reviewu.ca, 1 +revionics.com, 1 reviquimicos.com, 1 revis-online.cf, 1 revis-online.gq, 1 @@ -103012,6 +103601,7 @@ rhaniegghesoftwaresecurity.be, 1 rhcteam.com, 1 rhd-instruments.com, 1 rhd-instruments.de, 1 +rhdiscovery.com, 1 rhees.nl, 1 rheijmans.com, 1 rheijmans.email, 1 @@ -103053,6 +103643,7 @@ rhrli.com, 1 rhubarb.land, 1 rhumblineadvisers.com, 1 rhwebdesigns.co.uk, 1 +rhwonline.de, 1 rhye.tk, 1 rhyme.com, 1 rhymesofreason.com, 1 @@ -103088,7 +103679,7 @@ ribccs.com, 1 ribdigital.com, 0 ribella.net, 1 riberasalines.cat, 1 -ribes.design, 1 +ribes.design, 0 ribims.de, 1 ribit4u.co.il, 1 ribmountainwi.gov, 1 @@ -103346,6 +103937,7 @@ ripp-it.com, 1 ripper.store, 1 ripple.com, 0 ripplemarkeg.com, 0 +ripplematch.com, 1 ripplenews.club, 1 ripplenews.co, 1 ripplenews.io, 1 @@ -103414,6 +104006,7 @@ riteboost.com, 1 ritel.nl, 1 ritense.com, 1 ritense.nl, 1 +ritepriceheatingcooling.com.au, 1 ritepriceroofing.com.au, 1 riteway.rocks, 1 ritex-shop.ru, 1 @@ -103440,7 +104033,6 @@ rivenmains.com, 1 rivennero.com, 1 river-rest.com, 1 river.gq, 1 -riverbanktearooms.co.uk, 1 riverbednetflowsupport.com, 1 riverbendroofingnd.com, 1 rivercitybni.com, 1 @@ -103603,7 +104195,6 @@ robersonaudio.tk, 1 robert-adam.de, 1 robert-ewert.tk, 1 robert-flynn.de, 1 -robert-foster.com, 1 robert-reisemobil.de, 1 robert-victor.co.uk, 1 robert-wiek-transporte.de, 1 @@ -103668,7 +104259,6 @@ robinwill.de, 1 robinwinslow.uk, 1 robinzone.ua, 1 robison.pro, 1 -robjager-fotografie.nl, 1 robkish.life, 1 roblog.tk, 1 robloxenthusiasts.ga, 1 @@ -103715,6 +104305,7 @@ roc-reo.tk, 1 roc-taiwan.su, 1 roc-taiwan.taipei, 1 roc-tw.tw, 1 +roc.gov.au, 1 rocabot.ddns.net, 1 rochakhand-knitcraft.com.np, 1 rochcloud.cf, 1 @@ -103787,7 +104378,6 @@ rockyford-co.gov, 1 rockymountaininsurancecenter.com, 1 rockymountainspice.com, 1 rockyourlife.gq, 1 -rocsole.com, 1 rocssti.net, 1 rodab.party, 1 rodafe.sk, 1 @@ -104140,6 +104730,7 @@ roryneville.com, 1 rosa-spain.tk, 1 rosabellas.co.uk, 1 rosabrasiv.ga, 1 +rosacosmos.tn, 1 rosaflorbijoux.com.br, 1 rosahijab.com, 1 rosakkreditatsiya-forum.ru, 1 @@ -104227,6 +104818,7 @@ rostov-aikido.tk, 1 rostov-arena.ml, 1 rostov-avia.ru, 0 rostov.cf, 1 +rosty.sh, 1 roswellcity.tk, 1 roszdravnadzor.gov.ru, 1 rot256.io, 1 @@ -104386,13 +104978,17 @@ royal876.com, 1 royal877.com, 1 royal88.com, 1 royal88.tech, 1 +royal880.com, 1 royal881.com, 1 +royal8811.com, 1 royal882.com, 1 +royal8822.com, 1 royal883.com, 1 royal885.com, 1 royal886.com, 1 royal8866.com, 1 royal887.com, 1 +royal8881.com, 1 royal889.com, 1 royal896.com, 1 royal898.com, 1 @@ -104488,6 +105084,7 @@ rpschultz.de, 1 rpus.co, 1 rpy.xyz, 1 rq-labo.jp, 1 +rqfperformancehorses.com, 1 rr30019.com, 1 rr361.de, 1 rr5197.co, 1 @@ -104508,7 +105105,6 @@ rrdtool.com, 1 rrg-partner.ch, 0 rritv.com, 1 rrmac.ml, 1 -rrmiran.com, 1 rro.rs, 1 rrssww.space, 1 rrteam.de, 1 @@ -104815,6 +105411,7 @@ rumtaste.com, 1 rumtaste.de, 1 rumus.co.id, 1 run-it-direct.co.uk, 1 +run.vn, 1 runagain.ch, 0 runame.ml, 1 runar-data.de, 1 @@ -105068,6 +105665,7 @@ ryananeff.com, 1 ryanbritton.com, 1 ryanclemmer.com, 1 ryancmassey.com, 1 +ryancompanies.com, 1 ryandewsbury.co.uk, 1 ryanfamily.net.au, 1 ryanhowell.io, 1 @@ -105176,6 +105774,7 @@ s3file.ddns.net, 1 s3gfault.com, 1 s3lph.me, 1 s3w.es, 1 +s3waas.gov.in, 1 s402.de, 1 s404.de, 1 s44.eu, 1 @@ -105192,7 +105791,6 @@ s550.cc, 0 s551.cc, 0 s552.cc, 0 s553.cc, 0 -s554.cc, 0 s556.cc, 0 s557.cc, 0 s558.cc, 0 @@ -105296,6 +105894,7 @@ sacred-knights.net, 1 sacredart-murals.co.uk, 1 sacredheart-cliftonheights.net, 1 sacredheartbath.org, 1 +sacredmessages.net, 1 sacredsecondhandbooks.com.au, 1 sacrome.com, 1 sacrosanctus.tk, 1 @@ -105828,7 +106427,6 @@ sambaash.com, 1 sambeso.net, 1 sambot22.tk, 1 sambuchanan.tk, 1 -sambus.com, 1 samclarke.com, 1 samdev.io, 1 samedamci.com, 1 @@ -105941,10 +106539,15 @@ sanandreasstories.com, 1 sanantoniolocksmithtx.com, 1 sanapaino.fi, 1 sanasport.at, 1 +sanasport.be, 1 +sanasport.bg, 1 sanasport.cz, 1 sanasport.de, 1 +sanasport.fr, 1 sanasport.hu, 1 +sanasport.it, 1 sanasport.pl, 1 +sanasport.si, 1 sanasport.sk, 1 sanates.cz, 1 sanatfilan.com, 0 @@ -106047,6 +106650,7 @@ sanificazioni.roma.it, 1 sanikapandit.com, 1 sanin.gq, 1 sanisafepro.com, 1 +sanitaer-heinze.com, 1 sanitaer-notdienst-zentrale.de, 1 sanitairwinkel.be, 1 sanitairwinkel.com, 1 @@ -106062,6 +106666,7 @@ sanityrant.cf, 1 sanityrant.ml, 1 sanjacintotitle.com, 1 sanjanaherath.cf, 1 +sanjaymenon.xyz, 1 sanjosecolorectal.com, 1 sanjosecostarica.org, 1 sanjoweb.tk, 1 @@ -106094,6 +106699,7 @@ sanpatigroup.jp, 1 sanpatriciocountytx.gov, 1 sanpham-balea.org, 1 sanqinyinshi.com.cn, 1 +sanray73.ru, 1 sans-hotel.com, 1 sansairyu-kuyoukai.com, 1 sansdict.ml, 1 @@ -106227,6 +106833,7 @@ sarahmodel.tk, 1 sarahneumann.tk, 1 sarahplusdrei.de, 1 sarahshabrina.tk, 1 +sarahtamsin.com, 1 sarahvanessen.tk, 1 sarahwellington.com, 1 sarahwikeley.co.uk, 1 @@ -106236,7 +106843,6 @@ saranamayyappa.tk, 1 sarariman.com, 1 saraskins.tk, 1 sarasotadentistry.com, 1 -sarasotaplasticsurgery.com, 1 sarasotaroboticurology.com, 1 saraton-kasalligi.cf, 1 saraton-kasalligi.ml, 1 @@ -106794,11 +107400,13 @@ schlachter.ca, 1 schlaf.guru, 1 schlafteq.com, 1 schlagenhauf.info, 0 +schlager.de, 1 schlagma.de, 0 schlappmoebel.de, 1 schlarb.eu, 1 schlechtewitze.com, 1 schleifenbaum.org, 1 +schlepaaz.de, 1 schlitzbergers.com, 1 schlopolis.tk, 1 schlossanger.de, 1 @@ -106836,12 +107444,14 @@ schneidr.de, 1 schneids.me, 1 schnellno.de, 1 schnippering.com, 1 +schnism.net, 1 schnitzel-und-co.de, 1 schnouki.net, 1 schnuckenhof-wesseloh.de, 1 schnyder-werbung.ch, 0 schody-rozycki.pl, 1 schoenstatt-fathers.link, 1 +schoenstatt-fathers.us, 1 schoenstatt.link, 1 schoepski.de, 1 schoffelcountry.com, 1 @@ -107052,6 +107662,7 @@ scienceweb.tk, 1 sciencex.com, 1 sciencexpo.org.za, 1 scientia.ga, 1 +scientific-editing.info, 1 scientific-socialism.cf, 1 scientific-socialism.ga, 1 scientific-socialism.ml, 1 @@ -107222,6 +107833,7 @@ screenfox.eu, 1 screenfox.info, 1 screenfox.net, 1 screeningmaster.jp, 1 +screeningxchange.com, 1 screenmachine.com, 1 screenpublisher.com, 1 screensizemap.com, 1 @@ -107232,6 +107844,7 @@ screenzy.io, 1 screvencountyga.gov, 1 scribbler.tk, 1 scribd.com, 1 +scributors.com, 1 scripo-bay.com, 1 script-sign.com, 1 script.google.com, 1 @@ -107340,6 +107953,7 @@ se-booster.com, 1 se-center.pl, 1 se-live.org, 1 se-theories.org, 1 +se.au, 1 se.com, 1 se.gg, 1 se.search.yahoo.com, 0 @@ -107401,6 +108015,7 @@ searchgurus.ca, 1 searchmore.dk, 1 searchpartners.dk, 1 searchperfumes.ga, 1 +searchshops.com, 1 searchtechnology.tk, 1 searchwork.tk, 1 searchzone.ch, 0 @@ -107426,6 +108041,7 @@ seasistent.tk, 1 season.moe, 1 seasons.nu, 0 seasonsboutique.com.au, 1 +seasonsof.berlin, 1 seaspineortho.com, 1 seatbeltpledge.com, 1 seatinglane2u.com, 1 @@ -107621,7 +108237,6 @@ secureover.com, 1 secureprivacy101.org, 1 secureqbplugin.com, 1 securerepository.net, 1 -securesense.nl, 1 securesite.pro, 1 securesiteaccess.com, 1 securesuite.co.uk, 1 @@ -107717,6 +108332,7 @@ seedno.de, 1 seedsofangelica.net, 1 seedspark.com, 1 seedsystemcoaching.com, 1 +seefeldbilder.at, 1 seehisnudes.com, 0 seeinred.tk, 1 seejay.me, 1 @@ -107727,6 +108343,7 @@ seeksupply.ga, 1 seekthe.net, 1 seekweb.com, 1 seeme.ai, 1 +seeme.baby, 1 seemeagain.com, 1 seemomclick.com, 1 seemorehere.tk, 1 @@ -107946,6 +108563,7 @@ semenov.ml, 1 semenov.su, 1 semenserang.com, 1 sementes.gratis, 1 +semestaindovest.co.id, 1 semesur.com, 1 semi.social, 1 semianalog.com, 1 @@ -108003,7 +108621,6 @@ sendaiouji.com, 1 sendbird.com, 1 sendbox.cz, 1 sender.party, 1 -sender.services, 1 senderismoinfantil.tk, 1 sendigperu.com, 1 sendingbee.com, 1 @@ -108168,7 +108785,6 @@ seomaton.org, 1 seomaxion.com, 1 seomedo.com, 1 seomen.biz, 1 -seomik.dk, 1 seomoft.com, 1 seomonk.com, 1 seonaut.org, 1 @@ -108466,13 +109082,13 @@ servicesneo.com, 1 servicesnetpro.com, 1 servicespot.ca, 1 servicestechnologiquesam.ca, 1 -servicevie.com, 1 serviciales.com, 1 servicii-funerare.tk, 1 serviciodebarralibreparaeventos.com, 1 serviciodigitalweb.com, 1 servicios-electricos.com, 1 serviciosfncs.com, 1 +serviciotecnicoencomputacion.com.ve, 1 servida.ch, 1 servietten-grosshandel.at, 1 servietten-grosshandel.be, 1 @@ -108506,6 +109122,7 @@ servus.ca, 1 servx.org, 1 serw.org, 1 serwetki-papierowe.pl, 1 +serwis-militarny.net, 1 serwis-telewizorow.pl, 1 serwis-wroclaw.pl, 1 serwistomy.pl, 1 @@ -108898,6 +109515,7 @@ shantitsafar.com, 1 shanus.in, 0 shanxia.com, 1 shanxiapark.com, 1 +shanyi.space, 1 shaolin-kungfu.tk, 1 shaoxia.xyz, 0 shape.pink, 1 @@ -108963,6 +109581,7 @@ sharking.gq, 1 sharko.tk, 1 sharkpaint.tk, 1 sharks.football, 1 +sharkstriker.com, 1 sharmafamily.tk, 1 sharmalaw.com, 1 sharondavale.org, 1 @@ -109073,7 +109692,6 @@ shellavartanian.tk, 1 shellcon.io, 1 shellcore.fr, 1 shellday.cc, 1 -shelleystoybox.com, 1 shellfire.de, 1 shellgame.io, 1 shelljuggler.com, 0 @@ -109229,6 +109847,7 @@ shinsyo.com, 1 shinta.ro, 1 shintoism.com, 1 shinuytodaati.co.il, 1 +shinycleankitchen.com, 1 shinyhappydoggy.com, 1 shinyoko-saisyuusyou.com, 1 shinypebble.uk, 1 @@ -109378,6 +109997,7 @@ shootpooloklahoma.com, 1 shootsame.tk, 1 shop-cosmetic.tk, 1 shop-cosmetics.tk, 1 +shop-eldorado.tk, 1 shop-hellsheadbangers.com, 1 shop-lingerie.tk, 1 shop-links.co, 1 @@ -109403,6 +110023,7 @@ shopandworld.net, 1 shopapi.cz, 1 shoparbonne.co.uk, 1 shopatkei.com, 1 +shopbabymonitors.gq, 1 shopbackyardpro.com, 1 shopbakersnook.com, 1 shopbysarah.com, 1 @@ -109434,6 +110055,7 @@ shoplistic.com, 1 shoplogcap.com, 1 shoplus.com.tw, 1 shoplyft.co.za, 1 +shopmalinka.cf, 1 shopminut.com, 1 shopnguyenlieumypham.com, 1 shopocratic.com, 1 @@ -109625,13 +110247,14 @@ shorifhussain.tk, 1 shorinkarate.tk, 1 shork.space, 1 shornehasim.co.il, 1 +short-games.gq, 1 short-term-plans.com, 1 short.io, 1 shortaudition.com, 1 shortaudition.net, 1 shortaudition.tv, 1 shortbread.systems, 1 -shortcdn.com, 1 +shortcircuit-online.tk, 1 shortcut-link.ga, 1 shortcut.pw, 1 shorted.one, 1 @@ -109679,6 +110302,7 @@ shower.im, 1 showersnet.com, 1 showf.om, 1 showfom.sb, 1 +showgirls.ga, 1 showmax.com, 1 showmeengland.co.uk, 1 showmethescore.cf, 1 @@ -109692,6 +110316,7 @@ showroom113.ru, 1 showroombelcorp.com, 1 showslivki.tk, 1 showslot.com, 1 +showsnob.com, 1 showsonar.com, 1 shoyuf.top, 1 shpil.by, 1 @@ -109703,13 +110328,16 @@ shrapnel.com, 1 shrapnel.ga, 1 shraymonks.com, 1 shred.ch, 0 +shredder.tk, 1 shredoptics.ch, 0 shreyansh26.me, 1 shrike.me, 0 shrimpcam.pw, 1 shrimpnews.tk, 1 shrines.ga, 1 +shrines.tk, 1 shrinidhiclinic.in, 1 +shrinker.tk, 1 shrinkhub.com, 1 shroomery.com, 1 shroomery.net, 1 @@ -109744,6 +110372,7 @@ shufflecube.tk, 1 shufflemall.com, 1 shufflemix.tk, 1 shuffleradio.nl, 1 +shuffleware.tk, 1 shuftipro.com, 1 shugarmanpsychiatric.com, 1 shugo.net, 1 @@ -109754,8 +110383,10 @@ shuizilan.com, 1 shulan.moe, 1 shuletime.ml, 1 shulker.store, 1 +shulman.tk, 1 shulyaka.org.ru, 1 shuma.ga, 1 +shumnyj-istochnik.tk, 1 shumov.tk, 1 shunliandongli.cn, 1 shunliandongli.com, 1 @@ -109774,6 +110405,7 @@ shutupbabyiknowit.party, 1 shuvodeep.de, 1 shux.pro, 1 shuzicai.cn, 1 +shvedskie-stenki.ml, 1 shwemyanmarmalay.com, 1 shwrm.ch, 1 shymeck.pw, 1 @@ -109786,6 +110418,7 @@ si2b.fr, 1 sia.one, 1 siadlak.com, 1 siaggiusta.com, 1 +sialis.tk, 1 sialtv.pk, 1 siamdevsqua.re, 1 siamdevsquare.com, 1 @@ -109793,7 +110426,6 @@ siamega.com, 1 siamesecatsguide.com, 1 siamojo.com, 1 siamrehab.com, 1 -siamsnus.com, 1 siamwatercraftpromotion.com, 1 sianjhon.com, 1 siatris.qc.ca, 1 @@ -109803,11 +110435,14 @@ siberas.de, 1 siberia.gq, 1 siberiactiva.com, 1 siberiancatsinformation.com, 1 +siberianhealth.com, 1 siberianhuskypets.com, 1 siberianhuskytraining.net, 1 siberiaserver.ga, 1 siberkulupler.com, 1 +sibernet.tk, 1 sibfk.org, 1 +sibirium-red.ga, 1 sibleycounty.gov, 1 sibleyla.gov, 1 sibnerpartie.tk, 1 @@ -109839,6 +110474,8 @@ sidari.tk, 1 sidatbacklink.tk, 1 siddhamehta.tk, 1 siddigsami.com, 1 +sidecredit.ga, 1 +sidefx.com, 1 sideleau.com, 1 sidelka-tver.ru, 1 sidema.be, 1 @@ -109871,7 +110508,9 @@ siebeve.be, 1 siecledigital.fr, 1 siecon-it.com, 1 siegemund-frankfurt.de, 1 +siegprod.tk, 1 sieh.es, 1 +sieiro.tk, 1 siel.nl, 1 sielsystems.nl, 1 siemencaes.tk, 1 @@ -109970,6 +110609,7 @@ signomatic.com, 1 signomatic.com.au, 1 signomatic.ie, 1 signpath.io, 1 +signrequest.com, 1 signrightsigns.co.uk, 1 signsdance.uk, 1 signslabelstapesandmore.com, 0 @@ -110000,6 +110640,7 @@ sikayetvar.com, 0 sike.org, 1 sikecikcomel.com, 1 sikevux.se, 1 +sikkasoft.com, 1 sikkerwindows.dk, 1 sikkind.com, 0 siku-shop.ch, 1 @@ -110343,6 +110984,7 @@ simplyheadwear.com.au, 1 simplyhelen.de, 1 simplyirfan.com, 1 simplyjet.tk, 1 +simplymeatsmoking.com, 1 simplymidget.tk, 1 simplyml.com, 1 simplyowners.net, 1 @@ -110369,6 +111011,7 @@ simulise.cloud, 1 simulise.com, 1 simulise.help, 1 simulping.com, 1 +simulus.hr, 1 simulus.technology, 1 simumiehet.com, 1 simus.fr, 1 @@ -110817,6 +111460,8 @@ skidka.by, 1 skidki-ru.cf, 1 skidzun.de, 1 skifairview.com, 1 +skiff.city, 1 +skiff.com, 1 skiff.town, 1 skiforlight.ca, 1 skifttiljutlanderbank.dk, 1 @@ -110954,6 +111599,7 @@ skrin.ru, 1 skripta.tk, 1 skriptorium.de, 1 skrivargarden-nes.cf, 1 +skrivebeskyttet.dk, 1 skrivebordet.tk, 1 skrprojects.com.au, 1 skrsv.net, 1 @@ -111012,6 +111658,7 @@ skycmd.net, 1 skyder.com.mx, 0 skyder.mx, 0 skyderby.ru, 1 +skydivegeronimo.com.au, 1 skydiverapp.com, 1 skydiverecuador.com, 1 skydivingexperiences.co.uk, 1 @@ -111077,8 +111724,12 @@ skyrieptravel.com, 1 skyrocket.site, 1 skyrosconsulting.com, 1 skys-entertainment.com, 1 +skyscanner.ca, 1 skyscanner.co.in, 1 skyscanner.com, 1 +skyscanner.com.au, 1 +skyscanner.com.hk, 1 +skyscanner.fr, 1 skyscanner.gg, 1 skyscanner.net, 1 skyscanner.pt, 1 @@ -111160,7 +111811,6 @@ slb.ru, 1 slbknives.com, 1 slc.is, 0 slcdn.net, 1 -sld08.com, 1 sldev.ovh, 1 sldlcdn.com, 1 slechtereview.nl, 1 @@ -111583,6 +112233,7 @@ smithcountyelectiontn.gov, 1 smithcountyms.gov, 1 smithcountytxtaxrates.gov, 1 smithf.red, 1 +smithikakart.in, 1 smithings.com, 1 smithsanchez.com, 1 smithsstational-fpd.gov, 1 @@ -111609,7 +112260,6 @@ smmpanelbul.com, 1 smmpanelweb.com, 1 smmpropaganda.ru, 1 smnz.de, 1 -smoe.cc, 1 smoivez.tk, 1 smokeanddram.org, 1 smokeandmirrors.agency, 1 @@ -111859,6 +112509,8 @@ sns-tg.pl, 1 sns.hu, 1 snsdomain.com, 1 snsirius.cf, 1 +snsp.nl, 1 +snsp.ro, 1 sntial.co.za, 1 snuffstore.de, 1 snukep.kr, 1 @@ -112024,6 +112676,7 @@ soderestore.com, 1 sodermans.com, 1 soderparr.com, 1 sodexam.pro, 1 +sodexoclub.com.mx, 1 sodi.gent, 1 sodi.nl, 1 sodigent.be, 1 @@ -112056,7 +112709,6 @@ sofianeves.tk, 1 sofias.tk, 1 sofiavanmoorsel.com, 1 sofibox.com, 1 -sofidelshop.blog, 1 sofiesteinfeld.com, 1 sofiesteinfeld.de, 1 sofiesteinfeld.org, 1 @@ -112092,6 +112744,7 @@ softonic.com.br, 1 softonic.com.tr, 1 softonic.jp, 1 softonic.pl, 1 +softonic.ru, 1 softonic.vn, 1 softonline.net, 1 softowe.com, 1 @@ -112120,6 +112773,8 @@ softwaregeek.nl, 1 softwarepara.net, 1 softwarepatenten.tk, 1 softwarepixie.com, 1 +softwaresecurity2dezit.herokuapp.com, 1 +softwaresecurity2dezitapi.herokuapp.com, 1 softwaresecurityandradefernando.be, 1 softwaresolved.com, 1 softwaterinc.com, 1 @@ -112263,6 +112918,7 @@ solitaryride.com, 1 soliten.de, 1 soliujing.ml, 1 soliujing.top, 1 +solium.com, 1 solliv.com, 1 solmek.co.uk, 1 solnascentepapelaria.com.br, 1 @@ -112573,6 +113229,7 @@ soruly.com, 1 soruly.io, 1 soruly.net, 1 soruly.org, 1 +sorunrehberi.com, 1 sorveglianza.roma.it, 1 sorwi.gov, 1 sorx.tech, 1 @@ -112687,7 +113344,6 @@ sound-recording.org, 1 sound-wave.tk, 1 sound.as, 1 soundabout.nl, 1 -soundar.eu.org, 1 soundbase.tk, 1 soundblast.tk, 1 soundcache.tk, 1 @@ -112990,6 +113646,7 @@ sparkasse.de, 1 sparkbase.cn, 1 sparkforautism.org, 1 sparkl.fm, 1 +sparklabs.com, 1 sparklark.com, 1 sparklatvia.lv, 1 sparklebastard.com, 1 @@ -113037,6 +113694,7 @@ spazturtle.co.uk, 1 spazzacamino.roma.it, 1 spb-xiaomi.ru, 1 spb.ooo, 0 +spbet99.com, 1 spbot.ml, 1 spbven.com, 1 spcollege.edu, 1 @@ -113213,6 +113871,7 @@ spidermail.tk, 1 spidermanitalia.tk, 1 spidernet.tk, 1 spideroak.com, 1 +spiderprotect.com, 1 spiders.org.ua, 1 spidersweb.cf, 1 spidersweb.ga, 1 @@ -113393,7 +114052,6 @@ sportmundschutz-info.de, 1 sportnesia.com, 1 sportnn.tk, 1 sporto24.ml, 1 -sportosistemos.lt, 1 sportovni.site, 1 sportovnidum.cz, 1 sportparks.com, 1 @@ -113500,6 +114158,7 @@ spreed.me, 1 spricknet.de, 1 sprietlopen.tk, 1 sprillerer.tk, 1 +springbaystudio.com, 1 springdalewi.gov, 1 springerundpartner.de, 1 springfieldbricks.com, 0 @@ -113805,7 +114464,6 @@ sslsurvey.de, 1 ssm-techmarketing.tk, 1 ssma.it, 1 ssmato.me, 1 -ssmca.com, 1 ssmd.tk, 1 ssmic.com, 0 ssmm88.cc, 1 @@ -113823,6 +114481,7 @@ ssready.io, 1 ssrfq.com, 1 ssrgov.cn, 1 ssrvpn.tech, 1 +sss.red, 1 ssshh.com, 1 ssslelectricfencing.co.za, 1 ssslgaragedoors.co.za, 1 @@ -113870,6 +114529,7 @@ stackunderflow.com, 1 stacky.me, 1 stad.gent, 1 stadgent.be, 1 +stadiamaps.com, 1 stadionmanager.com, 1 stadlwirt.at, 1 stadm.com, 1 @@ -113915,7 +114575,6 @@ staging-covid-games.herokuapp.com, 1 staging-scholar.tk, 1 stagingpepocoin.com, 1 stagoz.com, 1 -stagstickets.co.uk, 1 stahlen.dk, 1 stahlfors.com, 1 stahlp.dk, 1 @@ -114129,10 +114788,10 @@ startersiteweb.com, 1 startgeophysical.ga, 1 starthubs.uk, 1 starti.com.ua, 1 +startinganllcbusiness.com, 1 startingent.be, 1 startinop.com, 1 startlab.sk, 1 -startlak.hu, 1 startlap.es, 1 startlas.studio, 1 startle.cloud, 1 @@ -114203,6 +114862,7 @@ statelywork.com, 1 statemercantile.com.au, 1 staterun.tk, 1 stateserv.com, 1 +statesville.com, 1 statgram.me, 1 static-assets.io, 1 static-myfxee-808795.c.cdn77.org, 1 @@ -114308,7 +114968,6 @@ steamgifts.com, 1 steamid.net, 1 steamid.tools, 1 steamkeyget.ga, 1 -steamlevelmarket.com, 1 steamold.com, 0 steamosaic.com, 1 steampress.io, 1 @@ -114323,6 +114982,7 @@ steckel.cc, 1 stecos.co.uk, 1 stedb.eu, 1 stedbg.net, 1 +stedelijkorkestpurmerend.nl, 1 steebel.com.au, 1 steeble.com.au, 1 steef389.eu, 1 @@ -114668,6 +115328,7 @@ stileapp.com, 1 stilecop.com, 1 stilettobg.com, 1 stilingavonia.lt, 1 +stillcurtain.com, 1 stilldrunkfromyesterday.com, 1 stillwatertownshipmn.gov, 1 stillwell.me, 1 @@ -114696,6 +115357,7 @@ stirblaut.de, 1 stirling.co, 1 stisidores.org, 1 stitch.money, 1 +stitchfiddle.com, 1 stitchinprogress.com, 1 stjh.org.sg, 1 stjohncamden.com, 1 @@ -114720,7 +115382,6 @@ stkevin-stbenedict.org, 1 stkildaosteopathy.com.au, 1 stla.net, 1 stlautoenhancements.com, 1 -stlbosnians.com, 1 stleismann.com, 1 stleismann.de, 1 stlfc.gov, 1 @@ -114749,6 +115410,7 @@ stmarkseagirt.com, 1 stmarthachurch.com, 1 stmartinscatholicchurchlugbe.org, 1 stmaryextra.uk, 1 +stmarys-ca.edu, 1 stmaryscountymd.gov, 1 stmaryskutztown.com, 1 stmarysmumbra.com, 1 @@ -114961,6 +115623,7 @@ stormestudios.tk, 1 stormfest.tk, 1 stormhub.ml, 1 stormi.io, 1 +stormininnorman.com, 1 stormlab.tk, 1 stormrider.tk, 1 stormwatcher.org, 1 @@ -114981,6 +115644,7 @@ storymalayalam.com, 1 storyoneforty.com, 1 storysift.news, 1 storytea.top, 1 +storytel.net, 1 storytell.com, 1 storytellingforbusiness.com.au, 1 storytime.hu, 1 @@ -115176,6 +115840,7 @@ streetstunters.tk, 1 streetvendors.africa, 1 streetview.wien, 1 streetwitnessing.org, 1 +streetwitnessingchurch.com, 1 strefapi.com, 1 strefapi.pl, 1 strehl.tk, 1 @@ -115189,7 +115854,9 @@ stressexplained.com, 1 streszczenia.pl, 1 stretchpc.com, 1 striae.cf, 1 +striata.biz, 1 striata.com, 1 +striata.info, 1 striata.mobi, 1 striata.org, 1 striatadev.com, 1 @@ -115261,6 +115928,7 @@ stroomacties.nl, 1 stroopwafel.ch, 1 stropek.eu, 1 stropkova.eu, 1 +strosebelmar.com, 1 strosemausoleum.com, 1 stroseoflima.com, 1 strotmann.de, 1 @@ -115393,6 +116061,7 @@ studiodriban.com, 0 studioelo.com.br, 1 studioevent.tk, 1 studiofpvet.it, 1 +studiofutbol.com.ec, 1 studiogears.com, 1 studiograou.com, 1 studiohelder.fr, 0 @@ -115542,6 +116211,8 @@ stylewe.com, 1 stylewish.me, 1 stylezutra.com, 1 stylidafm.gr, 1 +stylight.com, 1 +stylight.de, 1 stylingstudio.ga, 1 stylistbazaar.com, 0 stylle.me, 1 @@ -115714,6 +116385,7 @@ sugos.gq, 1 sugos.ml, 1 suhaildawood.com, 1 suhost.com.br, 1 +suhost.site, 1 suicide.gq, 1 suicidegirls.cf, 1 suicidepreventioncenter.tk, 1 @@ -115883,6 +116555,7 @@ sunglassstyle.co.nz, 1 sungreen.info, 1 sunhaoxiang.net, 1 sunhills23.ru, 1 +sunho.net.tw, 1 suniru.com, 0 sunjiutuo.com, 1 sunjob.tk, 1 @@ -115959,6 +116632,7 @@ suomiheraa.com, 1 suomika.pl, 1 suourl.com, 0 supa.sexy, 1 +supasomsak.de, 1 supdajuice.tk, 1 supedio.com, 1 supedium.com, 1 @@ -115979,6 +116653,7 @@ super-o-blog.com, 1 super-trophy.de, 1 super11.nl, 1 super365.info, 1 +super365aa.com, 1 superaficionados.com, 1 superalem.org, 1 superbart.nl, 1 @@ -116267,6 +116942,7 @@ sustainability.gov, 1 sustainabilityknowledgegroup.com, 1 sustainabilitysociety.hk, 1 sustainableweb.dk, 1 +sustainalytics.com, 1 sustained.tk, 1 sustainoss.org, 1 sustc.ac.cn, 1 @@ -116320,6 +116996,7 @@ sv-ec-ditzingen.de, 1 sv-schody.cz, 1 sv-turm-hohenlimburg.de, 1 sv.search.yahoo.com, 0 +sv1862ruesselsheim.de, 1 sv1880-lichtenau.de, 0 sv443.net, 1 svager.cz, 1 @@ -116414,6 +117091,7 @@ svorcikova.cz, 1 svorkmofotball.tk, 1 svpe.de, 1 svpe.eu, 1 +svportalframe.com, 1 svrx.one, 1 svse.global, 1 svseglobal.com, 1 @@ -116477,6 +117155,7 @@ sweak.net, 1 sweat-shirts.tk, 1 sweatercon.com, 1 swecha.org, 1 +swedbank.com, 1 swedbank.se, 1 swederica.tk, 1 swedish-saints.tk, 1 @@ -116486,6 +117165,7 @@ swedishhost.se, 1 sweep-me.net, 1 sweepay.ch, 0 sweet-spatula.com, 1 +sweet64.fr, 1 sweetair.com, 1 sweetairlines.tk, 1 sweetbabyjesus.com, 1 @@ -116603,7 +117283,6 @@ swissvanilla.com, 1 swisswebhelp.ch, 1 swissxperts.ch, 1 switch-defekt.de, 1 -switch-trader.com, 1 switchassur.fr, 1 switchboard.lgbt, 1 switchbyte.nl, 1 @@ -116675,6 +117354,7 @@ sydneyhelicopters.com.au, 1 sydneylounge.ga, 1 sydneyshisha.com.au, 1 sydneysteinger.com, 1 +sydneyvangelder.com, 1 syds.xyz, 1 sydsray.xyz, 1 syedmuhdadasgardezi.tk, 1 @@ -116836,6 +117516,7 @@ syselg.com, 1 sysert.tv, 0 sysgap-gsci.com, 1 sysin.org, 1 +syska.com, 1 syskit.com, 1 syslogic.io, 1 sysmike.de, 1 @@ -116989,6 +117670,7 @@ t2data.com, 1 t2i.nl, 1 t2kc.com, 1 t36533.com, 1 +t3concrete.my, 1 t3hty.fr, 1 t3rror.net, 1 t3terminal.com, 1 @@ -117130,6 +117812,7 @@ tacticalsquare.com, 0 tacticalvote.co.uk, 1 tacticalwebmedia.com, 1 tad.ua, 1 +tadaimajp.com, 1 tadalafil-tablets.tk, 1 tadalafilindia.gq, 1 taddiestales.com, 1 @@ -117215,6 +117898,8 @@ tail.ml, 1 tail.wtf, 1 taildb.com, 1 tailor.com.au, 1 +tailorbrands.com, 1 +tailored.health, 1 tailoring.tk, 1 tailpuff.net, 0 tails.boum.org, 1 @@ -117310,6 +117995,7 @@ talakacaruli.tk, 1 talcualdigital.com, 1 taleatherworks.com, 1 talendipank.ee, 1 +talent-safari.com, 1 talentbazi.com, 1 talentcast.nl, 1 talentcast.org, 1 @@ -117461,6 +118147,7 @@ tangai.tk, 1 tangas.tk, 1 tangel.me, 1 tangentnet.online, 1 +tangentnetworks.tech, 1 tangiblesnft.com, 1 tangier.tk, 1 tangipahoa.gov, 1 @@ -117587,7 +118274,6 @@ tardis.io, 1 tarek.wtf, 1 tarekfadel.com, 1 tarfand-pc.tk, 1 -tarfandgram.com, 1 tarfin.com, 1 targaryen.house, 1 targetbuilding.com, 1 @@ -117616,6 +118302,7 @@ tarkasparrows.org.za, 1 tarketmedia.com, 1 tarkov-database.com, 1 tarkov.tk, 1 +tarnkappe.info, 1 tarocchi.blog, 1 taroe.org, 1 taron.top, 1 @@ -117700,8 +118387,10 @@ tatary.cf, 1 tatary.tk, 1 tate.com, 1 tateishi-ip.com, 1 +tatemode.com, 1 tatercraft.org, 1 taters.org, 1 +tatewake.com, 1 tatfan.com, 1 tathanhson.com, 1 tatiana-kpb.tk, 1 @@ -117743,11 +118432,11 @@ tavda.info, 1 tavelbutiken.com, 1 taverne.tk, 1 taverns.tk, 1 +tavola-cescato.club, 1 tavolaquadrada.com.br, 1 tavoseimai.lt, 1 tavsiyeforumu.com, 1 tavsys.net, 1 -tawjihi21.azurewebsites.net, 1 tawzea.com, 1 tax-brain.net, 1 tax-guard.com, 1 @@ -117880,6 +118569,7 @@ tcb-b.org, 1 tcbdarts.nl, 1 tccb.gov.tr, 1 tccc.org.tw, 1 +tcckonsult.com, 1 tccmb.com, 1 tccportal.com, 1 tcdn.tech, 1 @@ -117903,8 +118593,6 @@ tchnics.de, 1 tchoukball.ch, 0 tchouktchouk-baroum.fr, 1 tchverheul.nl, 1 -tci-style.pl, 1 -tciit.pl, 1 tcit.fr, 0 tcj.ir, 1 tcksolutions.com, 0 @@ -117939,6 +118627,7 @@ tdev.team, 1 tdlconexion.com, 1 tdlesovik.ru, 1 tdln.tk, 1 +tdn.com, 1 tdolar.com, 1 tdr.today, 1 tdrcartuchos.com.br, 1 @@ -118042,7 +118731,8 @@ teamdriven.tk, 1 teamdumondelibre.fr, 1 teamengland.tk, 1 teamfriet.nl, 1 -teamhinkleyc.com, 1 +teamhealth.com, 1 +teamhinkleyc.com, 0 teamhybrid.com, 1 teamhybridforums.com, 1 teamjiradia.tk, 1 @@ -118161,6 +118851,7 @@ tech4founders.co, 1 tech4founders.com, 1 tech506.com, 1 techacad.net, 0 +techalert.net, 1 techangel.tk, 1 techanit.de, 1 techarab.ga, 1 @@ -118222,6 +118913,7 @@ techgearlab.com, 1 techgo.re, 1 techguidereview.com, 1 techguides.tk, 1 +techgup.com, 1 techhackhome.tk, 1 techhappy.ca, 1 techideations.com, 1 @@ -118356,8 +119048,10 @@ technowise.tk, 1 technowiz.tk, 1 technoyl.com, 1 technuggets.io, 1 +techonline.com, 1 techorbiter.com, 1 techpartes.com.br, 1 +techpedia.it, 1 techpilipinas.com, 1 techpit.us, 1 techpoint.org, 1 @@ -118477,6 +119171,7 @@ tedroche.com, 1 tedsdivingsystem.com, 1 tedxyalesecondaryschool.com, 1 tedyst.ro, 1 +teebyhuman.com, 1 teecketing.com, 1 teehaus-shila.de, 1 teekaymedia.tk, 1 @@ -118500,7 +119195,6 @@ teenworlds.tk, 1 teepak.ml, 1 teeqq.com, 1 teerer.tk, 1 -teeshirtspace.com, 1 teestore.ru, 1 teeters.in, 1 teetje-doko.de, 1 @@ -118676,6 +119370,7 @@ televotia.ch, 1 telework.gov, 1 teleworkouts.com, 1 teleyal.blog, 1 +telfas.de, 1 telford.codes, 1 telhatelite.com.br, 1 telite.com.br, 0 @@ -118684,6 +119379,7 @@ telkom.co.id, 1 telkomakses.co.id, 1 tellaresdo.com, 1 tellet.tel, 1 +tellimer.com, 1 telling-voices.tk, 1 telling.xyz, 1 tellingua.com, 1 @@ -118894,6 +119590,7 @@ termifree.tk, 1 termin-online.com, 1 terminalyouth.tk, 1 terminationsremembered.com, 1 +termine.tel, 1 termino.eu, 1 terminsrakning.se, 1 termitinitus.org, 1 @@ -118903,6 +119600,7 @@ termoidraulico.milano.it, 1 termoidraulico.roma.it, 1 termopares.tk, 1 termux.com, 1 +ternakbisnis.id, 1 ternex.ru, 1 ternitoday.it, 1 teronia.net, 1 @@ -119101,6 +119799,7 @@ teunstuinposters.nl, 1 teusink.eu, 1 teutonia-grossenlueder.de, 1 teutonia08.de, 1 +teva.com, 1 tewarilab.co.uk, 1 tewkesburyyoga.com, 1 tex-izol.ru, 1 @@ -119651,6 +120350,7 @@ thedeathofannakarina.tk, 1 thedebug.life, 1 thedefiled.tk, 1 thedefiningdifference.com, 1 +thedelightfuldiet.com, 1 thedermdetective.com, 1 thederminstitute.com, 1 thedev.id, 1 @@ -119669,6 +120369,7 @@ thedoc.eu.org, 1 thedocumentrefinery.com, 1 thedonaldarchive.tk, 1 thedotcom.tk, 1 +thedowlinggroup.com, 1 thedrakesdebut.com, 1 thedrawbacks.tk, 1 thedriftuniversity.com, 1 @@ -120024,6 +120725,7 @@ themirc.tk, 1 themizellbrothers.tk, 1 themlmsuccessnow.tk, 1 themodernreviewer.ga, 1 +themologroup.com, 1 themomentratchada19.com, 1 themomstudio.tk, 1 themoneyconverter.com, 1 @@ -120058,6 +120760,7 @@ thenexwork.com, 1 thenichecast.com, 1 thenine.info, 1 theninenine.com, 1 +theniska.com, 1 thenitintech.com, 1 thenocman.com, 1 thenolank.com, 1 @@ -120065,6 +120768,7 @@ thenova.me, 1 thenovaclinic.com, 1 thenowheremen.com, 1 thenrdhrd.nl, 1 +thenudge.com, 1 thenutritionalreset.ca, 1 thenviews.com, 1 theo-andreou.org, 1 @@ -120234,6 +120938,7 @@ theresa-mayer.eu, 1 theresingles.tk, 1 therestaurantstore.com, 1 theresumeapp.com, 1 +theretailbulletin.com, 1 theretro.ru, 1 therevenge.me, 1 therevolutionist.tk, 1 @@ -120337,6 +121042,7 @@ thesissurvey.gq, 1 thesistraffic.com, 1 thesiterank.com, 1 theskingym.co.uk, 1 +theskiweek.com, 1 thesled.net, 1 thesleepdoctor.com, 1 thesocialmediacentral.com, 1 @@ -120371,6 +121077,7 @@ thestyle.city, 1 thestylebouquet.com, 1 thesubstitute.nl, 1 thesultans.tk, 1 +thesunrisepatisserie.com, 1 thesunshinecoasttourcompany.com.au, 1 thesupersunday.tk, 1 thesuppercircle.com, 1 @@ -120390,8 +121097,10 @@ theteaaffair.com, 1 theteaguemovie.tk, 1 thetebodifference.com, 1 thetechdude.ga, 1 +thetechnicaldost.com, 1 thetechsite.net, 1 thetfordvt.gov, 1 +thethaoso247.com, 1 thetherapist.tk, 1 thethinktankpodcast.co, 1 thethreadsmiths.com.tw, 1 @@ -120529,6 +121238,7 @@ thexalla.tk, 1 thexme.de, 1 thexpert.ml, 1 theyacht.ga, 1 +theyachtweek.com, 1 theyakshack.co.uk, 1 theyarnhookup.com, 0 theycallmesnail.tk, 1 @@ -120540,7 +121250,6 @@ theyosh.nl, 1 theyourbittorrent.com, 1 theysocial.tk, 1 theyucatantimes.com, 1 -thezero.org, 1 thezillersathenshotel.com, 1 thfaid.org, 1 thgstardragon.com, 1 @@ -120859,6 +121568,7 @@ thunderfield-boat.co.uk, 1 thunderfox.nl, 1 thunderheadjtc.tk, 1 thunderkeys.net, 1 +thunderstruckfestival.nl, 1 thundr.eu, 1 thunktank.org, 1 thunraz.com, 1 @@ -121427,6 +122137,7 @@ titulosuniversitariosalaventa.com, 1 titusetcompagnies.net, 0 titusvillepapd.gov, 1 tivido.nl, 1 +tivit-focus-partners.com, 1 tiwilandcouncil.com, 1 tixeconsulting.com, 1 tixel.com, 1 @@ -121438,6 +122149,7 @@ tizen-ru.tk, 1 tizimin.tk, 1 tjampoer.com, 1 tjebben.tech, 1 +tjgrant.com, 1 tjian.info, 1 tjl.rocks, 1 tjmarron.co.uk, 1 @@ -121749,6 +122461,7 @@ tohoku-fukushi.com, 1 tohokufd.com, 1 toila.best, 1 toileobscure.fr, 1 +toilet-guru.com, 1 toipa.org, 1 toirereform.com, 1 toiture-78.fr, 1 @@ -122007,6 +122720,7 @@ tonguetechnology.com, 1 toni-dis.ch, 0 toniduarte.tk, 1 tonifarres.net, 1 +tonight.de, 1 tonik.tk, 1 tonimorena.net, 1 tonkawaok.gov, 1 @@ -122135,7 +122849,6 @@ top10list.tk, 1 top10media.tk, 1 top10mountainbikes.info, 1 top4shop.de, 1 -top6casinos.com, 1 top9.fr, 1 topa.tk, 1 topacademy.shop, 1 @@ -122144,7 +122857,8 @@ topanimecharacters.com, 1 topanlage.de, 1 toparkinfo.hu, 1 topas.tk, 1 -topaxi.codes, 1 +topask.ru, 1 +topaxi.codes, 0 topbestsellerproduct.com, 1 topbloc.com, 1 topbookmarking.cf, 1 @@ -122408,7 +123122,6 @@ tortocan.com, 1 tortoises-turtles.com, 1 tortuga.ga, 1 tortugan.com.br, 1 -torwart-jugend.de, 1 tosainu.com.br, 1 tosatopsicologabologna.com, 1 tosbourn.com, 1 @@ -122445,6 +123158,7 @@ totalemaildelivery.com, 1 totalenergies.ca, 1 totalengineering.club, 1 totalenterprise.pl, 1 +totalexpert.net, 1 totalforcegym.com, 1 totalfoundationpros.com, 1 totalhost.gq, 1 @@ -122546,6 +123260,7 @@ tourismpskov.tk, 1 tourismtrain.tk, 1 tourispo.com, 1 touristanalyst.ga, 1 +touristsense.com, 1 tournamentmgr.com, 1 tournaments.tk, 1 tournevis.ch, 0 @@ -122570,7 +123285,6 @@ toutankamon.tk, 1 toutart.ch, 1 toutelathailande.fr, 1 toutenmusic.fr, 1 -touteslestherapies.fr, 0 toutmonexam.fr, 1 toutvendre.be, 1 toutvendre.ch, 1 @@ -122831,6 +123545,7 @@ tracetracker.com, 1 tracetracker.no, 1 traceur-france.fr, 1 tracewind.top, 1 +traceyjsvorusphd.com, 1 trachtenwolf.de, 1 tracinglineage.com, 1 track.plus, 1 @@ -123040,6 +123755,7 @@ transaminasas.com, 1 transappealrights.com, 1 transbella.com, 1 transcend.org, 1 +transcendcareers.net, 1 transcendmotor.sg, 1 transcoalition.net, 1 transcontrol.com.ua, 1 @@ -123085,6 +123801,7 @@ transitpoint.us, 1 translate-polish.com, 1 translate.googleapis.com, 1 translationge.com, 1 +translations.com, 1 translationsfirm.tk, 1 translatorall.tk, 1 translatorglobal.tk, 1 @@ -123111,7 +123828,6 @@ transport-gura-portitei.contact, 1 transporta.it, 1 transportdebateauxmp.ca, 1 transporterlock.com, 0 -transportesdye.cl, 1 transservice.net.ua, 1 transsexualpantyhose.com, 1 transtaboo.com, 1 @@ -123174,7 +123890,6 @@ travel-and-cache.de, 1 travel-dealz.de, 1 travel-rus-club.tk, 1 travel-trek.tk, 1 -travel.co.za, 0 travel2macedonia.com, 1 travel2macedonia.com.mk, 1 travel2macedonia.mk, 1 @@ -123191,8 +123906,6 @@ travelaround.tk, 1 travelassist.us.com, 1 travelastscom.ga, 1 travelback.ga, 1 -travelbags.be, 1 -travelbags.nl, 1 travelbiz.ga, 1 travelbiz.gq, 1 travelbuddiesperu.com, 1 @@ -123318,6 +124031,7 @@ travelturbo.ga, 1 travelultra.ga, 1 travelunicorns.com, 1 travelunique.ga, 1 +travelup.com, 1 travelurban.ga, 1 travelus.nl, 1 travelvacancy.tk, 1 @@ -123340,6 +124054,8 @@ travler.net, 1 travnik24.tk, 1 travotion.com, 1 travuscka.ru, 1 +trawox.com, 1 +traxpayroll.com, 1 traxstage.com, 1 tray.io, 0 trayinc.com, 1 @@ -123368,14 +124084,13 @@ tree.gdn, 1 tree0.xyz, 1 treebaglia.xyz, 1 treefarms.net.au, 1 -treefeelingsandton.co.za, 1 +treefelling-durban.co.za, 1 treefellingcenturion.co.za, 1 treehorn.nl, 1 treehousebydesign.com, 1 treehouseresort.nl, 1 treemadeiras.com.br, 1 treeremovalsboksburg.co.za, 1 -treeremovalsgermiston.co.za, 1 treeremovalspretoria.co.za, 1 treestarmarketing.com, 1 treevectors.com, 1 @@ -123408,6 +124123,7 @@ tremors.tk, 1 trempcountywi.gov, 1 trend-calendar.com, 1 trend-shop.ga, 1 +trendcreate.net, 1 trendegypt.ml, 1 trendingaffords.com, 1 trendingdeals.ga, 1 @@ -123447,7 +124163,6 @@ trentonoh.gov, 1 trentotoday.it, 1 trenujskutecznie.com, 1 trenztec.ml, 1 -trepare.com, 0 tresen-demo.com, 1 tresmaistres.com.br, 1 tresor.it, 1 @@ -123494,6 +124209,7 @@ trianglecastles.co.uk, 1 trianglelawngames.com, 1 trianglepwh.com, 1 trianglewaverecords.tk, 1 +trib.com, 1 tribac.de, 1 tribaldos.com, 0 tribaljusticeandsafety.gov, 1 @@ -123560,6 +124276,7 @@ trik-komputer.tk, 1 trik.es, 0 triker.tk, 1 trikeweb.com, 1 +trikuj.cz, 1 trilithsolutions.com, 1 trillian.im, 1 trilogyforce.com, 0 @@ -123807,6 +124524,7 @@ trueachievements.com, 1 trueasia.ga, 1 truecircumcision.tk, 1 truecosmos.com, 1 +truecrimedaily.com, 1 truedarkness.tk, 1 trueduality.net, 1 truegunvalue.com, 1 @@ -123938,11 +124656,14 @@ trusthook.tk, 1 trusthub.com, 1 trustnet.co.il, 0 trustology.io, 1 +trustpixel.com, 1 +trustpoint.one, 1 trustreview.tk, 1 trustserv.de, 1 trustswiftly.com, 1 trustvox.com.br, 1 trustycloud.net, 1 +trustzone.com, 1 truten.tk, 1 truth.onl, 1 truth.tk, 1 @@ -124090,6 +124811,7 @@ tsuyuzakihiroyuki.com, 1 tsv-1894.de, 0 tsv-hittfeld.de, 1 tsvit.com.ua, 1 +tsw.ovh, 1 tsxxlangel.com, 1 tsybanov.com, 1 tt-aepfingen.tk, 1 @@ -124271,8 +124993,10 @@ tumen.tk, 1 tumentorweb.com.mx, 1 tumult-productions.tk, 1 tun.bible, 1 +tunad.io, 1 tunaut.com, 1 tunbiya.com, 1 +tunda.it, 1 tunder.tk, 1 tundermadar.hu, 1 tune-web.de, 1 @@ -124555,6 +125279,7 @@ tvfans.ga, 1 tvfans.tk, 1 tvfcu.com, 1 tvgsc.sg, 1 +tvguide.com, 1 tview.co.uk, 1 tvindia.tk, 1 tvipper.com, 1 @@ -124585,6 +125310,7 @@ tvtorcedor.com.br, 1 tvvlconnect.nl, 1 tvzahist.com.ua, 1 tvzr.com, 1 +tw-louis.com, 1 tw.search.yahoo.com, 0 twa.travel, 1 twaddler.cf, 1 @@ -124943,7 +125669,6 @@ uathq.com, 1 uatuning.com.ua, 1 uatx.mx, 1 uavis.com.au, 1 -uawoptout.com, 0 ub3rk1tten.com, 1 ub889.com, 1 uba-tra.tk, 1 @@ -124955,6 +125680,7 @@ ubcani.com, 1 uberactivist.com, 1 uberalles.live, 1 uberboxen.net, 1 +ubereatspos.com, 1 ubergamingworld.tk, 1 uberhorny.tk, 1 uberi.fi, 1 @@ -125185,6 +125911,7 @@ ukpts.org, 1 ukrahost.com, 1 ukraine.com.ua, 1 ukrainians.ch, 1 +ukrainianwall.com, 1 ukrainskie-konstrukcii.com.ua, 1 ukrapak.com.ua, 1 ukrcredit.net, 1 @@ -125225,6 +125952,7 @@ ulrichracing.com, 1 ulrik.moe, 1 ulrike-sichert-schuster.de, 1 uls.by, 1 +ulsterbank.co.uk, 1 ulsters.cf, 1 ultherasaopaulo.com, 1 ultima-ratio.at, 1 @@ -125234,6 +125962,7 @@ ultimate-uk.com, 1 ultimateappreviews.co, 1 ultimatebabyshowergifts.ga, 1 ultimatebattle.tk, 1 +ultimatebattles.club, 1 ultimateclub.tk, 1 ultimatefilmpromotion.com, 0 ultimategaming.tk, 1 @@ -125284,6 +126013,7 @@ um-sachsen-pictures.de, 1 um.es, 0 umagoyal.com, 1 umaimagazine.com, 1 +umami.vercel.app, 1 umanews.net, 1 umanityracing.com, 1 umanupszn.gov.ua, 1 @@ -125495,7 +126225,6 @@ unicul.tk, 1 unicycle.ga, 1 unicycle.show, 1 unidadvirtual.com, 1 -unidevgroup.ru, 1 unidostransportes.com.br, 1 unieducar.org.br, 1 uniekglas.nl, 1 @@ -125507,6 +126236,7 @@ unified.show, 1 unifiednetwork.me, 1 uniforcele.com, 1 uniformebateriasheliar.com.br, 1 +uniforms.com.au, 1 unify.id, 1 unik.bg, 1 unikainfocom.in, 1 @@ -125514,6 +126244,7 @@ unikos.tk, 1 unikrn.com, 1 unikrnb2b.com, 1 unila.edu.br, 1 +unilinkbus.co.uk, 1 unilinkgroup.com, 1 unimarijo.com, 1 unimarvel.tk, 1 @@ -125565,6 +126296,7 @@ unis-pour-la-planete.com, 1 unis-pour-le-climat.com, 1 uniselectweb.com, 1 uniservarabia.com, 1 +uniserve.com, 1 unison-d.com, 1 unisontech.org, 1 unisunvn.com, 1 @@ -125655,6 +126387,7 @@ universitesegou.ml, 1 universiteye.org, 1 universityadmissions.se, 1 universitycentre.co.uk, 1 +universityhealthplans.com, 1 universityhousemates.co.uk, 1 universityhousemates.uk, 1 universityinmaryland.com, 1 @@ -125803,6 +126536,7 @@ uoe.com, 1 uomo.com.ar, 1 uopeople.reviews, 1 uoui.de, 1 +up-schaltanlagen.de, 1 up-stage.jp, 1 up.com.au, 1 up1s.tk, 1 @@ -125838,6 +126572,7 @@ update-linthdcp-567app1.com, 1 update287.org, 1 updefense.io, 1 updoze.com, 1 +upenergy.co.uk, 1 upengo.com, 1 uperne.ro, 1 upestudios.tk, 1 @@ -125928,6 +126663,7 @@ upundit.com, 1 upupming.site, 0 upupor.com, 1 upviews.tk, 1 +upviral.com, 1 upvoted.net, 1 upwardcreative.com, 1 upwardtraining.co.uk, 1 @@ -126230,6 +126966,7 @@ ussm.gov, 1 ussst.org, 1 ussst.org.in, 1 ustaywell.com, 1 +ustc.fun, 1 ustensiles-cuisine.boutique, 1 ustr.gov, 1 ustugov.kiev.ua, 1 @@ -126270,6 +127007,7 @@ uteasybooki.com, 1 utensil.org, 1 utevai.tk, 1 uthavi.org, 1 +utheatre.org, 1 utiars.com, 1 uticagravel.com, 1 utilajexpert.ro, 1 @@ -126326,7 +127064,6 @@ uurl.cf, 1 uurl.ga, 1 uuzsama.me, 1 uv.uy, 1 -uvcbyefsen.com, 1 uvenuse.cz, 1 uvlamp.ee, 1 uvocorp.com, 1 @@ -126345,6 +127082,7 @@ uwe-reimold.com, 1 uwe-reimold.de, 1 uwe.training, 1 uwe.wtf, 1 +uweier.com, 1 uwereimold.de, 1 uwesander.de, 1 uwfreelanceopticien.nl, 1 @@ -126490,7 +127228,6 @@ vacation-in-pisak.tk, 1 vacationfund.co, 1 vaccantcorner.ml, 1 vaccinateiowa.gov, 1 -vaccinatiespecialist.nl, 1 vaccine.gov, 1 vaccines.gov, 1 vaccineskill.biz, 1 @@ -126514,7 +127251,6 @@ vadik.me, 1 vadis.tk, 1 vado.li, 1 vadras.rs, 1 -vaeplatform.com, 1 vaew.com, 1 vagabond.film, 1 vagabond.fr, 1 @@ -126546,6 +127282,7 @@ vakantiedetective.nl, 1 vakantiehuisschellinkhout.nl, 1 vakantiehuisverzekeringen.nl, 1 vakantieverblijfalgarve.nl, 1 +vakat.eu, 1 vakifuniver.ru, 1 vakilik.com, 1 vakita.fi, 1 @@ -126615,6 +127352,7 @@ valgardsempornium.pw, 1 valgavesi.ee, 1 valhallastrengthsthbne.com.au, 1 valiant.finance, 1 +validation.link, 1 validatis.com, 1 validator.nu, 1 validbot.com, 1 @@ -126640,6 +127378,7 @@ valladolidlempira.tk, 1 vallartense.tk, 1 valledeleresma.tk, 1 valledibraies.org, 1 +valleesenlutte.org, 1 vallei-veluwe.nl, 1 vallejoca.gov, 1 valleyautofair.com, 1 @@ -126653,6 +127392,7 @@ valleystories.ga, 1 valleywaste.ca, 1 valleywidetvrepair.ml, 1 vallutaja.eu, 1 +valnetcdn.com, 1 valoan.me, 1 valopv.be, 1 valorantpicker.com, 0 @@ -126685,7 +127425,6 @@ valueourmind.com, 1 valueourminds.com, 1 valueourminds.org, 1 valueseed.net, 1 -valum.nl, 1 valunet.co.za, 1 valuskills.co.za, 1 valuta-tools.nl, 1 @@ -126886,6 +127625,7 @@ vasaprilezitost.eu, 1 vascomm.co.id, 1 vasconcellos.casa, 1 vasconcellos.xyz, 1 +vascularlaser.com.br, 1 vase-dovolena.cz, 1 vasectomie-pierre-boucher.ca, 0 vasel.de, 1 @@ -126955,7 +127695,6 @@ vb.media, 1 vba.rest, 1 vbazile.com, 1 vbestseller.com, 1 -vbetcn.com, 1 vbhelp.org, 1 vbql.me, 1 vbsoft.cz, 1 @@ -127012,7 +127751,6 @@ ve.search.yahoo.com, 0 ve3oat.ca, 1 ve3zsh.ca, 1 veadoscomfome.tk, 1 -veast.network, 1 vebbankir-zajm-onlajn.gq, 1 veber.bg, 1 vecara.es, 1 @@ -127179,6 +127917,7 @@ venicefloridawebsitedesign.com, 1 venicerealdeal.com, 1 venje.pro, 0 venlafaxine.gq, 1 +venndy.com, 1 vennershipley.co.uk, 1 vennprime.com, 1 venomxsecurity.com, 1 @@ -127186,6 +127925,7 @@ venstar.com, 1 ventaenlinea-bancoomeva.com, 1 ventajasdesventajas.com, 1 ventana.kz, 1 +ventanillaproveedorespit.com, 1 ventassantillan.com, 1 venti-athens.gr, 1 venti.eu.org, 1 @@ -127316,6 +128056,7 @@ vermageringsdieetpillen.ga, 1 vermageringsdieetpillen.tk, 1 vermeerdealers.com, 1 vermellcollection.com, 1 +vermo.at, 1 vermogeninkaart.nl, 1 vermont.builders, 1 vermouth.cf, 1 @@ -127332,6 +128073,7 @@ vernonvt.gov, 1 vernonwintercarnival.com, 1 veronasera.it, 1 veronic.hu, 1 +veronicasuperguide.nl, 1 veronique-huon-photographe.fr, 1 veronique-schmitz.de, 1 veros-volejbal.tk, 1 @@ -127372,6 +128114,7 @@ vertichost.com, 1 vertichost.ro, 1 verticweb.com, 1 vertigo.name, 0 +vertigomassage.com, 1 vertikal.tk, 1 vertiko.de, 1 vertrauen.site, 1 @@ -127648,7 +128391,6 @@ videoclubhd.ga, 1 videoclubhd.ml, 1 videoconferencing.guide, 1 videoface.ru, 1 -videogameconsole.ir, 1 videogamecoupons.com, 1 videogamer.com, 1 videogamesartwork.com, 1 @@ -127793,6 +128535,7 @@ vigorspa.it, 1 vigoxatelier.tech, 1 vigrey.com, 1 vigridpartiet.tk, 1 +vihtahousu.fi, 1 viikko.cf, 1 viikko.eu, 1 viikko.ga, 1 @@ -127831,12 +128574,14 @@ viktorchinkonsung.nl, 1 viktorchinkonsung.online, 1 viktorchinkonsung.site, 1 viktoria-goo.com, 1 +viktoria-stube.de, 1 viktorovi.cz, 1 viktorprevaric.eu, 1 viku.fi, 1 vila-eden.cz, 1 vila-senov.cz, 1 vilabiamodas.com.br, 1 +vilabin.com, 1 vilablancasanxenxo.com, 1 vilafloridacapivari.com.br, 1 vilafrancaeagles.tk, 1 @@ -127980,6 +128725,7 @@ vincentiliano.tk, 1 vincentpancol.com, 1 vincentpo.tk, 1 vincentsimon.de, 1 +vincentvdsluijs.nl, 1 vincentwolsink.nl, 0 vinceracing.tk, 1 vincexpertconsulting.fr, 1 @@ -128122,7 +128868,6 @@ vipmdh.com.ua, 1 vipmercedes.by, 1 viporiflame.tk, 1 vippclub.be, 0 -vips.pl, 1 vipsauna.gq, 1 vipsexvault.com, 1 vipshop.ga, 1 @@ -128156,6 +128901,7 @@ viraltube.my, 1 viralvids.gq, 1 viran-khodro.tk, 1 virazh58.tk, 1 +virbex.com, 1 vircloud.net, 1 virgi.tk, 1 virgil.gg, 1 @@ -128220,6 +128966,7 @@ virtubox.net, 1 virtubox.xyz, 1 virtubroker.com.mx, 1 virtueturkey.ga, 1 +virtuology.com, 1 virtus-group.com, 1 virtusaero.com, 1 virtwen.com, 1 @@ -128365,6 +129112,7 @@ vita-nova.cl, 1 vitaalcheck.nl, 1 vitaalfitcoaching.nl, 1 vitacare.com.au, 1 +vitacellbiologics.com, 1 vitahook.pw, 1 vitahost.ml, 1 vitakov.tk, 1 @@ -128398,6 +129146,7 @@ vitaminka.tk, 1 vitaminmovie.ga, 1 vitaminoutlet.net, 1 vitamixromania.ro, 1 +vitanayura.es, 1 vitapingu.de, 1 vitario.eu, 1 vitastic.nl, 1 @@ -128585,7 +129334,6 @@ vlajo.org, 1 vlak.hr, 1 vlakem.net, 1 vlance.gq, 1 -vlaser.es, 1 vlasov.ml, 1 vlasova-sova.ml, 1 vlcentre.org, 1 @@ -129020,6 +129768,7 @@ vp-arc.org, 1 vparilke.su, 1 vpbuilds.com, 1 vpetkov.tk, 1 +vpn-suomi.fi, 1 vpn.ht, 1 vpn4free.ga, 1 vpnalert.com, 1 @@ -129591,6 +130340,7 @@ wallmanderstd.se, 1 wallmarketing.cz, 1 wallnot.dk, 1 wallpapersden.com, 1 +wallpaperspeed.id, 1 wallpaperstreet.tk, 1 wallpaperup.com, 1 wallrgb.com, 1 @@ -129616,7 +130366,6 @@ walshy.fail, 1 walter-foerster.de, 1 walter-mooij-jazztrio.tk, 1 walter.lc, 1 -waltercedric.ch, 1 waltercedric.com, 0 waltermulders.be, 1 waltervictor.com, 0 @@ -129967,6 +130716,7 @@ wausharacountywi.gov, 1 wauwatosa.gov, 1 wauzaji.com, 1 wav-productions.com, 1 +wav.tv, 1 wave-inc.co.jp, 1 wave.is, 1 wave.red, 1 @@ -129982,6 +130732,7 @@ wawak.pl, 1 wawapuquy.com, 1 wawarsingny.gov, 1 wawshop.cz, 1 +waxcollectibles.com, 1 waxdramatic.com, 1 waxlrs.com, 1 way2tech.de, 1 @@ -130050,6 +130801,7 @@ wcbook.ru, 0 wcei.com.au, 0 wcema-ok.gov, 1 wcfauth.de, 1 +wcfcourier.com, 1 wcit2010.com, 1 wck.com, 1 wcl.govt.nz, 1 @@ -130059,6 +130811,7 @@ wcools.tk, 1 wcrca.org, 1 wcru.one, 1 wcsoe.gov, 1 +wcsportsmed.com, 1 wctsite.tk, 1 wcwcg.net, 1 wd-api.com, 0 @@ -130187,6 +130940,7 @@ web-smart.com, 1 web-snadno.online, 1 web-space.design, 1 web-station.tk, 1 +web-stories.at, 1 web-studio-kzo.ml, 1 web-style.tk, 1 web-tcapwebsite-dev.azurewebsites.net, 1 @@ -130227,6 +130981,7 @@ webanyti.me, 1 webapky.cz, 1 webappky.cz, 1 webapplay.com, 1 +webapps-conception.fr, 1 webark.hu, 1 webart-factory.de, 1 webartex.ru, 1 @@ -130368,6 +131123,8 @@ webhotelli.website, 1 webhotels.tk, 1 webhotelsoversigt.dk, 1 webhr.co, 1 +webi.ms, 1 +webi.sh, 1 webia.in.th, 1 webika.site, 1 webimagina.tk, 1 @@ -130646,6 +131403,7 @@ wedding-page.tk, 1 wedding-transportation.com, 1 wedding-ua.tk, 1 weddingalbumsdesign.com, 1 +weddingbells.ca, 1 weddingcalculator.ga, 1 weddingdays.tv, 1 weddingfantasy.ru, 1 @@ -130660,6 +131418,7 @@ weddingwire.ca, 1 weddingwire.co.uk, 1 weddingwire.com, 1 weddingwire.in, 1 +weddingz.in, 1 wedefendcharities.org, 1 wedeliverdavao.com, 1 wedg.uk, 1 @@ -130817,6 +131576,7 @@ wellsolveit.com, 0 wellspringsga.com, 1 wellsprung.net, 1 wellstonok.gov, 1 +wellthy.com, 1 wellti.com, 1 wellzapness.com, 1 welmo.fr, 1 @@ -130942,6 +131702,7 @@ werlabs.se, 1 wermeester.be, 1 wermeester.com, 1 werner-ema.de, 1 +wernerco.com, 1 wernicke-it.de, 1 werpo.com.ar, 1 werranfehtan.org, 1 @@ -131216,11 +131977,11 @@ whereismyorigin.cf, 1 whereisthekeep.com, 1 whereiszakir.com, 1 wheresbuzz.com.au, 1 +whereuare.se, 1 whereveryougo.space, 1 whexit.nl, 1 whey-protein.ch, 1 wheyteck.com, 1 -whichdoctor.com, 1 whichgender.today, 1 whichphish.com, 1 whiff-of-grape.ca, 1 @@ -131403,6 +132164,7 @@ wibuw.com, 1 wicamb.com, 1 wicca-witchcraft.com, 1 wiccansupplies.ga, 1 +wiccanwicks.ca, 1 wiccasima.fr, 1 wichitafoundationpros.com, 1 wickedsick.tk, 1 @@ -131420,7 +132182,6 @@ wideboxmacau.com, 0 widecontrol.it, 1 wideinfo.org, 1 widejeans.tk, 1 -widememory.com, 1 widenews.org, 1 widescreenfixer.org, 1 widewebhost.net, 1 @@ -131456,6 +132217,7 @@ wieseadr.com, 1 wiet2home.nl, 1 wifi-hack.com, 0 wifi-names.com, 1 +wifi.id, 1 wificafehosting.com, 1 wificonnect.cc, 1 wifimb.cz, 1 @@ -131539,6 +132301,7 @@ wikijunior.net, 1 wikijunior.org, 1 wikileaks.ch, 1 wikileaks.com, 1 +wikileaks.org, 1 wikilibrary.tk, 1 wikilink.cf, 1 wikilink.tk, 1 @@ -131807,8 +132570,11 @@ wilypumpkin.com, 1 wimachtendienk.com, 1 wimarsport.it, 1 wimlanphen.nl, 1 +wimmer-informatik.eu, 1 +wimmer-musik.eu, 1 wimmer-software.de, 1 wimmer-software.eu, 1 +wimmer.green, 1 wimmer.software, 1 wimmersoftware.de, 1 wimmersoftware.eu, 1 @@ -131857,6 +132623,7 @@ windowsdoors.it, 1 windowseatwanderer.com, 1 windowsforum.com, 1 windowsfreak.de, 1 +windowsindonesia.com, 1 windowsindonesia.id, 1 windowslatest.com, 1 windowsnerd.com, 1 @@ -132001,6 +132768,7 @@ wirethrone.com, 1 wiretoss.com, 1 wiretransaction.ga, 1 wirhabenspass.de, 1 +wiriamu.net, 1 wiris.be, 1 wirkaufendeinau.to, 1 wirksportal.com, 1 @@ -132144,6 +132912,7 @@ wizzr.nl, 1 wjb.marketing, 1 wjci.com, 1 wje-online.de, 1 +wjec.co.uk, 1 wjg.ca, 1 wjg.dk, 1 wjg.se, 1 @@ -132374,6 +133143,7 @@ wooc.org, 1 woocommerce.academy, 1 wood-crafted.co.uk, 1 wood-crafted.uk, 1 +wood4heat.ca, 1 woodbornekitchens.com, 1 woodbridgegrp.com, 1 woodbury.io, 1 @@ -132404,6 +133174,7 @@ woodminstermanagement.tk, 1 woodminsterrealty.com, 1 woodomat.com, 1 woodridgeil.gov, 1 +woodsconsulting.com, 1 woodshouse.ru, 1 woodsidepottery.ca, 1 woodsmillparkapartmentsstl.com, 1 @@ -132420,6 +133191,7 @@ woodysinstalaciones.com, 1 woof.gq, 1 woofsbakery.com, 1 woohay.com, 1 +woohoo.in, 1 woohooyeah.nl, 1 wookstar.com, 1 woolfplumbing.com.au, 1 @@ -132452,6 +133224,7 @@ wordbits.net, 0 wordcharma.com, 1 wordcounter.net, 1 wordher.com, 1 +wordindonesia.com, 1 wordindonesia.id, 1 wordlessecho.com, 1 wordnietvindbaar.nl, 1 @@ -132469,6 +133242,7 @@ wordpressbot.tk, 1 wordpressdevelopment.ml, 1 wordregistrar.ga, 1 wordsearchwhiz.com, 1 +wordsinarow.com, 1 wordsmart.it, 1 wordsofamaster.com, 1 wordspam.ga, 1 @@ -132682,6 +133456,7 @@ worldvisa.tk, 1 worldvisionsummerfest.com, 1 worldwallstreet.tk, 1 worldwar2collector.tk, 1 +worldwidescience.org, 1 worldwidessl.net, 1 worldwinesweb.be, 1 worlich.tk, 1 @@ -132804,6 +133579,7 @@ wpforum.tk, 1 wpfunction.com, 1 wpfy.org, 0 wpg-verwaltungen.de, 1 +wpguvenlik.com, 1 wphelpdesk.nl, 1 wphelpwithhomework.tk, 1 wphlive.tv, 1 @@ -132819,6 +133595,7 @@ wplibrary.net, 1 wplistings.pro, 1 wpmeer.com, 1 wpmeetup-berlin.de, 1 +wpmet.com, 1 wpml.org, 1 wpmu-tutorials.de, 1 wpnesia.id, 1 @@ -132947,6 +133724,7 @@ wsldp.com, 1 wsm-naramowice.pl, 1 wsn.com, 1 wso01.com, 1 +wsodownloads.io, 1 wsrc.tk, 1 wsrn.de, 1 wsrv.nl, 1 @@ -132971,6 +133749,7 @@ wtp.co.jp, 1 wtpdive.jp, 1 wtpmj.com, 1 wtw.io, 1 +wtxl.com, 1 wuaffiliate.tk, 1 wuchoamoveis.com.br, 1 wucke13.de, 1 @@ -132995,7 +133774,6 @@ wuki.li, 1 wuknet.com, 1 wuknet.net, 1 wulala.one, 1 -wulala.us, 1 wulel.cn, 0 wulfrun-invicta.tk, 1 wum.me, 1 @@ -133036,7 +133814,6 @@ wuzigackl.de, 0 wv-n.de, 1 wvdn.com, 1 wvg.myds.me, 1 -wvisser.nl, 1 wvpbs.ml, 1 wvpbs.tk, 1 wvv-8522.com, 1 @@ -133279,6 +134056,7 @@ x13.com, 1 x13.net, 1 x1616.tk, 1 x17.cafe, 1 +x17.ink, 1 x2d2.de, 0 x2oe.com, 1 x2ox.com, 1 @@ -133485,6 +134263,7 @@ xbookcn.com, 1 xbookcn.net, 1 xbox-mag.net, 1 xboxachievements.com, 1 +xboxplay.games, 1 xbrl.online, 1 xbrlsuccess.appspot.com, 1 xbros.cz, 1 @@ -133895,6 +134674,7 @@ xn----7sbbgbr0arxb4a4exa.com.ua, 1 xn----7sbbhzfbdo6dnf.tk, 1 xn----7sbbncaddj9a9b6am9p.tk, 1 xn----7sbbq5b0a1c.com, 1 +xn----7sbc3abak3afteia.xn--p1ai, 1 xn----7sbedlbhv2azb6a.xn--j1amh, 1 xn----7sbfl2alf8a.xn--p1ai, 1 xn----7sbkofbbj4akz.xn--80asehdb, 1 @@ -133928,6 +134708,8 @@ xn--24-glcha1cjdmf1dye.xn--p1ai, 1 xn--24-glcia8dc.xn--p1ai, 1 xn--2sxs9ol7o.com, 1 xn--36-dlcdun7abo4a.xn--p1ai, 1 +xn--3btta.xn--fiqs8s, 1 +xn--3btta.xn--fiqz9s, 1 xn--3js556addp80q.cn, 1 xn--3lqp21gwna.cn, 1 xn--3st814ec8r.cn, 1 @@ -133943,6 +134725,8 @@ xn--54-6kc3btfht.xn--p1ai, 1 xn--57h.ml, 0 xn--5dbkjqb0d.com, 1 xn--5dbkjqb0d.net, 1 +xn--6btn.xn--fiqs8s, 1 +xn--6btn.xn--fiqz9s, 1 xn--6kru6im1lczj.com, 1 xn--6m1a86p.com, 1 xn--6o8h.cf, 1 @@ -133954,7 +134738,11 @@ xn--78je2j8a.cafe, 1 xn--79q87uvkclvgd56ahq5a.net, 1 xn--7ca.co, 1 xn--7or43h.jp, 1 +xn--7tq776cdf4a.xn--fiqs8s, 1 +xn--7tq776cdf4a.xn--fiqz9s, 1 xn--7tq798c.ml, 1 +xn--7tqp36c113a.xn--fiqs8s, 1 +xn--7tqp36c113a.xn--fiqz9s, 1 xn--7xa.google.com, 1 xn--80a1a8b.tk, 1 xn--80a6a1b.tk, 1 @@ -134107,6 +134895,7 @@ xn--e1aoddhq.gq, 1 xn--e1tvpw18d.com, 1 xn--e1tx9l9xc.xn--6qq986b3xl, 1 xn--ecki0cd0bu9a4nsjb.com, 1 +xn--ee-zja.de, 1 xn--eebao6b.com, 1 xn--eebao6b.net, 1 xn--eglujemy-23b.net, 1 @@ -134218,6 +135007,7 @@ xn--mitenlyttyt-s8aad6xg.fi, 1 xn--mitensaadatit-nfb1y.fi, 1 xn--mitensaadatyt-nfb2y.fi, 1 xn--mllerhesszimmerli-22b.ch, 1 +xn--mnich-7ua.de, 1 xn--mntsamling-0cb.dk, 1 xn--morrhret-e0a.se, 1 xn--myrepubic-wub.net, 1 @@ -134543,6 +135333,7 @@ xtom.xyz, 1 xtoob.com, 1 xtournois.com, 1 xtrainsights.com, 1 +xtralis.com, 1 xtravans.com, 1 xtreamfire.tk, 1 xtreme-cs.tk, 1 @@ -134561,6 +135352,7 @@ xtu2.com, 1 xtzone.be, 1 xtzs6.vip, 1 xuab.net, 1 +xuan.com.my, 1 xuancommagere.com, 1 xuanmeishe.net, 0 xuann.wang, 1 @@ -134573,6 +135365,7 @@ xuehao.net.cn, 1 xuehao.tech, 1 xuehuang666.cn, 1 xuesoska.ga, 1 +xuewen.ink, 1 xuexi.icu, 0 xuexi.moe, 1 xuez.cc, 1 @@ -134635,7 +135428,6 @@ xxxvids.mobi, 1 xxxvids.tv, 1 xxxxlol.com, 1 xy.ax, 1 -xy1919.com, 1 xy366.cc, 1 xy369.cc, 1 xy6161.com, 1 @@ -135081,7 +135873,6 @@ ycl.org.uk, 1 yclan.net, 1 ycnexp.eu.org, 1 ycnrg.org, 1 -ycodendauteradio.net, 1 ycsgo.com, 0 yd.io, 1 yd163.cc, 1 @@ -135107,6 +135898,7 @@ yeesker.com, 1 yekaterinburg-city.tk, 1 yellow.ai, 1 yellowcar.website, 1 +yellowfolder.com, 1 yellowhawk.nl, 1 yellowmessenger.com, 1 yellowpages.ee, 1 @@ -135177,6 +135969,7 @@ yepu.cc, 1 yepu.ga, 1 yeram.org, 1 yerbasbuenas.tk, 1 +yeri.com, 1 yert.pink, 1 yes-money.cf, 1 yes-money.ga, 1 @@ -135228,6 +136021,7 @@ yfengs.moe, 1 yflix.xyz, 0 yg-crew.eu, 1 yggdar.ga, 1 +yggdrasil.ws, 1 yggdrasildice.com, 1 ygm.org.uk, 1 ygobbs.com, 1 @@ -135334,7 +136128,6 @@ ymca.ga, 1 ymlsport.pe, 1 ymm18.com, 1 ymoah.nl, 1 -ympifa.com, 1 ymtsonline.org, 1 ymy.moe, 1 ymy.zone, 1 @@ -135359,6 +136152,7 @@ yocoboard.com, 1 yodababy.com.tw, 1 yodalef3.tk, 1 yodaremote.tk, 1 +yodocon.com, 1 yoga-bien-etre.com, 1 yoga-good.fr, 1 yoga-m.fr, 1 @@ -135529,6 +136323,7 @@ youkaryote.org, 1 youked.com, 1 youkube.cf, 1 youla.gq, 1 +youla.ru, 1 youlikehookups.com, 1 youliketwinks.com, 1 youlovehers.com, 1 @@ -135899,6 +136694,7 @@ yula.cf, 1 yulaiz.com, 1 yule.hk, 1 yuleyule88game.com, 1 +yuliana-hotel.com, 1 yulsn.com, 1 yum0.cn, 1 yumacountyazvotes.gov, 1 @@ -135944,6 +136740,7 @@ yutakato.net, 1 yutangyun.com, 1 yuth.in, 0 yuucchi.com, 1 +yuucdn.net, 1 yuugi.be, 1 yuuki0xff.jp, 1 yuuta.moe, 1 @@ -136014,6 +136811,7 @@ yzyweb.cn, 1 yzzy.cc, 0 z-cert.nl, 1 z-coder.com, 1 +z-e.eu, 1 z-konzept-nutrition.ru, 1 z-pc.net, 1 z-rejstejna.cz, 1 @@ -136318,6 +137116,7 @@ zander.dk, 1 zandhuisjes.nl, 1 zandmhomes.com, 1 zandra.cf, 1 +zandu360.com, 1 zanellidesigns.co.uk, 1 zaneslaw.com, 1 zanettimateriais.com.br, 1 @@ -136341,6 +137140,7 @@ zap-mag.ru, 1 zapamini.ml, 1 zaparoh.com, 1 zapaska.tk, 1 +zapier-staging.com, 1 zapier.com, 1 zaplano.tk, 1 zapmaster14.com, 1 @@ -136361,6 +137161,7 @@ zarabotok-v-internete.ga, 1 zarabotok-v-internete.gq, 1 zarabotok-veka.ga, 1 zarabotok2017.tk, 1 +zarabotok24obzor.ru, 1 zarabotok24stavki.ru, 1 zarabotoker.tk, 1 zarabotoklaif.tk, 1 @@ -136405,6 +137206,8 @@ zavarkin.tk, 1 zavec.com.ec, 0 zaves.tk, 1 zawo-electric.de, 1 +zawodowe-szkolenia.com, 1 +zaxbys-web-backend.azurewebsites.net, 1 zayats.tk, 1 zayavka.cf, 1 zayavka.ml, 1 @@ -136870,6 +137673,7 @@ zhoujiashu.com, 1 zhoujunlawer.ml, 1 zhoukz.com, 1 zhoutiancai.cn, 1 +zhouyipro.com, 1 zhouzanxi.com, 1 zhovner.com, 1 zhthings.com, 1 @@ -136900,6 +137704,7 @@ ziemlich-zackig.de, 1 ziemlichzackig.de, 1 zifb.in, 1 zifoapptest.com, 1 +ziftone.com, 1 zigao.info, 0 zigarn.com, 1 ziggi.tk, 1 @@ -136958,6 +137763,7 @@ zinniazorgverlening.nl, 1 zinnowitzer-ferienwohnung.de, 1 zinoui.com, 1 zinsserplasticsurgery.com, 1 +zio-enzo.eu, 1 zion-craft.tk, 1 zionaesthetics.com.sg, 1 ziondrive.com.br, 1 @@ -136967,6 +137773,7 @@ ziontech.eu.org, 1 zionvps.com, 0 zipalerts.com, 1 ziparcfhive.ga, 1 +zipjobs.com, 1 zipkey.de, 1 zippie.tk, 1 zippo-days.me, 0 @@ -137350,6 +138157,7 @@ zry.io, 1 zs6688.cc, 1 zsaqwq.com, 1 zsbd.xyz, 0 +zscaler.es, 1 zscales.com, 0 zsdublovice.cz, 1 zseartcc.org, 1 @@ -137496,6 +138304,8 @@ zygfrydadamski.tk, 1 zygozoon.com, 1 zylai.com, 1 zylai.net, 1 +zylo.com, 1 +zymewire.com, 1 zymmm.com, 1 zyno.space, 1 zypern-firma.com, 1 diff --git a/services/settings/dumps/blocklists/addons-bloomfilters.json b/services/settings/dumps/blocklists/addons-bloomfilters.json index 4dd2f268a74db..ee5e915f0beef 100644 --- a/services/settings/dumps/blocklists/addons-bloomfilters.json +++ b/services/settings/dumps/blocklists/addons-bloomfilters.json @@ -1,5 +1,510 @@ { "data": [ + { + "stash": { + "blocked": [ + "{6a644698-b5db-4b92-b7a6-5b461aae336b}:1", + "{7248325a-13dd-4366-ac5b-1244256779ee}:1.0" + ], + "unblocked": [] + }, + "schema": 1661927838876, + "key_format": "{guid}:{version}", + "stash_time": 1661970907312, + "id": "45fef5c8-c5bc-483e-82c1-e5f6ec30310e", + "last_modified": 1661971043645 + }, + { + "stash": { + "blocked": [ + "{f0b55a46-618c-472f-943f-e38b742dbf77}:1.3", + "{f0b55a46-618c-472f-943f-e38b742dbf77}:1.2", + "{f0b55a46-618c-472f-943f-e38b742dbf77}:1.4" + ], + "unblocked": [] + }, + "schema": 1661863044603, + "key_format": "{guid}:{version}", + "stash_time": 1661927708228, + "id": "84073072-17d6-4fa3-9c14-aa1f321ddecc", + "last_modified": 1661927838804 + }, + { + "stash": { + "blocked": [ + "adikhbfjdbjkhelbdnffogkobkekkkej@chrome-store-foxified-2030671112:1.4.104", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified--942292300:1.1.58", + "adikhbfjdbjkhelbdnffogkobkekkkej@chrome-store-foxified-2264094764:1.4.83", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-3389716047:1.1.20", + "adikhbfjdbjkhelbdnffogkobkekkkej@chrome-store-foxified-1843651878:1.4.86", + "adikhbfjdbjkhelbdnffogkobkekkkej@chrome-store-foxified-2764355356:1.4.83", + "adikhbfjdbjkhelbdnffogkobkekkkej@chrome-store-foxified-2410246532:1.4.102", + "adikhbfjdbjkhelbdnffogkobkekkkej@chrome-store-foxified-3438678729:1.4.96", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified--1703039169:1.1.66", + "adikhbfjdbjkhelbdnffogkobkekkkej@chrome-store-foxified-3836410580:1.4.98", + "adikhbfjdbjkhelbdnffogkobkekkkej@chrome-store-foxified-707030036:1.4.106", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-424402908:1.1.65", + "adikhbfjdbjkhelbdnffogkobkekkkej@chrome-store-foxified-4124726897:1.4.90", + "gbnahglfafmhaehbdmjedfhdmimjcbed@chrome-store-foxified--852808090:1.1.7", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified--1384391213:1.1.65", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified--1760569500:1.1.58", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified--1433261179:1.1.60", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-3463744817:1.1.19", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-3163771453:1.1.18", + "adikhbfjdbjkhelbdnffogkobkekkkej@chrome-store-foxified-150866721:1.4.90", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-358849276:1.1.19", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-1982204858:1.1.71", + "generated-4t5xg1lgsv1jbhflwkjoeo@chrome-store-foxified--660177462:1.4.125", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified--1756789111:1.1.65", + "adikhbfjdbjkhelbdnffogkobkekkkej@chrome-store-foxified-236413110:1.4.21", + "adikhbfjdbjkhelbdnffogkobkekkkej@chrome-store-foxified-118865762:1.4.26", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-666348837:1.1.65", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-1189836782:1.1.65", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-3481853712:1.1.20", + "adikhbfjdbjkhelbdnffogkobkekkkej@chrome-store-foxified-4290968187:1.4.61", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-150866721:1.1.20", + "adikhbfjdbjkhelbdnffogkobkekkkej@chrome-store-foxified-2345155350:1.4.100", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified--1182236531:1.1.64", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-1864348636:1.1.30", + "{1ddf7ab0-196b-4b04-a647-54684d3eda3a}:1.0.1", + "adikhbfjdbjkhelbdnffogkobkekkkej@chrome-store-foxified-2012069453:1.4.118", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-1171453771:1.1.60", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-1005756799:1.1.18", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-1896726278:1.1.19", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified--1911580827:1.1.64", + "adikhbfjdbjkhelbdnffogkobkekkkej@chrome-store-foxified-700713999:1.4.21", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-598353677:1.1.65", + "adikhbfjdbjkhelbdnffogkobkekkkej@chrome-store-foxified-3778406036:1.4.106", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified--2111810209:1.1.60", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified--1286569622:1.1.57", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-3366292510:1.1.20", + "adikhbfjdbjkhelbdnffogkobkekkkej@chrome-store-foxified-2396469402:1.4.99", + "adikhbfjdbjkhelbdnffogkobkekkkej@chrome-store-foxified-3268672171:1.4.103", + "gbnahglfafmhaehbdmjedfhdmimjcbed@chrome-store-foxified--333567499:1.1.4", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-1368569347:1.1.65", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-1130503115:1.1.60", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-2198423445:1.1.18", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-1613478654:1.1.21", + "gbnahglfafmhaehbdmjedfhdmimjcbed@chrome-store-foxified--333567499:1.0.24", + "adikhbfjdbjkhelbdnffogkobkekkkej@chrome-store-foxified-4223787951:1.4.61", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-1961212561:1.1.19", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-1845351516:1.1.65", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-1507417948:1.1.22", + "adikhbfjdbjkhelbdnffogkobkekkkej@chrome-store-foxified-3728914172:1.4.23", + "adikhbfjdbjkhelbdnffogkobkekkkej@chrome-store-foxified-3451580986:1.4.98", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-150866721:1.1.21", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified--683976320:1.1.65", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-1067573256:1.1.64", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-2415332953:1.1.19", + "adikhbfjdbjkhelbdnffogkobkekkkej@chrome-store-foxified-4259189966:1.4.86", + "{4c9f1a7d-e656-48b0-82da-e0ff22bb9086}:1.1", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-2097318518:1.1.23", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-143505105:1.1.64", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-1681484844:1.1.60", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified--1098232254:1.1.72", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-1852650062:1.1.19", + "adikhbfjdbjkhelbdnffogkobkekkkej@chrome-store-foxified-3966620909:1.4.118", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-1352924719:1.1.60", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified--244702296:1.1.62", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-2748115654:1.1.22", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified--474925712:1.1.77", + "adikhbfjdbjkhelbdnffogkobkekkkej@chrome-store-foxified-4265346775:1.4.118", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-2444583915:1.1.22", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-1585888338:1.1.19", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-2803907862:1.1.22", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified--1532045719:1.1.57", + "adikhbfjdbjkhelbdnffogkobkekkkej@chrome-store-foxified-51207202:1.4.118", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-841599716:1.1.18", + "adikhbfjdbjkhelbdnffogkobkekkkej@chrome-store-foxified-398862749:1.4.88", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-2198423445:1.1.19", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-517078054:1.1.65", + "adikhbfjdbjkhelbdnffogkobkekkkej@chrome-store-foxified-1483724021:1.4.98", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-358849276:1.1.18", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-236209619:1.1.65", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-2124964235:1.1.82", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-1277148406:1.1.81", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified--361295391:1.1.65", + "adikhbfjdbjkhelbdnffogkobkekkkej@chrome-store-foxified-424307464:1.4.108", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-377140186:1.1.60", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified--1559273091:1.1.60", + "{452be614-df57-465c-ad9a-3e50f37afab4}:3.0.8", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified--1693725582:1.1.66", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-1486709610:1.1.22", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-2153195120:1.1.20", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-1688471316:1.1.20", + "gbnahglfafmhaehbdmjedfhdmimjcbed@chrome-store-foxified-1277148406:1.0.27", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified--1654540315:1.1.60", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-2143758482:1.1.69", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-2316858620:1.1.19", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-3863423961:1.1.20", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-1362585794:1.1.19", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-3190203303:1.1.18", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-3147543853:1.1.18", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified--1188446420:1.1.65", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-129504007:1.1.19", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-1843651878:1.1.18", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-3481853712:1.1.22", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified--1869134387:1.1.60", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-1702217264:1.1.60", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified--1781903110:1.1.65", + "adikhbfjdbjkhelbdnffogkobkekkkej@chrome-store-foxified-3169999238:1.4.118", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-3445119934:1.1.20", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-2384020859:1.1.20", + "adikhbfjdbjkhelbdnffogkobkekkkej@chrome-store-foxified-1975212689:1.4.86", + "adikhbfjdbjkhelbdnffogkobkekkkej@chrome-store-foxified-1040183048:1.4.98", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-3163771453:1.1.19", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-1524497240:1.1.69", + "adikhbfjdbjkhelbdnffogkobkekkkej@chrome-store-foxified-2345155350:1.4.99", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-3801663885:1.1.21", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-2396104664:1.1.19", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-1613478654:1.1.22", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-855522856:1.1.65", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-2097318518:1.1.20", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-1136111776:1.1.20", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-1067573097:1.1.60", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-3655921438:1.1.19", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-2264094764:1.1.18", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-384743172:1.1.60", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-124118232:1.1.22", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified--773562225:1.1.64", + "adikhbfjdbjkhelbdnffogkobkekkkej@chrome-store-foxified-1856248183:1.4.86", + "adikhbfjdbjkhelbdnffogkobkekkkej@chromeStoreFoxified:1.3.26", + "adikhbfjdbjkhelbdnffogkobkekkkej@chrome-store-foxified-2208491963:1.4.104", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-1031425143:1.1.20", + "adikhbfjdbjkhelbdnffogkobkekkkej@chrome-store-foxified-2830989654:1.4.118", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-3956396100:1.1.20", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-2803907862:1.1.20", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-3388770218:1.1.19", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified--265778509:1.1.66", + "adikhbfjdbjkhelbdnffogkobkekkkej@chrome-store-foxified-3124400972:1.4.91", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified--1870964090:1.1.66", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-802171594:1.1.58", + "adikhbfjdbjkhelbdnffogkobkekkkej@chrome-store-foxified-2960922760:1.4.117", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-4124726897:1.1.20", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified--828719111:1.1.77", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified--973730849:1.1.66", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-1007062763:1.1.70", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-1001659559:1.1.20", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-3103022412:1.1.21", + "adikhbfjdbjkhelbdnffogkobkekkkej@chrome-store-foxified-1133586665:2.95", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-2550692377:1.1.18", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-3484901013:1.1.19", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-2843520370:1.1.18", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-1255721337:1.1.60", + "adikhbfjdbjkhelbdnffogkobkekkkej@chrome-store-foxified-2901539749:1.4.118", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified--1974072750:1.1.59", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-1155793776:1.1.65", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified--626842234:1.1.64", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified--826951615:1.1.57", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-1864348636:1.1.19", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified--991659884:1.1.60", + "adikhbfjdbjkhelbdnffogkobkekkkej@chrome-store-foxified-168514584:1.4.90", + "adikhbfjdbjkhelbdnffogkobkekkkej@chrome-store-foxified-3670377483:1.4.83", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-3124400972:1.1.22", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-1171920049:1.1.60", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-3588525762:1.1.19", + "adikhbfjdbjkhelbdnffogkobkekkkej@chrome-store-foxified-1455182489:1.4.92", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-3139046289:1.1.18", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-2264094764:1.1.17", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-3823714825:1.1.18", + "adikhbfjdbjkhelbdnffogkobkekkkej@chrome-store-foxified-3471512128:1.4.86", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified--431650523:1.1.60", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-2617162:1.1.81", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-2653655913:1.1.21", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-1284200344:1.1.19", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-1346401933:1.1.65", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified--33453962:1.1.60", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified--57471722:1.1.60", + "adikhbfjdbjkhelbdnffogkobkekkkej@chrome-store-foxified-3985926055:1.4.27", + "adikhbfjdbjkhelbdnffogkobkekkkej@chrome-store-foxified-2764355356:1.4.85", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-3268672171:1.1.21", + "adikhbfjdbjkhelbdnffogkobkekkkej@chrome-store-foxified-1728022026:1.4.117", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified--1234302095:1.1.58", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-2840231665:1.1.20", + "adikhbfjdbjkhelbdnffogkobkekkkej@chrome-store-foxified-541290179:1.4.119", + "adikhbfjdbjkhelbdnffogkobkekkkej@chrome-store-foxified-413521377:1.4.96", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified--2123889631:1.1.59", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-687054404:1.1.39", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified--1758048489:1.1.69", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-3268672171:1.1.35", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified--1059407215:1.1.64", + "adikhbfjdbjkhelbdnffogkobkekkkej@chrome-store-foxified-689082251:1.4.92", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-837003270:1.1.19", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified--353872636:1.1.60", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-1534319323:1.1.70", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-44962060:1.1.17", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-1517719566:1.1.63", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-1131071469:1.1.80", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified--773562225:1.1.62", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-1575433058:1.1.65", + "adikhbfjdbjkhelbdnffogkobkekkkej@chrome-store-foxified-278771640:1.4.96", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified--1845928246:1.1.60", + "adikhbfjdbjkhelbdnffogkobkekkkej@chrome-store-foxified-1613403897:1.4.86", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-862545312:1.1.19", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-2653655913:1.1.23", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-2960107946:1.1.18", + "adikhbfjdbjkhelbdnffogkobkekkkej@chrome-store-foxified-522118329:1.4.27", + "gbnahglfafmhaehbdmjedfhdmimjcbed@chrome-store-foxified--333567499:1.1.5", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-217408552:1.1.65", + "adikhbfjdbjkhelbdnffogkobkekkkej@chrome-store-foxified-297407273:1.4.96", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-794816032:1.1.67", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-784567846:1.1.58", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-879660212:1.1.18", + "gbnahglfafmhaehbdmjedfhdmimjcbed@chrome-store-foxified-1277148406:1.0.28", + "adikhbfjdbjkhelbdnffogkobkekkkej@chrome-store-foxified-4209868741:1.4.125", + "adikhbfjdbjkhelbdnffogkobkekkkej@chrome-store-foxified-2254845478:1.4.98", + "{452be614-df57-465c-ad9a-3e50f37afab4}:3.0.7", + "adikhbfjdbjkhelbdnffogkobkekkkej@chrome-store-foxified-3349955354:1.4.116", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-949933535:1.1.22", + "adikhbfjdbjkhelbdnffogkobkekkkej@chrome-store-foxified-1961212561:1.4.90", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified--683976320:1.1.66", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified--792485906:1.1.63", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-3173941905:1.1.18", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-514031556:1.1.59", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified--327086611:1.1.60", + "ojplmecpdpgccookcobabopnaifgidhf@chrome-store-foxified--2060889413:5.0.40", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-1268339820:1.1.60", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified--236005394:1.1.81", + "adikhbfjdbjkhelbdnffogkobkekkkej@chrome-store-foxified-2378613951:1.4.123", + "adikhbfjdbjkhelbdnffogkobkekkkej@chrome-store-foxified-2315160110:1.4.118", + "adikhbfjdbjkhelbdnffogkobkekkkej@chrome-store-foxified-1809284969:1.4.119", + "generated-pdo6keo6ydj8l86dw433w4@chrome-store-foxified--660177462:1.4.125", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-1429737447:1.1.18", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-2097318518:1.1.27", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-499265678:1.1.57", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified--1501027077:1.1.60", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-3481853712:1.1.27", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-3481853712:1.1.28", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-2090127807:1.1.18", + "adikhbfjdbjkhelbdnffogkobkekkkej@chrome-store-foxified-3349955354:1.4.118", + "adikhbfjdbjkhelbdnffogkobkekkkej@chrome-store-foxified-3722501011:1.4.96", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-4173629946:1.1.23", + "generated-mtis58d64y0w7rkiplakfy@chrome-store-foxified--660177462:1.4.125", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified--1713238269:1.1.63", + "adikhbfjdbjkhelbdnffogkobkekkkej@chrome-store-foxified-291128400:1.4.48", + "adikhbfjdbjkhelbdnffogkobkekkkej@chrome-store-foxified-3778303155:1.4.98", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified--1031320639:1.1.58", + "adikhbfjdbjkhelbdnffogkobkekkkej@chrome-store-foxified-4006044434:1.4.99", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-1116397985:1.1.70", + "adikhbfjdbjkhelbdnffogkobkekkkej@chrome-store-foxified-961358624:1.4.113", + "adikhbfjdbjkhelbdnffogkobkekkkej@chrome-store-foxified-1813960864:1.4.98", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-453875417:1.1.19", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-2637543395:1.1.21", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-2362161906:1.1.21", + "adikhbfjdbjkhelbdnffogkobkekkkej@chrome-store-foxified-1585888338:1.4.87", + "adikhbfjdbjkhelbdnffogkobkekkkej@chrome-store-foxified-3663653227:1.4.96", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-812850283:1.1.23", + "adikhbfjdbjkhelbdnffogkobkekkkej@chrome-store-foxified-1677955023:1.4.119", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-2859653217:1.1.19", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified--1042216287:1.1.65", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-591396740:1.1.64", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-4173629946:1.1.27", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-2119960254:1.1.64", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-398862749:1.1.19", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-1568715335:1.1.21", + "adikhbfjdbjkhelbdnffogkobkekkkej@chrome-store-foxified-3177734633:1.4.72", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-72174564:1.1.63", + "adikhbfjdbjkhelbdnffogkobkekkkej@chrome-store-foxified-2784836575:1.4.96", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-127068032:1.1.18", + "adikhbfjdbjkhelbdnffogkobkekkkej@chrome-store-foxified-1922163066:1.4.30", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified--1097676051:1.1.58", + "adikhbfjdbjkhelbdnffogkobkekkkej@chrome-store-foxified-3717345971:1.4.106", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-588186596:1.1.62", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-1601019773:1.1.66", + "adikhbfjdbjkhelbdnffogkobkekkkej@chrome-store-foxified-2514396546:1.4.93", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-3366292510:1.1.19", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-269509530:1.1.81", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified--222357901:1.1.56", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-1975212689:1.1.19", + "adikhbfjdbjkhelbdnffogkobkekkkej@chrome-store-foxified-1728960021:1.4.70", + "adikhbfjdbjkhelbdnffogkobkekkkej@chrome-store-foxified-2340118023:1.4.118", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified--1173926897:1.1.62", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified--156328994:1.1.59", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified--1031320639:1.1.63", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified--628686513:1.1.64", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-3885504162:1.1.22", + "adikhbfjdbjkhelbdnffogkobkekkkej@chrome-store-foxified-1887207269:1.4.99", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-759404373:1.1.72", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-1600196021:1.1.18", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-1864348636:1.1.32", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-991809524:1.1.22", + "adikhbfjdbjkhelbdnffogkobkekkkej@chrome-store-foxified-44962060:1.4.80", + "gbnahglfafmhaehbdmjedfhdmimjcbed@chrome-store-foxified-2617162:1.0.17", + "adikhbfjdbjkhelbdnffogkobkekkkej@chrome-store-foxified-1608106818:1.4.109", + "adikhbfjdbjkhelbdnffogkobkekkkej@chrome-store-foxified-905035806:1.4.118", + "gbnahglfafmhaehbdmjedfhdmimjcbed@chrome-store-foxified--258642519:1.1.6", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-416347570:1.1.60", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-4259189966:1.1.18", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-1332868395:1.1.18", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-1762588500:1.1.72", + "adikhbfjdbjkhelbdnffogkobkekkkej@chrome-store-foxified-861399426:1.4.98", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified--319121941:1.1.59", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified--1367419892:1.1.70", + "adikhbfjdbjkhelbdnffogkobkekkkej@chrome-store-foxified-105662530:1.4.83", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-1568776816:1.1.62", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified--1667378840:1.1.65", + "adikhbfjdbjkhelbdnffogkobkekkkej@chrome-store-foxified-2411255315:1.4.21", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified--302097264:1.1.58", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified--1337058553:1.1.65", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-1896726278:1.1.18", + "adikhbfjdbjkhelbdnffogkobkekkkej@chrome-store-foxified-1772742999:1.4.106", + "adikhbfjdbjkhelbdnffogkobkekkkej@chrome-store-foxified-2822901079:1.4.92", + "adikhbfjdbjkhelbdnffogkobkekkkej@chrome-store-foxified-792985253:1.4.98", + "adikhbfjdbjkhelbdnffogkobkekkkej@chrome-store-foxified-2033774862:1.4.58", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-396908291:1.1.78", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified--929784538:1.1.60", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-934707750:1.1.21", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-995563135:1.1.19", + "adikhbfjdbjkhelbdnffogkobkekkkej@chrome-store-foxified-483869450:1.4.117", + "adikhbfjdbjkhelbdnffogkobkekkkej@chrome-store-foxified-2321193140:1.4.76", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-358849276:1.1.20", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-3885504162:1.1.23", + "adikhbfjdbjkhelbdnffogkobkekkkej@chrome-store-foxified-1043324455:1.4.96", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-1129160043:1.1.19", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-1388511197:1.1.60", + "adikhbfjdbjkhelbdnffogkobkekkkej@chrome-store-foxified-3717345971:1.4.105", + "adikhbfjdbjkhelbdnffogkobkekkkej@chrome-store-foxified-3139244603:1.4.118", + "adikhbfjdbjkhelbdnffogkobkekkkej@chrome-store-foxified-2245797315:1.4.54", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-3953484614:1.1.12", + "adikhbfjdbjkhelbdnffogkobkekkkej@chrome-store-foxified-1381982457:1.4.113", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-766507113:1.1.60", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified--333567499:1.1.81", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-1711457176:1.1.22", + "adikhbfjdbjkhelbdnffogkobkekkkej@chrome-store-foxified-912798650:1.4.118", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified--238632807:1.1.67", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-1065185850:1.1.60", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified--631714635:1.1.60", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-4282454883:1.1.18", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-629615217:1.1.58", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-1975212689:1.1.18", + "adikhbfjdbjkhelbdnffogkobkekkkej@chrome-store-foxified-1891115697:1.4.106", + "adikhbfjdbjkhelbdnffogkobkekkkej@chrome-store-foxified-857307307:1.4.62", + "adikhbfjdbjkhelbdnffogkobkekkkej@chrome-store-foxified-602595686:1.4.86", + "adikhbfjdbjkhelbdnffogkobkekkkej@chrome-store-foxified-733847072:1.4.116", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-602595686:1.1.18", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified--1752391574:1.1.62", + "adikhbfjdbjkhelbdnffogkobkekkkej@chrome-store-foxified-1521397713:1.4.98", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-186198407:1.1.62", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified--773562225:1.1.58", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-1401098123:1.1.58", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-1449236458:1.1.60", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-236209619:1.1.57", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-3481853712:1.1.31", + "adikhbfjdbjkhelbdnffogkobkekkkej@chrome-store-foxified-1688471316:1.4.90", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-152217654:1.1.20", + "adikhbfjdbjkhelbdnffogkobkekkkej@chrome-store-foxified-3438678729:1.4.98", + "adikhbfjdbjkhelbdnffogkobkekkkej@chrome-store-foxified-2454439378:1.4.21", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-2046994386:1.1.65", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-193819860:1.1.19", + "adikhbfjdbjkhelbdnffogkobkekkkej@chrome-store-foxified-3879599528:1.4.117", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-2415332953:1.1.20", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-847613368:1.1.60", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-1280087853:1.1.60", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified--151016529:1.1.69", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified--979659957:1.1.58", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified--1979139958:1.1.67", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-3352384903:1.1.18", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-3268672171:1.1.38", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified--202336928:1.1.69", + "adikhbfjdbjkhelbdnffogkobkekkkej@chrome-store-foxified-2983170547:1.4.90", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified--1585490878:1.1.59", + "adikhbfjdbjkhelbdnffogkobkekkkej@chrome-store-foxified-2177517014:1.4.104", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-3577182972:1.1.18", + "gbnahglfafmhaehbdmjedfhdmimjcbed@chrome-store-foxified-1277148406:1.0.24", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-812850283:1.1.19", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-982389028:1.1.22", + "adikhbfjdbjkhelbdnffogkobkekkkej@chrome-store-foxified-unsigned:1.4.96", + "adikhbfjdbjkhelbdnffogkobkekkkej@chrome-store-foxified-1330992822:1.4.118", + "adikhbfjdbjkhelbdnffogkobkekkkej@chrome-store-foxified-541290179:1.4.120", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-1467576223:1.1.70", + "adikhbfjdbjkhelbdnffogkobkekkkej@chrome-store-foxified-2254845478:1.4.100", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-2832090399:1.1.18", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-2097318518:1.1.21", + "adikhbfjdbjkhelbdnffogkobkekkkej@chrome-store-foxified-663309478:1.4.45", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified--626842234:1.1.65", + "adikhbfjdbjkhelbdnffogkobkekkkej@chrome-store-foxified-716753244:1.4.104", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-4173629946:1.1.22", + "adikhbfjdbjkhelbdnffogkobkekkkej@chrome-store-foxified-2913580070:1.4.92", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified--1549092828:1.1.66", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified--1807169270:1.1.62", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-3006539270:1.1.19", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-1339941217:1.1.65", + "adikhbfjdbjkhelbdnffogkobkekkkej@chrome-store-foxified-1096548070:1.4.94", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-2211734837:1.1.21", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified--209771865:1.1.60", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified--1983243749:1.1.65", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-928982793:1.1.71", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified--1947244404:1.1.66", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-1735158003:1.1.19", + "adikhbfjdbjkhelbdnffogkobkekkkej@chrome-store-foxified-1133586665:1.4.90", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-1234331632:1.1.65", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified--2060468063:1.1.65", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-1069458651:1.1.66", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-1123785007:1.1.70", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-687054404:1.1.19", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-335669509:1.1.60", + "adikhbfjdbjkhelbdnffogkobkekkkej@chrome-store-foxified-2033774862:1.4.50", + "adikhbfjdbjkhelbdnffogkobkekkkej@chrome-store-foxified-4290968187:1.4.60", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified--440270299:1.1.60", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-1417985934:1.1.77", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-2803907862:1.1.19", + "adikhbfjdbjkhelbdnffogkobkekkkej@chrome-store-foxified-3741400573:1.4.118", + "adikhbfjdbjkhelbdnffogkobkekkkej@chrome-store-foxified-3953484614:1.4.77", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-44962060:1.1.16", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified--1583440209:1.1.60", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-1903979053:1.1.20", + "adikhbfjdbjkhelbdnffogkobkekkkej@chrome-store-foxified-3474049369:1.4.99", + "adikhbfjdbjkhelbdnffogkobkekkkej@chrome-store-foxified-1491079449:1.4.118", + "adikhbfjdbjkhelbdnffogkobkekkkej@chrome-store-foxified-1990404785:1.4.87", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-1936249256:1.1.66", + "adikhbfjdbjkhelbdnffogkobkekkkej@chrome-store-foxified-3268672171:1.4.90", + "adikhbfjdbjkhelbdnffogkobkekkkej@chrome-store-foxified--1421492352:1.4.127", + "adikhbfjdbjkhelbdnffogkobkekkkej@chrome-store-foxified-1012885591:1.4.27", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-3147543853:1.1.21", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-3082243890:1.1.22", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-3268672171:1.1.23", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-434557351:1.1.65", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified--211299310:1.1.69", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-1711457176:1.1.23", + "ohfbnjhbpjlkbkagpkdoocefjocageoa@chrome-store-foxified-795052127:1.1.20" + ], + "unblocked": [] + }, + "schema": 1661798240999, + "key_format": "{guid}:{version}", + "stash_time": 1661862907673, + "id": "2a88ca25-9f3d-4d31-ba08-adb5051eeb9a", + "last_modified": 1661863044535 + }, + { + "stash": { + "blocked": [ + "sparrow@ubiqsmart.com:10.14.7", + "sparrow@ubiqsmart.com:8.0.18", + "sparrow@ubiqsmart.com:8.0.22", + "sparrow@ubiqsmart.com:8.0.13", + "WAX_auto_V_1.1@rebornbender.ru:1.1", + "sparrow@ubiqsmart.com:8.0.24", + "sparrow@ubiqsmart.com:8.0.17", + "sparrow@ubiqsmart.com:10.12.5", + "sparrow@ubiqsmart.com:8.0.14", + "sparrow@ubiqsmart.com:10.12.4", + "sparrow@ubiqsmart.com:8.0.20", + "sparrow@ubiqsmart.com:8.0.23", + "sparrow@ubiqsmart.com:8.0.12", + "sparrow@ubiqsmart.com:8.0.25", + "sparrow@ubiqsmart.com:8.0.16", + "sparrow@ubiqsmart.com:8.0.15", + "sparrow@ubiqsmart.com:8.0.21" + ], + "unblocked": [] + }, + "schema": 1661791003509, + "key_format": "{guid}:{version}", + "stash_time": 1661798108429, + "id": "387d5100-0693-4b67-99d2-52e655fe8875", + "last_modified": 1661798240935 + }, { "stash": { "blocked": [ @@ -1319,5 +1824,5 @@ "last_modified": 1656333551168 } ], - "timestamp": 1661171852687 + "timestamp": 1661971043645 } diff --git a/services/settings/dumps/security-state/intermediates.json b/services/settings/dumps/security-state/intermediates.json index 960e225cf4199..60b90434cb7e5 100644 --- a/services/settings/dumps/security-state/intermediates.json +++ b/services/settings/dumps/security-state/intermediates.json @@ -1,7 +1,7 @@ { "data": [ { - "schema": 1661647749235, + "schema": 1661950623678, "derHash": "lzpBJ2/9AeAnoqrUnjTDeEbT6Xb/amILZxLjODIEGqY=", "subject": "CN=Go Daddy Secure Certificate Authority - G2,OU=http://certs.godaddy.com/repository/,O=GoDaddy.com%5C%5C, Inc.,L=Scottsdale,ST=Arizona,C=US", "subjectDN": "MIG0MQswCQYDVQQGEwJVUzEQMA4GA1UECBMHQXJpem9uYTETMBEGA1UEBxMKU2NvdHRzZGFsZTEaMBgGA1UEChMRR29EYWRkeS5jb20sIEluYy4xLTArBgNVBAsTJGh0dHA6Ly9jZXJ0cy5nb2RhZGR5LmNvbS9yZXBvc2l0b3J5LzEzMDEGA1UEAxMqR28gRGFkZHkgU2VjdXJlIENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcy", @@ -14,9 +14,405 @@ "mimetype": "application/x-pem-file" }, "pubKeyHash": "8Rw90Ej3Ttt8RRkrg+WYDS9n7IS03bk5bjP/UXPtaY8=", - "crlite_enrolled": true, + "crlite_enrolled": false, "id": "549c92e2-3738-4c8c-ae37-407e4e6158ce", - "last_modified": 1661648223209 + "last_modified": 1662015423121 + }, + { + "schema": 1661950129116, + "derHash": "EiGqtgN56f55kJqhCNwcLT/DEvZxy0vN4BxOZ9fnwIw=", + "subject": "CN=XinNet ECC EV,O=Xin Net Technology Corp.,C=CN", + "subjectDN": "MEgxCzAJBgNVBAYTAkNOMSEwHwYDVQQKExhYaW4gTmV0IFRlY2hub2xvZ3kgQ29ycC4xFjAUBgNVBAMTDVhpbk5ldCBFQ0MgRVY=", + "whitelist": false, + "attachment": { + "hash": "ec1b5594e93dd3df5f47be180392a5df3799db70fa6f739a38b2dc1258d844f2", + "size": 1223, + "filename": "7l3LEq83uTOiu25Z-S2ntnn1tY2VhTob4m2EuUoejj4=.pem", + "location": "security-state-staging/intermediates/000d7a9e-dc19-4de7-819e-a3d1642169d7.pem", + "mimetype": "application/x-pem-file" + }, + "pubKeyHash": "7l3LEq83uTOiu25Z+S2ntnn1tY2VhTob4m2EuUoejj4=", + "crlite_enrolled": false, + "id": "e09c7cae-f477-4daa-a33a-f1e5ff8b4b3e", + "last_modified": 1661950623229 + }, + { + "schema": 1661950129980, + "derHash": "WA/yu8tE2HQCXO2sGHMy6f+f/lF1vfnUO/HFLsjWexM=", + "subject": "CN=XinNet ECC DV,O=Xin Net Technology Corp.,C=CN", + "subjectDN": "MEgxCzAJBgNVBAYTAkNOMSEwHwYDVQQKExhYaW4gTmV0IFRlY2hub2xvZ3kgQ29ycC4xFjAUBgNVBAMTDVhpbk5ldCBFQ0MgRFY=", + "whitelist": false, + "attachment": { + "hash": "c5d97c542f1f94ed8f61b6adff2b757dbfc935677082bc3a7b2ee23f09f4f1ca", + "size": 1232, + "filename": "WP9XnD6Mzq1Rfi6Wow1435AnbFh7wz9X46zcDZb0kVE=.pem", + "location": "security-state-staging/intermediates/25c1e6b8-ac9d-4a5d-a746-5a91a4226446.pem", + "mimetype": "application/x-pem-file" + }, + "pubKeyHash": "WP9XnD6Mzq1Rfi6Wow1435AnbFh7wz9X46zcDZb0kVE=", + "crlite_enrolled": false, + "id": "50f44cf2-d9fa-456c-a653-e1b601d9579c", + "last_modified": 1661950623222 + }, + { + "schema": 1661950127406, + "derHash": "NOveN3X8Y7boDw5H6wouJo9/5O/1Et1BEY2EBQJ0df4=", + "subject": "CN=XinNet RSA OV,O=Xin Net Technology Corp.,C=CN", + "subjectDN": "MEgxCzAJBgNVBAYTAkNOMSEwHwYDVQQKExhYaW4gTmV0IFRlY2hub2xvZ3kgQ29ycC4xFjAUBgNVBAMTDVhpbk5ldCBSU0EgT1Y=", + "whitelist": false, + "attachment": { + "hash": "61b4f1271f971b35dbb21efa65381c7a9a42b953a4f2a97ea248655b619c4e5b", + "size": 2247, + "filename": "9Xa_SPv1KNbKazcD_MKRMyHRIy068JKcVvOiCc_T5ec=.pem", + "location": "security-state-staging/intermediates/d929be9a-911a-4cd7-b4ef-68fe521f2f73.pem", + "mimetype": "application/x-pem-file" + }, + "pubKeyHash": "9Xa/SPv1KNbKazcD/MKRMyHRIy068JKcVvOiCc/T5ec=", + "crlite_enrolled": false, + "id": "07ba494f-75ae-4540-b3d7-77addd473069", + "last_modified": 1661950623216 + }, + { + "schema": 1661950126528, + "derHash": "WgJok1zFELRL/f49TCrM3kh93AkTGaeFiUjpEateRMo=", + "subject": "CN=XinNet ECC OV,O=Xin Net Technology Corp.,C=CN", + "subjectDN": "MEgxCzAJBgNVBAYTAkNOMSEwHwYDVQQKExhYaW4gTmV0IFRlY2hub2xvZ3kgQ29ycC4xFjAUBgNVBAMTDVhpbk5ldCBFQ0MgT1Y=", + "whitelist": false, + "attachment": { + "hash": "927177d7d47caf03e7f4528c61e35fad1088d69d5519540d7739f1def2c2d1d9", + "size": 1232, + "filename": "4UHsE1oKRNnyRDb9r1JEoDJdB_2Z_iYsr5srbVeKXWE=.pem", + "location": "security-state-staging/intermediates/6d619157-2e56-4c0e-b34a-054ef0da5c2d.pem", + "mimetype": "application/x-pem-file" + }, + "pubKeyHash": "4UHsE1oKRNnyRDb9r1JEoDJdB/2Z/iYsr5srbVeKXWE=", + "crlite_enrolled": false, + "id": "fef2ab3a-953e-4073-b1f2-075943647fd8", + "last_modified": 1661950623209 + }, + { + "schema": 1661950125663, + "derHash": "lBbHH6N1XLbnzbugOfYwYE0BcZNPl4JOjz6tSyqKVyA=", + "subject": "CN=XinNet RSA DV,O=Xin Net Technology Corp.,C=CN", + "subjectDN": "MEgxCzAJBgNVBAYTAkNOMSEwHwYDVQQKExhYaW4gTmV0IFRlY2hub2xvZ3kgQ29ycC4xFjAUBgNVBAMTDVhpbk5ldCBSU0EgRFY=", + "whitelist": false, + "attachment": { + "hash": "b61e9fd17d0575a17d1e3a51c9d9964f2572b4aeb88cf2f7d4566e7420426f0e", + "size": 2243, + "filename": "b-c_9Frdh5caVlh6xbrUxlx8iw2QGiqGgHHInw7aQiU=.pem", + "location": "security-state-staging/intermediates/3cdf11cb-6978-4ba3-bc21-6d79993cac7c.pem", + "mimetype": "application/x-pem-file" + }, + "pubKeyHash": "b+c/9Frdh5caVlh6xbrUxlx8iw2QGiqGgHHInw7aQiU=", + "crlite_enrolled": false, + "id": "caffc552-3e32-412d-b52b-b3d2853e49f7", + "last_modified": 1661950623202 + }, + { + "schema": 1661950128246, + "derHash": "ua8z+kJvLIsZg4VqX5H8DSjskw0UGYiPww31+03nYV8=", + "subject": "CN=XinNet RSA EV,O=Xin Net Technology Corp.,C=CN", + "subjectDN": "MEgxCzAJBgNVBAYTAkNOMSEwHwYDVQQKExhYaW4gTmV0IFRlY2hub2xvZ3kgQ29ycC4xFjAUBgNVBAMTDVhpbk5ldCBSU0EgRVY=", + "whitelist": false, + "attachment": { + "hash": "3a41f53cdc05597979b2623ddc040f3fae0b066dc2ea78f533ef4a467cb6be89", + "size": 2235, + "filename": "-slmUS6OMhZJUXFu69pBpnaUXYm81RhXXFsdayDb5Q4=.pem", + "location": "security-state-staging/intermediates/0903cfac-baf5-4e5a-a04c-3d446acaee56.pem", + "mimetype": "application/x-pem-file" + }, + "pubKeyHash": "+slmUS6OMhZJUXFu69pBpnaUXYm81RhXXFsdayDb5Q4=", + "crlite_enrolled": false, + "id": "29c1bc7e-013c-43ec-ac2d-6de40bdf28f0", + "last_modified": 1661950623195 + }, + { + "schema": 1661950130681, + "derHash": "hrEJIywZ7FFPjLJniOZQkCk/lt2NKUIBejMDWrIl1fs=", + "subject": "CN=CrowdStrike Global EV CA,O=CrowdStrike\, Inc.,C=US", + "subjectDN": "MEwxCzAJBgNVBAYTAlVTMRowGAYDVQQKExFDcm93ZFN0cmlrZSwgSW5jLjEhMB8GA1UEAxMYQ3Jvd2RTdHJpa2UgR2xvYmFsIEVWIENB", + "whitelist": false, + "attachment": { + "hash": "8f864179f48ab2665c707017cf4785a5f7c422122f7b13f019daf945d09be137", + "size": 1739, + "filename": "jbtEGKuN8b5BZ9dJqvvW9XPxqqghhmKxB6nuThNyJd8=.pem", + "location": "security-state-staging/intermediates/9313df52-3e03-45ef-9534-34735860f583.pem", + "mimetype": "application/x-pem-file" + }, + "pubKeyHash": "jbtEGKuN8b5BZ9dJqvvW9XPxqqghhmKxB6nuThNyJd8=", + "crlite_enrolled": false, + "id": "cbf4b97a-4484-4add-84fe-5fa8e074c83e", + "last_modified": 1661950623184 + }, + { + "schema": 1661950130979, + "derHash": "DVG2zc80qfIhRHh/P9kg3IgA+2BJC/yNKJoZU+D72k0=", + "subject": "CN=TrustAsia EV TLS Pro CA G2,O=TrustAsia Technologies\, Inc.,C=CN", + "subjectDN": "MFkxCzAJBgNVBAYTAkNOMSUwIwYDVQQKExxUcnVzdEFzaWEgVGVjaG5vbG9naWVzLCBJbmMuMSMwIQYDVQQDExpUcnVzdEFzaWEgRVYgVExTIFBybyBDQSBHMg==", + "whitelist": false, + "attachment": { + "hash": "8410138c0818efe36c3c5e447194465f2a0b00c3453529916ca8fa0c0abaf130", + "size": 1670, + "filename": "JTqDYh_WILx03HF-qMSr0wy2uDSoWh4uqNea4MnbzZ8=.pem", + "location": "security-state-staging/intermediates/622cc492-e266-42bf-8807-edd1fafd23b3.pem", + "mimetype": "application/x-pem-file" + }, + "pubKeyHash": "JTqDYh/WILx03HF+qMSr0wy2uDSoWh4uqNea4MnbzZ8=", + "crlite_enrolled": false, + "id": "0188e712-0f9b-4e95-8c28-48e3eaae9945", + "last_modified": 1661950623173 + }, + { + "schema": 1661950131120, + "derHash": "jNco+cM5G6Q2ChDGbKSEyAdlHWIH8QYzZp7YiB/pG/U=", + "subject": "CN=CrowdStrike Global EV CA,O=CrowdStrike\, Inc.,C=US", + "subjectDN": "MEwxCzAJBgNVBAYTAlVTMRowGAYDVQQKExFDcm93ZFN0cmlrZSwgSW5jLjEhMB8GA1UEAxMYQ3Jvd2RTdHJpa2UgR2xvYmFsIEVWIENB", + "whitelist": false, + "attachment": { + "hash": "aeae72b6b6e2f2f8a2aa8ada26064ad98f11711c82a084d34471dd8ada45bc94", + "size": 1853, + "filename": "jbtEGKuN8b5BZ9dJqvvW9XPxqqghhmKxB6nuThNyJd8=.pem", + "location": "security-state-staging/intermediates/983271b4-b453-4809-8582-3af405f54fdc.pem", + "mimetype": "application/x-pem-file" + }, + "pubKeyHash": "jbtEGKuN8b5BZ9dJqvvW9XPxqqghhmKxB6nuThNyJd8=", + "crlite_enrolled": false, + "id": "edfeea6f-0f8a-4a58-a196-634c0ea181e0", + "last_modified": 1661950623163 + }, + { + "schema": 1661950130824, + "derHash": "Sv/k/vOUZNF4jGYK9ZHV5gGyYcSBHfCj3Z1hyv6OXtg=", + "subject": "CN=TrustAsia EV TLS Pro CA,O=TrustAsia Technologies\, Inc.,C=CN", + "subjectDN": "MFYxCzAJBgNVBAYTAkNOMSUwIwYDVQQKExxUcnVzdEFzaWEgVGVjaG5vbG9naWVzLCBJbmMuMSAwHgYDVQQDExdUcnVzdEFzaWEgRVYgVExTIFBybyBDQQ==", + "whitelist": false, + "attachment": { + "hash": "9a34bc6ed9a54f81e18afe77e80e21229b781d54bc55db04519ecea2fb3e30f4", + "size": 1658, + "filename": "JTqDYh_WILx03HF-qMSr0wy2uDSoWh4uqNea4MnbzZ8=.pem", + "location": "security-state-staging/intermediates/50647d00-cffd-4a34-99f4-97db530d09bd.pem", + "mimetype": "application/x-pem-file" + }, + "pubKeyHash": "JTqDYh/WILx03HF+qMSr0wy2uDSoWh4uqNea4MnbzZ8=", + "crlite_enrolled": false, + "id": "58b5207a-569c-440d-b868-afae280ff8f2", + "last_modified": 1661950623152 + }, + { + "schema": 1661906933349, + "derHash": "Zo+7JXQ1z23AEzmvCycq0Vz0Z2d2ooYc2ve0tZi/8Wk=", + "subject": "CN=XinChaCha Trust EV CA,O=Beijing Xinchacha Credit Management Co.\, Ltd.,C=CN", + "subjectDN": "MGUxCzAJBgNVBAYTAkNOMTYwNAYDVQQKEy1CZWlqaW5nIFhpbmNoYWNoYSBDcmVkaXQgTWFuYWdlbWVudCBDby4sIEx0ZC4xHjAcBgNVBAMTFVhpbkNoYUNoYSBUcnVzdCBFViBDQQ==", + "whitelist": false, + "attachment": { + "hash": "f70e2c6d4c35d993bbd23ea704ba440aeb7e897051779c8b3991db73f197269d", + "size": 2272, + "filename": "z_CnQiGlE74EJzi1ZG4akzGd1nL6ajMCLhA5qyb8cU4=.pem", + "location": "security-state-staging/intermediates/6ec34579-3925-47b2-ba80-0c4fca54ff44.pem", + "mimetype": "application/x-pem-file" + }, + "pubKeyHash": "z/CnQiGlE74EJzi1ZG4akzGd1nL6ajMCLhA5qyb8cU4=", + "crlite_enrolled": false, + "id": "1b981b05-f49c-4ca4-a586-26a3109ef7a5", + "last_modified": 1661907423176 + }, + { + "schema": 1661906935892, + "derHash": "FvZ5hlHV7bbuxvlSzgh5+PQsvoU3szQJp5yknNu8/5k=", + "subject": "CN=cnTrus OV SSL - ECC,O=Zhejiang Huluwa Digital Certification Co.\, Ltd.,C=CN", + "subjectDN": "MGUxCzAJBgNVBAYTAkNOMTgwNgYDVQQKEy9aaGVqaWFuZyBIdWx1d2EgRGlnaXRhbCBDZXJ0aWZpY2F0aW9uIENvLiwgTHRkLjEcMBoGA1UEAxMTY25UcnVzIE9WIFNTTCAtIEVDQw==", + "whitelist": false, + "attachment": { + "hash": "002a6acdc3c374f62f67fd30dd9536cf465dbc4627de7b84e65b927fa9d99a28", + "size": 1272, + "filename": "OL0bKOdUSLHUHrFUERbz016kPXNkYaN0TJUKfwHea20=.pem", + "location": "security-state-staging/intermediates/c5a9ddfb-bdbe-41fa-a272-1dc4a26c19ea.pem", + "mimetype": "application/x-pem-file" + }, + "pubKeyHash": "OL0bKOdUSLHUHrFUERbz016kPXNkYaN0TJUKfwHea20=", + "crlite_enrolled": false, + "id": "2265ec70-253a-4676-918d-6682af991506", + "last_modified": 1661907423169 + }, + { + "schema": 1661906934190, + "derHash": "8HJ01/0PLMcb67qwrjjHijVeRApctxGANl443W1Ug8M=", + "subject": "CN=XinChaCha Trust OV CA,O=Beijing Xinchacha Credit Management Co.\, Ltd.,C=CN", + "subjectDN": "MGUxCzAJBgNVBAYTAkNOMTYwNAYDVQQKEy1CZWlqaW5nIFhpbmNoYWNoYSBDcmVkaXQgTWFuYWdlbWVudCBDby4sIEx0ZC4xHjAcBgNVBAMTFVhpbkNoYUNoYSBUcnVzdCBPViBDQQ==", + "whitelist": false, + "attachment": { + "hash": "d57ef18ccc13871bffd1bdad41889ee99b3c115253fedd6680a313387dbef6f6", + "size": 2284, + "filename": "uLEgjMGP3fq8t2rIJ970JMr2rukdDUMNKl6PaiWvQVQ=.pem", + "location": "security-state-staging/intermediates/9d5d1d3b-bb29-41bd-958b-f7b81c81a6ba.pem", + "mimetype": "application/x-pem-file" + }, + "pubKeyHash": "uLEgjMGP3fq8t2rIJ970JMr2rukdDUMNKl6PaiWvQVQ=", + "crlite_enrolled": false, + "id": "cc250962-aec5-417e-8c3e-469ad27f7fa7", + "last_modified": 1661907423162 + }, + { + "schema": 1661906932501, + "derHash": "agt+UEBHElIXYKML9EJw7qyKYC/pesNurqk6cvs+o3k=", + "subject": "CN=XinChaCha Trust EV CA - ECC,O=Beijing Xinchacha Credit Management Co.\, Ltd.,C=CN", + "subjectDN": "MGsxCzAJBgNVBAYTAkNOMTYwNAYDVQQKEy1CZWlqaW5nIFhpbmNoYWNoYSBDcmVkaXQgTWFuYWdlbWVudCBDby4sIEx0ZC4xJDAiBgNVBAMTG1hpbkNoYUNoYSBUcnVzdCBFViBDQSAtIEVDQw==", + "whitelist": false, + "attachment": { + "hash": "8f95688927c53ff91efe09128d57e1b3c56765645370c3bb9f7a38acac4a912d", + "size": 1268, + "filename": "7ZXdfPfc8OcYB2GIKvO1mGzw8TPQeKMNhzcVSkgmEbs=.pem", + "location": "security-state-staging/intermediates/64dba359-0562-4846-a60c-e54801eccbcf.pem", + "mimetype": "application/x-pem-file" + }, + "pubKeyHash": "7ZXdfPfc8OcYB2GIKvO1mGzw8TPQeKMNhzcVSkgmEbs=", + "crlite_enrolled": false, + "id": "76a3ca32-efae-4ad5-b5a6-acab95639d15", + "last_modified": 1661907423156 + }, + { + "schema": 1661906936754, + "derHash": "Y9vmdVbbAXpBoS5guRLOWdpURf9oIDypG5Sk4qRVQbE=", + "subject": "CN=XinChaCha Trust DV CA - ECC,O=Beijing Xinchacha Credit Management Co.\, Ltd.,C=CN", + "subjectDN": "MGsxCzAJBgNVBAYTAkNOMTYwNAYDVQQKEy1CZWlqaW5nIFhpbmNoYWNoYSBDcmVkaXQgTWFuYWdlbWVudCBDby4sIEx0ZC4xJDAiBgNVBAMTG1hpbkNoYUNoYSBUcnVzdCBEViBDQSAtIEVDQw==", + "whitelist": false, + "attachment": { + "hash": "4ca1d8b93b380dff6393b77a14765975970188962575db0b94ba1723d0365cae", + "size": 1280, + "filename": "fmCenho_93PqREjCITEp8fFzy55lRWOGXJCfhad7-kE=.pem", + "location": "security-state-staging/intermediates/81daeee6-5b2c-447f-9056-b6d23b4a476a.pem", + "mimetype": "application/x-pem-file" + }, + "pubKeyHash": "fmCenho/93PqREjCITEp8fFzy55lRWOGXJCfhad7+kE=", + "crlite_enrolled": false, + "id": "1e509002-bf7b-4bb1-a264-7b4d11b10f0c", + "last_modified": 1661907423149 + }, + { + "schema": 1661906931570, + "derHash": "PZMWEUZxY12g6fitbx2PCxJTLJelrwcZ+En+/IK5FQI=", + "subject": "CN=XinChaCha Trust DV CA,O=Beijing Xinchacha Credit Management Co.\, Ltd.,C=CN", + "subjectDN": "MGUxCzAJBgNVBAYTAkNOMTYwNAYDVQQKEy1CZWlqaW5nIFhpbmNoYWNoYSBDcmVkaXQgTWFuYWdlbWVudCBDby4sIEx0ZC4xHjAcBgNVBAMTFVhpbkNoYUNoYSBUcnVzdCBEViBDQQ==", + "whitelist": false, + "attachment": { + "hash": "d6c77cb834d99148e2d80269af29e983025a66de533d334273c82fc23be8341e", + "size": 2284, + "filename": "TRR7aySIhDwHJnu0AR64QyqmI4l57gkFluuxAb09MlY=.pem", + "location": "security-state-staging/intermediates/da220e75-a68f-4527-85dd-1a47672425c6.pem", + "mimetype": "application/x-pem-file" + }, + "pubKeyHash": "TRR7aySIhDwHJnu0AR64QyqmI4l57gkFluuxAb09MlY=", + "crlite_enrolled": false, + "id": "09be45e1-6f3d-4a53-90e4-14b4a25ad410", + "last_modified": 1661907423142 + }, + { + "schema": 1661906935049, + "derHash": "b3xt4CkZ3/b2iFnm+1egIVG7737PzP+aWYEwSWtadTk=", + "subject": "CN=cnTrus EV SSL - ECC,O=Zhejiang Huluwa Digital Certification Co.\, Ltd.,C=CN", + "subjectDN": "MGUxCzAJBgNVBAYTAkNOMTgwNgYDVQQKEy9aaGVqaWFuZyBIdWx1d2EgRGlnaXRhbCBDZXJ0aWZpY2F0aW9uIENvLiwgTHRkLjEcMBoGA1UEAxMTY25UcnVzIEVWIFNTTCAtIEVDQw==", + "whitelist": false, + "attachment": { + "hash": "4905349723070c7f45e8ac115a26d5d88916ebe60c5ddb4b5acf39f4f7a7aae6", + "size": 1260, + "filename": "AL_7FpWAouK0_07PMAyzjk9aKTezKRO9_ksLpB7QgpA=.pem", + "location": "security-state-staging/intermediates/b73656ba-3c09-4803-b936-51dbf559fed3.pem", + "mimetype": "application/x-pem-file" + }, + "pubKeyHash": "AL/7FpWAouK0/07PMAyzjk9aKTezKRO9/ksLpB7QgpA=", + "crlite_enrolled": false, + "id": "84894d2a-3eed-47ff-b1c7-8e1a52c09a3d", + "last_modified": 1661907423135 + }, + { + "schema": 1661906930734, + "derHash": "/DBCDWjBfIOfO5RuvbEBv3LGTJ6WZYwfPjV+atiqyuI=", + "subject": "CN=cnTrus DV SSL - ECC,O=Zhejiang Huluwa Digital Certification Co.\, Ltd.,C=CN", + "subjectDN": "MGUxCzAJBgNVBAYTAkNOMTgwNgYDVQQKEy9aaGVqaWFuZyBIdWx1d2EgRGlnaXRhbCBDZXJ0aWZpY2F0aW9uIENvLiwgTHRkLjEcMBoGA1UEAxMTY25UcnVzIERWIFNTTCAtIEVDQw==", + "whitelist": false, + "attachment": { + "hash": "b30469b78b032a6a7f37cece69e37d38c7d8651ef0c2d6fa3a7a38eb1c5f71a9", + "size": 1272, + "filename": "4d2pGHdP5aQB3aOa2R6b2UM0oy5Bxp2lK4kDKazLTEw=.pem", + "location": "security-state-staging/intermediates/d74f32a6-0439-48e9-a261-378ccd2c60ee.pem", + "mimetype": "application/x-pem-file" + }, + "pubKeyHash": "4d2pGHdP5aQB3aOa2R6b2UM0oy5Bxp2lK4kDKazLTEw=", + "crlite_enrolled": false, + "id": "f56167e2-2e5b-4f9b-8cd0-6cf6480b1ee1", + "last_modified": 1661907423128 + }, + { + "schema": 1661906929849, + "derHash": "FDYT2+zGVCEAska/UZUjZM9wI8ZW9wZ7tm0tNH37F8Y=", + "subject": "CN=XinChaCha Trust OV CA - ECC,O=Beijing Xinchacha Credit Management Co.\, Ltd.,C=CN", + "subjectDN": "MGsxCzAJBgNVBAYTAkNOMTYwNAYDVQQKEy1CZWlqaW5nIFhpbmNoYWNoYSBDcmVkaXQgTWFuYWdlbWVudCBDby4sIEx0ZC4xJDAiBgNVBAMTG1hpbkNoYUNoYSBUcnVzdCBPViBDQSAtIEVDQw==", + "whitelist": false, + "attachment": { + "hash": "fa3afdda42bafdb83d42ebfb1818f7002972d937dee47db3397ebaa90e628d96", + "size": 1280, + "filename": "oYo9hFLoMunri3WRdgEd07J7XcD-WrfKOTckVulvO3s=.pem", + "location": "security-state-staging/intermediates/383258ec-eed4-4c4d-917a-e2b89cd2cb4b.pem", + "mimetype": "application/x-pem-file" + }, + "pubKeyHash": "oYo9hFLoMunri3WRdgEd07J7XcD+WrfKOTckVulvO3s=", + "crlite_enrolled": false, + "id": "468cbfa3-97cb-4c68-95da-aaff3c92cc10", + "last_modified": 1661907423121 + }, + { + "schema": 1661885332436, + "derHash": "W32hFE0mDLEL8pVXHAk9UG/SN5/ehxBpK4wEu5gahtQ=", + "subject": "CN=cnTrus DV SSL CA,O=Zhejiang Huluwa Digital Certification Co.\, Ltd.,C=CN", + "subjectDN": "MGIxCzAJBgNVBAYTAkNOMTgwNgYDVQQKEy9aaGVqaWFuZyBIdWx1d2EgRGlnaXRhbCBDZXJ0aWZpY2F0aW9uIENvLiwgTHRkLjEZMBcGA1UEAxMQY25UcnVzIERWIFNTTCBDQQ==", + "whitelist": false, + "attachment": { + "hash": "24f352badaf2347cae30cfc9b2aed7261b2bde847b964ca6bded8f56f5c3c1b7", + "size": 2280, + "filename": "taASTswaPD95aPQ40zBUMUDMhrg_ilqpKUJp_BA4fZY=.pem", + "location": "security-state-staging/intermediates/2b620349-594f-4ba3-ab50-5100b887e28a.pem", + "mimetype": "application/x-pem-file" + }, + "pubKeyHash": "taASTswaPD95aPQ40zBUMUDMhrg/ilqpKUJp/BA4fZY=", + "crlite_enrolled": false, + "id": "b79706c1-d86c-4666-b8de-81f9823acc9c", + "last_modified": 1661885823291 + }, + { + "schema": 1661885333293, + "derHash": "As4WI1qIuX1hp8Fv9RRuT3ulgIga3CJlADNpi0kSyTk=", + "subject": "CN=cnTrus EV SSL CA,O=Zhejiang Huluwa Digital Certification Co.\, Ltd.,C=CN", + "subjectDN": "MGIxCzAJBgNVBAYTAkNOMTgwNgYDVQQKEy9aaGVqaWFuZyBIdWx1d2EgRGlnaXRhbCBDZXJ0aWZpY2F0aW9uIENvLiwgTHRkLjEZMBcGA1UEAxMQY25UcnVzIEVWIFNTTCBDQQ==", + "whitelist": false, + "attachment": { + "hash": "8a2c62796de49738c6648befe89ee8f338658faaa444411e7f508ede4a3c145f", + "size": 2268, + "filename": "_Fk4GOAtmSo-xJLXixnH1A1pzonFgo4IAGSrf3wfR1k=.pem", + "location": "security-state-staging/intermediates/b20d43ab-f8ba-4334-9fe7-9761a8c8df5b.pem", + "mimetype": "application/x-pem-file" + }, + "pubKeyHash": "/Fk4GOAtmSo+xJLXixnH1A1pzonFgo4IAGSrf3wfR1k=", + "crlite_enrolled": false, + "id": "3b273f22-4f3a-4737-979e-0157ed65f0b3", + "last_modified": 1661885823283 + }, + { + "schema": 1661885334134, + "derHash": "mSTm/A5VqfD/qZgpjzAQDBorOAFM5LE3fQjELuQkN2M=", + "subject": "CN=cnTrus OV SSL CA,O=Zhejiang Huluwa Digital Certification Co.\, Ltd.,C=CN", + "subjectDN": "MGIxCzAJBgNVBAYTAkNOMTgwNgYDVQQKEy9aaGVqaWFuZyBIdWx1d2EgRGlnaXRhbCBDZXJ0aWZpY2F0aW9uIENvLiwgTHRkLjEZMBcGA1UEAxMQY25UcnVzIE9WIFNTTCBDQQ==", + "whitelist": false, + "attachment": { + "hash": "425808379815fb809c7db9dcffeea8544b6375be9dd70bed99890e0ae683b3cc", + "size": 2280, + "filename": "UvPptw6qfgD_o4kl84TncVTWChjvpEgjLjc6AEALwhY=.pem", + "location": "security-state-staging/intermediates/8b8219c8-a3a0-478e-a9a8-bf27621b9b37.pem", + "mimetype": "application/x-pem-file" + }, + "pubKeyHash": "UvPptw6qfgD/o4kl84TncVTWChjvpEgjLjc6AEALwhY=", + "crlite_enrolled": false, + "id": "c1c36072-d3f6-41ef-9535-4773ad262386", + "last_modified": 1661885823276 }, { "schema": 1661626623588, @@ -6336,24 +6732,6 @@ "id": "1cc0b067-f5fa-460a-b0ce-63e242f5c312", "last_modified": 1647406642046 }, - { - "schema": 1647406128777, - "derHash": "Sv/k/vOUZNF4jGYK9ZHV5gGyYcSBHfCj3Z1hyv6OXtg=", - "subject": "CN=TrustAsia EV TLS Pro CA,O=TrustAsia Technologies\, Inc.,C=CN", - "subjectDN": "MFYxCzAJBgNVBAYTAkNOMSUwIwYDVQQKExxUcnVzdEFzaWEgVGVjaG5vbG9naWVzLCBJbmMuMSAwHgYDVQQDExdUcnVzdEFzaWEgRVYgVExTIFBybyBDQQ==", - "whitelist": false, - "attachment": { - "hash": "9a34bc6ed9a54f81e18afe77e80e21229b781d54bc55db04519ecea2fb3e30f4", - "size": 1658, - "filename": "JTqDYh_WILx03HF-qMSr0wy2uDSoWh4uqNea4MnbzZ8=.pem", - "location": "security-state-staging/intermediates/50647d00-cffd-4a34-99f4-97db530d09bd.pem", - "mimetype": "application/x-pem-file" - }, - "pubKeyHash": "JTqDYh/WILx03HF+qMSr0wy2uDSoWh4uqNea4MnbzZ8=", - "crlite_enrolled": true, - "id": "58b5207a-569c-440d-b868-afae280ff8f2", - "last_modified": 1647406642035 - }, { "schema": 1647406128086, "derHash": "/BbVMgO9kYfWnMmdLaVRB2tNyymBQNZ1H3oBKWbJn90=", @@ -7704,24 +8082,6 @@ "id": "f5c1eed1-baba-4a0e-b8bd-e11bd62a7bec", "last_modified": 1645579198521 }, - { - "schema": 1645578786580, - "derHash": "hrEJIywZ7FFPjLJniOZQkCk/lt2NKUIBejMDWrIl1fs=", - "subject": "CN=CrowdStrike Global EV CA,O=CrowdStrike\, Inc.,C=US", - "subjectDN": "MEwxCzAJBgNVBAYTAlVTMRowGAYDVQQKExFDcm93ZFN0cmlrZSwgSW5jLjEhMB8GA1UEAxMYQ3Jvd2RTdHJpa2UgR2xvYmFsIEVWIENB", - "whitelist": false, - "attachment": { - "hash": "8f864179f48ab2665c707017cf4785a5f7c422122f7b13f019daf945d09be137", - "size": 1739, - "filename": "jbtEGKuN8b5BZ9dJqvvW9XPxqqghhmKxB6nuThNyJd8=.pem", - "location": "security-state-staging/intermediates/9313df52-3e03-45ef-9534-34735860f583.pem", - "mimetype": "application/x-pem-file" - }, - "pubKeyHash": "jbtEGKuN8b5BZ9dJqvvW9XPxqqghhmKxB6nuThNyJd8=", - "crlite_enrolled": true, - "id": "cbf4b97a-4484-4add-84fe-5fa8e074c83e", - "last_modified": 1645579198508 - }, { "schema": 1645578793638, "derHash": "cQLZcsJOnKaNDm+f9TxfZYzZuGSfKOrY28M2wt9QSBE=", @@ -11682,24 +12042,6 @@ "id": "8e8cddfa-e58f-4def-a0f9-af5024b733c8", "last_modified": 1643540242323 }, - { - "schema": 1643539752426, - "derHash": "jNco+cM5G6Q2ChDGbKSEyAdlHWIH8QYzZp7YiB/pG/U=", - "subject": "CN=CrowdStrike Global EV CA,O=CrowdStrike\, Inc.,C=US", - "subjectDN": "MEwxCzAJBgNVBAYTAlVTMRowGAYDVQQKExFDcm93ZFN0cmlrZSwgSW5jLjEhMB8GA1UEAxMYQ3Jvd2RTdHJpa2UgR2xvYmFsIEVWIENB", - "whitelist": false, - "attachment": { - "hash": "aeae72b6b6e2f2f8a2aa8ada26064ad98f11711c82a084d34471dd8ada45bc94", - "size": 1853, - "filename": "jbtEGKuN8b5BZ9dJqvvW9XPxqqghhmKxB6nuThNyJd8=.pem", - "location": "security-state-staging/intermediates/983271b4-b453-4809-8582-3af405f54fdc.pem", - "mimetype": "application/x-pem-file" - }, - "pubKeyHash": "jbtEGKuN8b5BZ9dJqvvW9XPxqqghhmKxB6nuThNyJd8=", - "crlite_enrolled": true, - "id": "edfeea6f-0f8a-4a58-a196-634c0ea181e0", - "last_modified": 1643540242303 - }, { "schema": 1643539722796, "derHash": "/nNANw1ZWjn/4Q3OIZdEfOZ8mL4o8DMMj8hd0DISSG0=", @@ -12222,24 +12564,6 @@ "id": "c6b2463c-5d7d-46a7-81b3-08d470deb2cb", "last_modified": 1643540241356 }, - { - "schema": 1643539728239, - "derHash": "DVG2zc80qfIhRHh/P9kg3IgA+2BJC/yNKJoZU+D72k0=", - "subject": "CN=TrustAsia EV TLS Pro CA G2,O=TrustAsia Technologies\, Inc.,C=CN", - "subjectDN": "MFkxCzAJBgNVBAYTAkNOMSUwIwYDVQQKExxUcnVzdEFzaWEgVGVjaG5vbG9naWVzLCBJbmMuMSMwIQYDVQQDExpUcnVzdEFzaWEgRVYgVExTIFBybyBDQSBHMg==", - "whitelist": false, - "attachment": { - "hash": "8410138c0818efe36c3c5e447194465f2a0b00c3453529916ca8fa0c0abaf130", - "size": 1670, - "filename": "JTqDYh_WILx03HF-qMSr0wy2uDSoWh4uqNea4MnbzZ8=.pem", - "location": "security-state-staging/intermediates/622cc492-e266-42bf-8807-edd1fafd23b3.pem", - "mimetype": "application/x-pem-file" - }, - "pubKeyHash": "JTqDYh/WILx03HF+qMSr0wy2uDSoWh4uqNea4MnbzZ8=", - "crlite_enrolled": true, - "id": "0188e712-0f9b-4e95-8c28-48e3eaae9945", - "last_modified": 1643540241346 - }, { "schema": 1643539717860, "derHash": "DDfUmcRXkpQcYvHhnwbpdVYlzhFjOi6NuGnHqy14wxk=", @@ -25993,5 +26317,5 @@ "last_modified": 1559865863642 } ], - "timestamp": 1661648223209 + "timestamp": 1662015423121 }
This is an automated email from the git hooks/post-receive script.
richard pushed a commit to branch geckoview-102.3.0esr-12.0-1 in repository tor-browser.
commit 3f81dec850ee679b4da8067c2b5315a74776fa4a Author: alwu alwu@mozilla.com AuthorDate: Wed Aug 31 01:34:44 2022 +0000
Bug 1767360 - use correct image size retrieved from the output type to create video frames buffer. r=media-playback-reviewers,jolin a=RyanVM
Differential Revision: https://phabricator.services.mozilla.com/D154310 --- dom/media/platforms/wmf/WMFVideoMFTManager.cpp | 38 ++++++++++++++++---------- dom/media/platforms/wmf/WMFVideoMFTManager.h | 11 +++++++- 2 files changed, 34 insertions(+), 15 deletions(-)
diff --git a/dom/media/platforms/wmf/WMFVideoMFTManager.cpp b/dom/media/platforms/wmf/WMFVideoMFTManager.cpp index 5ca21d9e906ef..31bc6d5d6aa42 100644 --- a/dom/media/platforms/wmf/WMFVideoMFTManager.cpp +++ b/dom/media/platforms/wmf/WMFVideoMFTManager.cpp @@ -130,7 +130,8 @@ WMFVideoMFTManager::WMFVideoMFTManager( mImageSize(aConfig.mImage), mStreamType( WMFDecoderModule::GetStreamTypeFromMimeType(aConfig.mMimeType)), - mDecodedImageSize(aConfig.mImage), + mSoftwareImageSize(aConfig.mImage), + mSoftwarePictureSize(aConfig.mImage), mVideoStride(0), mColorSpace(aConfig.mColorSpace), mColorRange(aConfig.mColorRange), @@ -150,8 +151,8 @@ WMFVideoMFTManager::WMFVideoMFTManager( // The V and U planes are stored 16-row-aligned, so we need to add padding // to the row heights to ensure the Y'CbCr planes are referenced properly. // This value is only used with software decoder. - if (mDecodedImageSize.height % 16 != 0) { - mDecodedImageSize.height += 16 - (mDecodedImageSize.height % 16); + if (mSoftwareImageSize.height % 16 != 0) { + mSoftwareImageSize.height += 16 - (mSoftwareImageSize.height % 16); } }
@@ -665,8 +666,8 @@ WMFVideoMFTManager::CreateBasicVideoFrame(IMFSample* aSample, // https://docs.microsoft.com/en-us/windows/desktop/medfound/10-bit-and-16-bit-... VideoData::YCbCrBuffer b;
- uint32_t videoWidth = mImageSize.width; - uint32_t videoHeight = mImageSize.height; + const uint32_t videoWidth = mSoftwareImageSize.width; + const uint32_t videoHeight = mSoftwareImageSize.height;
// Y (Y') plane b.mPlanes[0].mData = data; @@ -675,13 +676,13 @@ WMFVideoMFTManager::CreateBasicVideoFrame(IMFSample* aSample, b.mPlanes[0].mWidth = videoWidth; b.mPlanes[0].mSkip = 0;
- MOZ_DIAGNOSTIC_ASSERT(mDecodedImageSize.height % 16 == 0, + MOZ_DIAGNOSTIC_ASSERT(mSoftwareImageSize.height % 16 == 0, "decoded height must be 16 bytes aligned"); - uint32_t y_size = stride * mDecodedImageSize.height; - uint32_t v_size = stride * mDecodedImageSize.height / 4; - uint32_t halfStride = (stride + 1) / 2; - uint32_t halfHeight = (videoHeight + 1) / 2; - uint32_t halfWidth = (videoWidth + 1) / 2; + const uint32_t y_size = stride * mSoftwareImageSize.height; + const uint32_t v_size = stride * mSoftwareImageSize.height / 4; + const uint32_t halfStride = (stride + 1) / 2; + const uint32_t halfHeight = (videoHeight + 1) / 2; + const uint32_t halfWidth = (videoWidth + 1) / 2;
if (subType == MFVideoFormat_YV12) { // U plane (Cb) @@ -725,8 +726,8 @@ WMFVideoMFTManager::CreateBasicVideoFrame(IMFSample* aSample, NS_ENSURE_TRUE(pts.IsValid(), E_FAIL); TimeUnit duration = GetSampleDurationOrLastKnownDuration(aSample); NS_ENSURE_TRUE(duration.IsValid(), E_FAIL); - gfx::IntRect pictureRegion = - mVideoInfo.ScaledImageRect(videoWidth, videoHeight); + gfx::IntRect pictureRegion = mVideoInfo.ScaledImageRect( + mSoftwarePictureSize.width, mSoftwarePictureSize.height);
if (colorDepth != gfx::ColorDepth::COLOR_8 || !mKnowsCompositor || !mKnowsCompositor->SupportsD3D11() || !mIMFUsable) { @@ -853,7 +854,16 @@ WMFVideoMFTManager::Output(int64_t aStreamOffset, RefPtr<MediaData>& aOutData) { NS_ENSURE_TRUE(SUCCEEDED(hr), hr); NS_ENSURE_TRUE(width <= MAX_VIDEO_WIDTH, E_FAIL); NS_ENSURE_TRUE(height <= MAX_VIDEO_HEIGHT, E_FAIL); - mDecodedImageSize = gfx::IntSize(width, height); + mSoftwareImageSize = gfx::IntSize(width, height); + + gfx::IntRect picture; + hr = GetPictureRegion(outputType, picture); + NS_ENSURE_TRUE(SUCCEEDED(hr), hr); + MOZ_ASSERT(picture.width != 0 && picture.height != 0); + mSoftwarePictureSize = gfx::IntSize(picture.width, picture.height); + LOG("Output stream change, image size=[%ux%u], picture=[%u,%u]", + mSoftwareImageSize.width, mSoftwareImageSize.height, + mSoftwarePictureSize.width, mSoftwarePictureSize.height); } // Catch infinite loops, but some decoders perform at least 2 stream // changes on consecutive calls, so be permissive. diff --git a/dom/media/platforms/wmf/WMFVideoMFTManager.h b/dom/media/platforms/wmf/WMFVideoMFTManager.h index e834baeb70bbc..e1c08513c6a58 100644 --- a/dom/media/platforms/wmf/WMFVideoMFTManager.h +++ b/dom/media/platforms/wmf/WMFVideoMFTManager.h @@ -81,7 +81,16 @@ class WMFVideoMFTManager : public MFTManager { const VideoInfo mVideoInfo; const gfx::IntSize mImageSize; const WMFStreamType mStreamType; - gfx::IntSize mDecodedImageSize; + + // The size we update from the IMFMediaType which might include paddings when + // the stream format changes. This is only used for software decoding. + gfx::IntSize mSoftwareImageSize; + + // The picture size we update from the IMFMediaType when the stream format + // changes. We assume it's equal to the image size by default (no cropping). + // This is only used for software decoding. + gfx::IntSize mSoftwarePictureSize; + uint32_t mVideoStride; Maybegfx::YUVColorSpace mColorSpace; gfx::ColorRange mColorRange;
This is an automated email from the git hooks/post-receive script.
richard pushed a commit to branch geckoview-102.3.0esr-12.0-1 in repository tor-browser.
commit 35ce7a62c998c33c42211ddb673c2d1d3b918265 Author: Gijs Kruitbosch gijskruitbosch@gmail.com AuthorDate: Mon Jul 18 09:53:31 2022 +0000
Bug 1768671 - force append '.pdf' for pdf blob downloads displayed inline if it's missing, r=marco a=RyanVM
Differential Revision: https://phabricator.services.mozilla.com/D151890 --- .../pdfjs/content/PdfStreamConverter.jsm | 7 +++ toolkit/components/pdfjs/test/browser.ini | 3 + .../pdfjs/test/browser_pdfjs_nonpdf_filename.js | 73 ++++++++++++++++++++++ 3 files changed, 83 insertions(+)
diff --git a/toolkit/components/pdfjs/content/PdfStreamConverter.jsm b/toolkit/components/pdfjs/content/PdfStreamConverter.jsm index e096de107c3ad..46ad896b51bd0 100644 --- a/toolkit/components/pdfjs/content/PdfStreamConverter.jsm +++ b/toolkit/components/pdfjs/content/PdfStreamConverter.jsm @@ -1118,6 +1118,13 @@ PdfStreamConverter.prototype = { contentDispositionFilename = aRequest.contentDispositionFilename; } catch (e) {}
+ if ( + contentDispositionFilename && + !/.pdf$/i.test(contentDispositionFilename) + ) { + contentDispositionFilename += ".pdf"; + } + // Change the content type so we don't get stuck in a loop. aRequest.setProperty("contentType", aRequest.contentType); aRequest.contentType = "text/html"; diff --git a/toolkit/components/pdfjs/test/browser.ini b/toolkit/components/pdfjs/test/browser.ini index 1a3036f2ec591..9a06d2b9e1dd0 100644 --- a/toolkit/components/pdfjs/test/browser.ini +++ b/toolkit/components/pdfjs/test/browser.ini @@ -20,6 +20,9 @@ support-files = file_pdfjs_js.pdf [browser_pdfjs_main.js] [browser_pdfjs_navigation.js] +[browser_pdfjs_nonpdf_filename.js] +support-files = + file_pdf_download_link.html [browser_pdfjs_not_default.js] support-files = file_pdfjs_object_stream.pdf diff --git a/toolkit/components/pdfjs/test/browser_pdfjs_nonpdf_filename.js b/toolkit/components/pdfjs/test/browser_pdfjs_nonpdf_filename.js new file mode 100644 index 0000000000000..ef7de3dab6e90 --- /dev/null +++ b/toolkit/components/pdfjs/test/browser_pdfjs_nonpdf_filename.js @@ -0,0 +1,73 @@ +/* Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +"use strict"; + +const TESTROOT = getRootDirectory(gTestPath).replace( + "chrome://mochitests/content/", + "https://example.com/" +); + +// The page we use to open the PDF. +const LINK_PAGE_URL = TESTROOT + "file_pdf_download_link.html"; + +add_task(async function test_filename_nonpdf_extension() { + var MockFilePicker = SpecialPowers.MockFilePicker; + MockFilePicker.init(window); + let filepickerNamePromise = new Promise(resolve => { + MockFilePicker.showCallback = function(fp) { + resolve(fp.defaultString); + return MockFilePicker.returnCancel; + }; + }); + registerCleanupFunction(() => MockFilePicker.cleanup()); + + await SpecialPowers.pushPrefEnv({ + set: [["browser.download.open_pdf_attachments_inline", true]], + }); + + await BrowserTestUtils.withNewTab( + { gBrowser, url: LINK_PAGE_URL }, + async function(browser) { + await SpecialPowers.spawn(browser, [], async () => { + let link = content.document.getElementById("custom_filename"); + let response = await content.fetch(link.href, { + method: "GET", + headers: { + "Content-Type": "application/pdf", + }, + }); + let blob = await response.blob(); + const url = content.URL.createObjectURL(blob); + link.href = url; + link.download = "Fido-2022-04-28"; + link.rel = "noopener"; + }); + + let pdfLoaded = BrowserTestUtils.waitForNewTab( + gBrowser, + url => url.startsWith("blob:"), + true + ); + await BrowserTestUtils.synthesizeMouseAtCenter( + "#custom_filename", + {}, + browser + ); + let newTab = await pdfLoaded; + + info("Clicking on the download button..."); + await SpecialPowers.spawn(newTab.linkedBrowser, [], () => { + content.document.getElementById("download").click(); + }); + info("Waiting for a filename to be picked from the file picker"); + let defaultName = await filepickerNamePromise; + is( + defaultName, + "Fido-2022-04-28.pdf", + "Should have gotten the provided filename with pdf suffixed." + ); + BrowserTestUtils.removeTab(newTab); + } + ); +});
This is an automated email from the git hooks/post-receive script.
richard pushed a commit to branch geckoview-102.3.0esr-12.0-1 in repository tor-browser.
commit bc4fafbe582699f8c44f3eb4cac733c85d9f03d8 Author: Edgar Chen echen@mozilla.com AuthorDate: Mon Aug 8 20:06:32 2022 +0000
Bug 1780348 - Exit fullscreen if DOMFullscreenChild is not able to continue the fullscreen transition; r=smaug, a=RyanVM
Differential Revision: https://phabricator.services.mozilla.com/D153807 --- browser/actors/DOMFullscreenChild.jsm | 7 +++++++ 1 file changed, 7 insertions(+)
diff --git a/browser/actors/DOMFullscreenChild.jsm b/browser/actors/DOMFullscreenChild.jsm index b0f3769dfa578..008d1e6e5cb48 100644 --- a/browser/actors/DOMFullscreenChild.jsm +++ b/browser/actors/DOMFullscreenChild.jsm @@ -25,6 +25,13 @@ class DOMFullscreenChild extends JSWindowActorChild { let remoteFrameBC = aMessage.data.remoteFrameBC; if (remoteFrameBC) { let remoteFrame = remoteFrameBC.embedderElement; + if (!remoteFrame) { + // This could happen when the page navigate away and trigger a + // process switching during fullscreen transition, tell the parent + // to just exit. + this.sendAsyncMessage("DOMFullscreen:Exit", {}); + break; + } this._isNotTheRequestSource = true; windowUtils.remoteFrameFullscreenChanged(remoteFrame); } else {
This is an automated email from the git hooks/post-receive script.
richard pushed a commit to branch geckoview-102.3.0esr-12.0-1 in repository tor-browser.
commit 866e6f2c40c9d70d1225fb671517a68ae79148d6 Author: Timothy Nikkel tnikkel@gmail.com AuthorDate: Thu Aug 11 02:09:17 2022 +0000
Bug 1784183. Initialize nsWindow::mPanInProgress. r=rmader, a=RyanVM
Differential Revision: https://phabricator.services.mozilla.com/D154331 --- widget/gtk/nsWindow.cpp | 1 + 1 file changed, 1 insertion(+)
diff --git a/widget/gtk/nsWindow.cpp b/widget/gtk/nsWindow.cpp index 9e744ee28e710..4468a75f03847 100644 --- a/widget/gtk/nsWindow.cpp +++ b/widget/gtk/nsWindow.cpp @@ -382,6 +382,7 @@ nsWindow::nsWindow() mWindowShouldStartDragging(false), mHasMappedToplevel(false), mRetryPointerGrab(false), + mPanInProgress(false), mDrawToContainer(false), mTitlebarBackdropState(false), mIsPIPWindow(false),
This is an automated email from the git hooks/post-receive script.
richard pushed a commit to branch geckoview-102.3.0esr-12.0-1 in repository tor-browser.
commit 4646c658689224df195ead244b1ded590bfabe5f Author: Olli Pettay Olli.Pettay@helsinki.fi AuthorDate: Mon Aug 15 15:50:27 2022 +0000
Bug 1784387 - Crash in [@ nsDocShell::Reload] in ContentChild::RecvReload, r=mccr8 a=RyanVM
No test, since the patch is based on the crash reports. Creating a test which relies on some race conditions through IPC is hard.
Differential Revision: https://phabricator.services.mozilla.com/D154634 --- docshell/base/nsDocShell.cpp | 1 + 1 file changed, 1 insertion(+)
diff --git a/docshell/base/nsDocShell.cpp b/docshell/base/nsDocShell.cpp index d20c847dd74a0..f886070364b68 100644 --- a/docshell/base/nsDocShell.cpp +++ b/docshell/base/nsDocShell.cpp @@ -4132,6 +4132,7 @@ nsDocShell::Reload(uint32_t aReloadFlags) { if (!XRE_IsParentProcess()) { RefPtr<nsDocShell> docShell(this); nsCOMPtr<nsIContentViewer> cv(mContentViewer); + NS_ENSURE_STATE(cv);
bool okToUnload = true; MOZ_TRY(cv->PermitUnload(&okToUnload));
This is an automated email from the git hooks/post-receive script.
richard pushed a commit to branch geckoview-102.3.0esr-12.0-1 in repository tor-browser.
commit 98d205b30ab79a8a88bf58b7202a3de2a095a484 Author: Adam Vandolder avandolder@mozilla.com AuthorDate: Wed Aug 17 02:18:22 2022 +0000
Bug 1774155 - Avoid copying data URI specs in deprecation warning. r=mccr8, a=RyanVM
Differential Revision: https://phabricator.services.mozilla.com/D154692 --- dom/bindings/BindingUtils.cpp | 26 +++++++++++++++++--------- dom/reporting/tests/common_deprecated.js | 31 ++++++++++++++++++++++++++++++- dom/reporting/tests/test_deprecated.html | 1 + 3 files changed, 48 insertions(+), 10 deletions(-)
diff --git a/dom/bindings/BindingUtils.cpp b/dom/bindings/BindingUtils.cpp index b1d298d88e0e5..af500c1f3128d 100644 --- a/dom/bindings/BindingUtils.cpp +++ b/dom/bindings/BindingUtils.cpp @@ -4090,14 +4090,22 @@ void ReportDeprecation(nsIGlobalObject* aGlobal, nsIURI* aURI, const Nullable<uint32_t>& aColumnNumber) { MOZ_ASSERT(aURI);
- // Anonymize the URL. - // Strip the URL of any possible username/password and make it ready to be - // presented in the UI. - nsCOMPtr<nsIURI> exposableURI = net::nsIOService::CreateExposableURI(aURI); - nsAutoCString spec; - nsresult rv = exposableURI->GetSpec(spec); - if (NS_WARN_IF(NS_FAILED(rv))) { - return; + // If the URI has the data scheme, report that instead of the spec, + // as the spec may be arbitrarily long and we would like to avoid + // copying it. + nsAutoCString specOrScheme; + nsresult rv; + if (aURI->SchemeIs("data")) { + specOrScheme.Assign("data:..."_ns); + } else { + // Anonymize the URL. + // Strip the URL of any possible username/password and make it ready to be + // presented in the UI. + nsCOMPtr<nsIURI> exposableURI = net::nsIOService::CreateExposableURI(aURI); + rv = exposableURI->GetSpec(specOrScheme); + if (NS_WARN_IF(NS_FAILED(rv))) { + return; + } }
nsAutoString type; @@ -4142,7 +4150,7 @@ void ReportDeprecation(nsIGlobalObject* aGlobal, nsIURI* aURI, aFileName, aLineNumber, aColumnNumber);
ReportingUtils::Report(aGlobal, nsGkAtoms::deprecation, u"default"_ns, - NS_ConvertUTF8toUTF16(spec), body); + NS_ConvertUTF8toUTF16(specOrScheme), body); }
// This runnable is used to write a deprecation message from a worker to the diff --git a/dom/reporting/tests/common_deprecated.js b/dom/reporting/tests/common_deprecated.js index 535945d6d586c..1cee9481c2e92 100644 --- a/dom/reporting/tests/common_deprecated.js +++ b/dom/reporting/tests/common_deprecated.js @@ -102,6 +102,35 @@ function test_deprecatedMethod() { }); }
+// eslint-disable-next-line no-unused-vars +function test_deprecatedMethodWithDataURI() { + info("Testing deprecatedMethodWithDataURI report"); + + const uri = `data:text/html,<script> + window.onload = () => { + let obs = new ReportingObserver((reports, o) => { + obs.disconnect(); + let report = reports[0]; + const message = (report.url == "data:...") ? "passed" : "failed"; + window.opener.postMessage(message, "http://mochi.test:8888"); + close(); + }); + + obs.observe(); + let testingInterface = new TestingDeprecatedInterface(); + testingInterface.deprecatedMethod(); + }; + </script>`; + + return new Promise((resolve, reject) => { + window.open(uri); + window.addEventListener("message", e => { + is(e.data, "passed", "The data URI is truncated"); + resolve(); + }); + }); +} + // eslint-disable-next-line no-unused-vars function test_deprecatedAttribute() { info("Testing DeprecatedTestingAttribute report"); @@ -138,7 +167,7 @@ function test_deprecatedAttribute() { .replace("worker_deprecated.js", "common_deprecated.js"), "We have a sourceFile" ); - is(report.body.lineNumber, 152, "We have a lineNumber"); + is(report.body.lineNumber, 181, "We have a lineNumber"); is(report.body.columnNumber, 4, "We have a columnNumber");
obs.disconnect(); diff --git a/dom/reporting/tests/test_deprecated.html b/dom/reporting/tests/test_deprecated.html index d0fa7f2d39b88..da55978e9b33f 100644 --- a/dom/reporting/tests/test_deprecated.html +++ b/dom/reporting/tests/test_deprecated.html @@ -12,6 +12,7 @@
test_deprecatedInterface() .then(() => test_deprecatedMethod()) +.then(() => test_deprecatedMethodWithDataURI()) .then(() => test_deprecatedAttribute()) .then(() => test_takeRecords()) .then(() => {
This is an automated email from the git hooks/post-receive script.
richard pushed a commit to branch geckoview-102.3.0esr-12.0-1 in repository tor-browser.
commit 3be2527950f266f76f9f3c31cbe34df813e6270e Author: Timothy Nikkel tnikkel@gmail.com AuthorDate: Mon Aug 29 09:58:11 2022 +0000
Bug 1787684. Only return views with widgets from FindFloatingViewContaining. r=emilio, a=RyanVM
The code that bug 1754436 deleted checked to make sure there was a widget for the returned view, but it looks like it's possible in some edge cases to have an open popup that doesn't have a widget (most likely just for a split second). We need a widget to dispatch the event, and if it doesn't have a widget it's not visible so no point in touching it at all anyways.
Differential Revision: https://phabricator.services.mozilla.com/D155819 --- layout/base/PresShell.cpp | 5 +++-- layout/base/nsLayoutUtils.cpp | 17 +++++++++++++---- layout/base/nsLayoutUtils.h | 7 ++++++- 3 files changed, 22 insertions(+), 7 deletions(-)
diff --git a/layout/base/PresShell.cpp b/layout/base/PresShell.cpp index 51da6729aacfc..8cecd2497fc33 100644 --- a/layout/base/PresShell.cpp +++ b/layout/base/PresShell.cpp @@ -5635,8 +5635,9 @@ void PresShell::SynthesizeMouseMove(bool aFromScroll) { static nsView* FindFloatingViewContaining(nsPresContext* aRootPresContext, nsIWidget* aRootWidget, const LayoutDeviceIntPoint& aPt) { - nsIFrame* popupFrame = - nsLayoutUtils::GetPopupFrameForPoint(aRootPresContext, aRootWidget, aPt); + nsIFrame* popupFrame = nsLayoutUtils::GetPopupFrameForPoint( + aRootPresContext, aRootWidget, aPt, + nsLayoutUtils::GetPopupFrameForPointFlags::OnlyReturnFramesWithWidgets); return popupFrame ? popupFrame->GetView() : nullptr; }
diff --git a/layout/base/nsLayoutUtils.cpp b/layout/base/nsLayoutUtils.cpp index d9d8036382d5d..4cae8e948de7b 100644 --- a/layout/base/nsLayoutUtils.cpp +++ b/layout/base/nsLayoutUtils.cpp @@ -1756,7 +1756,8 @@ nsIFrame* nsLayoutUtils::GetPopupFrameForEventCoordinates(
nsIFrame* nsLayoutUtils::GetPopupFrameForPoint( nsPresContext* aRootPresContext, nsIWidget* aWidget, - const mozilla::LayoutDeviceIntPoint& aPoint) { + const mozilla::LayoutDeviceIntPoint& aPoint, + GetPopupFrameForPointFlags aFlags /* = GetPopupFrameForPointFlags(0) */) { nsXULPopupManager* pm = nsXULPopupManager::GetInstance(); if (!pm) { return nullptr; @@ -1765,11 +1766,19 @@ nsIFrame* nsLayoutUtils::GetPopupFrameForPoint( pm->GetVisiblePopups(popups); // Search from top to bottom for (nsIFrame* popup : popups) { - if (popup->PresContext()->GetRootPresContext() == aRootPresContext && - popup->ScrollableOverflowRect().Contains(GetEventCoordinatesRelativeTo( + if (popup->PresContext()->GetRootPresContext() != aRootPresContext) { + continue; + } + if (!popup->ScrollableOverflowRect().Contains(GetEventCoordinatesRelativeTo( aWidget, aPoint, RelativeTo{popup}))) { - return popup; + continue; + } + if (aFlags & GetPopupFrameForPointFlags::OnlyReturnFramesWithWidgets) { + if (!popup->HasView() || !popup->GetView()->HasWidget()) { + continue; + } } + return popup; } return nullptr; } diff --git a/layout/base/nsLayoutUtils.h b/layout/base/nsLayoutUtils.h index e4ed53fea274a..fef3dd5329a71 100644 --- a/layout/base/nsLayoutUtils.h +++ b/layout/base/nsLayoutUtils.h @@ -750,9 +750,13 @@ class nsLayoutUtils { * @return Null, if there is no popup frame at the point, otherwise, * returns top-most popup frame at the point. */ + enum class GetPopupFrameForPointFlags : uint8_t { + OnlyReturnFramesWithWidgets = 0x1, + }; static nsIFrame* GetPopupFrameForPoint( nsPresContext* aRootPresContext, nsIWidget* aWidget, - const mozilla::LayoutDeviceIntPoint& aPoint); + const mozilla::LayoutDeviceIntPoint& aPoint, + GetPopupFrameForPointFlags aFlags = GetPopupFrameForPointFlags(0));
/** * Get container and offset if aEvent collapses Selection. @@ -3018,6 +3022,7 @@ class nsLayoutUtils { };
MOZ_MAKE_ENUM_CLASS_BITWISE_OPERATORS(nsLayoutUtils::PaintFrameFlags) +MOZ_MAKE_ENUM_CLASS_BITWISE_OPERATORS(nsLayoutUtils::GetPopupFrameForPointFlags)
template <typename PointType, typename RectType, typename CoordType> /* static */ bool nsLayoutUtils::PointIsCloserToRect(
This is an automated email from the git hooks/post-receive script.
richard pushed a commit to branch geckoview-102.3.0esr-12.0-1 in repository tor-browser.
commit de088a7d3653bce96dd83bb78e0e74954dcea312 Author: Ryan Hunt rhunt@eqrion.net AuthorDate: Thu Jul 28 13:27:02 2022 +0000
Bug 1777604 - wasm: Perform a pipeline flush while creating a module object. r=nbp, a=RyanVM
Differential Revision: https://phabricator.services.mozilla.com/D152304 --- js/src/jit/FlushICache.h | 27 +++++++++++++++++++++++++++ js/src/jit/arm/Architecture-arm.cpp | 10 ++++++++++ js/src/jit/arm64/Architecture-arm64.cpp | 2 ++ js/src/jit/arm64/vixl/Cpu-vixl.h | 4 ++++ js/src/jit/arm64/vixl/MozCpu-vixl.cpp | 17 +++++++++++++++++ js/src/wasm/WasmJS.cpp | 11 +++++++++++ 6 files changed, 71 insertions(+)
diff --git a/js/src/jit/FlushICache.h b/js/src/jit/FlushICache.h index 42b1fb045ce6d..6c780e43e8665 100644 --- a/js/src/jit/FlushICache.h +++ b/js/src/jit/FlushICache.h @@ -40,6 +40,33 @@ inline void FlushICache(void* code, size_t size, # error "Unknown architecture!" #endif
+#if (defined(JS_CODEGEN_X86) || defined(JS_CODEGEN_X64)) || \ + (defined(JS_CODEGEN_MIPS32) || defined(JS_CODEGEN_MIPS64)) || \ + defined(JS_CODEGEN_LOONG64) + +inline void FlushExecutionContext() { + // No-op. Execution context is coherent with instruction cache. +} + +#elif defined(JS_CODEGEN_NONE) || defined(JS_CODEGEN_WASM32) + +inline void FlushExecutionContext() { MOZ_CRASH(); } + +#elif defined(JS_CODEGEN_ARM) || defined(JS_CODEGEN_ARM64) + +// ARM and ARM64 must flush the instruction pipeline of the current core +// before executing newly JIT'ed code. This will remove any stale data from +// the pipeline that may have referenced invalidated instructions. +// +// `FlushICache` will perform this for the thread that compiles the code, but +// other threads that may execute the code are responsible to call +// this method. +extern void FlushExecutionContext(); + +#else +# error "Unknown architecture!" +#endif + } // namespace jit } // namespace js
diff --git a/js/src/jit/arm/Architecture-arm.cpp b/js/src/jit/arm/Architecture-arm.cpp index 324942f67c264..2491c67350146 100644 --- a/js/src/jit/arm/Architecture-arm.cpp +++ b/js/src/jit/arm/Architecture-arm.cpp @@ -527,5 +527,15 @@ void FlushICache(void* code, size_t size, bool codeIsThreadLocal) { #endif }
+void FlushExecutionContext() { +#ifndef JS_SIMULATOR_ARM + // Ensure that any instructions already in the pipeline are discarded and + // reloaded from the icache. + asm volatile("isb\n" : : : "memory"); +#else + // We assume the icache flushing routines on other platforms take care of this +#endif +} + } // namespace jit } // namespace js diff --git a/js/src/jit/arm64/Architecture-arm64.cpp b/js/src/jit/arm64/Architecture-arm64.cpp index 3249acc6fb346..f95c0231d84d3 100644 --- a/js/src/jit/arm64/Architecture-arm64.cpp +++ b/js/src/jit/arm64/Architecture-arm64.cpp @@ -127,5 +127,7 @@ bool CanFlushICacheFromBackgroundThreads() { return vixl::CPU::CanFlushICacheFromBackgroundThreads(); }
+void FlushExecutionContext() { vixl::CPU::FlushExecutionContext(); } + } // namespace jit } // namespace js diff --git a/js/src/jit/arm64/vixl/Cpu-vixl.h b/js/src/jit/arm64/vixl/Cpu-vixl.h index f2bb6f6dbc096..ac709bccbf2a6 100644 --- a/js/src/jit/arm64/vixl/Cpu-vixl.h +++ b/js/src/jit/arm64/vixl/Cpu-vixl.h @@ -171,6 +171,10 @@ class CPU { // cache on a background thread. static bool CanFlushICacheFromBackgroundThreads();
+ // Flush the local instruction pipeline, forcing a reload of any instructions + // beyond this barrier from the icache. + static void FlushExecutionContext(); + // Read and interpret the ID registers. This requires // CPUFeatures::kIDRegisterEmulation, and therefore cannot be called on // non-AArch64 platforms. diff --git a/js/src/jit/arm64/vixl/MozCpu-vixl.cpp b/js/src/jit/arm64/vixl/MozCpu-vixl.cpp index 9766bee3b7f9e..ad96098501679 100644 --- a/js/src/jit/arm64/vixl/MozCpu-vixl.cpp +++ b/js/src/jit/arm64/vixl/MozCpu-vixl.cpp @@ -294,4 +294,21 @@ void CPU::EnsureIAndDCacheCoherency(void *address, size_t length, bool codeIsThr #endif }
+void CPU::FlushExecutionContext() { +#if defined(JS_SIMULATOR_ARM64) && defined(JS_CACHE_SIMULATOR_ARM64) + // Performing an 'isb' will ensure the current core instruction pipeline is + // synchronized with an icache flush executed by another core. + using js::jit::SimulatorProcess; + js::jit::AutoLockSimulatorCache alsc; + Simulator* sim = vixl::Simulator::Current(); + if (sim) { + sim->FlushICache(); + } +#elif defined(__aarch64__) + // Ensure that any instructions already in the pipeline are discarded and + // reloaded from the icache. + __asm__ __volatile__("isb\n" : : : "memory"); +#endif +} + } // namespace vixl diff --git a/js/src/wasm/WasmJS.cpp b/js/src/wasm/WasmJS.cpp index 5e472833bf8da..bb97ef87b3cab 100644 --- a/js/src/wasm/WasmJS.cpp +++ b/js/src/wasm/WasmJS.cpp @@ -31,6 +31,7 @@ #include "ds/IdValuePair.h" // js::IdValuePair #include "gc/GCContext.h" #include "jit/AtomicOperations.h" +#include "jit/FlushICache.h" #include "jit/JitContext.h" #include "jit/JitOptions.h" #include "jit/Simulator.h" @@ -1727,6 +1728,16 @@ WasmModuleObject* WasmModuleObject::create(JSContext* cx, const Module& module, return nullptr; }
+ // The pipeline state on some architectures may retain stale instructions + // even after we invalidate the instruction cache. There is no generally + // available method to broadcast this pipeline flush to all threads after + // we've compiled new code, so conservatively perform one here when we're + // receiving a module that may have been compiled from another thread. + // + // The cost of this flush is expected to minimal enough to not be worth + // optimizing away in the case the module was compiled on this thread. + jit::FlushExecutionContext(); + // This accounts for module allocation size (excluding code which is handled // separately - see below). This assumes that the size of associated data // doesn't change for the life of the WasmModuleObject. The size is counted
This is an automated email from the git hooks/post-receive script.
richard pushed a commit to branch geckoview-102.3.0esr-12.0-1 in repository tor-browser.
commit 257982b707fbe6676ab7b9f0b7771f90a7f60101 Author: Ryan Hunt rhunt@eqrion.net AuthorDate: Thu Jul 28 13:27:02 2022 +0000
Bug 1777604 - wasm: Move membarrier call to separate functions. r=nbp, a=RyanVM
Differential Revision: https://phabricator.services.mozilla.com/D152305 --- js/src/jit/AutoWritableJitCode.h | 3 +- js/src/jit/ExecutableAllocator.h | 15 +-- js/src/jit/FlushICache.cpp | 132 +++++++++++++++++++++ js/src/jit/FlushICache.h | 33 ++++-- js/src/jit/ProcessExecutableMemory.cpp | 6 +- js/src/jit/ProcessExecutableMemory.h | 10 +- js/src/jit/arm/Architecture-arm.cpp | 2 +- js/src/jit/arm64/Architecture-arm64.cpp | 8 +- js/src/jit/arm64/vixl/Cpu-vixl.h | 6 +- js/src/jit/arm64/vixl/MozCpu-vixl.cpp | 112 ++--------------- js/src/jit/loong64/Architecture-loong64.cpp | 2 +- .../jit/mips-shared/Architecture-mips-shared.cpp | 2 +- js/src/jit/moz.build | 1 + js/src/jsapi-tests/testsJit.cpp | 4 +- js/src/wasm/WasmBuiltins.cpp | 5 +- js/src/wasm/WasmCode.cpp | 42 ++----- js/src/wasm/WasmCode.h | 10 +- js/src/wasm/WasmCompile.cpp | 25 ++-- js/src/wasm/WasmModule.cpp | 11 +- 19 files changed, 221 insertions(+), 208 deletions(-)
diff --git a/js/src/jit/AutoWritableJitCode.h b/js/src/jit/AutoWritableJitCode.h index 67fa84c2dbd61..ab5b35a54f763 100644 --- a/js/src/jit/AutoWritableJitCode.h +++ b/js/src/jit/AutoWritableJitCode.h @@ -59,8 +59,7 @@ class MOZ_RAII AutoWritableJitCodeFallible { } });
- if (!ExecutableAllocator::makeExecutableAndFlushICache( - FlushICacheSpec::LocalThreadOnly, addr_, size_)) { + if (!ExecutableAllocator::makeExecutableAndFlushICache(addr_, size_)) { MOZ_CRASH(); } rt_->toggleAutoWritableJitCodeActive(false); diff --git a/js/src/jit/ExecutableAllocator.h b/js/src/jit/ExecutableAllocator.h index 266c7af4b8548..85c01562c373a 100644 --- a/js/src/jit/ExecutableAllocator.h +++ b/js/src/jit/ExecutableAllocator.h @@ -172,19 +172,10 @@ class ExecutableAllocator { MustFlushICache::No); }
- [[nodiscard]] static bool makeExecutableAndFlushICache( - FlushICacheSpec flushSpec, void* start, size_t size) { - MustFlushICache mustFlushICache; - switch (flushSpec) { - case FlushICacheSpec::LocalThreadOnly: - mustFlushICache = MustFlushICache::LocalThreadOnly; - break; - case FlushICacheSpec::AllThreads: - mustFlushICache = MustFlushICache::AllThreads; - break; - } + [[nodiscard]] static bool makeExecutableAndFlushICache(void* start, + size_t size) { return ReprotectRegion(start, size, ProtectionSetting::Executable, - mustFlushICache); + MustFlushICache::Yes); }
static void poisonCode(JSRuntime* rt, JitPoisonRangeVector& ranges); diff --git a/js/src/jit/FlushICache.cpp b/js/src/jit/FlushICache.cpp new file mode 100644 index 0000000000000..1e2ec69272fe8 --- /dev/null +++ b/js/src/jit/FlushICache.cpp @@ -0,0 +1,132 @@ +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- + * vim: set ts=8 sts=2 et sw=2 tw=80: + * 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/. */ + +#include "jit/FlushICache.h" + +#ifdef JS_CODEGEN_ARM64 +# include "jit/arm64/vixl/MozCachingDecoder.h" +# include "jit/arm64/vixl/Simulator-vixl.h" +#endif + +#if defined(JS_CODEGEN_ARM) || defined(JS_CODEGEN_ARM64) + +# ifdef __linux__ +# include <linux/version.h> +# define LINUX_HAS_MEMBARRIER (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 3, 0)) +# else +# define LINUX_HAS_MEMBARRIER 0 +# endif + +# if LINUX_HAS_MEMBARRIER || defined(__android__) +# include <string.h> + +# if LINUX_HAS_MEMBARRIER +# include <linux/membarrier.h> +# include <sys/syscall.h> +# include <sys/utsname.h> +# include <unistd.h> +# elif defined(__android__) +# include <sys/syscall.h> +# include <unistd.h> +# else +# error "Missing platform-specific declarations for membarrier syscall!" +# endif // __linux__ / ANDROID + +static int membarrier(int cmd, int flags) { + return syscall(__NR_membarrier, cmd, flags); +} + +// These definitions come from the Linux kernel source, for kernels before 4.16 +// which didn't have access to these membarrier commands. +# ifndef MEMBARRIER_CMD_PRIVATE_EXPEDITED_SYNC_CORE +# define MEMBARRIER_CMD_PRIVATE_EXPEDITED_SYNC_CORE (1 << 5) +# endif + +# ifndef MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED_SYNC_CORE +# define MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED_SYNC_CORE (1 << 6) +# endif +# endif // LINUX_HAS_MEMBARRIER || defined(__android__) + +using namespace js; +using namespace js::jit; + +namespace js { +namespace jit { + +bool CanFlushExecutionContextForAllThreads() { +# if (LINUX_HAS_MEMBARRIER || defined(__android__)) + // On linux, check the kernel supports membarrier(2), that is, it's a kernel + // above Linux 4.16 included. + // + // Note: this code has been extracted (August 2020) from + // https://android.googlesource.com/platform/art/+/58520dfba31d6eeef75f5babff15... + static constexpr int kRequiredMajor = 4; + static constexpr int kRequiredMinor = 16; + + static bool computed = false; + static bool kernelHasMembarrier = false; + + if (computed) { + return kernelHasMembarrier; + } + + struct utsname uts; + int major, minor; + kernelHasMembarrier = uname(&uts) == 0 && strcmp(uts.sysname, "Linux") == 0 && + sscanf(uts.release, "%d.%d", &major, &minor) == 2 && + major >= kRequiredMajor && + (major != kRequiredMajor || minor >= kRequiredMinor); + + // As a test bed, try to run the syscall with the command registering the + // intent to use the actual membarrier we'll want to carry out later. + // + // IMPORTANT: This is required or else running the membarrier later won't + // actually interrupt the threads in this process. + if (kernelHasMembarrier && + membarrier(MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED_SYNC_CORE, 0) != 0) { + kernelHasMembarrier = false; + } + + computed = true; + return kernelHasMembarrier; +# else + // On other platforms, we assume that the syscall for flushing the icache + // will flush the execution context for other cores. + return true; +# endif +} + +void FlushExecutionContextForAllThreads() { + // Callers must check that this operation is available. + MOZ_RELEASE_ASSERT(CanFlushExecutionContextForAllThreads()); + +# if defined(JS_SIMULATOR_ARM64) && defined(JS_CACHE_SIMULATOR_ARM64) + // Emulate what the real hardware would do by emitting a membarrier that'll + // interrupt and flush the execution context of all threads. + using js::jit::SimulatorProcess; + js::jit::AutoLockSimulatorCache alsc; + SimulatorProcess::membarrier(); +# elif (LINUX_HAS_MEMBARRIER || defined(__android__)) + // The caller has checked this can be performed, which will have registered + // this process to receive the membarrier. See above. + // + // membarrier will trigger an inter-processor-interrupt on any active threads + // of this process. This is an execution context synchronization event + // equivalent to running an `isb` instruction. + if (membarrier(MEMBARRIER_CMD_PRIVATE_EXPEDITED_SYNC_CORE, 0) != 0) { + // Better safe than sorry. + MOZ_CRASH("membarrier can't be executed"); + } +# else + // On other platforms, we assume that the syscall for flushing the icache + // will flush the execution context for other cores. +# endif +} + +} // namespace jit +} // namespace js + +#endif diff --git a/js/src/jit/FlushICache.h b/js/src/jit/FlushICache.h index 6c780e43e8665..6ef08c63d3acd 100644 --- a/js/src/jit/FlushICache.h +++ b/js/src/jit/FlushICache.h @@ -18,8 +18,7 @@ namespace jit {
#if defined(JS_CODEGEN_X86) || defined(JS_CODEGEN_X64)
-inline void FlushICache(void* code, size_t size, - bool codeIsThreadLocal = true) { +inline void FlushICache(void* code, size_t size) { // No-op. Code and data caches are coherent on x86 and x64. }
@@ -27,14 +26,15 @@ inline void FlushICache(void* code, size_t size, (defined(JS_CODEGEN_MIPS32) || defined(JS_CODEGEN_MIPS64)) || \ defined(JS_CODEGEN_LOONG64)
-extern void FlushICache(void* code, size_t size, bool codeIsThreadLocal = true); +// Invalidate the given code range from the icache. This will also flush the +// execution context for this core. If this code is to be executed on another +// thread, that thread must perform an execution context flush first using +// `FlushExecutionContext` below. +extern void FlushICache(void* code, size_t size);
#elif defined(JS_CODEGEN_NONE)
-inline void FlushICache(void* code, size_t size, - bool codeIsThreadLocal = true) { - MOZ_CRASH(); -} +inline void FlushICache(void* code, size_t size) { MOZ_CRASH(); }
#else # error "Unknown architecture!" @@ -47,10 +47,16 @@ inline void FlushICache(void* code, size_t size, inline void FlushExecutionContext() { // No-op. Execution context is coherent with instruction cache. } +inline bool CanFlushExecutionContextForAllThreads() { return true; } +inline void FlushExecutionContextForAllThreads() { + // No-op. Execution context is coherent with instruction cache. +}
#elif defined(JS_CODEGEN_NONE) || defined(JS_CODEGEN_WASM32)
inline void FlushExecutionContext() { MOZ_CRASH(); } +inline bool CanFlushExecutionContextForAllThreads() { MOZ_CRASH(); } +inline void FlushExecutionContextForAllThreads() { MOZ_CRASH(); }
#elif defined(JS_CODEGEN_ARM) || defined(JS_CODEGEN_ARM64)
@@ -63,6 +69,19 @@ inline void FlushExecutionContext() { MOZ_CRASH(); } // this method. extern void FlushExecutionContext();
+// Some platforms can flush the excecution context for other threads using a +// syscall. This is required when JIT'ed code will be published to multiple +// threads without a synchronization point where a `FlushExecutionContext` +// could be inserted. +extern bool CanFlushExecutionContextForAllThreads(); + +// Flushes the execution context of all threads in this process, equivalent to +// running `FlushExecutionContext` on every thread. +// +// Callers must ensure `CanFlushExecutionContextForAllThreads` is true, or +// else this will crash. +extern void FlushExecutionContextForAllThreads(); + #else # error "Unknown architecture!" #endif diff --git a/js/src/jit/ProcessExecutableMemory.cpp b/js/src/jit/ProcessExecutableMemory.cpp index 5ea4b2e4ca5b4..2085a4802c232 100644 --- a/js/src/jit/ProcessExecutableMemory.cpp +++ b/js/src/jit/ProcessExecutableMemory.cpp @@ -749,11 +749,9 @@ bool js::jit::ReprotectRegion(void* start, size_t size, ProtectionSetting protection, MustFlushICache flushICache) { // Flush ICache when making code executable, before we modify |size|. - if (flushICache == MustFlushICache::LocalThreadOnly || - flushICache == MustFlushICache::AllThreads) { + if (flushICache == MustFlushICache::Yes) { MOZ_ASSERT(protection == ProtectionSetting::Executable); - bool codeIsThreadLocal = flushICache == MustFlushICache::LocalThreadOnly; - jit::FlushICache(start, size, codeIsThreadLocal); + jit::FlushICache(start, size); }
// Calculate the start of the page containing this region, diff --git a/js/src/jit/ProcessExecutableMemory.h b/js/src/jit/ProcessExecutableMemory.h index de2109f5310cc..51747634f38ee 100644 --- a/js/src/jit/ProcessExecutableMemory.h +++ b/js/src/jit/ProcessExecutableMemory.h @@ -68,15 +68,9 @@ enum class ProtectionSetting { Executable, };
-/// Whether the instruction cache must be flushed: -//- No means no flushing will happen. -//- LocalThreadOnly means only the local thread's icache will be flushed. -//- AllThreads means all the threads' icaches will be flushed; this must be used -// when the compiling thread and the executing thread might be different. +/// Whether the instruction cache must be flushed
-enum class MustFlushICache { No, LocalThreadOnly, AllThreads }; - -enum class FlushICacheSpec { LocalThreadOnly, AllThreads }; +enum class MustFlushICache { No, Yes };
[[nodiscard]] extern bool ReprotectRegion(void* start, size_t size, ProtectionSetting protection, diff --git a/js/src/jit/arm/Architecture-arm.cpp b/js/src/jit/arm/Architecture-arm.cpp index 2491c67350146..687c45f8f7373 100644 --- a/js/src/jit/arm/Architecture-arm.cpp +++ b/js/src/jit/arm/Architecture-arm.cpp @@ -481,7 +481,7 @@ uint32_t FloatRegisters::ActualTotalPhys() { return 16; }
-void FlushICache(void* code, size_t size, bool codeIsThreadLocal) { +void FlushICache(void* code, size_t size) { #if defined(JS_SIMULATOR_ARM) js::jit::SimulatorProcess::FlushICache(code, size);
diff --git a/js/src/jit/arm64/Architecture-arm64.cpp b/js/src/jit/arm64/Architecture-arm64.cpp index f95c0231d84d3..eb3dd67b1a9b8 100644 --- a/js/src/jit/arm64/Architecture-arm64.cpp +++ b/js/src/jit/arm64/Architecture-arm64.cpp @@ -119,12 +119,8 @@ uint32_t GetARM64Flags() { return 0; } // computed". bool CPUFlagsHaveBeenComputed() { return true; }
-void FlushICache(void* code, size_t size, bool codeIsThreadLocal) { - vixl::CPU::EnsureIAndDCacheCoherency(code, size, codeIsThreadLocal); -} - -bool CanFlushICacheFromBackgroundThreads() { - return vixl::CPU::CanFlushICacheFromBackgroundThreads(); +void FlushICache(void* code, size_t size) { + vixl::CPU::EnsureIAndDCacheCoherency(code, size); }
void FlushExecutionContext() { vixl::CPU::FlushExecutionContext(); } diff --git a/js/src/jit/arm64/vixl/Cpu-vixl.h b/js/src/jit/arm64/vixl/Cpu-vixl.h index ac709bccbf2a6..4db51aad6b473 100644 --- a/js/src/jit/arm64/vixl/Cpu-vixl.h +++ b/js/src/jit/arm64/vixl/Cpu-vixl.h @@ -165,11 +165,7 @@ class CPU { // the I and D caches. I and D caches are not automatically coherent on ARM // so this operation is required before any dynamically generated code can // safely run. - static void EnsureIAndDCacheCoherency(void *address, size_t length, bool codeIsThreadLocal); - - // Returns true when the current machine supports flushing the instruction - // cache on a background thread. - static bool CanFlushICacheFromBackgroundThreads(); + static void EnsureIAndDCacheCoherency(void* address, size_t length);
// Flush the local instruction pipeline, forcing a reload of any instructions // beyond this barrier from the icache. diff --git a/js/src/jit/arm64/vixl/MozCpu-vixl.cpp b/js/src/jit/arm64/vixl/MozCpu-vixl.cpp index ad96098501679..909cc590aeb78 100644 --- a/js/src/jit/arm64/vixl/MozCpu-vixl.cpp +++ b/js/src/jit/arm64/vixl/MozCpu-vixl.cpp @@ -33,40 +33,8 @@ # include <libkern/OSCacheControl.h> #endif
-#if defined(__aarch64__) && (defined(__linux__) || defined(__android__)) -# if defined(__linux__) -# include <linux/membarrier.h> -# include <sys/syscall.h> -# include <sys/utsname.h> -# include <unistd.h> -# elif defined(__ANDROID__) -# include <sys/syscall.h> -# include <unistd.h> -# else -# error "Missing platform-specific declarations for membarrier syscall!" -# endif // __linux__ / ANDROID - -# include "vm/JSContext.h" // TlsContext - -static int membarrier(int cmd, int flags) { - return syscall(__NR_membarrier, cmd, flags); -} - -// These definitions come from the Linux kernel source, for kernels before 4.16 -// which didn't have access to these membarrier commands. -# ifndef MEMBARRIER_CMD_PRIVATE_EXPEDITED_SYNC_CORE -# define MEMBARRIER_CMD_PRIVATE_EXPEDITED_SYNC_CORE (1 << 5) -# endif - -# ifndef MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED_SYNC_CORE -# define MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED_SYNC_CORE (1 << 6) -# endif - -#endif // __aarch64__ - namespace vixl {
- // Currently computes I and D cache line size. void CPU::SetUp() { uint32_t cache_type_register = GetCacheType(); @@ -115,45 +83,7 @@ uint32_t CPU::GetCacheType() { #endif }
-bool CPU::CanFlushICacheFromBackgroundThreads() { -#if defined(__aarch64__) && (defined(__linux__) || defined(__android__)) - // On linux, check the kernel supports membarrier(2), that is, it's a kernel - // above Linux 4.16 included. - // - // Note: this code has been extracted (August 2020) from - // https://android.googlesource.com/platform/art/+/58520dfba31d6eeef75f5babff15... - static constexpr int kRequiredMajor = 4; - static constexpr int kRequiredMinor = 16; - - static bool computed = false; - static bool kernelHasMembarrier = false; - - if (!computed) { - struct utsname uts; - int major, minor; - kernelHasMembarrier = uname(&uts) == 0 && - strcmp(uts.sysname, "Linux") == 0 && - sscanf(uts.release, "%d.%d", &major, &minor) == 2 && - major >= kRequiredMajor && (major != kRequiredMajor || minor >= kRequiredMinor); - - // As a test bed, try to run the syscall with the command registering the - // intent to use the actual membarrier we'll want to carry out later. - if (kernelHasMembarrier && - membarrier(MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED_SYNC_CORE, 0) != 0) { - kernelHasMembarrier = false; - } - - computed = true; - } - - return kernelHasMembarrier; -#else - // On other platforms, we assume that the provided syscall does the right thing. - return true; -#endif -} - -void CPU::EnsureIAndDCacheCoherency(void *address, size_t length, bool codeIsThreadLocal) { +void CPU::EnsureIAndDCacheCoherency(void* address, size_t length) { #if defined(JS_SIMULATOR_ARM64) && defined(JS_CACHE_SIMULATOR_ARM64) // This code attempts to emulate what the following assembly sequence is // doing, which is sending the information to all cores that some cache line @@ -175,11 +105,6 @@ void CPU::EnsureIAndDCacheCoherency(void *address, size_t length, bool codeIsThr Simulator* sim = vixl::Simulator::Current(); if (sim) { sim->FlushICache(); - } else if (!codeIsThreadLocal) { - // We're on a background thread; emulate what the real hardware would do by - // emitting a membarrier that'll interrupt and cause an icache invalidation - // on all the threads. - SimulatorProcess::membarrier(); } #elif defined(_MSC_VER) && defined(_M_ARM64) FlushInstructionCache(GetCurrentProcess(), address, length); @@ -262,31 +187,18 @@ void CPU::EnsureIAndDCacheCoherency(void *address, size_t length, bool codeIsThr iline += isize; } while (iline < end);
- __asm__ __volatile__ ( - // Make sure that the instruction cache operations (above) take effect - // before the isb (below). - " dsb ish\n" - - // Ensure that any instructions already in the pipeline are discarded and - // reloaded from the new data. - // isb : Instruction Synchronisation Barrier - " isb\n" - : : : "memory"); + __asm__ __volatile__( + // Make sure that the instruction cache operations (above) take effect + // before the isb (below). + " dsb ish\n"
- if (!codeIsThreadLocal) { - // If we're on a background thread, emit a membarrier that will synchronize - // all the executing threads with the new version of the code. - JSContext* cx = js::TlsContext.get(); - if (!cx || !cx->isMainThreadContext()) { - MOZ_RELEASE_ASSERT(CPU::CanFlushICacheFromBackgroundThreads()); - // The intent to use this command has been carried over in - // CanFlushICacheFromBackgroundThreads. - if (membarrier(MEMBARRIER_CMD_PRIVATE_EXPEDITED_SYNC_CORE, 0) != 0) { - // Better safe than sorry. - MOZ_CRASH("membarrier can't be executed"); - } - } - } + // Ensure that any instructions already in the pipeline are discarded and + // reloaded from the new data. + // isb : Instruction Synchronisation Barrier + " isb\n" + : + : + : "memory"); #else // If the host isn't AArch64, we must be using the simulator, so this function // doesn't have to do anything. diff --git a/js/src/jit/loong64/Architecture-loong64.cpp b/js/src/jit/loong64/Architecture-loong64.cpp index d838eac16b8f4..6b1069a592ac2 100644 --- a/js/src/jit/loong64/Architecture-loong64.cpp +++ b/js/src/jit/loong64/Architecture-loong64.cpp @@ -68,7 +68,7 @@ bool CPUFlagsHaveBeenComputed() {
uint32_t GetLOONG64Flags() { return 0; }
-void FlushICache(void* code, size_t size, bool codeIsThreadLocal) { +void FlushICache(void* code, size_t size) { #if defined(JS_SIMULATOR) js::jit::SimulatorProcess::FlushICache(code, size);
diff --git a/js/src/jit/mips-shared/Architecture-mips-shared.cpp b/js/src/jit/mips-shared/Architecture-mips-shared.cpp index ed56ed72502e0..e3017adb4f70b 100644 --- a/js/src/jit/mips-shared/Architecture-mips-shared.cpp +++ b/js/src/jit/mips-shared/Architecture-mips-shared.cpp @@ -87,7 +87,7 @@ Registers::Code Registers::FromName(const char* name) { return Invalid; }
-void FlushICache(void* code, size_t size, bool codeIsThreadLocal) { +void FlushICache(void* code, size_t size) { #if defined(JS_SIMULATOR) js::jit::SimulatorProcess::FlushICache(code, size);
diff --git a/js/src/jit/moz.build b/js/src/jit/moz.build index 69af98f953beb..4f2765c060227 100644 --- a/js/src/jit/moz.build +++ b/js/src/jit/moz.build @@ -37,6 +37,7 @@ UNIFIED_SOURCES += [ "EdgeCaseAnalysis.cpp", "EffectiveAddressAnalysis.cpp", "ExecutableAllocator.cpp", + "FlushICache.cpp", "FoldLinearArithConstants.cpp", "InlinableNatives.cpp", "InstructionReordering.cpp", diff --git a/js/src/jsapi-tests/testsJit.cpp b/js/src/jsapi-tests/testsJit.cpp index ac2c1c7a3cbb8..29de274004862 100644 --- a/js/src/jsapi-tests/testsJit.cpp +++ b/js/src/jsapi-tests/testsJit.cpp @@ -68,8 +68,8 @@ bool ExecuteJit(JSContext* cx, js::jit::MacroAssembler& masm) { if (!code) { return false; } - if (!ExecutableAllocator::makeExecutableAndFlushICache( - FlushICacheSpec::LocalThreadOnly, code->raw(), code->bufferSize())) { + if (!ExecutableAllocator::makeExecutableAndFlushICache(code->raw(), + code->bufferSize())) { return false; }
diff --git a/js/src/wasm/WasmBuiltins.cpp b/js/src/wasm/WasmBuiltins.cpp index f1f49937a3d97..8f53d5d1327fb 100644 --- a/js/src/wasm/WasmBuiltins.cpp +++ b/js/src/wasm/WasmBuiltins.cpp @@ -1756,9 +1756,8 @@ bool wasm::EnsureBuiltinThunksInitialized() { MOZ_ASSERT(masm.trapSites().empty()); MOZ_ASSERT(masm.tryNotes().empty());
- if (!ExecutableAllocator::makeExecutableAndFlushICache( - FlushICacheSpec::LocalThreadOnly, thunks->codeBase, - thunks->codeSize)) { + if (!ExecutableAllocator::makeExecutableAndFlushICache(thunks->codeBase, + thunks->codeSize)) { return false; }
diff --git a/js/src/wasm/WasmCode.cpp b/js/src/wasm/WasmCode.cpp index 34df415bef868..1828037807f31 100644 --- a/js/src/wasm/WasmCode.cpp +++ b/js/src/wasm/WasmCode.cpp @@ -331,7 +331,7 @@ UniqueModuleSegment ModuleSegment::create(Tier tier, const Bytes& unlinkedBytes, linkData); }
-bool ModuleSegment::initialize(IsTier2 isTier2, const CodeTier& codeTier, +bool ModuleSegment::initialize(const CodeTier& codeTier, const LinkData& linkData, const Metadata& metadata, const MetadataTier& metadataTier) { @@ -341,13 +341,9 @@ bool ModuleSegment::initialize(IsTier2 isTier2, const CodeTier& codeTier,
// Optimized compilation finishes on a background thread, so we must make sure // to flush the icaches of all the executing threads. - FlushICacheSpec flushIcacheSpec = isTier2 == IsTier2::Tier2 - ? FlushICacheSpec::AllThreads - : FlushICacheSpec::LocalThreadOnly; - // Reprotect the whole region to avoid having separate RW and RX mappings. if (!ExecutableAllocator::makeExecutableAndFlushICache( - flushIcacheSpec, base(), RoundupCodeLength(length()))) { + base(), RoundupCodeLength(length()))) { return false; }
@@ -499,7 +495,6 @@ static constexpr unsigned LAZY_STUB_LIFO_DEFAULT_CHUNK_SIZE = 8 * 1024;
bool LazyStubTier::createManyEntryStubs(const Uint32Vector& funcExportIndices, const CodeTier& codeTier, - bool flushAllThreadsIcaches, size_t* stubSegmentIndex) { MOZ_ASSERT(funcExportIndices.length());
@@ -579,13 +574,7 @@ bool LazyStubTier::createManyEntryStubs(const Uint32Vector& funcExportIndices, Assembler::Bind(codePtr, label); }
- // Optimized compilation finishes on a background thread, so we must make sure - // to flush the icaches of all the executing threads. - FlushICacheSpec flushIcacheSpec = flushAllThreadsIcaches - ? FlushICacheSpec::AllThreads - : FlushICacheSpec::LocalThreadOnly; - if (!ExecutableAllocator::makeExecutableAndFlushICache(flushIcacheSpec, - codePtr, codeLength)) { + if (!ExecutableAllocator::makeExecutableAndFlushICache(codePtr, codeLength)) { return false; }
@@ -629,14 +618,8 @@ bool LazyStubTier::createOneEntryStub(uint32_t funcExportIndex, return false; }
- // This happens on the executing thread (when createOneEntryStub is called - // from GetInterpEntryAndEnsureStubs), so no need to flush the icaches on all - // the threads. - bool flushAllThreadIcaches = false; - size_t stubSegmentIndex; - if (!createManyEntryStubs(funcExportIndexes, codeTier, flushAllThreadIcaches, - &stubSegmentIndex)) { + if (!createManyEntryStubs(funcExportIndexes, codeTier, &stubSegmentIndex)) { return false; }
@@ -667,13 +650,8 @@ bool LazyStubTier::createTier2(const Uint32Vector& funcExportIndices, return true; }
- // This compilation happens on a background compiler thread, so the icache may - // need to be flushed on all the threads. - bool flushAllThreadIcaches = true; - size_t stubSegmentIndex; - if (!createManyEntryStubs(funcExportIndices, codeTier, flushAllThreadIcaches, - &stubSegmentIndex)) { + if (!createManyEntryStubs(funcExportIndices, codeTier, &stubSegmentIndex)) { return false; }
@@ -849,15 +827,15 @@ bool Metadata::getFuncName(NameContext ctx, uint32_t funcIndex, return AppendFunctionIndexName(funcIndex, name); }
-bool CodeTier::initialize(IsTier2 isTier2, const Code& code, - const LinkData& linkData, const Metadata& metadata) { +bool CodeTier::initialize(const Code& code, const LinkData& linkData, + const Metadata& metadata) { MOZ_ASSERT(!initialized()); code_ = &code;
MOZ_ASSERT(lazyStubs_.readLock()->entryStubsEmpty());
// See comments in CodeSegment::initialize() for why this must be last. - if (!segment_->initialize(isTier2, *this, linkData, metadata, *metadata_)) { + if (!segment_->initialize(*this, linkData, metadata, *metadata_)) { return false; }
@@ -946,7 +924,7 @@ Code::Code(UniqueCodeTier tier1, const Metadata& metadata, bool Code::initialize(const LinkData& linkData) { MOZ_ASSERT(!initialized());
- if (!tier1_->initialize(IsTier2::NotTier2, *this, linkData, *metadata_)) { + if (!tier1_->initialize(*this, linkData, *metadata_)) { return false; }
@@ -960,7 +938,7 @@ bool Code::setAndBorrowTier2(UniqueCodeTier tier2, const LinkData& linkData, MOZ_RELEASE_ASSERT(tier2->tier() == Tier::Optimized && tier1_->tier() == Tier::Baseline);
- if (!tier2->initialize(IsTier2::Tier2, *this, linkData, *metadata_)) { + if (!tier2->initialize(*this, linkData, *metadata_)) { return false; }
diff --git a/js/src/wasm/WasmCode.h b/js/src/wasm/WasmCode.h index ede89a0271378..3ef88c7e53a08 100644 --- a/js/src/wasm/WasmCode.h +++ b/js/src/wasm/WasmCode.h @@ -209,8 +209,6 @@ class CodeSegment {
using UniqueModuleSegment = UniquePtr<ModuleSegment>;
-enum IsTier2 { Tier2, NotTier2 }; - class ModuleSegment : public CodeSegment { const Tier tier_; uint8_t* const trapCode_; @@ -224,9 +222,8 @@ class ModuleSegment : public CodeSegment { static UniqueModuleSegment create(Tier tier, const Bytes& unlinkedBytes, const LinkData& linkData);
- bool initialize(IsTier2 isTier2, const CodeTier& codeTier, - const LinkData& linkData, const Metadata& metadata, - const MetadataTier& metadataTier); + bool initialize(const CodeTier& codeTier, const LinkData& linkData, + const Metadata& metadata, const MetadataTier& metadataTier);
Tier tier() const { return tier_; }
@@ -591,7 +588,6 @@ class LazyStubTier {
[[nodiscard]] bool createManyEntryStubs(const Uint32Vector& funcExportIndices, const CodeTier& codeTier, - bool flushAllThreadsIcaches, size_t* stubSegmentIndex);
public: @@ -654,7 +650,7 @@ class CodeTier { lazyStubs_(mutexForTier(segment_->tier())) {}
bool initialized() const { return !!code_ && segment_->initialized(); } - bool initialize(IsTier2 isTier2, const Code& code, const LinkData& linkData, + bool initialize(const Code& code, const LinkData& linkData, const Metadata& metadata);
Tier tier() const { return segment_->tier(); } diff --git a/js/src/wasm/WasmCompile.cpp b/js/src/wasm/WasmCompile.cpp index 26534bca4ea47..842f75d07dda9 100644 --- a/js/src/wasm/WasmCompile.cpp +++ b/js/src/wasm/WasmCompile.cpp @@ -26,6 +26,7 @@ # include "jit/ProcessExecutableMemory.h" #endif
+#include "jit/FlushICache.h" #include "util/Text.h" #include "vm/HelperThreads.h" #include "vm/Realm.h" @@ -572,6 +573,11 @@ static bool TieringBeneficial(uint32_t codeSize) { return true; }
+// Ensure that we have the non-compiler requirements to tier safely. +static bool PlatformCanTier() { + return CanUseExtraThreads() && jit::CanFlushExecutionContextForAllThreads(); +} + CompilerEnvironment::CompilerEnvironment(const CompileArgs& args) : state_(InitialWithArgs), args_(&args) {}
@@ -590,20 +596,6 @@ void CompilerEnvironment::computeParameters() { state_ = Computed; }
-// Check that this architecture either: -// - is cache-coherent, which is the case for most tier-1 architectures we care -// about. -// - or has the ability to invalidate the instruction cache of all threads, so -// background compilation in tiered compilation can be synchronized across all -// threads. -static bool IsICacheSafe() { -#ifdef JS_CODEGEN_ARM64 - return jit::CanFlushICacheFromBackgroundThreads(); -#else - return true; -#endif -} - void CompilerEnvironment::computeParameters(Decoder& d) { MOZ_ASSERT(!isComputed());
@@ -633,8 +625,9 @@ void CompilerEnvironment::computeParameters(Decoder& d) { codeSectionSize = range.size; }
- if (baselineEnabled && hasSecondTier && CanUseExtraThreads() && - (TieringBeneficial(codeSectionSize) || forceTiering) && IsICacheSafe()) { + if (baselineEnabled && hasSecondTier && + (TieringBeneficial(codeSectionSize) || forceTiering) && + PlatformCanTier()) { mode_ = CompileMode::Tier1; tier_ = Tier::Baseline; } else { diff --git a/js/src/wasm/WasmModule.cpp b/js/src/wasm/WasmModule.cpp index b3bb41cdaf400..406fb12dc3242 100644 --- a/js/src/wasm/WasmModule.cpp +++ b/js/src/wasm/WasmModule.cpp @@ -20,7 +20,8 @@
#include <chrono>
-#include "js/BuildId.h" // JS::BuildIdCharVector +#include "jit/FlushICache.h" // for FlushExecutionContextForAllThreads +#include "js/BuildId.h" // JS::BuildIdCharVector #include "js/experimental/TypedData.h" // JS_NewUint8Array #include "js/friend/ErrorMessages.h" // js::GetErrorMessage, JSMSG_* #include "js/Printf.h" // JS_smprintf @@ -212,6 +213,14 @@ bool Module::finishTier2(const LinkData& linkData2, return false; }
+ // Initializing the code above will have flushed the icache for all cores. + // However, there could still be stale data in the execution pipeline of + // other cores on some platforms. Force an execution context flush on all + // threads to fix this before we commit the code. + // + // This is safe due to the check in `PlatformCanTier` in WasmCompile.cpp + jit::FlushExecutionContextForAllThreads(); + // Now that we can't fail or otherwise abort tier2, make it live.
MOZ_ASSERT(!code().hasTier2());
This is an automated email from the git hooks/post-receive script.
richard pushed a commit to branch geckoview-102.3.0esr-12.0-1 in repository tor-browser.
commit 0bd42cb43a8dff6f9e17ca73a27bc62fe5309144 Author: Emilio Cobos Álvarez emilio@crisal.io AuthorDate: Fri Sep 2 08:56:12 2022 -0400
Bug 1783415 - Don't use custom styling of select in chrome pages. r=mconley, a=RyanVM
Assume default styles fit well enough. This prevents confusing colors from applying, since in the described case we pick the hovered select background, but then override the options to use the unhovered background...
With short selects (like the ones that have only two options), that may cause the wrong impression. A bit tricky!
This repros for me on win10, for what is worth. --- toolkit/actors/SelectChild.jsm | 2 ++ toolkit/actors/SelectParent.jsm | 12 ++++++++---- 2 files changed, 10 insertions(+), 4 deletions(-)
diff --git a/toolkit/actors/SelectChild.jsm b/toolkit/actors/SelectChild.jsm index c209ae30903e6..f133b0eb29a02 100644 --- a/toolkit/actors/SelectChild.jsm +++ b/toolkit/actors/SelectChild.jsm @@ -129,6 +129,7 @@ SelectContentHelper.prototype = { isOpenedViaTouch: this.isOpenedViaTouch, options, rect, + custom: !this.element.nodePrincipal.isSystemPrincipal, selectedIndex: this.element.selectedIndex, style: supportedStyles(computedStyles, SUPPORTED_SELECT_PROPERTIES), defaultStyle: supportedStyles(defaultStyles, SUPPORTED_SELECT_PROPERTIES), @@ -198,6 +199,7 @@ SelectContentHelper.prototype = { ); this.actor.sendAsyncMessage("Forms:UpdateDropDown", { options: this._buildOptionList(), + custom: !this.element.nodePrincipal.isSystemPrincipal, selectedIndex: this.element.selectedIndex, style: supportedStyles(computedStyles, SUPPORTED_SELECT_PROPERTIES), defaultStyle: supportedStyles(defaultStyles, SUPPORTED_SELECT_PROPERTIES), diff --git a/toolkit/actors/SelectParent.jsm b/toolkit/actors/SelectParent.jsm index f7c954ca828b1..353b17300aa3a 100644 --- a/toolkit/actors/SelectParent.jsm +++ b/toolkit/actors/SelectParent.jsm @@ -82,6 +82,7 @@ var SelectParentHelper = { * @param {Array<Object>} uniqueItemStyles * @param {Number} selectedIndex * @param {Number} zoom + * @param {Boolean} custom * @param {Object} uaStyle * @param {Object} selectStyle */ @@ -91,6 +92,7 @@ var SelectParentHelper = { uniqueItemStyles, selectedIndex, zoom, + custom, uaStyle, selectStyle ) { @@ -110,7 +112,7 @@ var SelectParentHelper = {
let sheet = stylesheet.sheet;
- if (!CUSTOM_STYLING_ENABLED) { + if (!custom) { selectStyle = uaStyle; }
@@ -128,7 +130,7 @@ var SelectParentHelper = { selectStyle["background-color"] != uaStyle["background-color"] || selectStyle.color != uaStyle.color;
- if (CUSTOM_STYLING_ENABLED) { + if (custom) { if (selectStyle["text-shadow"] != "none") { sheet.insertRule( `#ContentSelectDropdown > menupopup > :is(menuitem, menucaption)[_moz-menuactive="true"] { @@ -212,7 +214,7 @@ var SelectParentHelper = { rule.direction = style.direction; rule.fontSize = zoom * parseFloat(style["font-size"], 10) + "px";
- if (CUSTOM_STYLING_ENABLED) { + if (custom) { let optionBackgroundIsTransparent = style["background-color"] == "rgba(0, 0, 0, 0)"; let optionBackgroundSet = @@ -265,7 +267,7 @@ var SelectParentHelper = { // We only set the `customoptionstyling` if the background has been // manually set. This prevents the overlap between moz-appearance and // background-color. `color` and `text-shadow` do not interfere with it. - if (CUSTOM_STYLING_ENABLED && selectBackgroundSet) { + if (custom && selectBackgroundSet) { menulist.menupopup.setAttribute("customoptionstyling", "true"); } else { menulist.menupopup.removeAttribute("customoptionstyling"); @@ -434,6 +436,7 @@ var SelectParentHelper = { options.uniqueStyles, selectedIndex, this._currentZoom, + msg.data.custom && CUSTOM_STYLING_ENABLED, msg.data.defaultStyle, msg.data.style ); @@ -783,6 +786,7 @@ class SelectParent extends JSWindowActorParent { // We only want to apply the full zoom. The text zoom is already // applied in the font-size. this.manager.browsingContext.fullZoom, + data.custom && CUSTOM_STYLING_ENABLED, data.defaultStyle, data.style );
This is an automated email from the git hooks/post-receive script.
richard pushed a commit to branch geckoview-102.3.0esr-12.0-1 in repository tor-browser.
commit 157e78f73c5bfde24b98297ae8ddbee458415bbb Author: Gijs Kruitbosch gijskruitbosch@gmail.com AuthorDate: Mon Aug 29 20:50:46 2022 +0000
Bug 1784432 - allow opening list all tabs menu using the keyboard, r=mhowell a=RyanVM
Differential Revision: https://phabricator.services.mozilla.com/D155868 --- browser/base/content/browser-allTabsMenu.js | 6 ++++ browser/base/content/navigator-toolbox.inc.xhtml | 1 + browser/base/content/test/tabs/browser.ini | 1 + .../tabs/browser_tab_manager_keyboard_access.js | 37 ++++++++++++++++++++++ 4 files changed, 45 insertions(+)
diff --git a/browser/base/content/browser-allTabsMenu.js b/browser/base/content/browser-allTabsMenu.js index 851e0bfbac31f..bc1c07b5f7268 100644 --- a/browser/base/content/browser-allTabsMenu.js +++ b/browser/base/content/browser-allTabsMenu.js @@ -139,6 +139,12 @@ var gTabsPanel = { },
showAllTabsPanel(event) { + // Note that event may be null. + + // Only space and enter should open the popup, ignore other keypresses: + if (event?.type == "keypress" && event.key != "Enter" && event.key != " ") { + return; + } this.init(); if (this.canOpen) { PanelUI.showSubView( diff --git a/browser/base/content/navigator-toolbox.inc.xhtml b/browser/base/content/navigator-toolbox.inc.xhtml index 5f1113e1111ef..316d3ef98371d 100644 --- a/browser/base/content/navigator-toolbox.inc.xhtml +++ b/browser/base/content/navigator-toolbox.inc.xhtml @@ -80,6 +80,7 @@ <toolbarbutton id="alltabs-button" class="toolbarbutton-1 chromeclass-toolbar-additional tabs-alltabs-button" badged="true" + onkeypress="gTabsPanel.showAllTabsPanel(event);" onmousedown="gTabsPanel.showAllTabsPanel(event);" data-l10n-id="tabs-toolbar-list-all-tabs" removable="false"/> diff --git a/browser/base/content/test/tabs/browser.ini b/browser/base/content/test/tabs/browser.ini index 8607042000b40..f12018025b39e 100644 --- a/browser/base/content/test/tabs/browser.ini +++ b/browser/base/content/test/tabs/browser.ini @@ -61,6 +61,7 @@ support-files = tab_that_closes.html [browser_multiselect_tabs_move_to_another_window_drag.js] [browser_multiselect_tabs_move_to_new_window_contextmenu.js] https_first_disabled = true +[browser_tab_manager_keyboard_access.js] [browser_tab_play.js] [browser_multiselect_tabs_move.js] [browser_multiselect_tabs_mute_unmute.js] diff --git a/browser/base/content/test/tabs/browser_tab_manager_keyboard_access.js b/browser/base/content/test/tabs/browser_tab_manager_keyboard_access.js new file mode 100644 index 0000000000000..039e49fa5bfe9 --- /dev/null +++ b/browser/base/content/test/tabs/browser_tab_manager_keyboard_access.js @@ -0,0 +1,37 @@ +/* Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +"use strict"; + +/** + * Check we can open the tab manager using the keyboard. + * Note that navigation to buttons in the toolbar is covered + * by other tests. + */ +add_task(async function test_open_tabmanager_keyboard() { + await SpecialPowers.pushPrefEnv({ + set: [["browser.tabs.tabmanager.enabled", true]], + }); + let newWindow = await BrowserTestUtils.openNewWindowWithFlushedCacheForMozSupports(); + let elem = newWindow.document.getElementById("alltabs-button"); + + // Borrowed from forceFocus() in the keyboard directory head.js + elem.setAttribute("tabindex", "-1"); + elem.focus(); + elem.removeAttribute("tabindex"); + + let focused = BrowserTestUtils.waitForEvent(newWindow, "focus", true); + EventUtils.synthesizeKey(" ", {}, newWindow); + let event = await focused; + ok( + event.originalTarget.closest("#allTabsMenu-allTabsView"), + "Focus inside all tabs menu after toolbar button pressed" + ); + let hidden = BrowserTestUtils.waitForEvent( + event.target.closest("panel"), + "popuphidden" + ); + EventUtils.synthesizeKey("KEY_Escape", { shiftKey: false }, newWindow); + await hidden; + await BrowserTestUtils.closeWindow(newWindow); +});
This is an automated email from the git hooks/post-receive script.
richard pushed a commit to branch geckoview-102.3.0esr-12.0-1 in repository tor-browser.
commit 4f9825634cdccde98191fede657e8be53e7451b0 Author: Tom Schuster tschuster@mozilla.com AuthorDate: Mon Aug 15 14:41:10 2022 +0000
Bug 1770094 r=freddyb,emilio a=RyanVM
Differential Revision: https://phabricator.services.mozilla.com/D154518 --- dom/html/HTMLFormSubmission.cpp | 3 +- dom/html/HTMLSharedElement.cpp | 8 ++--- .../security/nsIContentSecurityPolicy.idl | 11 +++--- dom/security/nsCSPContext.cpp | 11 +++--- parser/html/nsHtml5TreeOpExecutor.cpp | 40 +++++++++++++++++++--- 5 files changed, 54 insertions(+), 19 deletions(-)
diff --git a/dom/html/HTMLFormSubmission.cpp b/dom/html/HTMLFormSubmission.cpp index a7141c3cd9a47..4f42f19716e1c 100644 --- a/dom/html/HTMLFormSubmission.cpp +++ b/dom/html/HTMLFormSubmission.cpp @@ -792,7 +792,8 @@ nsresult HTMLFormSubmission::GetFromForm(HTMLFormElement* aForm, // policy - do *not* consult default-src, see: // http://www.w3.org/TR/CSP2/#directive-default-src rv = csp->Permits(aForm, nullptr /* nsICSPEventListener */, actionURL, - nsIContentSecurityPolicy::FORM_ACTION_DIRECTIVE, true, + nsIContentSecurityPolicy::FORM_ACTION_DIRECTIVE, + true /* aSpecific */, true /* aSendViolationReports */, &permitsFormAction); NS_ENSURE_SUCCESS(rv, rv); if (!permitsFormAction) { diff --git a/dom/html/HTMLSharedElement.cpp b/dom/html/HTMLSharedElement.cpp index 4e3e1453846b6..b168f327823ed 100644 --- a/dom/html/HTMLSharedElement.cpp +++ b/dom/html/HTMLSharedElement.cpp @@ -155,10 +155,10 @@ static void SetBaseURIUsingFirstBaseWithHref(Document* aDocument, // policy - do *not* consult default-src, see: // http://www.w3.org/TR/CSP2/#directive-default-src bool cspPermitsBaseURI = true; - rv = csp->Permits(child->AsElement(), nullptr /* nsICSPEventListener */, - newBaseURI, - nsIContentSecurityPolicy::BASE_URI_DIRECTIVE, true, - &cspPermitsBaseURI); + rv = csp->Permits( + child->AsElement(), nullptr /* nsICSPEventListener */, newBaseURI, + nsIContentSecurityPolicy::BASE_URI_DIRECTIVE, true /* aSpecific */, + true /* aSendViolationReports */, &cspPermitsBaseURI); if (NS_FAILED(rv) || !cspPermitsBaseURI) { newBaseURI = nullptr; } diff --git a/dom/interfaces/security/nsIContentSecurityPolicy.idl b/dom/interfaces/security/nsIContentSecurityPolicy.idl index e4e5815c59f65..215e84ad32be6 100644 --- a/dom/interfaces/security/nsIContentSecurityPolicy.idl +++ b/dom/interfaces/security/nsIContentSecurityPolicy.idl @@ -303,11 +303,8 @@ interface nsIContentSecurityPolicy : nsISerializable /** * Checks if a specific directive permits loading of a URI. * - * NOTE: Calls to this may trigger violation reports when queried, so the - * return value should not be cached. - * * @param aTriggeringElement - * The element that triggers this CSP check. It can be null. + * The element that triggers this CSP check. It can be null. * @param aURI * The URI about to be loaded or used. * @param aDir @@ -319,6 +316,9 @@ interface nsIContentSecurityPolicy : nsISerializable * "false" allows CSP to fall back to default-src. This function * behaves the same for both values of canUseDefault when querying * directives that don't fall-back. + * @param aSendViolationReports + * If `true` and the uri is not allowed then trigger violation reports. + * This should be `false` for caching or preloads. * @return * Whether or not the provided URI is allowed by CSP under the given * directive. (block the pending operation if false). @@ -327,7 +327,8 @@ interface nsIContentSecurityPolicy : nsISerializable in nsICSPEventListener aCSPEventListener, in nsIURI aURI, in nsIContentSecurityPolicy_CSPDirective aDir, - in boolean aSpecific); + in boolean aSpecific, + in boolean aSendViolationReports);
/** * Delegate method called by the service when sub-elements of the protected diff --git a/dom/security/nsCSPContext.cpp b/dom/security/nsCSPContext.cpp index f9f6073e1eaeb..3c655e5267398 100644 --- a/dom/security/nsCSPContext.cpp +++ b/dom/security/nsCSPContext.cpp @@ -1675,7 +1675,8 @@ nsCSPContext::PermitsAncestry(nsILoadInfo* aLoadInfo, NS_IMETHODIMP nsCSPContext::Permits(Element* aTriggeringElement, nsICSPEventListener* aCSPEventListener, nsIURI* aURI, - CSPDirective aDir, bool aSpecific, bool* outPermits) { + CSPDirective aDir, bool aSpecific, + bool aSendViolationReports, bool* outPermits) { // Can't perform check without aURI if (aURI == nullptr) { return NS_ERROR_FAILURE; @@ -1697,14 +1698,14 @@ nsCSPContext::Permits(Element* aTriggeringElement, permitsInternal(aDir, aTriggeringElement, aCSPEventListener, aURI, nullptr, // no original (pre-redirect) URI u""_ns, // no nonce - aSpecific, - true, // send violation reports + aSpecific, aSendViolationReports, true, // send blocked URI in violation reports false); // not parser created
if (CSPCONTEXTLOGENABLED()) { - CSPCONTEXTLOG(("nsCSPContext::Permits, aUri: %s, aDir: %d, isAllowed: %s", - aURI->GetSpecOrDefault().get(), aDir, + CSPCONTEXTLOG(("nsCSPContext::Permits, aUri: %s, aDir: %s, isAllowed: %s", + aURI->GetSpecOrDefault().get(), + CSP_CSPDirectiveToString(aDir), *outPermits ? "allow" : "deny")); }
diff --git a/parser/html/nsHtml5TreeOpExecutor.cpp b/parser/html/nsHtml5TreeOpExecutor.cpp index d956b3b5c6ecf..55c7dbe1ae90d 100644 --- a/parser/html/nsHtml5TreeOpExecutor.cpp +++ b/parser/html/nsHtml5TreeOpExecutor.cpp @@ -1314,11 +1314,44 @@ void nsHtml5TreeOpExecutor::SetSpeculationBase(const nsAString& aURL) { // the first one wins return; } + auto encoding = mDocument->GetDocumentCharacterSet(); - DebugOnly<nsresult> rv = NS_NewURI(getter_AddRefs(mSpeculationBaseURI), aURL, - encoding, mDocument->GetDocumentURI()); + nsCOMPtr<nsIURI> newBaseURI; + DebugOnly<nsresult> rv = NS_NewURI(getter_AddRefs(newBaseURI), aURL, encoding, + mDocument->GetDocumentURI()); NS_WARNING_ASSERTION(NS_SUCCEEDED(rv), "Failed to create a URI"); + if (!newBaseURI) { + return; + } + + // Check the document's CSP usually delivered via the CSP header. + if (nsCOMPtr<nsIContentSecurityPolicy> csp = mDocument->GetCsp()) { + // base-uri should not fallback to the default-src and preloads should not + // trigger violation reports. + bool cspPermitsBaseURI = true; + nsresult rv = csp->Permits( + nullptr, nullptr, newBaseURI, + nsIContentSecurityPolicy::BASE_URI_DIRECTIVE, true /* aSpecific */, + false /* aSendViolationReports */, &cspPermitsBaseURI); + if (NS_FAILED(rv) || !cspPermitsBaseURI) { + return; + } + } + + // Also check the CSP discovered from the <meta> tag during speculative + // parsing. + if (nsCOMPtr<nsIContentSecurityPolicy> csp = mDocument->GetPreloadCsp()) { + bool cspPermitsBaseURI = true; + nsresult rv = csp->Permits( + nullptr, nullptr, newBaseURI, + nsIContentSecurityPolicy::BASE_URI_DIRECTIVE, true /* aSpecific */, + false /* aSendViolationReports */, &cspPermitsBaseURI); + if (NS_FAILED(rv) || !cspPermitsBaseURI) { + return; + } + }
+ mSpeculationBaseURI = newBaseURI; mDocument->Preloads().SetSpeculationBase(mSpeculationBaseURI); }
@@ -1338,8 +1371,7 @@ void nsHtml5TreeOpExecutor::AddSpeculationCSP(const nsAString& aCSP) { NS_ENSURE_SUCCESS_VOID(rv); }
- // please note that meta CSPs and CSPs delivered through a header need - // to be joined together. + // Please note that multiple meta CSPs need to be joined together. rv = preloadCsp->AppendPolicy( aCSP, false, // csp via meta tag can not be report only
This is an automated email from the git hooks/post-receive script.
richard pushed a commit to branch geckoview-102.3.0esr-12.0-1 in repository tor-browser.
commit 79e7732a6abeff0e217b983895aeefac850742b9 Author: Calixte cdenizet@mozilla.com AuthorDate: Tue May 31 17:25:29 2022 +0000
Bug 1766030 - Add an optional source URL when saving an URL. r=Gijs, a=RyanVM
In pdf.js, files are saved thanks to a blob but the original URL is lost. Consequently, the download panel doesn't contain any information about the origins of a saved pdf. The saveURL, internalSave and nsITransfer.init functions has now a parameter for this originalURL.
Differential Revision: https://phabricator.services.mozilla.com/D147651 --- browser/base/content/browser.js | 1 + browser/base/content/nsContextMenu.js | 4 ++++ browser/base/content/pageinfo/pageInfo.js | 2 ++ browser/base/content/utilityOverlay.js | 13 ++++++++++++- browser/components/downloads/DownloadsCommon.jsm | 4 +++- browser/components/downloads/content/indicator.js | 12 +++++++++++- devtools/startup/DevToolsStartup.jsm | 1 + toolkit/components/downloads/DownloadCore.jsm | 9 +++++++++ toolkit/components/downloads/DownloadLegacy.jsm | 5 +++++ toolkit/components/downloads/test/unit/head.js | 1 + toolkit/components/pdfjs/content/PdfStreamConverter.jsm | 1 + toolkit/components/pdfjs/content/PdfjsParent.jsm | 1 + .../components/pdfjs/test/browser_pdfjs_download_button.js | 11 ++++++++++- toolkit/content/contentAreaUtils.js | 11 +++++++++++ toolkit/content/tests/browser/browser_saveImageURL.js | 1 + .../content/tests/browser/browser_save_resend_postdata.js | 1 + uriloader/base/nsITransfer.idl | 4 ++++ uriloader/exthandler/nsExternalHelperAppService.cpp | 4 ++-- 18 files changed, 80 insertions(+), 6 deletions(-)
diff --git a/browser/base/content/browser.js b/browser/base/content/browser.js index 801bab733ba63..628c58cc2208d 100644 --- a/browser/base/content/browser.js +++ b/browser/base/content/browser.js @@ -7128,6 +7128,7 @@ function handleLinkClick(event, href, linkNode) { if (where == "save") { saveURL( href, + null, linkNode ? gatherTextUnder(linkNode) : "", null, true, diff --git a/browser/base/content/nsContextMenu.js b/browser/base/content/nsContextMenu.js index f4e105920391c..81e11043ecc58 100644 --- a/browser/base/content/nsContextMenu.js +++ b/browser/base/content/nsContextMenu.js @@ -1566,6 +1566,7 @@ class nsContextMenu { // FIXME can we switch this to a blob URL? internalSave( dataURL, + null, // originalURL null, // document name, null, // content disposition @@ -1754,6 +1755,7 @@ class nsContextMenu { // it can without waiting. saveURL( linkURL, + null, linkText, dialogTitle, bypassCache, @@ -1904,6 +1906,7 @@ class nsContextMenu { this._canvasToBlobURL(this.targetIdentifier).then(function(blobURL) { internalSave( blobURL, + null, // originalURL null, // document "canvas.png", null, // content disposition @@ -1924,6 +1927,7 @@ class nsContextMenu { urlSecurityCheck(this.mediaURL, this.principal); internalSave( this.mediaURL, + null, // originalURL null, // document null, // file name; we'll take it from the URL this.contentData.contentDisposition, diff --git a/browser/base/content/pageinfo/pageInfo.js b/browser/base/content/pageinfo/pageInfo.js index 4b2756a222492..a0670995d0227 100644 --- a/browser/base/content/pageinfo/pageInfo.js +++ b/browser/base/content/pageinfo/pageInfo.js @@ -738,6 +738,7 @@ function saveMedia() { saveURL( url, null, + null, titleKey, false, false, @@ -768,6 +769,7 @@ function saveMedia() { null, null, null, + null, false, "SaveImageTitle", aChosenData, diff --git a/browser/base/content/utilityOverlay.js b/browser/base/content/utilityOverlay.js index 7611185e25e2c..40a1fa59d0e2e 100644 --- a/browser/base/content/utilityOverlay.js +++ b/browser/base/content/utilityOverlay.js @@ -319,6 +319,7 @@ function openLinkIn(url, where, params) { url, null, null, + null, true, true, aReferrerInfo, @@ -335,7 +336,17 @@ function openLinkIn(url, where, params) { ); return; } - saveURL(url, null, null, true, true, aReferrerInfo, null, aInitiatingDoc); + saveURL( + url, + null, + null, + null, + true, + true, + aReferrerInfo, + null, + aInitiatingDoc + ); } return; } diff --git a/browser/components/downloads/DownloadsCommon.jsm b/browser/components/downloads/DownloadsCommon.jsm index a22c8378c4f98..422be505a3156 100644 --- a/browser/components/downloads/DownloadsCommon.jsm +++ b/browser/components/downloads/DownloadsCommon.jsm @@ -442,7 +442,9 @@ var DownloadsCommon = { * Copies the source URI of the given Download object to the clipboard. */ copyDownloadLink(download) { - gClipboardHelper.copyString(download.source.url); + gClipboardHelper.copyString( + download.source.originalUrl || download.source.url + ); },
/** diff --git a/browser/components/downloads/content/indicator.js b/browser/components/downloads/content/indicator.js index c7a4d5bfe1950..b739cdd797a3b 100644 --- a/browser/components/downloads/content/indicator.js +++ b/browser/components/downloads/content/indicator.js @@ -584,7 +584,17 @@ const DownloadsIndicatorView = { if (link.url.startsWith("about:")) { continue; } - saveURL(link.url, link.name, null, true, true, null, null, sourceDoc); + saveURL( + link.url, + null, + link.name, + null, + true, + true, + null, + null, + sourceDoc + ); handled = true; } if (handled) { diff --git a/devtools/startup/DevToolsStartup.jsm b/devtools/startup/DevToolsStartup.jsm index 775e6023a7594..069d9abecbd69 100644 --- a/devtools/startup/DevToolsStartup.jsm +++ b/devtools/startup/DevToolsStartup.jsm @@ -1178,6 +1178,7 @@ const JsonView = { const filename = chrome.getDefaultFileName(undefined, uri, doc, null); chrome.internalSave( message.data, + null /* originalURL */, null, filename, null, diff --git a/toolkit/components/downloads/DownloadCore.jsm b/toolkit/components/downloads/DownloadCore.jsm index 5504c3cc3c33a..5292828f593a1 100644 --- a/toolkit/components/downloads/DownloadCore.jsm +++ b/toolkit/components/downloads/DownloadCore.jsm @@ -1437,6 +1437,11 @@ DownloadSource.prototype = { */ url: null,
+ /** + * String containing the original URL for the download source. + */ + originalUrl: null, + /** * Indicates whether the download originated from a private window. This * determines the context of the network request that is made to retrieve the @@ -1598,6 +1603,9 @@ DownloadSource.fromSerializable = function(aSerializable) { source[propName] = aSerializable[propName]; } } + if ("originalUrl" in aSerializable) { + source.originalUrl = aSerializable.originalUrl; + } if ("referrerInfo" in aSerializable) { // Quick pass, pass directly nsIReferrerInfo, we don't need to serialize // and deserialize @@ -1647,6 +1655,7 @@ DownloadSource.fromSerializable = function(aSerializable) { aSerializable, property => property != "url" && + property != "originalUrl" && property != "isPrivate" && property != "referrerInfo" && property != "cookieJarSettings" && diff --git a/toolkit/components/downloads/DownloadLegacy.jsm b/toolkit/components/downloads/DownloadLegacy.jsm index 6688ad7b172e3..14b9b8b8780fd 100644 --- a/toolkit/components/downloads/DownloadLegacy.jsm +++ b/toolkit/components/downloads/DownloadLegacy.jsm @@ -265,6 +265,7 @@ DownloadLegacyTransfer.prototype = { // nsITransfer init: function DLT_init( aSource, + aSourceOriginalURI, aTarget, aDisplayName, aMIMEInfo, @@ -277,6 +278,7 @@ DownloadLegacyTransfer.prototype = { ) { return this._nsITransferInitInternal( aSource, + aSourceOriginalURI, aTarget, aDisplayName, aMIMEInfo, @@ -315,6 +317,7 @@ DownloadLegacyTransfer.prototype = { } return this._nsITransferInitInternal( aSource, + null, aTarget, aDisplayName, aMIMEInfo, @@ -333,6 +336,7 @@ DownloadLegacyTransfer.prototype = {
_nsITransferInitInternal( aSource, + aSourceOriginalURI, aTarget, aDisplayName, aMIMEInfo, @@ -377,6 +381,7 @@ DownloadLegacyTransfer.prototype = { let serialisedDownload = { source: { url: aSource.spec, + originalUrl: aSourceOriginalURI && aSourceOriginalURI.spec, isPrivate, userContextId, browsingContextId, diff --git a/toolkit/components/downloads/test/unit/head.js b/toolkit/components/downloads/test/unit/head.js index f920c80a47d50..dfdded11a879a 100644 --- a/toolkit/components/downloads/test/unit/head.js +++ b/toolkit/components/downloads/test/unit/head.js @@ -368,6 +368,7 @@ function promiseStartLegacyDownload(aSourceUrl, aOptions) { // the Download object to be created and added to the public downloads. transfer.init( sourceURI, + null, NetUtil.newURI(targetFile), null, mimeInfo, diff --git a/toolkit/components/pdfjs/content/PdfStreamConverter.jsm b/toolkit/components/pdfjs/content/PdfStreamConverter.jsm index 46ad896b51bd0..95cfb24eaecf2 100644 --- a/toolkit/components/pdfjs/content/PdfStreamConverter.jsm +++ b/toolkit/components/pdfjs/content/PdfStreamConverter.jsm @@ -353,6 +353,7 @@ class ChromeActions { let actor = getActor(this.domWindow); actor.sendAsyncMessage("PDFJS:Parent:saveURL", { blobUrl, + originalUrl, filename, }); } diff --git a/toolkit/components/pdfjs/content/PdfjsParent.jsm b/toolkit/components/pdfjs/content/PdfjsParent.jsm index ee58a0b709e68..961285217003a 100644 --- a/toolkit/components/pdfjs/content/PdfjsParent.jsm +++ b/toolkit/components/pdfjs/content/PdfjsParent.jsm @@ -99,6 +99,7 @@ class PdfjsParent extends JSWindowActorParent { const data = aMsg.data; this.browser.ownerGlobal.saveURL( data.blobUrl /* aURL */, + data.originalUrl /* aOriginalURL */, data.filename /* aFileName */, null /* aFilePickerTitleKey */, true /* aShouldBypassCache */, diff --git a/toolkit/components/pdfjs/test/browser_pdfjs_download_button.js b/toolkit/components/pdfjs/test/browser_pdfjs_download_button.js index 44bb8068bfd6c..5f21b241a223a 100644 --- a/toolkit/components/pdfjs/test/browser_pdfjs_download_button.js +++ b/toolkit/components/pdfjs/test/browser_pdfjs_download_button.js @@ -99,13 +99,22 @@ add_task(async function test_downloading_pdf_nonprivate_window() { "Check the download panel state is 'open'" ); downloadList = await Downloads.getList(Downloads.PUBLIC); - let currentDownloadCount = (await downloadList.getAll()).length; + const allDownloads = await downloadList.getAll(); + let currentDownloadCount = allDownloads.length; is( currentDownloadCount, initialDownloadCount + 1, "A download was added when we clicked download" );
+ const dl = allDownloads.find(dl => dl.source.originalUrl === pdfUrl); + ok(!!dl, "The pdf download has the correct url in source.originalUrl"); + + SpecialPowers.clipboardCopyString(""); + DownloadsCommon.copyDownloadLink(dl); + const copiedUrl = SpecialPowers.getClipboardData("text/unicode"); + is(copiedUrl, pdfUrl, "The copied url must be the original one"); + is( gBrowser.tabs.length, tabCount, diff --git a/toolkit/content/contentAreaUtils.js b/toolkit/content/contentAreaUtils.js index dd57520d8478f..68905b0a8e8d4 100644 --- a/toolkit/content/contentAreaUtils.js +++ b/toolkit/content/contentAreaUtils.js @@ -71,6 +71,7 @@ function urlSecurityCheck( // function saveURL( aURL, + aOriginalURL, aFileName, aFilePickerTitleKey, aShouldBypassCache, @@ -83,6 +84,7 @@ function saveURL( ) { internalSave( aURL, + aOriginalURL, null, aFileName, null, @@ -122,6 +124,7 @@ function saveBrowser(aBrowser, aSkipPrompt, aBrowsingContext = null) {
internalSave( document.documentURI, + null, // originalURL document, null, // file name document.contentDisposition, @@ -214,6 +217,9 @@ XPCOMUtils.defineConstant(this, "kSaveAsType_Text", kSaveAsType_Text); * * @param aURL * The String representation of the URL of the document being saved + * @param aOriginalURL + * The String representation of the original URL of the document being + * saved. It can useful in case aURL is a blob. * @param aDocument * The document to be saved * @param aDefaultFileName @@ -256,6 +262,7 @@ XPCOMUtils.defineConstant(this, "kSaveAsType_Text", kSaveAsType_Text); */ function internalSave( aURL, + aOriginalURL, aDocument, aDefaultFileName, aContentDisposition, @@ -368,8 +375,11 @@ function internalSave( (aDocument && (aDocument.nodePrincipal || aDocument.principal)) || (aInitiatingDocument && aInitiatingDocument.nodePrincipal);
+ let sourceOriginalURI = aOriginalURL ? makeURI(aOriginalURL) : null; + var persistArgs = { sourceURI, + sourceOriginalURI, sourcePrincipal, sourceReferrerInfo: aReferrerInfo, sourceDocument: useSaveDocument ? aDocument : null, @@ -447,6 +457,7 @@ function internalPersist(persistArgs) { var tr = Cc["@mozilla.org/transfer;1"].createInstance(Ci.nsITransfer); tr.init( persistArgs.sourceURI, + persistArgs.sourceOriginalURI, targetFileURL, "", null, diff --git a/toolkit/content/tests/browser/browser_saveImageURL.js b/toolkit/content/tests/browser/browser_saveImageURL.js index 764e7e9aa593f..e72cebf22b96f 100644 --- a/toolkit/content/tests/browser/browser_saveImageURL.js +++ b/toolkit/content/tests/browser/browser_saveImageURL.js @@ -40,6 +40,7 @@ add_task(async function preferred_API() { let filePickerPromise = waitForFilePicker(); internalSave( url, + null, // originalURL null, // document "image.jpg", null, // content disposition diff --git a/toolkit/content/tests/browser/browser_save_resend_postdata.js b/toolkit/content/tests/browser/browser_save_resend_postdata.js index c519c19880885..de28c3c729cdc 100644 --- a/toolkit/content/tests/browser/browser_save_resend_postdata.js +++ b/toolkit/content/tests/browser/browser_save_resend_postdata.js @@ -77,6 +77,7 @@ function test() { // cache. internalSave( docToSave.location.href, + null, docToSave, null, null, diff --git a/uriloader/base/nsITransfer.idl b/uriloader/base/nsITransfer.idl index 7d2a20f50939a..ba701c982d7a0 100644 --- a/uriloader/base/nsITransfer.idl +++ b/uriloader/base/nsITransfer.idl @@ -27,6 +27,9 @@ interface nsITransfer : nsIWebProgressListener2 { * * @param aSource The source URI of the transfer. Must not be null. * + * @param aSourceOriginalURI The original URI of the transfer in case + * aSource is a blob URL. Can be null. + * * @param aTarget The target URI of the transfer. Must not be null. * * @param aDisplayName The user-readable description of the transfer. @@ -62,6 +65,7 @@ interface nsITransfer : nsIWebProgressListener2 { * @param aReferrerInfo The Referrer this download is started with */ void init(in nsIURI aSource, + in nsIURI aSourceOriginalURI, in nsIURI aTarget, in AString aDisplayName, in nsIMIMEInfo aMIMEInfo, diff --git a/uriloader/exthandler/nsExternalHelperAppService.cpp b/uriloader/exthandler/nsExternalHelperAppService.cpp index 41e1272f0c604..adb05b3c46b85 100644 --- a/uriloader/exthandler/nsExternalHelperAppService.cpp +++ b/uriloader/exthandler/nsExternalHelperAppService.cpp @@ -2354,7 +2354,7 @@ nsresult nsExternalAppHandler::CreateTransfer() { mDownloadClassification, referrerInfo, mBrowsingContext, mHandleInternally, nullptr); } else { - rv = transfer->Init(mSourceUrl, target, u""_ns, mMimeInfo, + rv = transfer->Init(mSourceUrl, nullptr, target, u""_ns, mMimeInfo, mTimeDownloadStarted, mTempFile, this, channel && NS_UsePrivateBrowsing(channel), mDownloadClassification, referrerInfo); @@ -2446,7 +2446,7 @@ nsresult nsExternalAppHandler::CreateFailedTransfer() { mDownloadClassification, referrerInfo, mBrowsingContext, mHandleInternally, httpChannel); } else { - rv = transfer->Init(mSourceUrl, pseudoTarget, u""_ns, mMimeInfo, + rv = transfer->Init(mSourceUrl, nullptr, pseudoTarget, u""_ns, mMimeInfo, mTimeDownloadStarted, mTempFile, this, channel && NS_UsePrivateBrowsing(channel), mDownloadClassification, referrerInfo);
This is an automated email from the git hooks/post-receive script.
richard pushed a commit to branch geckoview-102.3.0esr-12.0-1 in repository tor-browser.
commit 2c8bd7596866106d17260f75a5a9480f52ddd207 Author: Neil Deakin neil@mozilla.com AuthorDate: Mon Jun 6 22:23:58 2022 +0000
Bug 1761265, don't show the downloads panel when a download was started by user action that they expect will save the file, r=mhowell,kershaw a=RyanVM
The download panel should still appear when clicking on download links or those with content-disposition: attachment
Differential Revision: https://phabricator.services.mozilla.com/D147875 --- .../components/downloads/test/browser/browser.ini | 1 + .../browser/browser_downloads_panel_dontshow.js | 126 +++++++++++++++++++++ dom/webbrowserpersist/nsWebBrowserPersist.cpp | 3 + netwerk/base/LoadInfo.cpp | 14 +++ netwerk/base/LoadInfo.h | 1 + netwerk/base/TRRLoadInfo.cpp | 10 ++ netwerk/base/nsILoadInfo.idl | 6 + toolkit/components/downloads/DownloadCore.jsm | 9 ++ .../pdfjs/test/browser_pdfjs_download_button.js | 31 +++-- 9 files changed, 190 insertions(+), 11 deletions(-)
diff --git a/browser/components/downloads/test/browser/browser.ini b/browser/components/downloads/test/browser/browser.ini index 35d3d9a486f8b..f803f34daa988 100644 --- a/browser/components/downloads/test/browser/browser.ini +++ b/browser/components/downloads/test/browser/browser.ini @@ -45,6 +45,7 @@ skip-if = support-files = foo.txt foo.txt^headers^ +[browser_downloads_panel_dontshow.js] [browser_downloads_panel_height.js] [browser_downloads_panel_opens.js] [browser_downloads_autohide.js] diff --git a/browser/components/downloads/test/browser/browser_downloads_panel_dontshow.js b/browser/components/downloads/test/browser/browser_downloads_panel_dontshow.js new file mode 100644 index 0000000000000..b6de758723907 --- /dev/null +++ b/browser/components/downloads/test/browser/browser_downloads_panel_dontshow.js @@ -0,0 +1,126 @@ +// This test verifies that the download panel opens when a +// download occurs but not when a user manually saves a page. + +let MockFilePicker = SpecialPowers.MockFilePicker; +MockFilePicker.init(window); + +async function promiseDownloadFinished(list) { + return new Promise(resolve => { + list.addView({ + onDownloadChanged(download) { + download.launchWhenSucceeded = false; + if (download.succeeded || download.error) { + list.removeView(this); + resolve(download); + } + }, + }); + }); +} + +function openTestPage() { + return BrowserTestUtils.openNewForegroundTab( + gBrowser, + `https://www.example.com/document-builder.sjs?html= + <html><body> + <a id='normallink' href='https://www.example.com'>Link1</a> + <a id='downloadlink' href='https://www.example.com' download='file.txt'>Link2</a> + </body</html> + ` + ); +} + +add_task(async function download_saveas_file() { + let tab = await openTestPage(); + + for (let testname of ["save link", "save page"]) { + if (testname == "save link") { + let menu = document.getElementById("contentAreaContextMenu"); + let popupShown = BrowserTestUtils.waitForEvent(menu, "popupshown"); + BrowserTestUtils.synthesizeMouse( + "#normallink", + 5, + 5, + { type: "contextmenu", button: 2 }, + gBrowser.selectedBrowser + ); + await popupShown; + } + + let list = await Downloads.getList(Downloads.PUBLIC); + let downloadFinishedPromise = promiseDownloadFinished(list); + + let saveFile = Services.dirsvc.get("TmpD", Ci.nsIFile); + saveFile.append("testsavedir"); + if (!saveFile.exists()) { + saveFile.create(Ci.nsIFile.DIRECTORY_TYPE, 0o755); + } + + await new Promise(resolve => { + MockFilePicker.showCallback = function(fp) { + saveFile.append("sample"); + MockFilePicker.setFiles([saveFile]); + setTimeout(() => { + resolve(fp.defaultString); + }, 0); + return Ci.nsIFilePicker.returnOK; + }; + + if (testname == "save link") { + let menu = document.getElementById("contentAreaContextMenu"); + let menuitem = document.getElementById("context-savelink"); + menu.activateItem(menuitem); + } else if (testname == "save page") { + document.getElementById("Browser:SavePage").doCommand(); + } + }); + + await downloadFinishedPromise; + is( + DownloadsPanel.panel.state, + "closed", + "downloads panel closed after download link after " + testname + ); + } + + await task_resetState(); + + MockFilePicker.cleanup(); + BrowserTestUtils.removeTab(tab); +}); + +add_task(async function download_link() { + let tab = await openTestPage(); + + let list = await Downloads.getList(Downloads.PUBLIC); + let downloadFinishedPromise = promiseDownloadFinished(list); + + let panelOpenedPromise = promisePanelOpened(); + + BrowserTestUtils.synthesizeMouse( + "#downloadlink", + 5, + 5, + {}, + gBrowser.selectedBrowser + ); + + let download = await downloadFinishedPromise; + await panelOpenedPromise; + + is( + DownloadsPanel.panel.state, + "open", + "downloads panel open after download link clicked" + ); + + DownloadsPanel.hidePanel(); + + await task_resetState(); + + BrowserTestUtils.removeTab(tab); + + try { + await IOUtils.remove(download.target.path); + } catch (ex) {} +}); diff --git a/dom/webbrowserpersist/nsWebBrowserPersist.cpp b/dom/webbrowserpersist/nsWebBrowserPersist.cpp index f2c2ebf588408..7f304a77e8489 100644 --- a/dom/webbrowserpersist/nsWebBrowserPersist.cpp +++ b/dom/webbrowserpersist/nsWebBrowserPersist.cpp @@ -1377,6 +1377,9 @@ nsresult nsWebBrowserPersist::SaveURIInternal( } }
+ nsCOMPtr<nsILoadInfo> loadInfo = inputChannel->LoadInfo(); + loadInfo->SetIsUserTriggeredSave(true); + // Set the referrer, post data and headers if any nsCOMPtr<nsIHttpChannel> httpChannel(do_QueryInterface(inputChannel)); if (httpChannel) { diff --git a/netwerk/base/LoadInfo.cpp b/netwerk/base/LoadInfo.cpp index c70ae05224c37..5f5f9d0514768 100644 --- a/netwerk/base/LoadInfo.cpp +++ b/netwerk/base/LoadInfo.cpp @@ -1800,6 +1800,20 @@ LoadInfo::SetAllowDeprecatedSystemRequests( return NS_OK; }
+NS_IMETHODIMP +LoadInfo::GetIsUserTriggeredSave(bool* aIsUserTriggeredSave) { + *aIsUserTriggeredSave = + mIsUserTriggeredSave || + mInternalContentPolicyType == nsIContentPolicy::TYPE_SAVEAS_DOWNLOAD; + return NS_OK; +} + +NS_IMETHODIMP +LoadInfo::SetIsUserTriggeredSave(bool aIsUserTriggeredSave) { + mIsUserTriggeredSave = aIsUserTriggeredSave; + return NS_OK; +} + NS_IMETHODIMP LoadInfo::GetIsInDevToolsContext(bool* aIsInDevToolsContext) { *aIsInDevToolsContext = mIsInDevToolsContext; diff --git a/netwerk/base/LoadInfo.h b/netwerk/base/LoadInfo.h index 6452948b199c1..a1624592d20dc 100644 --- a/netwerk/base/LoadInfo.h +++ b/netwerk/base/LoadInfo.h @@ -330,6 +330,7 @@ class LoadInfo final : public nsILoadInfo { uint32_t mHttpsOnlyStatus = nsILoadInfo::HTTPS_ONLY_UNINITIALIZED; bool mHasValidUserGestureActivation = false; bool mAllowDeprecatedSystemRequests = false; + bool mIsUserTriggeredSave = false; bool mIsInDevToolsContext = false; bool mParserCreatedScript = false; nsILoadInfo::StoragePermissionState mStoragePermission = diff --git a/netwerk/base/TRRLoadInfo.cpp b/netwerk/base/TRRLoadInfo.cpp index 7ef044cb25171..05a8878a3f26a 100644 --- a/netwerk/base/TRRLoadInfo.cpp +++ b/netwerk/base/TRRLoadInfo.cpp @@ -698,6 +698,16 @@ TRRLoadInfo::SetAllowDeprecatedSystemRequests( return NS_ERROR_NOT_IMPLEMENTED; }
+NS_IMETHODIMP +TRRLoadInfo::GetIsUserTriggeredSave(bool* aIsUserTriggeredSave) { + return NS_ERROR_NOT_IMPLEMENTED; +} + +NS_IMETHODIMP +TRRLoadInfo::SetIsUserTriggeredSave(bool aIsUserTriggeredSave) { + return NS_ERROR_NOT_IMPLEMENTED; +} + NS_IMETHODIMP TRRLoadInfo::GetIsInDevToolsContext(bool* aIsInDevToolsContext) { return NS_ERROR_NOT_IMPLEMENTED; diff --git a/netwerk/base/nsILoadInfo.idl b/netwerk/base/nsILoadInfo.idl index 0a7d0c66fb3e5..85ba879702980 100644 --- a/netwerk/base/nsILoadInfo.idl +++ b/netwerk/base/nsILoadInfo.idl @@ -510,6 +510,12 @@ interface nsILoadInfo : nsISupports */ [infallible] attribute boolean parserCreatedScript;
+ /** + * True if this request is known to have been triggered by a user + * manually requesting the URI to be saved. + */ + [infallible] attribute boolean isUserTriggeredSave; + /** * True if this request is from DevTools. */ diff --git a/toolkit/components/downloads/DownloadCore.jsm b/toolkit/components/downloads/DownloadCore.jsm index 5292828f593a1..20771432cd47d 100644 --- a/toolkit/components/downloads/DownloadCore.jsm +++ b/toolkit/components/downloads/DownloadCore.jsm @@ -2865,6 +2865,15 @@ DownloadLegacySaver.prototype = { this.download.source.referrerInfo = aRequest.referrerInfo; }
+ // Don't open the download panel when the user initiated to save a + // link or document. + if ( + aRequest instanceof Ci.nsIChannel && + aRequest.loadInfo.isUserTriggeredSave + ) { + this.download.openDownloadsListOnStart = false; + } + this.addToHistory(); },
diff --git a/toolkit/components/pdfjs/test/browser_pdfjs_download_button.js b/toolkit/components/pdfjs/test/browser_pdfjs_download_button.js index 5f21b241a223a..b0040a71941f6 100644 --- a/toolkit/components/pdfjs/test/browser_pdfjs_download_button.js +++ b/toolkit/components/pdfjs/test/browser_pdfjs_download_button.js @@ -12,6 +12,20 @@ MockFilePicker.returnValue = MockFilePicker.returnOK;
var tempDir;
+async function promiseDownloadFinished(list) { + return new Promise(resolve => { + list.addView({ + onDownloadChanged(download) { + download.launchWhenSucceeded = false; + if (download.succeeded || download.error) { + list.removeView(this); + resolve(download); + } + }, + }); + }); +} + function createPromiseForFilePicker() { return new Promise(resolve => { MockFilePicker.showCallback = fp => { @@ -77,10 +91,7 @@ add_task(async function test_downloading_pdf_nonprivate_window() {
let filePickerShown = createPromiseForFilePicker();
- let downloadsPanelPromise = BrowserTestUtils.waitForEvent( - DownloadsPanel.panel, - "popupshown" - ); + let downloadFinishedPromise = promiseDownloadFinished(downloadList);
info("Clicking on the download button..."); await SpecialPowers.spawn(browser, [], () => { @@ -89,14 +100,13 @@ add_task(async function test_downloading_pdf_nonprivate_window() { info("Waiting for a filename to be picked from the file picker"); await filePickerShown;
- // check that resulted in a download being added to the list - // and the dl panel opened - info("Waiting for download panel to open when the download is complete"); - await downloadsPanelPromise; + // check that resulted in a download being added to the list. The + // download panel should not open. + await downloadFinishedPromise; is( DownloadsPanel.panel.state, - "open", - "Check the download panel state is 'open'" + "closed", + "Check the download panel state is 'closed'" ); downloadList = await Downloads.getList(Downloads.PUBLIC); const allDownloads = await downloadList.getAll(); @@ -120,7 +130,6 @@ add_task(async function test_downloading_pdf_nonprivate_window() { tabCount, "No new tab was opened to view the downloaded PDF" ); - await closeDownloadsPanel(); } ); });
This is an automated email from the git hooks/post-receive script.
richard pushed a commit to branch geckoview-102.3.0esr-12.0-1 in repository tor-browser.
commit 226da410d935623597a0b535222d4386031b1610 Author: Shane Hughes shmediaproductions@gmail.com AuthorDate: Mon Jul 18 20:45:41 2022 +0000
Bug 1739348 - Don't open downloads panel after download dialogs. r=NeilDeakin, a=RyanVM
This is a medium sized patch to legacy download construction. It takes advantage of the new property added in Bug 1762033 to prevent the downloads panel from being automatically shown when a download is added after an interaction with the unknown content type dialog or the file picker dialog. I chose to not do the same for failed transfers since I thought it might serve some use, but that might be wrong. I don't know if there's a way to test the dialog that appears when you download an executable without going through the same path I adjusted with the patch. It seems like it's covered but I could be wrong. Also add a test to cover these changes from the bottom up. Thanks and apologies for my sloppy C++, though I'm sure I'll learn a lot more from the review 😅
Differential Revision: https://phabricator.services.mozilla.com/D145312 --- browser/components/downloads/DownloadsCommon.jsm | 14 +- .../components/downloads/test/browser/browser.ini | 5 + .../test/browser/browser_downloads_panel_opens.js | 236 ++++++++++++++++++++- .../downloads/test/browser/browser_tempfilename.js | 38 +++- toolkit/components/downloads/DownloadLegacy.jsm | 10 +- .../pdfjs/test/browser_pdfjs_download_button.js | 43 +--- toolkit/mozapps/downloads/HelperAppDlg.jsm | 3 +- uriloader/base/nsITransfer.idl | 9 +- .../exthandler/nsExternalHelperAppService.cpp | 27 ++- uriloader/exthandler/nsExternalHelperAppService.h | 8 +- .../exthandler/nsIExternalHelperAppService.idl | 5 +- .../browser_open_internal_choice_persistence.js | 4 +- 12 files changed, 344 insertions(+), 58 deletions(-)
diff --git a/browser/components/downloads/DownloadsCommon.jsm b/browser/components/downloads/DownloadsCommon.jsm index 422be505a3156..11e119a0155ea 100644 --- a/browser/components/downloads/DownloadsCommon.jsm +++ b/browser/components/downloads/DownloadsCommon.jsm @@ -1003,14 +1003,18 @@ DownloadsDataCtor.prototype = { browserWin == Services.focus.activeWindow && gAlwaysOpenPanel;
+ // For new downloads after the first one, don't show the panel + // automatically, but provide a visible notification in the topmost browser + // window, if the status indicator is already visible. Also ensure that if + // openDownloadsListOnStart = false is passed, we always skip opening the + // panel. That's because this will only be passed if the download is started + // without user interaction or if a dialog was previously opened in the + // process of the download (e.g. unknown content type dialog). if ( - this.panelHasShownBefore && aType != "error" && - !shouldOpenDownloadsPanel + ((this.panelHasShownBefore && !shouldOpenDownloadsPanel) || + !openDownloadsListOnStart) ) { - // For new downloads after the first one, don't show the panel - // automatically, but provide a visible notification in the topmost - // browser window, if the status indicator is already visible. DownloadsCommon.log("Showing new download notification."); browserWin.DownloadsIndicatorView.showEventNotification(aType); return; diff --git a/browser/components/downloads/test/browser/browser.ini b/browser/components/downloads/test/browser/browser.ini index f803f34daa988..6098bd3caa7c6 100644 --- a/browser/components/downloads/test/browser/browser.ini +++ b/browser/components/downloads/test/browser/browser.ini @@ -48,6 +48,11 @@ support-files = [browser_downloads_panel_dontshow.js] [browser_downloads_panel_height.js] [browser_downloads_panel_opens.js] +skip-if = + os == "linux" && verify && !debug # For some reason linux opt verify builds time out. +support-files = + foo.txt + foo.txt^headers^ [browser_downloads_autohide.js] [browser_go_to_download_page.js] [browser_pdfjs_preview.js] diff --git a/browser/components/downloads/test/browser/browser_downloads_panel_opens.js b/browser/components/downloads/test/browser/browser_downloads_panel_opens.js index e56b24fd0e3bf..fb1e6f76dabb9 100644 --- a/browser/components/downloads/test/browser/browser_downloads_panel_opens.js +++ b/browser/components/downloads/test/browser/browser_downloads_panel_opens.js @@ -1,6 +1,10 @@ /* Any copyright is dedicated to the Public Domain. * http://creativecommons.org/publicdomain/zero/1.0/ */
+let { MockFilePicker } = SpecialPowers; +MockFilePicker.init(window); +registerCleanupFunction(() => MockFilePicker.cleanup()); + /** * Check that the downloads panel opens when a download is spoofed. */ @@ -85,6 +89,175 @@ function clickCheckbox(checkbox) { checkbox.parentElement.hidePopup(); }
+/** + * Test that the downloads panel correctly opens or doesn't open based on + * whether the download triggered a dialog already. If askWhereToSave is true, + * we should get a file picker dialog. If preferredAction is alwaysAsk, we + * should get an unknown content type dialog. If neither of those is true, we + * should get no dialog at all, and expect the downloads panel to open. + * @param {boolean} [expectPanelToOpen] true - fail if panel doesn't open + * false (default) - fail if it opens + * @param {number} [preferredAction] Default download action: + * 0 (default) - save download to disk + * 1 - open UCT dialog first + * @param {boolean} [askWhereToSave] true - open file picker dialog + * false (default) - use download dir + */ +async function testDownloadsPanelAfterDialog({ + expectPanelToOpen = false, + preferredAction, + askWhereToSave = false, +} = {}) { + const { saveToDisk, alwaysAsk } = Ci.nsIHandlerInfo; + if (![saveToDisk, alwaysAsk].includes(preferredAction)) { + preferredAction = saveToDisk; + } + const openUCT = preferredAction === alwaysAsk; + const TEST_PATH = getRootDirectory(gTestPath).replace( + "chrome://mochitests/content", + "https://example.com" + ); + const MimeSvc = Cc["@mozilla.org/mime;1"].getService(Ci.nsIMIMEService); + const HandlerSvc = Cc["@mozilla.org/uriloader/handler-service;1"].getService( + Ci.nsIHandlerService + ); + let publicList = await Downloads.getList(Downloads.PUBLIC); + + for (let download of await publicList.getAll()) { + await publicList.remove(download); + } + + // We need to test the changes from bug 1739348, where the helper app service + // sets a flag based on whether a file picker dialog was opened, and this flag + // determines whether the downloads panel will be opened as the download + // starts. We need to actually hit "Save" for the download to start, but we + // can't interact with the real file picker dialog. So this temporarily + // replaces it with a barebones component that plugs into the helper app + // service and tells it to start saving the file to the default path. + if (askWhereToSave) { + MockFilePicker.returnValue = MockFilePicker.returnOK; + MockFilePicker.showCallback = function(fp) { + // Get the default location from the helper app service. + let testFile = MockFilePicker.displayDirectory.clone(); + testFile.append(fp.defaultString); + info("File picker download path: " + testFile.path); + MockFilePicker.setFiles([testFile]); + MockFilePicker.filterIndex = 0; // kSaveAsType_Complete + MockFilePicker.showCallback = null; + // Confirm that saving should proceed. The helper app service uses this + // value to determine whether to invoke launcher.saveDestinationAvailable + return MockFilePicker.returnOK; + }; + } + + await SpecialPowers.pushPrefEnv({ + set: [ + ["browser.download.useDownloadDir", !askWhereToSave], + ["browser.download.always_ask_before_handling_new_types", openUCT], + ["browser.download.improvements_to_download_panel", true], + ["security.dialog_enable_delay", 0], + ], + }); + + // Configure the handler for the file according to parameters. + let mimeInfo = MimeSvc.getFromTypeAndExtension("text/plain", "txt"); + let existed = HandlerSvc.exists(mimeInfo); + mimeInfo.alwaysAskBeforeHandling = openUCT; + mimeInfo.preferredAction = preferredAction; + HandlerSvc.store(mimeInfo); + registerCleanupFunction(async () => { + // Reset the handler to its original state. + if (existed) { + HandlerSvc.store(mimeInfo); + } else { + HandlerSvc.remove(mimeInfo); + } + await publicList.removeFinished(); + BrowserTestUtils.removeTab(loadingTab); + }); + + let dialogWindowPromise = BrowserTestUtils.domWindowOpenedAndLoaded(); + let downloadFinishedPromise = new Promise(resolve => { + publicList.addView({ + onDownloadChanged(download) { + info("Download changed!"); + if (download.succeeded || download.error) { + info("Download succeeded or failed."); + publicList.removeView(this); + resolve(download); + } + }, + }); + }); + let panelOpenedPromise = expectPanelToOpen ? promisePanelOpened() : null; + + // Open the tab that will trigger the download. + let loadingTab = await BrowserTestUtils.openNewForegroundTab({ + gBrowser, + opening: TEST_PATH + "foo.txt", + waitForLoad: false, + waitForStateStop: true, + }); + + // Wait for a UCT dialog if the handler was set up to open one. + if (openUCT) { + let dialogWindow = await dialogWindowPromise; + is( + dialogWindow.location.href, + "chrome://mozapps/content/downloads/unknownContentType.xhtml", + "Should have seen the unknown content dialogWindow." + ); + let doc = dialogWindow.document; + let dialog = doc.getElementById("unknownContentType"); + let radio = doc.getElementById("save"); + let button = dialog.getButton("accept"); + + await TestUtils.waitForCondition( + () => !button.disabled, + "Waiting for the UCT dialog's Accept button to be enabled." + ); + ok(!radio.hidden, "The Save option should be visible"); + // Make sure we aren't opening the file. + radio.click(); + ok(radio.selected, "The Save option should be selected"); + button.disabled = false; + dialog.acceptDialog(); + } + + info("Waiting for download to finish."); + let download = await downloadFinishedPromise; + ok(!download.error, "There should be no error."); + is( + DownloadsPanel.isPanelShowing, + expectPanelToOpen, + `Panel should${expectPanelToOpen ? " " : " not "}be showing.` + ); + if (DownloadsPanel.isPanelShowing) { + await panelOpenedPromise; + let hiddenPromise = BrowserTestUtils.waitForPopupEvent( + DownloadsPanel.panel, + "hidden" + ); + DownloadsPanel.hidePanel(); + await hiddenPromise; + } + if (download?.target.exists) { + try { + info("Removing test file: " + download.target.path); + if (Services.appinfo.OS === "WINNT") { + await IOUtils.setPermissions(download.target.path, 0o600); + } + await IOUtils.remove(download.target.path); + } catch (ex) { + /* ignore */ + } + } + for (let dl of await publicList.getAll()) { + await publicList.remove(dl); + } + BrowserTestUtils.removeTab(loadingTab); +} + /** * Make sure the downloads panel opens automatically with a new download. */ @@ -93,6 +266,7 @@ add_task(async function test_downloads_panel_opens() { set: [ ["browser.download.improvements_to_download_panel", true], ["browser.download.always_ask_before_handling_new_types", false], + ["browser.download.alwaysOpenPanel", true], ], }); await checkPanelOpens(); @@ -103,6 +277,7 @@ add_task(async function test_customizemode_doesnt_wreck_things() { set: [ ["browser.download.improvements_to_download_panel", true], ["browser.download.always_ask_before_handling_new_types", false], + ["browser.download.alwaysOpenPanel", true], ], });
@@ -114,7 +289,7 @@ add_task(async function test_customizemode_doesnt_wreck_things() { gCustomizeMode.enter(); await customizationReadyPromise;
- info("try to open the panel (will not work, in customize mode)"); + info("Try to open the panel (will not work, in customize mode)"); let promise = promisePanelOpened(); DownloadsCommon.getData(window)._notifyDownloadEvent("start"); await TestUtils.waitForCondition( @@ -134,10 +309,16 @@ add_task(async function test_customizemode_doesnt_wreck_things() { gCustomizeMode.exit(); await afterCustomizationPromise;
+ // Avoid a failure on Linux where the window isn't active for some reason, + // which prevents the window's downloads panel from opening. + if (Services.focus.activeWindow != window) { + info("Main window is not active, trying to focus."); + await SimpleTest.promiseFocus(window); + is(Services.focus.activeWindow, window, "Main window should be active."); + } DownloadsCommon.getData(window)._notifyDownloadEvent("start"); - is( - DownloadsPanel.isPanelShowing, - true, + await TestUtils.waitForCondition( + () => DownloadsPanel.isPanelShowing, "Panel state should indicate a preparation to be opened" ); await promise; @@ -456,3 +637,50 @@ add_task(async function test_alwaysOpenPanel_menuitem() {
await checkPanelOpens(); }); + +/** + * Verify that the downloads panel opens if the download did not open a file + * picker or UCT dialog + */ +add_task(async function test_downloads_panel_after_no_dialogs() { + await testDownloadsPanelAfterDialog({ expectPanelToOpen: true }); + ok(true, "Downloads panel opened because no dialogs were opened."); +}); + +/** + * Verify that the downloads panel doesn't open if the download opened an + * unknown content type dialog (e.g. action = always ask) + */ +add_task(async function test_downloads_panel_after_UCT_dialog() { + await testDownloadsPanelAfterDialog({ + expectPanelToOpen: false, + preferredAction: Ci.nsIHandlerInfo.alwaysAsk, + }); + ok(true, "Downloads panel suppressed after UCT dialog."); +}); + +/** + * Verify that the downloads panel doesn't open if the download opened a file + * picker dialog (e.g. useDownloadDir = false) + */ +add_task(async function test_downloads_panel_after_file_picker_dialog() { + await testDownloadsPanelAfterDialog({ + expectPanelToOpen: false, + preferredAction: Ci.nsIHandlerInfo.saveToDisk, + askWhereToSave: true, + }); + ok(true, "Downloads panel suppressed after file picker dialog."); +}); + +/** + * Verify that the downloads panel doesn't open if the download opened both + * dialogs (e.g. default action = always ask AND useDownloadDir = false) + */ +add_task(async function test_downloads_panel_after_both_dialogs() { + await testDownloadsPanelAfterDialog({ + expectPanelToOpen: false, + preferredAction: Ci.nsIHandlerInfo.alwaysAsk, + askWhereToSave: true, + }); + ok(true, "Downloads panel suppressed after UCT and file picker dialogs."); +}); diff --git a/browser/components/downloads/test/browser/browser_tempfilename.js b/browser/components/downloads/test/browser/browser_tempfilename.js index b995f078895f1..dcef4016a6fbe 100644 --- a/browser/components/downloads/test/browser/browser_tempfilename.js +++ b/browser/components/downloads/test/browser/browser_tempfilename.js @@ -16,6 +16,27 @@ add_task(async function test_tempfilename() { }; list.addView(view); }); + + await SpecialPowers.pushPrefEnv({ + set: [ + ["browser.download.improvements_to_download_panel", true], + ["browser.download.always_ask_before_handling_new_types", false], + ], + }); + + const MimeSvc = Cc["@mozilla.org/mime;1"].getService(Ci.nsIMIMEService); + const HandlerSvc = Cc["@mozilla.org/uriloader/handler-service;1"].getService( + Ci.nsIHandlerService + ); + let mimeInfo = MimeSvc.getFromTypeAndExtension( + HandlerSvc.getTypeFromExtension("txt"), + "txt" + ); + let existed = HandlerSvc.exists(mimeInfo); + mimeInfo.alwaysAskBeforeHandling = false; + mimeInfo.preferredAction = Ci.nsIHandlerInfo.saveToDisk; + HandlerSvc.store(mimeInfo); + serveInterruptibleAsDownload(); mustInterruptResponses(); await BrowserTestUtils.withNewTab( @@ -27,7 +48,21 @@ add_task(async function test_tempfilename() { }, async () => { let download = await downloadStarted; - registerCleanupFunction(() => download.finalize()); + registerCleanupFunction(async () => { + if (existed) { + HandlerSvc.store(mimeInfo); + } else { + HandlerSvc.remove(mimeInfo); + } + await download.finalize(true); + if (Services.appinfo.OS === "WINNT") { + // We need to make the file writable to delete it on Windows. + await IOUtils.setPermissions(download.target.path, 0o600); + } + await IOUtils.remove(download.target.path); + await download.finalize(); + await list.removeFinished(); + });
let { partFilePath } = download.target; Assert.stringContains( @@ -51,7 +86,6 @@ add_task(async function test_tempfilename() { !(await IOUtils.exists(download.target.partFilePath)), "Temp file should be gone." ); - await IOUtils.remove(download.target.path); } ); }); diff --git a/toolkit/components/downloads/DownloadLegacy.jsm b/toolkit/components/downloads/DownloadLegacy.jsm index 14b9b8b8780fd..7ff95b53190c6 100644 --- a/toolkit/components/downloads/DownloadLegacy.jsm +++ b/toolkit/components/downloads/DownloadLegacy.jsm @@ -274,7 +274,8 @@ DownloadLegacyTransfer.prototype = { aCancelable, aIsPrivate, aDownloadClassification, - aReferrerInfo + aReferrerInfo, + aOpenDownloadsListOnStart ) { return this._nsITransferInitInternal( aSource, @@ -287,7 +288,8 @@ DownloadLegacyTransfer.prototype = { aCancelable, aIsPrivate, aDownloadClassification, - aReferrerInfo + aReferrerInfo, + aOpenDownloadsListOnStart ); },
@@ -303,6 +305,7 @@ DownloadLegacyTransfer.prototype = { aIsPrivate, aDownloadClassification, aReferrerInfo, + aOpenDownloadsListOnStart, aBrowsingContext, aHandleInternally, aHttpChannel @@ -327,6 +330,7 @@ DownloadLegacyTransfer.prototype = { aIsPrivate, aDownloadClassification, aReferrerInfo, + aOpenDownloadsListOnStart, userContextId, browsingContextId, aHandleInternally, @@ -346,6 +350,7 @@ DownloadLegacyTransfer.prototype = { isPrivate, aDownloadClassification, referrerInfo, + openDownloadsListOnStart = true, userContextId = 0, browsingContextId = 0, handleInternally = false, @@ -397,6 +402,7 @@ DownloadLegacyTransfer.prototype = { contentType, launcherPath, handleInternally, + openDownloadsListOnStart, };
// In case the Download was classified as insecure/dangerous diff --git a/toolkit/components/pdfjs/test/browser_pdfjs_download_button.js b/toolkit/components/pdfjs/test/browser_pdfjs_download_button.js index b0040a71941f6..fa6b6d6c978a9 100644 --- a/toolkit/components/pdfjs/test/browser_pdfjs_download_button.js +++ b/toolkit/components/pdfjs/test/browser_pdfjs_download_button.js @@ -52,22 +52,6 @@ add_setup(async function() { }); });
-async function closeDownloadsPanel() { - if (DownloadsPanel.panel.state !== "closed") { - let hiddenPromise = BrowserTestUtils.waitForEvent( - DownloadsPanel.panel, - "popuphidden" - ); - DownloadsPanel.hidePanel(); - await hiddenPromise; - } - is( - DownloadsPanel.panel.state, - "closed", - "Check that the download panel is closed" - ); -} - /** * Check clicking the download button saves the file and doesn't open a new viewer */ @@ -75,7 +59,10 @@ add_task(async function test_downloading_pdf_nonprivate_window() { const pdfUrl = TESTROOT + "file_pdfjs_test.pdf";
await SpecialPowers.pushPrefEnv({ - set: [["browser.download.improvements_to_download_panel", true]], + set: [ + ["browser.download.improvements_to_download_panel", true], + ["browser.download.always_ask_before_handling_new_types", false], + ], });
await BrowserTestUtils.withNewTab( @@ -87,7 +74,6 @@ add_task(async function test_downloading_pdf_nonprivate_window() { info(`${tabCount} tabs are open at the start of the test`);
let downloadList = await Downloads.getList(Downloads.PUBLIC); - const initialDownloadCount = (await downloadList.getAll()).length;
let filePickerShown = createPromiseForFilePicker();
@@ -100,23 +86,16 @@ add_task(async function test_downloading_pdf_nonprivate_window() { info("Waiting for a filename to be picked from the file picker"); await filePickerShown;
- // check that resulted in a download being added to the list. The - // download panel should not open. await downloadFinishedPromise; - is( - DownloadsPanel.panel.state, - "closed", - "Check the download panel state is 'closed'" - ); - downloadList = await Downloads.getList(Downloads.PUBLIC); - const allDownloads = await downloadList.getAll(); - let currentDownloadCount = allDownloads.length; - is( - currentDownloadCount, - initialDownloadCount + 1, - "A download was added when we clicked download" + ok(true, "A download was added when we clicked download"); + + // See bug 1739348 - don't show panel for downloads that opened dialogs + ok( + !DownloadsPanel.isPanelShowing, + "The download panel did not open, since the file picker was shown already" );
+ const allDownloads = await downloadList.getAll(); const dl = allDownloads.find(dl => dl.source.originalUrl === pdfUrl); ok(!!dl, "The pdf download has the correct url in source.originalUrl");
diff --git a/toolkit/mozapps/downloads/HelperAppDlg.jsm b/toolkit/mozapps/downloads/HelperAppDlg.jsm index 325de51c0c5fe..0a5a4a460bf38 100644 --- a/toolkit/mozapps/downloads/HelperAppDlg.jsm +++ b/toolkit/mozapps/downloads/HelperAppDlg.jsm @@ -409,7 +409,8 @@ nsUnknownContentTypeDialog.prototype = { } } } - aLauncher.saveDestinationAvailable(result); + // Don't pop up the downloads panel redundantly. + aLauncher.saveDestinationAvailable(result, true); }); }); })().catch(Cu.reportError); diff --git a/uriloader/base/nsITransfer.idl b/uriloader/base/nsITransfer.idl index ba701c982d7a0..828e4c4a0f7bc 100644 --- a/uriloader/base/nsITransfer.idl +++ b/uriloader/base/nsITransfer.idl @@ -62,7 +62,12 @@ interface nsITransfer : nsIWebProgressListener2 { * * @param aDownloadClassification Indicates wheter the download is unwanted, * should be considered dangerous or insecure. + * * @param aReferrerInfo The Referrer this download is started with + * + * @param aOpenDownloadsListOnStart true (default) - Open downloads panel. + * false - Only show an icon indicator. + * This parameter is optional. */ void init(in nsIURI aSource, in nsIURI aSourceOriginalURI, @@ -74,7 +79,8 @@ interface nsITransfer : nsIWebProgressListener2 { in nsICancelable aCancelable, in boolean aIsPrivate, in long aDownloadClassification, - in nsIReferrerInfo aReferrerInfo); + in nsIReferrerInfo aReferrerInfo, + [optional] in boolean aOpenDownloadsListOnStart);
/** * Same as init, but allows for passing the browsingContext @@ -97,6 +103,7 @@ interface nsITransfer : nsIWebProgressListener2 { in boolean aIsPrivate, in long aDownloadClassification, in nsIReferrerInfo aReferrerInfo, + [optional] in boolean aOpenDownloadsListOnStart, in BrowsingContext aBrowsingContext, in boolean aHandleInternally, in nsIHttpChannel aHttpChannel); diff --git a/uriloader/exthandler/nsExternalHelperAppService.cpp b/uriloader/exthandler/nsExternalHelperAppService.cpp index adb05b3c46b85..f5b0e2e5bc95c 100644 --- a/uriloader/exthandler/nsExternalHelperAppService.cpp +++ b/uriloader/exthandler/nsExternalHelperAppService.cpp @@ -1280,6 +1280,7 @@ nsExternalAppHandler::nsExternalAppHandler( mIsFileChannel(false), mShouldCloseWindow(false), mHandleInternally(false), + mDialogShowing(false), mReason(aReason), mTempFileIsExecutable(false), mTimeDownloadStarted(0), @@ -1855,6 +1856,9 @@ NS_IMETHODIMP nsExternalAppHandler::OnStartRequest(nsIRequest* request) { // this will create a reference cycle (the dialog holds a reference to us as // nsIHelperAppLauncher), which will be broken in Cancel or CreateTransfer. nsCOMPtr<nsIInterfaceRequestor> dialogParent = GetDialogParent(); + // Don't pop up the downloads panel since we're already going to pop up the + // UCT dialog for basically the same effect. + mDialogShowing = true; rv = mDialog->Show(this, dialogParent, mReason);
// what do we do if the dialog failed? I guess we should call Cancel and @@ -2351,14 +2355,15 @@ nsresult nsExternalAppHandler::CreateTransfer() { rv = transfer->InitWithBrowsingContext( mSourceUrl, target, u""_ns, mMimeInfo, mTimeDownloadStarted, mTempFile, this, channel && NS_UsePrivateBrowsing(channel), - mDownloadClassification, referrerInfo, mBrowsingContext, - mHandleInternally, nullptr); + mDownloadClassification, referrerInfo, !mDialogShowing, + mBrowsingContext, mHandleInternally, nullptr); } else { rv = transfer->Init(mSourceUrl, nullptr, target, u""_ns, mMimeInfo, mTimeDownloadStarted, mTempFile, this, channel && NS_UsePrivateBrowsing(channel), - mDownloadClassification, referrerInfo); + mDownloadClassification, referrerInfo, !mDialogShowing); } + mDialogShowing = false;
NS_ENSURE_SUCCESS(rv, rv);
@@ -2443,13 +2448,13 @@ nsresult nsExternalAppHandler::CreateFailedTransfer() { rv = transfer->InitWithBrowsingContext( mSourceUrl, pseudoTarget, u""_ns, mMimeInfo, mTimeDownloadStarted, mTempFile, this, channel && NS_UsePrivateBrowsing(channel), - mDownloadClassification, referrerInfo, mBrowsingContext, + mDownloadClassification, referrerInfo, true, mBrowsingContext, mHandleInternally, httpChannel); } else { rv = transfer->Init(mSourceUrl, nullptr, pseudoTarget, u""_ns, mMimeInfo, mTimeDownloadStarted, mTempFile, this, channel && NS_UsePrivateBrowsing(channel), - mDownloadClassification, referrerInfo); + mDownloadClassification, referrerInfo, true); } NS_ENSURE_SUCCESS(rv, rv);
@@ -2459,11 +2464,16 @@ nsresult nsExternalAppHandler::CreateFailedTransfer() { return NS_OK; }
-nsresult nsExternalAppHandler::SaveDestinationAvailable(nsIFile* aFile) { - if (aFile) +nsresult nsExternalAppHandler::SaveDestinationAvailable(nsIFile* aFile, + bool aDialogWasShown) { + if (aFile) { + if (aDialogWasShown) { + mDialogShowing = true; + } ContinueSave(aFile); - else + } else { Cancel(NS_BINDING_ABORTED); + }
return NS_OK; } @@ -2735,6 +2745,7 @@ NS_IMETHODIMP nsExternalAppHandler::Cancel(nsresult aReason) { // Break our reference cycle with the helper app dialog (set up in // OnStartRequest) mDialog = nullptr; + mDialogShowing = false;
mRequest = nullptr;
diff --git a/uriloader/exthandler/nsExternalHelperAppService.h b/uriloader/exthandler/nsExternalHelperAppService.h index ce142a4f5b6b0..439be1645f4fc 100644 --- a/uriloader/exthandler/nsExternalHelperAppService.h +++ b/uriloader/exthandler/nsExternalHelperAppService.h @@ -376,6 +376,12 @@ class nsExternalAppHandler final : public nsIStreamListener, */ bool mHandleInternally;
+ /** + * True if any dialog (e.g. unknown content type or file picker) is shown — + * can stop downloads panel from opening, to avoid redundant interruptions. + */ + bool mDialogShowing; + /** * One of the REASON_ constants from nsIHelperAppLauncherDialog. Indicates the * reason the dialog was shown (unknown content type, server requested it, @@ -522,7 +528,7 @@ class nsExternalAppHandler final : public nsIStreamListener, const nsString& path);
/** - * Set in nsHelperDlgApp.js. This is always null after the user has chosen an + * Set in HelperAppDlg.jsm. This is always null after the user has chosen an * action. */ nsCOMPtr<nsIWebProgressListener2> mDialogProgressListener; diff --git a/uriloader/exthandler/nsIExternalHelperAppService.idl b/uriloader/exthandler/nsIExternalHelperAppService.idl index 3554c69aaced1..307e6196a89df 100644 --- a/uriloader/exthandler/nsIExternalHelperAppService.idl +++ b/uriloader/exthandler/nsIExternalHelperAppService.idl @@ -150,8 +150,11 @@ interface nsIHelperAppLauncher : nsICancelable * Callback invoked by nsIHelperAppLauncherDialog::promptForSaveToFileAsync * after the user has chosen a file through the File Picker (or dismissed it). * @param aFile The file that was chosen by the user (or null if dialog was dismissed). + * @param aDialogWasShown Optional boolean - false by default. Pass true if a + * dialog was opened in the process of reaching this file result. If true, we + * suppress the opening of the downloads panel to avoid redundancy. */ - void saveDestinationAvailable(in nsIFile aFile); + void saveDestinationAvailable(in nsIFile aFile, [optional] in boolean aDialogWasShown);
/** * The following methods are used by the progress dialog to get or set diff --git a/uriloader/exthandler/tests/mochitest/browser_open_internal_choice_persistence.js b/uriloader/exthandler/tests/mochitest/browser_open_internal_choice_persistence.js index 11f9e24092053..e6dffa8df4ab4 100644 --- a/uriloader/exthandler/tests/mochitest/browser_open_internal_choice_persistence.js +++ b/uriloader/exthandler/tests/mochitest/browser_open_internal_choice_persistence.js @@ -33,11 +33,13 @@ function waitForAcceptButtonToGetEnabled(doc) { }
add_setup(async function() { - // Remove the security delay for the dialog during the test. await SpecialPowers.pushPrefEnv({ set: [ + // Remove the security delay for the dialog during the test. ["security.dialog_enable_delay", 0], ["browser.helperApps.showOpenOptionForViewableInternally", true], + // Make sure we don't open a file picker dialog somehow. + ["browser.download.useDownloadDir", true], ], });
This is an automated email from the git hooks/post-receive script.
richard pushed a commit to branch geckoview-102.3.0esr-12.0-1 in repository tor-browser.
commit 1f0194a2c33cdec534e8fd13b6bd877e4a8fdb5c Author: Shane Hughes shmediaproductions@gmail.com AuthorDate: Mon Aug 8 12:15:40 2022 +0000
Bug 1783643 - Don't open downloads panel if window is inactive. r=Gijs, a=RyanVM
Since bug 1741076, the downloads panel is already configured not to show the downloads panel if the top chrome window is inactive. However, this check doesn't matter if the downloads panel has never been opened before in the profile (represented by pref browser.download.panel.shown). This patch changes the check so that if the top window is not active, we don't show the panel, no matter what.
Differential Revision: https://phabricator.services.mozilla.com/D153334 --- browser/components/downloads/DownloadsCommon.jsm | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-)
diff --git a/browser/components/downloads/DownloadsCommon.jsm b/browser/components/downloads/DownloadsCommon.jsm index 11e119a0155ea..aab68856cd00c 100644 --- a/browser/components/downloads/DownloadsCommon.jsm +++ b/browser/components/downloads/DownloadsCommon.jsm @@ -994,13 +994,11 @@ DownloadsDataCtor.prototype = { }
let shouldOpenDownloadsPanel = - openDownloadsListOnStart && aType == "start" && Services.prefs.getBoolPref( "browser.download.improvements_to_download_panel" ) && DownloadsCommon.summarizeDownloads(this._downloads).numDownloading <= 1 && - browserWin == Services.focus.activeWindow && gAlwaysOpenPanel;
// For new downloads after the first one, don't show the panel @@ -1013,7 +1011,8 @@ DownloadsDataCtor.prototype = { if ( aType != "error" && ((this.panelHasShownBefore && !shouldOpenDownloadsPanel) || - !openDownloadsListOnStart) + !openDownloadsListOnStart || + browserWin != Services.focus.activeWindow) ) { DownloadsCommon.log("Showing new download notification."); browserWin.DownloadsIndicatorView.showEventNotification(aType);
This is an automated email from the git hooks/post-receive script.
richard pushed a commit to branch geckoview-102.3.0esr-12.0-1 in repository tor-browser.
commit 5407f0f027aefb483cbc52096d9e8c10775e9f53 Author: Calixte cdenizet@mozilla.com AuthorDate: Mon Aug 8 18:56:24 2022 +0000
Bug 1778714 - Fix the pdf download link in the All Downloads view. r=Gijs, a=RyanVM
Differential Revision: https://phabricator.services.mozilla.com/D151431 --- .../components/downloads/content/allDownloadsView.js | 17 +++++++++++------ .../pdfjs/test/browser_pdfjs_download_button.js | 14 ++++++++++++++ 2 files changed, 25 insertions(+), 6 deletions(-)
diff --git a/browser/components/downloads/content/allDownloadsView.js b/browser/components/downloads/content/allDownloadsView.js index 502faf4bb33ab..55b9f47e4637a 100644 --- a/browser/components/downloads/content/allDownloadsView.js +++ b/browser/components/downloads/content/allDownloadsView.js @@ -125,7 +125,9 @@ HistoryDownloadElementShell.prototype = { let displayName = DownloadsViewUI.getDisplayName(this.download); return ( displayName.toLowerCase().includes(aTerm) || - this.download.source.url.toLowerCase().includes(aTerm) + (this.download.source.originalUrl || this.download.source.url) + .toLowerCase() + .includes(aTerm) ); },
@@ -596,7 +598,10 @@ DownloadsPlacesView.prototype = { case "cmd_copy": return Array.prototype.some.call( this._richlistbox.selectedItems, - element => !!element._shell.download.source?.url + element => { + const { source } = element._shell.download; + return !!(source?.originalUrl || source?.url); + } ); case "downloadsCmd_openReferrer": case "downloadShowMenuItem": @@ -616,10 +621,10 @@ DownloadsPlacesView.prototype = { },
_copySelectedDownloadsToClipboard() { - let urls = Array.from( - this._richlistbox.selectedItems, - element => element._shell.download.source?.url - ).filter(Boolean); + let urls = Array.from(this._richlistbox.selectedItems, element => { + const { source } = element._shell.download; + return source?.originalUrl || source?.url; + }).filter(Boolean);
Cc["@mozilla.org/widget/clipboardhelper;1"] .getService(Ci.nsIClipboardHelper) diff --git a/toolkit/components/pdfjs/test/browser_pdfjs_download_button.js b/toolkit/components/pdfjs/test/browser_pdfjs_download_button.js index fa6b6d6c978a9..7b7162c5d1642 100644 --- a/toolkit/components/pdfjs/test/browser_pdfjs_download_button.js +++ b/toolkit/components/pdfjs/test/browser_pdfjs_download_button.js @@ -109,6 +109,20 @@ add_task(async function test_downloading_pdf_nonprivate_window() { tabCount, "No new tab was opened to view the downloaded PDF" ); + + SpecialPowers.clipboardCopyString(""); + const downloadsLoaded = BrowserTestUtils.waitForEvent( + browser, + "InitialDownloadsLoaded", + true + ); + BrowserTestUtils.loadURI(browser, "about:downloads"); + await downloadsLoaded; + + info("Wait for the clipboard to contain the url of the pdf"); + await SimpleTest.promiseClipboardChange(pdfUrl, () => { + goDoCommand("cmd_copy"); + }); } ); });
This is an automated email from the git hooks/post-receive script.
richard pushed a commit to branch geckoview-102.3.0esr-12.0-1 in repository tor-browser.
commit a6829d8ca2842dffd63add69db14c1484fd8acbe Author: Neil Deakin neil@mozilla.com AuthorDate: Fri Aug 19 22:15:50 2022 +0000
Bug 1759604, check CanDropLink during the drop event as sites can cancel the dragover event causing the drop event to still fire, r=arai a=RyanVM
Differential Revision: https://phabricator.services.mozilla.com/D154896 --- docshell/base/nsDocShellTreeOwner.cpp | 8 +++ dom/events/test/browser.ini | 4 ++ dom/events/test/browser_dragimage.js | 67 ++++++++++++++++++++++ dom/events/test/dragimage.html | 10 ++++ dom/events/test/green.png | Bin 0 -> 255 bytes testing/mochitest/tests/SimpleTest/EventUtils.js | 4 +- toolkit/content/widgets/browser-custom-element.js | 4 ++ 7 files changed, 95 insertions(+), 2 deletions(-)
diff --git a/docshell/base/nsDocShellTreeOwner.cpp b/docshell/base/nsDocShellTreeOwner.cpp index e5787bc423f6b..58a69739b7758 100644 --- a/docshell/base/nsDocShellTreeOwner.cpp +++ b/docshell/base/nsDocShellTreeOwner.cpp @@ -961,6 +961,14 @@ nsDocShellTreeOwner::HandleEvent(Event* aEvent) { } else if (eventType.EqualsLiteral("drop")) { nsIWebNavigation* webnav = static_cast<nsIWebNavigation*>(mWebBrowser);
+ // The page might have cancelled the dragover event itself, so check to + // make sure that the link can be dropped first. + bool canDropLink = false; + handler->CanDropLink(dragEvent, false, &canDropLink); + if (!canDropLink) { + return NS_OK; + } + nsTArray<RefPtr<nsIDroppedLinkItem>> links; if (webnav && NS_SUCCEEDED(handler->DropLinks(dragEvent, true, links))) { if (links.Length() >= 1) { diff --git a/dom/events/test/browser.ini b/dom/events/test/browser.ini index 8d9a7701ae17d..4598bfb71ea15 100644 --- a/dom/events/test/browser.ini +++ b/dom/events/test/browser.ini @@ -9,6 +9,10 @@ support-files = ../../../browser/base/content/test/general/head.js
[browser_bug1539497.js] +[browser_dragimage.js] +support-files = + dragimage.html + green.png [browser_keyboard_event_init_key_event_enabled_in_contentscript.js] support-files = file_keyboard_event_init_key_event_enabled_in_contentscript.html diff --git a/dom/events/test/browser_dragimage.js b/dom/events/test/browser_dragimage.js new file mode 100644 index 0000000000000..4ba9a5d62a949 --- /dev/null +++ b/dom/events/test/browser_dragimage.js @@ -0,0 +1,67 @@ +const TEST_URI = "dragimage.html"; + +// This test checks that dragging an image onto the same document +// does not drop it, even when the page cancels the dragover event. +add_task(async function dragimage_remote_tab() { + var tab = await BrowserTestUtils.openNewForegroundTab( + gBrowser, + "http://www.example.com/browser/dom/events/test/" + TEST_URI + ); + + let dropHappened = false; + let oldHandler = tab.linkedBrowser.droppedLinkHandler; + tab.linkedBrowser.droppedLinkHandler = () => { + dropHappened = true; + }; + + await SpecialPowers.spawn(tab.linkedBrowser, [], async () => { + let image = content.document.body.firstElementChild; + let target = content.document.body.lastElementChild; + + const EventUtils = ContentTaskUtils.getEventUtils(content); + + await EventUtils.synthesizePlainDragAndDrop({ + srcElement: image, + destElement: target, + srcWindow: content, + destWindow: content, + id: content.windowUtils.DEFAULT_MOUSE_POINTER_ID, + }); + }); + + tab.linkedBrowser.droppedLinkHandler = oldHandler; + + ok(!dropHappened, "drop did not occur"); + + BrowserTestUtils.removeTab(tab); +}); + +// This test checks the same but with an in-process page. +add_task(async function dragimage_local_tab() { + var tab = await BrowserTestUtils.openNewForegroundTab( + gBrowser, + getRootDirectory(gTestPath) + TEST_URI + ); + + let dropHappened = false; + let oldHandler = tab.linkedBrowser.droppedLinkHandler; + tab.linkedBrowser.droppedLinkHandler = () => { + dropHappened = true; + }; + + let image = tab.linkedBrowser.contentDocument.body.firstElementChild; + let target = tab.linkedBrowser.contentDocument.body.lastElementChild; + + await EventUtils.synthesizePlainDragAndDrop({ + srcElement: image, + destElement: target, + srcWindow: tab.linkedBrowser.contentWindow, + destWindow: tab.linkedBrowser.contentWindow, + }); + + tab.linkedBrowser.droppedLinkHandler = oldHandler; + + ok(!dropHappened, "drop did not occur"); + + BrowserTestUtils.removeTab(tab); +}); diff --git a/dom/events/test/dragimage.html b/dom/events/test/dragimage.html new file mode 100644 index 0000000000000..059b1de90f872 --- /dev/null +++ b/dom/events/test/dragimage.html @@ -0,0 +1,10 @@ +<html> +<head> +<title>Drag Image Test</title> +</head> +<body> +<img src="green.png" width=100 height=100> +<div id='over' style='width: 100px; height: 100px; border: 1px solid black;' + ondragover="event.preventDefault();"></div> +</body> +</html> diff --git a/dom/events/test/green.png b/dom/events/test/green.png new file mode 100644 index 0000000000000..7df25f33bdb26 Binary files /dev/null and b/dom/events/test/green.png differ diff --git a/testing/mochitest/tests/SimpleTest/EventUtils.js b/testing/mochitest/tests/SimpleTest/EventUtils.js index 5a9021fcd46a7..8167456dc6c32 100644 --- a/testing/mochitest/tests/SimpleTest/EventUtils.js +++ b/testing/mochitest/tests/SimpleTest/EventUtils.js @@ -3089,7 +3089,7 @@ async function synthesizePlainDragAndDrop(aParams) { );
try { - _getDOMWindowUtils().disableNonTestMouseEvents(true); + _getDOMWindowUtils(srcWindow).disableNonTestMouseEvents(true);
await new Promise(r => setTimeout(r, 0));
@@ -3414,7 +3414,7 @@ async function synthesizePlainDragAndDrop(aParams) { srcWindow.removeEventListener("dragend", onDragEnd, { capture: true }); } } - _getDOMWindowUtils().disableNonTestMouseEvents(false); + _getDOMWindowUtils(srcWindow).disableNonTestMouseEvents(false); if (logFunc) { logFunc("synthesizePlainDragAndDrop() -- END"); } diff --git a/toolkit/content/widgets/browser-custom-element.js b/toolkit/content/widgets/browser-custom-element.js index dfcbfbf497cc8..1cd33cd0d361e 100644 --- a/toolkit/content/widgets/browser-custom-element.js +++ b/toolkit/content/widgets/browser-custom-element.js @@ -175,6 +175,10 @@
let linkHandler = Services.droppedLinkHandler; try { + if (!linkHandler.canDropLink(event, false)) { + return; + } + // Pass true to prevent the dropping of javascript:/data: URIs var links = linkHandler.dropLinks(event, true); } catch (ex) {
This is an automated email from the git hooks/post-receive script.
richard pushed a commit to branch geckoview-102.3.0esr-12.0-1 in repository tor-browser.
commit 5053d07b4c92aec27bec8bc4e1e9876c974ef426 Author: ffxbld ffxbld@mozilla.com AuthorDate: Mon Sep 5 12:24:53 2022 +0000
No Bug, mozilla-esr102 repo-update HSTS HPKP remote-settings tld-suffixes - a=repo-update r=pascalc
Differential Revision: https://phabricator.services.mozilla.com/D156430 --- netwerk/dns/effective_tld_names.dat | 6 +- security/manager/ssl/StaticHPKPins.h | 2 +- security/manager/ssl/nsSTSPreloadList.inc | 615 ++++++++++++--------- .../dumps/blocklists/addons-bloomfilters.json | 207 ++++++- .../dumps/security-state/intermediates.json | 8 +- 5 files changed, 567 insertions(+), 271 deletions(-)
diff --git a/netwerk/dns/effective_tld_names.dat b/netwerk/dns/effective_tld_names.dat index 626c7993907f3..73e7e375fd6dd 100644 --- a/netwerk/dns/effective_tld_names.dat +++ b/netwerk/dns/effective_tld_names.dat @@ -7171,7 +7171,7 @@ org.zw
// newGTLDs
-// List of new gTLDs imported from https://www.icann.org/resources/registries/gtlds/v2/gtlds.json on 2022-07-28T15:14:54Z +// List of new gTLDs imported from https://www.icann.org/resources/registries/gtlds/v2/gtlds.json on 2022-09-03T15:15:24Z // This list is auto-generated, don't edit it manually. // aaa : 2015-02-26 American Automobile Association, Inc. aaa @@ -7680,7 +7680,7 @@ cars // casa : 2013-11-21 Registry Services, LLC casa
-// case : 2015-09-03 Helium TLDs Ltd +// case : 2015-09-03 Digity, LLC case
// cash : 2014-03-06 Binky Moon, LLC @@ -8370,7 +8370,7 @@ gifts // gives : 2014-03-06 Public Interest Registry gives
-// giving : 2014-11-13 Giving Limited +// giving : 2014-11-13 Public Interest Registry giving
// glass : 2013-11-07 Binky Moon, LLC diff --git a/security/manager/ssl/StaticHPKPins.h b/security/manager/ssl/StaticHPKPins.h index 8a5d0d9060140..7aca30f0aaeed 100644 --- a/security/manager/ssl/StaticHPKPins.h +++ b/security/manager/ssl/StaticHPKPins.h @@ -1125,4 +1125,4 @@ static const TransportSecurityPreload kPublicKeyPinningPreloadList[] = {
static const int32_t kUnknownId = -1;
-static const PRTime kPreloadPKPinsExpirationTime = INT64_C(1670497950671000); +static const PRTime kPreloadPKPinsExpirationTime = INT64_C(1670847555992000); diff --git a/security/manager/ssl/nsSTSPreloadList.inc b/security/manager/ssl/nsSTSPreloadList.inc index 8b3314f8101bc..d9edc5e63160e 100644 --- a/security/manager/ssl/nsSTSPreloadList.inc +++ b/security/manager/ssl/nsSTSPreloadList.inc @@ -8,7 +8,7 @@ /*****************************************************************************/
#include <stdint.h> -const PRTime gPreloadListExpirationTime = INT64_C(1672917145796000); +const PRTime gPreloadListExpirationTime = INT64_C(1673266750804000); %% 0--1.de, 1 0-0.io, 1 @@ -191,6 +191,7 @@ const PRTime gPreloadListExpirationTime = INT64_C(1672917145796000); 050a5.com, 1 050a6.com, 1 050ks.com, 1 +050media.nl, 0 0511315.net, 1 0513z6.com, 1 0514.chat, 1 @@ -781,7 +782,6 @@ const PRTime gPreloadListExpirationTime = INT64_C(1672917145796000); 12345porn.com, 1 1236.be, 1 12365t.com, 1 -123ali.ir, 1 123apps.net, 1 123birthdaygreetings.com, 1 123comparer.be, 1 @@ -1457,7 +1457,6 @@ const PRTime gPreloadListExpirationTime = INT64_C(1672917145796000); 1whw.co.uk, 1 1whw.uk, 1 1wirelog.de, 1 -1wl.uk, 1 1x1.re, 1 1x2betwinner.com, 1 1x2magazine.eu, 1 @@ -2083,7 +2082,6 @@ const PRTime gPreloadListExpirationTime = INT64_C(1672917145796000); 32bet365.com, 1 32h.de, 1 32kk.edu.ee, 1 -32y.ru, 1 33-couvreur.fr, 1 33-elagage.fr, 1 33-km.ru, 1 @@ -5629,6 +5627,7 @@ abdelsater.net, 1 abdened.tk, 1 abdesign.tk, 1 abdijmale.tk, 1 +abdl.link, 1 abdsirketim.com, 1 abdul.cloud, 1 abdulawal.tk, 1 @@ -5957,6 +5956,7 @@ academie-de-police.ch, 0 academika.tk, 1 academkin.com, 1 academy-awards.ml, 1 +academy.city, 1 academyof.com, 1 academyonlinetoyou.tk, 1 academytv.com.au, 1 @@ -6590,7 +6590,6 @@ adhd-explained.com, 1 adhd-inattentive.com, 1 adhdsnap.com, 1 adhdyoga.ca, 1 -adhgroup.ug, 1 adhidrm.me, 0 adhigamindia.com, 1 adhockery.ga, 1 @@ -7029,6 +7028,7 @@ aegee-academy.eu, 1 aegee-academy.org, 1 aegee-utrecht.nl, 1 aegee.eu, 1 +aegee.org, 1 aegis.moe, 1 aegisaccounting.co.uk, 1 aegisalarm.co.uk, 1 @@ -7137,7 +7137,6 @@ af-clan.tk, 1 af.link, 1 afadvantage.gov, 1 afafootball.co.th, 1 -afalina-hotel.su, 1 afanasev.tk, 1 afanias.org, 1 afas-apps.nl, 1 @@ -7147,7 +7146,7 @@ afbrlf.com, 1 afbrtv.com, 1 afbrunswick.com, 1 afbryt.com, 1 -afcmrs.org, 0 +afc-capital.mx, 1 afcmrstest.org, 1 afcurgentcarelyndhurst.com, 0 afdah.se, 1 @@ -7165,7 +7164,6 @@ affilia.tk, 1 affiliatebeeers.ga, 1 affiliatebeest.ga, 1 affiliatebitz.com, 1 -affiliatedphysicians.com, 1 affiliatep.com, 1 affiliateprogram.ga, 1 affiliateprograms.cf, 1 @@ -7291,6 +7289,7 @@ afterpay.com, 1 afterschool.tk, 1 afterskool.eu, 1 afterstack.net, 1 +afto-chor.de, 1 aftodioikisi.gr, 1 aftonbladet.se, 1 afuturewithoutfear.org, 1 @@ -7758,6 +7757,7 @@ ahealthyjourney.ca, 1 ahegaoroulette.com, 1 ahelos.tk, 1 ahenkerp.com, 1 +ahero4all.org, 1 ahg-offices.fr, 1 ahhcomfortshoes.com, 1 ahidta.gov, 1 @@ -8379,6 +8379,7 @@ akaritakai.net, 1 akaritaste.ch, 1 akasha.world, 1 akashdsouza.now.sh, 1 +akashstephen.com, 1 akasi.cf, 1 akaxaka.tk, 1 akaziya.cf, 1 @@ -8386,7 +8387,6 @@ akbam.co.uk, 1 akbarsempoi.tk, 1 akbas.tk, 1 akbtv.ru, 1 -akc3n.org, 1 akdenizim.tk, 1 akdigitalegesellschaft.de, 0 akdusekbudil.cz, 1 @@ -9323,7 +9323,6 @@ alliance-immobilier-service-neuf.fr, 1 alliance-psychiatry.com, 1 allianceautomation.com.au, 1 allianceautomotive.fr, 0 -alliancefitnesscenter.com, 1 allianceforafreesociety.com, 1 allianceforafreesociety.net, 1 alliances-globalsolutions.com, 0 @@ -9344,7 +9343,6 @@ allius.de, 1 alljamin.com, 1 alljokesaside.tk, 1 alllaboutchickens.tk, 1 -allladyboys.com, 1 allline.shop, 1 allmagic.tk, 1 allmandlaw.com, 1 @@ -11068,7 +11066,6 @@ anjocerdena.com, 1 anjoola.com, 1 ankane.org, 1 ankaraarabakiralama.name.tr, 1 -ankaraarackiralama.name.tr, 1 ankaraciftkabin.com, 1 ankaradaozelders.tk, 1 ankaraevdenevenakliyat.name.tr, 1 @@ -11322,7 +11319,6 @@ anthonycarbonaro.com, 0 anthonychampagne.fr, 1 anthonychampagne.me, 1 anthonydegrande.tk, 1 -anthonyellis.com, 1 anthonyfontanez.com, 1 anthonygaidot.fr, 1 anthonylaberge.tk, 1 @@ -11723,7 +11719,6 @@ apisyouwonthate.com, 0 apit-kovrov.ru, 1 apitodemestre.com.br, 1 apiu.me, 1 -apix.uz, 1 apk-world.cf, 1 apk.li, 1 apk4fun.com, 1 @@ -12004,13 +11999,13 @@ apropotv.ro, 1 apropotv.tk, 1 aprpullmanportermuseum.org, 0 aprsdroid.org, 1 -apruebaexamenes.com, 1 apruvd.com, 1 aprz.de, 1 apsa.paris, 1 apsb.cz, 1 apsbengdubi.org, 1 apse.ga, 1 +apssb.in, 1 apssolucoesfinanceiras.online, 1 apstats.tk, 1 apstudynotes.org, 1 @@ -12206,7 +12201,6 @@ arbeitskraft.de, 1 arbeitskreis-asyl-eningen.de, 1 arbeitslosenverwaltung.de, 1 arbejdsdag.dk, 1 -arbeta-online.com, 1 arbil.com.ar, 1 arbitrarion.com, 1 arbitrary.ch, 1 @@ -12859,7 +12853,6 @@ artgaragecrewe.com, 1 artgorod.tk, 1 artgranit.tk, 1 arthousecarousel.co.uk, 1 -arthritisgrouppa.com, 1 arthritisrheumaticdiseases.com, 1 arthrosis.ml, 1 arthur.cn, 1 @@ -13203,6 +13196,7 @@ asiahabit.com, 1 asiakartu.tk, 1 asialeonding.at, 1 asialivenewscafe.gq, 1 +asian-archi.com.tw, 1 asian-goku.tk, 1 asian-industry.eu, 1 asian-sirens.net, 1 @@ -13254,6 +13248,7 @@ askcustomboxes.com, 1 askdeliver.tk, 1 asker-massasje.no, 1 askerweb.cf, 1 +askeustache.com, 0 askeygeek.com, 1 askfree.net, 1 askgamblers.com, 1 @@ -14007,7 +14002,6 @@ aumisc.com, 1 auntiesnorkel.com, 1 auntmia.com, 1 aunto.xyz, 1 -auntodev.com, 1 aupapa.com, 1 aupaysdesanes.com, 1 auplidespages.fr, 1 @@ -14459,7 +14453,6 @@ autoparts.sh, 1 autoparts.wf, 1 autopartso.com, 1 autopaulito.pt, 1 -autopocket.co, 1 autoportal.tk, 1 autopril.com, 1 autoprogconsortium.ga, 1 @@ -14842,7 +14835,6 @@ avrilhouse.tk, 1 avrilshine.tk, 1 avrora-nov.ru, 1 avroramine.tk, 1 -avrupaotobusu.com, 1 avsfinancialservices.com, 1 avspot.net, 1 avstack.io, 1 @@ -14897,6 +14889,7 @@ awakinn.co.in, 1 awangardaszkola.pl, 1 awanteverde.tk, 1 award.ga, 1 +awaremi-tai.com, 1 awarenessadvisor.ga, 1 awarenessadvisorest.ga, 1 awaresec.com, 1 @@ -15645,7 +15638,6 @@ backmigo.com, 1 backmitra.com, 1 backmitra.mx, 1 backmitra.nl, 1 -backmountaingas.com, 1 backpacken.org, 1 backpacker.dating, 1 backpackinglight.com, 1 @@ -15813,7 +15805,6 @@ bahaiprayers.io, 1 bahana.net, 1 baharmusic24.tk, 1 bahiastudios.com, 1 -bahisbonus.work, 1 bahislokal6.com, 1 bahnenimbild.de, 1 bahnenimbild.eu, 1 @@ -15827,6 +15818,7 @@ bahrainonline.tk, 1 bahrep.com, 1 baidu-s.com, 0 baiduo.com, 1 +baif.hr, 1 baikal.cf, 1 baikalfond.ml, 1 baikalppk.tk, 1 @@ -17000,7 +16992,7 @@ beatriz-urbano-vega.tk, 1 beatrizaebischer.ch, 0 beatrizmartinez.tk, 1 beatsdope.com, 1 -beatsearch.net, 1 +beatsearch.net, 0 beatsnbits.nl, 1 beatsta.tk, 1 beatthebastards.tk, 1 @@ -18200,38 +18192,38 @@ bet166uu.com, 1 bet166ww.com, 1 bet166xx.com, 1 bet166yy.com, 1 -bet333111.com, 1 -bet333123.com, 1 +bet333111.com, 0 +bet333123.com, 0 bet333222.com, 1 -bet333321.com, 1 +bet333321.com, 0 bet333345.com, 0 bet333432.com, 0 bet333444.com, 1 -bet333456.com, 1 +bet333456.com, 0 bet333567.com, 1 -bet333666.com, 1 -bet333678.com, 1 +bet333666.com, 0 +bet333678.com, 0 bet333789.com, 0 -bet333876.com, 1 -bet333987.com, 1 +bet333876.com, 0 +bet333987.com, 0 bet333999.com, 0 -bet333h.com, 1 +bet333h.com, 0 bet333i.com, 0 bet333j.com, 0 -bet333k.com, 1 +bet333k.com, 0 bet333l.com, 1 -bet333m.com, 1 +bet333m.com, 0 bet333n.com, 1 bet333o.com, 0 bet333p.com, 0 -bet333q.com, 1 +bet333q.com, 0 bet333r.com, 0 -bet333s.com, 1 -bet333t.com, 1 +bet333s.com, 0 +bet333t.com, 0 bet333u.com, 0 bet333v.com, 0 bet333w.com, 0 -bet333x.com, 1 +bet333x.com, 0 bet333y.com, 1 bet333z.com, 0 bet338c.com, 1 @@ -19588,7 +19580,6 @@ bitstage.uk, 1 bitstep.ca, 1 bitstorm.nl, 1 bitstorm.org, 1 -bitsum.com, 1 bitsync.nl, 1 bitten.pw, 1 bitterspringscabins.com.au, 1 @@ -19849,7 +19840,6 @@ blackmetaller.tk, 1 blackminds.tk, 1 blackmistery.tk, 1 blackmodelsusa.tk, 1 -blacknova.io, 1 blackoutzone.tk, 1 blackpapermoon.de, 1 blackpayment.ru, 1 @@ -20895,7 +20885,6 @@ booldamm.llc, 1 boombangcreditos.tk, 1 boomboomboat.com, 1 boomerangworkouts.com, 1 -boomersclub.com.au, 1 boomersurf.com, 1 boomfestival.org, 1 boomgamer.ru, 1 @@ -20977,7 +20966,6 @@ borderlessmigration.com, 1 borderzoo.tk, 1 bordes.com.ar, 1 bordes.me, 1 -bordo.com.au, 1 bordoeurope.com, 1 borduurcadeau.tk, 1 borduurpatronen.tk, 1 @@ -21373,7 +21361,6 @@ bracelet-chakras.com, 1 braceletcuivre.com, 1 braces-supports.tk, 1 bracesbyberry.com, 1 -bracho.xyz, 1 brachotelborak.com, 1 bracken.jp, 1 bracket.land, 1 @@ -21657,6 +21644,7 @@ breakingdeal.fr, 1 breakingnewskenya.tk, 1 breakingtech.fr, 1 breakingthesilence.org.il, 1 +breakingvap.fr, 1 breakmaps.net, 1 breakofdawn.tk, 1 breakout.careers, 1 @@ -21911,7 +21899,6 @@ briliant.tk, 1 brilliant-minds.tk, 1 brilliantbouncyfun.co.uk, 1 brilliantproductions.co.nz, 1 -brilliantvintage.co.uk, 1 brillie.tk, 1 brillio.com, 1 brillionwi.gov, 1 @@ -22278,10 +22265,6 @@ bspecialfx.nl, 1 bsq1492.com, 1 bsquared.org, 1 bsrueti.ch, 1 -bss-systems.net, 1 -bss.com.ph, 1 -bss.solutions, 1 -bss.systems, 1 bss01.de, 1 bssolvfagen-pre-storeswa-wap.azurewebsites.net, 1 bsstainless.com, 1 @@ -22338,6 +22321,7 @@ btraviswrightmps.com, 1 btraviswrightmps.org, 1 btrb.ml, 1 btrfs.no, 1 +btsapem.com, 1 btsline.co.id, 1 btslr.co, 1 btsoft.eu, 1 @@ -22359,6 +22343,7 @@ bttorj45.com, 1 bturboo.com, 1 btvw.de, 1 btwsa.tk, 1 +buatcv.online, 1 buayacorp.com, 1 bub.cat, 1 bubba.cc, 1 @@ -22559,7 +22544,6 @@ buitex.lt, 1 buitrong.net, 1 buka.jp, 1 buketnevesti.cf, 1 -bukiko-test.net, 1 bukiko.net, 1 bukinist.tk, 1 bukiskola.hu, 1 @@ -23477,6 +23461,7 @@ bziaks.xyz, 1 bzik.cf, 1 bzsparks.com, 0 bztech.com.br, 1 +bztech.ru, 1 bztraveler.net, 0 bzv-fr.eu, 1 c-14.de, 1 @@ -23487,7 +23472,6 @@ c-c-europeen.org, 1 c-chaud.com, 1 c-g-h.net, 1 c-ma-copro.com, 1 -c-netsys.fr, 1 c-ovidiu.tk, 1 c-resource.tech, 0 c-rpg.eu, 1 @@ -24776,6 +24760,7 @@ carlosjeurissen.nl, 1 carlosmfalves.eu, 1 carlospiga.fr, 1 carlosvelezmarketing.com, 1 +carlot-j.com, 1 carlovanwyk.com, 1 carls-fallout-4-guide.com, 1 carlsbadluxuryhotels.ga, 1 @@ -24900,6 +24885,7 @@ carrozziere.roma.it, 1 carry.luxe, 1 carryvanbruggen.tk, 1 cars4salecy.com, 1 +carsales.com.ng, 0 carseatchecks.ca, 1 carshippingcarriers.com, 1 carsinsuranceis.com, 1 @@ -25457,7 +25443,7 @@ catram.org, 1 catransportation.net, 1 catrybayart.com, 1 catscreativecakes.ga, 1 -catskillselfstorage.com, 0 +catskillselfstorage.com, 1 catsmagic.pp.ua, 1 catsnow.com, 1 catsofcapetown.com, 1 @@ -26128,7 +26114,6 @@ cevo.com.hr, 1 cevt.ar, 1 cewek.ml, 1 cewood.xyz, 1 -ceyhanmolla.com, 1 ceyizlikelisleri.com, 1 cezdent.com, 1 cf-connect.nl, 1 @@ -26937,7 +26922,6 @@ children1st.jp, 1 childrenandmedia.org.au, 1 childrenfirstalways.org, 1 childreninadversity.gov, 1 -childrenoftheshadow.org, 1 childrens-room.com, 1 childrensdentalranch.com, 1 childrensentertainmentleicester.co.uk, 1 @@ -27126,7 +27110,6 @@ choesfirm.tk, 1 chofan.tk, 1 choiceautoloan.com, 1 choicemediaworks.com, 1 -choiceorganics.co.za, 0 choirofbeirut.cf, 1 choisirmoneau.blog, 1 chokladfantasi.net, 1 @@ -27988,6 +27971,7 @@ clacetandil.com.ar, 1 clad.cf, 1 clague.moe, 1 claibornecountytn.gov, 1 +claim-justice.com, 1 claimconnect.com, 1 claimconnect.us, 1 claimflights.at, 1 @@ -28186,7 +28170,6 @@ cleanfacesest.ga, 1 cleanforce.ca, 1 cleango.pl, 1 cleangreen.tech, 1 -cleangroup.in.ua, 1 cleanhortihigienizados.com.br, 1 cleanhouse2000.us, 1 cleaningbyrosie.com, 0 @@ -28640,7 +28623,6 @@ cloudsmith.com, 1 cloudspace-analytics.com, 1 cloudspeedy.net, 1 cloudspire.net, 1 -cloudstk.com, 1 cloudstoragecompare.com, 1 cloudstored.nl, 1 cloudstress.ga, 1 @@ -28869,7 +28851,7 @@ cnb.ie, 1 cnbs.ch, 1 cnc-lehrgang.de, 1 cncfraises.fr, 1 -cnclp.org.uk, 0 +cnclp.org.uk, 1 cncn3.cn, 1 cncollege.tk, 1 cncr.ga, 1 @@ -28940,6 +28922,7 @@ coathangastrangler.com, 1 coathangerstrangla.com, 1 coathangerstrangler.com, 1 coating-equipment.com, 1 +coatl-industries.com, 1 coats-and-jackets.tk, 1 coatsandcocktails.org, 1 cobaka.tk, 1 @@ -29145,6 +29128,7 @@ codigojose.com, 1 codigomusical.tk, 1 codigosmart.com, 1 coding-basic.tk, 1 +coding-treff.de, 1 coding.lv, 1 coding.net, 1 codingale.com, 1 @@ -29158,7 +29142,6 @@ codish.ml, 1 codista.com, 1 codo.digital, 1 cododigital.co.uk, 1 -codoozer.com, 1 codowned.com, 1 codpwned.com, 1 codulrutier.tk, 1 @@ -29222,7 +29205,7 @@ cohassetma.gov, 1 cohassetpolicema.gov, 1 cohenandcohen.net, 1 cohere.io, 1 -coiam.net, 1 +coiam.net, 0 coiffbot.fr, 1 coiffeurschnittstelle.ch, 1 coignieresentransition.fr, 1 @@ -29601,6 +29584,7 @@ comicspornoxxx.com, 1 comicstrove.com, 1 comicsymanga.com, 1 comicwiki.dk, 1 +comicyears.com, 1 comidina.com, 1 comingto.icu, 1 comiq.io, 1 @@ -29663,6 +29647,7 @@ communication-services.tk, 1 communiques.info, 1 communiquons.org, 1 communist-party.tk, 1 +community-cupboard.org, 0 community-pro.de, 1 community-pro.net, 1 community-services.cz, 0 @@ -29970,6 +29955,7 @@ condosforcash.com, 1 condroz-motors.be, 0 conectada.tk, 1 conectadev.com, 1 +conectainmobiliariasa.com, 1 conectumfinanse.pl, 1 conejicos.tk, 1 conejovalleyelectrical.com, 1 @@ -31280,7 +31266,6 @@ creativenz.govt.nz, 1 creativephysics.ml, 1 creativescorpio.tk, 1 creativesectors.tk, 1 -creativesmm.com.ua, 1 creativestories.me, 1 creativetechsolution.in, 1 creativeweb.biz, 1 @@ -31871,7 +31856,6 @@ csharpmarc.net, 1 cshe.de, 1 cshive-img.com, 1 cshive-static.com, 1 -cshive.com, 1 cshm-schm.ca, 1 cshostorg.tk, 1 cshub.nl, 1 @@ -31890,7 +31874,6 @@ csnet.live, 1 csodaorszagovoda.hu, 1 csokolade.hu, 1 csokolozos-jatekok.tk, 1 -csosa.gov, 1 csowt.gq, 1 csp-tohoku.co.jp, 1 csp.ch, 0 @@ -32032,6 +32015,7 @@ cubyhome.com, 1 cucabot.tk, 1 cucaracha.tk, 1 cuchichi.es, 1 +cuckold-secrets.tk, 1 cuckoldjungle.com, 1 cuckoo.ee, 1 cuddlecat.io, 1 @@ -32170,6 +32154,7 @@ curiositytrained.com, 1 curiosoando.com, 1 curiousspoonfoods.com, 1 curioustea.com, 1 +curiozitate.com, 1 curl.tw, 0 curlie.tk, 1 curlify.com, 1 @@ -33171,7 +33156,6 @@ danielj.tk, 1 danieljamesscott.org, 1 danieljstevens.com, 1 danielkanchev.com, 1 -danielkeppler.com, 1 danielkoster.nl, 1 daniellecavazos.com, 1 danielleskosky.com, 1 @@ -33274,8 +33258,6 @@ danselibre.net, 1 danselibre.org, 1 dansemacabre.tk, 1 danseressen.nl, 1 -danskgummi.com, 1 -danskgummi.dk, 1 danskoya.com, 1 danslan.org, 1 danslavieyadescactus.ch, 1 @@ -33508,7 +33490,6 @@ dashwebconsulting.com, 1 dasignsource.com, 1 dasinternetluegt.at, 1 daskirschhaus.com, 1 -dasmailarchiv.ch, 1 dasolindustrialpark.tk, 1 dassolutions.eu, 1 dastchin.live, 1 @@ -34746,6 +34727,7 @@ dena.pro, 1 denabot.pw, 1 denachtegaalferwert.tk, 1 denaehula.com, 1 +denagallery.ir, 1 denali.net, 1 denarium.com, 1 denatured.tk, 1 @@ -34991,7 +34973,6 @@ derivative-calculator.net, 1 derivativeshub.pro, 1 derive.cc, 0 derive.cf, 1 -derk-jan.com, 0 derkach.io, 1 derkarl.tk, 1 derkuki.de, 1 @@ -35397,7 +35378,6 @@ devrekgazetesi.com, 1 devries.one, 1 devrim.io, 1 devs-from.asia, 1 -devs.host, 1 devs.men, 1 devs4.com, 1 devsectools.com, 1 @@ -35492,7 +35472,6 @@ dfile.tech, 0 dflcares.com, 1 dfmn.berlin, 1 dfmvf.org, 1 -dfpg.com, 1 dfranke.com, 1 dfspdfl.gov, 1 dfstoryteller.com, 1 @@ -35576,7 +35555,6 @@ di2pra.com, 0 di2pra.fr, 0 dia-de.com, 1 dia.com.br, 1 -dia.run, 1 diabetessucks.net, 1 diableros.tk, 1 diables-noirs.tk, 1 @@ -35861,7 +35839,6 @@ difusionmetalera.tk, 1 difuzevox.com, 0 digaloahidigital.com, 1 digar.ee, 1 -digazu.com, 1 digbin.com.br, 1 digchip.com, 1 digchip.info, 1 @@ -35941,7 +35918,6 @@ digital-liberal.ch, 1 digital-mu.tk, 1 digital-nut.com, 1 digital-rainbow-dolls.tk, 1 -digital-sculpture.org, 1 digital-techs.com, 1 digital-workshop.at, 0 digital.democrat, 1 @@ -36041,7 +36017,6 @@ digitalmahleracademy.com, 1 digitalmaniac.co.uk, 1 digitalmarketingindallas.com, 1 digitalmarketingnetic.com, 1 -digitalmarketingrocks.com, 0 digitalmind.su, 1 digitalninja.tk, 1 digitalnomadsunderground.com, 1 @@ -36176,6 +36151,7 @@ dimomaint.de, 1 dimomaint.es, 1 dimosoftware.fr, 1 dimseklubben.dk, 1 +dimspith.com, 1 dinamikarosta.ml, 1 dinamofilms.cl, 1 dincemlakmerkez.ga, 1 @@ -36940,6 +36916,7 @@ dlmixcloud.com, 1 dlouwrink.nl, 0 dlp-demo.com, 1 dlrg-cux-ohz.de, 0 +dlscomputers.com.au, 1 dlsolutions-inc.com, 1 dlt.green, 1 dluxelab.com, 1 @@ -37123,7 +37100,6 @@ dobleseo.pro, 1 dobookmark.ml, 1 dobramagia.pl, 1 dobraprace.cz, 0 -dobrazdrava.ru, 1 dobrekupony.cz, 1 dobrekupony.pl, 1 dobrekupony.sk, 1 @@ -37338,7 +37314,6 @@ dogsnaturallymagazine.com, 1 dogsnow.com, 1 dogtowneastpowell.com, 1 dogtrack.tk, 1 -dogtrainerorangecounty.com, 1 dogtrainersreno.com, 1 dogualp.com, 1 dogvolution.com, 1 @@ -37348,7 +37323,6 @@ dogworld.com.br, 1 doh.pub, 1 doh.sb, 1 dohanews.co, 1 -dohanyok.hu, 1 dohertyconsulting.tk, 1 doi.org, 1 doihavetoputonpants.com, 1 @@ -37461,7 +37435,6 @@ domain-speicher.com, 1 domain-speicher.de, 1 domain-swiss.ch, 1 domain.ch, 1 -domain001.info, 1 domaine-aigoual-cevennes.com, 1 domainedemiolan.ch, 0 domainevanina.fr, 1 @@ -37766,7 +37739,7 @@ doranobi-fansub.id, 1 dorco.be, 1 dordtpas.nl, 1 doreyaromatherapy.com, 1 -dorfbrunnen.eu, 1 +dorfbrunnen.eu, 0 dorfkultur.net, 1 dorfpark-falkenburg.de, 1 dorfrock.com, 1 @@ -38990,7 +38963,6 @@ dunkle-seite.org, 1 dunlaptn.gov, 1 dunmanelectric.com, 1 dunmanpoolandspa.com, 1 -dunneworthy.com, 1 dunningtonaudio.co.uk, 1 dunyahalleri.com, 1 duo-tauceti.com, 1 @@ -39160,7 +39132,6 @@ dweilorkest-frederikshaven.tk, 1 dwgeneralcontractors.com, 1 dwgf.xyz, 1 dwhightmolina.com, 1 -dwi-sued.de, 1 dwihn.org, 1 dwiminneapolislawyer.com, 1 dwipakharismamitra.com, 0 @@ -39411,6 +39382,7 @@ e-massage.tk, 1 e-matras.ua, 1 e-medicines.tk, 1 e-medycyna.net, 1 +e-michiganinsurance.com, 1 e-mieszkania.org.pl, 1 e-migration.ch, 0 e-nail.tk, 1 @@ -40135,7 +40107,6 @@ ebjork.se, 1 ebki-nsn.gov, 1 eblan.gq, 1 eblog.cf, 1 -eblog.ink, 1 ebola-hosting.cz, 1 ebolacharts.ga, 1 ebolavirus.tk, 1 @@ -40556,7 +40527,6 @@ edscolors.com, 1 edservicing.com, 1 edshogg.co.uk, 1 edsm.net, 1 -edsonreis.com, 1 edstem.org, 1 edstep.com, 1 edtech-hub.com, 1 @@ -40747,7 +40717,6 @@ efag.com, 1 efair.tv, 1 efcpharma.com, 1 efcross.com, 1 -efe.name.tr, 1 efeen.nl, 1 efektyvnist.pro, 1 efeso.co.nz, 1 @@ -40878,7 +40847,6 @@ egittophilia.tk, 1 egles.eu, 1 eglinlife.net, 1 egliseclichy92.fr, 1 -eglisedenantes.fr, 1 egm-sakura.com, 1 ego4u.com, 1 ego4u.de, 1 @@ -41383,7 +41351,6 @@ elegance-lingerie.com, 1 elegance-sm.com, 1 elegance96.tk, 1 elegancecement.com, 1 -eleganceperfumes.com.br, 1 elegant-design.tk, 1 elegant-techno.com, 1 eleganta.ga, 1 @@ -41526,6 +41493,7 @@ elevanhairdressing.co.uk, 1 elevateandprosper.com, 1 elevated-esthetics.com, 1 elevatedarborcare.com.au, 1 +elevatedconstructionltd.com, 1 elevatenutrition.com, 1 elevationcreative.net, 1 elevationplumbingandheating.com, 1 @@ -41565,7 +41533,6 @@ elgrecohotel.gr, 1 elguillatun.cl, 1 elgustdecreixer.cat, 1 elgustodecrecer.es, 1 -elhall.ru, 0 elhamadimi.com, 1 elherraderoloscabos.com, 1 elhombrepez.tk, 1 @@ -41666,7 +41633,6 @@ elitexcomputing.com, 1 elitexxx.com, 1 elithub.com, 1 elithus.se, 1 -elitrahealth.com, 1 elitsa.gr, 1 elivenet.com, 1 elixi.re, 1 @@ -42190,7 +42156,6 @@ empregosrj.com, 1 empreinte.ca, 1 emprendecausa.com, 1 emprendeconchrisfx.com, 1 -emprendedoresdesevilla.es, 1 emprendepedia.com, 1 emprendeperuano.com, 1 emprendimientoweb.co, 1 @@ -42600,7 +42565,6 @@ enmowe.tech, 0 enno.mom, 1 ennori.jp, 1 ennova.com, 1 -enns-photography.com, 1 enocstaging.azurewebsites.net, 1 enodais.gr, 1 enofmusic.com, 1 @@ -43001,6 +42965,7 @@ erclab.kr, 1 erclaim.com, 1 erctra.com, 1 erda.gov, 1 +erdekesseg.com, 1 erdethamburgeronsdag.no, 1 ereader.uno, 1 erechimimoveis.com.br, 1 @@ -43414,7 +43379,6 @@ esoterikerforum.de, 1 espace-caen.fr, 0 espace-gestion.fr, 1 espace-habitat-francais.fr, 1 -espace-orenda.ch, 1 espace-vet.fr, 1 espace.network, 1 espace.spb.ru, 0 @@ -43466,7 +43430,6 @@ espressob2b.com, 1 espressodokter.nl, 1 espressonews.gr, 1 esprihealth.com, 1 -esprit.tn, 1 espub.org, 1 espyder.net, 1 esq, 1 @@ -43591,7 +43554,7 @@ estudiemosvirtualmente.com, 1 estudio21pattern.com, 0 estudiogarcia-rada.com, 1 estudiomantis.tk, 1 -estudionale.com, 0 +estudionale.com, 1 estudionale.com.ar, 1 estudios-biblicos.tk, 1 estudiosalmogavares.tk, 1 @@ -44177,7 +44140,6 @@ eviadc.com, 1 eviamv.com, 1 eviction.cf, 1 evidecor.com.br, 1 -evidencebased.net, 1 evidenceusa.com.br, 1 evidenciamidiasdigitais.com.br, 1 evidencija.ba, 1 @@ -44330,7 +44292,6 @@ examinrush.com, 1 example.sc, 1 example.wf, 1 exampleessays.com, 1 -examroll.com, 1 examroll.fr, 1 examroll.io, 1 examsite.tk, 1 @@ -44365,7 +44326,6 @@ excellentrencontrer.tk, 1 excellentsurferers.ga, 1 excellentsurferest.ga, 1 excelnutritional.com.br, 1 -exceloreflexology.com, 1 excelsiorcomics.com.br, 1 excelsis.rs, 1 exceltechoman.com, 1 @@ -45211,7 +45171,6 @@ fahrenwalde.de, 1 fahrschule-laux.de, 1 fahrwerk.io, 1 fahrzeug-talk.de, 1 -fai.gov, 1 faidanoi.it, 1 faidatefacile.it, 1 faieurope.it, 1 @@ -45394,6 +45353,7 @@ famgdigital.com, 1 famigliafiorini.it, 1 familialchercher.tk, 1 familiaperez.net, 0 +familiasempresariaspanama.com, 1 familie-keil.de, 1 familie-kruithof.nl, 1 familie-kupschke.de, 1 @@ -45497,7 +45457,6 @@ fanschic.com, 1 fanshenzhiyi.com, 1 fansided.com, 1 fansta.jp, 1 -fanstuff.ru, 1 fantacast.it, 1 fantasea.pl, 1 fantasiapainter.com, 1 @@ -45676,7 +45635,6 @@ fashion-stoff.de, 1 fashion-swimwear.tk, 1 fashion-world.tk, 1 fashion.bg, 1 -fashion.net, 1 fashionadvice.tk, 1 fashionagent.tk, 1 fashionandbeautystyle.com, 1 @@ -46979,7 +46937,7 @@ fionahengartner.ch, 1 fionamcbride.com, 1 fionna.io, 1 fiore31.fr, 1 -fiorebjj.com, 1 +fiorebjj.com, 0 fiorellaweddings.com, 1 fiorenzaperfumhome.com.br, 1 fioriepiante.info, 1 @@ -48243,6 +48201,7 @@ foodwise.marketing, 1 foodwish.ga, 1 foodyankee.ga, 1 foodylab.it, 1 +foodyshoody.com, 1 foodzpace.com, 1 fooishbar.org, 0 fooladi.tk, 1 @@ -48720,6 +48679,7 @@ foundmyself.com, 1 foundrehotels.com, 1 foundsounds.me, 1 fountainco.gov, 1 +fountainvalleyseniorcare.us, 1 fourashesgolfcentre.uk, 1 fourbrothers.tk, 1 fourcask.com, 1 @@ -49336,7 +49296,6 @@ freeslots.guru, 0 freesmile.tk, 1 freesms-online.de, 1 freesocialbookmarkingsites.tk, 1 -freesoft-board.to, 1 freesoftlab.com, 1 freesolitaire.win, 1 freesoul-deactivate-plugins.com, 1 @@ -51143,7 +51102,6 @@ gaudere.co.jp, 1 gaudi-renove.com, 1 gaumenverfuehrer.de, 1 gauravgo.com, 0 -gauravtiwari.org, 0 gaurl.ga, 1 gautam-iiith.tk, 1 gautam-k.tk, 1 @@ -51200,7 +51158,6 @@ gazette365.com, 1 gazizov.tk, 1 gazoakley.com, 1 gazobeton-don.ru, 1 -gazoneo.fr, 1 gazor.tk, 1 gazoz.ga, 1 gazza.tk, 1 @@ -51232,7 +51189,6 @@ gc-event-manager.com, 1 gc-hartberg.tk, 1 gc-mc.de, 1 gc-pfalz.de, 1 -gc.gy, 1 gc.ru.net, 1 gc4hr.org, 1 gcbit.dk, 1 @@ -51358,7 +51314,6 @@ geeklan.co.uk, 0 geekles.net, 1 geekmagazine.com.br, 1 geeknik.com, 1 -geekofun.com, 1 geekowl.com, 1 geekpad.com, 1 geekport.net, 1 @@ -51624,7 +51579,6 @@ genious.world, 1 genioyfigura.tk, 1 geniusclan.tk, 1 geniuses.gq, 1 -geniushost.in, 1 geniusmarka.com, 1 geniusteacher.in, 1 geniuszone.biz, 1 @@ -51819,6 +51773,7 @@ georgewatson.me, 1 georgewbushlibrary.gov, 1 georgiaaccess.gov, 1 georgiaautoglass.net, 1 +georgiabonepc.com, 1 georgiacriminaldefense.com, 1 georgiaglassrepair.com, 1 georgiainfo.ga, 1 @@ -51995,7 +51950,6 @@ getbrain.tk, 1 getbreadcrumbs.com, 1 getbrowink.com, 1 getbutterfly.com, 1 -getby.download, 1 getcalc.com, 1 getcarina.com, 1 getchip.cc, 1 @@ -52039,6 +51993,7 @@ getgeek.io, 1 getgeek.no, 1 getgeek.nu, 1 getgeek.pl, 1 +getgeek.se, 1 gethdporn.com, 1 gethere.gq, 1 gethome.ru, 1 @@ -52099,6 +52054,7 @@ getrelish.com, 1 getresilience.org, 1 getsamegoal.com, 1 getscif.com, 1 +getsecure.nl, 1 getserm.com, 1 getserum.xyz, 1 getsession.org, 1 @@ -52152,6 +52108,7 @@ geus-okna.eu, 1 gevelreinigingtiel.nl, 1 gevme.com, 1 gewasteelt.ga, 1 +gewel.io, 1 gewinn.tk, 1 gexobiz.tk, 1 geyduschek.be, 0 @@ -52701,7 +52658,6 @@ glasdon.com, 1 glaserceramics.com, 1 glasfaser-im-hanseviertel.de, 1 glasgestaltung.biz, 1 -glashandelwolf.nl, 1 glasiko.tk, 1 glasner.photo, 1 glass.google.com, 1 @@ -52790,6 +52746,7 @@ global-business-solutions.cf, 1 global-content.net, 1 global-electronic-music.tk, 1 global-factory.co.jp, 1 +global-free-classified-ads.com, 1 global-monitoring.com, 1 global-motherboard.com, 1 global-mt.ru, 1 @@ -52828,6 +52785,7 @@ globaldefensa.tk, 1 globaldestruction.tk, 1 globalenergyinterconnection.com, 0 globalentertainment.ga, 1 +globalenv.online, 1 globalepsilon.com, 1 globalformat.de, 1 globalfuture.eu, 1 @@ -53841,7 +53799,6 @@ grafana.com, 1 grafcaps.com, 1 grafe.com, 1 grafenberg.tk, 1 -graffen.dk, 0 graffiti-street-art-ebook.tk, 1 graffitinetwerk.nl, 1 graffitiwall.tk, 1 @@ -53984,7 +53941,6 @@ grapheneos.org, 1 grapheneos.ovh, 1 graphic-schools.com, 1 graphic-shot.com, 1 -graphicbuffet.co.th, 1 graphicdesignresources.net, 1 graphicdream.tk, 1 graphicnab.com, 0 @@ -54713,7 +54669,6 @@ gst.name, 1 gstackrankers.com, 1 gstehlik.com, 1 gt-himmel.com, 1 -gt-network.de, 1 gta-arabs.com, 1 gtacty.co, 1 gtaeventos.com, 1 @@ -54976,7 +54931,6 @@ gunz.net, 1 gunziefolleto.tk, 1 gunzreplays.com, 1 guochang.fun, 1 -guochang.xyz, 1 guoda.art, 1 guogetv.com, 1 guohuageng.com, 1 @@ -55003,7 +54957,6 @@ gurunanakdarvar.tk, 1 gurunpa.com, 1 gururi.com, 1 guruworld.tk, 1 -gus.host, 1 gus.moe, 1 gusar.by, 1 gusli.net, 1 @@ -55741,7 +55694,7 @@ hanfverband-erfurt.de, 1 hang333.moe, 1 hangar4.es, 1 hangarbox.de, 1 -hangardasaves.com.br, 1 +hangardasaves.com.br, 0 hangargeek.ml, 1 hangcapnach.com, 1 hangout, 1 @@ -55995,7 +55948,6 @@ harfordvotes.gov, 1 hargaindo.com, 1 hargamobilmu.com, 0 hari-katha.tk, 1 -harianaceh.co.id, 0 haribilalic.com, 1 harigovind.org, 1 hariharnagar.tk, 1 @@ -56086,7 +56038,6 @@ hartlieb.me, 1 hartmancpa.com, 1 hartmann-hartmann.eu, 1 hartmutschnepel.de, 1 -hartpsychologen.nl, 1 hartsfieldrock.tk, 1 hartstart.info, 1 hartvannike.tk, 1 @@ -56866,7 +56817,6 @@ heatherleysephotography.com, 1 heathersmithcommercial.com, 1 heatingequipment.tk, 1 heaven-boutique.de, 0 -heaven.moe, 1 heavenlybeauty.tk, 1 heavenlyseals.com, 1 heavenlysmokenc.com, 1 @@ -57087,7 +57037,6 @@ hellendumanrealty.com, 1 hellenicagora.co.uk, 1 hellenicmusicacademy.com, 1 hellerarko.de, 1 -hellersgas.com, 1 hellfreak.tk, 1 hellhammer.tk, 1 hellhavens.tk, 1 @@ -57149,7 +57098,6 @@ helm-trophy.com, 1 helminger-lrs.at, 1 helmondautoschade.nl, 1 helmscapital.co.uk, 1 -helmtrophy.com, 1 helochic.com, 1 help-me.today, 1 help207.me, 1 @@ -57782,6 +57730,7 @@ hilaryhutler.com, 1 hilarymundial.tk, 1 hilde.link, 1 hildebrand.group, 1 +hiledge.com, 1 hilelipc.com, 0 hilfe-bei-krebs-vechta.de, 1 hilinecreators.tk, 1 @@ -57938,7 +57887,6 @@ hispania-valencia.com, 1 hispania.ml, 1 hispanidad.tk, 1 hispasat.es, 1 -hispasys.com, 1 hisregistries.net, 1 hisregistries.org, 1 histalek.de, 1 @@ -58081,7 +58029,6 @@ hkl-gruppe.de, 1 hklbgd.org, 1 hkmap.co, 1 hkmap.com, 1 -hkmap.live, 1 hkmap.net, 1 hkno.it, 1 hkp-usa.com, 1 @@ -58234,7 +58181,6 @@ hoewler.ch, 0 hof-dreisprung.de, 1 hof-imbiss-lieske.de, 1 hof-mulin.ch, 1 -hofapp.de, 1 hoffmancorporation.com, 1 hoffmannresearch.ca, 1 hoffmanns-ballonshop.de, 1 @@ -58350,7 +58296,7 @@ holmeselectionsfl.gov, 1 holmesian.org, 1 holmeslaw.ie, 1 holmesworkholding.co.uk, 1 -holmium-laser.ru, 1 +holmium-laser.ru, 0 holmq.dk, 1 holmqvist.tk, 1 holo.ovh, 1 @@ -58391,6 +58337,7 @@ holytransaction.com, 1 holyubofficial.net, 1 holywhite.com, 1 holywr.it, 1 +holz.nu, 1 holzed.com, 1 holzschutz-holzbearbeitung.de, 1 holzspielzeug-shop.ch, 1 @@ -58721,6 +58668,7 @@ homunyan.com, 1 homyak.gq, 1 homyneeds.com, 1 homyremedies.com, 1 +honaragah.com, 1 honda2wheelersindia.com, 1 hondajoyclub.com, 1 hondapartsnow.com, 1 @@ -59058,7 +59006,6 @@ hotdogwheel.tk, 1 hotdresses.ga, 1 hote-inox.ro, 1 hotel-4-stelle.it, 1 -hotel-alan.hr, 1 hotel-altabadia.com, 1 hotel-arabba.net, 1 hotel-bella-muerte.tk, 1 @@ -61028,7 +60975,6 @@ ikkoku.de, 1 iklan-baris.gq, 1 iklan.tk, 1 iklanbaris.tk, 1 -iklipcollection.my.id, 1 iklive.org, 0 ikmx.net, 1 iknet.top, 1 @@ -62697,7 +62643,6 @@ intellective.us, 1 intellek.io, 1 intellektuaalomand.ee, 1 intelliance.eu, 1 -intellicore.cl, 1 intelligence-explosion.com, 1 intelligenetics.com, 0 intelligentcontacts.com, 1 @@ -62815,6 +62760,7 @@ internalkmc.com, 1 internally.ga, 1 international-arbitration-attorney.com, 1 international-books.org, 1 +international-friends.net, 1 international-genealogy-services.com, 1 internationalbussines.tk, 1 internationalfashionjobs.com, 1 @@ -62991,6 +62937,7 @@ invantive.be, 1 invantive.cloud, 1 invantive.co.uk, 1 invantive.com, 1 +invantive.es, 1 invantive.eu, 1 invantive.net, 1 invantive.nl, 1 @@ -63191,6 +63138,7 @@ iossifovlab.com, 1 iostream.by, 1 iosxr.de, 1 iot-alliances.com, 1 +iotac.xyz, 1 iotanodes.org, 1 iotekha.tv, 1 iotfen.com, 1 @@ -63790,7 +63738,6 @@ isramedia.tk, 1 isreedyinthe.uk, 1 isreedyinthe.us, 1 isreedyintheuk.com, 1 -issa.org.pl, 0 issaias.net, 0 issaquah.cam, 1 issasfrissa.se, 1 @@ -64104,7 +64051,6 @@ itsakerhetspodden.se, 1 itsalan.tk, 1 itsallaboutplumbing.com, 1 itsanicedoor.co.uk, 1 -itsatrap.nl, 0 itsaw.de, 1 itsayardlife.com, 1 itsbananas.life, 1 @@ -64879,6 +64825,7 @@ japannext.co.jp, 1 japanphilosophy.com, 0 japanroll.cf, 1 japansepuzzel.tk, 1 +japansm.com, 1 japantravel.tk, 1 japanwatches.xyz, 1 jape.today, 1 @@ -65315,7 +65262,6 @@ jehende.fr, 1 jehovahsays.net, 1 jej.cz, 1 jej.sk, 1 -jeka.online, 1 jekadvantage.com, 1 jekhar.com, 1 jel-tech.com, 0 @@ -65697,6 +65643,7 @@ jimmycai.com, 1 jimmycarterlibrary.gov, 1 jimmydomingo.tk, 1 jimmykey.com, 0 +jimmynelson.com, 1 jimobbs.tk, 1 jimsheatandcool.com, 1 jimslop.nl, 1 @@ -65735,7 +65682,6 @@ jirkanch-ayollar.ga, 1 jirkanch-ayollar.ml, 1 jisai.net.cn, 1 jischool.org, 1 -jiseigames.com, 1 jisnashville.gov, 1 jitendrapatro.me, 1 jitprod.com, 1 @@ -65905,7 +65851,6 @@ job.biz.tr, 1 job2day.com.ua, 1 jobalicious.nl, 1 jobbkk.com, 1 -jobbnorge.no, 1 jobbsafari.no, 1 jobbsafari.se, 1 jobcenter.tk, 1 @@ -66056,7 +66001,6 @@ johannes-sprink.de, 0 johannes-zinke.de, 1 johannes.io, 1 johannes.wtf, 1 -johannesen.tv, 1 johannfritsche.de, 1 johanpeeters.com, 1 johansf.tech, 1 @@ -66088,6 +66032,7 @@ johngallias.com, 0 johngmchenrymd.com, 1 johngreatwood.com, 1 johnhgaunt.com, 1 +johniii.co, 0 johninwood.com, 1 johnjayro.com, 1 johnjohnsons.tk, 1 @@ -67637,6 +67582,7 @@ kanag.pl, 1 kanal-c.net, 1 kanal-schaefer.de, 1 kanal-tv-haensch.de, 1 +kanalasal.id, 0 kanalbutikken.no, 1 kanaldagang.com, 1 kanapa.gq, 1 @@ -67654,7 +67600,6 @@ kandianshang.com, 1 kandofu.com, 1 kandra.com.br, 1 kandrahechiceravudu.com, 1 -kandwliquor.com, 1 kanecastles.com, 1 kanecountyil.gov, 1 kanehisa.xyz, 1 @@ -68038,7 +67983,7 @@ katrinjanke.de, 0 katscastles.co.uk, 1 katsiavarasorthopedics.gr, 1 katsifos.gr, 1 -katsunet.com, 0 +katsunet.com, 1 kattelans.de, 1 kattelans.eu, 1 kattelus.tk, 1 @@ -68408,7 +68353,6 @@ kelyan.fr, 1 kemahtx.gov, 1 kemanai.akita.jp, 1 kemand.com, 1 -kemandirian.com, 1 kemeha.tk, 1 kemerovo.gq, 1 kemerovo.ml, 1 @@ -68718,7 +68662,6 @@ kfgleasing.pl, 1 kfgsa.pl, 1 kfirba.me, 1 kfispiff.com, 1 -kfm.ink, 0 kfmhf.ca, 1 kforesund.se, 1 kfoundation.org, 1 @@ -71017,6 +70960,7 @@ kurirplus.tk, 1 kuritsa.tk, 1 kurnia.tk, 1 kurniadwin.to, 1 +kuroha.co.uk, 1 kuroinu.jp, 1 kuroisalva.xyz, 0 kuroit.com, 1 @@ -71033,7 +70977,6 @@ kurschies.de, 1 kurserne.dk, 1 kursk-otoplenie.ru, 1 kursk.cf, 1 -kurspmr.ru, 0 kurssertifikasi.com, 1 kurswahl-online.de, 1 kursy-sep.com.pl, 1 @@ -71124,6 +71067,7 @@ kvilt.dk, 1 kviskoteka.tk, 1 kvitlyr.tk, 1 kvm.ovh, 1 +kvmcloud.net, 1 kvn.tf, 1 kvnsport.ru, 1 kvso.tk, 1 @@ -71134,7 +71078,6 @@ kw.gt, 1 kwadraadtevredenheid.nl, 1 kwakkelglas.nl, 1 kwalifikacje.gov.pl, 1 -kwbresidential.com, 1 kwcolville.com, 1 kweb.ml, 1 kwedo.com, 1 @@ -71375,7 +71318,6 @@ labsector.com, 1 labsitserviss.lv, 1 labsys.xyz, 1 labtalleraudiovisual.tk, 1 -labtechsupplyco.com, 1 labussola.site, 1 labworks.org, 1 laby.link, 1 @@ -72215,6 +72157,7 @@ latherjacket.com, 1 latia.tk, 1 latiamona.com, 1 latiendawapa.com, 1 +latifahijab.com, 1 latifolia.com, 1 latinatoday.it, 1 latinmusiccollection.tk, 1 @@ -72562,7 +72505,6 @@ lc8868.net, 1 lc8881.com, 0 lc8885.com, 0 lc8887.com, 0 -lc8898.net, 0 lc891.com, 0 lc892.com, 1 lc893.com, 0 @@ -73069,7 +73011,6 @@ leger-voertuigen.tk, 1 leggyeggy.ga, 1 legible.es, 1 legilimens.de, 1 -legiofte.com, 1 legioiedifrancy.com, 1 legion.ge, 1 legion.hosting, 1 @@ -73187,7 +73128,6 @@ lemco.dk, 1 lemediajustice.fr, 1 lemediateur-creditagricole-nord-est.com, 1 lemfam.ru, 1 -lemgstudio.com, 1 lemilane.it, 1 leminhduong.com, 1 lemitti.com, 1 @@ -74227,6 +74167,7 @@ limitshareers.ga, 1 limitshareest.ga, 1 limiturls.ga, 1 limnt.cn, 1 +limo.pl, 1 limo.sh, 1 limoairporttoronto.net, 1 limoforsale.com, 1 @@ -74531,6 +74472,7 @@ lionchita.tk, 1 lionessport.com, 1 lionhosting.nl, 1 lionland.tk, 1 +lionlyrics.com, 1 lionsk.tk, 1 lioprog.com, 1 lioraaja.com, 1 @@ -74643,7 +74585,7 @@ listkeeper.io, 1 listlockr.com, 1 listminut.be, 1 listoyou.fr, 1 -listratenkov.com, 1 +listratenkov.com, 0 lists.fedoraproject.org, 1 lists.mayfirst.org, 0 lists.stg.fedoraproject.org, 1 @@ -75244,6 +75186,7 @@ lodni.site, 1 lodongxu.com, 1 lodosswar.tk, 1 lodus.io, 1 +loe.lviv.ua, 1 loekkoopmans.tk, 1 loeklommers.nl, 1 loenshotel.de, 1 @@ -75846,7 +75789,6 @@ loueurmeublegestion.expert, 1 louhomeworkouts.com, 1 louisa.tk, 1 louisacountyia.gov, 1 -louisahoppe.de, 1 louisapolicefoundation.com, 1 louisapolicefoundation.org, 1 louiscap.co, 1 @@ -75945,7 +75887,6 @@ lovemanagementaccounts.co.uk, 1 lovemasjid.com, 1 lovememories.cf, 1 lovemen.cc, 1 -lovemesomegadgets.com, 1 lovemiku.info, 1 lovemoon.tk, 1 lovemoon.xyz, 1 @@ -76404,7 +76345,6 @@ lumweb.tk, 1 lumy.bzh, 1 luna-corazon.net, 1 luna-love.net, 1 -luna-zen.fr, 1 luna.ro, 1 lunaballoonclub.com.au, 1 lunaburner.ml, 1 @@ -77449,6 +77389,7 @@ maisonmere.group, 1 maisproduzida.com.br, 1 maistempo.com.br, 1 maisvitaminas.com.br, 1 +maisy.io, 1 maitemerino.net, 1 maitheme.com, 1 maiti.info, 1 @@ -77551,7 +77492,6 @@ makowitz.cz, 1 makrama.shop, 1 makromedikal.com.tr, 1 maksa.ga, 1 -maksatmoda.com, 1 maksima.kh.ua, 1 maksimmrvica.tk, 1 maksmedia.tk, 1 @@ -77805,7 +77745,6 @@ manderstam.com, 1 mandiblackburnphoto.com, 1 mandilabeachhotel.com, 1 mandolinexpert.com, 1 -mandospersonalizados.com, 1 mandospersonalizados.es, 1 mandrill.fr, 1 manducoshop.com, 1 @@ -78013,7 +77952,6 @@ manyproservices.com, 1 manytubes.ga, 1 manyzero.ml, 1 manzanita-nsn.gov, 1 -manzoorahmed.com, 1 manzunadh.com, 1 maomihz.com, 1 maone.net, 1 @@ -78542,6 +78480,7 @@ marrakech-camel-trips.com, 1 marriage-shrine.jp, 1 marriageinchrist.com, 1 marrickvilleapartments.com.au, 1 +marron-dietrecipe.com, 1 marronniergate.com, 1 marropax.com, 1 marry-fox.com, 1 @@ -78854,6 +78793,7 @@ masterofallscience.com, 1 masterofazoth.tk, 1 masterofbytes.ch, 1 masterpassword.org, 1 +masterpizzaiolo.com.br, 1 masterplc.com, 1 masterpro1.ru, 1 masterquest.tk, 1 @@ -79163,6 +79103,7 @@ maudfourier.com, 1 mauditeboisson.tk, 1 maudok.gov, 1 mauhalito.tk, 1 +mauicharm.com, 1 mauldincookfence.com, 1 mauletsmallorca.tk, 1 maumovie.ml, 1 @@ -79283,7 +79224,7 @@ maxipro.ru, 1 maxiservak.ml, 1 maxisito.it, 1 maxivisor.ga, 1 -maxjacobs.com.au, 0 +maxjacobs.com.au, 1 maxkaul.de, 1 maxlaumeister.com, 1 maxley.yachts, 1 @@ -79313,6 +79254,7 @@ maxundlara.at, 1 maxundlara.com, 1 maxundlara.eu, 1 maxundlara.org, 1 +maxuniverse.de, 1 maxus.tk, 1 maxvaluedeals.com, 1 maxverboom.nl, 1 @@ -79332,7 +79274,6 @@ mayamaibach.org, 1 mayamushrooms.co.uk, 1 mayanet.tk, 1 mayarocabletv.com, 1 -mayaroconstituency.org, 1 mayashoefke.tk, 1 mayavi.co.in, 1 maybeonline.de, 1 @@ -79673,7 +79614,6 @@ meat.org.uk, 1 meat.tk, 1 meatfoods.com.br, 1 meatfreecarnivore.com, 1 -meavagas.com, 1 meayne.ddns.net, 0 mebehliyetsinavsorulari.com, 1 mebel-dnr.ml, 1 @@ -80205,10 +80145,10 @@ medinetz-halle.de, 1 mediniti.com, 1 medino.com, 1 medinorte.es, 1 -medinside.ch, 0 -medinside.li, 1 -medinsider.ch, 1 -medinsider.li, 1 +medinside.ch, 1 +medinside.li, 0 +medinsider.ch, 0 +medinsider.li, 0 medipost.co.za, 1 medirota.com, 1 medisense.tk, 1 @@ -80497,7 +80437,6 @@ mejor-broker.com, 1 mejorator.net, 1 mejorator.org, 1 mejorespatineteselectricos.es, 1 -mejoreswebscitas.com, 1 mejorfiltrodeagua.com, 1 mejorlimpiafondos.com, 1 mejorwork.com, 0 @@ -80811,7 +80750,7 @@ mercadolibre.com.uy, 1 mercadolibre.com.ve, 1 mercadolibrefz.tk, 1 mercadolivre.com.br, 1 -mercadopago.cl, 0 +mercadopago.cl, 1 mercadopago.com, 1 mercadopago.com.ar, 1 mercadopago.com.br, 1 @@ -81183,6 +81122,7 @@ mexicom.org, 1 mexicosrit.tk, 1 mexior.nl, 1 meyafloors.com, 1 +meyateks.com, 1 meydan.tv, 1 meyer-horn.de, 1 meyeraviation.com, 1 @@ -81721,7 +81661,7 @@ mikemcgeephotography.com, 1 mikemooresales.com, 1 mikeowens.us, 1 mikeprocopio.com, 1 -mikerichards.email, 0 +mikerichards.email, 1 mikerichards.gallery, 1 mikerichards.photography, 1 mikerichards.photos, 1 @@ -82187,7 +82127,6 @@ minttang.cn, 0 minu.link, 1 minube.co.cr, 1 minucaelena.com, 1 -minul.in, 1 minungdomsbolig.dk, 1 minutashop.ru, 1 minuteflightdeals.com, 1 @@ -82337,6 +82276,7 @@ misreports.in, 1 miss-inventory.co.uk, 1 miss-platinum.net, 1 miss.com.tw, 1 +miss.sh, 1 missadrastea.org, 1 missakari.com, 1 missaocadastrobv.com.br, 1 @@ -82502,7 +82442,6 @@ mivzakim.tv, 1 mivzaklive.co.il, 0 mix-books.ga, 1 mix-channel.ml, 1 -mix-master.fr, 1 mix-recruit.jp, 1 mix.my, 1 mixandplay.tk, 1 @@ -82955,6 +82894,7 @@ modbom.com.tw, 1 modcover.com, 1 modd.com.au, 1 modded-minecraft-server-list.com, 1 +moddedphones.com, 1 modderday.com, 1 moddescargas.com, 0 modding-forum.com, 1 @@ -83517,7 +83457,6 @@ monzatoday.it, 1 monzo.me, 1 monzo.tk, 1 moo.la, 1 -mooana.net, 1 moocat.me, 1 moodfoods.com, 1 moodforsex.com, 1 @@ -84278,6 +84217,7 @@ msfishingcharter.com, 1 msgallery.tk, 1 msgmon.com, 1 msgr.com, 1 +msh100.uk, 1 msha.gov, 1 mshemailmarketer.com.au, 1 mshgame.ga, 1 @@ -84424,6 +84364,7 @@ mtz-info.gq, 1 mtz-sng.gq, 1 mtz80-mtz82.gq, 1 mtzbelarus.gq, 1 +mtzfederico.com, 1 mu-sigma.com, 1 mu-thunder.online, 1 mu-venezuela.tk, 1 @@ -84727,6 +84668,7 @@ musacomo.com, 1 musafir-aceh.tk, 1 musasionline.com, 1 musaslush.com, 1 +musavirlik.net, 1 musavirsahan.com, 1 muscatinecountyiowa.gov, 1 muscle-tg.com, 1 @@ -84941,7 +84883,6 @@ mvib.net, 1 mviess.de, 1 mvisioncorp.com, 1 mvistatic.com, 1 -mvmm.fr, 1 mvno.io, 1 mvorisek.com, 1 mvorisek.cz, 1 @@ -85225,6 +85166,7 @@ mycrowdstack.com, 1 mycrypnet.io, 1 mycustomwriting.com, 1 mycutebee.com, 1 +mydabb.com, 1 mydais.org, 1 mydarkness.cf, 1 mydarksite.tk, 1 @@ -85285,6 +85227,7 @@ myeisenbahn.de, 1 myekon.com, 1 myelebest.ga, 1 myelka.tk, 1 +myemailadd.net, 1 myemailsender.tk, 1 myeml.net, 1 myempire.com.au, 1 @@ -85389,7 +85332,6 @@ myhmz.bid, 1 myhollywoodnews.com, 1 myhome-24.pl, 1 myhomeworkpapers.com, 1 -myhomice.de, 1 myhoor.ga, 1 myhostname.net, 1 myhotgirls.ml, 1 @@ -85580,7 +85522,6 @@ myownconference.ru, 1 myowndisk.com, 1 myowndisk.net, 1 mypaperdone.com, 1 -mypaperpress.com, 1 mypaperwriter.com, 1 myparadigm.com, 1 mypartnernews.com, 1 @@ -85763,7 +85704,6 @@ mysqldump-secure.org, 1 myssl.com, 1 mystaffonline.com, 1 mystagic.cloud, 1 -mysteriousbeans.com, 1 mysteriouscode.com, 1 mysteriouscode.io, 1 mystery-box.cf, 1 @@ -85941,7 +85881,6 @@ n2ray.xyz, 1 n2z.net, 1 n36533.com, 1 n37.co, 1 -n3oxid.fr, 1 n3rd.eu, 1 n3rd0rama.tk, 1 n3t.ch, 1 @@ -86758,6 +86697,7 @@ nbrain.de, 1 nbrii.com, 1 nbriresearch.com, 1 nbrown.us, 1 +nbtc.com, 1 nbwp.uk, 1 nc-beautypro.fr, 1 nc-formation.fr, 1 @@ -86855,6 +86795,7 @@ ndy.sex, 1 ne-games.com, 1 ne-on.org, 1 ne.ax, 1 +ne.jo, 1 nea-security.com, 1 nea.gov, 1 nealvorusphd.com, 1 @@ -87695,7 +87636,6 @@ newguidance.ch, 0 newhamyoungbloods.co.uk, 1 newholland.tk, 1 newhomedesign.tk, 1 -newhope.me, 1 newhopeplacement.com, 1 newillusion.tk, 1 newind.info, 1 @@ -88143,7 +88083,7 @@ nicheosala.xyz, 1 nicher.tk, 1 nichesite.gq, 1 nichetest.tk, 1 -nichevideogalore.com, 1 +nichevideogalore.com, 0 nichi.co, 1 nichijou.com, 1 nichijou.org, 1 @@ -88186,7 +88126,6 @@ nickmorris.name, 0 nicknames.tk, 1 nicknamez.tk, 1 nickoticko.tk, 1 -nickpavel.com, 1 nickplotnek.co.uk, 1 nickrickard.co.uk, 1 nickrickard.uk, 1 @@ -88308,7 +88247,7 @@ nigelvm.com, 1 nigeriaimagefoundation.org, 1 nigeriaportal.tk, 1 nigglipads.com.br, 1 -niggo.eu, 1 +niggo.eu, 0 night-academy.pl, 1 night2stay.cn, 1 night2stay.de, 1 @@ -88665,7 +88604,6 @@ nlagstage.in, 1 nlap.ca, 0 nlc-business.com, 1 nlcpakistan.org, 1 -nlgr.de, 1 nlib.ee, 1 nllboard.co.uk, 1 nlleisure.co.uk, 1 @@ -89923,7 +89861,6 @@ nyla.life, 0 nylasercenter.com.pl, 1 nylevemusic.com, 1 nyloc.de, 1 -nylonfeetporn.com, 0 nym.at, 1 nyoka.io, 1 nyoka.ru, 1 @@ -90466,7 +90403,7 @@ off-rabota.tk, 1 off.net.mk, 1 offandonagain.org, 1 offbeat-music.com, 1 -offbeatbits.com, 1 +offbeatbits.com, 0 offbyinfinity.com, 1 offcasesstore.com, 1 offenekommune.de, 1 @@ -90741,6 +90678,7 @@ okotelecom.ml, 1 okotoksbeach.ca, 1 okpo.tk, 1 okqubit.net, 1 +okr.pub, 1 okremarketing.com, 1 oksafe-t.org, 1 oksanakazakova.tk, 1 @@ -90816,8 +90754,8 @@ oldriver.tk, 1 oldroadswhippets.tk, 1 oldrun.is, 1 oldrup.dk, 1 +oldrup.net, 1 oldscans.tk, 1 -oldschool-criminal.com, 1 oldschool.wiki, 1 oldshara.tk, 1 oldskoolreviews.tk, 1 @@ -90863,6 +90801,7 @@ olgiati.org, 0 olgui.net, 0 olgun.eu, 1 olhcparish.net, 1 +olibarcenas.es, 0 olibomb.cc, 1 olidetrim.com, 1 oliebollenbakservice.nl, 1 @@ -90984,7 +90923,6 @@ omandatapark.com, 1 omangrid.com, 1 omanhr.cf, 1 omanmegadeals.com, 1 -omaosurveys.org, 0 omarans.com, 1 omarbaba.shop, 1 omarhussien.tk, 1 @@ -91230,7 +91168,6 @@ onescience.tk, 1 oneshotmediakc.com, 1 oneso.win, 1 onespan.com, 0 -onesports.cz, 1 onestarclassics.com, 1 onestasolar.com, 1 onestepbooks.gq, 1 @@ -91563,6 +91500,7 @@ ooo.xxx, 1 oooh.events, 1 ooonja.de, 1 ooooo.cz, 1 +ooove.ru, 1 oopsis.com, 1 oorbellen.nl, 1 oortcast.com, 1 @@ -91826,6 +91764,7 @@ opskiwi.work, 1 opsmate.com, 0 opsnotepad.com, 1 opspedia.id, 1 +opssurvey.com, 1 opstory.com, 1 opstrengning.tk, 1 opsystems.bg, 1 @@ -91969,7 +91908,6 @@ orbitpro.co, 1 orbits.ga, 1 orbitum.space, 1 orbu.net, 1 -orby.ro, 1 orca.pet, 0 orcada.co, 1 orcahq.com, 1 @@ -92407,7 +92345,6 @@ othrys.net, 1 oticasvisao.net.br, 1 otimismoemrede.tk, 1 otinane.eu, 1 -otiumtech.com, 1 otixz.com, 1 otkm-stuttgart.tk, 1 otmns.net, 1 @@ -92510,6 +92447,7 @@ ourlink.tk, 1 ourls.win, 0 ourmarket.live, 1 ournewsindia.ga, 1 +ouroboros.world, 0 ourocg.cn, 1 ouronyx.com, 0 ourpharmacynetwork.com, 1 @@ -92983,7 +92921,6 @@ pacifictechnologie.com, 1 pacifictilkin-occasions.be, 1 pacifique-web.nc, 1 pacifistka.tk, 1 -pacisof.com, 1 pack-haus.de, 1 pack.rocks, 1 pack183.com, 1 @@ -93225,7 +93162,6 @@ paleonora.tk, 1 paleontologiadebagua.tk, 1 paleorecipepro.com, 1 paleoself.com, 1 -paleoso.com, 1 paleosquawk.com, 1 palermoantagonista.tk, 1 palermofc.com, 1 @@ -93501,7 +93437,6 @@ parachute70.com, 0 parachutes.tk, 1 parachuteteam.co.uk, 1 paracomer.es, 1 -paradependentesquimicos.com.br, 0 paradex.io, 1 paradies-baar.ch, 1 paradiesgirls.ch, 1 @@ -93691,6 +93626,7 @@ parmatoday.it, 1 parmels.com.br, 1 parmoli.tk, 1 parnassys.net, 1 +parniplus.com, 1 parnizaziteksasko.cz, 1 parodesigns.com, 1 paroisses-theix-surzur.com, 1 @@ -93703,7 +93639,6 @@ parque-batlle.tk, 1 parquebatlle.tk, 1 parquettista.milano.it, 1 parquettista.roma.it, 1 -parratennis.com.au, 1 parrocchiadimeana.tk, 1 parrocchiamontevecchia.it, 1 parroquiacorazondemaria.tk, 1 @@ -93780,7 +93715,6 @@ partydj.be, 1 partyevents.tk, 1 partyhireliverpool.co.uk, 1 partykanal.cz, 1 -partymagasin.se, 1 partypearl.de, 1 partypeeps.tk, 1 partyphoto.tk, 1 @@ -94742,7 +94676,6 @@ pentaqu.in, 1 pentaquin.com, 1 pentaquin.net, 1 pentatonik.tk, 1 -pentekdograma.com, 1 pentest.blog, 1 pentesterlab.com, 1 pentestit.com, 1 @@ -94900,7 +94833,6 @@ perfumerie.tk, 1 perfumes.com.br, 1 perfumesweb.com.br, 1 perfumki.tk, 1 -perfwp.com, 1 pergam.by, 1 pergam.kz, 1 pergamentka-apartments.cz, 1 @@ -95450,7 +95382,6 @@ phg-eg.com, 1 phget.com, 1 phialo.de, 1 phibureza.com, 1 -phigrupopolideportivo.es, 1 phihq.com, 0 phil-dirt.com, 1 phil-phillies.com, 1 @@ -95583,6 +95514,7 @@ phonet.tk, 1 phonetika.org, 1 phonetrace.tk, 1 phonetrack.tk, 1 +phonex.bg, 1 phoneyourselfers.ga, 1 phoneyourselfest.ga, 1 phonix-company.fr, 1 @@ -95812,7 +95744,6 @@ piccolinokids.gr, 1 piccolo-parties.co.uk, 1 picdefacer.com, 1 pichainlabs.com, 1 -pichlerei.at, 1 pick.aw, 1 pick150.hu, 1 picka.gift, 1 @@ -95934,6 +95865,7 @@ pigfox.com, 0 pigop.com, 1 pigslv.com, 1 pigzilla.co, 1 +pihaar.de, 1 pii.bz, 1 piizapp.com, 1 pijamasbichopreguica.com.br, 1 @@ -96084,7 +96016,6 @@ pinnoto.org, 1 pinoservers.tk, 1 pinot.it, 1 pinoyreal.com, 1 -pinoyreal.team, 0 pinoyseoservices.com, 1 pinoysurvey.com, 1 pinoytambayan.ga, 1 @@ -96530,7 +96461,6 @@ planningcenter.com, 1 planningsagenda.nl, 1 plano.gq, 1 planodesaude.net.br, 1 -planolowcarb.com, 1 planosvivointernet.com.br, 1 planosylicencias.de, 1 planresto.com, 1 @@ -97152,7 +97082,6 @@ pogljad-brest.tk, 1 pogodavolgograd.tk, 1 pogodok.tk, 1 pogomate.com, 1 -pogoswine.com, 1 pogotowie-komputerowe.tk, 1 pogotowiekomputeroweolsztyn.pl, 1 pogrebisky.net, 1 @@ -97190,7 +97119,6 @@ pointzipers.ga, 1 pointzipest.ga, 1 poiru.net, 1 poisk-books.ml, 1 -poisk.kharkov.ua, 1 poiskdru.ga, 1 poiskkladov.tk, 1 poiskkristinity.ml, 1 @@ -97418,7 +97346,6 @@ polypane.rocks, 1 polypharma90.com, 1 polyr.xyz, 1 polyring.ch, 1 -polytarian.com, 1 polytechecosystem.vc, 1 polytekniskforening.dk, 1 pomadgw.xyz, 1 @@ -97678,7 +97605,6 @@ pornxxnxx.com, 1 pornxxxvideos.xyz, 1 porny.xyz, 1 porodin.ml, 1 -porondam.lk, 1 pororoca.xyz, 1 porroserver.tk, 1 pors-sw.cz, 1 @@ -98007,6 +97933,7 @@ powerbux.tk, 1 powercloud.technology, 1 powercod.tk, 1 powercomputers.nl, 1 +powercv.ro, 1 poweredbyiris.nl, 1 powerentertainment.tv, 1 powerfiler.com, 1 @@ -98622,6 +98549,7 @@ princelishan.com.tw, 1 princemathew.tk, 1 princemolak.ga, 1 princes-st.org.nz, 1 +princesparktouch.com, 1 princess-vip-escort.com, 1 princess.software, 1 princessbackpack.de, 1 @@ -98841,7 +98769,6 @@ proacksecurity.com, 1 proact-it.co.uk, 1 proactive.run, 1 proactivenews.ml, 1 -proactivestructuresolutions.com, 1 proadvanced.com, 1 proagile.se, 1 proalist.com, 1 @@ -99177,6 +99104,7 @@ proklimat.pro, 1 prolens-lankaran.tk, 1 prolinos.de, 1 prolocofrascarolo.tk, 1 +prolocovalsambro.com, 0 prologic.bg, 1 promajna.tk, 1 promax.nl, 1 @@ -99513,7 +99441,6 @@ prushka.gq, 1 prushka.ml, 1 prushka.tk, 1 pruve.it, 1 -prvcy.one, 1 prvnirodinna.cz, 1 prwid.com, 1 prwid.gov, 1 @@ -99632,9 +99559,6 @@ psngr1.com, 1 psochecker.com, 1 pson.ninja, 1 psono.pw, 1 -psoppc.com, 1 -psoppc.info, 1 -psoppc.net, 1 psoppc.org, 1 psoriasischecker.com, 1 pspapershow.ga, 1 @@ -99760,13 +99684,13 @@ ptgoldensun.com, 1 ptheophanidis.com, 1 pthsec.com, 1 ptit-trocoeur.fr, 1 -ptk-svarka.ru, 0 ptlibrary.ml, 1 ptltrade.com, 1 ptm.ro, 1 ptmarquees.ie, 1 ptmco.org, 1 ptrbrs.nl, 1 +ptrl.ws, 1 ptron.org, 1 ptrt.xyz, 1 ptsadvokat.cf, 1 @@ -100163,7 +100087,6 @@ pycckue.tk, 1 pychef.com, 1 pycrc.org, 1 pycrypto.org, 1 -pycycle.info, 1 pydotamisa.tk, 1 pydrocsid.ml, 1 pygarage.com, 0 @@ -101126,7 +101049,6 @@ radiocusco.tk, 1 radiodance.tk, 1 radiodarkwolf.tk, 1 radiodeluxe.ml, 1 -radiodetali-gold.ru, 1 radiodeutsch.com, 1 radiodevrijheid.tk, 1 radiodiagonal.tk, 1 @@ -102027,7 +101949,6 @@ readyscif.com, 1 readysell.net, 1 readysetscif.com, 1 readystep.ga, 1 -readytobattle.net, 0 readytongue.com, 0 readywithresourcestn.gov, 1 reaff.com, 1 @@ -102323,6 +102244,7 @@ red-trigger.net, 1 red-wine.tk, 1 red031000.com, 1 red1it.net, 1 +red2fred2.com, 1 redable.hosting, 1 redable.nl, 1 redacted.finance, 1 @@ -103587,6 +103509,7 @@ rgdt.tk, 1 rgf.be, 1 rgfundraising.com, 1 rggraphics.mx, 1 +rghost.net, 1 rgiohio.com, 1 rgpd-elearning.com, 1 rgpdkit.io, 1 @@ -103696,6 +103619,7 @@ riccardopiccioni.it, 1 riccy.org, 1 riceadvice.info, 1 ricecountymn.gov, 1 +ricettesemplicieveloci.altervista.org, 1 rich-good.com, 0 richadams.me, 1 richandsteph.co.uk, 1 @@ -103737,7 +103661,6 @@ richie.cloud, 1 richie.fi, 1 richie.network, 1 richie.pm, 1 -richie.tech, 1 richieheijmans.com, 1 richieheijmans.email, 1 richieheijmans.eu, 1 @@ -105105,6 +105028,7 @@ rrdtool.com, 1 rrg-partner.ch, 0 rritv.com, 1 rrmac.ml, 1 +rrmiran.com, 1 rro.rs, 1 rrssww.space, 1 rrteam.de, 1 @@ -105127,7 +105051,6 @@ rsauget.fr, 1 rsb.net, 1 rsblake.net, 1 rsc-cronenberg.de, 1 -rsc.by, 1 rsc.wiki, 1 rscturmoil.com, 1 rsdisedezzari.it, 1 @@ -105947,6 +105870,7 @@ safatech.me, 1 safc.tk, 1 safeacs.com, 1 safeadmin.ga, 1 +safeandsecureserver.com, 1 safearth.training, 1 safeathomeohio.gov, 1 safebaseflorida.com, 1 @@ -105981,7 +105905,6 @@ safejourney.education, 1 safeme.ga, 1 safeme.gq, 1 safemt.gov, 1 -safenetwork.it, 1 safeo.fr, 1 safeocs.gov, 1 safeplay.co, 1 @@ -106257,6 +106180,7 @@ saledump.nl, 1 saleem.cf, 1 salegor.tk, 1 saleh4unraid.cyou, 1 +salekaz.ru, 1 salemma.gov, 1 salensmotors-usedcars.be, 1 salento-nostro.tk, 1 @@ -106994,7 +106918,6 @@ saturne.tk, 1 saturnjump.com, 1 saturuang.id, 0 satyamshivamsundaram.in, 1 -sauber.dk, 1 saubooks.tk, 1 saucelabs.com, 1 saucy.io, 1 @@ -107045,7 +106968,6 @@ savannahsidewalktours.com, 1 savannapro.vn.ua, 1 savant-dagen.nl, 1 savantcare.com, 1 -savasanadam.com, 1 savatha.tk, 1 savbus.com, 1 savbus.net, 1 @@ -107338,6 +107260,7 @@ schaper-sport.com, 1 schastie.ml, 1 schat.top, 1 schatderer.com, 1 +schatderer.xyz, 1 schattenwoelfe.tk, 1 schatzibaers.de, 1 schauergroup.com, 1 @@ -107451,7 +107374,6 @@ schnuckenhof-wesseloh.de, 1 schnyder-werbung.ch, 0 schody-rozycki.pl, 1 schoenstatt-fathers.link, 1 -schoenstatt-fathers.us, 1 schoenstatt.link, 1 schoepski.de, 1 schoffelcountry.com, 1 @@ -107622,7 +107544,6 @@ schwertkriege.de, 1 schwienbacher-karl.it, 1 schwifty.cloud, 1 schwimmschule-kleine-fische.de, 1 -schwimmschulen.de, 1 schwinabart.com, 1 schwingen.net, 0 schwinger.me, 1 @@ -107702,7 +107623,6 @@ sconecloud.com, 1 scontomio.com, 1 scooby.ml, 1 scoolcode.com, 1 -scoolio.de, 1 scoop6.co.uk, 1 scoopcake.com, 1 scoopgalleries.com, 1 @@ -107837,7 +107757,6 @@ screeningxchange.com, 1 screenmachine.com, 1 screenpublisher.com, 1 screensizemap.com, 1 -screenstotaalshop.nl, 1 screenwalker.de, 1 screenwriter.tk, 1 screenzy.io, 1 @@ -108842,7 +108761,6 @@ seowork.tk, 1 seozel.tk, 1 sep-online.com.pl, 1 sep.bydgoszcz.pl, 1 -sep.cc, 1 sep.jgora.pl, 1 sep.rzeszow.pl, 1 sep.tarnobrzeg.pl, 1 @@ -110596,6 +110514,7 @@ significado.origem.nom.br, 1 significadodenombres.net, 1 significados.com, 1 significados.com.br, 1 +significantbanter.com, 1 signing-milter.org, 1 signing.tools, 1 signinwithmc.com, 1 @@ -110982,7 +110901,6 @@ simplyfitperth.com.au, 1 simplyfixit.co.uk, 1 simplyheadwear.com.au, 1 simplyhelen.de, 1 -simplyirfan.com, 1 simplyjet.tk, 1 simplymeatsmoking.com, 1 simplymidget.tk, 1 @@ -111007,10 +110925,12 @@ simsnieuws.nl, 1 simstarstyle.tk, 1 simstime.net, 1 simulfund.com, 0 +simulhost.com, 1 simulise.cloud, 1 simulise.com, 1 simulise.help, 1 simulping.com, 1 +simulus.education, 1 simulus.hr, 1 simulus.technology, 1 simumiehet.com, 1 @@ -111811,6 +111731,7 @@ slb.ru, 1 slbknives.com, 1 slc.is, 0 slcdn.net, 1 +sld08.com, 1 sldev.ovh, 1 sldlcdn.com, 1 slechtereview.nl, 1 @@ -112006,7 +111927,6 @@ smalltunepress.tk, 1 smallville.tk, 1 smallville25.tk, 1 smallwhitebear.ga, 1 -smaltimento-rifiuti.com, 1 smaltimento-rifiuti.org, 1 smaltimento.caserta.it, 1 smaltimento.milano.it, 1 @@ -112104,7 +112024,6 @@ smartlend.se, 1 smartliferd.ml, 1 smartlinecomputers.nl, 1 smartlink.sk, 1 -smartlocksmith.com, 1 smartlogreturns.com, 0 smartlogstock.com, 0 smartlogtower.com, 0 @@ -114400,7 +114319,7 @@ ss64.org, 1 ss6729.co, 1 ss6729.com, 0 ss6957.co, 1 -ss9188.com, 1 +ss9188.com, 0 ss9288.com, 0 ss9297.co, 1 ss9397.com, 1 @@ -114968,6 +114887,7 @@ steamgifts.com, 1 steamid.net, 1 steamid.tools, 1 steamkeyget.ga, 1 +steamlevelmarket.com, 1 steamold.com, 0 steamosaic.com, 1 steampress.io, 1 @@ -115458,7 +115378,6 @@ stockx.com, 1 stockyards.com, 1 stocp.org, 1 stodieck.com, 1 -stodrive.com, 1 stoeckel.info, 0 stoeco.net, 1 stoemp.gent, 1 @@ -116088,7 +116007,6 @@ studiovalore.com, 1 studiovaud.com, 0 studioxii.com, 1 studiozef.tk, 1 -studiozelden.com, 1 studipad.de, 1 studipro-formation.fr, 1 studipro-marketing.fr, 1 @@ -116873,7 +116791,6 @@ surgicalassociateswny.com, 1 surgicalresourcesgroup.com, 1 surgispa.net, 1 surialternat.tk, 1 -suricate.ru, 1 surikov.tk, 1 suriname.tk, 1 surl.win, 1 @@ -117283,6 +117200,7 @@ swissvanilla.com, 1 swisswebhelp.ch, 1 swissxperts.ch, 1 switch-defekt.de, 1 +switch-trader.com, 1 switchassur.fr, 1 switchboard.lgbt, 1 switchbyte.nl, 1 @@ -117987,7 +117905,6 @@ takuma.com, 1 takumi-s.net, 1 takusan.ru, 1 takuse.cf, 1 -takuto.de, 0 takysoft.tk, 1 takzetak.sk, 1 talado.gr, 0 @@ -118158,7 +118075,6 @@ tango-ouest.com, 0 tango-querida.tk, 1 tango.berlin, 1 tangoalpha.co.uk, 1 -tangovolcaniqueduvelay.fr, 1 tangsisi.com, 1 tangyue.date, 1 tangzhao.net, 1 @@ -118329,7 +118245,6 @@ tartufomajella.it, 1 tarugo.net.br, 1 taruntarun.net, 1 tarus.gq, 1 -tarvoo.com, 1 tarzanka.ml, 1 tas.best, 1 tas2580.net, 0 @@ -118916,7 +118831,6 @@ techguides.tk, 1 techgup.com, 1 techhackhome.tk, 1 techhappy.ca, 1 -techideations.com, 1 techie-show.com, 1 techiecomputers.com, 1 techiehall.com, 1 @@ -119787,7 +119701,6 @@ tetrimus.com, 1 tetrisponse.io, 1 tetsua.com, 1 tetsudo.jp.net, 1 -tetsufan.com, 1 tetweb.ir, 1 teu-fel.com, 1 teufel-cloud.ddns.net, 1 @@ -120301,7 +120214,6 @@ thecook.com.co, 1 thecoredublin.tk, 1 thecorianderkitchen.com, 1 thecostymusic.tk, 1 -thecotsworth.com, 1 thecoverlot.com, 1 thecovky.gov, 1 thecowboy.cafe, 1 @@ -120747,6 +120659,7 @@ thenation.tk, 1 thenational.academy, 1 thenaturalpath.co.nz, 1 theneatgadgets.com, 1 +thenerdic.com, 1 thenest.se, 1 thenetw.org, 1 thenew3rs.org, 1 @@ -121587,7 +121500,6 @@ thuviensoft.net, 1 thuyetphapmoi.com, 1 thvideo.tv, 1 thw-bernburg.de, 1 -thw-jugend-muenchen-west.de, 1 thwebdesigns.com, 1 thwiki.cc, 1 thxandbye.de, 1 @@ -121632,6 +121544,7 @@ tianyis.net, 1 tianyou-ecjtu.com, 1 tiaria.id, 1 tiaskipin.tk, 1 +tiavoo.com, 1 tib1.com, 1 tibber.com, 1 tibberdev.com, 1 @@ -122062,7 +121975,6 @@ tipocloud.cf, 1 tipoftheday.tips, 1 tipplist.com, 1 tipps-fuer-den-haushalt.de, 1 -tippytoad.com, 1 tipranks.com, 1 tips4gamers.com, 1 tips4india.tk, 1 @@ -122245,7 +122157,6 @@ tmcreationweb.com, 1 tmdb.biz, 1 tmeoworld.tk, 1 tmf.ru, 1 -tmf22.ru, 1 tmhanoi.com, 1 tmheatingcooling.com, 1 tmhr.moe, 1 @@ -122407,7 +122318,6 @@ todobus.tk, 1 todobuscadores.tk, 1 todocracy.com, 1 todocruces.com, 1 -tododecorazon.com, 1 tododescarga.tk, 1 todoescaperooms.com, 1 todoescine.com, 1 @@ -122851,7 +122761,6 @@ top10mountainbikes.info, 1 top4shop.de, 1 top9.fr, 1 topa.tk, 1 -topacademy.shop, 1 topan.tk, 1 topanimecharacters.com, 1 topanlage.de, 1 @@ -123083,7 +122992,7 @@ torrba.tk, 1 torrecilladelaabadesa.tk, 1 torreconta.pt, 1 torrededonmiguel.tk, 1 -torremarsalou.com, 0 +torremarsalou.com, 1 torremocha.eu, 1 torrent.fedoraproject.org, 1 torrent.is, 1 @@ -123122,6 +123031,7 @@ tortocan.com, 1 tortoises-turtles.com, 1 tortuga.ga, 1 tortugan.com.br, 1 +torwart-jugend.de, 1 tosainu.com.br, 1 tosatopsicologabologna.com, 1 tosbourn.com, 1 @@ -123882,7 +123792,6 @@ traumobjekte.com, 1 traumobjekte.info, 1 traumschwingen.de, 1 traumtrauringe.de, 1 -traumwerker.com, 1 traut.cloud, 1 travador.com, 1 trave.africa, 1 @@ -124084,7 +123993,6 @@ tree.gdn, 1 tree0.xyz, 1 treebaglia.xyz, 1 treefarms.net.au, 1 -treefelling-durban.co.za, 1 treefellingcenturion.co.za, 1 treehorn.nl, 1 treehousebydesign.com, 1 @@ -124523,7 +124431,6 @@ true-itk.de, 1 trueachievements.com, 1 trueasia.ga, 1 truecircumcision.tk, 1 -truecosmos.com, 1 truecrimedaily.com, 1 truedarkness.tk, 1 trueduality.net, 1 @@ -124703,7 +124610,6 @@ tryfrontline.cloud, 1 tryfunky.com, 1 tryhard.cz, 1 tryhexadecimal.com, 1 -tryin.cz, 1 tryingtotakeoversweden.tk, 1 tryingtotakeovertheworld.tk, 1 tryitonline.net, 1 @@ -124748,7 +124654,6 @@ tsai.com.de, 1 tsakanakis.tk, 1 tsaro.io, 1 tsatestprep.com, 1 -tsc.tax, 1 tscampus.online, 1 tschuermans.be, 0 tscinsurance.com, 1 @@ -124949,7 +124854,6 @@ tuitle.com, 1 tuja.hu, 1 tujardin.casa, 1 tujunfang.com, 1 -tukaraokeonline.com, 1 tukdesigns.com, 1 tukebab.com, 1 tuketicidergisi.com, 1 @@ -125396,12 +125300,12 @@ twk95.com, 1 twl-clan.tk, 1 twlan.org, 1 twlitek.com.tw, 1 -twmanager.tk, 1 twmartin.codes, 1 two-step-verification.solutions, 1 twoandahalfvan.eu, 1 twobitbusker.com, 1 twobrothersbbq.com, 0 +twocatsinacaravan.xyz, 1 twocornertiming.com, 1 twodadsgames.com, 1 twoef.co.uk, 1 @@ -125557,6 +125461,7 @@ tyre-search.ga, 1 tyree.tech, 1 tyres-mechanical.com.au, 1 tyres-price.com, 1 +tyrkey.tk, 1 tyronega.gov, 1 tyroola.co.id, 1 tyroola.co.nz, 1 @@ -125575,14 +125480,15 @@ tyroremotes.se, 1 tyrulez.tk, 1 tysukakorrekt.ga, 1 tysye.ca, 1 +tytixazo.tk, 1 tytod.com, 1 tyumen.ga, 1 tyuning-avto.tk, 1 tyva.gq, 1 tyva.ml, 1 +tyva.tk, 1 tz9.co, 1 tzchz.pp.ua, 1 -tzhsoj.com, 0 tzifas.com, 1 tzinsurance.com, 1 tziyona.net, 1 @@ -125591,6 +125497,8 @@ tzonevrakis.gr, 1 tzortzis.eu, 1 tzsec.com, 1 tzstamp.io, 1 +tzunami.tk, 1 +tzunamiblog.tk, 1 tzwe.com, 1 tzyingshi.com, 0 u-chan.com, 0 @@ -125630,7 +125538,6 @@ u32i64.cf, 1 u36533.com, 1 u4.re, 1 u4mh-dev-accesscontroller.azurewebsites.net, 1 -u4mh-dev-portal.azurewebsites.net, 1 u5.re, 1 u51365.com, 1 u5197.co, 1 @@ -125646,6 +125553,7 @@ u9721.com, 0 u9728.co, 1 u9yy.net, 1 ua-autonews.tk, 1 +ua-news.tk, 1 ua.search.yahoo.com, 0 ua5v.com, 1 uab.tv, 1 @@ -125655,6 +125563,7 @@ uaefiu.gov.ae, 1 uaemegadeals.com, 1 ualove.tk, 1 uamxsociologia.tk, 1 +uanews.tk, 1 uapp.win, 1 uareferat.tk, 1 uasaumur.com, 1 @@ -125664,6 +125573,7 @@ uasonics.tk, 1 uat-activesg.com, 1 uat-indego.azurewebsites.net, 1 uat-mypfp.co.uk, 1 +uateach.tk, 1 uatgootax.ru, 0 uathq.com, 1 uatuning.com.ua, 1 @@ -125677,6 +125587,7 @@ ubaldopoa.tk, 1 ubanks.com.ua, 1 ubanquity.com, 0 ubcani.com, 1 +uber-work.tk, 1 uberactivist.com, 1 uberalles.live, 1 uberboxen.net, 1 @@ -125716,12 +125627,14 @@ ubonit.pl, 1 uborcare.com, 1 uborka-812.ru, 1 uborka-kvartir-moskva.gq, 1 +uborka-snega.ga, 1 ubsolutions.hu, 1 ubun.kr, 1 ubun.net, 1 ubuntu-tr.net, 1 ubuntu.marketing, 1 ubuntu18.com, 1 +ubutovo.ga, 1 ubytovanihyncice.cz, 1 ubzoo.tk, 1 uc4h.com, 1 @@ -125742,6 +125655,7 @@ ucg-international.com, 1 uchargeapp.com, 1 ucheba.cf, 1 ucheba.ga, 1 +ucheba.gq, 1 ucheba.tk, 1 uchuumontreal.com, 1 ucibt.com, 1 @@ -125783,6 +125697,7 @@ udiutv.no, 1 udla.edu.ec, 1 udmarbella.tk, 1 udmddn.ru, 1 +udmurtia.tk, 1 udo-luetkemeier.de, 1 udomain.net, 1 udp.sh, 0 @@ -125814,6 +125729,7 @@ ufo.moe, 0 ufocentre.com, 1 ufoch.com, 0 ufologiahistorica.tk, 1 +ufologiaweb.tk, 1 ufone.com, 1 ufone.net, 1 ufopaedia.org, 1 @@ -125827,6 +125743,7 @@ ugeek.tk, 1 uggedal.com, 1 ugirlx.com, 1 ugmtc.org, 1 +ugolovnyj-advokat.cf, 1 ugolsibiri.ru, 1 ugrod.ru, 1 ugsonline.tk, 1 @@ -125837,9 +125754,12 @@ ugy.es, 1 uhasseltctf.be, 1 uhasseltctf.ga, 1 uhc.gg, 1 +uhcuhcas.cf, 1 +uhcuhcas.ga, 1 +uhcuhcas.gq, 1 uhcuhcas.ml, 1 uhcuhcas.tk, 1 -uhingaro.com, 1 +uhingaro.com, 0 uhl.site, 1 uhlhosting.ch, 1 uhlturf.com, 1 @@ -125862,7 +125782,6 @@ uinst.tk, 1 uinvest.ml, 1 uinvest.tk, 1 uiop.link, 1 -uirysa.pl, 1 uitdeoudekoektrommel.com, 1 uiterwijk.org, 1 uitgeverij-deviant.nl, 1 @@ -125886,6 +125805,7 @@ ukari.hokkaido.jp, 0 ukb.sch.id, 0 ukbc.london, 1 ukc2.com, 1 +ukcarers.tk, 1 ukdefencejournal.org.uk, 1 ukeuniverse.co.uk, 1 ukfoodbox.co.nz, 1 @@ -125901,6 +125821,7 @@ ukmalls.co.uk, 1 ukmeetandgreet.com, 1 ukmortgagecompare.co.uk, 1 uknew.co, 1 +uknews.ga, 1 uknews.ml, 1 uknewsroom.tk, 1 ukooku.com, 1 @@ -125919,6 +125840,7 @@ ukriate.com, 1 ukrn.io, 1 ukrnames.com, 1 ukrnet.co.uk, 1 +ukrtabletki.tk, 1 uksb.net, 1 ukseafood.co.uk, 1 uksv.co.uk, 1 @@ -125931,6 +125853,7 @@ ukwct.org.uk, 1 ul-fluglehrer.de, 1 ulabox.com, 1 ulax.org, 1 +ulax.tk, 1 uldsh.de, 1 uleenucks.de, 1 ulement.com, 1 @@ -125951,12 +125874,12 @@ ulobby.eu, 1 ulrichracing.com, 1 ulrik.moe, 1 ulrike-sichert-schuster.de, 1 -uls.by, 1 ulsterbank.co.uk, 1 ulsters.cf, 1 ultherasaopaulo.com, 1 ultima-ratio.at, 1 ultimadivisao.com.br, 1 +ultimasword.tk, 1 ultimate-fireworks.tk, 1 ultimate-uk.com, 1 ultimateappreviews.co, 1 @@ -125966,11 +125889,13 @@ ultimatebattles.club, 1 ultimateclub.tk, 1 ultimatefilmpromotion.com, 0 ultimategaming.tk, 1 +ultimatehalo.tk, 1 ultimatelifesupport.ga, 1 ultimatemafia.be, 1 ultimatemafia.de, 1 ultimatemafia.net, 1 ultimatemafia.nl, 1 +ultimatemapping.tk, 1 ultimatemotherfuckingwebsite.com, 1 ultimatepaleoguide.com, 1 ultimateparts.nl, 1 @@ -126061,6 +125986,7 @@ unataly.gq, 1 unataz.tk, 1 unatbeaubrid.cf, 1 unatco.noip.me, 1 +unausa.com.br, 1 unautreregard.tk, 1 unaware.tk, 1 unbelievableplaces.de, 1 @@ -126105,6 +126031,7 @@ uncinema.cf, 1 uncivserver.xyz, 1 unclebens-specials.gr, 1 uncontrollablegas.com, 1 +uncorporate.cf, 1 uncuteyes.tk, 1 uncuut.com, 1 undawns.tk, 1 @@ -126164,8 +126091,10 @@ unetyr.gq, 1 unexcited.tk, 1 unexpected.nu, 1 unexplored-belarus.tk, 1 +unexplored-moscow.tk, 1 unfabulous.tk, 1 unfallrechtler.de, 1 +unfamousrecords.tk, 1 unfathomable.blue, 1 unfc.nl, 1 unferno.tech, 1 @@ -126213,6 +126142,7 @@ unicode.link, 1 unicodeplus.com, 1 unicolabo.jp, 1 unicomergiraygana.com, 1 +unicool.tk, 1 unicorn-systems.net, 1 unicorn.melbourne, 1 unicorndesign.ninja, 1 @@ -126220,6 +126150,7 @@ unicornheaven.net, 1 unicornmusic.tk, 1 unicornsoft.tk, 1 unicorntooling.eu, 1 +unicrack.cf, 1 unicreditbulbank.info, 1 unicul.tk, 1 unicycle.ga, 1 @@ -126256,13 +126187,13 @@ unimex.edu.mx, 1 unimexver.edu.mx, 1 unimusica.tk, 1 unine.fun, 1 -union.moe, 0 unionciclistabinefar.tk, 1 unioncountyiowa.gov, 1 unioncountyncelections.gov, 1 unioncountyor.gov, 1 uniondeterapeutas.com, 1 unionflpa.gov, 1 +unionhoster.ml, 1 unionlacalera.tk, 1 unionlife-net.com, 1 unionmagdalena.tk, 1 @@ -126277,6 +126208,7 @@ unipart.digital, 0 unipass.ga, 1 unipig.de, 0 uniqsys.eu, 1 +unique-news.tk, 1 unique-punk.tk, 1 unique-tutorials.info, 1 unique-urls.tk, 1 @@ -126290,6 +126222,7 @@ uniquepathways.ch, 0 uniquepress.biz, 1 uniquequilts.co.uk, 1 uniquestlye.ga, 1 +uniqueworks.tk, 1 uniqweb.ga, 1 uniresbajdas.ml, 1 unis-pour-la-planete.com, 1 @@ -126303,6 +126236,7 @@ unisunvn.com, 1 unisyssecurity.com, 1 unit-soft.com, 0 unit15.net, 1 +unit3d.site, 1 unit7jazz.org, 1 unitanzania.com, 1 unite-ka.de, 1 @@ -126312,6 +126246,7 @@ united-coders.com, 1 united-dm.ml, 1 united-schools.net, 1 united-trackmaniacs.tk, 1 +united-trainers-league.tk, 1 united.com, 0 unitedadmins.com, 1 unitedarmyofentropia.tk, 1 @@ -126335,6 +126270,7 @@ unitefortherecovery.govt.nz, 1 unitehelivy.be, 1 uniteinhealth.org, 1 unitel2000.de, 0 +unitencup.tk, 1 unitir.gq, 1 unitizer.com, 1 unityconsciousnessbooks.com, 1 @@ -126355,6 +126291,7 @@ univeril.com, 0 univerkeys.com, 1 universal-credit.com, 1 universal-happiness.com, 1 +universal-mail.ml, 1 universal-techno.com, 1 universal-tutorial.com, 1 universal-village.org, 1 @@ -126373,6 +126310,7 @@ universdejeff.com, 1 universe.horse, 1 universe.la, 1 universe.wtf, 1 +universehk.tk, 1 universeinform.com, 1 universeit.mx, 1 universellafredsdanser.se, 1 @@ -126422,6 +126360,7 @@ unk.gov, 1 unkn0wncat.net, 1 unknown-player.com, 1 unknown.kyoto, 0 +unknownhacks.tk, 1 unknownmasses.tk, 1 unknownnet.tk, 1 unknowntrailsrider.tk, 1 @@ -126460,10 +126399,12 @@ uno.fi, 1 uno.uk, 1 unobrindes.com.br, 1 unoccupyabq.org, 1 +unofficialbpb.tk, 1 unoodostoques.tk, 1 unoptional.tk, 1 unoriginal.tk, 1 unosconotros.com, 1 +unovosti.tk, 1 unp.me, 1 unpkg.com, 1 unpleasant.tk, 1 @@ -126474,9 +126415,11 @@ unpoditalia.se, 1 unpossible.xyz, 1 unpost.net, 1 unpr.dk, 1 +unprovided.cf, 1 unreal.dk, 1 unrealircd.org, 1 unrelated.net.au, 1 +unrepentant.cf, 1 unrepentant.ga, 1 unrepentant.ml, 1 unrestricted.ga, 1 @@ -126523,6 +126466,7 @@ unveiledanatolia.com, 1 unveiledgnosis.com, 1 unveilturkey.com, 1 unvired.com, 1 +unwa.tk, 1 unwire.com, 1 unwiredbrain.com, 0 unwishingmoon.com, 1 @@ -126536,6 +126480,7 @@ uoe.com, 1 uomo.com.ar, 1 uopeople.reviews, 1 uoui.de, 1 +up-obmen.ml, 1 up-schaltanlagen.de, 1 up-stage.jp, 1 up.com.au, 1 @@ -126584,6 +126529,7 @@ upgamerengine.com, 1 upgamerengine.com.br, 1 upgamerengine.net, 1 upgrade.com, 1 +upgradeguru.de, 1 upgradeit.dk, 1 upgradeloans.com, 1 upgrades-and-options.com, 1 @@ -126610,8 +126556,10 @@ uploadbeta.com, 1 uploadbro.com, 1 uploadcare.com, 1 uploads.su, 1 +uploadscript.tk, 1 uploadtokiosk.com, 1 uplr.it, 1 +upmail.ml, 1 upmchealthsecurity.us, 1 upmediaclick.com, 1 upmediaclick.net, 1 @@ -126619,9 +126567,11 @@ upmediamarketer.ml, 1 upmls.com, 1 upmon.com, 1 upnetwork.ml, 1 +upnext.tk, 1 uponsel.com, 1 uportal.tk, 1 upped.com.my, 1 +uppercloud.cf, 1 upperskagittribe-nsn.gov, 1 uppfinnarenc.tk, 1 upplevelse.com, 1 @@ -126642,6 +126592,8 @@ upsdelperu.com.pe, 1 upsettunnel.com, 1 upsihologa.com.ua, 0 upsilonsigmaphi.us, 1 +upskilllearning.ml, 1 +upskirtmania.tk, 1 upsocial.ga, 1 upsocial.pp.ua, 1 upstairs.one, 1 @@ -126652,6 +126604,7 @@ uptechbrasil.com.br, 1 uptimed.com, 1 uptimesonar.com, 1 uptimeuno.com, 1 +uptional.gq, 1 uptodateinteriors.com, 1 uptoplay.ovh, 1 uptownbabe.com, 1 @@ -126682,9 +126635,18 @@ urakn0x.tk, 1 ural-emal.ga, 1 ural-travel.ml, 1 ural.cf, 1 +ural.ga, 1 +ural.tk, 1 +uralec.tk, 1 uralscoin.ml, 1 +uralsite.cf, 1 +uralsk.ml, 1 +uralskaya-garmon.tk, 1 +uralspravka.cf, 1 urandom.co.uk, 1 +urang-kurai.tk, 1 uraniborg.net, 1 +uraniumhost.ga, 1 uranius.eu, 1 uranmoney.ml, 1 uranus.cf, 1 @@ -126692,10 +126654,14 @@ urbackups.com, 1 urbalex.ch, 0 urban-culture.fr, 1 urban-lounge.tk, 1 +urban-news.tk, 1 urban.melbourne, 1 +urbanagriculturesummit.cf, 1 urbanarcana.tk, 1 urbanartisan.cf, 1 urbanbageecha.com, 1 +urbanbikeweamr.ga, 1 +urbanbooks.tk, 1 urbancoffee.com.mx, 1 urbancreators.dk, 1 urbane-narrationen.de, 1 @@ -126716,7 +126682,9 @@ urbanism.xyz, 1 urbanized.tk, 1 urbanizedrecords.tk, 1 urbanjunior.com, 1 +urbanlounge.tk, 1 urbanmic.com, 1 +urbanmuslim.tk, 1 urbannewsservice.com, 1 urbanology.tk, 1 urbanon.cz, 1 @@ -126751,6 +126719,7 @@ urfreecon.tk, 1 urge55.com, 1 urgences-valais.ch, 1 urgencesolidarite.fr, 1 +urgent-notice.ml, 1 urgentcaresouthaven.com, 1 urion.com.br, 1 uriport.com, 1 @@ -126791,16 +126760,21 @@ urlendecoder.tk, 1 urlfly.tk, 1 urlgoo.ga, 1 urlive.ga, 1 +urljournal.tk, 1 urlscan.io, 1 urlsimple.tk, 1 urltell.com, 1 urltodomain.com, 1 urluno.com, 1 +urlwing.tk, 1 urlz.ml, 1 +urlz.tk, 1 urmikron.tk, 1 urnenexpert.nl, 1 urnes.org, 1 +urocentre.ga, 1 urogen.com, 1 +uroki.tk, 1 urokoff.net, 1 urology.wiki, 1 urologyoklahoma.com, 1 @@ -126811,8 +126785,11 @@ urown.net, 1 urrestarazuserranoabogados.com, 1 ursa-minor-beta.org, 1 ursae.co, 1 +ursonatefanzine.tk, 1 urspringer.com, 1 urspringer.de, 1 +urstore.ga, 1 +ursula-gadalka.tk, 1 ursuslibris.hu, 1 uruguay-experience.com, 1 uruslugi.tk, 1 @@ -126846,6 +126823,7 @@ usadirectory.tk, 1 usaestaonline.com, 1 usage.be, 1 usagexchange.com, 1 +usagi-ku.ga, 1 usagm.gov, 1 usagov.gov, 1 usahealthwebapps.com, 1 @@ -126856,6 +126834,8 @@ usalearning.gov, 1 usamale.cf, 1 usamdt.com, 1 usamultimeters.com, 0 +usanewsposts.ga, 1 +usanewstrends.ga, 1 usap.gov, 0 usapel.com.br, 1 usaprimecredit.org, 1 @@ -126865,6 +126845,7 @@ usaseanconnect.gov, 1 usastaffing.gov, 1 usatodaynetworkservice.com, 1 usatodaysportsplus.com, 1 +usaweblist.tk, 1 usawireguard.com, 1 usb-lock-rp.com, 1 usbcompatible.com, 1 @@ -126898,6 +126879,7 @@ usenet.tk, 1 usenethd.li, 1 useon.com, 1 useon.ru, 0 +user-agent.ml, 1 user-daitron.jp, 1 userbase.com, 1 usercentrics.com, 1 @@ -126922,11 +126904,14 @@ usidfc.gov, 1 usintimate.com.br, 1 usitcolours.bg, 1 usjunkyardsnearme.com, 1 +usk-clan.tk, 1 +uskaonline.tk, 1 uskaria.com, 1 uskostadariksi.fi, 1 uslab.io, 0 usleep.net, 1 usleravnekrog.dk, 1 +uslugi-advokata.ga, 1 uslugi-advokata.tk, 1 uslugi-online.pl, 1 uslugi-voronezh.tk, 1 @@ -126963,6 +126948,7 @@ usrspace.at, 1 uss-atlas.de, 1 ussemiquincentennial.gov, 1 ussm.gov, 1 +ussm.tk, 1 ussst.org, 1 ussst.org.in, 1 ustaywell.com, 1 @@ -127027,8 +127013,11 @@ utitreatment.com, 1 utleg.gov, 1 utloperadora.com.br, 1 utmel.com, 1 +utodyg.ga, 1 utonia.ch, 1 utopialgb.org.uk, 1 +utopian-institute.tk, 1 +utopiancapitalism.tk, 1 utopians.dk, 0 utopiasmart.city, 1 utopiatech.tk, 1 @@ -127043,6 +127032,7 @@ uttenheim.net, 1 utterberry.io, 1 utterman.se, 1 uttnetgroup.fr, 0 +utural.tk, 1 utvbloggen.se, 1 utw.me, 1 utwente.io, 1 @@ -127101,14 +127091,21 @@ uy.search.yahoo.com, 0 uyen.party, 1 uygindir.ml, 1 uyz.me, 1 +uz-yulduzlar.tk, 1 uz.search.yahoo.com, 0 +uzagmozemunk.ga, 1 +uzagmozemunk.ml, 1 uzay.org, 1 uzayliyiz.biz, 1 +uzbaza.tk, 1 uzbek-soft.tk, 1 +uzbekistan24.tk, 1 uzbekkizlari.cf, 1 uzbekkizlari.gq, 1 +uzbekkizlari.ml, 1 uzbekkizlari.tk, 1 uzbektumblers.tk, 1 +uzbwap.tk, 1 uze-mobility.at, 1 uze-mobility.ch, 1 uze-mobility.co, 1 @@ -127131,12 +127128,16 @@ uzmansorusu.com, 1 uzmoveis.com.br, 1 uzone.uk, 1 uzsvm.cz, 1 +uztop.ml, 1 uzzamari.com, 1 uzzamari.com.br, 1 v-d-p.net, 1 +v-gornom.ga, 1 v-horus.cloud, 1 v-jo.com, 1 v-kurgane.tk, 1 +v-media.tk, 1 +v-news.tk, 1 v-novosibirske.tk, 1 v-phoenix.tk, 1 v-spin.cz, 1 @@ -127192,7 +127193,6 @@ v700dd.com, 1 v700ee.com, 1 v700w.com, 1 v7090.com, 0 -v800y.com, 0 v81365.com, 1 v82365.com, 1 v88158.com, 1 @@ -127235,6 +127235,7 @@ vaccinestats.net, 1 vacine.gov, 1 vacines.gov, 1 vackor.tk, 1 +vaclan.tk, 1 vaclavambroz.eu, 1 vaclavkocum.com, 1 vacome.com, 1 @@ -127248,6 +127249,7 @@ vaderochvind.se, 1 vaderqkcloud.ddns.net, 1 vadiar-angola.tk, 1 vadik.me, 1 +vadillodelasierra.tk, 1 vadis.tk, 1 vado.li, 1 vadras.rs, 1 @@ -127255,6 +127257,8 @@ vaew.com, 1 vagabond.film, 1 vagabond.fr, 1 vagabond.tk, 1 +vagabondages.tk, 1 +vagabundos.tk, 1 vagaerg.com, 1 vagaerg.net, 1 vaganciatechnology.com, 0 @@ -127281,6 +127285,7 @@ vak-pobeda.ru, 1 vakantiedetective.nl, 1 vakantiehuisschellinkhout.nl, 1 vakantiehuisverzekeringen.nl, 1 +vakantieinfo.tk, 1 vakantieverblijfalgarve.nl, 1 vakat.eu, 1 vakifuniver.ru, 1 @@ -127312,6 +127317,7 @@ valemountchamber.com, 1 valemountmuseum.ca, 1 valencia-s-vikoy.ru, 1 valenciadevops.me, 1 +valenciaescatala.tk, 1 valencianisme.tk, 1 valencianistas.tk, 1 valencraft.ca, 1 @@ -127337,6 +127343,7 @@ valentinesongs.com, 1 valentinoduval.fr, 1 valentinog.com, 1 valentinritz.com, 0 +valentinstag.ga, 1 valentinstag.ml, 1 valentinvesa.ro, 1 valeravi.tk, 1 @@ -127351,6 +127358,7 @@ valgagym.ee, 1 valgardsempornium.pw, 1 valgavesi.ee, 1 valhallastrengthsthbne.com.au, 1 +valiakhmetov.tk, 1 valiant.finance, 1 validation.link, 1 validatis.com, 1 @@ -127381,6 +127389,7 @@ valledibraies.org, 1 valleesenlutte.org, 1 vallei-veluwe.nl, 1 vallejoca.gov, 1 +vallenar.tk, 1 valleyautofair.com, 1 valleycountyne.gov, 1 valleydalecottage.com.au, 1 @@ -127395,6 +127404,7 @@ vallutaja.eu, 1 valnetcdn.com, 1 valoan.me, 1 valopv.be, 1 +valor-host.ml, 1 valorantpicker.com, 0 valorantpornhentai.com, 0 valordolarblue.com.ar, 1 @@ -127402,10 +127412,12 @@ valordotrabalho.com.br, 1 valorem-tax.ch, 0 valoremtax.ch, 0 valoremtax.com, 0 +valoriashard.tk, 1 valorizofficial.com, 1 valparaiso.tk, 1 valpareso.tk, 1 valphenn.blue, 1 +valpovo-online.tk, 1 valsenales.it, 1 valshamar.is, 1 valskis.lt, 1 @@ -127447,6 +127459,7 @@ vampluderdd.com, 1 vampyrium.com, 0 vampyrium.net, 0 van-assen.com, 1 +van-brandevoort.tk, 1 van11y.net, 1 vanadrighem.eu, 1 vanarok.xyz, 0 @@ -127455,6 +127468,7 @@ vanbalen.be, 1 vanbarel.tk, 1 vanboven.nl, 1 vanboyvital.tk, 1 +vanbruchem.tk, 1 vanburencounty-mi.gov, 1 vanburencountyiowa.gov, 1 vancityconcerts.com, 1 @@ -127475,6 +127489,7 @@ vandenbergfss.com, 1 vandenbroeck-usedcars.be, 1 vandenbroekwi.gov, 1 vandenheuvelzwembaden.nl, 1 +vandeput.be, 1 vanderbeekonline.nl, 1 vanderbiltcisa.org, 0 vanderkley.it, 1 @@ -127576,6 +127591,7 @@ vapocial.com, 1 vapolik.fr, 1 vapor.cloud, 0 vapordepot.jp, 1 +vaporquest.tk, 1 vapoteuse.fr, 1 vapourtown.com, 1 vapteke.ru, 1 @@ -127596,6 +127612,7 @@ variablyconstant.com, 1 variance.pl, 1 variasdesign.com, 1 variatesonline.tk, 1 +varied.ga, 1 varierchairs.com, 1 variomedia.de, 1 variusunum.com, 1 @@ -127606,10 +127623,13 @@ varlex.cl, 1 varlin.tk, 1 varna-airport.bg, 1 varney.tk, 1 +varnish.ga, 1 varonahairrestoration.com, 0 varoscak.de, 0 varrogepcentrum.hu, 0 varshathacker.com, 1 +varun-rajeshwari.tk, 1 +varvitra20mg.ga, 1 varvy.com, 1 varyrentacar.com, 1 varztupasaulis.com, 1 @@ -127637,14 +127657,23 @@ vaselin.ml, 1 vaselin.tk, 1 vases.tk, 1 vasficelik.com, 1 +vash-doctor.tk, 1 +vash-dom.tk, 1 +vashdohod.ml, 1 vashel.us, 1 vasheradio.tk, 1 vashmatrass.ru, 1 +vashprazdnik.tk, 1 vasileruscior.ro, 1 vasilev.wtf, 1 +vasilevo.tk, 1 vasilijeojdanic.ml, 1 vasilijeojdanic.tk, 1 vasilikieleftheriou.com, 1 +vasilisa-volodina.cf, 1 +vasilisa-volodina.ga, 1 +vasilisa-volodina.gq, 1 +vasilisa-volodina.ml, 1 vaskulitis-info.de, 1 vasogroup.com, 1 vastenotaris.nl, 1 @@ -127661,6 +127690,7 @@ vat.direct, 1 vatav.eu, 1 vatav.tk, 1 vatazhok.com, 1 +vatikantour.tk, 1 vatman.tk, 1 vato.nl, 1 vats.im, 1 @@ -127680,6 +127710,7 @@ vault81.de, 1 vaultlabs1226.com, 1 vaultproject.io, 0 vaur.fr, 1 +vaurio.tk, 1 vavada.com, 1 vave.men, 1 vavel.com, 1 @@ -127694,11 +127725,13 @@ vaygren.com, 1 vb.media, 1 vba.rest, 1 vbazile.com, 1 +vbelgorode.tk, 1 vbestseller.com, 1 vbhelp.org, 1 vbql.me, 1 vbsoft.cz, 1 vbttc.com, 1 +vburyatii.ml, 1 vbwinery.com, 1 vcacursus.nl, 1 vcanederland.nl, 1 @@ -127730,6 +127763,7 @@ vcz.fr, 1 vczk.me, 1 vd42.net, 1 vda.li, 1 +vdagestan.tk, 1 vdb-it.com, 1 vdbongard.com, 1 vdcomp.cz, 0 @@ -127741,8 +127775,13 @@ vdisk24.de, 1 vdmeij.com, 1 vdmeta.com, 1 vdocapp.com, 1 +vdolg2000rub.ga, 1 vdolg2000rub.ml, 1 +vdolg8000rub.cf, 1 +vdolg8000rub.ga, 1 vdolg8000rub.gq, 1 +vdolg8000rub.ml, 1 +vdolg8000rub.tk, 1 vdownloader.com, 1 vdstc.com, 1 vdw-instruments.com, 1 @@ -127751,18 +127790,24 @@ ve.search.yahoo.com, 0 ve3oat.ca, 1 ve3zsh.ca, 1 veadoscomfome.tk, 1 +veast.network, 1 vebbankir-zajm-onlajn.gq, 1 +vebdengi.tk, 1 veber.bg, 1 +veca.tk, 1 vecara.es, 1 vecchiofornobarletta.it, 1 vechainstats.com, 1 vecherka.tk, 1 +vechersky.tk, 1 vectomatic.org, 1 vectops.com, 0 +vectorcardiometry.tk, 1 vectordtg.com, 0 vectormagnetics.com, 1 vectortrack.com.au, 1 vectorwish.com, 1 +vectrum.cf, 1 vedeneev.tk, 1 vedev.io, 1 vedma-praktik.com, 1 @@ -127849,10 +127894,12 @@ veliavidela.com, 1 velichkin.tk, 1 velika-balgaria.tk, 1 velikijhutir.cherkassy.ua, 1 +velis.tk, 1 velken.de, 1 vellingetaxi.se, 1 velmart.ua, 1 velmorra.id, 1 +velo-volga.tk, 1 velo24.tk, 1 velobar.plus, 1 velocitycu.com, 1 @@ -127872,8 +127919,11 @@ velotours.ga, 1 velotyretz.fr, 0 velovelo.gq, 1 veluwerally2002.tk, 1 +velvet-tarantula.tk, 1 +velvetempire.tk, 1 velvetia.no, 1 vemoweb.com, 1 +venacifuentes.tk, 1 venali.tk, 1 venalytics.com, 1 venangocountypa.gov, 1 @@ -127884,6 +127934,7 @@ vendadopinheiro.com, 1 vendadopinheiro.net, 1 vendadopinheiro.org, 1 vendagora.tk, 1 +vendasdealbunsbrasil.tk, 1 vendee.tk, 1 vendela.tk, 1 vendeproductos.online, 1 @@ -127903,10 +127954,13 @@ vendsoefoutra.ml, 1 venegreco.com, 1 venenum.org, 1 venera-magik.tk, 1 +venesuela.cf, 1 venetkaarsenovart.com, 1 venev.com, 1 venev.name, 1 +venezia.ga, 1 veneziatoday.it, 1 +venezuelachat.tk, 1 venezuelalibre.tk, 1 venga.tk, 1 vengriya.tk, 1 @@ -127998,6 +128052,7 @@ vereinscheck.de, 1 vereinswahl.online, 1 verena.gallery, 1 verepeliculashd.com, 1 +vereshagino.tk, 1 verf.nu, 1 verfassungsklage.at, 1 verge.capital, 1 @@ -128006,6 +128061,7 @@ vergelijksimonly.nl, 1 vergelijkwitgoed.nl, 1 vergesense.com, 1 vergessen.cn, 1 +vergraal.tk, 1 verhaltenstherapie-weiden.de, 1 verhaslaw.com, 1 verhave.net, 1 @@ -128013,7 +128069,7 @@ veri2.com, 1 verifalia.com, 1 verificationlink.ga, 1 verified.eu, 1 -verifiedjoseph.com, 1 +verifiedjoseph.com, 0 verifiny.com, 1 verify.gov.sg, 1 verifyos.com, 1 @@ -128053,6 +128109,7 @@ verliefde-jongens.nl, 1 verloskundigepraktijktolmiea.nl, 1 vermaeckbouw.nl, 1 vermageringsdieetpillen.ga, 1 +vermageringsdieetpillen.gq, 1 vermageringsdieetpillen.tk, 1 vermeerdealers.com, 1 vermellcollection.com, 1 @@ -128104,6 +128161,7 @@ vertanex.com, 1 vertaxaccountants.co.uk, 1 vertebrates.com, 1 verteilergetriebe.info, 1 +vertexlife.ml, 1 vertexlife.tk, 1 vertexventures.co.il, 1 vertexventures.sg, 1 @@ -128167,6 +128225,7 @@ vestd.com, 0 vestibtech.com, 1 vestibular.science, 1 vestibulartechnologies.com, 1 +vestiizhevska.cf, 1 vestingbar.nl, 1 vestirsibene.shop, 1 vestlundbolargen.tk, 1 @@ -128180,6 +128239,7 @@ vetantumapu.cl, 1 vetbilgi.com, 1 vetbits.com, 0 vetcard.info, 1 +vetch.ga, 1 vetcoretech.com, 1 vetcpd.co.uk, 1 veteranreservecorps.com, 1 @@ -128193,18 +128253,21 @@ veterinario.milano.it, 1 veterinario.roma.it, 1 veterinarioaltea.com, 1 veterinary-colleges.com, 1 +veterinaryhelp.cf, 1 veterinarylabsupply.com, 1 veterinaryvision.co.uk, 1 veteriner.name.tr, 1 veterquimica.pe, 1 vetikalender-berlin.de, 1 vetinte.eu, 1 +vetitus-teatro.tk, 1 vetlab.ee, 1 vetmedstat.com, 1 vetmgmt.com, 1 vetnet.info, 1 veto.fish, 1 vetofish.com, 1 +vetosh.tk, 1 vetpraxis.de, 1 vetputten.nl, 1 vetren.tk, 1 @@ -128242,6 +128305,7 @@ vgropp.de, 1 vgxcontactcenter.com.br, 1 vgywm.com, 1 vhelio.org, 1 +vhproductions.tk, 1 vhummel.nl, 1 vhumo.com, 1 via-shire-krug.ru, 0 @@ -128255,6 +128319,7 @@ viaggioincoppia.com, 1 viaggivistos.com.br, 1 viagozo.com, 1 viagra4men.com, 1 +viagratop.tk, 1 viagusto.pl, 1 viajantesturismo.com, 1 viajessanandres.com, 1 @@ -128285,10 +128350,12 @@ vibgyyor.com, 1 vibioh.fr, 1 vibox.co.uk, 1 vibraagenciadigital.com.br, 1 +vibramycin100mg.tk, 1 vibrant-america.com, 1 vibratefashion.com, 1 vibrato1-kutikomi.com, 1 vibrolandia.com, 1 +vicarious.cf, 1 vicenez.agency, 1 vicentaburon.tk, 1 vicentediaz.mx, 1 @@ -128311,6 +128378,7 @@ vicjuwelen-annelore.be, 1 vickyflipfloptravels.com, 0 vickyhundt.com, 1 vickylarraz.tk, 1 +vickyoliver.tk, 1 vicmatus.com, 1 vicoeo.com, 1 vicrea.nl, 1 @@ -128319,6 +128387,7 @@ victimizer.tk, 1 victor.co.uk, 1 victora.com, 1 victorblomberg.se, 1 +victorbuch.cf, 1 victorcalvez.com, 1 victorcanera.com, 1 victorcarrasco.tk, 1 @@ -128355,6 +128424,7 @@ victoroilpress.com, 1 victorpelletmill.com, 1 victorpericiales.com, 1 victorricemill.com, 1 +victorrodriguez.ml, 1 victorunix.com, 1 victory.radio, 1 victoryalliance.us, 1 @@ -128372,6 +128442,7 @@ vidarity.com, 1 vidasanayfitness.com, 1 vidassemfronteiras.com, 1 vidatantrica.com, 1 +vidawichi.tk, 1 vidaxp.com, 1 vidb.me, 1 vidbooster.com, 0 @@ -128379,6 +128450,7 @@ vidbuchanan.co.uk, 1 vide-dressing.org, 0 vide-greniers.org, 0 vide-maisons.org, 0 +videferre.tk, 1 video-oldenburg.de, 1 videoarcadia.cf, 1 videoarcadia.ml, 1 @@ -128390,9 +128462,12 @@ videoclipsex.com, 1 videoclubhd.ga, 1 videoclubhd.ml, 1 videoconferencing.guide, 1 +videoebook.tk, 1 videoface.ru, 1 +videogameconsole.ir, 1 videogamecoupons.com, 1 videogamer.com, 1 +videogamerreader.tk, 1 videogamesartwork.com, 1 videograb.ga, 1 videograb.ml, 1 @@ -128402,15 +128477,20 @@ videojuegos.com, 1 videokaufmann.at, 1 videoload.co, 1 videomail.io, 1 +videomaniya.ml, 1 +videonika.tk, 1 videopediablogs.tk, 1 videopokerez.cf, 1 videopornoitaliana.com, 1 +videoprikol.cf, 1 +videoprikoly.ga, 1 videoremote.tk, 1 videosdiversosdatv.com, 1 videosengracado.ga, 1 videoseriesbiblicas.com, 1 videoseyred.in, 1 videoskaseros.com, 1 +videoskazka.tk, 1 videosparatodos.com, 1 videospericos.tk, 1 videosporno.life, 1 @@ -128418,11 +128498,11 @@ videostop.asia, 1 videot.tk, 1 videotehnika.tk, 1 videoueberwachung-set.de, 1 +videouroki.ml, 1 videov.tk, 1 videovt.tk, 1 videownload.com, 1 videozv.tk, 1 -viderma.com.br, 1 videt-son.cf, 1 videt-son.ml, 1 videt-son.tk, 1 @@ -128471,7 +128551,6 @@ viega.si, 1 viega.sk, 1 viega.us, 1 viekelis.lt, 0 -vielleserin.de, 1 viemeister.com, 1 viemontante.be, 0 viennadancecrew.at, 1 @@ -128505,6 +128584,7 @@ vieux.pro, 1 vievolution.tk, 1 view-page-source.com, 1 viewbook.com, 1 +vieweb.tk, 1 viewer.ga, 1 viewey.com, 1 viewflix.win, 1 @@ -128777,13 +128857,13 @@ vinnie.gq, 1 vinny.tk, 1 vinnyvidivici.com, 1 vinodoc.cz, 1 +vinoffice.vn, 1 vinohradiv.tk, 1 vinokourovnet.tk, 1 vinokurov.tk, 1 vinolli.de, 1 vinorossoconero.com, 1 vinoshipper.com, 1 -vinotec.net, 1 vinovum.net, 1 vinsation.com, 1 vinsetchampagne.fr, 0 @@ -128803,6 +128883,7 @@ vintagetrailerbuyers.com, 1 vintagewedding.tk, 1 vintazh.net, 1 vinticom.ch, 0 +vintizen.com, 1 vintom.com, 1 vintonia.gov, 1 vinumenu.com, 1 @@ -128868,6 +128949,7 @@ vipmdh.com.ua, 1 vipmercedes.by, 1 viporiflame.tk, 1 vippclub.be, 0 +vips.pl, 1 vipsauna.gq, 1 vipsexvault.com, 1 vipshop.ga, 1 @@ -129039,7 +129121,6 @@ visit-sanbenedettodeltronto.it, 1 visit-thailand.tk, 1 visit.gent, 1 visit.natal.br, 1 -visitasguiadasalhambra.com, 1 visitationbvm.net, 1 visitbangkoktravel.com, 1 visitbeulah.com, 1 @@ -129113,6 +129194,7 @@ vitaalcheck.nl, 1 vitaalfitcoaching.nl, 1 vitacare.com.au, 1 vitacellbiologics.com, 1 +vitahaute.com, 0 vitahook.pw, 1 vitahost.ml, 1 vitakov.tk, 1 @@ -129299,8 +129381,10 @@ vkino.ml, 1 vkirichenko.name, 1 vkirienko.com, 1 vklikers.tk, 1 +vkolledzhe.tk, 1 vkox.com, 1 vkr2020.herokuapp.com, 1 +vkrutilca.tk, 1 vksportphoto.com, 1 vkstaticcdn.ru, 1 vkstaticcontent.ru, 1 @@ -129308,6 +129392,7 @@ vkstream.tk, 1 vkulagin.ru, 1 vkusercontent.ru, 1 vkusniy.shop, 1 +vkusnyashka.tk, 1 vkustradicii.com.ua, 1 vl.cloudns.cc, 1 vlaamsegemeenschap.tk, 1 @@ -129315,8 +129400,13 @@ vlaamsetollers.tk, 1 vlaardingen-enzo.tk, 1 vlachoshome.com, 1 vladcash.com, 1 +vladgazeta.gq, 1 +vladikavkaz-city.tk, 1 vladimir-chanaev.pro, 1 vladimir.ml, 1 +vladimirbatrakov.tk, 1 +vladimirchernyshov.ml, 1 +vladimirkarpets.tk, 1 vladimirovka.ml, 1 vladimirpenev.tk, 1 vladislavstoyanov.com, 1 @@ -129699,7 +129789,6 @@ voteks.gov, 1 votelevy.gov, 1 votemarion.gov, 1 votemate.org, 1 -votemoore.us, 1 votenassaufl.gov, 1 voteokaloosa.gov, 1 voteokeechobee.gov, 1 @@ -129854,7 +129943,7 @@ vros.co.id, 1 vrostove.tk, 1 vrsgames.com.mx, 0 vrsmash.com, 1 -vrsystem.com.br, 1 +vrsystem.com.br, 0 vrtak-cz.net, 0 vrtouring.org, 1 vrzas.net, 1 @@ -130233,6 +130322,7 @@ wagnervineyards.com, 1 wagspuzzle.space, 1 waguramaurice.cf, 1 wahay.org, 1 +wahhoi.net, 1 wahine.gq, 1 wahl-co.de, 1 wahminda.tk, 1 @@ -130274,7 +130364,6 @@ wakullaelectionfl.gov, 1 wakuwakustudyworld.co.jp, 0 walaa.com.co, 1 walaamohamed.com, 1 -walden-interiors.com, 1 waldenvt.gov, 1 waldenwritingcenter.ml, 1 waldgourmet.de, 1 @@ -130913,7 +131002,6 @@ web-creato.tk, 1 web-demarche.com, 1 web-design-india.com, 1 web-design.co.il, 1 -web-desing.com.ua, 0 web-disaster.tk, 1 web-dl.cc, 1 web-format.tk, 1 @@ -131444,7 +131532,6 @@ weegshop.nl, 1 weekdone.com, 1 weekendbus.pl, 1 weekendcandy.com, 1 -weekendgolf.co, 1 weekendinitaly.com, 1 weekendplayers.tk, 1 weekendstartup.ml, 1 @@ -132266,7 +132353,6 @@ wiki-iknownaught.ddns.net, 1 wiki-pedia.org, 1 wiki-play.ru, 1 wiki.berlin, 1 -wiki.python.org, 1 wiki.voyage, 1 wiki24.ru, 1 wikiboard.tk, 1 @@ -132584,6 +132670,7 @@ win-fortuna.ml, 1 win-rar.com, 1 win-the-1.com, 1 win11.ren, 1 +win365.com, 1 win7stylebuilder.com, 0 win7tips.tk, 1 win8.am, 1 @@ -132825,6 +132912,7 @@ wishlisotr.gq, 1 wishlist.net, 1 wishlog.fun, 1 wishmail.cf, 1 +wishmenia.com, 1 wiska.cn, 1 wiska.co.kr, 1 wiska.co.uk, 1 @@ -133242,7 +133330,6 @@ wordpressbot.tk, 1 wordpressdevelopment.ml, 1 wordregistrar.ga, 1 wordsearchwhiz.com, 1 -wordsinarow.com, 1 wordsmart.it, 1 wordsofamaster.com, 1 wordspam.ga, 1 @@ -133416,6 +133503,7 @@ worldnewsinbox.ga, 1 worldnewsphoto.tk, 1 worldofarganoil.com, 1 worldofbelia.de, 1 +worldofgeekstuff.com, 1 worldofghibli.id, 1 worldofheroes.ml, 1 worldoflegion.ml, 1 @@ -134649,7 +134737,6 @@ xmiui.com, 1 xmlbeam.org, 1 xmlseo.ru, 1 xmp3.net, 1 -xmpp.dk, 0 xmr.wiki, 1 xmusic.live, 1 xmv.cz, 1 @@ -134682,6 +134769,7 @@ xn----7sblrfhjjgq8g.xn--p1ai, 1 xn----7sbmucgqdbgwwc5e9b.xn--p1ai, 1 xn----7sbq4auch5b4b.xn--p1ai, 1 xn----8hcdn2ankm1bfq.com, 1 +xn----8sbggtw.xn--p1ai, 1 xn----dtbfemantkhdczc.tk, 1 xn----dtbfemmqjdddczc.tk, 1 xn----dtbhcpoeofgcvoic1s.xn--p1ai, 1 @@ -134691,7 +134779,6 @@ xn----ncfb.ws, 1 xn----rtbbavlecj.xn--p1ai, 1 xn----ylba7abgd9bnh0e.xn--qxa6a, 1 xn---35-6cdk1dnenygj.xn--p1ai, 1 -xn--0iv967ab7w.xn--rhqv96g, 0 xn--0kq33cbsi8bk6d417b.com, 1 xn--0kq33cz5c8wmwrqqw1d.com, 1 xn--12c3bpr6bsv7c.com, 1 @@ -135163,6 +135250,7 @@ xosh.fr, 1 xotictrends.com, 1 xotika.tv, 1 xoxo.news, 1 +xp-ochrona.pl, 1 xp.ht, 1 xp.nsupdate.info, 1 xpbytes.com, 0 @@ -135231,6 +135319,7 @@ xrbox.me, 1 xrdd.de, 1 xrg.cz, 1 xrippedhd.com, 1 +xrism.ro, 1 xrockx.de, 1 xrp.pp.ua, 1 xrpnews.info, 1 @@ -135613,6 +135702,7 @@ yachta.kiev.ua, 1 yachtbuyer.com, 1 yachtcharterfleet.com, 1 yachtcita.com, 1 +yachtcrafter.com, 1 yachtfolio.com, 1 yachtfolio1.com, 1 yachting-home.com, 1 @@ -135874,7 +135964,6 @@ yclan.net, 1 ycnexp.eu.org, 1 ycnrg.org, 1 ycsgo.com, 0 -yd.io, 1 yd163.cc, 1 yd169.cc, 1 ydiversa.com, 1 @@ -136019,7 +136108,6 @@ yf128.cc, 1 yfeer.com, 1 yfengs.moe, 1 yflix.xyz, 0 -yg-crew.eu, 1 yggdar.ga, 1 yggdrasil.ws, 1 yggdrasildice.com, 1 @@ -136239,6 +136327,7 @@ yorcybersec.co.uk, 0 yordanisp.tk, 1 yore.tk, 1 yorganica.ga, 1 +yorgosbos.nl, 1 yorkacademy.ca, 1 yorkieloverdiy.com, 1 yorkiepooexpert.com, 1 @@ -136715,6 +136804,7 @@ yunhu365.com, 1 yunibalance.com, 1 yunjishou.pro, 1 yunloc.com, 1 +yunnet.ru, 1 yunqueradehenares.tk, 1 yuntong.tw, 0 yunzhu.li, 0 @@ -137610,7 +137700,7 @@ zhangwendao.com, 1 zhangyiming.tech, 1 zhangyuhao.com, 1 zhanxiangyang.com, 1 -zhanzhangb.com, 0 +zhanzhangb.com, 1 zhaochen.xyz, 1 zhaochengtan.com, 1 zhaodao.ai, 1 @@ -137878,6 +137968,7 @@ zlarin.tk, 1 zlatakus.cz, 1 zlatan-ibrahimovic.tk, 1 zlatanonline.tk, 1 +zlatnictvoadamas.sk, 0 zlatograd.bg, 1 zlatom.ru, 1 zlatopil.com, 0 diff --git a/services/settings/dumps/blocklists/addons-bloomfilters.json b/services/settings/dumps/blocklists/addons-bloomfilters.json index ee5e915f0beef..9dedd001782bf 100644 --- a/services/settings/dumps/blocklists/addons-bloomfilters.json +++ b/services/settings/dumps/blocklists/addons-bloomfilters.json @@ -1,5 +1,210 @@ { "data": [ + { + "stash": { + "blocked": [ + "{a3e26320-095f-44c6-b064-f035b40dda28}:1.5.5", + "{a3e26320-095f-44c6-b064-f035b40dda28}:1.5.3", + "{a3e26320-095f-44c6-b064-f035b40dda28}:1.6.4", + "{a3e26320-095f-44c6-b064-f035b40dda28}:1.5.4", + "{a3e26320-095f-44c6-b064-f035b40dda28}:1.6.5", + "{a3e26320-095f-44c6-b064-f035b40dda28}:1.6.7", + "{a3e26320-095f-44c6-b064-f035b40dda28}:1.6.6", + "{a3e26320-095f-44c6-b064-f035b40dda28}:1.5.9", + "{a3e26320-095f-44c6-b064-f035b40dda28}:1.6.0", + "{a3e26320-095f-44c6-b064-f035b40dda28}:1.6.2", + "{a3e26320-095f-44c6-b064-f035b40dda28}:1.5.6", + "{a3e26320-095f-44c6-b064-f035b40dda28}:1.5.8", + "{a3e26320-095f-44c6-b064-f035b40dda28}:1.6.1", + "{a3e26320-095f-44c6-b064-f035b40dda28}:1.5.7", + "{a3e26320-095f-44c6-b064-f035b40dda28}:1.5.2", + "{a3e26320-095f-44c6-b064-f035b40dda28}:1.6.3" + ], + "unblocked": [] + }, + "schema": 1662122244347, + "key_format": "{guid}:{version}", + "stash_time": 1662143707377, + "id": "138f6f3e-6ef6-485e-915f-0afa954089f0", + "last_modified": 1662143842464 + }, + { + "stash": { + "blocked": [ + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.11.2", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.28.0", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.87.1", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.56.0", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.85.1", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.99.1", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.82.0", + "admin@antiboomz.com:3.1.3", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.23.2", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.10.8.12", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.99.0", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.57.0", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.34.0", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.35.0", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.119.0", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.74.0", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.10.8.15", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.65.0", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.131.0", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.11.0", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.101.0", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.61.0", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.83.0", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.49.0", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.106.0", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.85.0", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.94.0", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.68.0", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.59.0", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.76.0", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.13.0", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.83.1", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.73.0", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.10.8.18", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.88.0", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.92.0", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.27.0", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.76.1", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.26.0", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.132.0", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.48.0", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.55.0", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.47.2", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.110.0", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.32.1", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.115.0", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.121.0", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.27.97", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.45.0", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.24.1", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.10.10.32", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.57.1", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.39.0", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.52.1", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.41.1", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.66.2", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.47.1", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.118.0", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.58.0", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.29.0", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.117.0", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.38.0", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.11.4", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.104.0", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.61.1", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.41.0", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.15.0", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.36.0", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.54.0", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.96.0", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.51.2", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.116.0", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.31.0", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.11.3", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.30.2", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.25.2", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.27.98", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.70.0", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.72.0", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.55.1", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.75.0", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.91.0", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.71.0", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.25.0", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.112.0", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.108.0", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.44.0", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.43.0", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.84.0", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.125.0", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.128.0", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.66.1", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.100.0", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.62.0", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.10.9.27", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.21.0", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.87.0", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.17.0", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.53.0", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.12.97", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.10.7.1", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.12.0", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.98.0", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.133.0", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.105.0", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.10.9.29", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.42.1", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.10.8.13", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.51.0", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.37.0", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.46.0", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.16.1", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.12.98", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.18.0", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.30.0", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.47.0", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.10.9.25", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.10.8.17", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.60.0", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.86.0", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.10.8.58", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.11.1", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.124.0", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.42.0", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.95.0", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.52.0", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.63.0", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.64.0", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.90.0", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.135.0", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.89.0", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.113.0", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.30.1", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.69.0", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.50.0", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.67.0", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.22.0", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.70.1", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.114.0", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.10.8.16", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.33.2", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.12.99", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.10.7.11", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.45.1", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.103.0", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.129.0", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.127.0", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.50.1", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.20.0", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.32.0", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.123.0", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.97.0", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.107.0", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.126.0", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.40.0", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.14.0", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.10.8.57", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.48.1", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.93.0", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.53.1", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.28.1", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.109.0", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.28.2", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.130.0", + "{da6554a8-470c-4d6a-a6ca-904740683552}:1.122.0" + ], + "unblocked": [] + }, + "schema": 1662043011015, + "key_format": "{guid}:{version}", + "stash_time": 1662122107410, + "id": "dbe4018d-7722-49e8-b528-31ed90695443", + "last_modified": 1662122244237 + }, { "stash": { "blocked": [ @@ -1824,5 +2029,5 @@ "last_modified": 1656333551168 } ], - "timestamp": 1661971043645 + "timestamp": 1662143842464 } diff --git a/services/settings/dumps/security-state/intermediates.json b/services/settings/dumps/security-state/intermediates.json index 60b90434cb7e5..3f61ed415550c 100644 --- a/services/settings/dumps/security-state/intermediates.json +++ b/services/settings/dumps/security-state/intermediates.json @@ -1,7 +1,7 @@ { "data": [ { - "schema": 1661950623678, + "schema": 1662015423618, "derHash": "lzpBJ2/9AeAnoqrUnjTDeEbT6Xb/amILZxLjODIEGqY=", "subject": "CN=Go Daddy Secure Certificate Authority - G2,OU=http://certs.godaddy.com/repository/,O=GoDaddy.com%5C%5C, Inc.,L=Scottsdale,ST=Arizona,C=US", "subjectDN": "MIG0MQswCQYDVQQGEwJVUzEQMA4GA1UECBMHQXJpem9uYTETMBEGA1UEBxMKU2NvdHRzZGFsZTEaMBgGA1UEChMRR29EYWRkeS5jb20sIEluYy4xLTArBgNVBAsTJGh0dHA6Ly9jZXJ0cy5nb2RhZGR5LmNvbS9yZXBvc2l0b3J5LzEzMDEGA1UEAxMqR28gRGFkZHkgU2VjdXJlIENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcy", @@ -14,9 +14,9 @@ "mimetype": "application/x-pem-file" }, "pubKeyHash": "8Rw90Ej3Ttt8RRkrg+WYDS9n7IS03bk5bjP/UXPtaY8=", - "crlite_enrolled": false, + "crlite_enrolled": true, "id": "549c92e2-3738-4c8c-ae37-407e4e6158ce", - "last_modified": 1662015423121 + "last_modified": 1662037023056 }, { "schema": 1661950129116, @@ -26317,5 +26317,5 @@ "last_modified": 1559865863642 } ], - "timestamp": 1662015423121 + "timestamp": 1662037023056 }
This is an automated email from the git hooks/post-receive script.
richard pushed a commit to branch geckoview-102.3.0esr-12.0-1 in repository tor-browser.
commit 2ed4cb1654bd6379d294b3dd5c11b8a901b53383 Author: Neil Deakin neil@mozilla.com AuthorDate: Fri Sep 2 15:33:35 2022 +0000
Bug 1772988, add some additional extensions for some media types as Windows doesn't provide some of them, causing valid extensions to be replaced when saving files, r=mhowell, a=RyanVM
Differential Revision: https://phabricator.services.mozilla.com/D155972 --- .../exthandler/nsExternalHelperAppService.cpp | 7 ++- .../tests/unit/test_filename_sanitize.js | 62 ++++++++++++++++++++++ 2 files changed, 65 insertions(+), 4 deletions(-)
diff --git a/uriloader/exthandler/nsExternalHelperAppService.cpp b/uriloader/exthandler/nsExternalHelperAppService.cpp index f5b0e2e5bc95c..0ec02e346617b 100644 --- a/uriloader/exthandler/nsExternalHelperAppService.cpp +++ b/uriloader/exthandler/nsExternalHelperAppService.cpp @@ -540,16 +540,15 @@ static const nsExtraMimeTypeEntry extraMimeEntries[] = { {TEXT_CSS, "css", "Style Sheet"}, {TEXT_VCARD, "vcf,vcard", "Contact Information"}, {TEXT_CALENDAR, "ics,ical,ifb,icalendar", "iCalendar"}, - {VIDEO_OGG, "ogv", "Ogg Video"}, - {VIDEO_OGG, "ogg", "Ogg Video"}, + {VIDEO_OGG, "ogv,ogg", "Ogg Video"}, {APPLICATION_OGG, "ogg", "Ogg Video"}, {AUDIO_OGG, "oga", "Ogg Audio"}, {AUDIO_OGG, "opus", "Opus Audio"}, {VIDEO_WEBM, "webm", "Web Media Video"}, {AUDIO_WEBM, "webm", "Web Media Audio"}, - {AUDIO_MP3, "mp3", "MPEG Audio"}, + {AUDIO_MP3, "mp3,mpega,mp2", "MPEG Audio"}, {VIDEO_MP4, "mp4", "MPEG-4 Video"}, - {AUDIO_MP4, "m4a", "MPEG-4 Audio"}, + {AUDIO_MP4, "m4a,m4b", "MPEG-4 Audio"}, {VIDEO_RAW, "yuv", "Raw YUV Video"}, {AUDIO_WAV, "wav", "Waveform Audio"}, {VIDEO_3GPP, "3gpp,3gp", "3GPP Video"}, diff --git a/uriloader/exthandler/tests/unit/test_filename_sanitize.js b/uriloader/exthandler/tests/unit/test_filename_sanitize.js index 1ad902b0bebd2..11c18f2e13616 100644 --- a/uriloader/exthandler/tests/unit/test_filename_sanitize.js +++ b/uriloader/exthandler/tests/unit/test_filename_sanitize.js @@ -159,4 +159,66 @@ add_task(async function validate_filename_method() { checkFilename("test_テスト_T\x83E\S\x83T.pテ\x83ng", 0), "test_テスト_T E_S T.png" ); + + // Now check some media types + Assert.equal( + mimeService.validateFileNameForSaving("video.ogg", "video/ogg", 0), + "video.ogg", + "video.ogg" + ); + Assert.equal( + mimeService.validateFileNameForSaving("video.ogv", "video/ogg", 0), + "video.ogv", + "video.ogv" + ); + Assert.equal( + mimeService.validateFileNameForSaving("video.ogt", "video/ogg", 0), + "video.ogv", + "video.ogt" + ); + + Assert.equal( + mimeService.validateFileNameForSaving("audio.mp3", "audio/mpeg", 0), + "audio.mp3", + "audio.mp3" + ); + Assert.equal( + mimeService.validateFileNameForSaving("audio.mpega", "audio/mpeg", 0), + "audio.mpega", + "audio.mpega" + ); + Assert.equal( + mimeService.validateFileNameForSaving("audio.mp2", "audio/mpeg", 0), + "audio.mp2", + "audio.mp2" + ); + + let expected = "audio.mp3"; + if (AppConstants.platform == "linux") { + expected = "audio.mpga"; + } else if (AppConstants.platform == "android") { + expected = "audio.mp4"; + } + + Assert.equal( + mimeService.validateFileNameForSaving("audio.mp4", "audio/mpeg", 0), + expected, + "audio.mp4" + ); + + Assert.equal( + mimeService.validateFileNameForSaving("sound.m4a", "audio/mp4", 0), + "sound.m4a", + "sound.m4a" + ); + Assert.equal( + mimeService.validateFileNameForSaving("sound.m4b", "audio/mp4", 0), + AppConstants.platform == "android" ? "sound.m4a" : "sound.m4b", + "sound.m4b" + ); + Assert.equal( + mimeService.validateFileNameForSaving("sound.m4c", "audio/mp4", 0), + AppConstants.platform == "macosx" ? "sound.mp4" : "sound.m4a", + "sound.mpc" + ); });
This is an automated email from the git hooks/post-receive script.
richard pushed a commit to branch geckoview-102.3.0esr-12.0-1 in repository tor-browser.
commit b7c7929228f0ee91dce50fabffb35f7474237ef3 Author: Andreas Pehrson apehrson@mozilla.com AuthorDate: Mon Sep 5 13:56:11 2022 +0000
Bug 1786502 - Lock access to DeviceInfo devicechange callbacks. r=webrtc-reviewers,jib a=RyanVM
Differential Revision: https://phabricator.services.mozilla.com/D155365 --- dom/media/systemservices/CamerasParent.h | 2 +- third_party/libwebrtc/modules/video_capture/video_capture.h | 8 +++++++- 2 files changed, 8 insertions(+), 2 deletions(-)
diff --git a/dom/media/systemservices/CamerasParent.h b/dom/media/systemservices/CamerasParent.h index 37fc93326357b..f48f88b23e85c 100644 --- a/dom/media/systemservices/CamerasParent.h +++ b/dom/media/systemservices/CamerasParent.h @@ -56,7 +56,7 @@ class InputObserver : public webrtc::VideoInputFeedBack { private: ~InputObserver() = default;
- RefPtr<CamerasParent> mParent; + const RefPtr<CamerasParent> mParent; };
class DeliverFrameRunnable; diff --git a/third_party/libwebrtc/modules/video_capture/video_capture.h b/third_party/libwebrtc/modules/video_capture/video_capture.h index 64c55f0a4ef51..6866799b11652 100644 --- a/third_party/libwebrtc/modules/video_capture/video_capture.h +++ b/third_party/libwebrtc/modules/video_capture/video_capture.h @@ -17,6 +17,8 @@ #include "modules/include/module.h" #include "modules/desktop_capture/desktop_capture_types.h" #include "modules/video_capture/video_capture_defines.h" +#include "rtc_base/synchronization/mutex.h" +#include "rtc_base/thread_annotations.h" #include <set>
#if defined(ANDROID) @@ -82,15 +84,18 @@ class VideoCaptureModule : public rtc::RefCountInterface { virtual uint32_t NumberOfDevices() = 0; virtual int32_t Refresh() = 0; virtual void DeviceChange() { + MutexLock lock(&_inputCallbacksMutex); for (auto inputCallBack : _inputCallBacks) { inputCallBack->OnDeviceChange(); } } virtual void RegisterVideoInputFeedBack(VideoInputFeedBack* callBack) { + MutexLock lock(&_inputCallbacksMutex); _inputCallBacks.insert(callBack); }
virtual void DeRegisterVideoInputFeedBack(VideoInputFeedBack* callBack) { + MutexLock lock(&_inputCallbacksMutex); auto it = _inputCallBacks.find(callBack); if (it != _inputCallBacks.end()) { _inputCallBacks.erase(it); @@ -144,7 +149,8 @@ class VideoCaptureModule : public rtc::RefCountInterface {
virtual ~DeviceInfo() {} private: - std::set<VideoInputFeedBack*> _inputCallBacks; + Mutex _inputCallbacksMutex; + std::set<VideoInputFeedBack*> _inputCallBacks RTC_GUARDED_BY(_inputCallbacksMutex); };
// Register capture data callback
This is an automated email from the git hooks/post-receive script.
richard pushed a commit to branch geckoview-102.3.0esr-12.0-1 in repository tor-browser.
commit 4fbde0237d239b970f408fd5e707ef8f2e4bee3d Author: Calixte cdenizet@mozilla.com AuthorDate: Mon Sep 5 10:56:18 2022 +0000
Bug 1780839 - Update pdf.js to bf000687313b08924186f9f35a604f8cce27bd1d in ESR102. r=marco, a=RyanVM
- bug 1778692: cherry-pick 8f26ba54875ac0730fe72328301085fbb456898a - bug 1777693: cherry-pick 6c9e538f5621a554c867123c57b34a9493ec646a - fix test toolkit/components/pdfjs/test/browser_pdfjs_js.js
Differential Revision: https://phabricator.services.mozilla.com/D156417 --- .../pdfjs/content/PdfJsDefaultPreferences.jsm | 2 + toolkit/components/pdfjs/content/build/pdf.js | 16103 +++++++++++-------- .../pdfjs/content/build/pdf.scripting.js | 58 +- .../components/pdfjs/content/build/pdf.worker.js | 11227 +++++++------ toolkit/components/pdfjs/content/web/debugger.js | 99 +- .../web/images/toolbarButton-editorFreeText.svg | 24 + .../content/web/images/toolbarButton-editorInk.svg | 9 + .../web/images/toolbarButton-editorNone.svg | 4 + toolkit/components/pdfjs/content/web/viewer.css | 358 +- toolkit/components/pdfjs/content/web/viewer.html | 48 +- toolkit/components/pdfjs/content/web/viewer.js | 1633 +- toolkit/components/pdfjs/moz.yaml | 4 +- toolkit/components/pdfjs/test/browser_pdfjs_js.js | 2 +- 13 files changed, 17324 insertions(+), 12247 deletions(-)
diff --git a/toolkit/components/pdfjs/content/PdfJsDefaultPreferences.jsm b/toolkit/components/pdfjs/content/PdfJsDefaultPreferences.jsm index 91a36d0b00540..495893cea8186 100644 --- a/toolkit/components/pdfjs/content/PdfJsDefaultPreferences.jsm +++ b/toolkit/components/pdfjs/content/PdfJsDefaultPreferences.jsm @@ -22,6 +22,7 @@ "use strict"; var EXPORTED_SYMBOLS = ["PdfJsDefaultPreferences"]; var PdfJsDefaultPreferences = Object.freeze({ + "annotationEditorMode": -1, "annotationMode": 2, "cursorToolOnLoad": 0, "defaultZoomValue": "", @@ -32,6 +33,7 @@ var PdfJsDefaultPreferences = Object.freeze({ "externalLinkTarget": 0, "historyUpdateUrl": false, "ignoreDestinationZoom": false, + "forcePageColors": false, "pageColorsBackground": "Canvas", "pageColorsForeground": "CanvasText", "pdfBugEnabled": false, diff --git a/toolkit/components/pdfjs/content/build/pdf.js b/toolkit/components/pdfjs/content/build/pdf.js index 84575a1968044..535bf8ffa57ce 100644 --- a/toolkit/components/pdfjs/content/build/pdf.js +++ b/toolkit/components/pdfjs/content/build/pdf.js @@ -29,7 +29,7 @@ exports["pdfjs-dist/build/pdf"] = factory(); else root["pdfjs-dist/build/pdf"] = root.pdfjsLib = factory(); -})(this, () => { +})(globalThis, () => { return /******/ (() => { // webpackBootstrap /******/ "use strict"; /******/ var __webpack_modules__ = ([ @@ -42,7 +42,7 @@ return /******/ (() => { // webpackBootstrap Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.VerbosityLevel = exports.Util = exports.UnknownErrorException = exports.UnexpectedResponseException = exports.UNSUPPORTED_FEATURES = exports.TextRenderingMode = exports.StreamType = exports.RenderingIntentFlag = exports.PermissionFlag = exports.PasswordResponses = exports.PasswordException = exports.PageActionEventType = exports.OPS = exports.MissingPDFException = exports.InvalidPDFException = exports.ImageKind = exports.IDENTITY_MATRIX = exports.FormatError = exports.FontType = [...] +exports.VerbosityLevel = exports.Util = exports.UnknownErrorException = exports.UnexpectedResponseException = exports.UNSUPPORTED_FEATURES = exports.TextRenderingMode = exports.StreamType = exports.RenderingIntentFlag = exports.PermissionFlag = exports.PasswordResponses = exports.PasswordException = exports.PageActionEventType = exports.OPS = exports.MissingPDFException = exports.LINE_FACTOR = exports.LINE_DESCENT_FACTOR = exports.InvalidPDFException = exports.ImageKind = exports.IDENTIT [...] exports.arrayByteLength = arrayByteLength; exports.arraysToBytes = arraysToBytes; exports.assert = assert; @@ -75,6 +75,10 @@ const IDENTITY_MATRIX = [1, 0, 0, 1, 0, 0]; exports.IDENTITY_MATRIX = IDENTITY_MATRIX; const FONT_IDENTITY_MATRIX = [0.001, 0, 0, 0.001, 0, 0]; exports.FONT_IDENTITY_MATRIX = FONT_IDENTITY_MATRIX; +const LINE_FACTOR = 1.35; +exports.LINE_FACTOR = LINE_FACTOR; +const LINE_DESCENT_FACTOR = 0.35; +exports.LINE_DESCENT_FACTOR = LINE_DESCENT_FACTOR; const RenderingIntentFlag = { ANY: 0x01, DISPLAY: 0x02, @@ -92,6 +96,22 @@ const AnnotationMode = { ENABLE_STORAGE: 3 }; exports.AnnotationMode = AnnotationMode; +const AnnotationEditorPrefix = "pdfjs_internal_editor_"; +exports.AnnotationEditorPrefix = AnnotationEditorPrefix; +const AnnotationEditorType = { + DISABLE: -1, + NONE: 0, + FREETEXT: 3, + INK: 15 +}; +exports.AnnotationEditorType = AnnotationEditorType; +const AnnotationEditorParamsType = { + FREETEXT_SIZE: 0, + FREETEXT_COLOR: 1, + INK_COLOR: 2, + INK_THICKNESS: 3 +}; +exports.AnnotationEditorParamsType = AnnotationEditorParamsType; const PermissionFlag = { PRINT: 0x04, MODIFY_CONTENTS: 0x08, @@ -1087,3164 +1107,2965 @@ exports.isNodeJS = isNodeJS; Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.build = exports.RenderTask = exports.PDFWorkerUtil = exports.PDFWorker = exports.PDFPageProxy = exports.PDFDocumentProxy = exports.PDFDocumentLoadingTask = exports.PDFDataRangeTransport = exports.LoopbackPort = exports.DefaultStandardFontDataFactory = exports.DefaultCanvasFactory = exports.DefaultCMapReaderFactory = void 0; -exports.getDocument = getDocument; -exports.setPDFNetworkStreamFactory = setPDFNetworkStreamFactory; -exports.version = void 0; +exports.StatTimer = exports.RenderingCancelledException = exports.PixelsPerInch = exports.PageViewport = exports.PDFDateString = exports.DOMStandardFontDataFactory = exports.DOMSVGFactory = exports.DOMCanvasFactory = exports.DOMCMapReaderFactory = void 0; +exports.binarySearchFirstItem = binarySearchFirstItem; +exports.deprecated = deprecated; +exports.getColorValues = getColorValues; +exports.getFilenameFromUrl = getFilenameFromUrl; +exports.getPdfFilenameFromUrl = getPdfFilenameFromUrl; +exports.getRGB = getRGB; +exports.getXfaPageViewport = getXfaPageViewport; +exports.isDataScheme = isDataScheme; +exports.isPdfFile = isPdfFile; +exports.isValidFetchUrl = isValidFetchUrl; +exports.loadScript = loadScript; + +var _base_factory = __w_pdfjs_require__(5);
var _util = __w_pdfjs_require__(1);
-var _display_utils = __w_pdfjs_require__(5); +const SVG_NS = "http://www.w3.org/2000/svg";
-var _font_loader = __w_pdfjs_require__(7); +class PixelsPerInch { + static CSS = 96.0; + static PDF = 72.0; + static PDF_TO_CSS_UNITS = this.CSS / this.PDF; +}
-var _annotation_storage = __w_pdfjs_require__(8); +exports.PixelsPerInch = PixelsPerInch;
-var _canvas = __w_pdfjs_require__(10); +class DOMCanvasFactory extends _base_factory.BaseCanvasFactory { + constructor({ + ownerDocument = globalThis.document + } = {}) { + super(); + this._document = ownerDocument; + }
-var _worker_options = __w_pdfjs_require__(13); + _createCanvas(width, height) { + const canvas = this._document.createElement("canvas");
-var _is_node = __w_pdfjs_require__(3); + canvas.width = width; + canvas.height = height; + return canvas; + }
-var _message_handler = __w_pdfjs_require__(14); +}
-var _metadata = __w_pdfjs_require__(15); +exports.DOMCanvasFactory = DOMCanvasFactory;
-var _optional_content_config = __w_pdfjs_require__(16); +async function fetchData(url, asTypedArray = false) { + const response = await fetch(url);
-var _transport_stream = __w_pdfjs_require__(17); + if (!response.ok) { + throw new Error(response.statusText); + }
-var _xfa_text = __w_pdfjs_require__(18); + return asTypedArray ? new Uint8Array(await response.arrayBuffer()) : (0, _util.stringToBytes)(await response.text()); +}
-const DEFAULT_RANGE_CHUNK_SIZE = 65536; -const RENDERING_CANCELLED_TIMEOUT = 100; -let DefaultCanvasFactory = _display_utils.DOMCanvasFactory; -exports.DefaultCanvasFactory = DefaultCanvasFactory; -let DefaultCMapReaderFactory = _display_utils.DOMCMapReaderFactory; -exports.DefaultCMapReaderFactory = DefaultCMapReaderFactory; -let DefaultStandardFontDataFactory = _display_utils.DOMStandardFontDataFactory; -exports.DefaultStandardFontDataFactory = DefaultStandardFontDataFactory; -; -let createPDFNetworkStream; +class DOMCMapReaderFactory extends _base_factory.BaseCMapReaderFactory { + _fetchData(url, compressionType) { + return fetchData(url, this.isCompressed).then(data => { + return { + cMapData: data, + compressionType + }; + }); + }
-function setPDFNetworkStreamFactory(pdfNetworkStreamFactory) { - createPDFNetworkStream = pdfNetworkStreamFactory; }
-function getDocument(src) { - const task = new PDFDocumentLoadingTask(); - let source; +exports.DOMCMapReaderFactory = DOMCMapReaderFactory;
- if (typeof src === "string" || src instanceof URL) { - source = { - url: src - }; - } else if ((0, _util.isArrayBuffer)(src)) { - source = { - data: src - }; - } else if (src instanceof PDFDataRangeTransport) { - source = { - range: src - }; - } else { - if (typeof src !== "object") { - throw new Error("Invalid parameter in getDocument, " + "need either string, URL, Uint8Array, or parameter object."); - } +class DOMStandardFontDataFactory extends _base_factory.BaseStandardFontDataFactory { + _fetchData(url) { + return fetchData(url, true); + }
- if (!src.url && !src.data && !src.range) { - throw new Error("Invalid parameter object: need either .data, .range or .url"); - } +}
- source = src; +exports.DOMStandardFontDataFactory = DOMStandardFontDataFactory; + +class DOMSVGFactory extends _base_factory.BaseSVGFactory { + _createSVG(type) { + return document.createElementNS(SVG_NS, type); }
- const params = Object.create(null); - let rangeTransport = null, - worker = null; +}
- for (const key in source) { - const value = source[key]; +exports.DOMSVGFactory = DOMSVGFactory;
- switch (key) { - case "url": - if (typeof window !== "undefined") { - try { - params[key] = new URL(value, window.location).href; - continue; - } catch (ex) { - (0, _util.warn)(`Cannot create valid URL: "${ex}".`); - } - } else if (typeof value === "string" || value instanceof URL) { - params[key] = value.toString(); - continue; - } +class PageViewport { + constructor({ + viewBox, + scale, + rotation, + offsetX = 0, + offsetY = 0, + dontFlip = false + }) { + this.viewBox = viewBox; + this.scale = scale; + this.rotation = rotation; + this.offsetX = offsetX; + this.offsetY = offsetY; + const centerX = (viewBox[2] + viewBox[0]) / 2; + const centerY = (viewBox[3] + viewBox[1]) / 2; + let rotateA, rotateB, rotateC, rotateD; + rotation %= 360;
- throw new Error("Invalid PDF url data: " + "either string or URL-object is expected in the url property."); + if (rotation < 0) { + rotation += 360; + }
- case "range": - rangeTransport = value; - continue; + switch (rotation) { + case 180: + rotateA = -1; + rotateB = 0; + rotateC = 0; + rotateD = 1; + break;
- case "worker": - worker = value; - continue; + case 90: + rotateA = 0; + rotateB = 1; + rotateC = 1; + rotateD = 0; + break;
- case "data": - if (value instanceof Uint8Array) { - break; - } else if (typeof value === "string") { - params[key] = (0, _util.stringToBytes)(value); - } else if (typeof value === "object" && value !== null && !isNaN(value.length)) { - params[key] = new Uint8Array(value); - } else if ((0, _util.isArrayBuffer)(value)) { - params[key] = new Uint8Array(value); - } else { - throw new Error("Invalid PDF binary data: either typed array, " + "string, or array-like object is expected in the data property."); - } + case 270: + rotateA = 0; + rotateB = -1; + rotateC = -1; + rotateD = 0; + break;
- continue; + case 0: + rotateA = 1; + rotateB = 0; + rotateC = 0; + rotateD = -1; + break; + + default: + throw new Error("PageViewport: Invalid rotation, must be a multiple of 90 degrees."); }
- params[key] = value; - } + if (dontFlip) { + rotateC = -rotateC; + rotateD = -rotateD; + }
- params.CMapReaderFactory = params.CMapReaderFactory || DefaultCMapReaderFactory; - params.StandardFontDataFactory = params.StandardFontDataFactory || DefaultStandardFontDataFactory; - params.ignoreErrors = params.stopAtErrors !== true; - params.fontExtraProperties = params.fontExtraProperties === true; - params.pdfBug = params.pdfBug === true; - params.enableXfa = params.enableXfa === true; + let offsetCanvasX, offsetCanvasY; + let width, height;
- if (!Number.isInteger(params.rangeChunkSize) || params.rangeChunkSize < 1) { - params.rangeChunkSize = DEFAULT_RANGE_CHUNK_SIZE; - } + if (rotateA === 0) { + offsetCanvasX = Math.abs(centerY - viewBox[1]) * scale + offsetX; + offsetCanvasY = Math.abs(centerX - viewBox[0]) * scale + offsetY; + width = Math.abs(viewBox[3] - viewBox[1]) * scale; + height = Math.abs(viewBox[2] - viewBox[0]) * scale; + } else { + offsetCanvasX = Math.abs(centerX - viewBox[0]) * scale + offsetX; + offsetCanvasY = Math.abs(centerY - viewBox[1]) * scale + offsetY; + width = Math.abs(viewBox[2] - viewBox[0]) * scale; + height = Math.abs(viewBox[3] - viewBox[1]) * scale; + }
- if (typeof params.docBaseUrl !== "string" || (0, _display_utils.isDataScheme)(params.docBaseUrl)) { - params.docBaseUrl = null; + this.transform = [rotateA * scale, rotateB * scale, rotateC * scale, rotateD * scale, offsetCanvasX - rotateA * scale * centerX - rotateC * scale * centerY, offsetCanvasY - rotateB * scale * centerX - rotateD * scale * centerY]; + this.width = width; + this.height = height; }
- if (!Number.isInteger(params.maxImageSize) || params.maxImageSize < -1) { - params.maxImageSize = -1; + clone({ + scale = this.scale, + rotation = this.rotation, + offsetX = this.offsetX, + offsetY = this.offsetY, + dontFlip = false + } = {}) { + return new PageViewport({ + viewBox: this.viewBox.slice(), + scale, + rotation, + offsetX, + offsetY, + dontFlip + }); }
- if (typeof params.cMapUrl !== "string") { - params.cMapUrl = null; + convertToViewportPoint(x, y) { + return _util.Util.applyTransform([x, y], this.transform); }
- if (typeof params.standardFontDataUrl !== "string") { - params.standardFontDataUrl = null; - } + convertToViewportRectangle(rect) { + const topLeft = _util.Util.applyTransform([rect[0], rect[1]], this.transform);
- if (typeof params.useWorkerFetch !== "boolean") { - params.useWorkerFetch = params.CMapReaderFactory === _display_utils.DOMCMapReaderFactory && params.StandardFontDataFactory === _display_utils.DOMStandardFontDataFactory; + const bottomRight = _util.Util.applyTransform([rect[2], rect[3]], this.transform); + + return [topLeft[0], topLeft[1], bottomRight[0], bottomRight[1]]; }
- if (typeof params.isEvalSupported !== "boolean") { - params.isEvalSupported = true; - } - - if (typeof params.disableFontFace !== "boolean") { - params.disableFontFace = _is_node.isNodeJS; + convertToPdfPoint(x, y) { + return _util.Util.applyInverseTransform([x, y], this.transform); }
- if (typeof params.useSystemFonts !== "boolean") { - params.useSystemFonts = !_is_node.isNodeJS && !params.disableFontFace; - } +}
- if (typeof params.ownerDocument !== "object" || params.ownerDocument === null) { - params.ownerDocument = globalThis.document; - } +exports.PageViewport = PageViewport;
- if (typeof params.disableRange !== "boolean") { - params.disableRange = false; +class RenderingCancelledException extends _util.BaseException { + constructor(msg, type) { + super(msg, "RenderingCancelledException"); + this.type = type; }
- if (typeof params.disableStream !== "boolean") { - params.disableStream = false; - } +}
- if (typeof params.disableAutoFetch !== "boolean") { - params.disableAutoFetch = false; - } +exports.RenderingCancelledException = RenderingCancelledException;
- (0, _util.setVerbosityLevel)(params.verbosity); +function isDataScheme(url) { + const ii = url.length; + let i = 0;
- if (!worker) { - const workerParams = { - verbosity: params.verbosity, - port: _worker_options.GlobalWorkerOptions.workerPort - }; - worker = workerParams.port ? PDFWorker.fromPort(workerParams) : new PDFWorker(workerParams); - task._worker = worker; + while (i < ii && url[i].trim() === "") { + i++; }
- const docId = task.docId; - worker.promise.then(function () { - if (task.destroyed) { - throw new Error("Loading aborted"); - } - - const workerIdPromise = _fetchDocument(worker, params, rangeTransport, docId); - - const networkStreamPromise = new Promise(function (resolve) { - let networkStream; - - if (rangeTransport) { - networkStream = new _transport_stream.PDFDataTransportStream({ - length: params.length, - initialData: params.initialData, - progressiveDone: params.progressiveDone, - contentDispositionFilename: params.contentDispositionFilename, - disableRange: params.disableRange, - disableStream: params.disableStream - }, rangeTransport); - } else if (!params.data) { - networkStream = createPDFNetworkStream({ - url: params.url, - length: params.length, - httpHeaders: params.httpHeaders, - withCredentials: params.withCredentials, - rangeChunkSize: params.rangeChunkSize, - disableRange: params.disableRange, - disableStream: params.disableStream - }); - } + return url.substring(i, i + 5).toLowerCase() === "data:"; +}
- resolve(networkStream); - }); - return Promise.all([workerIdPromise, networkStreamPromise]).then(function ([workerId, networkStream]) { - if (task.destroyed) { - throw new Error("Loading aborted"); - } +function isPdfFile(filename) { + return typeof filename === "string" && /.pdf$/i.test(filename); +}
- const messageHandler = new _message_handler.MessageHandler(docId, workerId, worker.port); - const transport = new WorkerTransport(messageHandler, task, networkStream, params); - task._transport = transport; - messageHandler.send("Ready", null); - }); - }).catch(task._capability.reject); - return task; +function getFilenameFromUrl(url) { + const anchor = url.indexOf("#"); + const query = url.indexOf("?"); + const end = Math.min(anchor > 0 ? anchor : url.length, query > 0 ? query : url.length); + return url.substring(url.lastIndexOf("/", end) + 1, end); }
-async function _fetchDocument(worker, source, pdfDataRangeTransport, docId) { - if (worker.destroyed) { - throw new Error("Worker was destroyed"); +function getPdfFilenameFromUrl(url, defaultFilename = "document.pdf") { + if (typeof url !== "string") { + return defaultFilename; }
- if (pdfDataRangeTransport) { - source.length = pdfDataRangeTransport.length; - source.initialData = pdfDataRangeTransport.initialData; - source.progressiveDone = pdfDataRangeTransport.progressiveDone; - source.contentDispositionFilename = pdfDataRangeTransport.contentDispositionFilename; + if (isDataScheme(url)) { + (0, _util.warn)('getPdfFilenameFromUrl: ignore "data:"-URL for performance reasons.'); + return defaultFilename; }
- const workerId = await worker.messageHandler.sendWithPromise("GetDocRequest", { - docId, - apiVersion: '2.14.290', - source: { - data: source.data, - url: source.url, - password: source.password, - disableAutoFetch: source.disableAutoFetch, - rangeChunkSize: source.rangeChunkSize, - length: source.length - }, - maxImageSize: source.maxImageSize, - disableFontFace: source.disableFontFace, - docBaseUrl: source.docBaseUrl, - ignoreErrors: source.ignoreErrors, - isEvalSupported: source.isEvalSupported, - fontExtraProperties: source.fontExtraProperties, - enableXfa: source.enableXfa, - useSystemFonts: source.useSystemFonts, - cMapUrl: source.useWorkerFetch ? source.cMapUrl : null, - standardFontDataUrl: source.useWorkerFetch ? source.standardFontDataUrl : null - }); + const reURI = /^(?:(?:[^:]+:)?//[^/]+)?([^?#]*)(?[^#]*)?(#.*)?$/; + const reFilename = /[^/?#=]+.pdf\b(?!.*.pdf\b)/i; + const splitURI = reURI.exec(url); + let suggestedFilename = reFilename.exec(splitURI[1]) || reFilename.exec(splitURI[2]) || reFilename.exec(splitURI[3]);
- if (worker.destroyed) { - throw new Error("Worker was destroyed"); + if (suggestedFilename) { + suggestedFilename = suggestedFilename[0]; + + if (suggestedFilename.includes("%")) { + try { + suggestedFilename = reFilename.exec(decodeURIComponent(suggestedFilename))[0]; + } catch (ex) {} + } }
- return workerId; + return suggestedFilename || defaultFilename; }
-class PDFDocumentLoadingTask { - static #docId = 0; - +class StatTimer { constructor() { - this._capability = (0, _util.createPromiseCapability)(); - this._transport = null; - this._worker = null; - this.docId = `d${PDFDocumentLoadingTask.#docId++}`; - this.destroyed = false; - this.onPassword = null; - this.onProgress = null; - this.onUnsupportedFeature = null; - } - - get promise() { - return this._capability.promise; + this.started = Object.create(null); + this.times = []; }
- async destroy() { - this.destroyed = true; - await this._transport?.destroy(); - this._transport = null; + time(name) { + if (name in this.started) { + (0, _util.warn)(`Timer is already running for ${name}`); + }
- if (this._worker) { - this._worker.destroy(); + this.started[name] = Date.now(); + }
- this._worker = null; + timeEnd(name) { + if (!(name in this.started)) { + (0, _util.warn)(`Timer has not been started for ${name}`); } + + this.times.push({ + name, + start: this.started[name], + end: Date.now() + }); + delete this.started[name]; }
-} + toString() { + const outBuf = []; + let longest = 0;
-exports.PDFDocumentLoadingTask = PDFDocumentLoadingTask; + for (const time of this.times) { + const name = time.name;
-class PDFDataRangeTransport { - constructor(length, initialData, progressiveDone = false, contentDispositionFilename = null) { - this.length = length; - this.initialData = initialData; - this.progressiveDone = progressiveDone; - this.contentDispositionFilename = contentDispositionFilename; - this._rangeListeners = []; - this._progressListeners = []; - this._progressiveReadListeners = []; - this._progressiveDoneListeners = []; - this._readyCapability = (0, _util.createPromiseCapability)(); - } + if (name.length > longest) { + longest = name.length; + } + }
- addRangeListener(listener) { - this._rangeListeners.push(listener); - } + for (const time of this.times) { + const duration = time.end - time.start; + outBuf.push(`${time.name.padEnd(longest)} ${duration}ms\n`); + }
- addProgressListener(listener) { - this._progressListeners.push(listener); + return outBuf.join(""); }
- addProgressiveReadListener(listener) { - this._progressiveReadListeners.push(listener); - } +}
- addProgressiveDoneListener(listener) { - this._progressiveDoneListeners.push(listener); - } +exports.StatTimer = StatTimer;
- onDataRange(begin, chunk) { - for (const listener of this._rangeListeners) { - listener(begin, chunk); - } +function isValidFetchUrl(url, baseUrl) { + try { + const { + protocol + } = baseUrl ? new URL(url, baseUrl) : new URL(url); + return protocol === "http:" || protocol === "https:"; + } catch (ex) { + return false; } +}
- onDataProgress(loaded, total) { - this._readyCapability.promise.then(() => { - for (const listener of this._progressListeners) { - listener(loaded, total); - } - }); - } +function loadScript(src, removeScriptElement = false) { + return new Promise((resolve, reject) => { + const script = document.createElement("script"); + script.src = src;
- onDataProgressiveRead(chunk) { - this._readyCapability.promise.then(() => { - for (const listener of this._progressiveReadListeners) { - listener(chunk); - } - }); - } - - onDataProgressiveDone() { - this._readyCapability.promise.then(() => { - for (const listener of this._progressiveDoneListeners) { - listener(); + script.onload = function (evt) { + if (removeScriptElement) { + script.remove(); } - }); - }
- transportReady() { - this._readyCapability.resolve(); - } + resolve(evt); + };
- requestDataRange(begin, end) { - (0, _util.unreachable)("Abstract method PDFDataRangeTransport.requestDataRange"); - } + script.onerror = function () { + reject(new Error(`Cannot load script at: ${script.src}`)); + };
- abort() {} + (document.head || document.documentElement).append(script); + }); +}
+function deprecated(details) { + console.log("Deprecated API usage: " + details); }
-exports.PDFDataRangeTransport = PDFDataRangeTransport; +let pdfDateStringRegex;
-class PDFDocumentProxy { - constructor(pdfInfo, transport) { - this._pdfInfo = pdfInfo; - this._transport = transport; - } +class PDFDateString { + static toDateObject(input) { + if (!input || typeof input !== "string") { + return null; + }
- get annotationStorage() { - return this._transport.annotationStorage; - } + if (!pdfDateStringRegex) { + pdfDateStringRegex = new RegExp("^D:" + "(\d{4})" + "(\d{2})?" + "(\d{2})?" + "(\d{2})?" + "(\d{2})?" + "(\d{2})?" + "([Z|+|-])?" + "(\d{2})?" + "'?" + "(\d{2})?" + "'?"); + }
- get numPages() { - return this._pdfInfo.numPages; - } + const matches = pdfDateStringRegex.exec(input);
- get fingerprints() { - return this._pdfInfo.fingerprints; - } + if (!matches) { + return null; + }
- get stats() { - return this._transport.stats; - } + const year = parseInt(matches[1], 10); + let month = parseInt(matches[2], 10); + month = month >= 1 && month <= 12 ? month - 1 : 0; + let day = parseInt(matches[3], 10); + day = day >= 1 && day <= 31 ? day : 1; + let hour = parseInt(matches[4], 10); + hour = hour >= 0 && hour <= 23 ? hour : 0; + let minute = parseInt(matches[5], 10); + minute = minute >= 0 && minute <= 59 ? minute : 0; + let second = parseInt(matches[6], 10); + second = second >= 0 && second <= 59 ? second : 0; + const universalTimeRelation = matches[7] || "Z"; + let offsetHour = parseInt(matches[8], 10); + offsetHour = offsetHour >= 0 && offsetHour <= 23 ? offsetHour : 0; + let offsetMinute = parseInt(matches[9], 10) || 0; + offsetMinute = offsetMinute >= 0 && offsetMinute <= 59 ? offsetMinute : 0;
- get isPureXfa() { - return !!this._transport._htmlForXfa; - } + if (universalTimeRelation === "-") { + hour += offsetHour; + minute += offsetMinute; + } else if (universalTimeRelation === "+") { + hour -= offsetHour; + minute -= offsetMinute; + }
- get allXfaHtml() { - return this._transport._htmlForXfa; + return new Date(Date.UTC(year, month, day, hour, minute, second)); }
- getPage(pageNumber) { - return this._transport.getPage(pageNumber); - } +}
- getPageIndex(ref) { - return this._transport.getPageIndex(ref); - } +exports.PDFDateString = PDFDateString;
- getDestinations() { - return this._transport.getDestinations(); - } +function getXfaPageViewport(xfaPage, { + scale = 1, + rotation = 0 +}) { + const { + width, + height + } = xfaPage.attributes.style; + const viewBox = [0, 0, parseInt(width), parseInt(height)]; + return new PageViewport({ + viewBox, + scale, + rotation + }); +}
- getDestination(id) { - return this._transport.getDestination(id); +function getRGB(color) { + if (color.startsWith("#")) { + const colorRGB = parseInt(color.slice(1), 16); + return [(colorRGB & 0xff0000) >> 16, (colorRGB & 0x00ff00) >> 8, colorRGB & 0x0000ff]; }
- getPageLabels() { - return this._transport.getPageLabels(); + if (color.startsWith("rgb(")) { + return color.slice(4, -1).split(",").map(x => parseInt(x)); }
- getPageLayout() { - return this._transport.getPageLayout(); - } + (0, _util.warn)(`Not a valid color format: "${color}"`); + return [0, 0, 0]; +}
- getPageMode() { - return this._transport.getPageMode(); - } +function getColorValues(colors) { + const span = document.createElement("span"); + span.style.visibility = "hidden"; + document.body.append(span);
- getViewerPreferences() { - return this._transport.getViewerPreferences(); + for (const name of colors.keys()) { + span.style.color = name; + const computedColor = window.getComputedStyle(span).color; + colors.set(name, getRGB(computedColor)); }
- getOpenAction() { - return this._transport.getOpenAction(); - } + span.remove(); +}
- getAttachments() { - return this._transport.getAttachments(); - } +function binarySearchFirstItem(items, condition, start = 0) { + let minIndex = start; + let maxIndex = items.length - 1;
- getJavaScript() { - return this._transport.getJavaScript(); + if (maxIndex < 0 || !condition(items[maxIndex])) { + return items.length; }
- getJSActions() { - return this._transport.getDocJSActions(); + if (condition(items[minIndex])) { + return minIndex; }
- getOutline() { - return this._transport.getOutline(); - } + while (minIndex < maxIndex) { + const currentIndex = minIndex + maxIndex >> 1; + const currentItem = items[currentIndex];
- getOptionalContentConfig() { - return this._transport.getOptionalContentConfig(); + if (condition(currentItem)) { + maxIndex = currentIndex; + } else { + minIndex = currentIndex + 1; + } }
- getPermissions() { - return this._transport.getPermissions(); - } + return minIndex; +}
- getMetadata() { - return this._transport.getMetadata(); - } +/***/ }), +/* 5 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
- getMarkInfo() { - return this._transport.getMarkInfo(); - }
- getData() { - return this._transport.getData(); - }
- getDownloadInfo() { - return this._transport.downloadInfoCapability.promise; - } +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.BaseStandardFontDataFactory = exports.BaseSVGFactory = exports.BaseCanvasFactory = exports.BaseCMapReaderFactory = void 0;
- cleanup(keepLoadedFonts = false) { - return this._transport.startCleanup(keepLoadedFonts || this.isPureXfa); - } +var _util = __w_pdfjs_require__(1);
- destroy() { - return this.loadingTask.destroy(); +class BaseCanvasFactory { + constructor() { + if (this.constructor === BaseCanvasFactory) { + (0, _util.unreachable)("Cannot initialize BaseCanvasFactory."); + } }
- get loadingParams() { - return this._transport.loadingParams; - } + create(width, height) { + if (width <= 0 || height <= 0) { + throw new Error("Invalid canvas size"); + }
- get loadingTask() { - return this._transport.loadingTask; - } + const canvas = this._createCanvas(width, height);
- saveDocument() { - return this._transport.saveDocument(); + return { + canvas, + context: canvas.getContext("2d") + }; }
- getFieldObjects() { - return this._transport.getFieldObjects(); - } + reset(canvasAndContext, width, height) { + if (!canvasAndContext.canvas) { + throw new Error("Canvas is not specified"); + }
- hasJSActions() { - return this._transport.hasJSActions(); - } + if (width <= 0 || height <= 0) { + throw new Error("Invalid canvas size"); + }
- getCalculationOrderIds() { - return this._transport.getCalculationOrderIds(); + canvasAndContext.canvas.width = width; + canvasAndContext.canvas.height = height; }
-} - -exports.PDFDocumentProxy = PDFDocumentProxy; + destroy(canvasAndContext) { + if (!canvasAndContext.canvas) { + throw new Error("Canvas is not specified"); + }
-class PDFPageProxy { - constructor(pageIndex, pageInfo, transport, ownerDocument, pdfBug = false) { - this._pageIndex = pageIndex; - this._pageInfo = pageInfo; - this._ownerDocument = ownerDocument; - this._transport = transport; - this._stats = pdfBug ? new _display_utils.StatTimer() : null; - this._pdfBug = pdfBug; - this.commonObjs = transport.commonObjs; - this.objs = new PDFObjects(); - this._bitmaps = new Set(); - this.cleanupAfterRender = false; - this.pendingCleanup = false; - this._intentStates = new Map(); - this._annotationPromises = new Map(); - this.destroyed = false; + canvasAndContext.canvas.width = 0; + canvasAndContext.canvas.height = 0; + canvasAndContext.canvas = null; + canvasAndContext.context = null; }
- get pageNumber() { - return this._pageIndex + 1; + _createCanvas(width, height) { + (0, _util.unreachable)("Abstract method `_createCanvas` called."); }
- get rotate() { - return this._pageInfo.rotate; - } +}
- get ref() { - return this._pageInfo.ref; - } +exports.BaseCanvasFactory = BaseCanvasFactory;
- get userUnit() { - return this._pageInfo.userUnit; - } +class BaseCMapReaderFactory { + constructor({ + baseUrl = null, + isCompressed = false + }) { + if (this.constructor === BaseCMapReaderFactory) { + (0, _util.unreachable)("Cannot initialize BaseCMapReaderFactory."); + }
- get view() { - return this._pageInfo.view; + this.baseUrl = baseUrl; + this.isCompressed = isCompressed; }
- getViewport({ - scale, - rotation = this.rotate, - offsetX = 0, - offsetY = 0, - dontFlip = false - } = {}) { - return new _display_utils.PageViewport({ - viewBox: this.view, - scale, - rotation, - offsetX, - offsetY, - dontFlip + async fetch({ + name + }) { + if (!this.baseUrl) { + throw new Error('The CMap "baseUrl" parameter must be specified, ensure that ' + 'the "cMapUrl" and "cMapPacked" API parameters are provided.'); + } + + if (!name) { + throw new Error("CMap name must be specified."); + } + + const url = this.baseUrl + name + (this.isCompressed ? ".bcmap" : ""); + const compressionType = this.isCompressed ? _util.CMapCompressionType.BINARY : _util.CMapCompressionType.NONE; + return this._fetchData(url, compressionType).catch(reason => { + throw new Error(`Unable to load ${this.isCompressed ? "binary " : ""}CMap at: ${url}`); }); }
- getAnnotations({ - intent = "display" - } = {}) { - const intentArgs = this._transport.getRenderingIntent(intent); + _fetchData(url, compressionType) { + (0, _util.unreachable)("Abstract method `_fetchData` called."); + }
- let promise = this._annotationPromises.get(intentArgs.cacheKey); +}
- if (!promise) { - promise = this._transport.getAnnotations(this._pageIndex, intentArgs.renderingIntent); +exports.BaseCMapReaderFactory = BaseCMapReaderFactory;
- this._annotationPromises.set(intentArgs.cacheKey, promise); +class BaseStandardFontDataFactory { + constructor({ + baseUrl = null + }) { + if (this.constructor === BaseStandardFontDataFactory) { + (0, _util.unreachable)("Cannot initialize BaseStandardFontDataFactory."); }
- return promise; - } - - getJSActions() { - return this._jsActionsPromise ||= this._transport.getPageJSActions(this._pageIndex); - } - - async getXfa() { - return this._transport._htmlForXfa?.children[this._pageIndex] || null; + this.baseUrl = baseUrl; }
- render({ - canvasContext, - viewport, - intent = "display", - annotationMode = _util.AnnotationMode.ENABLE, - transform = null, - imageLayer = null, - canvasFactory = null, - background = null, - optionalContentConfigPromise = null, - annotationCanvasMap = null, - pageColors = null + async fetch({ + filename }) { - if (this._stats) { - this._stats.time("Overall"); + if (!this.baseUrl) { + throw new Error('The standard font "baseUrl" parameter must be specified, ensure that ' + 'the "standardFontDataUrl" API parameter is provided.'); }
- const intentArgs = this._transport.getRenderingIntent(intent, annotationMode); + if (!filename) { + throw new Error("Font filename must be specified."); + }
- this.pendingCleanup = false; + const url = `${this.baseUrl}${filename}`; + return this._fetchData(url).catch(reason => { + throw new Error(`Unable to load font data at: ${url}`); + }); + }
- if (!optionalContentConfigPromise) { - optionalContentConfigPromise = this._transport.getOptionalContentConfig(); - } + _fetchData(url) { + (0, _util.unreachable)("Abstract method `_fetchData` called."); + }
- let intentState = this._intentStates.get(intentArgs.cacheKey); +}
- if (!intentState) { - intentState = Object.create(null); +exports.BaseStandardFontDataFactory = BaseStandardFontDataFactory;
- this._intentStates.set(intentArgs.cacheKey, intentState); +class BaseSVGFactory { + constructor() { + if (this.constructor === BaseSVGFactory) { + (0, _util.unreachable)("Cannot initialize BaseSVGFactory."); } + }
- if (intentState.streamReaderCancelTimeout) { - clearTimeout(intentState.streamReaderCancelTimeout); - intentState.streamReaderCancelTimeout = null; + create(width, height, skipDimensions = false) { + if (width <= 0 || height <= 0) { + throw new Error("Invalid SVG dimensions"); }
- const canvasFactoryInstance = canvasFactory || new DefaultCanvasFactory({ - ownerDocument: this._ownerDocument - }); - const intentPrint = !!(intentArgs.renderingIntent & _util.RenderingIntentFlag.PRINT); + const svg = this._createSVG("svg:svg");
- if (!intentState.displayReadyCapability) { - intentState.displayReadyCapability = (0, _util.createPromiseCapability)(); - intentState.operatorList = { - fnArray: [], - argsArray: [], - lastChunk: false - }; + svg.setAttribute("version", "1.1");
- if (this._stats) { - this._stats.time("Page Request"); - } + if (!skipDimensions) { + svg.setAttribute("width", `${width}px`); + svg.setAttribute("height", `${height}px`); + }
- this._pumpOperatorList(intentArgs); + svg.setAttribute("preserveAspectRatio", "none"); + svg.setAttribute("viewBox", `0 0 ${width} ${height}`); + return svg; + } + + createElement(type) { + if (typeof type !== "string") { + throw new Error("Invalid SVG element type"); }
- const complete = error => { - intentState.renderTasks.delete(internalRenderTask); + return this._createSVG(type); + }
- if (this.cleanupAfterRender || intentPrint) { - this.pendingCleanup = true; - } + _createSVG(type) { + (0, _util.unreachable)("Abstract method `_createSVG` called."); + }
- this._tryCleanup(); +}
- if (error) { - internalRenderTask.capability.reject(error); +exports.BaseSVGFactory = BaseSVGFactory;
- this._abortOperatorList({ - intentState, - reason: error instanceof Error ? error : new Error(error) - }); - } else { - internalRenderTask.capability.resolve(); - } +/***/ }), +/* 6 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
- if (this._stats) { - this._stats.timeEnd("Rendering");
- this._stats.timeEnd("Overall"); - } - };
- const internalRenderTask = new InternalRenderTask({ - callback: complete, - params: { - canvasContext, - viewport, - transform, - imageLayer, - background - }, - objs: this.objs, - commonObjs: this.commonObjs, - annotationCanvasMap, - operatorList: intentState.operatorList, - pageIndex: this._pageIndex, - canvasFactory: canvasFactoryInstance, - useRequestAnimationFrame: !intentPrint, - pdfBug: this._pdfBug, - pageColors - }); - (intentState.renderTasks ||= new Set()).add(internalRenderTask); - const renderTask = internalRenderTask.task; - Promise.all([intentState.displayReadyCapability.promise, optionalContentConfigPromise]).then(([transparency, optionalContentConfig]) => { - if (this.pendingCleanup) { - complete(); - return; - } +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.build = exports.RenderTask = exports.PDFWorkerUtil = exports.PDFWorker = exports.PDFPageProxy = exports.PDFDocumentProxy = exports.PDFDocumentLoadingTask = exports.PDFDataRangeTransport = exports.LoopbackPort = exports.DefaultStandardFontDataFactory = exports.DefaultCanvasFactory = exports.DefaultCMapReaderFactory = void 0; +exports.getDocument = getDocument; +exports.setPDFNetworkStreamFactory = setPDFNetworkStreamFactory; +exports.version = void 0;
- if (this._stats) { - this._stats.time("Rendering"); - } +var _util = __w_pdfjs_require__(1);
- internalRenderTask.initializeGraphics({ - transparency, - optionalContentConfig - }); - internalRenderTask.operatorListChanged(); - }).catch(complete); - return renderTask; - } +var _annotation_storage = __w_pdfjs_require__(7);
- getOperatorList({ - intent = "display", - annotationMode = _util.AnnotationMode.ENABLE - } = {}) { - function operatorListChanged() { - if (intentState.operatorList.lastChunk) { - intentState.opListReadCapability.resolve(intentState.operatorList); - intentState.renderTasks.delete(opListTask); - } - } +var _display_utils = __w_pdfjs_require__(4);
- const intentArgs = this._transport.getRenderingIntent(intent, annotationMode, true); +var _font_loader = __w_pdfjs_require__(11);
- let intentState = this._intentStates.get(intentArgs.cacheKey); +var _canvas = __w_pdfjs_require__(12);
- if (!intentState) { - intentState = Object.create(null); +var _worker_options = __w_pdfjs_require__(15);
- this._intentStates.set(intentArgs.cacheKey, intentState); - } +var _is_node = __w_pdfjs_require__(3);
- let opListTask; +var _message_handler = __w_pdfjs_require__(16);
- if (!intentState.opListReadCapability) { - opListTask = Object.create(null); - opListTask.operatorListChanged = operatorListChanged; - intentState.opListReadCapability = (0, _util.createPromiseCapability)(); - (intentState.renderTasks ||= new Set()).add(opListTask); - intentState.operatorList = { - fnArray: [], - argsArray: [], - lastChunk: false - }; +var _metadata = __w_pdfjs_require__(17);
- if (this._stats) { - this._stats.time("Page Request"); - } +var _optional_content_config = __w_pdfjs_require__(18);
- this._pumpOperatorList(intentArgs); - } +var _transport_stream = __w_pdfjs_require__(19);
- return intentState.opListReadCapability.promise; - } +var _xfa_text = __w_pdfjs_require__(20);
- streamTextContent({ - disableCombineTextItems = false, - includeMarkedContent = false - } = {}) { - const TEXT_CONTENT_CHUNK_SIZE = 100; - return this._transport.messageHandler.sendWithStream("GetTextContent", { - pageIndex: this._pageIndex, - combineTextItems: disableCombineTextItems !== true, - includeMarkedContent: includeMarkedContent === true - }, { - highWaterMark: TEXT_CONTENT_CHUNK_SIZE, +const DEFAULT_RANGE_CHUNK_SIZE = 65536; +const RENDERING_CANCELLED_TIMEOUT = 100; +let DefaultCanvasFactory = _display_utils.DOMCanvasFactory; +exports.DefaultCanvasFactory = DefaultCanvasFactory; +let DefaultCMapReaderFactory = _display_utils.DOMCMapReaderFactory; +exports.DefaultCMapReaderFactory = DefaultCMapReaderFactory; +let DefaultStandardFontDataFactory = _display_utils.DOMStandardFontDataFactory; +exports.DefaultStandardFontDataFactory = DefaultStandardFontDataFactory; +; +let createPDFNetworkStream;
- size(textContent) { - return textContent.items.length; - } +function setPDFNetworkStreamFactory(pdfNetworkStreamFactory) { + createPDFNetworkStream = pdfNetworkStreamFactory; +}
- }); - } +function getDocument(src) { + const task = new PDFDocumentLoadingTask(); + let source;
- getTextContent(params = {}) { - if (this._transport._htmlForXfa) { - return this.getXfa().then(xfa => { - return _xfa_text.XfaText.textContent(xfa); - }); + if (typeof src === "string" || src instanceof URL) { + source = { + url: src + }; + } else if ((0, _util.isArrayBuffer)(src)) { + source = { + data: src + }; + } else if (src instanceof PDFDataRangeTransport) { + source = { + range: src + }; + } else { + if (typeof src !== "object") { + throw new Error("Invalid parameter in getDocument, " + "need either string, URL, Uint8Array, or parameter object."); }
- const readableStream = this.streamTextContent(params); - return new Promise(function (resolve, reject) { - function pump() { - reader.read().then(function ({ - value, - done - }) { - if (done) { - resolve(textContent); - return; - } - - Object.assign(textContent.styles, value.styles); - textContent.items.push(...value.items); - pump(); - }, reject); - } + if (!src.url && !src.data && !src.range) { + throw new Error("Invalid parameter object: need either .data, .range or .url"); + }
- const reader = readableStream.getReader(); - const textContent = { - items: [], - styles: Object.create(null) - }; - pump(); - }); + source = src; }
- getStructTree() { - return this._structTreePromise ||= this._transport.getStructTree(this._pageIndex); - } + const params = Object.create(null); + let rangeTransport = null, + worker = null;
- _destroy() { - this.destroyed = true; - const waitOn = []; + for (const key in source) { + const value = source[key];
- for (const intentState of this._intentStates.values()) { - this._abortOperatorList({ - intentState, - reason: new Error("Page was destroyed."), - force: true - }); + switch (key) { + case "url": + if (typeof window !== "undefined") { + try { + params[key] = new URL(value, window.location).href; + continue; + } catch (ex) { + (0, _util.warn)(`Cannot create valid URL: "${ex}".`); + } + } else if (typeof value === "string" || value instanceof URL) { + params[key] = value.toString(); + continue; + }
- if (intentState.opListReadCapability) { + throw new Error("Invalid PDF url data: " + "either string or URL-object is expected in the url property."); + + case "range": + rangeTransport = value; continue; - }
- for (const internalRenderTask of intentState.renderTasks) { - waitOn.push(internalRenderTask.completed); - internalRenderTask.cancel(); - } - } + case "worker": + worker = value; + continue;
- this.objs.clear(); + case "data": + if (value instanceof Uint8Array) { + break; + } else if (typeof value === "string") { + params[key] = (0, _util.stringToBytes)(value); + } else if (typeof value === "object" && value !== null && !isNaN(value.length)) { + params[key] = new Uint8Array(value); + } else if ((0, _util.isArrayBuffer)(value)) { + params[key] = new Uint8Array(value); + } else { + throw new Error("Invalid PDF binary data: either typed array, " + "string, or array-like object is expected in the data property."); + }
- for (const bitmap of this._bitmaps) { - bitmap.close(); + continue; }
- this._bitmaps.clear(); + params[key] = value; + }
- this._annotationPromises.clear(); + params.CMapReaderFactory = params.CMapReaderFactory || DefaultCMapReaderFactory; + params.StandardFontDataFactory = params.StandardFontDataFactory || DefaultStandardFontDataFactory; + params.ignoreErrors = params.stopAtErrors !== true; + params.fontExtraProperties = params.fontExtraProperties === true; + params.pdfBug = params.pdfBug === true; + params.enableXfa = params.enableXfa === true;
- this._jsActionsPromise = null; - this._structTreePromise = null; - this.pendingCleanup = false; - return Promise.all(waitOn); + if (!Number.isInteger(params.rangeChunkSize) || params.rangeChunkSize < 1) { + params.rangeChunkSize = DEFAULT_RANGE_CHUNK_SIZE; }
- cleanup(resetStats = false) { - this.pendingCleanup = true; - return this._tryCleanup(resetStats); + if (typeof params.docBaseUrl !== "string" || (0, _display_utils.isDataScheme)(params.docBaseUrl)) { + params.docBaseUrl = null; }
- _tryCleanup(resetStats = false) { - if (!this.pendingCleanup) { - return false; - } - - for (const { - renderTasks, - operatorList - } of this._intentStates.values()) { - if (renderTasks.size > 0 || !operatorList.lastChunk) { - return false; - } - } + if (!Number.isInteger(params.maxImageSize) || params.maxImageSize < -1) { + params.maxImageSize = -1; + }
- this._intentStates.clear(); + if (typeof params.cMapUrl !== "string") { + params.cMapUrl = null; + }
- this.objs.clear(); + if (typeof params.standardFontDataUrl !== "string") { + params.standardFontDataUrl = null; + }
- this._annotationPromises.clear(); + if (typeof params.useWorkerFetch !== "boolean") { + params.useWorkerFetch = params.CMapReaderFactory === _display_utils.DOMCMapReaderFactory && params.StandardFontDataFactory === _display_utils.DOMStandardFontDataFactory; + }
- this._jsActionsPromise = null; - this._structTreePromise = null; + if (typeof params.isEvalSupported !== "boolean") { + params.isEvalSupported = true; + }
- if (resetStats && this._stats) { - this._stats = new _display_utils.StatTimer(); - } + if (typeof params.disableFontFace !== "boolean") { + params.disableFontFace = _is_node.isNodeJS; + }
- for (const bitmap of this._bitmaps) { - bitmap.close(); - } + if (typeof params.useSystemFonts !== "boolean") { + params.useSystemFonts = !_is_node.isNodeJS && !params.disableFontFace; + }
- this._bitmaps.clear(); + if (typeof params.ownerDocument !== "object" || params.ownerDocument === null) { + params.ownerDocument = globalThis.document; + }
- this.pendingCleanup = false; - return true; + if (typeof params.disableRange !== "boolean") { + params.disableRange = false; }
- _startRenderPage(transparency, cacheKey) { - const intentState = this._intentStates.get(cacheKey); + if (typeof params.disableStream !== "boolean") { + params.disableStream = false; + }
- if (!intentState) { - return; - } + if (typeof params.disableAutoFetch !== "boolean") { + params.disableAutoFetch = false; + }
- if (this._stats) { - this._stats.timeEnd("Page Request"); - } + (0, _util.setVerbosityLevel)(params.verbosity);
- if (intentState.displayReadyCapability) { - intentState.displayReadyCapability.resolve(transparency); - } + if (!worker) { + const workerParams = { + verbosity: params.verbosity, + port: _worker_options.GlobalWorkerOptions.workerPort + }; + worker = workerParams.port ? PDFWorker.fromPort(workerParams) : new PDFWorker(workerParams); + task._worker = worker; }
- _renderPageChunk(operatorListChunk, intentState) { - for (let i = 0, ii = operatorListChunk.length; i < ii; i++) { - intentState.operatorList.fnArray.push(operatorListChunk.fnArray[i]); - intentState.operatorList.argsArray.push(operatorListChunk.argsArray[i]); + const docId = task.docId; + worker.promise.then(function () { + if (task.destroyed) { + throw new Error("Loading aborted"); }
- intentState.operatorList.lastChunk = operatorListChunk.lastChunk; + const workerIdPromise = _fetchDocument(worker, params, rangeTransport, docId);
- for (const internalRenderTask of intentState.renderTasks) { - internalRenderTask.operatorListChanged(); - } + const networkStreamPromise = new Promise(function (resolve) { + let networkStream;
- if (operatorListChunk.lastChunk) { - this._tryCleanup(); - } - } + if (rangeTransport) { + networkStream = new _transport_stream.PDFDataTransportStream({ + length: params.length, + initialData: params.initialData, + progressiveDone: params.progressiveDone, + contentDispositionFilename: params.contentDispositionFilename, + disableRange: params.disableRange, + disableStream: params.disableStream + }, rangeTransport); + } else if (!params.data) { + networkStream = createPDFNetworkStream({ + url: params.url, + length: params.length, + httpHeaders: params.httpHeaders, + withCredentials: params.withCredentials, + rangeChunkSize: params.rangeChunkSize, + disableRange: params.disableRange, + disableStream: params.disableStream + }); + }
- _pumpOperatorList({ - renderingIntent, - cacheKey - }) { - const readableStream = this._transport.messageHandler.sendWithStream("GetOperatorList", { - pageIndex: this._pageIndex, - intent: renderingIntent, - cacheKey, - annotationStorage: renderingIntent & _util.RenderingIntentFlag.ANNOTATIONS_STORAGE ? this._transport.annotationStorage.serializable : null + resolve(networkStream); }); + return Promise.all([workerIdPromise, networkStreamPromise]).then(function ([workerId, networkStream]) { + if (task.destroyed) { + throw new Error("Loading aborted"); + }
- const reader = readableStream.getReader(); - - const intentState = this._intentStates.get(cacheKey); - - intentState.streamReader = reader; - - const pump = () => { - reader.read().then(({ - value, - done - }) => { - if (done) { - intentState.streamReader = null; - return; - } - - if (this._transport.destroyed) { - return; - } + const messageHandler = new _message_handler.MessageHandler(docId, workerId, worker.port); + const transport = new WorkerTransport(messageHandler, task, networkStream, params); + task._transport = transport; + messageHandler.send("Ready", null); + }); + }).catch(task._capability.reject); + return task; +}
- this._renderPageChunk(value, intentState); +async function _fetchDocument(worker, source, pdfDataRangeTransport, docId) { + if (worker.destroyed) { + throw new Error("Worker was destroyed"); + }
- pump(); - }, reason => { - intentState.streamReader = null; + if (pdfDataRangeTransport) { + source.length = pdfDataRangeTransport.length; + source.initialData = pdfDataRangeTransport.initialData; + source.progressiveDone = pdfDataRangeTransport.progressiveDone; + source.contentDispositionFilename = pdfDataRangeTransport.contentDispositionFilename; + }
- if (this._transport.destroyed) { - return; - } + const workerId = await worker.messageHandler.sendWithPromise("GetDocRequest", { + docId, + apiVersion: '2.15.305', + source: { + data: source.data, + url: source.url, + password: source.password, + disableAutoFetch: source.disableAutoFetch, + rangeChunkSize: source.rangeChunkSize, + length: source.length + }, + maxImageSize: source.maxImageSize, + disableFontFace: source.disableFontFace, + docBaseUrl: source.docBaseUrl, + ignoreErrors: source.ignoreErrors, + isEvalSupported: source.isEvalSupported, + fontExtraProperties: source.fontExtraProperties, + enableXfa: source.enableXfa, + useSystemFonts: source.useSystemFonts, + cMapUrl: source.useWorkerFetch ? source.cMapUrl : null, + standardFontDataUrl: source.useWorkerFetch ? source.standardFontDataUrl : null + });
- if (intentState.operatorList) { - intentState.operatorList.lastChunk = true; + if (source.data) { + source.data = null; + }
- for (const internalRenderTask of intentState.renderTasks) { - internalRenderTask.operatorListChanged(); - } + if (worker.destroyed) { + throw new Error("Worker was destroyed"); + }
- this._tryCleanup(); - } + return workerId; +}
- if (intentState.displayReadyCapability) { - intentState.displayReadyCapability.reject(reason); - } else if (intentState.opListReadCapability) { - intentState.opListReadCapability.reject(reason); - } else { - throw reason; - } - }); - }; +class PDFDocumentLoadingTask { + static #docId = 0;
- pump(); + constructor() { + this._capability = (0, _util.createPromiseCapability)(); + this._transport = null; + this._worker = null; + this.docId = `d${PDFDocumentLoadingTask.#docId++}`; + this.destroyed = false; + this.onPassword = null; + this.onProgress = null; + this.onUnsupportedFeature = null; }
- _abortOperatorList({ - intentState, - reason, - force = false - }) { - if (!intentState.streamReader) { - return; - } - - if (!force) { - if (intentState.renderTasks.size > 0) { - return; - } - - if (reason instanceof _display_utils.RenderingCancelledException) { - intentState.streamReaderCancelTimeout = setTimeout(() => { - this._abortOperatorList({ - intentState, - reason, - force: true - }); + get promise() { + return this._capability.promise; + }
- intentState.streamReaderCancelTimeout = null; - }, RENDERING_CANCELLED_TIMEOUT); - return; - } - } + async destroy() { + this.destroyed = true; + await this._transport?.destroy(); + this._transport = null;
- intentState.streamReader.cancel(new _util.AbortException(reason.message)).catch(() => {}); - intentState.streamReader = null; + if (this._worker) { + this._worker.destroy();
- if (this._transport.destroyed) { - return; + this._worker = null; } + }
- for (const [curCacheKey, curIntentState] of this._intentStates) { - if (curIntentState === intentState) { - this._intentStates.delete(curCacheKey); +}
- break; - } - } +exports.PDFDocumentLoadingTask = PDFDocumentLoadingTask;
- this.cleanup(); +class PDFDataRangeTransport { + constructor(length, initialData, progressiveDone = false, contentDispositionFilename = null) { + this.length = length; + this.initialData = initialData; + this.progressiveDone = progressiveDone; + this.contentDispositionFilename = contentDispositionFilename; + this._rangeListeners = []; + this._progressListeners = []; + this._progressiveReadListeners = []; + this._progressiveDoneListeners = []; + this._readyCapability = (0, _util.createPromiseCapability)(); }
- get stats() { - return this._stats; + addRangeListener(listener) { + this._rangeListeners.push(listener); }
-} + addProgressListener(listener) { + this._progressListeners.push(listener); + }
-exports.PDFPageProxy = PDFPageProxy; + addProgressiveReadListener(listener) { + this._progressiveReadListeners.push(listener); + }
-class LoopbackPort { - constructor() { - this._listeners = []; - this._deferred = Promise.resolve(); + addProgressiveDoneListener(listener) { + this._progressiveDoneListeners.push(listener); }
- postMessage(obj, transfers) { - const event = { - data: structuredClone(obj, transfers) - }; + onDataRange(begin, chunk) { + for (const listener of this._rangeListeners) { + listener(begin, chunk); + } + }
- this._deferred.then(() => { - for (const listener of this._listeners) { - listener.call(this, event); + onDataProgress(loaded, total) { + this._readyCapability.promise.then(() => { + for (const listener of this._progressListeners) { + listener(loaded, total); } }); }
- addEventListener(name, listener) { - this._listeners.push(listener); + onDataProgressiveRead(chunk) { + this._readyCapability.promise.then(() => { + for (const listener of this._progressiveReadListeners) { + listener(chunk); + } + }); }
- removeEventListener(name, listener) { - const i = this._listeners.indexOf(listener); + onDataProgressiveDone() { + this._readyCapability.promise.then(() => { + for (const listener of this._progressiveDoneListeners) { + listener(); + } + }); + }
- this._listeners.splice(i, 1); + transportReady() { + this._readyCapability.resolve(); }
- terminate() { - this._listeners.length = 0; + requestDataRange(begin, end) { + (0, _util.unreachable)("Abstract method PDFDataRangeTransport.requestDataRange"); }
+ abort() {} + }
-exports.LoopbackPort = LoopbackPort; -const PDFWorkerUtil = { - isWorkerDisabled: false, - fallbackWorkerSrc: null, - fakeWorkerId: 0 -}; -exports.PDFWorkerUtil = PDFWorkerUtil; -; - -class PDFWorker { - static #workerPorts = new WeakMap(); - - constructor({ - name = null, - port = null, - verbosity = (0, _util.getVerbosityLevel)() - } = {}) { - if (port && PDFWorker.#workerPorts.has(port)) { - throw new Error("Cannot use more than one PDFWorker per port."); - } - - this.name = name; - this.destroyed = false; - this.verbosity = verbosity; - this._readyCapability = (0, _util.createPromiseCapability)(); - this._port = null; - this._webWorker = null; - this._messageHandler = null; - - if (port) { - PDFWorker.#workerPorts.set(port, this); - - this._initializeFromPort(port); - - return; - } +exports.PDFDataRangeTransport = PDFDataRangeTransport;
- this._initialize(); +class PDFDocumentProxy { + constructor(pdfInfo, transport) { + this._pdfInfo = pdfInfo; + this._transport = transport; }
- get promise() { - return this._readyCapability.promise; + get annotationStorage() { + return this._transport.annotationStorage; }
- get port() { - return this._port; + get numPages() { + return this._pdfInfo.numPages; }
- get messageHandler() { - return this._messageHandler; + get fingerprints() { + return this._pdfInfo.fingerprints; }
- _initializeFromPort(port) { - this._port = port; - this._messageHandler = new _message_handler.MessageHandler("main", "worker", port); - - this._messageHandler.on("ready", function () {}); - - this._readyCapability.resolve(); + get stats() { + return this._transport.stats; }
- _initialize() { - if (typeof Worker !== "undefined" && !PDFWorkerUtil.isWorkerDisabled && !PDFWorker._mainThreadWorkerMessageHandler) { - let workerSrc = PDFWorker.workerSrc; + get isPureXfa() { + return !!this._transport._htmlForXfa; + }
- try { - const worker = new Worker(workerSrc); - const messageHandler = new _message_handler.MessageHandler("main", "worker", worker); + get allXfaHtml() { + return this._transport._htmlForXfa; + }
- const terminateEarly = () => { - worker.removeEventListener("error", onWorkerError); - messageHandler.destroy(); - worker.terminate(); + getPage(pageNumber) { + return this._transport.getPage(pageNumber); + }
- if (this.destroyed) { - this._readyCapability.reject(new Error("Worker was destroyed")); - } else { - this._setupFakeWorker(); - } - }; + getPageIndex(ref) { + return this._transport.getPageIndex(ref); + }
- const onWorkerError = () => { - if (!this._webWorker) { - terminateEarly(); - } - }; + getDestinations() { + return this._transport.getDestinations(); + }
- worker.addEventListener("error", onWorkerError); - messageHandler.on("test", data => { - worker.removeEventListener("error", onWorkerError); + getDestination(id) { + return this._transport.getDestination(id); + }
- if (this.destroyed) { - terminateEarly(); - return; - } + getPageLabels() { + return this._transport.getPageLabels(); + }
- if (data) { - this._messageHandler = messageHandler; - this._port = worker; - this._webWorker = worker; + getPageLayout() { + return this._transport.getPageLayout(); + }
- this._readyCapability.resolve(); + getPageMode() { + return this._transport.getPageMode(); + }
- messageHandler.send("configure", { - verbosity: this.verbosity - }); - } else { - this._setupFakeWorker(); + getViewerPreferences() { + return this._transport.getViewerPreferences(); + }
- messageHandler.destroy(); - worker.terminate(); - } - }); - messageHandler.on("ready", data => { - worker.removeEventListener("error", onWorkerError); + getOpenAction() { + return this._transport.getOpenAction(); + }
- if (this.destroyed) { - terminateEarly(); - return; - } + getAttachments() { + return this._transport.getAttachments(); + }
- try { - sendTest(); - } catch (e) { - this._setupFakeWorker(); - } - }); + getJavaScript() { + return this._transport.getJavaScript(); + }
- const sendTest = () => { - const testObj = new Uint8Array(); - messageHandler.send("test", testObj, [testObj.buffer]); - }; + getJSActions() { + return this._transport.getDocJSActions(); + }
- sendTest(); - return; - } catch (e) { - (0, _util.info)("The worker has been disabled."); - } - } + getOutline() { + return this._transport.getOutline(); + }
- this._setupFakeWorker(); + getOptionalContentConfig() { + return this._transport.getOptionalContentConfig(); }
- _setupFakeWorker() { - if (!PDFWorkerUtil.isWorkerDisabled) { - (0, _util.warn)("Setting up fake worker."); - PDFWorkerUtil.isWorkerDisabled = true; - } + getPermissions() { + return this._transport.getPermissions(); + }
- PDFWorker._setupFakeWorkerGlobal.then(WorkerMessageHandler => { - if (this.destroyed) { - this._readyCapability.reject(new Error("Worker was destroyed")); + getMetadata() { + return this._transport.getMetadata(); + }
- return; - } + getMarkInfo() { + return this._transport.getMarkInfo(); + }
- const port = new LoopbackPort(); - this._port = port; - const id = `fake${PDFWorkerUtil.fakeWorkerId++}`; - const workerHandler = new _message_handler.MessageHandler(id + "_worker", id, port); - WorkerMessageHandler.setup(workerHandler, port); - const messageHandler = new _message_handler.MessageHandler(id, id + "_worker", port); - this._messageHandler = messageHandler; + getData() { + return this._transport.getData(); + }
- this._readyCapability.resolve(); + getDownloadInfo() { + return this._transport.downloadInfoCapability.promise; + }
- messageHandler.send("configure", { - verbosity: this.verbosity - }); - }).catch(reason => { - this._readyCapability.reject(new Error(`Setting up fake worker failed: "${reason.message}".`)); - }); + cleanup(keepLoadedFonts = false) { + return this._transport.startCleanup(keepLoadedFonts || this.isPureXfa); }
destroy() { - this.destroyed = true; + return this.loadingTask.destroy(); + }
- if (this._webWorker) { - this._webWorker.terminate(); + get loadingParams() { + return this._transport.loadingParams; + }
- this._webWorker = null; - } + get loadingTask() { + return this._transport.loadingTask; + }
- PDFWorker.#workerPorts.delete(this._port); - this._port = null; + saveDocument() { + return this._transport.saveDocument(); + }
- if (this._messageHandler) { - this._messageHandler.destroy(); + getFieldObjects() { + return this._transport.getFieldObjects(); + }
- this._messageHandler = null; - } + hasJSActions() { + return this._transport.hasJSActions(); }
- static fromPort(params) { - if (!params?.port) { - throw new Error("PDFWorker.fromPort - invalid method signature."); - } + getCalculationOrderIds() { + return this._transport.getCalculationOrderIds(); + }
- if (this.#workerPorts.has(params.port)) { - return this.#workerPorts.get(params.port); - } +}
- return new PDFWorker(params); - } +exports.PDFDocumentProxy = PDFDocumentProxy;
- static get workerSrc() { - if (_worker_options.GlobalWorkerOptions.workerSrc) { - return _worker_options.GlobalWorkerOptions.workerSrc; - } - - if (PDFWorkerUtil.fallbackWorkerSrc !== null) { - if (!_is_node.isNodeJS) { - (0, _display_utils.deprecated)('No "GlobalWorkerOptions.workerSrc" specified.'); - } - - return PDFWorkerUtil.fallbackWorkerSrc; - } - - throw new Error('No "GlobalWorkerOptions.workerSrc" specified.'); +class PDFPageProxy { + constructor(pageIndex, pageInfo, transport, ownerDocument, pdfBug = false) { + this._pageIndex = pageIndex; + this._pageInfo = pageInfo; + this._ownerDocument = ownerDocument; + this._transport = transport; + this._stats = pdfBug ? new _display_utils.StatTimer() : null; + this._pdfBug = pdfBug; + this.commonObjs = transport.commonObjs; + this.objs = new PDFObjects(); + this._bitmaps = new Set(); + this.cleanupAfterRender = false; + this.pendingCleanup = false; + this._intentStates = new Map(); + this._annotationPromises = new Map(); + this.destroyed = false; }
- static get _mainThreadWorkerMessageHandler() { - try { - return globalThis.pdfjsWorker?.WorkerMessageHandler || null; - } catch (ex) { - return null; - } + get pageNumber() { + return this._pageIndex + 1; }
- static get _setupFakeWorkerGlobal() { - const loader = async () => { - const mainWorkerMessageHandler = this._mainThreadWorkerMessageHandler; + get rotate() { + return this._pageInfo.rotate; + }
- if (mainWorkerMessageHandler) { - return mainWorkerMessageHandler; - } + get ref() { + return this._pageInfo.ref; + }
- await (0, _display_utils.loadScript)(this.workerSrc); - return window.pdfjsWorker.WorkerMessageHandler; - }; + get userUnit() { + return this._pageInfo.userUnit; + }
- return (0, _util.shadow)(this, "_setupFakeWorkerGlobal", loader()); + get view() { + return this._pageInfo.view; }
-} + getViewport({ + scale, + rotation = this.rotate, + offsetX = 0, + offsetY = 0, + dontFlip = false + } = {}) { + return new _display_utils.PageViewport({ + viewBox: this.view, + scale, + rotation, + offsetX, + offsetY, + dontFlip + }); + }
-exports.PDFWorker = PDFWorker; -; + getAnnotations({ + intent = "display" + } = {}) { + const intentArgs = this._transport.getRenderingIntent(intent);
-class WorkerTransport { - #docStats = null; - #pageCache = new Map(); - #pagePromises = new Map(); - #metadataPromise = null; + let promise = this._annotationPromises.get(intentArgs.cacheKey);
- constructor(messageHandler, loadingTask, networkStream, params) { - this.messageHandler = messageHandler; - this.loadingTask = loadingTask; - this.commonObjs = new PDFObjects(); - this.fontLoader = new _font_loader.FontLoader({ - docId: loadingTask.docId, - onUnsupportedFeature: this._onUnsupportedFeature.bind(this), - ownerDocument: params.ownerDocument, - styleElement: params.styleElement - }); - this._params = params; + if (!promise) { + promise = this._transport.getAnnotations(this._pageIndex, intentArgs.renderingIntent);
- if (!params.useWorkerFetch) { - this.CMapReaderFactory = new params.CMapReaderFactory({ - baseUrl: params.cMapUrl, - isCompressed: params.cMapPacked - }); - this.StandardFontDataFactory = new params.StandardFontDataFactory({ - baseUrl: params.standardFontDataUrl - }); + this._annotationPromises.set(intentArgs.cacheKey, promise); }
- this.destroyed = false; - this.destroyCapability = null; - this._passwordCapability = null; - this._networkStream = networkStream; - this._fullReader = null; - this._lastProgress = null; - this.downloadInfoCapability = (0, _util.createPromiseCapability)(); - this.setupMessageHandler(); + return promise; }
- get annotationStorage() { - return (0, _util.shadow)(this, "annotationStorage", new _annotation_storage.AnnotationStorage()); + getJSActions() { + return this._jsActionsPromise ||= this._transport.getPageJSActions(this._pageIndex); }
- get stats() { - return this.#docStats; + async getXfa() { + return this._transport._htmlForXfa?.children[this._pageIndex] || null; }
- getRenderingIntent(intent, annotationMode = _util.AnnotationMode.ENABLE, isOpList = false) { - let renderingIntent = _util.RenderingIntentFlag.DISPLAY; - let annotationHash = ""; - - switch (intent) { - case "any": - renderingIntent = _util.RenderingIntentFlag.ANY; - break; + render({ + canvasContext, + viewport, + intent = "display", + annotationMode = _util.AnnotationMode.ENABLE, + transform = null, + imageLayer = null, + canvasFactory = null, + background = null, + optionalContentConfigPromise = null, + annotationCanvasMap = null, + pageColors = null, + printAnnotationStorage = null + }) { + if (this._stats) { + this._stats.time("Overall"); + }
- case "display": - break; + const intentArgs = this._transport.getRenderingIntent(intent, annotationMode, printAnnotationStorage);
- case "print": - renderingIntent = _util.RenderingIntentFlag.PRINT; - break; + this.pendingCleanup = false;
- default: - (0, _util.warn)(`getRenderingIntent - invalid intent: ${intent}`); + if (!optionalContentConfigPromise) { + optionalContentConfigPromise = this._transport.getOptionalContentConfig(); }
- switch (annotationMode) { - case _util.AnnotationMode.DISABLE: - renderingIntent += _util.RenderingIntentFlag.ANNOTATIONS_DISABLE; - break; - - case _util.AnnotationMode.ENABLE: - break; - - case _util.AnnotationMode.ENABLE_FORMS: - renderingIntent += _util.RenderingIntentFlag.ANNOTATIONS_FORMS; - break; + let intentState = this._intentStates.get(intentArgs.cacheKey);
- case _util.AnnotationMode.ENABLE_STORAGE: - renderingIntent += _util.RenderingIntentFlag.ANNOTATIONS_STORAGE; - annotationHash = this.annotationStorage.hash; - break; + if (!intentState) { + intentState = Object.create(null);
- default: - (0, _util.warn)(`getRenderingIntent - invalid annotationMode: ${annotationMode}`); + this._intentStates.set(intentArgs.cacheKey, intentState); }
- if (isOpList) { - renderingIntent += _util.RenderingIntentFlag.OPLIST; + if (intentState.streamReaderCancelTimeout) { + clearTimeout(intentState.streamReaderCancelTimeout); + intentState.streamReaderCancelTimeout = null; }
- return { - renderingIntent, - cacheKey: `${renderingIntent}_${annotationHash}` - }; - } + const canvasFactoryInstance = canvasFactory || new DefaultCanvasFactory({ + ownerDocument: this._ownerDocument + }); + const intentPrint = !!(intentArgs.renderingIntent & _util.RenderingIntentFlag.PRINT);
- destroy() { - if (this.destroyCapability) { - return this.destroyCapability.promise; - } + if (!intentState.displayReadyCapability) { + intentState.displayReadyCapability = (0, _util.createPromiseCapability)(); + intentState.operatorList = { + fnArray: [], + argsArray: [], + lastChunk: false + };
- this.destroyed = true; - this.destroyCapability = (0, _util.createPromiseCapability)(); + if (this._stats) { + this._stats.time("Page Request"); + }
- if (this._passwordCapability) { - this._passwordCapability.reject(new Error("Worker was destroyed during onPassword callback")); + this._pumpOperatorList(intentArgs); }
- const waitOn = []; - - for (const page of this.#pageCache.values()) { - waitOn.push(page._destroy()); - } + const complete = error => { + intentState.renderTasks.delete(internalRenderTask);
- this.#pageCache.clear(); - this.#pagePromises.clear(); + if (this.cleanupAfterRender || intentPrint) { + this.pendingCleanup = true; + }
- if (this.hasOwnProperty("annotationStorage")) { - this.annotationStorage.resetModified(); - } + this._tryCleanup();
- const terminated = this.messageHandler.sendWithPromise("Terminate", null); - waitOn.push(terminated); - Promise.all(waitOn).then(() => { - this.commonObjs.clear(); - this.fontLoader.clear(); - this.#metadataPromise = null; - this._getFieldObjectsPromise = null; - this._hasJSActionsPromise = null; + if (error) { + internalRenderTask.capability.reject(error);
- if (this._networkStream) { - this._networkStream.cancelAllRequests(new _util.AbortException("Worker was terminated.")); + this._abortOperatorList({ + intentState, + reason: error instanceof Error ? error : new Error(error) + }); + } else { + internalRenderTask.capability.resolve(); }
- if (this.messageHandler) { - this.messageHandler.destroy(); - this.messageHandler = null; - } + if (this._stats) { + this._stats.timeEnd("Rendering");
- this.destroyCapability.resolve(); - }, this.destroyCapability.reject); - return this.destroyCapability.promise; - } + this._stats.timeEnd("Overall"); + } + };
- setupMessageHandler() { - const { - messageHandler, - loadingTask - } = this; - messageHandler.on("GetReader", (data, sink) => { - (0, _util.assert)(this._networkStream, "GetReader - no `IPDFStream` instance available."); - this._fullReader = this._networkStream.getFullReader(); + const internalRenderTask = new InternalRenderTask({ + callback: complete, + params: { + canvasContext, + viewport, + transform, + imageLayer, + background + }, + objs: this.objs, + commonObjs: this.commonObjs, + annotationCanvasMap, + operatorList: intentState.operatorList, + pageIndex: this._pageIndex, + canvasFactory: canvasFactoryInstance, + useRequestAnimationFrame: !intentPrint, + pdfBug: this._pdfBug, + pageColors + }); + (intentState.renderTasks ||= new Set()).add(internalRenderTask); + const renderTask = internalRenderTask.task; + Promise.all([intentState.displayReadyCapability.promise, optionalContentConfigPromise]).then(([transparency, optionalContentConfig]) => { + if (this.pendingCleanup) { + complete(); + return; + }
- this._fullReader.onProgress = evt => { - this._lastProgress = { - loaded: evt.loaded, - total: evt.total - }; - }; + if (this._stats) { + this._stats.time("Rendering"); + }
- sink.onPull = () => { - this._fullReader.read().then(function ({ - value, - done - }) { - if (done) { - sink.close(); - return; - } + internalRenderTask.initializeGraphics({ + transparency, + optionalContentConfig + }); + internalRenderTask.operatorListChanged(); + }).catch(complete); + return renderTask; + }
- (0, _util.assert)((0, _util.isArrayBuffer)(value), "GetReader - expected an ArrayBuffer."); - sink.enqueue(new Uint8Array(value), 1, [value]); - }).catch(reason => { - sink.error(reason); - }); - }; + getOperatorList({ + intent = "display", + annotationMode = _util.AnnotationMode.ENABLE, + printAnnotationStorage = null + } = {}) { + function operatorListChanged() { + if (intentState.operatorList.lastChunk) { + intentState.opListReadCapability.resolve(intentState.operatorList); + intentState.renderTasks.delete(opListTask); + } + }
- sink.onCancel = reason => { - this._fullReader.cancel(reason); + const intentArgs = this._transport.getRenderingIntent(intent, annotationMode, printAnnotationStorage, true);
- sink.ready.catch(readyReason => { - if (this.destroyed) { - return; - } + let intentState = this._intentStates.get(intentArgs.cacheKey);
- throw readyReason; - }); + if (!intentState) { + intentState = Object.create(null); + + this._intentStates.set(intentArgs.cacheKey, intentState); + } + + let opListTask; + + if (!intentState.opListReadCapability) { + opListTask = Object.create(null); + opListTask.operatorListChanged = operatorListChanged; + intentState.opListReadCapability = (0, _util.createPromiseCapability)(); + (intentState.renderTasks ||= new Set()).add(opListTask); + intentState.operatorList = { + fnArray: [], + argsArray: [], + lastChunk: false }; - }); - messageHandler.on("ReaderHeadersReady", data => { - const headersCapability = (0, _util.createPromiseCapability)(); - const fullReader = this._fullReader; - fullReader.headersReady.then(() => { - if (!fullReader.isStreamingSupported || !fullReader.isRangeSupported) { - if (this._lastProgress) { - loadingTask.onProgress?.(this._lastProgress); - }
- fullReader.onProgress = evt => { - loadingTask.onProgress?.({ - loaded: evt.loaded, - total: evt.total - }); - }; - } + if (this._stats) { + this._stats.time("Page Request"); + }
- headersCapability.resolve({ - isStreamingSupported: fullReader.isStreamingSupported, - isRangeSupported: fullReader.isRangeSupported, - contentLength: fullReader.contentLength - }); - }, headersCapability.reject); - return headersCapability.promise; - }); - messageHandler.on("GetRangeReader", (data, sink) => { - (0, _util.assert)(this._networkStream, "GetRangeReader - no `IPDFStream` instance available."); + this._pumpOperatorList(intentArgs); + }
- const rangeReader = this._networkStream.getRangeReader(data.begin, data.end); + return intentState.opListReadCapability.promise; + }
- if (!rangeReader) { - sink.close(); - return; + streamTextContent({ + disableCombineTextItems = false, + includeMarkedContent = false + } = {}) { + const TEXT_CONTENT_CHUNK_SIZE = 100; + return this._transport.messageHandler.sendWithStream("GetTextContent", { + pageIndex: this._pageIndex, + combineTextItems: disableCombineTextItems !== true, + includeMarkedContent: includeMarkedContent === true + }, { + highWaterMark: TEXT_CONTENT_CHUNK_SIZE, + + size(textContent) { + return textContent.items.length; }
- sink.onPull = () => { - rangeReader.read().then(function ({ + }); + } + + getTextContent(params = {}) { + if (this._transport._htmlForXfa) { + return this.getXfa().then(xfa => { + return _xfa_text.XfaText.textContent(xfa); + }); + } + + const readableStream = this.streamTextContent(params); + return new Promise(function (resolve, reject) { + function pump() { + reader.read().then(function ({ value, done }) { if (done) { - sink.close(); + resolve(textContent); return; }
- (0, _util.assert)((0, _util.isArrayBuffer)(value), "GetRangeReader - expected an ArrayBuffer."); - sink.enqueue(new Uint8Array(value), 1, [value]); - }).catch(reason => { - sink.error(reason); - }); - }; - - sink.onCancel = reason => { - rangeReader.cancel(reason); - sink.ready.catch(readyReason => { - if (this.destroyed) { - return; - } + Object.assign(textContent.styles, value.styles); + textContent.items.push(...value.items); + pump(); + }, reject); + }
- throw readyReason; - }); + const reader = readableStream.getReader(); + const textContent = { + items: [], + styles: Object.create(null) }; + pump(); }); - messageHandler.on("GetDoc", ({ - pdfInfo - }) => { - this._numPages = pdfInfo.numPages; - this._htmlForXfa = pdfInfo.htmlForXfa; - delete pdfInfo.htmlForXfa; + }
- loadingTask._capability.resolve(new PDFDocumentProxy(pdfInfo, this)); - }); - messageHandler.on("DocException", function (ex) { - let reason; + getStructTree() { + return this._structTreePromise ||= this._transport.getStructTree(this._pageIndex); + }
- switch (ex.name) { - case "PasswordException": - reason = new _util.PasswordException(ex.message, ex.code); - break; + _destroy() { + this.destroyed = true; + const waitOn = [];
- case "InvalidPDFException": - reason = new _util.InvalidPDFException(ex.message); - break; + for (const intentState of this._intentStates.values()) { + this._abortOperatorList({ + intentState, + reason: new Error("Page was destroyed."), + force: true + });
- case "MissingPDFException": - reason = new _util.MissingPDFException(ex.message); - break; + if (intentState.opListReadCapability) { + continue; + }
- case "UnexpectedResponseException": - reason = new _util.UnexpectedResponseException(ex.message, ex.status); - break; + for (const internalRenderTask of intentState.renderTasks) { + waitOn.push(internalRenderTask.completed); + internalRenderTask.cancel(); + } + }
- case "UnknownErrorException": - reason = new _util.UnknownErrorException(ex.message, ex.details); - break; + this.objs.clear();
- default: - (0, _util.unreachable)("DocException - expected a valid Error."); - } + for (const bitmap of this._bitmaps) { + bitmap.close(); + }
- loadingTask._capability.reject(reason); - }); - messageHandler.on("PasswordRequest", exception => { - this._passwordCapability = (0, _util.createPromiseCapability)(); + this._bitmaps.clear();
- if (loadingTask.onPassword) { - const updatePassword = password => { - if (password instanceof Error) { - this._passwordCapability.reject(password); - } else { - this._passwordCapability.resolve({ - password - }); - } - }; - - try { - loadingTask.onPassword(updatePassword, exception.code); - } catch (ex) { - this._passwordCapability.reject(ex); - } - } else { - this._passwordCapability.reject(new _util.PasswordException(exception.message, exception.code)); - } + this._annotationPromises.clear();
- return this._passwordCapability.promise; - }); - messageHandler.on("DataLoaded", data => { - loadingTask.onProgress?.({ - loaded: data.length, - total: data.length - }); - this.downloadInfoCapability.resolve(data); - }); - messageHandler.on("StartRenderPage", data => { - if (this.destroyed) { - return; - } + this._jsActionsPromise = null; + this._structTreePromise = null; + this.pendingCleanup = false; + return Promise.all(waitOn); + }
- const page = this.#pageCache.get(data.pageIndex); + cleanup(resetStats = false) { + this.pendingCleanup = true; + return this._tryCleanup(resetStats); + }
- page._startRenderPage(data.transparency, data.cacheKey); - }); - messageHandler.on("commonobj", ([id, type, exportedData]) => { - if (this.destroyed) { - return; - } + _tryCleanup(resetStats = false) { + if (!this.pendingCleanup) { + return false; + }
- if (this.commonObjs.has(id)) { - return; + for (const { + renderTasks, + operatorList + } of this._intentStates.values()) { + if (renderTasks.size > 0 || !operatorList.lastChunk) { + return false; } + }
- switch (type) { - case "Font": - const params = this._params; - - if ("error" in exportedData) { - const exportedError = exportedData.error; - (0, _util.warn)(`Error during font loading: ${exportedError}`); - this.commonObjs.resolve(id, exportedError); - break; - } - - let fontRegistry = null; + this._intentStates.clear();
- if (params.pdfBug && globalThis.FontInspector?.enabled) { - fontRegistry = { - registerFont(font, url) { - globalThis.FontInspector.fontAdded(font, url); - } + this.objs.clear();
- }; - } + this._annotationPromises.clear();
- const font = new _font_loader.FontFaceObject(exportedData, { - isEvalSupported: params.isEvalSupported, - disableFontFace: params.disableFontFace, - ignoreErrors: params.ignoreErrors, - onUnsupportedFeature: this._onUnsupportedFeature.bind(this), - fontRegistry - }); - this.fontLoader.bind(font).catch(reason => { - return messageHandler.sendWithPromise("FontFallback", { - id - }); - }).finally(() => { - if (!params.fontExtraProperties && font.data) { - font.data = null; - } + this._jsActionsPromise = null; + this._structTreePromise = null;
- this.commonObjs.resolve(id, font); - }); - break; + if (resetStats && this._stats) { + this._stats = new _display_utils.StatTimer(); + }
- case "FontPath": - case "Image": - this.commonObjs.resolve(id, exportedData); - break; + for (const bitmap of this._bitmaps) { + bitmap.close(); + }
- default: - throw new Error(`Got unknown common object type ${type}`); - } - }); - messageHandler.on("obj", ([id, pageIndex, type, imageData]) => { - if (this.destroyed) { - return; - } + this._bitmaps.clear();
- const pageProxy = this.#pageCache.get(pageIndex); + this.pendingCleanup = false; + return true; + }
- if (pageProxy.objs.has(id)) { - return; - } + _startRenderPage(transparency, cacheKey) { + const intentState = this._intentStates.get(cacheKey);
- switch (type) { - case "Image": - pageProxy.objs.resolve(id, imageData); - const MAX_IMAGE_SIZE_TO_STORE = 8000000; + if (!intentState) { + return; + }
- if (imageData) { - let length; + if (this._stats) { + this._stats.timeEnd("Page Request"); + }
- if (imageData.bitmap) { - const { - bitmap, - width, - height - } = imageData; - length = width * height * 4; + if (intentState.displayReadyCapability) { + intentState.displayReadyCapability.resolve(transparency); + } + }
- pageProxy._bitmaps.add(bitmap); - } else { - length = imageData.data?.length || 0; - } + _renderPageChunk(operatorListChunk, intentState) { + for (let i = 0, ii = operatorListChunk.length; i < ii; i++) { + intentState.operatorList.fnArray.push(operatorListChunk.fnArray[i]); + intentState.operatorList.argsArray.push(operatorListChunk.argsArray[i]); + }
- if (length > MAX_IMAGE_SIZE_TO_STORE) { - pageProxy.cleanupAfterRender = true; - } - } + intentState.operatorList.lastChunk = operatorListChunk.lastChunk;
- break; + for (const internalRenderTask of intentState.renderTasks) { + internalRenderTask.operatorListChanged(); + }
- case "Pattern": - pageProxy.objs.resolve(id, imageData); - break; + if (operatorListChunk.lastChunk) { + this._tryCleanup(); + } + }
- default: - throw new Error(`Got unknown object type ${type}`); - } + _pumpOperatorList({ + renderingIntent, + cacheKey, + annotationStorageMap + }) { + const readableStream = this._transport.messageHandler.sendWithStream("GetOperatorList", { + pageIndex: this._pageIndex, + intent: renderingIntent, + cacheKey, + annotationStorage: annotationStorageMap }); - messageHandler.on("DocProgress", data => { - if (this.destroyed) { - return; - }
- loadingTask.onProgress?.({ - loaded: data.loaded, - total: data.total - }); - }); - messageHandler.on("DocStats", data => { - if (this.destroyed) { - return; - } + const reader = readableStream.getReader();
- this.#docStats = Object.freeze({ - streamTypes: Object.freeze(data.streamTypes), - fontTypes: Object.freeze(data.fontTypes) - }); - }); - messageHandler.on("UnsupportedFeature", this._onUnsupportedFeature.bind(this)); - messageHandler.on("FetchBuiltInCMap", data => { - if (this.destroyed) { - return Promise.reject(new Error("Worker was destroyed.")); - } + const intentState = this._intentStates.get(cacheKey);
- if (!this.CMapReaderFactory) { - return Promise.reject(new Error("CMapReaderFactory not initialized, see the `useWorkerFetch` parameter.")); - } + intentState.streamReader = reader;
- return this.CMapReaderFactory.fetch(data); - }); - messageHandler.on("FetchStandardFontData", data => { - if (this.destroyed) { - return Promise.reject(new Error("Worker was destroyed.")); - } + const pump = () => { + reader.read().then(({ + value, + done + }) => { + if (done) { + intentState.streamReader = null; + return; + }
- if (!this.StandardFontDataFactory) { - return Promise.reject(new Error("StandardFontDataFactory not initialized, see the `useWorkerFetch` parameter.")); - } + if (this._transport.destroyed) { + return; + }
- return this.StandardFontDataFactory.fetch(data); - }); - } + this._renderPageChunk(value, intentState);
- _onUnsupportedFeature({ - featureId - }) { - if (this.destroyed) { - return; - } + pump(); + }, reason => { + intentState.streamReader = null;
- this.loadingTask.onUnsupportedFeature?.(featureId); - } + if (this._transport.destroyed) { + return; + }
- getData() { - return this.messageHandler.sendWithPromise("GetData", null); + if (intentState.operatorList) { + intentState.operatorList.lastChunk = true; + + for (const internalRenderTask of intentState.renderTasks) { + internalRenderTask.operatorListChanged(); + } + + this._tryCleanup(); + } + + if (intentState.displayReadyCapability) { + intentState.displayReadyCapability.reject(reason); + } else if (intentState.opListReadCapability) { + intentState.opListReadCapability.reject(reason); + } else { + throw reason; + } + }); + }; + + pump(); }
- getPage(pageNumber) { - if (!Number.isInteger(pageNumber) || pageNumber <= 0 || pageNumber > this._numPages) { - return Promise.reject(new Error("Invalid page request.")); + _abortOperatorList({ + intentState, + reason, + force = false + }) { + if (!intentState.streamReader) { + return; }
- const pageIndex = pageNumber - 1, - cachedPromise = this.#pagePromises.get(pageIndex); + if (!force) { + if (intentState.renderTasks.size > 0) { + return; + }
- if (cachedPromise) { - return cachedPromise; - } + if (reason instanceof _display_utils.RenderingCancelledException) { + intentState.streamReaderCancelTimeout = setTimeout(() => { + this._abortOperatorList({ + intentState, + reason, + force: true + });
- const promise = this.messageHandler.sendWithPromise("GetPage", { - pageIndex - }).then(pageInfo => { - if (this.destroyed) { - throw new Error("Transport destroyed"); + intentState.streamReaderCancelTimeout = null; + }, RENDERING_CANCELLED_TIMEOUT); + return; } + }
- const page = new PDFPageProxy(pageIndex, pageInfo, this, this._params.ownerDocument, this._params.pdfBug); - this.#pageCache.set(pageIndex, page); - return page; - }); - this.#pagePromises.set(pageIndex, promise); - return promise; - } + intentState.streamReader.cancel(new _util.AbortException(reason.message)).catch(() => {}); + intentState.streamReader = null;
- getPageIndex(ref) { - if (typeof ref !== "object" || ref === null || !Number.isInteger(ref.num) || ref.num < 0 || !Number.isInteger(ref.gen) || ref.gen < 0) { - return Promise.reject(new Error("Invalid pageIndex request.")); + if (this._transport.destroyed) { + return; }
- return this.messageHandler.sendWithPromise("GetPageIndex", { - num: ref.num, - gen: ref.gen - }); - } + for (const [curCacheKey, curIntentState] of this._intentStates) { + if (curIntentState === intentState) { + this._intentStates.delete(curCacheKey);
- getAnnotations(pageIndex, intent) { - return this.messageHandler.sendWithPromise("GetAnnotations", { - pageIndex, - intent - }); - } + break; + } + }
- saveDocument() { - return this.messageHandler.sendWithPromise("SaveDocument", { - isPureXfa: !!this._htmlForXfa, - numPages: this._numPages, - annotationStorage: this.annotationStorage.serializable, - filename: this._fullReader?.filename ?? null - }).finally(() => { - this.annotationStorage.resetModified(); - }); + this.cleanup(); }
- getFieldObjects() { - return this._getFieldObjectsPromise ||= this.messageHandler.sendWithPromise("GetFieldObjects", null); + get stats() { + return this._stats; }
- hasJSActions() { - return this._hasJSActionsPromise ||= this.messageHandler.sendWithPromise("HasJSActions", null); - } +}
- getCalculationOrderIds() { - return this.messageHandler.sendWithPromise("GetCalculationOrderIds", null); - } +exports.PDFPageProxy = PDFPageProxy;
- getDestinations() { - return this.messageHandler.sendWithPromise("GetDestinations", null); +class LoopbackPort { + constructor() { + this._listeners = []; + this._deferred = Promise.resolve(); }
- getDestination(id) { - if (typeof id !== "string") { - return Promise.reject(new Error("Invalid destination request.")); - } + postMessage(obj, transfers) { + const event = { + data: structuredClone(obj, transfers) + };
- return this.messageHandler.sendWithPromise("GetDestination", { - id + this._deferred.then(() => { + for (const listener of this._listeners) { + listener.call(this, event); + } }); }
- getPageLabels() { - return this.messageHandler.sendWithPromise("GetPageLabels", null); + addEventListener(name, listener) { + this._listeners.push(listener); }
- getPageLayout() { - return this.messageHandler.sendWithPromise("GetPageLayout", null); - } + removeEventListener(name, listener) { + const i = this._listeners.indexOf(listener);
- getPageMode() { - return this.messageHandler.sendWithPromise("GetPageMode", null); + this._listeners.splice(i, 1); }
- getViewerPreferences() { - return this.messageHandler.sendWithPromise("GetViewerPreferences", null); + terminate() { + this._listeners.length = 0; }
- getOpenAction() { - return this.messageHandler.sendWithPromise("GetOpenAction", null); - } +}
- getAttachments() { - return this.messageHandler.sendWithPromise("GetAttachments", null); - } +exports.LoopbackPort = LoopbackPort; +const PDFWorkerUtil = { + isWorkerDisabled: false, + fallbackWorkerSrc: null, + fakeWorkerId: 0 +}; +exports.PDFWorkerUtil = PDFWorkerUtil; +;
- getJavaScript() { - return this.messageHandler.sendWithPromise("GetJavaScript", null); - } +class PDFWorker { + static #workerPorts = new WeakMap();
- getDocJSActions() { - return this.messageHandler.sendWithPromise("GetDocJSActions", null); - } + constructor({ + name = null, + port = null, + verbosity = (0, _util.getVerbosityLevel)() + } = {}) { + if (port && PDFWorker.#workerPorts.has(port)) { + throw new Error("Cannot use more than one PDFWorker per port."); + }
- getPageJSActions(pageIndex) { - return this.messageHandler.sendWithPromise("GetPageJSActions", { - pageIndex - }); - } + this.name = name; + this.destroyed = false; + this.verbosity = verbosity; + this._readyCapability = (0, _util.createPromiseCapability)(); + this._port = null; + this._webWorker = null; + this._messageHandler = null;
- getStructTree(pageIndex) { - return this.messageHandler.sendWithPromise("GetStructTree", { - pageIndex - }); - } + if (port) { + PDFWorker.#workerPorts.set(port, this);
- getOutline() { - return this.messageHandler.sendWithPromise("GetOutline", null); - } + this._initializeFromPort(port);
- getOptionalContentConfig() { - return this.messageHandler.sendWithPromise("GetOptionalContentConfig", null).then(results => { - return new _optional_content_config.OptionalContentConfig(results); - }); - } + return; + }
- getPermissions() { - return this.messageHandler.sendWithPromise("GetPermissions", null); + this._initialize(); }
- getMetadata() { - return this.#metadataPromise ||= this.messageHandler.sendWithPromise("GetMetadata", null).then(results => { - return { - info: results[0], - metadata: results[1] ? new _metadata.Metadata(results[1]) : null, - contentDispositionFilename: this._fullReader?.filename ?? null, - contentLength: this._fullReader?.contentLength ?? null - }; - }); + get promise() { + return this._readyCapability.promise; }
- getMarkInfo() { - return this.messageHandler.sendWithPromise("GetMarkInfo", null); + get port() { + return this._port; }
- async startCleanup(keepLoadedFonts = false) { - await this.messageHandler.sendWithPromise("Cleanup", null); + get messageHandler() { + return this._messageHandler; + }
- if (this.destroyed) { - return; - } + _initializeFromPort(port) { + this._port = port; + this._messageHandler = new _message_handler.MessageHandler("main", "worker", port);
- for (const page of this.#pageCache.values()) { - const cleanupSuccessful = page.cleanup(); + this._messageHandler.on("ready", function () {});
- if (!cleanupSuccessful) { - throw new Error(`startCleanup: Page ${page.pageNumber} is currently rendering.`); - } - } + this._readyCapability.resolve(); + }
- this.commonObjs.clear(); + _initialize() { + if (typeof Worker !== "undefined" && !PDFWorkerUtil.isWorkerDisabled && !PDFWorker._mainThreadWorkerMessageHandler) { + let workerSrc = PDFWorker.workerSrc;
- if (!keepLoadedFonts) { - this.fontLoader.clear(); - } + try { + const worker = new Worker(workerSrc); + const messageHandler = new _message_handler.MessageHandler("main", "worker", worker);
- this.#metadataPromise = null; - this._getFieldObjectsPromise = null; - this._hasJSActionsPromise = null; - } + const terminateEarly = () => { + worker.removeEventListener("error", onWorkerError); + messageHandler.destroy(); + worker.terminate();
- get loadingParams() { - const params = this._params; - return (0, _util.shadow)(this, "loadingParams", { - disableAutoFetch: params.disableAutoFetch, - enableXfa: params.enableXfa - }); - } + if (this.destroyed) { + this._readyCapability.reject(new Error("Worker was destroyed")); + } else { + this._setupFakeWorker(); + } + };
-} + const onWorkerError = () => { + if (!this._webWorker) { + terminateEarly(); + } + };
-class PDFObjects { - #objs = Object.create(null); + worker.addEventListener("error", onWorkerError); + messageHandler.on("test", data => { + worker.removeEventListener("error", onWorkerError);
- #ensureObj(objId) { - const obj = this.#objs[objId]; + if (this.destroyed) { + terminateEarly(); + return; + }
- if (obj) { - return obj; - } + if (data) { + this._messageHandler = messageHandler; + this._port = worker; + this._webWorker = worker;
- return this.#objs[objId] = { - capability: (0, _util.createPromiseCapability)(), - data: null - }; - } + this._readyCapability.resolve();
- get(objId, callback = null) { - if (callback) { - const obj = this.#ensureObj(objId); - obj.capability.promise.then(() => callback(obj.data)); - return null; - } + messageHandler.send("configure", { + verbosity: this.verbosity + }); + } else { + this._setupFakeWorker();
- const obj = this.#objs[objId]; + messageHandler.destroy(); + worker.terminate(); + } + }); + messageHandler.on("ready", data => { + worker.removeEventListener("error", onWorkerError);
- if (!obj?.capability.settled) { - throw new Error(`Requesting object that isn't resolved yet ${objId}.`); + if (this.destroyed) { + terminateEarly(); + return; + } + + try { + sendTest(); + } catch (e) { + this._setupFakeWorker(); + } + }); + + const sendTest = () => { + const testObj = new Uint8Array(); + messageHandler.send("test", testObj, [testObj.buffer]); + }; + + sendTest(); + return; + } catch (e) { + (0, _util.info)("The worker has been disabled."); + } }
- return obj.data; + this._setupFakeWorker(); }
- has(objId) { - const obj = this.#objs[objId]; - return obj?.capability.settled || false; - } + _setupFakeWorker() { + if (!PDFWorkerUtil.isWorkerDisabled) { + (0, _util.warn)("Setting up fake worker."); + PDFWorkerUtil.isWorkerDisabled = true; + }
- resolve(objId, data = null) { - const obj = this.#ensureObj(objId); - obj.data = data; - obj.capability.resolve(); - } + PDFWorker._setupFakeWorkerGlobal.then(WorkerMessageHandler => { + if (this.destroyed) { + this._readyCapability.reject(new Error("Worker was destroyed"));
- clear() { - this.#objs = Object.create(null); - } + return; + }
-} + const port = new LoopbackPort(); + this._port = port; + const id = `fake${PDFWorkerUtil.fakeWorkerId++}`; + const workerHandler = new _message_handler.MessageHandler(id + "_worker", id, port); + WorkerMessageHandler.setup(workerHandler, port); + const messageHandler = new _message_handler.MessageHandler(id, id + "_worker", port); + this._messageHandler = messageHandler;
-class RenderTask { - constructor(internalRenderTask) { - this._internalRenderTask = internalRenderTask; - this.onContinue = null; - } + this._readyCapability.resolve();
- get promise() { - return this._internalRenderTask.capability.promise; + messageHandler.send("configure", { + verbosity: this.verbosity + }); + }).catch(reason => { + this._readyCapability.reject(new Error(`Setting up fake worker failed: "${reason.message}".`)); + }); }
- cancel() { - this._internalRenderTask.cancel(); - } + destroy() { + this.destroyed = true;
-} + if (this._webWorker) { + this._webWorker.terminate();
-exports.RenderTask = RenderTask; + this._webWorker = null; + }
-class InternalRenderTask { - static #canvasInUse = new WeakSet(); + PDFWorker.#workerPorts.delete(this._port); + this._port = null;
- constructor({ - callback, - params, - objs, - commonObjs, - annotationCanvasMap, - operatorList, - pageIndex, - canvasFactory, - useRequestAnimationFrame = false, - pdfBug = false, - pageColors = null - }) { - this.callback = callback; - this.params = params; - this.objs = objs; - this.commonObjs = commonObjs; - this.annotationCanvasMap = annotationCanvasMap; - this.operatorListIdx = null; - this.operatorList = operatorList; - this._pageIndex = pageIndex; - this.canvasFactory = canvasFactory; - this._pdfBug = pdfBug; - this.pageColors = pageColors; - this.running = false; - this.graphicsReadyCallback = null; - this.graphicsReady = false; - this._useRequestAnimationFrame = useRequestAnimationFrame === true && typeof window !== "undefined"; - this.cancelled = false; - this.capability = (0, _util.createPromiseCapability)(); - this.task = new RenderTask(this); - this._cancelBound = this.cancel.bind(this); - this._continueBound = this._continue.bind(this); - this._scheduleNextBound = this._scheduleNext.bind(this); - this._nextBound = this._next.bind(this); - this._canvas = params.canvasContext.canvas; - } + if (this._messageHandler) { + this._messageHandler.destroy();
- get completed() { - return this.capability.promise.catch(function () {}); + this._messageHandler = null; + } }
- initializeGraphics({ - transparency = false, - optionalContentConfig - }) { - if (this.cancelled) { - return; + static fromPort(params) { + if (!params?.port) { + throw new Error("PDFWorker.fromPort - invalid method signature."); }
- if (this._canvas) { - if (InternalRenderTask.#canvasInUse.has(this._canvas)) { - throw new Error("Cannot use the same canvas during multiple render() operations. " + "Use different canvas or ensure previous operations were " + "cancelled or completed."); - } + if (this.#workerPorts.has(params.port)) { + return this.#workerPorts.get(params.port); + }
- InternalRenderTask.#canvasInUse.add(this._canvas); + return new PDFWorker(params); + } + + static get workerSrc() { + if (_worker_options.GlobalWorkerOptions.workerSrc) { + return _worker_options.GlobalWorkerOptions.workerSrc; }
- if (this._pdfBug && globalThis.StepperManager?.enabled) { - this.stepper = globalThis.StepperManager.create(this._pageIndex); - this.stepper.init(this.operatorList); - this.stepper.nextBreakPoint = this.stepper.getNextBreakPoint(); + if (PDFWorkerUtil.fallbackWorkerSrc !== null) { + if (!_is_node.isNodeJS) { + (0, _display_utils.deprecated)('No "GlobalWorkerOptions.workerSrc" specified.'); + } + + return PDFWorkerUtil.fallbackWorkerSrc; }
- const { - canvasContext, - viewport, - transform, - imageLayer, - background - } = this.params; - this.gfx = new _canvas.CanvasGraphics(canvasContext, this.commonObjs, this.objs, this.canvasFactory, imageLayer, optionalContentConfig, this.annotationCanvasMap, this.pageColors); - this.gfx.beginDrawing({ - transform, - viewport, - transparency, - background - }); - this.operatorListIdx = 0; - this.graphicsReady = true; + throw new Error('No "GlobalWorkerOptions.workerSrc" specified.'); + }
- if (this.graphicsReadyCallback) { - this.graphicsReadyCallback(); + static get _mainThreadWorkerMessageHandler() { + try { + return globalThis.pdfjsWorker?.WorkerMessageHandler || null; + } catch (ex) { + return null; } }
- cancel(error = null) { - this.running = false; - this.cancelled = true; + static get _setupFakeWorkerGlobal() { + const loader = async () => { + const mainWorkerMessageHandler = this._mainThreadWorkerMessageHandler;
- if (this.gfx) { - this.gfx.endDrawing(); - } + if (mainWorkerMessageHandler) { + return mainWorkerMessageHandler; + }
- if (this._canvas) { - InternalRenderTask.#canvasInUse.delete(this._canvas); - } + await (0, _display_utils.loadScript)(this.workerSrc); + return window.pdfjsWorker.WorkerMessageHandler; + };
- this.callback(error || new _display_utils.RenderingCancelledException(`Rendering cancelled, page ${this._pageIndex + 1}`, "canvas")); + return (0, _util.shadow)(this, "_setupFakeWorkerGlobal", loader()); }
- operatorListChanged() { - if (!this.graphicsReady) { - if (!this.graphicsReadyCallback) { - this.graphicsReadyCallback = this._continueBound; - } - - return; - } - - if (this.stepper) { - this.stepper.updateOperatorList(this.operatorList); - } +}
- if (this.running) { - return; - } +exports.PDFWorker = PDFWorker; +;
- this._continue(); - } +class WorkerTransport { + #docStats = null; + #pageCache = new Map(); + #pagePromises = new Map(); + #metadataPromise = null;
- _continue() { - this.running = true; + constructor(messageHandler, loadingTask, networkStream, params) { + this.messageHandler = messageHandler; + this.loadingTask = loadingTask; + this.commonObjs = new PDFObjects(); + this.fontLoader = new _font_loader.FontLoader({ + docId: loadingTask.docId, + onUnsupportedFeature: this._onUnsupportedFeature.bind(this), + ownerDocument: params.ownerDocument, + styleElement: params.styleElement + }); + this._params = params;
- if (this.cancelled) { - return; + if (!params.useWorkerFetch) { + this.CMapReaderFactory = new params.CMapReaderFactory({ + baseUrl: params.cMapUrl, + isCompressed: params.cMapPacked + }); + this.StandardFontDataFactory = new params.StandardFontDataFactory({ + baseUrl: params.standardFontDataUrl + }); }
- if (this.task.onContinue) { - this.task.onContinue(this._scheduleNextBound); - } else { - this._scheduleNext(); - } + this.destroyed = false; + this.destroyCapability = null; + this._passwordCapability = null; + this._networkStream = networkStream; + this._fullReader = null; + this._lastProgress = null; + this.downloadInfoCapability = (0, _util.createPromiseCapability)(); + this.setupMessageHandler(); }
- _scheduleNext() { - if (this._useRequestAnimationFrame) { - window.requestAnimationFrame(() => { - this._nextBound().catch(this._cancelBound); - }); - } else { - Promise.resolve().then(this._nextBound).catch(this._cancelBound); - } + get annotationStorage() { + return (0, _util.shadow)(this, "annotationStorage", new _annotation_storage.AnnotationStorage()); }
- async _next() { - if (this.cancelled) { - return; - } + get stats() { + return this.#docStats; + }
- this.operatorListIdx = this.gfx.executeOperatorList(this.operatorList, this.operatorListIdx, this._continueBound, this.stepper); + getRenderingIntent(intent, annotationMode = _util.AnnotationMode.ENABLE, printAnnotationStorage = null, isOpList = false) { + let renderingIntent = _util.RenderingIntentFlag.DISPLAY; + let annotationMap = null;
- if (this.operatorListIdx === this.operatorList.argsArray.length) { - this.running = false; + switch (intent) { + case "any": + renderingIntent = _util.RenderingIntentFlag.ANY; + break;
- if (this.operatorList.lastChunk) { - this.gfx.endDrawing(); + case "display": + break;
- if (this._canvas) { - InternalRenderTask.#canvasInUse.delete(this._canvas); - } + case "print": + renderingIntent = _util.RenderingIntentFlag.PRINT; + break;
- this.callback(); - } + default: + (0, _util.warn)(`getRenderingIntent - invalid intent: ${intent}`); } - }
-} + switch (annotationMode) { + case _util.AnnotationMode.DISABLE: + renderingIntent += _util.RenderingIntentFlag.ANNOTATIONS_DISABLE; + break;
-const version = '2.14.290'; -exports.version = version; -const build = '38c82357b'; -exports.build = build; + case _util.AnnotationMode.ENABLE: + break;
-/***/ }), -/* 5 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + case _util.AnnotationMode.ENABLE_FORMS: + renderingIntent += _util.RenderingIntentFlag.ANNOTATIONS_FORMS; + break;
+ case _util.AnnotationMode.ENABLE_STORAGE: + renderingIntent += _util.RenderingIntentFlag.ANNOTATIONS_STORAGE; + const annotationStorage = renderingIntent & _util.RenderingIntentFlag.PRINT && printAnnotationStorage instanceof _annotation_storage.PrintAnnotationStorage ? printAnnotationStorage : this.annotationStorage; + annotationMap = annotationStorage.serializable; + break;
+ default: + (0, _util.warn)(`getRenderingIntent - invalid annotationMode: ${annotationMode}`); + }
-Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.StatTimer = exports.RenderingCancelledException = exports.PixelsPerInch = exports.PageViewport = exports.PDFDateString = exports.DOMStandardFontDataFactory = exports.DOMSVGFactory = exports.DOMCanvasFactory = exports.DOMCMapReaderFactory = void 0; -exports.deprecated = deprecated; -exports.getFilenameFromUrl = getFilenameFromUrl; -exports.getPdfFilenameFromUrl = getPdfFilenameFromUrl; -exports.getXfaPageViewport = getXfaPageViewport; -exports.isDataScheme = isDataScheme; -exports.isPdfFile = isPdfFile; -exports.isValidFetchUrl = isValidFetchUrl; -exports.loadScript = loadScript; + if (isOpList) { + renderingIntent += _util.RenderingIntentFlag.OPLIST; + }
-var _base_factory = __w_pdfjs_require__(6); + return { + renderingIntent, + cacheKey: `${renderingIntent}_${_annotation_storage.AnnotationStorage.getHash(annotationMap)}`, + annotationStorageMap: annotationMap + }; + }
-var _util = __w_pdfjs_require__(1); + destroy() { + if (this.destroyCapability) { + return this.destroyCapability.promise; + }
-const SVG_NS = "http://www.w3.org/2000/svg"; + this.destroyed = true; + this.destroyCapability = (0, _util.createPromiseCapability)();
-class PixelsPerInch { - static CSS = 96.0; - static PDF = 72.0; - static PDF_TO_CSS_UNITS = this.CSS / this.PDF; -} + if (this._passwordCapability) { + this._passwordCapability.reject(new Error("Worker was destroyed during onPassword callback")); + }
-exports.PixelsPerInch = PixelsPerInch; + const waitOn = [];
-class DOMCanvasFactory extends _base_factory.BaseCanvasFactory { - constructor({ - ownerDocument = globalThis.document - } = {}) { - super(); - this._document = ownerDocument; - } + for (const page of this.#pageCache.values()) { + waitOn.push(page._destroy()); + }
- _createCanvas(width, height) { - const canvas = this._document.createElement("canvas"); + this.#pageCache.clear(); + this.#pagePromises.clear();
- canvas.width = width; - canvas.height = height; - return canvas; - } + if (this.hasOwnProperty("annotationStorage")) { + this.annotationStorage.resetModified(); + }
-} + const terminated = this.messageHandler.sendWithPromise("Terminate", null); + waitOn.push(terminated); + Promise.all(waitOn).then(() => { + this.commonObjs.clear(); + this.fontLoader.clear(); + this.#metadataPromise = null; + this._getFieldObjectsPromise = null; + this._hasJSActionsPromise = null;
-exports.DOMCanvasFactory = DOMCanvasFactory; + if (this._networkStream) { + this._networkStream.cancelAllRequests(new _util.AbortException("Worker was terminated.")); + }
-async function fetchData(url, asTypedArray = false) { - const response = await fetch(url); + if (this.messageHandler) { + this.messageHandler.destroy(); + this.messageHandler = null; + }
- if (!response.ok) { - throw new Error(response.statusText); + this.destroyCapability.resolve(); + }, this.destroyCapability.reject); + return this.destroyCapability.promise; }
- return asTypedArray ? new Uint8Array(await response.arrayBuffer()) : (0, _util.stringToBytes)(await response.text()); -} + setupMessageHandler() { + const { + messageHandler, + loadingTask + } = this; + messageHandler.on("GetReader", (data, sink) => { + (0, _util.assert)(this._networkStream, "GetReader - no `IPDFStream` instance available."); + this._fullReader = this._networkStream.getFullReader();
-class DOMCMapReaderFactory extends _base_factory.BaseCMapReaderFactory { - _fetchData(url, compressionType) { - return fetchData(url, this.isCompressed).then(data => { - return { - cMapData: data, - compressionType + this._fullReader.onProgress = evt => { + this._lastProgress = { + loaded: evt.loaded, + total: evt.total + }; }; - }); - }
-} + sink.onPull = () => { + this._fullReader.read().then(function ({ + value, + done + }) { + if (done) { + sink.close(); + return; + }
-exports.DOMCMapReaderFactory = DOMCMapReaderFactory; + (0, _util.assert)((0, _util.isArrayBuffer)(value), "GetReader - expected an ArrayBuffer."); + sink.enqueue(new Uint8Array(value), 1, [value]); + }).catch(reason => { + sink.error(reason); + }); + };
-class DOMStandardFontDataFactory extends _base_factory.BaseStandardFontDataFactory { - _fetchData(url) { - return fetchData(url, true); - } + sink.onCancel = reason => { + this._fullReader.cancel(reason);
-} + sink.ready.catch(readyReason => { + if (this.destroyed) { + return; + }
-exports.DOMStandardFontDataFactory = DOMStandardFontDataFactory; + throw readyReason; + }); + }; + }); + messageHandler.on("ReaderHeadersReady", data => { + const headersCapability = (0, _util.createPromiseCapability)(); + const fullReader = this._fullReader; + fullReader.headersReady.then(() => { + if (!fullReader.isStreamingSupported || !fullReader.isRangeSupported) { + if (this._lastProgress) { + loadingTask.onProgress?.(this._lastProgress); + }
-class DOMSVGFactory extends _base_factory.BaseSVGFactory { - _createSVG(type) { - return document.createElementNS(SVG_NS, type); - } + fullReader.onProgress = evt => { + loadingTask.onProgress?.({ + loaded: evt.loaded, + total: evt.total + }); + }; + }
-} + headersCapability.resolve({ + isStreamingSupported: fullReader.isStreamingSupported, + isRangeSupported: fullReader.isRangeSupported, + contentLength: fullReader.contentLength + }); + }, headersCapability.reject); + return headersCapability.promise; + }); + messageHandler.on("GetRangeReader", (data, sink) => { + (0, _util.assert)(this._networkStream, "GetRangeReader - no `IPDFStream` instance available.");
-exports.DOMSVGFactory = DOMSVGFactory; + const rangeReader = this._networkStream.getRangeReader(data.begin, data.end);
-class PageViewport { - constructor({ - viewBox, - scale, - rotation, - offsetX = 0, - offsetY = 0, - dontFlip = false - }) { - this.viewBox = viewBox; - this.scale = scale; - this.rotation = rotation; - this.offsetX = offsetX; - this.offsetY = offsetY; - const centerX = (viewBox[2] + viewBox[0]) / 2; - const centerY = (viewBox[3] + viewBox[1]) / 2; - let rotateA, rotateB, rotateC, rotateD; - rotation %= 360; + if (!rangeReader) { + sink.close(); + return; + }
- if (rotation < 0) { - rotation += 360; - } + sink.onPull = () => { + rangeReader.read().then(function ({ + value, + done + }) { + if (done) { + sink.close(); + return; + }
- switch (rotation) { - case 180: - rotateA = -1; - rotateB = 0; - rotateC = 0; - rotateD = 1; - break; + (0, _util.assert)((0, _util.isArrayBuffer)(value), "GetRangeReader - expected an ArrayBuffer."); + sink.enqueue(new Uint8Array(value), 1, [value]); + }).catch(reason => { + sink.error(reason); + }); + };
- case 90: - rotateA = 0; - rotateB = 1; - rotateC = 1; - rotateD = 0; - break; + sink.onCancel = reason => { + rangeReader.cancel(reason); + sink.ready.catch(readyReason => { + if (this.destroyed) { + return; + }
- case 270: - rotateA = 0; - rotateB = -1; - rotateC = -1; - rotateD = 0; - break; + throw readyReason; + }); + }; + }); + messageHandler.on("GetDoc", ({ + pdfInfo + }) => { + this._numPages = pdfInfo.numPages; + this._htmlForXfa = pdfInfo.htmlForXfa; + delete pdfInfo.htmlForXfa;
- case 0: - rotateA = 1; - rotateB = 0; - rotateC = 0; - rotateD = -1; - break; + loadingTask._capability.resolve(new PDFDocumentProxy(pdfInfo, this)); + }); + messageHandler.on("DocException", function (ex) { + let reason;
- default: - throw new Error("PageViewport: Invalid rotation, must be a multiple of 90 degrees."); - } + switch (ex.name) { + case "PasswordException": + reason = new _util.PasswordException(ex.message, ex.code); + break;
- if (dontFlip) { - rotateC = -rotateC; - rotateD = -rotateD; - } + case "InvalidPDFException": + reason = new _util.InvalidPDFException(ex.message); + break;
- let offsetCanvasX, offsetCanvasY; - let width, height; + case "MissingPDFException": + reason = new _util.MissingPDFException(ex.message); + break;
- if (rotateA === 0) { - offsetCanvasX = Math.abs(centerY - viewBox[1]) * scale + offsetX; - offsetCanvasY = Math.abs(centerX - viewBox[0]) * scale + offsetY; - width = Math.abs(viewBox[3] - viewBox[1]) * scale; - height = Math.abs(viewBox[2] - viewBox[0]) * scale; - } else { - offsetCanvasX = Math.abs(centerX - viewBox[0]) * scale + offsetX; - offsetCanvasY = Math.abs(centerY - viewBox[1]) * scale + offsetY; - width = Math.abs(viewBox[2] - viewBox[0]) * scale; - height = Math.abs(viewBox[3] - viewBox[1]) * scale; - } + case "UnexpectedResponseException": + reason = new _util.UnexpectedResponseException(ex.message, ex.status); + break;
- this.transform = [rotateA * scale, rotateB * scale, rotateC * scale, rotateD * scale, offsetCanvasX - rotateA * scale * centerX - rotateC * scale * centerY, offsetCanvasY - rotateB * scale * centerX - rotateD * scale * centerY]; - this.width = width; - this.height = height; - } + case "UnknownErrorException": + reason = new _util.UnknownErrorException(ex.message, ex.details); + break;
- clone({ - scale = this.scale, - rotation = this.rotation, - offsetX = this.offsetX, - offsetY = this.offsetY, - dontFlip = false - } = {}) { - return new PageViewport({ - viewBox: this.viewBox.slice(), - scale, - rotation, - offsetX, - offsetY, - dontFlip + default: + (0, _util.unreachable)("DocException - expected a valid Error."); + } + + loadingTask._capability.reject(reason); }); - } + messageHandler.on("PasswordRequest", exception => { + this._passwordCapability = (0, _util.createPromiseCapability)();
- convertToViewportPoint(x, y) { - return _util.Util.applyTransform([x, y], this.transform); - } + if (loadingTask.onPassword) { + const updatePassword = password => { + if (password instanceof Error) { + this._passwordCapability.reject(password); + } else { + this._passwordCapability.resolve({ + password + }); + } + };
- convertToViewportRectangle(rect) { - const topLeft = _util.Util.applyTransform([rect[0], rect[1]], this.transform); + try { + loadingTask.onPassword(updatePassword, exception.code); + } catch (ex) { + this._passwordCapability.reject(ex); + } + } else { + this._passwordCapability.reject(new _util.PasswordException(exception.message, exception.code)); + }
- const bottomRight = _util.Util.applyTransform([rect[2], rect[3]], this.transform); + return this._passwordCapability.promise; + }); + messageHandler.on("DataLoaded", data => { + loadingTask.onProgress?.({ + loaded: data.length, + total: data.length + }); + this.downloadInfoCapability.resolve(data); + }); + messageHandler.on("StartRenderPage", data => { + if (this.destroyed) { + return; + }
- return [topLeft[0], topLeft[1], bottomRight[0], bottomRight[1]]; - } + const page = this.#pageCache.get(data.pageIndex);
- convertToPdfPoint(x, y) { - return _util.Util.applyInverseTransform([x, y], this.transform); - } + page._startRenderPage(data.transparency, data.cacheKey); + }); + messageHandler.on("commonobj", ([id, type, exportedData]) => { + if (this.destroyed) { + return; + }
-} + if (this.commonObjs.has(id)) { + return; + }
-exports.PageViewport = PageViewport; + switch (type) { + case "Font": + const params = this._params;
-class RenderingCancelledException extends _util.BaseException { - constructor(msg, type) { - super(msg, "RenderingCancelledException"); - this.type = type; - } + if ("error" in exportedData) { + const exportedError = exportedData.error; + (0, _util.warn)(`Error during font loading: ${exportedError}`); + this.commonObjs.resolve(id, exportedError); + break; + }
-} + let fontRegistry = null;
-exports.RenderingCancelledException = RenderingCancelledException; + if (params.pdfBug && globalThis.FontInspector?.enabled) { + fontRegistry = { + registerFont(font, url) { + globalThis.FontInspector.fontAdded(font, url); + }
-function isDataScheme(url) { - const ii = url.length; - let i = 0; + }; + }
- while (i < ii && url[i].trim() === "") { - i++; - } + const font = new _font_loader.FontFaceObject(exportedData, { + isEvalSupported: params.isEvalSupported, + disableFontFace: params.disableFontFace, + ignoreErrors: params.ignoreErrors, + onUnsupportedFeature: this._onUnsupportedFeature.bind(this), + fontRegistry + }); + this.fontLoader.bind(font).catch(reason => { + return messageHandler.sendWithPromise("FontFallback", { + id + }); + }).finally(() => { + if (!params.fontExtraProperties && font.data) { + font.data = null; + }
- return url.substring(i, i + 5).toLowerCase() === "data:"; -} + this.commonObjs.resolve(id, font); + }); + break;
-function isPdfFile(filename) { - return typeof filename === "string" && /.pdf$/i.test(filename); -} + case "FontPath": + case "Image": + this.commonObjs.resolve(id, exportedData); + break;
-function getFilenameFromUrl(url) { - const anchor = url.indexOf("#"); - const query = url.indexOf("?"); - const end = Math.min(anchor > 0 ? anchor : url.length, query > 0 ? query : url.length); - return url.substring(url.lastIndexOf("/", end) + 1, end); -} + default: + throw new Error(`Got unknown common object type ${type}`); + } + }); + messageHandler.on("obj", ([id, pageIndex, type, imageData]) => { + if (this.destroyed) { + return; + }
-function getPdfFilenameFromUrl(url, defaultFilename = "document.pdf") { - if (typeof url !== "string") { - return defaultFilename; - } + const pageProxy = this.#pageCache.get(pageIndex);
- if (isDataScheme(url)) { - (0, _util.warn)('getPdfFilenameFromUrl: ignore "data:"-URL for performance reasons.'); - return defaultFilename; - } + if (pageProxy.objs.has(id)) { + return; + }
- const reURI = /^(?:(?:[^:]+:)?//[^/]+)?([^?#]*)(?[^#]*)?(#.*)?$/; - const reFilename = /[^/?#=]+.pdf\b(?!.*.pdf\b)/i; - const splitURI = reURI.exec(url); - let suggestedFilename = reFilename.exec(splitURI[1]) || reFilename.exec(splitURI[2]) || reFilename.exec(splitURI[3]); + switch (type) { + case "Image": + pageProxy.objs.resolve(id, imageData); + const MAX_IMAGE_SIZE_TO_STORE = 8000000;
- if (suggestedFilename) { - suggestedFilename = suggestedFilename[0]; + if (imageData) { + let length;
- if (suggestedFilename.includes("%")) { - try { - suggestedFilename = reFilename.exec(decodeURIComponent(suggestedFilename))[0]; - } catch (ex) {} - } - } + if (imageData.bitmap) { + const { + bitmap, + width, + height + } = imageData; + length = width * height * 4;
- return suggestedFilename || defaultFilename; -} + pageProxy._bitmaps.add(bitmap); + } else { + length = imageData.data?.length || 0; + }
-class StatTimer { - constructor() { - this.started = Object.create(null); - this.times = []; - } + if (length > MAX_IMAGE_SIZE_TO_STORE) { + pageProxy.cleanupAfterRender = true; + } + }
- time(name) { - if (name in this.started) { - (0, _util.warn)(`Timer is already running for ${name}`); - } + break;
- this.started[name] = Date.now(); - } + case "Pattern": + pageProxy.objs.resolve(id, imageData); + break;
- timeEnd(name) { - if (!(name in this.started)) { - (0, _util.warn)(`Timer has not been started for ${name}`); - } + default: + throw new Error(`Got unknown object type ${type}`); + } + }); + messageHandler.on("DocProgress", data => { + if (this.destroyed) { + return; + }
- this.times.push({ - name, - start: this.started[name], - end: Date.now() + loadingTask.onProgress?.({ + loaded: data.loaded, + total: data.total + }); }); - delete this.started[name]; - } + messageHandler.on("DocStats", data => { + if (this.destroyed) { + return; + }
- toString() { - const outBuf = []; - let longest = 0; + this.#docStats = Object.freeze({ + streamTypes: Object.freeze(data.streamTypes), + fontTypes: Object.freeze(data.fontTypes) + }); + }); + messageHandler.on("UnsupportedFeature", this._onUnsupportedFeature.bind(this)); + messageHandler.on("FetchBuiltInCMap", data => { + if (this.destroyed) { + return Promise.reject(new Error("Worker was destroyed.")); + }
- for (const time of this.times) { - const name = time.name; + if (!this.CMapReaderFactory) { + return Promise.reject(new Error("CMapReaderFactory not initialized, see the `useWorkerFetch` parameter.")); + }
- if (name.length > longest) { - longest = name.length; + return this.CMapReaderFactory.fetch(data); + }); + messageHandler.on("FetchStandardFontData", data => { + if (this.destroyed) { + return Promise.reject(new Error("Worker was destroyed.")); } - }
- for (const time of this.times) { - const duration = time.end - time.start; - outBuf.push(`${time.name.padEnd(longest)} ${duration}ms\n`); - } + if (!this.StandardFontDataFactory) { + return Promise.reject(new Error("StandardFontDataFactory not initialized, see the `useWorkerFetch` parameter.")); + }
- return outBuf.join(""); + return this.StandardFontDataFactory.fetch(data); + }); }
-} + _onUnsupportedFeature({ + featureId + }) { + if (this.destroyed) { + return; + }
-exports.StatTimer = StatTimer; + this.loadingTask.onUnsupportedFeature?.(featureId); + }
-function isValidFetchUrl(url, baseUrl) { - try { - const { - protocol - } = baseUrl ? new URL(url, baseUrl) : new URL(url); - return protocol === "http:" || protocol === "https:"; - } catch (ex) { - return false; + getData() { + return this.messageHandler.sendWithPromise("GetData", null); } -}
-function loadScript(src, removeScriptElement = false) { - return new Promise((resolve, reject) => { - const script = document.createElement("script"); - script.src = src; + getPage(pageNumber) { + if (!Number.isInteger(pageNumber) || pageNumber <= 0 || pageNumber > this._numPages) { + return Promise.reject(new Error("Invalid page request.")); + }
- script.onload = function (evt) { - if (removeScriptElement) { - script.remove(); - } + const pageIndex = pageNumber - 1, + cachedPromise = this.#pagePromises.get(pageIndex);
- resolve(evt); - }; + if (cachedPromise) { + return cachedPromise; + }
- script.onerror = function () { - reject(new Error(`Cannot load script at: ${script.src}`)); - }; + const promise = this.messageHandler.sendWithPromise("GetPage", { + pageIndex + }).then(pageInfo => { + if (this.destroyed) { + throw new Error("Transport destroyed"); + }
- (document.head || document.documentElement).appendChild(script); - }); -} + const page = new PDFPageProxy(pageIndex, pageInfo, this, this._params.ownerDocument, this._params.pdfBug); + this.#pageCache.set(pageIndex, page); + return page; + }); + this.#pagePromises.set(pageIndex, promise); + return promise; + }
-function deprecated(details) { - console.log("Deprecated API usage: " + details); -} - -let pdfDateStringRegex; - -class PDFDateString { - static toDateObject(input) { - if (!input || typeof input !== "string") { - return null; - } - - if (!pdfDateStringRegex) { - pdfDateStringRegex = new RegExp("^D:" + "(\d{4})" + "(\d{2})?" + "(\d{2})?" + "(\d{2})?" + "(\d{2})?" + "(\d{2})?" + "([Z|+|-])?" + "(\d{2})?" + "'?" + "(\d{2})?" + "'?"); + getPageIndex(ref) { + if (typeof ref !== "object" || ref === null || !Number.isInteger(ref.num) || ref.num < 0 || !Number.isInteger(ref.gen) || ref.gen < 0) { + return Promise.reject(new Error("Invalid pageIndex request.")); }
- const matches = pdfDateStringRegex.exec(input); + return this.messageHandler.sendWithPromise("GetPageIndex", { + num: ref.num, + gen: ref.gen + }); + }
- if (!matches) { - return null; - } + getAnnotations(pageIndex, intent) { + return this.messageHandler.sendWithPromise("GetAnnotations", { + pageIndex, + intent + }); + }
- const year = parseInt(matches[1], 10); - let month = parseInt(matches[2], 10); - month = month >= 1 && month <= 12 ? month - 1 : 0; - let day = parseInt(matches[3], 10); - day = day >= 1 && day <= 31 ? day : 1; - let hour = parseInt(matches[4], 10); - hour = hour >= 0 && hour <= 23 ? hour : 0; - let minute = parseInt(matches[5], 10); - minute = minute >= 0 && minute <= 59 ? minute : 0; - let second = parseInt(matches[6], 10); - second = second >= 0 && second <= 59 ? second : 0; - const universalTimeRelation = matches[7] || "Z"; - let offsetHour = parseInt(matches[8], 10); - offsetHour = offsetHour >= 0 && offsetHour <= 23 ? offsetHour : 0; - let offsetMinute = parseInt(matches[9], 10) || 0; - offsetMinute = offsetMinute >= 0 && offsetMinute <= 59 ? offsetMinute : 0; + saveDocument() { + return this.messageHandler.sendWithPromise("SaveDocument", { + isPureXfa: !!this._htmlForXfa, + numPages: this._numPages, + annotationStorage: this.annotationStorage.serializable, + filename: this._fullReader?.filename ?? null + }).finally(() => { + this.annotationStorage.resetModified(); + }); + }
- if (universalTimeRelation === "-") { - hour += offsetHour; - minute += offsetMinute; - } else if (universalTimeRelation === "+") { - hour -= offsetHour; - minute -= offsetMinute; - } + getFieldObjects() { + return this._getFieldObjectsPromise ||= this.messageHandler.sendWithPromise("GetFieldObjects", null); + }
- return new Date(Date.UTC(year, month, day, hour, minute, second)); + hasJSActions() { + return this._hasJSActionsPromise ||= this.messageHandler.sendWithPromise("HasJSActions", null); }
-} + getCalculationOrderIds() { + return this.messageHandler.sendWithPromise("GetCalculationOrderIds", null); + }
-exports.PDFDateString = PDFDateString; + getDestinations() { + return this.messageHandler.sendWithPromise("GetDestinations", null); + }
-function getXfaPageViewport(xfaPage, { - scale = 1, - rotation = 0 -}) { - const { - width, - height - } = xfaPage.attributes.style; - const viewBox = [0, 0, parseInt(width), parseInt(height)]; - return new PageViewport({ - viewBox, - scale, - rotation - }); -} + getDestination(id) { + if (typeof id !== "string") { + return Promise.reject(new Error("Invalid destination request.")); + }
-/***/ }), -/* 6 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + return this.messageHandler.sendWithPromise("GetDestination", { + id + }); + }
+ getPageLabels() { + return this.messageHandler.sendWithPromise("GetPageLabels", null); + }
+ getPageLayout() { + return this.messageHandler.sendWithPromise("GetPageLayout", null); + }
-Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.BaseStandardFontDataFactory = exports.BaseSVGFactory = exports.BaseCanvasFactory = exports.BaseCMapReaderFactory = void 0; + getPageMode() { + return this.messageHandler.sendWithPromise("GetPageMode", null); + }
-var _util = __w_pdfjs_require__(1); + getViewerPreferences() { + return this.messageHandler.sendWithPromise("GetViewerPreferences", null); + }
-class BaseCanvasFactory { - constructor() { - if (this.constructor === BaseCanvasFactory) { - (0, _util.unreachable)("Cannot initialize BaseCanvasFactory."); - } + getOpenAction() { + return this.messageHandler.sendWithPromise("GetOpenAction", null); }
- create(width, height) { - if (width <= 0 || height <= 0) { - throw new Error("Invalid canvas size"); - } + getAttachments() { + return this.messageHandler.sendWithPromise("GetAttachments", null); + }
- const canvas = this._createCanvas(width, height); + getJavaScript() { + return this.messageHandler.sendWithPromise("GetJavaScript", null); + }
- return { - canvas, - context: canvas.getContext("2d") - }; + getDocJSActions() { + return this.messageHandler.sendWithPromise("GetDocJSActions", null); }
- reset(canvasAndContext, width, height) { - if (!canvasAndContext.canvas) { - throw new Error("Canvas is not specified"); - } + getPageJSActions(pageIndex) { + return this.messageHandler.sendWithPromise("GetPageJSActions", { + pageIndex + }); + }
- if (width <= 0 || height <= 0) { - throw new Error("Invalid canvas size"); - } + getStructTree(pageIndex) { + return this.messageHandler.sendWithPromise("GetStructTree", { + pageIndex + }); + }
- canvasAndContext.canvas.width = width; - canvasAndContext.canvas.height = height; + getOutline() { + return this.messageHandler.sendWithPromise("GetOutline", null); }
- destroy(canvasAndContext) { - if (!canvasAndContext.canvas) { - throw new Error("Canvas is not specified"); - } + getOptionalContentConfig() { + return this.messageHandler.sendWithPromise("GetOptionalContentConfig", null).then(results => { + return new _optional_content_config.OptionalContentConfig(results); + }); + }
- canvasAndContext.canvas.width = 0; - canvasAndContext.canvas.height = 0; - canvasAndContext.canvas = null; - canvasAndContext.context = null; + getPermissions() { + return this.messageHandler.sendWithPromise("GetPermissions", null); }
- _createCanvas(width, height) { - (0, _util.unreachable)("Abstract method `_createCanvas` called."); + getMetadata() { + return this.#metadataPromise ||= this.messageHandler.sendWithPromise("GetMetadata", null).then(results => { + return { + info: results[0], + metadata: results[1] ? new _metadata.Metadata(results[1]) : null, + contentDispositionFilename: this._fullReader?.filename ?? null, + contentLength: this._fullReader?.contentLength ?? null + }; + }); }
-} + getMarkInfo() { + return this.messageHandler.sendWithPromise("GetMarkInfo", null); + }
-exports.BaseCanvasFactory = BaseCanvasFactory; + async startCleanup(keepLoadedFonts = false) { + await this.messageHandler.sendWithPromise("Cleanup", null);
-class BaseCMapReaderFactory { - constructor({ - baseUrl = null, - isCompressed = false - }) { - if (this.constructor === BaseCMapReaderFactory) { - (0, _util.unreachable)("Cannot initialize BaseCMapReaderFactory."); + if (this.destroyed) { + return; }
- this.baseUrl = baseUrl; - this.isCompressed = isCompressed; - } + for (const page of this.#pageCache.values()) { + const cleanupSuccessful = page.cleanup();
- async fetch({ - name - }) { - if (!this.baseUrl) { - throw new Error('The CMap "baseUrl" parameter must be specified, ensure that ' + 'the "cMapUrl" and "cMapPacked" API parameters are provided.'); + if (!cleanupSuccessful) { + throw new Error(`startCleanup: Page ${page.pageNumber} is currently rendering.`); + } }
- if (!name) { - throw new Error("CMap name must be specified."); + this.commonObjs.clear(); + + if (!keepLoadedFonts) { + this.fontLoader.clear(); }
- const url = this.baseUrl + name + (this.isCompressed ? ".bcmap" : ""); - const compressionType = this.isCompressed ? _util.CMapCompressionType.BINARY : _util.CMapCompressionType.NONE; - return this._fetchData(url, compressionType).catch(reason => { - throw new Error(`Unable to load ${this.isCompressed ? "binary " : ""}CMap at: ${url}`); - }); + this.#metadataPromise = null; + this._getFieldObjectsPromise = null; + this._hasJSActionsPromise = null; }
- _fetchData(url, compressionType) { - (0, _util.unreachable)("Abstract method `_fetchData` called."); + get loadingParams() { + const params = this._params; + return (0, _util.shadow)(this, "loadingParams", { + disableAutoFetch: params.disableAutoFetch, + enableXfa: params.enableXfa + }); }
}
-exports.BaseCMapReaderFactory = BaseCMapReaderFactory; +class PDFObjects { + #objs = Object.create(null);
-class BaseStandardFontDataFactory { - constructor({ - baseUrl = null - }) { - if (this.constructor === BaseStandardFontDataFactory) { - (0, _util.unreachable)("Cannot initialize BaseStandardFontDataFactory."); + #ensureObj(objId) { + const obj = this.#objs[objId]; + + if (obj) { + return obj; }
- this.baseUrl = baseUrl; + return this.#objs[objId] = { + capability: (0, _util.createPromiseCapability)(), + data: null + }; }
- async fetch({ - filename - }) { - if (!this.baseUrl) { - throw new Error('The standard font "baseUrl" parameter must be specified, ensure that ' + 'the "standardFontDataUrl" API parameter is provided.'); + get(objId, callback = null) { + if (callback) { + const obj = this.#ensureObj(objId); + obj.capability.promise.then(() => callback(obj.data)); + return null; }
- if (!filename) { - throw new Error("Font filename must be specified."); + const obj = this.#objs[objId]; + + if (!obj?.capability.settled) { + throw new Error(`Requesting object that isn't resolved yet ${objId}.`); }
- const url = `${this.baseUrl}${filename}`; - return this._fetchData(url).catch(reason => { - throw new Error(`Unable to load font data at: ${url}`); - }); + return obj.data; }
- _fetchData(url) { - (0, _util.unreachable)("Abstract method `_fetchData` called."); + has(objId) { + const obj = this.#objs[objId]; + return obj?.capability.settled || false; }
-} - -exports.BaseStandardFontDataFactory = BaseStandardFontDataFactory; - -class BaseSVGFactory { - constructor() { - if (this.constructor === BaseSVGFactory) { - (0, _util.unreachable)("Cannot initialize BaseSVGFactory."); - } + resolve(objId, data = null) { + const obj = this.#ensureObj(objId); + obj.data = data; + obj.capability.resolve(); }
- create(width, height) { - if (width <= 0 || height <= 0) { - throw new Error("Invalid SVG dimensions"); - } + clear() { + this.#objs = Object.create(null); + }
- const svg = this._createSVG("svg:svg"); +}
- svg.setAttribute("version", "1.1"); - svg.setAttribute("width", `${width}px`); - svg.setAttribute("height", `${height}px`); - svg.setAttribute("preserveAspectRatio", "none"); - svg.setAttribute("viewBox", `0 0 ${width} ${height}`); - return svg; +class RenderTask { + constructor(internalRenderTask) { + this._internalRenderTask = internalRenderTask; + this.onContinue = null; }
- createElement(type) { - if (typeof type !== "string") { - throw new Error("Invalid SVG element type"); - } - - return this._createSVG(type); + get promise() { + return this._internalRenderTask.capability.promise; }
- _createSVG(type) { - (0, _util.unreachable)("Abstract method `_createSVG` called."); + cancel() { + this._internalRenderTask.cancel(); }
}
-exports.BaseSVGFactory = BaseSVGFactory; - -/***/ }), -/* 7 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.FontLoader = exports.FontFaceObject = void 0; +exports.RenderTask = RenderTask;
-var _util = __w_pdfjs_require__(1); +class InternalRenderTask { + static #canvasInUse = new WeakSet();
-class BaseFontLoader { constructor({ - docId, - onUnsupportedFeature, - ownerDocument = globalThis.document, - styleElement = null + callback, + params, + objs, + commonObjs, + annotationCanvasMap, + operatorList, + pageIndex, + canvasFactory, + useRequestAnimationFrame = false, + pdfBug = false, + pageColors = null }) { - if (this.constructor === BaseFontLoader) { - (0, _util.unreachable)("Cannot initialize BaseFontLoader."); - } - - this.docId = docId; - this._onUnsupportedFeature = onUnsupportedFeature; - this._document = ownerDocument; - this.nativeFontFaces = []; - this.styleElement = null; + this.callback = callback; + this.params = params; + this.objs = objs; + this.commonObjs = commonObjs; + this.annotationCanvasMap = annotationCanvasMap; + this.operatorListIdx = null; + this.operatorList = operatorList; + this._pageIndex = pageIndex; + this.canvasFactory = canvasFactory; + this._pdfBug = pdfBug; + this.pageColors = pageColors; + this.running = false; + this.graphicsReadyCallback = null; + this.graphicsReady = false; + this._useRequestAnimationFrame = useRequestAnimationFrame === true && typeof window !== "undefined"; + this.cancelled = false; + this.capability = (0, _util.createPromiseCapability)(); + this.task = new RenderTask(this); + this._cancelBound = this.cancel.bind(this); + this._continueBound = this._continue.bind(this); + this._scheduleNextBound = this._scheduleNext.bind(this); + this._nextBound = this._next.bind(this); + this._canvas = params.canvasContext.canvas; }
- addNativeFontFace(nativeFontFace) { - this.nativeFontFaces.push(nativeFontFace); - - this._document.fonts.add(nativeFontFace); + get completed() { + return this.capability.promise.catch(function () {}); }
- insertRule(rule) { - let styleElement = this.styleElement; + initializeGraphics({ + transparency = false, + optionalContentConfig + }) { + if (this.cancelled) { + return; + }
- if (!styleElement) { - styleElement = this.styleElement = this._document.createElement("style"); - styleElement.id = `PDFJS_FONT_STYLE_TAG_${this.docId}`; + if (this._canvas) { + if (InternalRenderTask.#canvasInUse.has(this._canvas)) { + throw new Error("Cannot use the same canvas during multiple render() operations. " + "Use different canvas or ensure previous operations were " + "cancelled or completed."); + }
- this._document.documentElement.getElementsByTagName("head")[0].appendChild(styleElement); + InternalRenderTask.#canvasInUse.add(this._canvas); }
- const styleSheet = styleElement.sheet; - styleSheet.insertRule(rule, styleSheet.cssRules.length); - } - - clear() { - for (const nativeFontFace of this.nativeFontFaces) { - this._document.fonts.delete(nativeFontFace); + if (this._pdfBug && globalThis.StepperManager?.enabled) { + this.stepper = globalThis.StepperManager.create(this._pageIndex); + this.stepper.init(this.operatorList); + this.stepper.nextBreakPoint = this.stepper.getNextBreakPoint(); }
- this.nativeFontFaces.length = 0; + const { + canvasContext, + viewport, + transform, + imageLayer, + background + } = this.params; + this.gfx = new _canvas.CanvasGraphics(canvasContext, this.commonObjs, this.objs, this.canvasFactory, imageLayer, optionalContentConfig, this.annotationCanvasMap, this.pageColors); + this.gfx.beginDrawing({ + transform, + viewport, + transparency, + background + }); + this.operatorListIdx = 0; + this.graphicsReady = true;
- if (this.styleElement) { - this.styleElement.remove(); - this.styleElement = null; + if (this.graphicsReadyCallback) { + this.graphicsReadyCallback(); } }
- async bind(font) { - if (font.attached || font.missingFile) { - return; - } - - font.attached = true; + cancel(error = null) { + this.running = false; + this.cancelled = true;
- if (this.isFontLoadingAPISupported) { - const nativeFontFace = font.createNativeFontFace(); + if (this.gfx) { + this.gfx.endDrawing(); + }
- if (nativeFontFace) { - this.addNativeFontFace(nativeFontFace); + if (this._canvas) { + InternalRenderTask.#canvasInUse.delete(this._canvas); + }
- try { - await nativeFontFace.loaded; - } catch (ex) { - this._onUnsupportedFeature({ - featureId: _util.UNSUPPORTED_FEATURES.errorFontLoadNative - }); + this.callback(error || new _display_utils.RenderingCancelledException(`Rendering cancelled, page ${this._pageIndex + 1}`, "canvas")); + }
- (0, _util.warn)(`Failed to load font '${nativeFontFace.family}': '${ex}'.`); - font.disableFontFace = true; - throw ex; - } + operatorListChanged() { + if (!this.graphicsReady) { + if (!this.graphicsReadyCallback) { + this.graphicsReadyCallback = this._continueBound; }
return; }
- const rule = font.createFontFaceRule(); + if (this.stepper) { + this.stepper.updateOperatorList(this.operatorList); + }
- if (rule) { - this.insertRule(rule); + if (this.running) { + return; + }
- if (this.isSyncFontLoadingSupported) { - return; - } + this._continue(); + }
- await new Promise(resolve => { - const request = this._queueLoadingCallback(resolve); + _continue() { + this.running = true;
- this._prepareFontLoadEvent([rule], [font], request); - }); + if (this.cancelled) { + return; + } + + if (this.task.onContinue) { + this.task.onContinue(this._scheduleNextBound); + } else { + this._scheduleNext(); } }
- _queueLoadingCallback(callback) { - (0, _util.unreachable)("Abstract method `_queueLoadingCallback`."); - } - - get isFontLoadingAPISupported() { - const hasFonts = !!this._document?.fonts; - return (0, _util.shadow)(this, "isFontLoadingAPISupported", hasFonts); - } - - get isSyncFontLoadingSupported() { - (0, _util.unreachable)("Abstract method `isSyncFontLoadingSupported`."); - } - - get _loadTestFont() { - (0, _util.unreachable)("Abstract method `_loadTestFont`."); - } - - _prepareFontLoadEvent(rules, fontsToLoad, request) { - (0, _util.unreachable)("Abstract method `_prepareFontLoadEvent`."); - } - -} - -let FontLoader; -exports.FontLoader = FontLoader; -{ - exports.FontLoader = FontLoader = class MozcentralFontLoader extends BaseFontLoader { - get isSyncFontLoadingSupported() { - return (0, _util.shadow)(this, "isSyncFontLoadingSupported", true); - } - - }; -} - -class FontFaceObject { - constructor(translatedData, { - isEvalSupported = true, - disableFontFace = false, - ignoreErrors = false, - onUnsupportedFeature, - fontRegistry = null - }) { - this.compiledGlyphs = Object.create(null); - - for (const i in translatedData) { - this[i] = translatedData[i]; - } - - this.isEvalSupported = isEvalSupported !== false; - this.disableFontFace = disableFontFace === true; - this.ignoreErrors = ignoreErrors === true; - this._onUnsupportedFeature = onUnsupportedFeature; - this.fontRegistry = fontRegistry; - } - - createNativeFontFace() { - if (!this.data || this.disableFontFace) { - return null; - } - - let nativeFontFace; - - if (!this.cssFontInfo) { - nativeFontFace = new FontFace(this.loadedName, this.data, {}); - } else { - const css = { - weight: this.cssFontInfo.fontWeight - }; - - if (this.cssFontInfo.italicAngle) { - css.style = `oblique ${this.cssFontInfo.italicAngle}deg`; - } - - nativeFontFace = new FontFace(this.cssFontInfo.fontFamily, this.data, css); - } - - if (this.fontRegistry) { - this.fontRegistry.registerFont(this); - } - - return nativeFontFace; - } - - createFontFaceRule() { - if (!this.data || this.disableFontFace) { - return null; - } - - const data = (0, _util.bytesToString)(this.data); - const url = `url(data:${this.mimetype};base64,${btoa(data)});`; - let rule; - - if (!this.cssFontInfo) { - rule = `@font-face {font-family:"${this.loadedName}";src:${url}}`; + _scheduleNext() { + if (this._useRequestAnimationFrame) { + window.requestAnimationFrame(() => { + this._nextBound().catch(this._cancelBound); + }); } else { - let css = `font-weight: ${this.cssFontInfo.fontWeight};`; - - if (this.cssFontInfo.italicAngle) { - css += `font-style: oblique ${this.cssFontInfo.italicAngle}deg;`; - } - - rule = `@font-face {font-family:"${this.cssFontInfo.fontFamily}";${css}src:${url}}`; - } - - if (this.fontRegistry) { - this.fontRegistry.registerFont(this, url); + Promise.resolve().then(this._nextBound).catch(this._cancelBound); } - - return rule; }
- getPathGenerator(objs, character) { - if (this.compiledGlyphs[character] !== undefined) { - return this.compiledGlyphs[character]; - } - - let cmds; - - try { - cmds = objs.get(this.loadedName + "_path_" + character); - } catch (ex) { - if (!this.ignoreErrors) { - throw ex; - } - - this._onUnsupportedFeature({ - featureId: _util.UNSUPPORTED_FEATURES.errorFontGetPath - }); - - (0, _util.warn)(`getPathGenerator - ignoring character: "${ex}".`); - return this.compiledGlyphs[character] = function (c, size) {}; + async _next() { + if (this.cancelled) { + return; }
- if (this.isEvalSupported && _util.FeatureTest.isEvalSupported) { - const jsBuf = []; + this.operatorListIdx = this.gfx.executeOperatorList(this.operatorList, this.operatorListIdx, this._continueBound, this.stepper);
- for (const current of cmds) { - const args = current.args !== undefined ? current.args.join(",") : ""; - jsBuf.push("c.", current.cmd, "(", args, ");\n"); - } + if (this.operatorListIdx === this.operatorList.argsArray.length) { + this.running = false;
- return this.compiledGlyphs[character] = new Function("c", "size", jsBuf.join("")); - } + if (this.operatorList.lastChunk) { + this.gfx.endDrawing();
- return this.compiledGlyphs[character] = function (c, size) { - for (const current of cmds) { - if (current.cmd === "scale") { - current.args = [size, -size]; + if (this._canvas) { + InternalRenderTask.#canvasInUse.delete(this._canvas); }
- c[current.cmd].apply(c, current.args); + this.callback(); } - }; + } }
}
-exports.FontFaceObject = FontFaceObject; +const version = '2.15.305'; +exports.version = version; +const build = '2a386eff9'; +exports.build = build;
/***/ }), -/* 8 */ +/* 7 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
@@ -4252,12 +4073,14 @@ exports.FontFaceObject = FontFaceObject; Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.AnnotationStorage = void 0; - -var _murmurhash = __w_pdfjs_require__(9); +exports.PrintAnnotationStorage = exports.AnnotationStorage = void 0;
var _util = __w_pdfjs_require__(1);
+var _editor = __w_pdfjs_require__(8); + +var _murmurhash = __w_pdfjs_require__(10); + class AnnotationStorage { constructor() { this._storage = new Map(); @@ -4280,6 +4103,14 @@ class AnnotationStorage { return this._storage.get(key); }
+ removeKey(key) { + this._storage.delete(key); + + if (this._storage.size === 0) { + this.resetModified(); + } + } + setValue(key, value) { const obj = this._storage.get(key);
@@ -4299,7 +4130,7 @@ class AnnotationStorage { }
if (modified) { - this._setModified(); + this.#setModified(); } }
@@ -4311,7 +4142,7 @@ class AnnotationStorage { return this._storage.size; }
- _setModified() { + #setModified() { if (!this._modified) { this._modified = true;
@@ -4331,15 +4162,37 @@ class AnnotationStorage { } }
+ get print() { + return new PrintAnnotationStorage(this); + } + get serializable() { - return this._storage.size > 0 ? this._storage : null; + if (this._storage.size === 0) { + return null; + } + + const clone = new Map(); + + for (const [key, val] of this._storage) { + const serialized = val instanceof _editor.AnnotationEditor ? val.serialize() : val; + + if (serialized) { + clone.set(key, serialized); + } + } + + return clone; }
- get hash() { + static getHash(map) { + if (!map) { + return ""; + } + const hash = new _murmurhash.MurmurHash3_64();
- for (const [key, value] of this._storage) { - hash.update(`${key}:${JSON.stringify(value)}`); + for (const [key, val] of map) { + hash.update(`${key}:${JSON.stringify(val)}`); }
return hash.hexdigest(); @@ -4349,8 +4202,28 @@ class AnnotationStorage {
exports.AnnotationStorage = AnnotationStorage;
+class PrintAnnotationStorage extends AnnotationStorage { + #serializable = null; + + constructor(parent) { + super(); + this.#serializable = structuredClone(parent.serializable); + } + + get print() { + (0, _util.unreachable)("Should not call PrintAnnotationStorage.print"); + } + + get serializable() { + return this.#serializable; + } + +} + +exports.PrintAnnotationStorage = PrintAnnotationStorage; + /***/ }), -/* 9 */ +/* 8 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
@@ -4358,4213 +4231,7193 @@ exports.AnnotationStorage = AnnotationStorage; Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.MurmurHash3_64 = void 0; +exports.AnnotationEditor = void 0; + +var _tools = __w_pdfjs_require__(9);
var _util = __w_pdfjs_require__(1);
-const SEED = 0xc3d2e1f0; -const MASK_HIGH = 0xffff0000; -const MASK_LOW = 0xffff; +class AnnotationEditor { + #boundFocusin = this.focusin.bind(this); + #boundFocusout = this.focusout.bind(this); + #hasBeenSelected = false; + #isEditing = false; + #isInEditMode = false; + #zIndex = AnnotationEditor._zIndex++; + static _colorManager = new _tools.ColorManager(); + static _zIndex = 1;
-class MurmurHash3_64 { - constructor(seed) { - this.h1 = seed ? seed & 0xffffffff : SEED; - this.h2 = seed ? seed & 0xffffffff : SEED; + constructor(parameters) { + if (this.constructor === AnnotationEditor) { + (0, _util.unreachable)("Cannot initialize AnnotationEditor."); + } + + this.parent = parameters.parent; + this.id = parameters.id; + this.width = this.height = null; + this.pageIndex = parameters.parent.pageIndex; + this.name = parameters.name; + this.div = null; + const [width, height] = this.parent.viewportBaseDimensions; + this.x = parameters.x / width; + this.y = parameters.y / height; + this.rotation = this.parent.viewport.rotation; + this.isAttachedToDOM = false; }
- update(input) { - let data, length; + static get _defaultLineColor() { + return (0, _util.shadow)(this, "_defaultLineColor", this._colorManager.getHexCode("CanvasText")); + }
- if (typeof input === "string") { - data = new Uint8Array(input.length * 2); - length = 0; + setInBackground() { + this.div.style.zIndex = 0; + }
- for (let i = 0, ii = input.length; i < ii; i++) { - const code = input.charCodeAt(i); + setInForeground() { + this.div.style.zIndex = this.#zIndex; + }
- if (code <= 0xff) { - data[length++] = code; - } else { - data[length++] = code >>> 8; - data[length++] = code & 0xff; - } - } - } else if ((0, _util.isArrayBuffer)(input)) { - data = input.slice(); - length = data.byteLength; + focusin(event) { + if (!this.#hasBeenSelected) { + this.parent.setSelected(this); } else { - throw new Error("Wrong data format in MurmurHash3_64_update. " + "Input must be a string or array."); + this.#hasBeenSelected = false; } + }
- const blockCounts = length >> 2; - const tailLength = length - blockCounts * 4; - const dataUint32 = new Uint32Array(data.buffer, 0, blockCounts); - let k1 = 0, - k2 = 0; - let h1 = this.h1, - h2 = this.h2; - const C1 = 0xcc9e2d51, - C2 = 0x1b873593; - const C1_LOW = C1 & MASK_LOW, - C2_LOW = C2 & MASK_LOW; + focusout(event) { + if (!this.isAttachedToDOM) { + return; + }
- for (let i = 0; i < blockCounts; i++) { - if (i & 1) { - k1 = dataUint32[i]; - k1 = k1 * C1 & MASK_HIGH | k1 * C1_LOW & MASK_LOW; - k1 = k1 << 15 | k1 >>> 17; - k1 = k1 * C2 & MASK_HIGH | k1 * C2_LOW & MASK_LOW; - h1 ^= k1; - h1 = h1 << 13 | h1 >>> 19; - h1 = h1 * 5 + 0xe6546b64; - } else { - k2 = dataUint32[i]; - k2 = k2 * C1 & MASK_HIGH | k2 * C1_LOW & MASK_LOW; - k2 = k2 << 15 | k2 >>> 17; - k2 = k2 * C2 & MASK_HIGH | k2 * C2_LOW & MASK_LOW; - h2 ^= k2; - h2 = h2 << 13 | h2 >>> 19; - h2 = h2 * 5 + 0xe6546b64; - } + const target = event.relatedTarget; + + if (target?.closest(`#${this.id}`)) { + return; }
- k1 = 0; + event.preventDefault();
- switch (tailLength) { - case 3: - k1 ^= data[blockCounts * 4 + 2] << 16; + if (!this.parent.isMultipleSelection) { + this.commitOrRemove(); + } + }
- case 2: - k1 ^= data[blockCounts * 4 + 1] << 8; + commitOrRemove() { + if (this.isEmpty()) { + this.remove(); + } else { + this.commit(); + } + }
- case 1: - k1 ^= data[blockCounts * 4]; - k1 = k1 * C1 & MASK_HIGH | k1 * C1_LOW & MASK_LOW; - k1 = k1 << 15 | k1 >>> 17; - k1 = k1 * C2 & MASK_HIGH | k1 * C2_LOW & MASK_LOW; + dragstart(event) { + const rect = this.parent.div.getBoundingClientRect(); + this.startX = event.clientX - rect.x; + this.startY = event.clientY - rect.y; + event.dataTransfer.setData("text/plain", this.id); + event.dataTransfer.effectAllowed = "move"; + }
- if (blockCounts & 1) { - h1 ^= k1; - } else { - h2 ^= k1; - } + setAt(x, y, tx, ty) { + const [width, height] = this.parent.viewportBaseDimensions; + [tx, ty] = this.screenToPageTranslation(tx, ty); + this.x = (x + tx) / width; + this.y = (y + ty) / height; + this.div.style.left = `${100 * this.x}%`; + this.div.style.top = `${100 * this.y}%`; + } + + translate(x, y) { + const [width, height] = this.parent.viewportBaseDimensions; + [x, y] = this.screenToPageTranslation(x, y); + this.x += x / width; + this.y += y / height; + this.div.style.left = `${100 * this.x}%`; + this.div.style.top = `${100 * this.y}%`; + } + + screenToPageTranslation(x, y) { + const { + rotation + } = this.parent.viewport; + + switch (rotation) { + case 90: + return [y, -x]; + + case 180: + return [-x, -y];
+ case 270: + return [-y, x]; + + default: + return [x, y]; } + }
- this.h1 = h1; - this.h2 = h2; + setDims(width, height) { + const [parentWidth, parentHeight] = this.parent.viewportBaseDimensions; + this.div.style.width = `${100 * width / parentWidth}%`; + this.div.style.height = `${100 * height / parentHeight}%`; }
- hexdigest() { - let h1 = this.h1, - h2 = this.h2; - h1 ^= h2 >>> 1; - h1 = h1 * 0xed558ccd & MASK_HIGH | h1 * 0x8ccd & MASK_LOW; - h2 = h2 * 0xff51afd7 & MASK_HIGH | ((h2 << 16 | h1 >>> 16) * 0xafd7ed55 & MASK_HIGH) >>> 16; - h1 ^= h2 >>> 1; - h1 = h1 * 0x1a85ec53 & MASK_HIGH | h1 * 0xec53 & MASK_LOW; - h2 = h2 * 0xc4ceb9fe & MASK_HIGH | ((h2 << 16 | h1 >>> 16) * 0xb9fe1a85 & MASK_HIGH) >>> 16; - h1 ^= h2 >>> 1; - const hex1 = (h1 >>> 0).toString(16), - hex2 = (h2 >>> 0).toString(16); - return hex1.padStart(8, "0") + hex2.padStart(8, "0"); + getInitialTranslation() { + return [0, 0]; }
-} + render() { + this.div = document.createElement("div"); + this.div.setAttribute("data-editor-rotation", (360 - this.rotation) % 360); + this.div.className = this.name; + this.div.setAttribute("id", this.id); + this.div.setAttribute("tabIndex", 0); + this.setInForeground(); + this.div.addEventListener("focusin", this.#boundFocusin); + this.div.addEventListener("focusout", this.#boundFocusout); + const [tx, ty] = this.getInitialTranslation(); + this.translate(tx, ty); + (0, _tools.bindEvents)(this, this.div, ["dragstart", "pointerdown"]); + return this.div; + } + + pointerdown(event) { + if (event.button !== 0) { + event.preventDefault(); + } + + if (event.ctrlKey || event.shiftKey) { + this.parent.toggleSelected(this); + } else { + this.parent.setSelected(this); + }
-exports.MurmurHash3_64 = MurmurHash3_64; + this.#hasBeenSelected = true; + }
-/***/ }), -/* 10 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + getRect(tx, ty) { + const [parentWidth, parentHeight] = this.parent.viewportBaseDimensions; + const [pageWidth, pageHeight] = this.parent.pageDimensions; + const shiftX = pageWidth * tx / parentWidth; + const shiftY = pageHeight * ty / parentHeight; + const x = this.x * pageWidth; + const y = this.y * pageHeight; + const width = this.width * pageWidth; + const height = this.height * pageHeight;
+ switch (this.rotation) { + case 0: + return [x + shiftX, pageHeight - y - shiftY - height, x + shiftX + width, pageHeight - y - shiftY];
+ case 90: + return [x + shiftY, pageHeight - y + shiftX, x + shiftY + height, pageHeight - y + shiftX + width];
-Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.CanvasGraphics = void 0; + case 180: + return [x - shiftX - width, pageHeight - y + shiftY, x - shiftX, pageHeight - y + shiftY + height];
-var _util = __w_pdfjs_require__(1); + case 270: + return [x - shiftY - height, pageHeight - y - shiftX - width, x - shiftY, pageHeight - y - shiftX];
-var _pattern_helper = __w_pdfjs_require__(11); + default: + throw new Error("Invalid rotation"); + } + }
-var _image_utils = __w_pdfjs_require__(12); + getRectInCurrentCoords(rect, pageHeight) { + const [x1, y1, x2, y2] = rect; + const width = x2 - x1; + const height = y2 - y1;
-var _is_node = __w_pdfjs_require__(3); + switch (this.rotation) { + case 0: + return [x1, pageHeight - y2, width, height];
-var _display_utils = __w_pdfjs_require__(5); + case 90: + return [x1, pageHeight - y1, height, width];
-const MIN_FONT_SIZE = 16; -const MAX_FONT_SIZE = 100; -const MAX_GROUP_SIZE = 4096; -const EXECUTION_TIME = 15; -const EXECUTION_STEPS = 10; -const COMPILE_TYPE3_GLYPHS = true; -const MAX_SIZE_TO_COMPILE = 1000; -const FULL_CHUNK_HEIGHT = 16; -const LINEWIDTH_SCALE_FACTOR = 1.000001; + case 180: + return [x2, pageHeight - y1, width, height];
-function mirrorContextOperations(ctx, destCtx) { - if (ctx._removeMirroring) { - throw new Error("Context is already forwarding operations."); + case 270: + return [x2, pageHeight - y2, height, width]; + + default: + throw new Error("Invalid rotation"); + } }
- ctx.__originalSave = ctx.save; - ctx.__originalRestore = ctx.restore; - ctx.__originalRotate = ctx.rotate; - ctx.__originalScale = ctx.scale; - ctx.__originalTranslate = ctx.translate; - ctx.__originalTransform = ctx.transform; - ctx.__originalSetTransform = ctx.setTransform; - ctx.__originalResetTransform = ctx.resetTransform; - ctx.__originalClip = ctx.clip; - ctx.__originalMoveTo = ctx.moveTo; - ctx.__originalLineTo = ctx.lineTo; - ctx.__originalBezierCurveTo = ctx.bezierCurveTo; - ctx.__originalRect = ctx.rect; - ctx.__originalClosePath = ctx.closePath; - ctx.__originalBeginPath = ctx.beginPath; + onceAdded() {}
- ctx._removeMirroring = () => { - ctx.save = ctx.__originalSave; - ctx.restore = ctx.__originalRestore; - ctx.rotate = ctx.__originalRotate; - ctx.scale = ctx.__originalScale; - ctx.translate = ctx.__originalTranslate; - ctx.transform = ctx.__originalTransform; - ctx.setTransform = ctx.__originalSetTransform; - ctx.resetTransform = ctx.__originalResetTransform; - ctx.clip = ctx.__originalClip; - ctx.moveTo = ctx.__originalMoveTo; - ctx.lineTo = ctx.__originalLineTo; - ctx.bezierCurveTo = ctx.__originalBezierCurveTo; - ctx.rect = ctx.__originalRect; - ctx.closePath = ctx.__originalClosePath; - ctx.beginPath = ctx.__originalBeginPath; - delete ctx._removeMirroring; - }; + isEmpty() { + return false; + }
- ctx.save = function ctxSave() { - destCtx.save(); + enableEditMode() { + this.#isInEditMode = true; + }
- this.__originalSave(); - }; + disableEditMode() { + this.#isInEditMode = false; + }
- ctx.restore = function ctxRestore() { - destCtx.restore(); + isInEditMode() { + return this.#isInEditMode; + }
- this.__originalRestore(); - }; + shouldGetKeyboardEvents() { + return false; + }
- ctx.translate = function ctxTranslate(x, y) { - destCtx.translate(x, y); + needsToBeRebuilt() { + return this.div && !this.isAttachedToDOM; + }
- this.__originalTranslate(x, y); - }; + rebuild() { + this.div?.addEventListener("focusin", this.#boundFocusin); + }
- ctx.scale = function ctxScale(x, y) { - destCtx.scale(x, y); + serialize() { + (0, _util.unreachable)("An editor must be serializable"); + }
- this.__originalScale(x, y); - }; + static deserialize(data, parent) { + const editor = new this.prototype.constructor({ + parent, + id: parent.getNextId() + }); + editor.rotation = data.rotation; + const [pageWidth, pageHeight] = parent.pageDimensions; + const [x, y, width, height] = editor.getRectInCurrentCoords(data.rect, pageHeight); + editor.x = x / pageWidth; + editor.y = y / pageHeight; + editor.width = width / pageWidth; + editor.height = height / pageHeight; + return editor; + }
- ctx.transform = function ctxTransform(a, b, c, d, e, f) { - destCtx.transform(a, b, c, d, e, f); + remove() { + this.div.removeEventListener("focusin", this.#boundFocusin); + this.div.removeEventListener("focusout", this.#boundFocusout);
- this.__originalTransform(a, b, c, d, e, f); - }; + if (!this.isEmpty()) { + this.commit(); + }
- ctx.setTransform = function ctxSetTransform(a, b, c, d, e, f) { - destCtx.setTransform(a, b, c, d, e, f); + this.parent.remove(this); + }
- this.__originalSetTransform(a, b, c, d, e, f); - }; + select() { + this.div?.classList.add("selectedEditor"); + }
- ctx.resetTransform = function ctxResetTransform() { - destCtx.resetTransform(); + unselect() { + this.div?.classList.remove("selectedEditor"); + }
- this.__originalResetTransform(); - }; + updateParams(type, value) {}
- ctx.rotate = function ctxRotate(angle) { - destCtx.rotate(angle); + disableEditing() {}
- this.__originalRotate(angle); - }; + enableEditing() {}
- ctx.clip = function ctxRotate(rule) { - destCtx.clip(rule); + getIdForTextLayer() { + return this.id; + }
- this.__originalClip(rule); - }; + get propertiesToUpdate() { + return {}; + }
- ctx.moveTo = function (x, y) { - destCtx.moveTo(x, y); + get contentDiv() { + return this.div; + }
- this.__originalMoveTo(x, y); - }; + get isEditing() { + return this.#isEditing; + }
- ctx.lineTo = function (x, y) { - destCtx.lineTo(x, y); + set isEditing(value) { + this.#isEditing = value;
- this.__originalLineTo(x, y); - }; + if (value) { + this.parent.setSelected(this); + this.parent.setActiveEditor(this); + } else { + this.parent.setActiveEditor(null); + } + }
- ctx.bezierCurveTo = function (cp1x, cp1y, cp2x, cp2y, x, y) { - destCtx.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y); +}
- this.__originalBezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y); - }; +exports.AnnotationEditor = AnnotationEditor;
- ctx.rect = function (x, y, width, height) { - destCtx.rect(x, y, width, height); +/***/ }), +/* 9 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
- this.__originalRect(x, y, width, height); - };
- ctx.closePath = function () { - destCtx.closePath();
- this.__originalClosePath(); - }; +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.KeyboardManager = exports.CommandManager = exports.ColorManager = exports.AnnotationEditorUIManager = void 0; +exports.bindEvents = bindEvents;
- ctx.beginPath = function () { - destCtx.beginPath(); +var _util = __w_pdfjs_require__(1);
- this.__originalBeginPath(); - }; +var _display_utils = __w_pdfjs_require__(4); + +function bindEvents(obj, element, names) { + for (const name of names) { + element.addEventListener(name, obj[name].bind(obj)); + } }
-function addContextCurrentTransform(ctx) { - if (ctx._transformStack) { - ctx._transformStack = []; +class IdManager { + #id = 0; + + getId() { + return `${_util.AnnotationEditorPrefix}${this.#id++}`; }
- if (ctx.mozCurrentTransform) { - return; +} + +class CommandManager { + #commands = []; + #maxSize; + #position = -1; + + constructor(maxSize = 128) { + this.#maxSize = maxSize; }
- ctx._originalSave = ctx.save; - ctx._originalRestore = ctx.restore; - ctx._originalRotate = ctx.rotate; - ctx._originalScale = ctx.scale; - ctx._originalTranslate = ctx.translate; - ctx._originalTransform = ctx.transform; - ctx._originalSetTransform = ctx.setTransform; - ctx._originalResetTransform = ctx.resetTransform; - ctx._transformMatrix = ctx._transformMatrix || [1, 0, 0, 1, 0, 0]; - ctx._transformStack = []; + add({ + cmd, + undo, + mustExec, + type = NaN, + overwriteIfSameType = false, + keepUndo = false + }) { + if (mustExec) { + cmd(); + }
- try { - const desc = Object.getOwnPropertyDescriptor(Object.getPrototypeOf(ctx), "lineWidth"); - ctx._setLineWidth = desc.set; - ctx._getLineWidth = desc.get; - Object.defineProperty(ctx, "lineWidth", { - set: function setLineWidth(width) { - this._setLineWidth(width * LINEWIDTH_SCALE_FACTOR); - }, - get: function getLineWidth() { - return this._getLineWidth(); - } - }); - } catch (_) {} + const save = { + cmd, + undo, + type + };
- Object.defineProperty(ctx, "mozCurrentTransform", { - get: function getCurrentTransform() { - return this._transformMatrix; - } - }); - Object.defineProperty(ctx, "mozCurrentTransformInverse", { - get: function getCurrentTransformInverse() { - const [a, b, c, d, e, f] = this._transformMatrix; - const ad_bc = a * d - b * c; - const bc_ad = b * c - a * d; - return [d / ad_bc, b / bc_ad, c / bc_ad, a / ad_bc, (d * e - c * f) / bc_ad, (b * e - a * f) / ad_bc]; + if (this.#position === -1) { + this.#position = 0; + this.#commands.push(save); + return; } - }); - - ctx.save = function ctxSave() { - const old = this._transformMatrix; - - this._transformStack.push(old);
- this._transformMatrix = old.slice(0, 6); - - this._originalSave(); - }; + if (overwriteIfSameType && this.#commands[this.#position].type === type) { + if (keepUndo) { + save.undo = this.#commands[this.#position].undo; + }
- ctx.restore = function ctxRestore() { - if (this._transformStack.length === 0) { - (0, _util.warn)("Tried to restore a ctx when the stack was already empty."); + this.#commands[this.#position] = save; + return; }
- const prev = this._transformStack.pop(); + const next = this.#position + 1;
- if (prev) { - this._transformMatrix = prev; + if (next === this.#maxSize) { + this.#commands.splice(0, 1); + } else { + this.#position = next;
- this._originalRestore(); + if (next < this.#commands.length) { + this.#commands.splice(next); + } } - };
- ctx.translate = function ctxTranslate(x, y) { - const m = this._transformMatrix; - m[4] = m[0] * x + m[2] * y + m[4]; - m[5] = m[1] * x + m[3] * y + m[5]; + this.#commands.push(save); + }
- this._originalTranslate(x, y); - }; + undo() { + if (this.#position === -1) { + return; + }
- ctx.scale = function ctxScale(x, y) { - const m = this._transformMatrix; - m[0] *= x; - m[1] *= x; - m[2] *= y; - m[3] *= y; + this.#commands[this.#position].undo(); + this.#position -= 1; + }
- this._originalScale(x, y); - }; + redo() { + if (this.#position < this.#commands.length - 1) { + this.#position += 1; + this.#commands[this.#position].cmd(); + } + }
- ctx.transform = function ctxTransform(a, b, c, d, e, f) { - const m = this._transformMatrix; - this._transformMatrix = [m[0] * a + m[2] * b, m[1] * a + m[3] * b, m[0] * c + m[2] * d, m[1] * c + m[3] * d, m[0] * e + m[2] * f + m[4], m[1] * e + m[3] * f + m[5]]; + hasSomethingToUndo() { + return this.#position !== -1; + }
- ctx._originalTransform(a, b, c, d, e, f); - }; + hasSomethingToRedo() { + return this.#position < this.#commands.length - 1; + }
- ctx.setTransform = function ctxSetTransform(a, b, c, d, e, f) { - this._transformMatrix = [a, b, c, d, e, f]; + destroy() { + this.#commands = null; + }
- ctx._originalSetTransform(a, b, c, d, e, f); - }; +}
- ctx.resetTransform = function ctxResetTransform() { - this._transformMatrix = [1, 0, 0, 1, 0, 0]; +exports.CommandManager = CommandManager;
- ctx._originalResetTransform(); - }; +class KeyboardManager { + constructor(callbacks) { + this.buffer = []; + this.callbacks = new Map(); + this.allKeys = new Set(); + const isMac = KeyboardManager.platform.isMac;
- ctx.rotate = function ctxRotate(angle) { - const cosValue = Math.cos(angle); - const sinValue = Math.sin(angle); - const m = this._transformMatrix; - this._transformMatrix = [m[0] * cosValue + m[2] * sinValue, m[1] * cosValue + m[3] * sinValue, m[0] * -sinValue + m[2] * cosValue, m[1] * -sinValue + m[3] * cosValue, m[4], m[5]]; + for (const [keys, callback] of callbacks) { + for (const key of keys) { + const isMacKey = key.startsWith("mac+");
- this._originalRotate(angle); - }; -} + if (isMac && isMacKey) { + this.callbacks.set(key.slice(4), callback); + this.allKeys.add(key.split("+").at(-1)); + } else if (!isMac && !isMacKey) { + this.callbacks.set(key, callback); + this.allKeys.add(key.split("+").at(-1)); + } + } + } + }
-class CachedCanvases { - constructor(canvasFactory) { - this.canvasFactory = canvasFactory; - this.cache = Object.create(null); + static get platform() { + const platform = typeof navigator !== "undefined" ? navigator.platform : ""; + return (0, _util.shadow)(this, "platform", { + isWin: platform.includes("Win"), + isMac: platform.includes("Mac") + }); }
- getCanvas(id, width, height, trackTransform) { - let canvasEntry; + #serialize(event) { + if (event.altKey) { + this.buffer.push("alt"); + }
- if (this.cache[id] !== undefined) { - canvasEntry = this.cache[id]; - this.canvasFactory.reset(canvasEntry, width, height); - canvasEntry.context.setTransform(1, 0, 0, 1, 0, 0); - } else { - canvasEntry = this.canvasFactory.create(width, height); - this.cache[id] = canvasEntry; + if (event.ctrlKey) { + this.buffer.push("ctrl"); }
- if (trackTransform) { - addContextCurrentTransform(canvasEntry.context); + if (event.metaKey) { + this.buffer.push("meta"); }
- return canvasEntry; - } + if (event.shiftKey) { + this.buffer.push("shift"); + }
- delete(id) { - delete this.cache[id]; + this.buffer.push(event.key); + const str = this.buffer.join("+"); + this.buffer.length = 0; + return str; }
- clear() { - for (const id in this.cache) { - const canvasEntry = this.cache[id]; - this.canvasFactory.destroy(canvasEntry); - delete this.cache[id]; + exec(self, event) { + if (!this.allKeys.has(event.key)) { + return; + } + + const callback = this.callbacks.get(this.#serialize(event)); + + if (!callback) { + return; } + + callback.bind(self)(); + event.preventDefault(); }
}
-function drawImageAtIntegerCoords(ctx, srcImg, srcX, srcY, srcW, srcH, destX, destY, destW, destH) { - const [a, b, c, d, tx, ty] = ctx.mozCurrentTransform; +exports.KeyboardManager = KeyboardManager;
- if (b === 0 && c === 0) { - const tlX = destX * a + tx; - const rTlX = Math.round(tlX); - const tlY = destY * d + ty; - const rTlY = Math.round(tlY); - const brX = (destX + destW) * a + tx; - const rWidth = Math.abs(Math.round(brX) - rTlX) || 1; - const brY = (destY + destH) * d + ty; - const rHeight = Math.abs(Math.round(brY) - rTlY) || 1; - ctx.setTransform(Math.sign(a), 0, 0, Math.sign(d), rTlX, rTlY); - ctx.drawImage(srcImg, srcX, srcY, srcW, srcH, 0, 0, rWidth, rHeight); - ctx.setTransform(a, b, c, d, tx, ty); - return [rWidth, rHeight]; - } +class ClipboardManager { + #elements = null;
- if (a === 0 && d === 0) { - const tlX = destY * c + tx; - const rTlX = Math.round(tlX); - const tlY = destX * b + ty; - const rTlY = Math.round(tlY); - const brX = (destY + destH) * c + tx; - const rWidth = Math.abs(Math.round(brX) - rTlX) || 1; - const brY = (destX + destW) * b + ty; - const rHeight = Math.abs(Math.round(brY) - rTlY) || 1; - ctx.setTransform(0, Math.sign(b), Math.sign(c), 0, rTlX, rTlY); - ctx.drawImage(srcImg, srcX, srcY, srcW, srcH, 0, 0, rHeight, rWidth); - ctx.setTransform(a, b, c, d, tx, ty); - return [rHeight, rWidth]; - } + copy(element) { + if (!element) { + return; + }
- ctx.drawImage(srcImg, srcX, srcY, srcW, srcH, destX, destY, destW, destH); - const scaleX = Math.hypot(a, b); - const scaleY = Math.hypot(c, d); - return [scaleX * destW, scaleY * destH]; -} + if (Array.isArray(element)) { + this.#elements = element.map(el => el.serialize()); + } else { + this.#elements = [element.serialize()]; + }
-function compileType3Glyph(imgData) { - const { - width, - height - } = imgData; + this.#elements = this.#elements.filter(el => !!el);
- if (!COMPILE_TYPE3_GLYPHS || width > MAX_SIZE_TO_COMPILE || height > MAX_SIZE_TO_COMPILE) { - return null; + if (this.#elements.length === 0) { + this.#elements = null; + } }
- const POINT_TO_PROCESS_LIMIT = 1000; - const POINT_TYPES = new Uint8Array([0, 2, 4, 0, 1, 0, 5, 4, 8, 10, 0, 8, 0, 2, 1, 0]); - const width1 = width + 1; - let points = new Uint8Array(width1 * (height + 1)); - let i, j, j0; - const lineSize = width + 7 & ~7; - let data = new Uint8Array(lineSize * height), - pos = 0; + paste() { + return this.#elements; + }
- for (const elem of imgData.data) { - let mask = 128; + isEmpty() { + return this.#elements === null; + }
- while (mask > 0) { - data[pos++] = elem & mask ? 0 : 255; - mask >>= 1; - } + destroy() { + this.#elements = null; }
- let count = 0; - pos = 0; +}
- if (data[pos] !== 0) { - points[0] = 1; - ++count; +class ColorManager { + static _colorsMapping = new Map([["CanvasText", [0, 0, 0]], ["Canvas", [255, 255, 255]]]); + + get _colors() { + const colors = new Map([["CanvasText", null], ["Canvas", null]]); + (0, _display_utils.getColorValues)(colors); + return (0, _util.shadow)(this, "_colors", colors); }
- for (j = 1; j < width; j++) { - if (data[pos] !== data[pos + 1]) { - points[j] = data[pos] ? 2 : 1; - ++count; + convert(color) { + const rgb = (0, _display_utils.getRGB)(color); + + if (!window.matchMedia("(forced-colors: active)").matches) { + return rgb; }
- pos++; - } + for (const [name, RGB] of this._colors) { + if (RGB.every((x, i) => x === rgb[i])) { + return ColorManager._colorsMapping.get(name); + } + }
- if (data[pos] !== 0) { - points[j] = 2; - ++count; + return rgb; }
- for (i = 1; i < height; i++) { - pos = i * lineSize; - j0 = i * width1; + getHexCode(name) { + const rgb = this._colors.get(name);
- if (data[pos - lineSize] !== data[pos]) { - points[j0] = data[pos] ? 1 : 8; - ++count; + if (!rgb) { + return name; }
- let sum = (data[pos] ? 4 : 0) + (data[pos - lineSize] ? 8 : 0); + return _util.Util.makeHexColor(...rgb); + }
- for (j = 1; j < width; j++) { - sum = (sum >> 2) + (data[pos + 1] ? 4 : 0) + (data[pos - lineSize + 1] ? 8 : 0); +}
- if (POINT_TYPES[sum]) { - points[j0 + j] = POINT_TYPES[sum]; - ++count; - } +exports.ColorManager = ColorManager;
- pos++; - } +class AnnotationEditorUIManager { + #activeEditor = null; + #allEditors = new Map(); + #allLayers = new Map(); + #clipboardManager = new ClipboardManager(); + #commandManager = new CommandManager(); + #currentPageIndex = 0; + #editorTypes = null; + #eventBus = null; + #idManager = new IdManager(); + #isEnabled = false; + #mode = _util.AnnotationEditorType.NONE; + #selectedEditors = new Set(); + #boundKeydown = this.keydown.bind(this); + #boundOnEditingAction = this.onEditingAction.bind(this); + #boundOnPageChanging = this.onPageChanging.bind(this); + #boundOnTextLayerRendered = this.onTextLayerRendered.bind(this); + #previousStates = { + isEditing: false, + isEmpty: true, + hasEmptyClipboard: true, + hasSomethingToUndo: false, + hasSomethingToRedo: false, + hasSelectedEditor: false + }; + #container = null; + static _keyboardManager = new KeyboardManager([[["ctrl+a", "mac+meta+a"], AnnotationEditorUIManager.prototype.selectAll], [["ctrl+c", "mac+meta+c"], AnnotationEditorUIManager.prototype.copy], [["ctrl+v", "mac+meta+v"], AnnotationEditorUIManager.prototype.paste], [["ctrl+x", "mac+meta+x"], AnnotationEditorUIManager.prototype.cut], [["ctrl+z", "mac+meta+z"], AnnotationEditorUIManager.prototype.undo], [["ctrl+y", "ctrl+shift+Z", "mac+meta+shift+Z"], AnnotationEditorUIManager.prototype.red [...]
- if (data[pos - lineSize] !== data[pos]) { - points[j0 + j] = data[pos] ? 2 : 4; - ++count; - } + constructor(container, eventBus) { + this.#container = container; + this.#eventBus = eventBus;
- if (count > POINT_TO_PROCESS_LIMIT) { - return null; - } - } + this.#eventBus._on("editingaction", this.#boundOnEditingAction);
- pos = lineSize * (height - 1); - j0 = i * width1; + this.#eventBus._on("pagechanging", this.#boundOnPageChanging);
- if (data[pos] !== 0) { - points[j0] = 8; - ++count; + this.#eventBus._on("textlayerrendered", this.#boundOnTextLayerRendered); }
- for (j = 1; j < width; j++) { - if (data[pos] !== data[pos + 1]) { - points[j0 + j] = data[pos] ? 4 : 8; - ++count; + destroy() { + this.#removeKeyboardManager(); + + this.#eventBus._off("editingaction", this.#boundOnEditingAction); + + this.#eventBus._off("pagechanging", this.#boundOnPageChanging); + + this.#eventBus._off("textlayerrendered", this.#boundOnTextLayerRendered); + + for (const layer of this.#allLayers.values()) { + layer.destroy(); }
- pos++; + this.#allLayers.clear(); + this.#allEditors.clear(); + this.#activeEditor = null; + this.#selectedEditors.clear(); + this.#clipboardManager.destroy(); + this.#commandManager.destroy(); }
- if (data[pos] !== 0) { - points[j0 + j] = 4; - ++count; + onPageChanging({ + pageNumber + }) { + this.#currentPageIndex = pageNumber - 1; }
- if (count > POINT_TO_PROCESS_LIMIT) { - return null; + onTextLayerRendered({ + pageNumber + }) { + const pageIndex = pageNumber - 1; + const layer = this.#allLayers.get(pageIndex); + layer?.onTextLayerRendered(); }
- const steps = new Int32Array([0, width1, -1, 0, -width1, 0, 0, 0, 1]); - let path, outlines, coords; + focusMainContainer() { + this.#container.focus(); + }
- if (!_is_node.isNodeJS) { - path = new Path2D(); - } else { - outlines = []; + #addKeyboardManager() { + this.#container.addEventListener("keydown", this.#boundKeydown); }
- for (i = 0; count && i <= height; i++) { - let p = i * width1; - const end = p + width; + #removeKeyboardManager() { + this.#container.removeEventListener("keydown", this.#boundKeydown); + }
- while (p < end && !points[p]) { - p++; + keydown(event) { + if (!this.getActive()?.shouldGetKeyboardEvents()) { + AnnotationEditorUIManager._keyboardManager.exec(this, event); } + }
- if (p === end) { - continue; + onEditingAction(details) { + if (["undo", "redo", "cut", "copy", "paste", "delete", "selectAll"].includes(details.name)) { + this[details.name](); } + }
- if (path) { - path.moveTo(p % width1, i); - } else { - coords = [p % width1, i]; - } + #dispatchUpdateStates(details) { + const hasChanged = Object.entries(details).some(([key, value]) => this.#previousStates[key] !== value);
- const p0 = p; - let type = points[p]; + if (hasChanged) { + this.#eventBus.dispatch("annotationeditorstateschanged", { + source: this, + details: Object.assign(this.#previousStates, details) + }); + } + }
- do { - const step = steps[type]; + #dispatchUpdateUI(details) { + this.#eventBus.dispatch("annotationeditorparamschanged", { + source: this, + details + }); + }
- do { - p += step; - } while (!points[p]); + setEditingState(isEditing) { + if (isEditing) { + this.#addKeyboardManager(); + this.#dispatchUpdateStates({ + isEditing: this.#mode !== _util.AnnotationEditorType.NONE, + isEmpty: this.#isEmpty(), + hasSomethingToUndo: this.#commandManager.hasSomethingToUndo(), + hasSomethingToRedo: this.#commandManager.hasSomethingToRedo(), + hasSelectedEditor: false, + hasEmptyClipboard: this.#clipboardManager.isEmpty() + }); + } else { + this.#removeKeyboardManager(); + this.#dispatchUpdateStates({ + isEditing: false + }); + } + }
- const pp = points[p]; + registerEditorTypes(types) { + this.#editorTypes = types;
- if (pp !== 5 && pp !== 10) { - type = pp; - points[p] = 0; - } else { - type = pp & 0x33 * type >> 4; - points[p] &= type >> 2 | type << 2; - } + for (const editorType of this.#editorTypes) { + this.#dispatchUpdateUI(editorType.defaultPropertiesToUpdate); + } + }
- if (path) { - path.lineTo(p % width1, p / width1 | 0); - } else { - coords.push(p % width1, p / width1 | 0); - } + getId() { + return this.#idManager.getId(); + }
- if (!points[p]) { - --count; - } - } while (p0 !== p); + addLayer(layer) { + this.#allLayers.set(layer.pageIndex, layer);
- if (!path) { - outlines.push(coords); + if (this.#isEnabled) { + layer.enable(); + } else { + layer.disable(); } - - --i; }
- data = null; - points = null; + removeLayer(layer) { + this.#allLayers.delete(layer.pageIndex); + }
- const drawOutline = function (c) { - c.save(); - c.scale(1 / width, -1 / height); - c.translate(0, -height); + updateMode(mode) { + this.#mode = mode;
- if (path) { - c.fill(path); + if (mode === _util.AnnotationEditorType.NONE) { + this.setEditingState(false); + this.#disableAll(); } else { - c.beginPath(); - - for (const o of outlines) { - c.moveTo(o[0], o[1]); + this.setEditingState(true); + this.#enableAll();
- for (let l = 2, ll = o.length; l < ll; l += 2) { - c.lineTo(o[l], o[l + 1]); - } + for (const layer of this.#allLayers.values()) { + layer.updateMode(mode); } + } + }
- c.fill(); + updateToolbar(mode) { + if (mode === this.#mode) { + return; }
- c.beginPath(); - c.restore(); - }; + this.#eventBus.dispatch("switchannotationeditormode", { + source: this, + mode + }); + }
- return drawOutline; -} + updateParams(type, value) { + for (const editor of this.#selectedEditors) { + editor.updateParams(type, value); + }
-class CanvasExtraState { - constructor(width, height) { - this.alphaIsShape = false; - this.fontSize = 0; - this.fontSizeScale = 1; - this.textMatrix = _util.IDENTITY_MATRIX; - this.textMatrixScale = 1; - this.fontMatrix = _util.FONT_IDENTITY_MATRIX; - this.leading = 0; - this.x = 0; - this.y = 0; - this.lineX = 0; - this.lineY = 0; - this.charSpacing = 0; - this.wordSpacing = 0; - this.textHScale = 1; - this.textRenderingMode = _util.TextRenderingMode.FILL; - this.textRise = 0; - this.fillColor = "#000000"; - this.strokeColor = "#000000"; - this.patternFill = false; - this.fillAlpha = 1; - this.strokeAlpha = 1; - this.lineWidth = 1; - this.activeSMask = null; - this.transferMaps = null; - this.startNewPathAndClipBox([0, 0, width, height]); + for (const editorType of this.#editorTypes) { + editorType.updateDefaultParams(type, value); + } }
- clone() { - const clone = Object.create(this); - clone.clipBox = this.clipBox.slice(); - return clone; - } + #enableAll() { + if (!this.#isEnabled) { + this.#isEnabled = true;
- setCurrentPoint(x, y) { - this.x = x; - this.y = y; + for (const layer of this.#allLayers.values()) { + layer.enable(); + } + } }
- updatePathMinMax(transform, x, y) { - [x, y] = _util.Util.applyTransform([x, y], transform); - this.minX = Math.min(this.minX, x); - this.minY = Math.min(this.minY, y); - this.maxX = Math.max(this.maxX, x); - this.maxY = Math.max(this.maxY, y); + #disableAll() { + this.unselectAll(); + + if (this.#isEnabled) { + this.#isEnabled = false; + + for (const layer of this.#allLayers.values()) { + layer.disable(); + } + } }
- updateRectMinMax(transform, rect) { - const p1 = _util.Util.applyTransform(rect, transform); + getEditors(pageIndex) { + const editors = [];
- const p2 = _util.Util.applyTransform(rect.slice(2), transform); + for (const editor of this.#allEditors.values()) { + if (editor.pageIndex === pageIndex) { + editors.push(editor); + } + }
- this.minX = Math.min(this.minX, p1[0], p2[0]); - this.minY = Math.min(this.minY, p1[1], p2[1]); - this.maxX = Math.max(this.maxX, p1[0], p2[0]); - this.maxY = Math.max(this.maxY, p1[1], p2[1]); + return editors; }
- updateScalingPathMinMax(transform, minMax) { - _util.Util.scaleMinMax(transform, minMax); + getEditor(id) { + return this.#allEditors.get(id); + }
- this.minX = Math.min(this.minX, minMax[0]); - this.maxX = Math.max(this.maxX, minMax[1]); - this.minY = Math.min(this.minY, minMax[2]); - this.maxY = Math.max(this.maxY, minMax[3]); + addEditor(editor) { + this.#allEditors.set(editor.id, editor); }
- updateCurvePathMinMax(transform, x0, y0, x1, y1, x2, y2, x3, y3, minMax) { - const box = _util.Util.bezierBoundingBox(x0, y0, x1, y1, x2, y2, x3, y3); + removeEditor(editor) { + this.#allEditors.delete(editor.id); + this.unselect(editor); + }
- if (minMax) { - minMax[0] = Math.min(minMax[0], box[0], box[2]); - minMax[1] = Math.max(minMax[1], box[0], box[2]); - minMax[2] = Math.min(minMax[2], box[1], box[3]); - minMax[3] = Math.max(minMax[3], box[1], box[3]); - return; - } + #addEditorToLayer(editor) { + const layer = this.#allLayers.get(editor.pageIndex);
- this.updateRectMinMax(transform, box); + if (layer) { + layer.addOrRebuild(editor); + } else { + this.addEditor(editor); + } }
- getPathBoundingBox(pathType = _pattern_helper.PathType.FILL, transform = null) { - const box = [this.minX, this.minY, this.maxX, this.maxY]; + setActiveEditor(editor) { + if (this.#activeEditor === editor) { + return; + }
- if (pathType === _pattern_helper.PathType.STROKE) { - if (!transform) { - (0, _util.unreachable)("Stroke bounding box must include transform."); - } + this.#activeEditor = editor;
- const scale = _util.Util.singularValueDecompose2dScale(transform); + if (editor) { + this.#dispatchUpdateUI(editor.propertiesToUpdate); + } + }
- const xStrokePad = scale[0] * this.lineWidth / 2; - const yStrokePad = scale[1] * this.lineWidth / 2; - box[0] -= xStrokePad; - box[1] -= yStrokePad; - box[2] += xStrokePad; - box[3] += yStrokePad; + toggleSelected(editor) { + if (this.#selectedEditors.has(editor)) { + this.#selectedEditors.delete(editor); + editor.unselect(); + this.#dispatchUpdateStates({ + hasSelectedEditor: this.hasSelection + }); + return; }
- return box; + this.#selectedEditors.add(editor); + editor.select(); + this.#dispatchUpdateUI(editor.propertiesToUpdate); + this.#dispatchUpdateStates({ + hasSelectedEditor: true + }); }
- updateClipFromPath() { - const intersect = _util.Util.intersect(this.clipBox, this.getPathBoundingBox()); + setSelected(editor) { + for (const ed of this.#selectedEditors) { + if (ed !== editor) { + ed.unselect(); + } + }
- this.startNewPathAndClipBox(intersect || [0, 0, 0, 0]); + this.#selectedEditors.clear(); + this.#selectedEditors.add(editor); + editor.select(); + this.#dispatchUpdateUI(editor.propertiesToUpdate); + this.#dispatchUpdateStates({ + hasSelectedEditor: true + }); }
- isEmptyClip() { - return this.minX === Infinity; + isSelected(editor) { + return this.#selectedEditors.has(editor); }
- startNewPathAndClipBox(box) { - this.clipBox = box; - this.minX = Infinity; - this.minY = Infinity; - this.maxX = 0; - this.maxY = 0; + unselect(editor) { + editor.unselect(); + this.#selectedEditors.delete(editor); + this.#dispatchUpdateStates({ + hasSelectedEditor: this.hasSelection + }); }
- getClippedPathBoundingBox(pathType = _pattern_helper.PathType.FILL, transform = null) { - return _util.Util.intersect(this.clipBox, this.getPathBoundingBox(pathType, transform)); + get hasSelection() { + return this.#selectedEditors.size !== 0; }
-} + undo() { + this.#commandManager.undo(); + this.#dispatchUpdateStates({ + hasSomethingToUndo: this.#commandManager.hasSomethingToUndo(), + hasSomethingToRedo: true, + isEmpty: this.#isEmpty() + }); + }
-function putBinaryImageData(ctx, imgData, transferMaps = null) { - if (typeof ImageData !== "undefined" && imgData instanceof ImageData) { - ctx.putImageData(imgData, 0, 0); - return; + redo() { + this.#commandManager.redo(); + this.#dispatchUpdateStates({ + hasSomethingToUndo: true, + hasSomethingToRedo: this.#commandManager.hasSomethingToRedo(), + isEmpty: this.#isEmpty() + }); }
- const height = imgData.height, - width = imgData.width; - const partialChunkHeight = height % FULL_CHUNK_HEIGHT; - const fullChunks = (height - partialChunkHeight) / FULL_CHUNK_HEIGHT; - const totalChunks = partialChunkHeight === 0 ? fullChunks : fullChunks + 1; - const chunkImgData = ctx.createImageData(width, FULL_CHUNK_HEIGHT); - let srcPos = 0, - destPos; - const src = imgData.data; - const dest = chunkImgData.data; - let i, j, thisChunkHeight, elemsInThisChunk; - let transferMapRed, transferMapGreen, transferMapBlue, transferMapGray; + addCommands(params) { + this.#commandManager.add(params); + this.#dispatchUpdateStates({ + hasSomethingToUndo: true, + hasSomethingToRedo: false, + isEmpty: this.#isEmpty() + }); + }
- if (transferMaps) { - switch (transferMaps.length) { - case 1: - transferMapRed = transferMaps[0]; - transferMapGreen = transferMaps[0]; - transferMapBlue = transferMaps[0]; - transferMapGray = transferMaps[0]; - break; + #isEmpty() { + if (this.#allEditors.size === 0) { + return true; + }
- case 4: - transferMapRed = transferMaps[0]; - transferMapGreen = transferMaps[1]; - transferMapBlue = transferMaps[2]; - transferMapGray = transferMaps[3]; - break; + if (this.#allEditors.size === 1) { + for (const editor of this.#allEditors.values()) { + return editor.isEmpty(); + } } + + return false; }
- if (imgData.kind === _util.ImageKind.GRAYSCALE_1BPP) { - const srcLength = src.byteLength; - const dest32 = new Uint32Array(dest.buffer, 0, dest.byteLength >> 2); - const dest32DataLength = dest32.length; - const fullSrcDiff = width + 7 >> 3; - let white = 0xffffffff; - let black = _util.FeatureTest.isLittleEndian ? 0xff000000 : 0x000000ff; - - if (transferMapGray) { - if (transferMapGray[0] === 0xff && transferMapGray[0xff] === 0) { - [white, black] = [black, white]; - } + delete() { + if (this.#activeEditor) { + this.#activeEditor.commitOrRemove(); }
- for (i = 0; i < totalChunks; i++) { - thisChunkHeight = i < fullChunks ? FULL_CHUNK_HEIGHT : partialChunkHeight; - destPos = 0; - - for (j = 0; j < thisChunkHeight; j++) { - const srcDiff = srcLength - srcPos; - let k = 0; - const kEnd = srcDiff > fullSrcDiff ? width : srcDiff * 8 - 7; - const kEndUnrolled = kEnd & ~7; - let mask = 0; - let srcByte = 0; - - for (; k < kEndUnrolled; k += 8) { - srcByte = src[srcPos++]; - dest32[destPos++] = srcByte & 128 ? white : black; - dest32[destPos++] = srcByte & 64 ? white : black; - dest32[destPos++] = srcByte & 32 ? white : black; - dest32[destPos++] = srcByte & 16 ? white : black; - dest32[destPos++] = srcByte & 8 ? white : black; - dest32[destPos++] = srcByte & 4 ? white : black; - dest32[destPos++] = srcByte & 2 ? white : black; - dest32[destPos++] = srcByte & 1 ? white : black; - } + if (!this.hasSelection) { + return; + }
- for (; k < kEnd; k++) { - if (mask === 0) { - srcByte = src[srcPos++]; - mask = 128; - } + const editors = [...this.#selectedEditors];
- dest32[destPos++] = srcByte & mask ? white : black; - mask >>= 1; - } + const cmd = () => { + for (const editor of editors) { + editor.remove(); } + };
- while (destPos < dest32DataLength) { - dest32[destPos++] = 0; + const undo = () => { + for (const editor of editors) { + this.#addEditorToLayer(editor); } + };
- ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT); - } - } else if (imgData.kind === _util.ImageKind.RGBA_32BPP) { - const hasTransferMaps = !!(transferMapRed || transferMapGreen || transferMapBlue); - j = 0; - elemsInThisChunk = width * FULL_CHUNK_HEIGHT * 4; - - for (i = 0; i < fullChunks; i++) { - dest.set(src.subarray(srcPos, srcPos + elemsInThisChunk)); - srcPos += elemsInThisChunk; + this.addCommands({ + cmd, + undo, + mustExec: true + }); + }
- if (hasTransferMaps) { - for (let k = 0; k < elemsInThisChunk; k += 4) { - if (transferMapRed) { - dest[k + 0] = transferMapRed[dest[k + 0]]; - } + copy() { + if (this.#activeEditor) { + this.#activeEditor.commitOrRemove(); + }
- if (transferMapGreen) { - dest[k + 1] = transferMapGreen[dest[k + 1]]; - } + if (this.hasSelection) { + const editors = [];
- if (transferMapBlue) { - dest[k + 2] = transferMapBlue[dest[k + 2]]; - } + for (const editor of this.#selectedEditors) { + if (!editor.isEmpty()) { + editors.push(editor); } }
- ctx.putImageData(chunkImgData, 0, j); - j += FULL_CHUNK_HEIGHT; - } - - if (i < totalChunks) { - elemsInThisChunk = width * partialChunkHeight * 4; - dest.set(src.subarray(srcPos, srcPos + elemsInThisChunk)); - - if (hasTransferMaps) { - for (let k = 0; k < elemsInThisChunk; k += 4) { - if (transferMapRed) { - dest[k + 0] = transferMapRed[dest[k + 0]]; - } + if (editors.length === 0) { + return; + }
- if (transferMapGreen) { - dest[k + 1] = transferMapGreen[dest[k + 1]]; - } + this.#clipboardManager.copy(editors); + this.#dispatchUpdateStates({ + hasEmptyClipboard: false + }); + } + }
- if (transferMapBlue) { - dest[k + 2] = transferMapBlue[dest[k + 2]]; - } - } - } + cut() { + this.copy(); + this.delete(); + }
- ctx.putImageData(chunkImgData, 0, j); + paste() { + if (this.#clipboardManager.isEmpty()) { + return; } - } else if (imgData.kind === _util.ImageKind.RGB_24BPP) { - const hasTransferMaps = !!(transferMapRed || transferMapGreen || transferMapBlue); - thisChunkHeight = FULL_CHUNK_HEIGHT; - elemsInThisChunk = width * thisChunkHeight;
- for (i = 0; i < totalChunks; i++) { - if (i >= fullChunks) { - thisChunkHeight = partialChunkHeight; - elemsInThisChunk = width * thisChunkHeight; + this.unselectAll(); + const layer = this.#allLayers.get(this.#currentPageIndex); + const newEditors = this.#clipboardManager.paste().map(data => layer.deserialize(data)); + + const cmd = () => { + for (const editor of newEditors) { + this.#addEditorToLayer(editor); }
- destPos = 0; + this.#selectEditors(newEditors); + };
- for (j = elemsInThisChunk; j--;) { - dest[destPos++] = src[srcPos++]; - dest[destPos++] = src[srcPos++]; - dest[destPos++] = src[srcPos++]; - dest[destPos++] = 255; + const undo = () => { + for (const editor of newEditors) { + editor.remove(); } + };
- if (hasTransferMaps) { - for (let k = 0; k < destPos; k += 4) { - if (transferMapRed) { - dest[k + 0] = transferMapRed[dest[k + 0]]; - } + this.addCommands({ + cmd, + undo, + mustExec: true + }); + }
- if (transferMapGreen) { - dest[k + 1] = transferMapGreen[dest[k + 1]]; - } + #selectEditors(editors) { + this.#selectedEditors.clear();
- if (transferMapBlue) { - dest[k + 2] = transferMapBlue[dest[k + 2]]; - } - } + for (const editor of editors) { + if (editor.isEmpty()) { + continue; }
- ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT); + this.#selectedEditors.add(editor); + editor.select(); } - } else { - throw new Error(`bad image kind: ${imgData.kind}`); - } -}
-function putBinaryImageMask(ctx, imgData) { - if (imgData.bitmap) { - ctx.drawImage(imgData.bitmap, 0, 0); - return; + this.#dispatchUpdateStates({ + hasSelectedEditor: true + }); }
- const height = imgData.height, - width = imgData.width; - const partialChunkHeight = height % FULL_CHUNK_HEIGHT; - const fullChunks = (height - partialChunkHeight) / FULL_CHUNK_HEIGHT; - const totalChunks = partialChunkHeight === 0 ? fullChunks : fullChunks + 1; - const chunkImgData = ctx.createImageData(width, FULL_CHUNK_HEIGHT); - let srcPos = 0; - const src = imgData.data; - const dest = chunkImgData.data; + selectAll() { + for (const editor of this.#selectedEditors) { + editor.commit(); + }
- for (let i = 0; i < totalChunks; i++) { - const thisChunkHeight = i < fullChunks ? FULL_CHUNK_HEIGHT : partialChunkHeight; - ({ - srcPos - } = (0, _image_utils.applyMaskImageData)({ - src, - srcPos, - dest, - width, - height: thisChunkHeight - })); - ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT); + this.#selectEditors(this.#allEditors.values()); } -}
-function copyCtxState(sourceCtx, destCtx) { - const properties = ["strokeStyle", "fillStyle", "fillRule", "globalAlpha", "lineWidth", "lineCap", "lineJoin", "miterLimit", "globalCompositeOperation", "font"]; + unselectAll() { + if (this.#activeEditor) { + this.#activeEditor.commitOrRemove(); + return; + }
- for (let i = 0, ii = properties.length; i < ii; i++) { - const property = properties[i]; + if (this.#selectEditors.size === 0) { + return; + }
- if (sourceCtx[property] !== undefined) { - destCtx[property] = sourceCtx[property]; + for (const editor of this.#selectedEditors) { + editor.unselect(); } + + this.#selectedEditors.clear(); + this.#dispatchUpdateStates({ + hasSelectedEditor: false + }); }
- if (sourceCtx.setLineDash !== undefined) { - destCtx.setLineDash(sourceCtx.getLineDash()); - destCtx.lineDashOffset = sourceCtx.lineDashOffset; + isActive(editor) { + return this.#activeEditor === editor; } -}
-function resetCtxToDefault(ctx, foregroundColor) { - ctx.strokeStyle = ctx.fillStyle = foregroundColor || "#000000"; - ctx.fillRule = "nonzero"; - ctx.globalAlpha = 1; - ctx.lineWidth = 1; - ctx.lineCap = "butt"; - ctx.lineJoin = "miter"; - ctx.miterLimit = 10; - ctx.globalCompositeOperation = "source-over"; - ctx.font = "10px sans-serif"; + getActive() { + return this.#activeEditor; + }
- if (ctx.setLineDash !== undefined) { - ctx.setLineDash([]); - ctx.lineDashOffset = 0; + getMode() { + return this.#mode; } -}
-function composeSMaskBackdrop(bytes, r0, g0, b0) { - const length = bytes.length; +}
- for (let i = 3; i < length; i += 4) { - const alpha = bytes[i]; +exports.AnnotationEditorUIManager = AnnotationEditorUIManager;
- if (alpha === 0) { - bytes[i - 3] = r0; - bytes[i - 2] = g0; - bytes[i - 1] = b0; - } else if (alpha < 255) { - const alpha_ = 255 - alpha; - bytes[i - 3] = bytes[i - 3] * alpha + r0 * alpha_ >> 8; - bytes[i - 2] = bytes[i - 2] * alpha + g0 * alpha_ >> 8; - bytes[i - 1] = bytes[i - 1] * alpha + b0 * alpha_ >> 8; - } - } -} +/***/ }), +/* 10 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
-function composeSMaskAlpha(maskData, layerData, transferMap) { - const length = maskData.length; - const scale = 1 / 255;
- for (let i = 3; i < length; i += 4) { - const alpha = transferMap ? transferMap[maskData[i]] : maskData[i]; - layerData[i] = layerData[i] * alpha * scale | 0; - } -}
-function composeSMaskLuminosity(maskData, layerData, transferMap) { - const length = maskData.length; +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.MurmurHash3_64 = void 0;
- for (let i = 3; i < length; i += 4) { - const y = maskData[i - 3] * 77 + maskData[i - 2] * 152 + maskData[i - 1] * 28; - layerData[i] = transferMap ? layerData[i] * transferMap[y >> 8] >> 8 : layerData[i] * y >> 16; - } -} +var _util = __w_pdfjs_require__(1);
-function genericComposeSMask(maskCtx, layerCtx, width, height, subtype, backdrop, transferMap, layerOffsetX, layerOffsetY, maskOffsetX, maskOffsetY) { - const hasBackdrop = !!backdrop; - const r0 = hasBackdrop ? backdrop[0] : 0; - const g0 = hasBackdrop ? backdrop[1] : 0; - const b0 = hasBackdrop ? backdrop[2] : 0; - let composeFn; +const SEED = 0xc3d2e1f0; +const MASK_HIGH = 0xffff0000; +const MASK_LOW = 0xffff;
- if (subtype === "Luminosity") { - composeFn = composeSMaskLuminosity; - } else { - composeFn = composeSMaskAlpha; +class MurmurHash3_64 { + constructor(seed) { + this.h1 = seed ? seed & 0xffffffff : SEED; + this.h2 = seed ? seed & 0xffffffff : SEED; }
- const PIXELS_TO_PROCESS = 1048576; - const chunkSize = Math.min(height, Math.ceil(PIXELS_TO_PROCESS / width)); + update(input) { + let data, length;
- for (let row = 0; row < height; row += chunkSize) { - const chunkHeight = Math.min(chunkSize, height - row); - const maskData = maskCtx.getImageData(layerOffsetX - maskOffsetX, row + (layerOffsetY - maskOffsetY), width, chunkHeight); - const layerData = layerCtx.getImageData(layerOffsetX, row + layerOffsetY, width, chunkHeight); + if (typeof input === "string") { + data = new Uint8Array(input.length * 2); + length = 0;
- if (hasBackdrop) { - composeSMaskBackdrop(maskData.data, r0, g0, b0); + for (let i = 0, ii = input.length; i < ii; i++) { + const code = input.charCodeAt(i); + + if (code <= 0xff) { + data[length++] = code; + } else { + data[length++] = code >>> 8; + data[length++] = code & 0xff; + } + } + } else if ((0, _util.isArrayBuffer)(input)) { + data = input.slice(); + length = data.byteLength; + } else { + throw new Error("Wrong data format in MurmurHash3_64_update. " + "Input must be a string or array."); }
- composeFn(maskData.data, layerData.data, transferMap); - layerCtx.putImageData(layerData, layerOffsetX, row + layerOffsetY); - } -} + const blockCounts = length >> 2; + const tailLength = length - blockCounts * 4; + const dataUint32 = new Uint32Array(data.buffer, 0, blockCounts); + let k1 = 0, + k2 = 0; + let h1 = this.h1, + h2 = this.h2; + const C1 = 0xcc9e2d51, + C2 = 0x1b873593; + const C1_LOW = C1 & MASK_LOW, + C2_LOW = C2 & MASK_LOW;
-function composeSMask(ctx, smask, layerCtx, layerBox) { - const layerOffsetX = layerBox[0]; - const layerOffsetY = layerBox[1]; - const layerWidth = layerBox[2] - layerOffsetX; - const layerHeight = layerBox[3] - layerOffsetY; + for (let i = 0; i < blockCounts; i++) { + if (i & 1) { + k1 = dataUint32[i]; + k1 = k1 * C1 & MASK_HIGH | k1 * C1_LOW & MASK_LOW; + k1 = k1 << 15 | k1 >>> 17; + k1 = k1 * C2 & MASK_HIGH | k1 * C2_LOW & MASK_LOW; + h1 ^= k1; + h1 = h1 << 13 | h1 >>> 19; + h1 = h1 * 5 + 0xe6546b64; + } else { + k2 = dataUint32[i]; + k2 = k2 * C1 & MASK_HIGH | k2 * C1_LOW & MASK_LOW; + k2 = k2 << 15 | k2 >>> 17; + k2 = k2 * C2 & MASK_HIGH | k2 * C2_LOW & MASK_LOW; + h2 ^= k2; + h2 = h2 << 13 | h2 >>> 19; + h2 = h2 * 5 + 0xe6546b64; + } + }
- if (layerWidth === 0 || layerHeight === 0) { - return; - } + k1 = 0;
- genericComposeSMask(smask.context, layerCtx, layerWidth, layerHeight, smask.subtype, smask.backdrop, smask.transferMap, layerOffsetX, layerOffsetY, smask.offsetX, smask.offsetY); - ctx.save(); - ctx.globalAlpha = 1; - ctx.globalCompositeOperation = "source-over"; - ctx.setTransform(1, 0, 0, 1, 0, 0); - ctx.drawImage(layerCtx.canvas, 0, 0); - ctx.restore(); -} + switch (tailLength) { + case 3: + k1 ^= data[blockCounts * 4 + 2] << 16;
-function getImageSmoothingEnabled(transform, interpolate) { - const scale = _util.Util.singularValueDecompose2dScale(transform); + case 2: + k1 ^= data[blockCounts * 4 + 1] << 8;
- scale[0] = Math.fround(scale[0]); - scale[1] = Math.fround(scale[1]); - const actualScale = Math.fround((globalThis.devicePixelRatio || 1) * _display_utils.PixelsPerInch.PDF_TO_CSS_UNITS); + case 1: + k1 ^= data[blockCounts * 4]; + k1 = k1 * C1 & MASK_HIGH | k1 * C1_LOW & MASK_LOW; + k1 = k1 << 15 | k1 >>> 17; + k1 = k1 * C2 & MASK_HIGH | k1 * C2_LOW & MASK_LOW;
- if (interpolate !== undefined) { - return interpolate; - } else if (scale[0] <= actualScale || scale[1] <= actualScale) { - return true; + if (blockCounts & 1) { + h1 ^= k1; + } else { + h2 ^= k1; + } + + } + + this.h1 = h1; + this.h2 = h2; + } + + hexdigest() { + let h1 = this.h1, + h2 = this.h2; + h1 ^= h2 >>> 1; + h1 = h1 * 0xed558ccd & MASK_HIGH | h1 * 0x8ccd & MASK_LOW; + h2 = h2 * 0xff51afd7 & MASK_HIGH | ((h2 << 16 | h1 >>> 16) * 0xafd7ed55 & MASK_HIGH) >>> 16; + h1 ^= h2 >>> 1; + h1 = h1 * 0x1a85ec53 & MASK_HIGH | h1 * 0xec53 & MASK_LOW; + h2 = h2 * 0xc4ceb9fe & MASK_HIGH | ((h2 << 16 | h1 >>> 16) * 0xb9fe1a85 & MASK_HIGH) >>> 16; + h1 ^= h2 >>> 1; + const hex1 = (h1 >>> 0).toString(16), + hex2 = (h2 >>> 0).toString(16); + return hex1.padStart(8, "0") + hex2.padStart(8, "0"); }
- return false; }
-const LINE_CAP_STYLES = ["butt", "round", "square"]; -const LINE_JOIN_STYLES = ["miter", "round", "bevel"]; -const NORMAL_CLIP = {}; -const EO_CLIP = {}; +exports.MurmurHash3_64 = MurmurHash3_64;
-class CanvasGraphics { - constructor(canvasCtx, commonObjs, objs, canvasFactory, imageLayer, optionalContentConfig, annotationCanvasMap, pageColors) { - this.ctx = canvasCtx; - this.current = new CanvasExtraState(this.ctx.canvas.width, this.ctx.canvas.height); - this.stateStack = []; - this.pendingClip = null; - this.pendingEOFill = false; - this.res = null; - this.xobjs = null; - this.commonObjs = commonObjs; - this.objs = objs; - this.canvasFactory = canvasFactory; - this.imageLayer = imageLayer; - this.groupStack = []; - this.processingType3 = null; - this.baseTransform = null; - this.baseTransformStack = []; - this.groupLevel = 0; - this.smaskStack = []; - this.smaskCounter = 0; - this.tempSMask = null; - this.suspendedCtx = null; - this.contentVisible = true; - this.markedContentStack = []; - this.optionalContentConfig = optionalContentConfig; - this.cachedCanvases = new CachedCanvases(this.canvasFactory); - this.cachedPatterns = new Map(); - this.annotationCanvasMap = annotationCanvasMap; - this.viewportScale = 1; - this.outputScaleX = 1; - this.outputScaleY = 1; - this.backgroundColor = pageColors?.background || null; - this.foregroundColor = pageColors?.foreground || null; +/***/ }), +/* 11 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
- if (canvasCtx) { - addContextCurrentTransform(canvasCtx); - }
- this._cachedScaleForStroking = null; - this._cachedGetSinglePixelWidth = null; - this._cachedBitmapsMap = new Map(); - }
- getObject(data, fallback = null) { - if (typeof data === "string") { - return data.startsWith("g_") ? this.commonObjs.get(data) : this.objs.get(data); - } +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.FontLoader = exports.FontFaceObject = void 0;
- return fallback; - } +var _util = __w_pdfjs_require__(1);
- beginDrawing({ - transform, - viewport, - transparency = false, - background = null +class BaseFontLoader { + constructor({ + docId, + onUnsupportedFeature, + ownerDocument = globalThis.document, + styleElement = null }) { - const width = this.ctx.canvas.width; - const height = this.ctx.canvas.height; - const defaultBackgroundColor = background || "#ffffff"; - this.ctx.save(); - - if (this.foregroundColor && this.backgroundColor) { - this.ctx.fillStyle = this.foregroundColor; - const fg = this.foregroundColor = this.ctx.fillStyle; - this.ctx.fillStyle = this.backgroundColor; - const bg = this.backgroundColor = this.ctx.fillStyle; - let isValidDefaultBg = true; - let defaultBg = defaultBackgroundColor; + if (this.constructor === BaseFontLoader) { + (0, _util.unreachable)("Cannot initialize BaseFontLoader."); + }
- if (fg === "#000000" && bg === "#ffffff" || fg === bg || !isValidDefaultBg) { - this.foregroundColor = this.backgroundColor = null; - } else { - const cB = parseInt(defaultBg.slice(1), 16); - const rB = (cB && 0xff0000) >> 16; - const gB = (cB && 0x00ff00) >> 8; - const bB = cB && 0x0000ff; + this.docId = docId; + this._onUnsupportedFeature = onUnsupportedFeature; + this._document = ownerDocument; + this.nativeFontFaces = []; + this.styleElement = null; + }
- const newComp = x => { - x /= 255; - return x <= 0.03928 ? x / 12.92 : ((x + 0.055) / 1.055) ** 2.4; - }; + addNativeFontFace(nativeFontFace) { + this.nativeFontFaces.push(nativeFontFace);
- const lumB = Math.round(0.2126 * newComp(rB) + 0.7152 * newComp(gB) + 0.0722 * newComp(bB)); + this._document.fonts.add(nativeFontFace); + }
- this.selectColor = (r, g, b) => { - const lumC = 0.2126 * newComp(r) + 0.7152 * newComp(g) + 0.0722 * newComp(b); - return Math.round(lumC) === lumB ? bg : fg; - }; - } - } + insertRule(rule) { + let styleElement = this.styleElement;
- this.ctx.fillStyle = this.backgroundColor || defaultBackgroundColor; - this.ctx.fillRect(0, 0, width, height); - this.ctx.restore(); + if (!styleElement) { + styleElement = this.styleElement = this._document.createElement("style"); + styleElement.id = `PDFJS_FONT_STYLE_TAG_${this.docId}`;
- if (transparency) { - const transparentCanvas = this.cachedCanvases.getCanvas("transparent", width, height, true); - this.compositeCtx = this.ctx; - this.transparentCanvas = transparentCanvas.canvas; - this.ctx = transparentCanvas.context; - this.ctx.save(); - this.ctx.transform.apply(this.ctx, this.compositeCtx.mozCurrentTransform); + this._document.documentElement.getElementsByTagName("head")[0].append(styleElement); }
- this.ctx.save(); - resetCtxToDefault(this.ctx, this.foregroundColor); + const styleSheet = styleElement.sheet; + styleSheet.insertRule(rule, styleSheet.cssRules.length); + }
- if (transform) { - this.ctx.transform.apply(this.ctx, transform); - this.outputScaleX = transform[0]; - this.outputScaleY = transform[0]; + clear() { + for (const nativeFontFace of this.nativeFontFaces) { + this._document.fonts.delete(nativeFontFace); }
- this.ctx.transform.apply(this.ctx, viewport.transform); - this.viewportScale = viewport.scale; - this.baseTransform = this.ctx.mozCurrentTransform.slice(); + this.nativeFontFaces.length = 0;
- if (this.imageLayer) { - this.imageLayer.beginLayout(); + if (this.styleElement) { + this.styleElement.remove(); + this.styleElement = null; } }
- executeOperatorList(operatorList, executionStartIdx, continueCallback, stepper) { - const argsArray = operatorList.argsArray; - const fnArray = operatorList.fnArray; - let i = executionStartIdx || 0; - const argsArrayLen = argsArray.length; - - if (argsArrayLen === i) { - return i; + async bind(font) { + if (font.attached || font.missingFile) { + return; }
- const chunkOperations = argsArrayLen - i > EXECUTION_STEPS && typeof continueCallback === "function"; - const endTime = chunkOperations ? Date.now() + EXECUTION_TIME : 0; - let steps = 0; - const commonObjs = this.commonObjs; - const objs = this.objs; - let fnId; + font.attached = true;
- while (true) { - if (stepper !== undefined && i === stepper.nextBreakPoint) { - stepper.breakIt(i, continueCallback); - return i; - } + if (this.isFontLoadingAPISupported) { + const nativeFontFace = font.createNativeFontFace();
- fnId = fnArray[i]; + if (nativeFontFace) { + this.addNativeFontFace(nativeFontFace);
- if (fnId !== _util.OPS.dependency) { - this[fnId].apply(this, argsArray[i]); - } else { - for (const depObjId of argsArray[i]) { - const objsPool = depObjId.startsWith("g_") ? commonObjs : objs; + try { + await nativeFontFace.loaded; + } catch (ex) { + this._onUnsupportedFeature({ + featureId: _util.UNSUPPORTED_FEATURES.errorFontLoadNative + });
- if (!objsPool.has(depObjId)) { - objsPool.get(depObjId, continueCallback); - return i; - } + (0, _util.warn)(`Failed to load font '${nativeFontFace.family}': '${ex}'.`); + font.disableFontFace = true; + throw ex; } }
- i++; + return; + }
- if (i === argsArrayLen) { - return i; - } + const rule = font.createFontFaceRule();
- if (chunkOperations && ++steps > EXECUTION_STEPS) { - if (Date.now() > endTime) { - continueCallback(); - return i; - } + if (rule) { + this.insertRule(rule);
- steps = 0; + if (this.isSyncFontLoadingSupported) { + return; } + + await new Promise(resolve => { + const request = this._queueLoadingCallback(resolve); + + this._prepareFontLoadEvent([rule], [font], request); + }); } }
- endDrawing() { - while (this.stateStack.length || this.inSMaskMode) { - this.restore(); - } + _queueLoadingCallback(callback) { + (0, _util.unreachable)("Abstract method `_queueLoadingCallback`."); + }
- this.ctx.restore(); + get isFontLoadingAPISupported() { + const hasFonts = !!this._document?.fonts; + return (0, _util.shadow)(this, "isFontLoadingAPISupported", hasFonts); + }
- if (this.transparentCanvas) { - this.ctx = this.compositeCtx; - this.ctx.save(); - this.ctx.setTransform(1, 0, 0, 1, 0, 0); - this.ctx.drawImage(this.transparentCanvas, 0, 0); - this.ctx.restore(); - this.transparentCanvas = null; - } + get isSyncFontLoadingSupported() { + (0, _util.unreachable)("Abstract method `isSyncFontLoadingSupported`."); + }
- this.cachedCanvases.clear(); - this.cachedPatterns.clear(); + get _loadTestFont() { + (0, _util.unreachable)("Abstract method `_loadTestFont`."); + }
- for (const cache of this._cachedBitmapsMap.values()) { - for (const canvas of cache.values()) { - if (typeof HTMLCanvasElement !== "undefined" && canvas instanceof HTMLCanvasElement) { - canvas.width = canvas.height = 0; - } - } + _prepareFontLoadEvent(rules, fontsToLoad, request) { + (0, _util.unreachable)("Abstract method `_prepareFontLoadEvent`."); + }
- cache.clear(); +} + +let FontLoader; +exports.FontLoader = FontLoader; +{ + exports.FontLoader = FontLoader = class MozcentralFontLoader extends BaseFontLoader { + get isSyncFontLoadingSupported() { + return (0, _util.shadow)(this, "isSyncFontLoadingSupported", true); }
- this._cachedBitmapsMap.clear(); + }; +}
- if (this.imageLayer) { - this.imageLayer.endLayout(); +class FontFaceObject { + constructor(translatedData, { + isEvalSupported = true, + disableFontFace = false, + ignoreErrors = false, + onUnsupportedFeature, + fontRegistry = null + }) { + this.compiledGlyphs = Object.create(null); + + for (const i in translatedData) { + this[i] = translatedData[i]; } + + this.isEvalSupported = isEvalSupported !== false; + this.disableFontFace = disableFontFace === true; + this.ignoreErrors = ignoreErrors === true; + this._onUnsupportedFeature = onUnsupportedFeature; + this.fontRegistry = fontRegistry; }
- _scaleImage(img, inverseTransform) { - const width = img.width; - const height = img.height; - let widthScale = Math.max(Math.hypot(inverseTransform[0], inverseTransform[1]), 1); - let heightScale = Math.max(Math.hypot(inverseTransform[2], inverseTransform[3]), 1); - let paintWidth = width, - paintHeight = height; - let tmpCanvasId = "prescale1"; - let tmpCanvas, tmpCtx; + createNativeFontFace() { + if (!this.data || this.disableFontFace) { + return null; + }
- while (widthScale > 2 && paintWidth > 1 || heightScale > 2 && paintHeight > 1) { - let newWidth = paintWidth, - newHeight = paintHeight; + let nativeFontFace;
- if (widthScale > 2 && paintWidth > 1) { - newWidth = Math.ceil(paintWidth / 2); - widthScale /= paintWidth / newWidth; - } + if (!this.cssFontInfo) { + nativeFontFace = new FontFace(this.loadedName, this.data, {}); + } else { + const css = { + weight: this.cssFontInfo.fontWeight + };
- if (heightScale > 2 && paintHeight > 1) { - newHeight = Math.ceil(paintHeight / 2); - heightScale /= paintHeight / newHeight; + if (this.cssFontInfo.italicAngle) { + css.style = `oblique ${this.cssFontInfo.italicAngle}deg`; }
- tmpCanvas = this.cachedCanvases.getCanvas(tmpCanvasId, newWidth, newHeight, false); - tmpCtx = tmpCanvas.context; - tmpCtx.clearRect(0, 0, newWidth, newHeight); - tmpCtx.drawImage(img, 0, 0, paintWidth, paintHeight, 0, 0, newWidth, newHeight); - img = tmpCanvas.canvas; - paintWidth = newWidth; - paintHeight = newHeight; - tmpCanvasId = tmpCanvasId === "prescale1" ? "prescale2" : "prescale1"; + nativeFontFace = new FontFace(this.cssFontInfo.fontFamily, this.data, css); }
- return { - img, - paintWidth, - paintHeight - }; - } - - _createMaskCanvas(img) { - const ctx = this.ctx; - const { - width, - height - } = img; - const fillColor = this.current.fillColor; - const isPatternFill = this.current.patternFill; - const currentTransform = ctx.mozCurrentTransform; - let cache, cacheKey, scaled, maskCanvas; + if (this.fontRegistry) { + this.fontRegistry.registerFont(this); + }
- if ((img.bitmap || img.data) && img.count > 1) { - const mainKey = img.bitmap || img.data.buffer; - const withoutTranslation = currentTransform.slice(0, 4); - cacheKey = JSON.stringify(isPatternFill ? withoutTranslation : [withoutTranslation, fillColor]); - cache = this._cachedBitmapsMap.get(mainKey); + return nativeFontFace; + }
- if (!cache) { - cache = new Map(); + createFontFaceRule() { + if (!this.data || this.disableFontFace) { + return null; + }
- this._cachedBitmapsMap.set(mainKey, cache); - } + const data = (0, _util.bytesToString)(this.data); + const url = `url(data:${this.mimetype};base64,${btoa(data)});`; + let rule;
- const cachedImage = cache.get(cacheKey); + if (!this.cssFontInfo) { + rule = `@font-face {font-family:"${this.loadedName}";src:${url}}`; + } else { + let css = `font-weight: ${this.cssFontInfo.fontWeight};`;
- if (cachedImage && !isPatternFill) { - const offsetX = Math.round(Math.min(currentTransform[0], currentTransform[2]) + currentTransform[4]); - const offsetY = Math.round(Math.min(currentTransform[1], currentTransform[3]) + currentTransform[5]); - return { - canvas: cachedImage, - offsetX, - offsetY - }; + if (this.cssFontInfo.italicAngle) { + css += `font-style: oblique ${this.cssFontInfo.italicAngle}deg;`; }
- scaled = cachedImage; + rule = `@font-face {font-family:"${this.cssFontInfo.fontFamily}";${css}src:${url}}`; }
- if (!scaled) { - maskCanvas = this.cachedCanvases.getCanvas("maskCanvas", width, height, false); - putBinaryImageMask(maskCanvas.context, img); + if (this.fontRegistry) { + this.fontRegistry.registerFont(this, url); }
- let maskToCanvas = _util.Util.transform(currentTransform, [1 / width, 0, 0, -1 / height, 0, 0]); + return rule; + }
- maskToCanvas = _util.Util.transform(maskToCanvas, [1, 0, 0, 1, 0, -height]); + getPathGenerator(objs, character) { + if (this.compiledGlyphs[character] !== undefined) { + return this.compiledGlyphs[character]; + }
- const cord1 = _util.Util.applyTransform([0, 0], maskToCanvas); - - const cord2 = _util.Util.applyTransform([width, height], maskToCanvas); - - const rect = _util.Util.normalizeRect([cord1[0], cord1[1], cord2[0], cord2[1]]); + let cmds;
- const drawnWidth = Math.round(rect[2] - rect[0]) || 1; - const drawnHeight = Math.round(rect[3] - rect[1]) || 1; - const fillCanvas = this.cachedCanvases.getCanvas("fillCanvas", drawnWidth, drawnHeight, true); - const fillCtx = fillCanvas.context; - const offsetX = Math.min(cord1[0], cord2[0]); - const offsetY = Math.min(cord1[1], cord2[1]); - fillCtx.translate(-offsetX, -offsetY); - fillCtx.transform.apply(fillCtx, maskToCanvas); + try { + cmds = objs.get(this.loadedName + "_path_" + character); + } catch (ex) { + if (!this.ignoreErrors) { + throw ex; + }
- if (!scaled) { - scaled = this._scaleImage(maskCanvas.canvas, fillCtx.mozCurrentTransformInverse); - scaled = scaled.img; + this._onUnsupportedFeature({ + featureId: _util.UNSUPPORTED_FEATURES.errorFontGetPath + });
- if (cache && isPatternFill) { - cache.set(cacheKey, scaled); - } + (0, _util.warn)(`getPathGenerator - ignoring character: "${ex}".`); + return this.compiledGlyphs[character] = function (c, size) {}; }
- fillCtx.imageSmoothingEnabled = getImageSmoothingEnabled(fillCtx.mozCurrentTransform, img.interpolate); - drawImageAtIntegerCoords(fillCtx, scaled, 0, 0, scaled.width, scaled.height, 0, 0, width, height); - fillCtx.globalCompositeOperation = "source-in"; - - const inverse = _util.Util.transform(fillCtx.mozCurrentTransformInverse, [1, 0, 0, 1, -offsetX, -offsetY]); + if (this.isEvalSupported && _util.FeatureTest.isEvalSupported) { + const jsBuf = [];
- fillCtx.fillStyle = isPatternFill ? fillColor.getPattern(ctx, this, inverse, _pattern_helper.PathType.FILL) : fillColor; - fillCtx.fillRect(0, 0, width, height); + for (const current of cmds) { + const args = current.args !== undefined ? current.args.join(",") : ""; + jsBuf.push("c.", current.cmd, "(", args, ");\n"); + }
- if (cache && !isPatternFill) { - this.cachedCanvases.delete("fillCanvas"); - cache.set(cacheKey, fillCanvas.canvas); + return this.compiledGlyphs[character] = new Function("c", "size", jsBuf.join("")); }
- return { - canvas: fillCanvas.canvas, - offsetX: Math.round(offsetX), - offsetY: Math.round(offsetY) + return this.compiledGlyphs[character] = function (c, size) { + for (const current of cmds) { + if (current.cmd === "scale") { + current.args = [size, -size]; + } + + c[current.cmd].apply(c, current.args); + } }; }
- setLineWidth(width) { - if (width !== this.current.lineWidth) { - this._cachedScaleForStroking = null; - } +}
- this.current.lineWidth = width; - this.ctx.lineWidth = width; - } +exports.FontFaceObject = FontFaceObject;
- setLineCap(style) { - this.ctx.lineCap = LINE_CAP_STYLES[style]; - } +/***/ }), +/* 12 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
- setLineJoin(style) { - this.ctx.lineJoin = LINE_JOIN_STYLES[style]; - }
- setMiterLimit(limit) { - this.ctx.miterLimit = limit; - }
- setDash(dashArray, dashPhase) { - const ctx = this.ctx; +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.CanvasGraphics = void 0;
- if (ctx.setLineDash !== undefined) { - ctx.setLineDash(dashArray); - ctx.lineDashOffset = dashPhase; - } - } +var _util = __w_pdfjs_require__(1);
- setRenderingIntent(intent) {} +var _display_utils = __w_pdfjs_require__(4);
- setFlatness(flatness) {} +var _pattern_helper = __w_pdfjs_require__(13);
- setGState(states) { - for (let i = 0, ii = states.length; i < ii; i++) { - const state = states[i]; - const key = state[0]; - const value = state[1]; +var _image_utils = __w_pdfjs_require__(14);
- switch (key) { - case "LW": - this.setLineWidth(value); - break; +var _is_node = __w_pdfjs_require__(3);
- case "LC": - this.setLineCap(value); - break; +const MIN_FONT_SIZE = 16; +const MAX_FONT_SIZE = 100; +const MAX_GROUP_SIZE = 4096; +const EXECUTION_TIME = 15; +const EXECUTION_STEPS = 10; +const COMPILE_TYPE3_GLYPHS = true; +const MAX_SIZE_TO_COMPILE = 1000; +const FULL_CHUNK_HEIGHT = 16; +const LINEWIDTH_SCALE_FACTOR = 1.000001;
- case "LJ": - this.setLineJoin(value); - break; +function mirrorContextOperations(ctx, destCtx) { + if (ctx._removeMirroring) { + throw new Error("Context is already forwarding operations."); + }
- case "ML": - this.setMiterLimit(value); - break; + ctx.__originalSave = ctx.save; + ctx.__originalRestore = ctx.restore; + ctx.__originalRotate = ctx.rotate; + ctx.__originalScale = ctx.scale; + ctx.__originalTranslate = ctx.translate; + ctx.__originalTransform = ctx.transform; + ctx.__originalSetTransform = ctx.setTransform; + ctx.__originalResetTransform = ctx.resetTransform; + ctx.__originalClip = ctx.clip; + ctx.__originalMoveTo = ctx.moveTo; + ctx.__originalLineTo = ctx.lineTo; + ctx.__originalBezierCurveTo = ctx.bezierCurveTo; + ctx.__originalRect = ctx.rect; + ctx.__originalClosePath = ctx.closePath; + ctx.__originalBeginPath = ctx.beginPath;
- case "D": - this.setDash(value[0], value[1]); - break; + ctx._removeMirroring = () => { + ctx.save = ctx.__originalSave; + ctx.restore = ctx.__originalRestore; + ctx.rotate = ctx.__originalRotate; + ctx.scale = ctx.__originalScale; + ctx.translate = ctx.__originalTranslate; + ctx.transform = ctx.__originalTransform; + ctx.setTransform = ctx.__originalSetTransform; + ctx.resetTransform = ctx.__originalResetTransform; + ctx.clip = ctx.__originalClip; + ctx.moveTo = ctx.__originalMoveTo; + ctx.lineTo = ctx.__originalLineTo; + ctx.bezierCurveTo = ctx.__originalBezierCurveTo; + ctx.rect = ctx.__originalRect; + ctx.closePath = ctx.__originalClosePath; + ctx.beginPath = ctx.__originalBeginPath; + delete ctx._removeMirroring; + };
- case "RI": - this.setRenderingIntent(value); - break; + ctx.save = function ctxSave() { + destCtx.save();
- case "FL": - this.setFlatness(value); - break; + this.__originalSave(); + };
- case "Font": - this.setFont(value[0], value[1]); - break; + ctx.restore = function ctxRestore() { + destCtx.restore();
- case "CA": - this.current.strokeAlpha = state[1]; - break; + this.__originalRestore(); + };
- case "ca": - this.current.fillAlpha = state[1]; - this.ctx.globalAlpha = state[1]; - break; + ctx.translate = function ctxTranslate(x, y) { + destCtx.translate(x, y);
- case "BM": - this.ctx.globalCompositeOperation = value; - break; + this.__originalTranslate(x, y); + };
- case "SMask": - this.current.activeSMask = value ? this.tempSMask : null; - this.tempSMask = null; - this.checkSMaskState(); - break; + ctx.scale = function ctxScale(x, y) { + destCtx.scale(x, y);
- case "TR": - this.current.transferMaps = value; - } - } - } + this.__originalScale(x, y); + };
- get inSMaskMode() { - return !!this.suspendedCtx; - } + ctx.transform = function ctxTransform(a, b, c, d, e, f) { + destCtx.transform(a, b, c, d, e, f);
- checkSMaskState() { - const inSMaskMode = this.inSMaskMode; + this.__originalTransform(a, b, c, d, e, f); + };
- if (this.current.activeSMask && !inSMaskMode) { - this.beginSMaskMode(); - } else if (!this.current.activeSMask && inSMaskMode) { - this.endSMaskMode(); - } - } + ctx.setTransform = function ctxSetTransform(a, b, c, d, e, f) { + destCtx.setTransform(a, b, c, d, e, f);
- beginSMaskMode() { - if (this.inSMaskMode) { - throw new Error("beginSMaskMode called while already in smask mode"); - } + this.__originalSetTransform(a, b, c, d, e, f); + };
- const drawnWidth = this.ctx.canvas.width; - const drawnHeight = this.ctx.canvas.height; - const cacheId = "smaskGroupAt" + this.groupLevel; - const scratchCanvas = this.cachedCanvases.getCanvas(cacheId, drawnWidth, drawnHeight, true); - this.suspendedCtx = this.ctx; - this.ctx = scratchCanvas.context; - const ctx = this.ctx; - ctx.setTransform.apply(ctx, this.suspendedCtx.mozCurrentTransform); - copyCtxState(this.suspendedCtx, ctx); - mirrorContextOperations(ctx, this.suspendedCtx); - this.setGState([["BM", "source-over"], ["ca", 1], ["CA", 1]]); - } + ctx.resetTransform = function ctxResetTransform() { + destCtx.resetTransform();
- endSMaskMode() { - if (!this.inSMaskMode) { - throw new Error("endSMaskMode called while not in smask mode"); - } + this.__originalResetTransform(); + };
- this.ctx._removeMirroring(); + ctx.rotate = function ctxRotate(angle) { + destCtx.rotate(angle);
- copyCtxState(this.ctx, this.suspendedCtx); - this.ctx = this.suspendedCtx; - this.suspendedCtx = null; - } - - compose(dirtyBox) { - if (!this.current.activeSMask) { - return; - } - - if (!dirtyBox) { - dirtyBox = [0, 0, this.ctx.canvas.width, this.ctx.canvas.height]; - } else { - dirtyBox[0] = Math.floor(dirtyBox[0]); - dirtyBox[1] = Math.floor(dirtyBox[1]); - dirtyBox[2] = Math.ceil(dirtyBox[2]); - dirtyBox[3] = Math.ceil(dirtyBox[3]); - } + this.__originalRotate(angle); + };
- const smask = this.current.activeSMask; - const suspendedCtx = this.suspendedCtx; - composeSMask(suspendedCtx, smask, this.ctx, dirtyBox); - this.ctx.save(); - this.ctx.setTransform(1, 0, 0, 1, 0, 0); - this.ctx.clearRect(0, 0, this.ctx.canvas.width, this.ctx.canvas.height); - this.ctx.restore(); - } + ctx.clip = function ctxRotate(rule) { + destCtx.clip(rule);
- save() { - if (this.inSMaskMode) { - copyCtxState(this.ctx, this.suspendedCtx); - this.suspendedCtx.save(); - } else { - this.ctx.save(); - } + this.__originalClip(rule); + };
- const old = this.current; - this.stateStack.push(old); - this.current = old.clone(); - } + ctx.moveTo = function (x, y) { + destCtx.moveTo(x, y);
- restore() { - if (this.stateStack.length === 0 && this.inSMaskMode) { - this.endSMaskMode(); - } + this.__originalMoveTo(x, y); + };
- if (this.stateStack.length !== 0) { - this.current = this.stateStack.pop(); + ctx.lineTo = function (x, y) { + destCtx.lineTo(x, y);
- if (this.inSMaskMode) { - this.suspendedCtx.restore(); - copyCtxState(this.suspendedCtx, this.ctx); - } else { - this.ctx.restore(); - } + this.__originalLineTo(x, y); + };
- this.checkSMaskState(); - this.pendingClip = null; - this._cachedScaleForStroking = null; - this._cachedGetSinglePixelWidth = null; - } - } + ctx.bezierCurveTo = function (cp1x, cp1y, cp2x, cp2y, x, y) { + destCtx.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y);
- transform(a, b, c, d, e, f) { - this.ctx.transform(a, b, c, d, e, f); - this._cachedScaleForStroking = null; - this._cachedGetSinglePixelWidth = null; - } + this.__originalBezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y); + };
- constructPath(ops, args, minMax) { - const ctx = this.ctx; - const current = this.current; - let x = current.x, - y = current.y; - let startX, startY; - const currentTransform = ctx.mozCurrentTransform; - const isScalingMatrix = currentTransform[0] === 0 && currentTransform[3] === 0 || currentTransform[1] === 0 && currentTransform[2] === 0; - const minMaxForBezier = isScalingMatrix ? minMax.slice(0) : null; + ctx.rect = function (x, y, width, height) { + destCtx.rect(x, y, width, height);
- for (let i = 0, j = 0, ii = ops.length; i < ii; i++) { - switch (ops[i] | 0) { - case _util.OPS.rectangle: - x = args[j++]; - y = args[j++]; - const width = args[j++]; - const height = args[j++]; - const xw = x + width; - const yh = y + height; - ctx.moveTo(x, y); + this.__originalRect(x, y, width, height); + };
- if (width === 0 || height === 0) { - ctx.lineTo(xw, yh); - } else { - ctx.lineTo(xw, y); - ctx.lineTo(xw, yh); - ctx.lineTo(x, yh); - } + ctx.closePath = function () { + destCtx.closePath();
- if (!isScalingMatrix) { - current.updateRectMinMax(currentTransform, [x, y, xw, yh]); - } + this.__originalClosePath(); + };
- ctx.closePath(); - break; + ctx.beginPath = function () { + destCtx.beginPath();
- case _util.OPS.moveTo: - x = args[j++]; - y = args[j++]; - ctx.moveTo(x, y); + this.__originalBeginPath(); + }; +}
- if (!isScalingMatrix) { - current.updatePathMinMax(currentTransform, x, y); - } +function addContextCurrentTransform(ctx) { + if (ctx._transformStack) { + ctx._transformStack = []; + }
- break; + if (ctx.mozCurrentTransform) { + return; + }
- case _util.OPS.lineTo: - x = args[j++]; - y = args[j++]; - ctx.lineTo(x, y); + ctx._originalSave = ctx.save; + ctx._originalRestore = ctx.restore; + ctx._originalRotate = ctx.rotate; + ctx._originalScale = ctx.scale; + ctx._originalTranslate = ctx.translate; + ctx._originalTransform = ctx.transform; + ctx._originalSetTransform = ctx.setTransform; + ctx._originalResetTransform = ctx.resetTransform; + ctx._transformMatrix = ctx._transformMatrix || [1, 0, 0, 1, 0, 0]; + ctx._transformStack = [];
- if (!isScalingMatrix) { - current.updatePathMinMax(currentTransform, x, y); - } + try { + const desc = Object.getOwnPropertyDescriptor(Object.getPrototypeOf(ctx), "lineWidth"); + ctx._setLineWidth = desc.set; + ctx._getLineWidth = desc.get; + Object.defineProperty(ctx, "lineWidth", { + set: function setLineWidth(width) { + this._setLineWidth(width * LINEWIDTH_SCALE_FACTOR); + }, + get: function getLineWidth() { + return this._getLineWidth(); + } + }); + } catch (_) {}
- break; + Object.defineProperty(ctx, "mozCurrentTransform", { + get: function getCurrentTransform() { + return this._transformMatrix; + } + }); + Object.defineProperty(ctx, "mozCurrentTransformInverse", { + get: function getCurrentTransformInverse() { + const [a, b, c, d, e, f] = this._transformMatrix; + const ad_bc = a * d - b * c; + const bc_ad = b * c - a * d; + return [d / ad_bc, b / bc_ad, c / bc_ad, a / ad_bc, (d * e - c * f) / bc_ad, (b * e - a * f) / ad_bc]; + } + });
- case _util.OPS.curveTo: - startX = x; - startY = y; - x = args[j + 4]; - y = args[j + 5]; - ctx.bezierCurveTo(args[j], args[j + 1], args[j + 2], args[j + 3], x, y); - current.updateCurvePathMinMax(currentTransform, startX, startY, args[j], args[j + 1], args[j + 2], args[j + 3], x, y, minMaxForBezier); - j += 6; - break; + ctx.save = function ctxSave() { + const old = this._transformMatrix;
- case _util.OPS.curveTo2: - startX = x; - startY = y; - ctx.bezierCurveTo(x, y, args[j], args[j + 1], args[j + 2], args[j + 3]); - current.updateCurvePathMinMax(currentTransform, startX, startY, x, y, args[j], args[j + 1], args[j + 2], args[j + 3], minMaxForBezier); - x = args[j + 2]; - y = args[j + 3]; - j += 4; - break; + this._transformStack.push(old);
- case _util.OPS.curveTo3: - startX = x; - startY = y; - x = args[j + 2]; - y = args[j + 3]; - ctx.bezierCurveTo(args[j], args[j + 1], x, y, x, y); - current.updateCurvePathMinMax(currentTransform, startX, startY, args[j], args[j + 1], x, y, x, y, minMaxForBezier); - j += 4; - break; + this._transformMatrix = old.slice(0, 6);
- case _util.OPS.closePath: - ctx.closePath(); - break; - } - } + this._originalSave(); + };
- if (isScalingMatrix) { - current.updateScalingPathMinMax(currentTransform, minMaxForBezier); + ctx.restore = function ctxRestore() { + if (this._transformStack.length === 0) { + (0, _util.warn)("Tried to restore a ctx when the stack was already empty."); }
- current.setCurrentPoint(x, y); - } - - closePath() { - this.ctx.closePath(); - } + const prev = this._transformStack.pop();
- stroke(consumePath) { - consumePath = typeof consumePath !== "undefined" ? consumePath : true; - const ctx = this.ctx; - const strokeColor = this.current.strokeColor; - ctx.globalAlpha = this.current.strokeAlpha; + if (prev) { + this._transformMatrix = prev;
- if (this.contentVisible) { - if (typeof strokeColor === "object" && strokeColor?.getPattern) { - ctx.save(); - ctx.strokeStyle = strokeColor.getPattern(ctx, this, ctx.mozCurrentTransformInverse, _pattern_helper.PathType.STROKE); - this.rescaleAndStroke(false); - ctx.restore(); - } else { - this.rescaleAndStroke(true); - } + this._originalRestore(); } + };
- if (consumePath) { - this.consumePath(this.current.getClippedPathBoundingBox()); - } + ctx.translate = function ctxTranslate(x, y) { + const m = this._transformMatrix; + m[4] = m[0] * x + m[2] * y + m[4]; + m[5] = m[1] * x + m[3] * y + m[5];
- ctx.globalAlpha = this.current.fillAlpha; - } + this._originalTranslate(x, y); + };
- closeStroke() { - this.closePath(); - this.stroke(); - } + ctx.scale = function ctxScale(x, y) { + const m = this._transformMatrix; + m[0] *= x; + m[1] *= x; + m[2] *= y; + m[3] *= y;
- fill(consumePath) { - consumePath = typeof consumePath !== "undefined" ? consumePath : true; - const ctx = this.ctx; - const fillColor = this.current.fillColor; - const isPatternFill = this.current.patternFill; - let needRestore = false; + this._originalScale(x, y); + };
- if (isPatternFill) { - ctx.save(); - ctx.fillStyle = fillColor.getPattern(ctx, this, ctx.mozCurrentTransformInverse, _pattern_helper.PathType.FILL); - needRestore = true; - } + ctx.transform = function ctxTransform(a, b, c, d, e, f) { + const m = this._transformMatrix; + this._transformMatrix = [m[0] * a + m[2] * b, m[1] * a + m[3] * b, m[0] * c + m[2] * d, m[1] * c + m[3] * d, m[0] * e + m[2] * f + m[4], m[1] * e + m[3] * f + m[5]];
- const intersect = this.current.getClippedPathBoundingBox(); + ctx._originalTransform(a, b, c, d, e, f); + };
- if (this.contentVisible && intersect !== null) { - if (this.pendingEOFill) { - ctx.fill("evenodd"); - this.pendingEOFill = false; - } else { - ctx.fill(); - } - } + ctx.setTransform = function ctxSetTransform(a, b, c, d, e, f) { + this._transformMatrix = [a, b, c, d, e, f];
- if (needRestore) { - ctx.restore(); - } + ctx._originalSetTransform(a, b, c, d, e, f); + };
- if (consumePath) { - this.consumePath(intersect); - } - } + ctx.resetTransform = function ctxResetTransform() { + this._transformMatrix = [1, 0, 0, 1, 0, 0];
- eoFill() { - this.pendingEOFill = true; - this.fill(); - } + ctx._originalResetTransform(); + };
- fillStroke() { - this.fill(false); - this.stroke(false); - this.consumePath(); - } + ctx.rotate = function ctxRotate(angle) { + const cosValue = Math.cos(angle); + const sinValue = Math.sin(angle); + const m = this._transformMatrix; + this._transformMatrix = [m[0] * cosValue + m[2] * sinValue, m[1] * cosValue + m[3] * sinValue, m[0] * -sinValue + m[2] * cosValue, m[1] * -sinValue + m[3] * cosValue, m[4], m[5]];
- eoFillStroke() { - this.pendingEOFill = true; - this.fillStroke(); - } + this._originalRotate(angle); + }; +}
- closeFillStroke() { - this.closePath(); - this.fillStroke(); +class CachedCanvases { + constructor(canvasFactory) { + this.canvasFactory = canvasFactory; + this.cache = Object.create(null); }
- closeEOFillStroke() { - this.pendingEOFill = true; - this.closePath(); - this.fillStroke(); - } + getCanvas(id, width, height, trackTransform) { + let canvasEntry;
- endPath() { - this.consumePath(); - } + if (this.cache[id] !== undefined) { + canvasEntry = this.cache[id]; + this.canvasFactory.reset(canvasEntry, width, height); + canvasEntry.context.setTransform(1, 0, 0, 1, 0, 0); + } else { + canvasEntry = this.canvasFactory.create(width, height); + this.cache[id] = canvasEntry; + }
- clip() { - this.pendingClip = NORMAL_CLIP; - } + if (trackTransform) { + addContextCurrentTransform(canvasEntry.context); + }
- eoClip() { - this.pendingClip = EO_CLIP; + return canvasEntry; }
- beginText() { - this.current.textMatrix = _util.IDENTITY_MATRIX; - this.current.textMatrixScale = 1; - this.current.x = this.current.lineX = 0; - this.current.y = this.current.lineY = 0; + delete(id) { + delete this.cache[id]; }
- endText() { - const paths = this.pendingTextPaths; - const ctx = this.ctx; - - if (paths === undefined) { - ctx.beginPath(); - return; + clear() { + for (const id in this.cache) { + const canvasEntry = this.cache[id]; + this.canvasFactory.destroy(canvasEntry); + delete this.cache[id]; } + }
- ctx.save(); - ctx.beginPath(); +}
- for (let i = 0; i < paths.length; i++) { - const path = paths[i]; - ctx.setTransform.apply(ctx, path.transform); - ctx.translate(path.x, path.y); - path.addToPath(ctx, path.fontSize); - } +function drawImageAtIntegerCoords(ctx, srcImg, srcX, srcY, srcW, srcH, destX, destY, destW, destH) { + const [a, b, c, d, tx, ty] = ctx.mozCurrentTransform;
- ctx.restore(); - ctx.clip(); - ctx.beginPath(); - delete this.pendingTextPaths; + if (b === 0 && c === 0) { + const tlX = destX * a + tx; + const rTlX = Math.round(tlX); + const tlY = destY * d + ty; + const rTlY = Math.round(tlY); + const brX = (destX + destW) * a + tx; + const rWidth = Math.abs(Math.round(brX) - rTlX) || 1; + const brY = (destY + destH) * d + ty; + const rHeight = Math.abs(Math.round(brY) - rTlY) || 1; + ctx.setTransform(Math.sign(a), 0, 0, Math.sign(d), rTlX, rTlY); + ctx.drawImage(srcImg, srcX, srcY, srcW, srcH, 0, 0, rWidth, rHeight); + ctx.setTransform(a, b, c, d, tx, ty); + return [rWidth, rHeight]; }
- setCharSpacing(spacing) { - this.current.charSpacing = spacing; + if (a === 0 && d === 0) { + const tlX = destY * c + tx; + const rTlX = Math.round(tlX); + const tlY = destX * b + ty; + const rTlY = Math.round(tlY); + const brX = (destY + destH) * c + tx; + const rWidth = Math.abs(Math.round(brX) - rTlX) || 1; + const brY = (destX + destW) * b + ty; + const rHeight = Math.abs(Math.round(brY) - rTlY) || 1; + ctx.setTransform(0, Math.sign(b), Math.sign(c), 0, rTlX, rTlY); + ctx.drawImage(srcImg, srcX, srcY, srcW, srcH, 0, 0, rHeight, rWidth); + ctx.setTransform(a, b, c, d, tx, ty); + return [rHeight, rWidth]; }
- setWordSpacing(spacing) { - this.current.wordSpacing = spacing; - } + ctx.drawImage(srcImg, srcX, srcY, srcW, srcH, destX, destY, destW, destH); + const scaleX = Math.hypot(a, b); + const scaleY = Math.hypot(c, d); + return [scaleX * destW, scaleY * destH]; +}
- setHScale(scale) { - this.current.textHScale = scale / 100; - } +function compileType3Glyph(imgData) { + const { + width, + height + } = imgData;
- setLeading(leading) { - this.current.leading = -leading; + if (!COMPILE_TYPE3_GLYPHS || width > MAX_SIZE_TO_COMPILE || height > MAX_SIZE_TO_COMPILE) { + return null; }
- setFont(fontRefName, size) { - const fontObj = this.commonObjs.get(fontRefName); - const current = this.current; + const POINT_TO_PROCESS_LIMIT = 1000; + const POINT_TYPES = new Uint8Array([0, 2, 4, 0, 1, 0, 5, 4, 8, 10, 0, 8, 0, 2, 1, 0]); + const width1 = width + 1; + let points = new Uint8Array(width1 * (height + 1)); + let i, j, j0; + const lineSize = width + 7 & ~7; + let data = new Uint8Array(lineSize * height), + pos = 0;
- if (!fontObj) { - throw new Error(`Can't find font for ${fontRefName}`); + for (const elem of imgData.data) { + let mask = 128; + + while (mask > 0) { + data[pos++] = elem & mask ? 0 : 255; + mask >>= 1; } + }
- current.fontMatrix = fontObj.fontMatrix || _util.FONT_IDENTITY_MATRIX; + let count = 0; + pos = 0;
- if (current.fontMatrix[0] === 0 || current.fontMatrix[3] === 0) { - (0, _util.warn)("Invalid font matrix for font " + fontRefName); - } + if (data[pos] !== 0) { + points[0] = 1; + ++count; + }
- if (size < 0) { - size = -size; - current.fontDirection = -1; - } else { - current.fontDirection = 1; + for (j = 1; j < width; j++) { + if (data[pos] !== data[pos + 1]) { + points[j] = data[pos] ? 2 : 1; + ++count; }
- this.current.font = fontObj; - this.current.fontSize = size; + pos++; + }
- if (fontObj.isType3Font) { - return; - } + if (data[pos] !== 0) { + points[j] = 2; + ++count; + }
- const name = fontObj.loadedName || "sans-serif"; - let bold = "normal"; + for (i = 1; i < height; i++) { + pos = i * lineSize; + j0 = i * width1;
- if (fontObj.black) { - bold = "900"; - } else if (fontObj.bold) { - bold = "bold"; + if (data[pos - lineSize] !== data[pos]) { + points[j0] = data[pos] ? 1 : 8; + ++count; }
- const italic = fontObj.italic ? "italic" : "normal"; - const typeface = `"${name}", ${fontObj.fallbackName}`; - let browserFontSize = size; + let sum = (data[pos] ? 4 : 0) + (data[pos - lineSize] ? 8 : 0);
- if (size < MIN_FONT_SIZE) { - browserFontSize = MIN_FONT_SIZE; - } else if (size > MAX_FONT_SIZE) { - browserFontSize = MAX_FONT_SIZE; + for (j = 1; j < width; j++) { + sum = (sum >> 2) + (data[pos + 1] ? 4 : 0) + (data[pos - lineSize + 1] ? 8 : 0); + + if (POINT_TYPES[sum]) { + points[j0 + j] = POINT_TYPES[sum]; + ++count; + } + + pos++; }
- this.current.fontSizeScale = size / browserFontSize; - this.ctx.font = `${italic} ${bold} ${browserFontSize}px ${typeface}`; - } + if (data[pos - lineSize] !== data[pos]) { + points[j0 + j] = data[pos] ? 2 : 4; + ++count; + }
- setTextRenderingMode(mode) { - this.current.textRenderingMode = mode; + if (count > POINT_TO_PROCESS_LIMIT) { + return null; + } }
- setTextRise(rise) { - this.current.textRise = rise; - } + pos = lineSize * (height - 1); + j0 = i * width1;
- moveText(x, y) { - this.current.x = this.current.lineX += x; - this.current.y = this.current.lineY += y; + if (data[pos] !== 0) { + points[j0] = 8; + ++count; }
- setLeadingMoveText(x, y) { - this.setLeading(-y); - this.moveText(x, y); - } + for (j = 1; j < width; j++) { + if (data[pos] !== data[pos + 1]) { + points[j0 + j] = data[pos] ? 4 : 8; + ++count; + }
- setTextMatrix(a, b, c, d, e, f) { - this.current.textMatrix = [a, b, c, d, e, f]; - this.current.textMatrixScale = Math.hypot(a, b); - this.current.x = this.current.lineX = 0; - this.current.y = this.current.lineY = 0; + pos++; }
- nextLine() { - this.moveText(0, this.current.leading); + if (data[pos] !== 0) { + points[j0 + j] = 4; + ++count; }
- paintChar(character, x, y, patternTransform) { - const ctx = this.ctx; - const current = this.current; - const font = current.font; - const textRenderingMode = current.textRenderingMode; - const fontSize = current.fontSize / current.fontSizeScale; - const fillStrokeMode = textRenderingMode & _util.TextRenderingMode.FILL_STROKE_MASK; - const isAddToPathSet = !!(textRenderingMode & _util.TextRenderingMode.ADD_TO_PATH_FLAG); - const patternFill = current.patternFill && !font.missingFile; - let addToPath; + if (count > POINT_TO_PROCESS_LIMIT) { + return null; + }
- if (font.disableFontFace || isAddToPathSet || patternFill) { - addToPath = font.getPathGenerator(this.commonObjs, character); - } + const steps = new Int32Array([0, width1, -1, 0, -width1, 0, 0, 0, 1]); + let path, outlines, coords;
- if (font.disableFontFace || patternFill) { - ctx.save(); - ctx.translate(x, y); - ctx.beginPath(); - addToPath(ctx, fontSize); + if (!_is_node.isNodeJS) { + path = new Path2D(); + } else { + outlines = []; + }
- if (patternTransform) { - ctx.setTransform.apply(ctx, patternTransform); - } + for (i = 0; count && i <= height; i++) { + let p = i * width1; + const end = p + width;
- if (fillStrokeMode === _util.TextRenderingMode.FILL || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) { - ctx.fill(); - } + while (p < end && !points[p]) { + p++; + }
- if (fillStrokeMode === _util.TextRenderingMode.STROKE || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) { - ctx.stroke(); - } + if (p === end) { + continue; + }
- ctx.restore(); + if (path) { + path.moveTo(p % width1, i); } else { - if (fillStrokeMode === _util.TextRenderingMode.FILL || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) { - ctx.fillText(character, x, y); - } - - if (fillStrokeMode === _util.TextRenderingMode.STROKE || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) { - ctx.strokeText(character, x, y); - } + coords = [p % width1, i]; }
- if (isAddToPathSet) { - const paths = this.pendingTextPaths || (this.pendingTextPaths = []); - paths.push({ - transform: ctx.mozCurrentTransform, - x, - y, - fontSize, - addToPath - }); - } - } + const p0 = p; + let type = points[p];
- get isFontSubpixelAAEnabled() { - const { - context: ctx - } = this.cachedCanvases.getCanvas("isFontSubpixelAAEnabled", 10, 10, false); - ctx.scale(1.5, 1); - ctx.fillText("I", 0, 10); - const data = ctx.getImageData(0, 0, 10, 10).data; - let enabled = false; + do { + const step = steps[type];
- for (let i = 3; i < data.length; i += 4) { - if (data[i] > 0 && data[i] < 255) { - enabled = true; - break; - } - } + do { + p += step; + } while (!points[p]);
- return (0, _util.shadow)(this, "isFontSubpixelAAEnabled", enabled); - } + const pp = points[p];
- showText(glyphs) { - const current = this.current; - const font = current.font; + if (pp !== 5 && pp !== 10) { + type = pp; + points[p] = 0; + } else { + type = pp & 0x33 * type >> 4; + points[p] &= type >> 2 | type << 2; + }
- if (font.isType3Font) { - return this.showType3Text(glyphs); - } + if (path) { + path.lineTo(p % width1, p / width1 | 0); + } else { + coords.push(p % width1, p / width1 | 0); + }
- const fontSize = current.fontSize; + if (!points[p]) { + --count; + } + } while (p0 !== p);
- if (fontSize === 0) { - return undefined; + if (!path) { + outlines.push(coords); }
- const ctx = this.ctx; - const fontSizeScale = current.fontSizeScale; - const charSpacing = current.charSpacing; - const wordSpacing = current.wordSpacing; - const fontDirection = current.fontDirection; - const textHScale = current.textHScale * fontDirection; - const glyphsLength = glyphs.length; - const vertical = font.vertical; - const spacingDir = vertical ? 1 : -1; - const defaultVMetrics = font.defaultVMetrics; - const widthAdvanceScale = fontSize * current.fontMatrix[0]; - const simpleFillText = current.textRenderingMode === _util.TextRenderingMode.FILL && !font.disableFontFace && !current.patternFill; - ctx.save(); - ctx.transform.apply(ctx, current.textMatrix); - ctx.translate(current.x, current.y + current.textRise); - - if (fontDirection > 0) { - ctx.scale(textHScale, -1); - } else { - ctx.scale(textHScale, 1); - } + --i; + }
- let patternTransform; + data = null; + points = null;
- if (current.patternFill) { - ctx.save(); - const pattern = current.fillColor.getPattern(ctx, this, ctx.mozCurrentTransformInverse, _pattern_helper.PathType.FILL); - patternTransform = ctx.mozCurrentTransform; - ctx.restore(); - ctx.fillStyle = pattern; - } + const drawOutline = function (c) { + c.save(); + c.scale(1 / width, -1 / height); + c.translate(0, -height);
- let lineWidth = current.lineWidth; - const scale = current.textMatrixScale; + if (path) { + c.fill(path); + } else { + c.beginPath();
- if (scale === 0 || lineWidth === 0) { - const fillStrokeMode = current.textRenderingMode & _util.TextRenderingMode.FILL_STROKE_MASK; + for (const o of outlines) { + c.moveTo(o[0], o[1]);
- if (fillStrokeMode === _util.TextRenderingMode.STROKE || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) { - lineWidth = this.getSinglePixelWidth(); + for (let l = 2, ll = o.length; l < ll; l += 2) { + c.lineTo(o[l], o[l + 1]); + } } - } else { - lineWidth /= scale; - }
- if (fontSizeScale !== 1.0) { - ctx.scale(fontSizeScale, fontSizeScale); - lineWidth /= fontSizeScale; + c.fill(); }
- ctx.lineWidth = lineWidth; - let x = 0, - i; - - for (i = 0; i < glyphsLength; ++i) { - const glyph = glyphs[i]; - - if (typeof glyph === "number") { - x += spacingDir * glyph * fontSize / 1000; - continue; - } + c.beginPath(); + c.restore(); + };
- let restoreNeeded = false; - const spacing = (glyph.isSpace ? wordSpacing : 0) + charSpacing; - const character = glyph.fontChar; - const accent = glyph.accent; - let scaledX, scaledY; - let width = glyph.width; + return drawOutline; +}
- if (vertical) { - const vmetric = glyph.vmetric || defaultVMetrics; - const vx = -(glyph.vmetric ? vmetric[1] : width * 0.5) * widthAdvanceScale; - const vy = vmetric[2] * widthAdvanceScale; - width = vmetric ? -vmetric[0] : width; - scaledX = vx / fontSizeScale; - scaledY = (x + vy) / fontSizeScale; - } else { - scaledX = x / fontSizeScale; - scaledY = 0; - } - - if (font.remeasure && width > 0) { - const measuredWidth = ctx.measureText(character).width * 1000 / fontSize * fontSizeScale; - - if (width < measuredWidth && this.isFontSubpixelAAEnabled) { - const characterScaleX = width / measuredWidth; - restoreNeeded = true; - ctx.save(); - ctx.scale(characterScaleX, 1); - scaledX /= characterScaleX; - } else if (width !== measuredWidth) { - scaledX += (width - measuredWidth) / 2000 * fontSize / fontSizeScale; - } - } +class CanvasExtraState { + constructor(width, height) { + this.alphaIsShape = false; + this.fontSize = 0; + this.fontSizeScale = 1; + this.textMatrix = _util.IDENTITY_MATRIX; + this.textMatrixScale = 1; + this.fontMatrix = _util.FONT_IDENTITY_MATRIX; + this.leading = 0; + this.x = 0; + this.y = 0; + this.lineX = 0; + this.lineY = 0; + this.charSpacing = 0; + this.wordSpacing = 0; + this.textHScale = 1; + this.textRenderingMode = _util.TextRenderingMode.FILL; + this.textRise = 0; + this.fillColor = "#000000"; + this.strokeColor = "#000000"; + this.patternFill = false; + this.fillAlpha = 1; + this.strokeAlpha = 1; + this.lineWidth = 1; + this.activeSMask = null; + this.transferMaps = null; + this.startNewPathAndClipBox([0, 0, width, height]); + }
- if (this.contentVisible && (glyph.isInFont || font.missingFile)) { - if (simpleFillText && !accent) { - ctx.fillText(character, scaledX, scaledY); - } else { - this.paintChar(character, scaledX, scaledY, patternTransform); + clone() { + const clone = Object.create(this); + clone.clipBox = this.clipBox.slice(); + return clone; + }
- if (accent) { - const scaledAccentX = scaledX + fontSize * accent.offset.x / fontSizeScale; - const scaledAccentY = scaledY - fontSize * accent.offset.y / fontSizeScale; - this.paintChar(accent.fontChar, scaledAccentX, scaledAccentY, patternTransform); - } - } - } + setCurrentPoint(x, y) { + this.x = x; + this.y = y; + }
- let charWidth; + updatePathMinMax(transform, x, y) { + [x, y] = _util.Util.applyTransform([x, y], transform); + this.minX = Math.min(this.minX, x); + this.minY = Math.min(this.minY, y); + this.maxX = Math.max(this.maxX, x); + this.maxY = Math.max(this.maxY, y); + }
- if (vertical) { - charWidth = width * widthAdvanceScale - spacing * fontDirection; - } else { - charWidth = width * widthAdvanceScale + spacing * fontDirection; - } + updateRectMinMax(transform, rect) { + const p1 = _util.Util.applyTransform(rect, transform);
- x += charWidth; + const p2 = _util.Util.applyTransform(rect.slice(2), transform);
- if (restoreNeeded) { - ctx.restore(); - } - } + this.minX = Math.min(this.minX, p1[0], p2[0]); + this.minY = Math.min(this.minY, p1[1], p2[1]); + this.maxX = Math.max(this.maxX, p1[0], p2[0]); + this.maxY = Math.max(this.maxY, p1[1], p2[1]); + }
- if (vertical) { - current.y -= x; - } else { - current.x += x * textHScale; - } + updateScalingPathMinMax(transform, minMax) { + _util.Util.scaleMinMax(transform, minMax);
- ctx.restore(); - this.compose(); - return undefined; + this.minX = Math.min(this.minX, minMax[0]); + this.maxX = Math.max(this.maxX, minMax[1]); + this.minY = Math.min(this.minY, minMax[2]); + this.maxY = Math.max(this.maxY, minMax[3]); }
- showType3Text(glyphs) { - const ctx = this.ctx; - const current = this.current; - const font = current.font; - const fontSize = current.fontSize; - const fontDirection = current.fontDirection; - const spacingDir = font.vertical ? 1 : -1; - const charSpacing = current.charSpacing; - const wordSpacing = current.wordSpacing; - const textHScale = current.textHScale * fontDirection; - const fontMatrix = current.fontMatrix || _util.FONT_IDENTITY_MATRIX; - const glyphsLength = glyphs.length; - const isTextInvisible = current.textRenderingMode === _util.TextRenderingMode.INVISIBLE; - let i, glyph, width, spacingLength; + updateCurvePathMinMax(transform, x0, y0, x1, y1, x2, y2, x3, y3, minMax) { + const box = _util.Util.bezierBoundingBox(x0, y0, x1, y1, x2, y2, x3, y3);
- if (isTextInvisible || fontSize === 0) { + if (minMax) { + minMax[0] = Math.min(minMax[0], box[0], box[2]); + minMax[1] = Math.max(minMax[1], box[0], box[2]); + minMax[2] = Math.min(minMax[2], box[1], box[3]); + minMax[3] = Math.max(minMax[3], box[1], box[3]); return; }
- this._cachedScaleForStroking = null; - this._cachedGetSinglePixelWidth = null; - ctx.save(); - ctx.transform.apply(ctx, current.textMatrix); - ctx.translate(current.x, current.y); - ctx.scale(textHScale, fontDirection); - - for (i = 0; i < glyphsLength; ++i) { - glyph = glyphs[i]; - - if (typeof glyph === "number") { - spacingLength = spacingDir * glyph * fontSize / 1000; - this.ctx.translate(spacingLength, 0); - current.x += spacingLength * textHScale; - continue; - } - - const spacing = (glyph.isSpace ? wordSpacing : 0) + charSpacing; - const operatorList = font.charProcOperatorList[glyph.operatorListId]; + this.updateRectMinMax(transform, box); + }
- if (!operatorList) { - (0, _util.warn)(`Type3 character "${glyph.operatorListId}" is not available.`); - continue; - } + getPathBoundingBox(pathType = _pattern_helper.PathType.FILL, transform = null) { + const box = [this.minX, this.minY, this.maxX, this.maxY];
- if (this.contentVisible) { - this.processingType3 = glyph; - this.save(); - ctx.scale(fontSize, fontSize); - ctx.transform.apply(ctx, fontMatrix); - this.executeOperatorList(operatorList); - this.restore(); + if (pathType === _pattern_helper.PathType.STROKE) { + if (!transform) { + (0, _util.unreachable)("Stroke bounding box must include transform."); }
- const transformed = _util.Util.applyTransform([glyph.width, 0], fontMatrix); + const scale = _util.Util.singularValueDecompose2dScale(transform);
- width = transformed[0] * fontSize + spacing; - ctx.translate(width, 0); - current.x += width * textHScale; + const xStrokePad = scale[0] * this.lineWidth / 2; + const yStrokePad = scale[1] * this.lineWidth / 2; + box[0] -= xStrokePad; + box[1] -= yStrokePad; + box[2] += xStrokePad; + box[3] += yStrokePad; }
- ctx.restore(); - this.processingType3 = null; + return box; }
- setCharWidth(xWidth, yWidth) {} + updateClipFromPath() { + const intersect = _util.Util.intersect(this.clipBox, this.getPathBoundingBox());
- setCharWidthAndBounds(xWidth, yWidth, llx, lly, urx, ury) { - this.ctx.rect(llx, lly, urx - llx, ury - lly); - this.ctx.clip(); - this.endPath(); + this.startNewPathAndClipBox(intersect || [0, 0, 0, 0]); }
- getColorN_Pattern(IR) { - let pattern; - - if (IR[0] === "TilingPattern") { - const color = IR[1]; - const baseTransform = this.baseTransform || this.ctx.mozCurrentTransform.slice(); - const canvasGraphicsFactory = { - createCanvasGraphics: ctx => { - return new CanvasGraphics(ctx, this.commonObjs, this.objs, this.canvasFactory); - } - }; - pattern = new _pattern_helper.TilingPattern(IR, color, this.ctx, canvasGraphicsFactory, baseTransform); - } else { - pattern = this._getPattern(IR[1], IR[2]); - } - - return pattern; + isEmptyClip() { + return this.minX === Infinity; }
- setStrokeColorN() { - this.current.strokeColor = this.getColorN_Pattern(arguments); + startNewPathAndClipBox(box) { + this.clipBox = box; + this.minX = Infinity; + this.minY = Infinity; + this.maxX = 0; + this.maxY = 0; }
- setFillColorN() { - this.current.fillColor = this.getColorN_Pattern(arguments); - this.current.patternFill = true; + getClippedPathBoundingBox(pathType = _pattern_helper.PathType.FILL, transform = null) { + return _util.Util.intersect(this.clipBox, this.getPathBoundingBox(pathType, transform)); }
- setStrokeRGBColor(r, g, b) { - const color = this.selectColor?.(r, g, b) || _util.Util.makeHexColor(r, g, b); +}
- this.ctx.strokeStyle = color; - this.current.strokeColor = color; +function putBinaryImageData(ctx, imgData, transferMaps = null) { + if (typeof ImageData !== "undefined" && imgData instanceof ImageData) { + ctx.putImageData(imgData, 0, 0); + return; }
- setFillRGBColor(r, g, b) { - const color = this.selectColor?.(r, g, b) || _util.Util.makeHexColor(r, g, b); + const height = imgData.height, + width = imgData.width; + const partialChunkHeight = height % FULL_CHUNK_HEIGHT; + const fullChunks = (height - partialChunkHeight) / FULL_CHUNK_HEIGHT; + const totalChunks = partialChunkHeight === 0 ? fullChunks : fullChunks + 1; + const chunkImgData = ctx.createImageData(width, FULL_CHUNK_HEIGHT); + let srcPos = 0, + destPos; + const src = imgData.data; + const dest = chunkImgData.data; + let i, j, thisChunkHeight, elemsInThisChunk; + let transferMapRed, transferMapGreen, transferMapBlue, transferMapGray; + + if (transferMaps) { + switch (transferMaps.length) { + case 1: + transferMapRed = transferMaps[0]; + transferMapGreen = transferMaps[0]; + transferMapBlue = transferMaps[0]; + transferMapGray = transferMaps[0]; + break; + + case 4: + transferMapRed = transferMaps[0]; + transferMapGreen = transferMaps[1]; + transferMapBlue = transferMaps[2]; + transferMapGray = transferMaps[3]; + break; + } + } + + if (imgData.kind === _util.ImageKind.GRAYSCALE_1BPP) { + const srcLength = src.byteLength; + const dest32 = new Uint32Array(dest.buffer, 0, dest.byteLength >> 2); + const dest32DataLength = dest32.length; + const fullSrcDiff = width + 7 >> 3; + let white = 0xffffffff; + let black = _util.FeatureTest.isLittleEndian ? 0xff000000 : 0x000000ff; + + if (transferMapGray) { + if (transferMapGray[0] === 0xff && transferMapGray[0xff] === 0) { + [white, black] = [black, white]; + } + } + + for (i = 0; i < totalChunks; i++) { + thisChunkHeight = i < fullChunks ? FULL_CHUNK_HEIGHT : partialChunkHeight; + destPos = 0; + + for (j = 0; j < thisChunkHeight; j++) { + const srcDiff = srcLength - srcPos; + let k = 0; + const kEnd = srcDiff > fullSrcDiff ? width : srcDiff * 8 - 7; + const kEndUnrolled = kEnd & ~7; + let mask = 0; + let srcByte = 0; + + for (; k < kEndUnrolled; k += 8) { + srcByte = src[srcPos++]; + dest32[destPos++] = srcByte & 128 ? white : black; + dest32[destPos++] = srcByte & 64 ? white : black; + dest32[destPos++] = srcByte & 32 ? white : black; + dest32[destPos++] = srcByte & 16 ? white : black; + dest32[destPos++] = srcByte & 8 ? white : black; + dest32[destPos++] = srcByte & 4 ? white : black; + dest32[destPos++] = srcByte & 2 ? white : black; + dest32[destPos++] = srcByte & 1 ? white : black; + } + + for (; k < kEnd; k++) { + if (mask === 0) { + srcByte = src[srcPos++]; + mask = 128; + } + + dest32[destPos++] = srcByte & mask ? white : black; + mask >>= 1; + } + } + + while (destPos < dest32DataLength) { + dest32[destPos++] = 0; + } + + ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT); + } + } else if (imgData.kind === _util.ImageKind.RGBA_32BPP) { + const hasTransferMaps = !!(transferMapRed || transferMapGreen || transferMapBlue); + j = 0; + elemsInThisChunk = width * FULL_CHUNK_HEIGHT * 4; + + for (i = 0; i < fullChunks; i++) { + dest.set(src.subarray(srcPos, srcPos + elemsInThisChunk)); + srcPos += elemsInThisChunk; + + if (hasTransferMaps) { + for (let k = 0; k < elemsInThisChunk; k += 4) { + if (transferMapRed) { + dest[k + 0] = transferMapRed[dest[k + 0]]; + } + + if (transferMapGreen) { + dest[k + 1] = transferMapGreen[dest[k + 1]]; + } + + if (transferMapBlue) { + dest[k + 2] = transferMapBlue[dest[k + 2]]; + } + } + } + + ctx.putImageData(chunkImgData, 0, j); + j += FULL_CHUNK_HEIGHT; + } + + if (i < totalChunks) { + elemsInThisChunk = width * partialChunkHeight * 4; + dest.set(src.subarray(srcPos, srcPos + elemsInThisChunk)); + + if (hasTransferMaps) { + for (let k = 0; k < elemsInThisChunk; k += 4) { + if (transferMapRed) { + dest[k + 0] = transferMapRed[dest[k + 0]]; + } + + if (transferMapGreen) { + dest[k + 1] = transferMapGreen[dest[k + 1]]; + } + + if (transferMapBlue) { + dest[k + 2] = transferMapBlue[dest[k + 2]]; + } + } + } + + ctx.putImageData(chunkImgData, 0, j); + } + } else if (imgData.kind === _util.ImageKind.RGB_24BPP) { + const hasTransferMaps = !!(transferMapRed || transferMapGreen || transferMapBlue); + thisChunkHeight = FULL_CHUNK_HEIGHT; + elemsInThisChunk = width * thisChunkHeight; + + for (i = 0; i < totalChunks; i++) { + if (i >= fullChunks) { + thisChunkHeight = partialChunkHeight; + elemsInThisChunk = width * thisChunkHeight; + } + + destPos = 0; + + for (j = elemsInThisChunk; j--;) { + dest[destPos++] = src[srcPos++]; + dest[destPos++] = src[srcPos++]; + dest[destPos++] = src[srcPos++]; + dest[destPos++] = 255; + } + + if (hasTransferMaps) { + for (let k = 0; k < destPos; k += 4) { + if (transferMapRed) { + dest[k + 0] = transferMapRed[dest[k + 0]]; + } + + if (transferMapGreen) { + dest[k + 1] = transferMapGreen[dest[k + 1]]; + } + + if (transferMapBlue) { + dest[k + 2] = transferMapBlue[dest[k + 2]]; + } + } + } + + ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT); + } + } else { + throw new Error(`bad image kind: ${imgData.kind}`); + } +} + +function putBinaryImageMask(ctx, imgData) { + if (imgData.bitmap) { + ctx.drawImage(imgData.bitmap, 0, 0); + return; + } + + const height = imgData.height, + width = imgData.width; + const partialChunkHeight = height % FULL_CHUNK_HEIGHT; + const fullChunks = (height - partialChunkHeight) / FULL_CHUNK_HEIGHT; + const totalChunks = partialChunkHeight === 0 ? fullChunks : fullChunks + 1; + const chunkImgData = ctx.createImageData(width, FULL_CHUNK_HEIGHT); + let srcPos = 0; + const src = imgData.data; + const dest = chunkImgData.data; + + for (let i = 0; i < totalChunks; i++) { + const thisChunkHeight = i < fullChunks ? FULL_CHUNK_HEIGHT : partialChunkHeight; + ({ + srcPos + } = (0, _image_utils.applyMaskImageData)({ + src, + srcPos, + dest, + width, + height: thisChunkHeight + })); + ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT); + } +} + +function copyCtxState(sourceCtx, destCtx) { + const properties = ["strokeStyle", "fillStyle", "fillRule", "globalAlpha", "lineWidth", "lineCap", "lineJoin", "miterLimit", "globalCompositeOperation", "font"]; + + for (let i = 0, ii = properties.length; i < ii; i++) { + const property = properties[i]; + + if (sourceCtx[property] !== undefined) { + destCtx[property] = sourceCtx[property]; + } + } + + if (sourceCtx.setLineDash !== undefined) { + destCtx.setLineDash(sourceCtx.getLineDash()); + destCtx.lineDashOffset = sourceCtx.lineDashOffset; + } +} + +function resetCtxToDefault(ctx, foregroundColor) { + ctx.strokeStyle = ctx.fillStyle = foregroundColor || "#000000"; + ctx.fillRule = "nonzero"; + ctx.globalAlpha = 1; + ctx.lineWidth = 1; + ctx.lineCap = "butt"; + ctx.lineJoin = "miter"; + ctx.miterLimit = 10; + ctx.globalCompositeOperation = "source-over"; + ctx.font = "10px sans-serif"; + + if (ctx.setLineDash !== undefined) { + ctx.setLineDash([]); + ctx.lineDashOffset = 0; + } +} + +function composeSMaskBackdrop(bytes, r0, g0, b0) { + const length = bytes.length; + + for (let i = 3; i < length; i += 4) { + const alpha = bytes[i]; + + if (alpha === 0) { + bytes[i - 3] = r0; + bytes[i - 2] = g0; + bytes[i - 1] = b0; + } else if (alpha < 255) { + const alpha_ = 255 - alpha; + bytes[i - 3] = bytes[i - 3] * alpha + r0 * alpha_ >> 8; + bytes[i - 2] = bytes[i - 2] * alpha + g0 * alpha_ >> 8; + bytes[i - 1] = bytes[i - 1] * alpha + b0 * alpha_ >> 8; + } + } +} + +function composeSMaskAlpha(maskData, layerData, transferMap) { + const length = maskData.length; + const scale = 1 / 255; + + for (let i = 3; i < length; i += 4) { + const alpha = transferMap ? transferMap[maskData[i]] : maskData[i]; + layerData[i] = layerData[i] * alpha * scale | 0; + } +} + +function composeSMaskLuminosity(maskData, layerData, transferMap) { + const length = maskData.length; + + for (let i = 3; i < length; i += 4) { + const y = maskData[i - 3] * 77 + maskData[i - 2] * 152 + maskData[i - 1] * 28; + layerData[i] = transferMap ? layerData[i] * transferMap[y >> 8] >> 8 : layerData[i] * y >> 16; + } +} + +function genericComposeSMask(maskCtx, layerCtx, width, height, subtype, backdrop, transferMap, layerOffsetX, layerOffsetY, maskOffsetX, maskOffsetY) { + const hasBackdrop = !!backdrop; + const r0 = hasBackdrop ? backdrop[0] : 0; + const g0 = hasBackdrop ? backdrop[1] : 0; + const b0 = hasBackdrop ? backdrop[2] : 0; + let composeFn; + + if (subtype === "Luminosity") { + composeFn = composeSMaskLuminosity; + } else { + composeFn = composeSMaskAlpha; + } + + const PIXELS_TO_PROCESS = 1048576; + const chunkSize = Math.min(height, Math.ceil(PIXELS_TO_PROCESS / width)); + + for (let row = 0; row < height; row += chunkSize) { + const chunkHeight = Math.min(chunkSize, height - row); + const maskData = maskCtx.getImageData(layerOffsetX - maskOffsetX, row + (layerOffsetY - maskOffsetY), width, chunkHeight); + const layerData = layerCtx.getImageData(layerOffsetX, row + layerOffsetY, width, chunkHeight); + + if (hasBackdrop) { + composeSMaskBackdrop(maskData.data, r0, g0, b0); + } + + composeFn(maskData.data, layerData.data, transferMap); + layerCtx.putImageData(layerData, layerOffsetX, row + layerOffsetY); + } +} + +function composeSMask(ctx, smask, layerCtx, layerBox) { + const layerOffsetX = layerBox[0]; + const layerOffsetY = layerBox[1]; + const layerWidth = layerBox[2] - layerOffsetX; + const layerHeight = layerBox[3] - layerOffsetY; + + if (layerWidth === 0 || layerHeight === 0) { + return; + } + + genericComposeSMask(smask.context, layerCtx, layerWidth, layerHeight, smask.subtype, smask.backdrop, smask.transferMap, layerOffsetX, layerOffsetY, smask.offsetX, smask.offsetY); + ctx.save(); + ctx.globalAlpha = 1; + ctx.globalCompositeOperation = "source-over"; + ctx.setTransform(1, 0, 0, 1, 0, 0); + ctx.drawImage(layerCtx.canvas, 0, 0); + ctx.restore(); +} + +function getImageSmoothingEnabled(transform, interpolate) { + const scale = _util.Util.singularValueDecompose2dScale(transform); + + scale[0] = Math.fround(scale[0]); + scale[1] = Math.fround(scale[1]); + const actualScale = Math.fround((globalThis.devicePixelRatio || 1) * _display_utils.PixelsPerInch.PDF_TO_CSS_UNITS); + + if (interpolate !== undefined) { + return interpolate; + } else if (scale[0] <= actualScale || scale[1] <= actualScale) { + return true; + } + + return false; +} + +const LINE_CAP_STYLES = ["butt", "round", "square"]; +const LINE_JOIN_STYLES = ["miter", "round", "bevel"]; +const NORMAL_CLIP = {}; +const EO_CLIP = {}; + +class CanvasGraphics { + constructor(canvasCtx, commonObjs, objs, canvasFactory, imageLayer, optionalContentConfig, annotationCanvasMap, pageColors) { + this.ctx = canvasCtx; + this.current = new CanvasExtraState(this.ctx.canvas.width, this.ctx.canvas.height); + this.stateStack = []; + this.pendingClip = null; + this.pendingEOFill = false; + this.res = null; + this.xobjs = null; + this.commonObjs = commonObjs; + this.objs = objs; + this.canvasFactory = canvasFactory; + this.imageLayer = imageLayer; + this.groupStack = []; + this.processingType3 = null; + this.baseTransform = null; + this.baseTransformStack = []; + this.groupLevel = 0; + this.smaskStack = []; + this.smaskCounter = 0; + this.tempSMask = null; + this.suspendedCtx = null; + this.contentVisible = true; + this.markedContentStack = []; + this.optionalContentConfig = optionalContentConfig; + this.cachedCanvases = new CachedCanvases(this.canvasFactory); + this.cachedPatterns = new Map(); + this.annotationCanvasMap = annotationCanvasMap; + this.viewportScale = 1; + this.outputScaleX = 1; + this.outputScaleY = 1; + this.backgroundColor = pageColors?.background || null; + this.foregroundColor = pageColors?.foreground || null; + + if (canvasCtx) { + addContextCurrentTransform(canvasCtx); + } + + this._cachedScaleForStroking = null; + this._cachedGetSinglePixelWidth = null; + this._cachedBitmapsMap = new Map(); + } + + getObject(data, fallback = null) { + if (typeof data === "string") { + return data.startsWith("g_") ? this.commonObjs.get(data) : this.objs.get(data); + } + + return fallback; + } + + beginDrawing({ + transform, + viewport, + transparency = false, + background = null + }) { + const width = this.ctx.canvas.width; + const height = this.ctx.canvas.height; + const defaultBackgroundColor = background || "#ffffff"; + this.ctx.save(); + + if (this.foregroundColor && this.backgroundColor) { + this.ctx.fillStyle = this.foregroundColor; + const fg = this.foregroundColor = this.ctx.fillStyle; + this.ctx.fillStyle = this.backgroundColor; + const bg = this.backgroundColor = this.ctx.fillStyle; + let isValidDefaultBg = true; + let defaultBg = defaultBackgroundColor; + + if (fg === "#000000" && bg === "#ffffff" || fg === bg || !isValidDefaultBg) { + this.foregroundColor = this.backgroundColor = null; + } else { + const [rB, gB, bB] = (0, _display_utils.getRGB)(defaultBg); + + const newComp = x => { + x /= 255; + return x <= 0.03928 ? x / 12.92 : ((x + 0.055) / 1.055) ** 2.4; + }; + + const lumB = Math.round(0.2126 * newComp(rB) + 0.7152 * newComp(gB) + 0.0722 * newComp(bB)); + + this.selectColor = (r, g, b) => { + const lumC = 0.2126 * newComp(r) + 0.7152 * newComp(g) + 0.0722 * newComp(b); + return Math.round(lumC) === lumB ? bg : fg; + }; + } + } + + this.ctx.fillStyle = this.backgroundColor || defaultBackgroundColor; + this.ctx.fillRect(0, 0, width, height); + this.ctx.restore(); + + if (transparency) { + const transparentCanvas = this.cachedCanvases.getCanvas("transparent", width, height, true); + this.compositeCtx = this.ctx; + this.transparentCanvas = transparentCanvas.canvas; + this.ctx = transparentCanvas.context; + this.ctx.save(); + this.ctx.transform.apply(this.ctx, this.compositeCtx.mozCurrentTransform); + } + + this.ctx.save(); + resetCtxToDefault(this.ctx, this.foregroundColor); + + if (transform) { + this.ctx.transform.apply(this.ctx, transform); + this.outputScaleX = transform[0]; + this.outputScaleY = transform[0]; + } + + this.ctx.transform.apply(this.ctx, viewport.transform); + this.viewportScale = viewport.scale; + this.baseTransform = this.ctx.mozCurrentTransform.slice(); + + if (this.imageLayer) { + this.imageLayer.beginLayout(); + } + } + + executeOperatorList(operatorList, executionStartIdx, continueCallback, stepper) { + const argsArray = operatorList.argsArray; + const fnArray = operatorList.fnArray; + let i = executionStartIdx || 0; + const argsArrayLen = argsArray.length; + + if (argsArrayLen === i) { + return i; + } + + const chunkOperations = argsArrayLen - i > EXECUTION_STEPS && typeof continueCallback === "function"; + const endTime = chunkOperations ? Date.now() + EXECUTION_TIME : 0; + let steps = 0; + const commonObjs = this.commonObjs; + const objs = this.objs; + let fnId; + + while (true) { + if (stepper !== undefined && i === stepper.nextBreakPoint) { + stepper.breakIt(i, continueCallback); + return i; + } + + fnId = fnArray[i]; + + if (fnId !== _util.OPS.dependency) { + this[fnId].apply(this, argsArray[i]); + } else { + for (const depObjId of argsArray[i]) { + const objsPool = depObjId.startsWith("g_") ? commonObjs : objs; + + if (!objsPool.has(depObjId)) { + objsPool.get(depObjId, continueCallback); + return i; + } + } + } + + i++; + + if (i === argsArrayLen) { + return i; + } + + if (chunkOperations && ++steps > EXECUTION_STEPS) { + if (Date.now() > endTime) { + continueCallback(); + return i; + } + + steps = 0; + } + } + } + + #restoreInitialState() { + while (this.stateStack.length || this.inSMaskMode) { + this.restore(); + } + + this.ctx.restore(); + + if (this.transparentCanvas) { + this.ctx = this.compositeCtx; + this.ctx.save(); + this.ctx.setTransform(1, 0, 0, 1, 0, 0); + this.ctx.drawImage(this.transparentCanvas, 0, 0); + this.ctx.restore(); + this.transparentCanvas = null; + } + } + + endDrawing() { + this.#restoreInitialState(); + this.cachedCanvases.clear(); + this.cachedPatterns.clear(); + + for (const cache of this._cachedBitmapsMap.values()) { + for (const canvas of cache.values()) { + if (typeof HTMLCanvasElement !== "undefined" && canvas instanceof HTMLCanvasElement) { + canvas.width = canvas.height = 0; + } + } + + cache.clear(); + } + + this._cachedBitmapsMap.clear(); + + if (this.imageLayer) { + this.imageLayer.endLayout(); + } + } + + _scaleImage(img, inverseTransform) { + const width = img.width; + const height = img.height; + let widthScale = Math.max(Math.hypot(inverseTransform[0], inverseTransform[1]), 1); + let heightScale = Math.max(Math.hypot(inverseTransform[2], inverseTransform[3]), 1); + let paintWidth = width, + paintHeight = height; + let tmpCanvasId = "prescale1"; + let tmpCanvas, tmpCtx; + + while (widthScale > 2 && paintWidth > 1 || heightScale > 2 && paintHeight > 1) { + let newWidth = paintWidth, + newHeight = paintHeight; + + if (widthScale > 2 && paintWidth > 1) { + newWidth = Math.ceil(paintWidth / 2); + widthScale /= paintWidth / newWidth; + } + + if (heightScale > 2 && paintHeight > 1) { + newHeight = Math.ceil(paintHeight / 2); + heightScale /= paintHeight / newHeight; + } + + tmpCanvas = this.cachedCanvases.getCanvas(tmpCanvasId, newWidth, newHeight, false); + tmpCtx = tmpCanvas.context; + tmpCtx.clearRect(0, 0, newWidth, newHeight); + tmpCtx.drawImage(img, 0, 0, paintWidth, paintHeight, 0, 0, newWidth, newHeight); + img = tmpCanvas.canvas; + paintWidth = newWidth; + paintHeight = newHeight; + tmpCanvasId = tmpCanvasId === "prescale1" ? "prescale2" : "prescale1"; + } + + return { + img, + paintWidth, + paintHeight + }; + } + + _createMaskCanvas(img) { + const ctx = this.ctx; + const { + width, + height + } = img; + const fillColor = this.current.fillColor; + const isPatternFill = this.current.patternFill; + const currentTransform = ctx.mozCurrentTransform; + let cache, cacheKey, scaled, maskCanvas; + + if ((img.bitmap || img.data) && img.count > 1) { + const mainKey = img.bitmap || img.data.buffer; + const withoutTranslation = currentTransform.slice(0, 4); + cacheKey = JSON.stringify(isPatternFill ? withoutTranslation : [withoutTranslation, fillColor]); + cache = this._cachedBitmapsMap.get(mainKey); + + if (!cache) { + cache = new Map(); + + this._cachedBitmapsMap.set(mainKey, cache); + } + + const cachedImage = cache.get(cacheKey); + + if (cachedImage && !isPatternFill) { + const offsetX = Math.round(Math.min(currentTransform[0], currentTransform[2]) + currentTransform[4]); + const offsetY = Math.round(Math.min(currentTransform[1], currentTransform[3]) + currentTransform[5]); + return { + canvas: cachedImage, + offsetX, + offsetY + }; + } + + scaled = cachedImage; + } + + if (!scaled) { + maskCanvas = this.cachedCanvases.getCanvas("maskCanvas", width, height, false); + putBinaryImageMask(maskCanvas.context, img); + } + + let maskToCanvas = _util.Util.transform(currentTransform, [1 / width, 0, 0, -1 / height, 0, 0]); + + maskToCanvas = _util.Util.transform(maskToCanvas, [1, 0, 0, 1, 0, -height]); + + const cord1 = _util.Util.applyTransform([0, 0], maskToCanvas); + + const cord2 = _util.Util.applyTransform([width, height], maskToCanvas); + + const rect = _util.Util.normalizeRect([cord1[0], cord1[1], cord2[0], cord2[1]]); + + const drawnWidth = Math.round(rect[2] - rect[0]) || 1; + const drawnHeight = Math.round(rect[3] - rect[1]) || 1; + const fillCanvas = this.cachedCanvases.getCanvas("fillCanvas", drawnWidth, drawnHeight, true); + const fillCtx = fillCanvas.context; + const offsetX = Math.min(cord1[0], cord2[0]); + const offsetY = Math.min(cord1[1], cord2[1]); + fillCtx.translate(-offsetX, -offsetY); + fillCtx.transform.apply(fillCtx, maskToCanvas); + + if (!scaled) { + scaled = this._scaleImage(maskCanvas.canvas, fillCtx.mozCurrentTransformInverse); + scaled = scaled.img; + + if (cache && isPatternFill) { + cache.set(cacheKey, scaled); + } + } + + fillCtx.imageSmoothingEnabled = getImageSmoothingEnabled(fillCtx.mozCurrentTransform, img.interpolate); + drawImageAtIntegerCoords(fillCtx, scaled, 0, 0, scaled.width, scaled.height, 0, 0, width, height); + fillCtx.globalCompositeOperation = "source-in"; + + const inverse = _util.Util.transform(fillCtx.mozCurrentTransformInverse, [1, 0, 0, 1, -offsetX, -offsetY]); + + fillCtx.fillStyle = isPatternFill ? fillColor.getPattern(ctx, this, inverse, _pattern_helper.PathType.FILL) : fillColor; + fillCtx.fillRect(0, 0, width, height); + + if (cache && !isPatternFill) { + this.cachedCanvases.delete("fillCanvas"); + cache.set(cacheKey, fillCanvas.canvas); + } + + return { + canvas: fillCanvas.canvas, + offsetX: Math.round(offsetX), + offsetY: Math.round(offsetY) + }; + } + + setLineWidth(width) { + if (width !== this.current.lineWidth) { + this._cachedScaleForStroking = null; + } + + this.current.lineWidth = width; + this.ctx.lineWidth = width; + } + + setLineCap(style) { + this.ctx.lineCap = LINE_CAP_STYLES[style]; + } + + setLineJoin(style) { + this.ctx.lineJoin = LINE_JOIN_STYLES[style]; + } + + setMiterLimit(limit) { + this.ctx.miterLimit = limit; + } + + setDash(dashArray, dashPhase) { + const ctx = this.ctx; + + if (ctx.setLineDash !== undefined) { + ctx.setLineDash(dashArray); + ctx.lineDashOffset = dashPhase; + } + } + + setRenderingIntent(intent) {} + + setFlatness(flatness) {} + + setGState(states) { + for (let i = 0, ii = states.length; i < ii; i++) { + const state = states[i]; + const key = state[0]; + const value = state[1]; + + switch (key) { + case "LW": + this.setLineWidth(value); + break; + + case "LC": + this.setLineCap(value); + break; + + case "LJ": + this.setLineJoin(value); + break; + + case "ML": + this.setMiterLimit(value); + break; + + case "D": + this.setDash(value[0], value[1]); + break; + + case "RI": + this.setRenderingIntent(value); + break; + + case "FL": + this.setFlatness(value); + break; + + case "Font": + this.setFont(value[0], value[1]); + break; + + case "CA": + this.current.strokeAlpha = state[1]; + break; + + case "ca": + this.current.fillAlpha = state[1]; + this.ctx.globalAlpha = state[1]; + break; + + case "BM": + this.ctx.globalCompositeOperation = value; + break; + + case "SMask": + this.current.activeSMask = value ? this.tempSMask : null; + this.tempSMask = null; + this.checkSMaskState(); + break; + + case "TR": + this.current.transferMaps = value; + } + } + } + + get inSMaskMode() { + return !!this.suspendedCtx; + } + + checkSMaskState() { + const inSMaskMode = this.inSMaskMode; + + if (this.current.activeSMask && !inSMaskMode) { + this.beginSMaskMode(); + } else if (!this.current.activeSMask && inSMaskMode) { + this.endSMaskMode(); + } + } + + beginSMaskMode() { + if (this.inSMaskMode) { + throw new Error("beginSMaskMode called while already in smask mode"); + } + + const drawnWidth = this.ctx.canvas.width; + const drawnHeight = this.ctx.canvas.height; + const cacheId = "smaskGroupAt" + this.groupLevel; + const scratchCanvas = this.cachedCanvases.getCanvas(cacheId, drawnWidth, drawnHeight, true); + this.suspendedCtx = this.ctx; + this.ctx = scratchCanvas.context; + const ctx = this.ctx; + ctx.setTransform.apply(ctx, this.suspendedCtx.mozCurrentTransform); + copyCtxState(this.suspendedCtx, ctx); + mirrorContextOperations(ctx, this.suspendedCtx); + this.setGState([["BM", "source-over"], ["ca", 1], ["CA", 1]]); + } + + endSMaskMode() { + if (!this.inSMaskMode) { + throw new Error("endSMaskMode called while not in smask mode"); + } + + this.ctx._removeMirroring(); + + copyCtxState(this.ctx, this.suspendedCtx); + this.ctx = this.suspendedCtx; + this.suspendedCtx = null; + } + + compose(dirtyBox) { + if (!this.current.activeSMask) { + return; + } + + if (!dirtyBox) { + dirtyBox = [0, 0, this.ctx.canvas.width, this.ctx.canvas.height]; + } else { + dirtyBox[0] = Math.floor(dirtyBox[0]); + dirtyBox[1] = Math.floor(dirtyBox[1]); + dirtyBox[2] = Math.ceil(dirtyBox[2]); + dirtyBox[3] = Math.ceil(dirtyBox[3]); + } + + const smask = this.current.activeSMask; + const suspendedCtx = this.suspendedCtx; + composeSMask(suspendedCtx, smask, this.ctx, dirtyBox); + this.ctx.save(); + this.ctx.setTransform(1, 0, 0, 1, 0, 0); + this.ctx.clearRect(0, 0, this.ctx.canvas.width, this.ctx.canvas.height); + this.ctx.restore(); + } + + save() { + if (this.inSMaskMode) { + copyCtxState(this.ctx, this.suspendedCtx); + this.suspendedCtx.save(); + } else { + this.ctx.save(); + } + + const old = this.current; + this.stateStack.push(old); + this.current = old.clone(); + } + + restore() { + if (this.stateStack.length === 0 && this.inSMaskMode) { + this.endSMaskMode(); + } + + if (this.stateStack.length !== 0) { + this.current = this.stateStack.pop(); + + if (this.inSMaskMode) { + this.suspendedCtx.restore(); + copyCtxState(this.suspendedCtx, this.ctx); + } else { + this.ctx.restore(); + } + + this.checkSMaskState(); + this.pendingClip = null; + this._cachedScaleForStroking = null; + this._cachedGetSinglePixelWidth = null; + } + } + + transform(a, b, c, d, e, f) { + this.ctx.transform(a, b, c, d, e, f); + this._cachedScaleForStroking = null; + this._cachedGetSinglePixelWidth = null; + } + + constructPath(ops, args, minMax) { + const ctx = this.ctx; + const current = this.current; + let x = current.x, + y = current.y; + let startX, startY; + const currentTransform = ctx.mozCurrentTransform; + const isScalingMatrix = currentTransform[0] === 0 && currentTransform[3] === 0 || currentTransform[1] === 0 && currentTransform[2] === 0; + const minMaxForBezier = isScalingMatrix ? minMax.slice(0) : null; + + for (let i = 0, j = 0, ii = ops.length; i < ii; i++) { + switch (ops[i] | 0) { + case _util.OPS.rectangle: + x = args[j++]; + y = args[j++]; + const width = args[j++]; + const height = args[j++]; + const xw = x + width; + const yh = y + height; + ctx.moveTo(x, y); + + if (width === 0 || height === 0) { + ctx.lineTo(xw, yh); + } else { + ctx.lineTo(xw, y); + ctx.lineTo(xw, yh); + ctx.lineTo(x, yh); + } + + if (!isScalingMatrix) { + current.updateRectMinMax(currentTransform, [x, y, xw, yh]); + } + + ctx.closePath(); + break; + + case _util.OPS.moveTo: + x = args[j++]; + y = args[j++]; + ctx.moveTo(x, y); + + if (!isScalingMatrix) { + current.updatePathMinMax(currentTransform, x, y); + } + + break; + + case _util.OPS.lineTo: + x = args[j++]; + y = args[j++]; + ctx.lineTo(x, y); + + if (!isScalingMatrix) { + current.updatePathMinMax(currentTransform, x, y); + } + + break; + + case _util.OPS.curveTo: + startX = x; + startY = y; + x = args[j + 4]; + y = args[j + 5]; + ctx.bezierCurveTo(args[j], args[j + 1], args[j + 2], args[j + 3], x, y); + current.updateCurvePathMinMax(currentTransform, startX, startY, args[j], args[j + 1], args[j + 2], args[j + 3], x, y, minMaxForBezier); + j += 6; + break; + + case _util.OPS.curveTo2: + startX = x; + startY = y; + ctx.bezierCurveTo(x, y, args[j], args[j + 1], args[j + 2], args[j + 3]); + current.updateCurvePathMinMax(currentTransform, startX, startY, x, y, args[j], args[j + 1], args[j + 2], args[j + 3], minMaxForBezier); + x = args[j + 2]; + y = args[j + 3]; + j += 4; + break; + + case _util.OPS.curveTo3: + startX = x; + startY = y; + x = args[j + 2]; + y = args[j + 3]; + ctx.bezierCurveTo(args[j], args[j + 1], x, y, x, y); + current.updateCurvePathMinMax(currentTransform, startX, startY, args[j], args[j + 1], x, y, x, y, minMaxForBezier); + j += 4; + break; + + case _util.OPS.closePath: + ctx.closePath(); + break; + } + } + + if (isScalingMatrix) { + current.updateScalingPathMinMax(currentTransform, minMaxForBezier); + } + + current.setCurrentPoint(x, y); + } + + closePath() { + this.ctx.closePath(); + } + + stroke(consumePath) { + consumePath = typeof consumePath !== "undefined" ? consumePath : true; + const ctx = this.ctx; + const strokeColor = this.current.strokeColor; + ctx.globalAlpha = this.current.strokeAlpha; + + if (this.contentVisible) { + if (typeof strokeColor === "object" && strokeColor?.getPattern) { + ctx.save(); + ctx.strokeStyle = strokeColor.getPattern(ctx, this, ctx.mozCurrentTransformInverse, _pattern_helper.PathType.STROKE); + this.rescaleAndStroke(false); + ctx.restore(); + } else { + this.rescaleAndStroke(true); + } + } + + if (consumePath) { + this.consumePath(this.current.getClippedPathBoundingBox()); + } + + ctx.globalAlpha = this.current.fillAlpha; + } + + closeStroke() { + this.closePath(); + this.stroke(); + } + + fill(consumePath) { + consumePath = typeof consumePath !== "undefined" ? consumePath : true; + const ctx = this.ctx; + const fillColor = this.current.fillColor; + const isPatternFill = this.current.patternFill; + let needRestore = false; + + if (isPatternFill) { + ctx.save(); + ctx.fillStyle = fillColor.getPattern(ctx, this, ctx.mozCurrentTransformInverse, _pattern_helper.PathType.FILL); + needRestore = true; + } + + const intersect = this.current.getClippedPathBoundingBox(); + + if (this.contentVisible && intersect !== null) { + if (this.pendingEOFill) { + ctx.fill("evenodd"); + this.pendingEOFill = false; + } else { + ctx.fill(); + } + } + + if (needRestore) { + ctx.restore(); + } + + if (consumePath) { + this.consumePath(intersect); + } + } + + eoFill() { + this.pendingEOFill = true; + this.fill(); + } + + fillStroke() { + this.fill(false); + this.stroke(false); + this.consumePath(); + } + + eoFillStroke() { + this.pendingEOFill = true; + this.fillStroke(); + } + + closeFillStroke() { + this.closePath(); + this.fillStroke(); + } + + closeEOFillStroke() { + this.pendingEOFill = true; + this.closePath(); + this.fillStroke(); + } + + endPath() { + this.consumePath(); + } + + clip() { + this.pendingClip = NORMAL_CLIP; + } + + eoClip() { + this.pendingClip = EO_CLIP; + } + + beginText() { + this.current.textMatrix = _util.IDENTITY_MATRIX; + this.current.textMatrixScale = 1; + this.current.x = this.current.lineX = 0; + this.current.y = this.current.lineY = 0; + } + + endText() { + const paths = this.pendingTextPaths; + const ctx = this.ctx; + + if (paths === undefined) { + ctx.beginPath(); + return; + } + + ctx.save(); + ctx.beginPath(); + + for (const path of paths) { + ctx.setTransform.apply(ctx, path.transform); + ctx.translate(path.x, path.y); + path.addToPath(ctx, path.fontSize); + } + + ctx.restore(); + ctx.clip(); + ctx.beginPath(); + delete this.pendingTextPaths; + } + + setCharSpacing(spacing) { + this.current.charSpacing = spacing; + } + + setWordSpacing(spacing) { + this.current.wordSpacing = spacing; + } + + setHScale(scale) { + this.current.textHScale = scale / 100; + } + + setLeading(leading) { + this.current.leading = -leading; + } + + setFont(fontRefName, size) { + const fontObj = this.commonObjs.get(fontRefName); + const current = this.current; + + if (!fontObj) { + throw new Error(`Can't find font for ${fontRefName}`); + } + + current.fontMatrix = fontObj.fontMatrix || _util.FONT_IDENTITY_MATRIX; + + if (current.fontMatrix[0] === 0 || current.fontMatrix[3] === 0) { + (0, _util.warn)("Invalid font matrix for font " + fontRefName); + } + + if (size < 0) { + size = -size; + current.fontDirection = -1; + } else { + current.fontDirection = 1; + } + + this.current.font = fontObj; + this.current.fontSize = size; + + if (fontObj.isType3Font) { + return; + } + + const name = fontObj.loadedName || "sans-serif"; + let bold = "normal"; + + if (fontObj.black) { + bold = "900"; + } else if (fontObj.bold) { + bold = "bold"; + } + + const italic = fontObj.italic ? "italic" : "normal"; + const typeface = `"${name}", ${fontObj.fallbackName}`; + let browserFontSize = size; + + if (size < MIN_FONT_SIZE) { + browserFontSize = MIN_FONT_SIZE; + } else if (size > MAX_FONT_SIZE) { + browserFontSize = MAX_FONT_SIZE; + } + + this.current.fontSizeScale = size / browserFontSize; + this.ctx.font = `${italic} ${bold} ${browserFontSize}px ${typeface}`; + } + + setTextRenderingMode(mode) { + this.current.textRenderingMode = mode; + } + + setTextRise(rise) { + this.current.textRise = rise; + } + + moveText(x, y) { + this.current.x = this.current.lineX += x; + this.current.y = this.current.lineY += y; + } + + setLeadingMoveText(x, y) { + this.setLeading(-y); + this.moveText(x, y); + } + + setTextMatrix(a, b, c, d, e, f) { + this.current.textMatrix = [a, b, c, d, e, f]; + this.current.textMatrixScale = Math.hypot(a, b); + this.current.x = this.current.lineX = 0; + this.current.y = this.current.lineY = 0; + } + + nextLine() { + this.moveText(0, this.current.leading); + } + + paintChar(character, x, y, patternTransform) { + const ctx = this.ctx; + const current = this.current; + const font = current.font; + const textRenderingMode = current.textRenderingMode; + const fontSize = current.fontSize / current.fontSizeScale; + const fillStrokeMode = textRenderingMode & _util.TextRenderingMode.FILL_STROKE_MASK; + const isAddToPathSet = !!(textRenderingMode & _util.TextRenderingMode.ADD_TO_PATH_FLAG); + const patternFill = current.patternFill && !font.missingFile; + let addToPath; + + if (font.disableFontFace || isAddToPathSet || patternFill) { + addToPath = font.getPathGenerator(this.commonObjs, character); + } + + if (font.disableFontFace || patternFill) { + ctx.save(); + ctx.translate(x, y); + ctx.beginPath(); + addToPath(ctx, fontSize); + + if (patternTransform) { + ctx.setTransform.apply(ctx, patternTransform); + } + + if (fillStrokeMode === _util.TextRenderingMode.FILL || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) { + ctx.fill(); + } + + if (fillStrokeMode === _util.TextRenderingMode.STROKE || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) { + ctx.stroke(); + } + + ctx.restore(); + } else { + if (fillStrokeMode === _util.TextRenderingMode.FILL || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) { + ctx.fillText(character, x, y); + } + + if (fillStrokeMode === _util.TextRenderingMode.STROKE || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) { + ctx.strokeText(character, x, y); + } + } + + if (isAddToPathSet) { + const paths = this.pendingTextPaths || (this.pendingTextPaths = []); + paths.push({ + transform: ctx.mozCurrentTransform, + x, + y, + fontSize, + addToPath + }); + } + } + + get isFontSubpixelAAEnabled() { + const { + context: ctx + } = this.cachedCanvases.getCanvas("isFontSubpixelAAEnabled", 10, 10, false); + ctx.scale(1.5, 1); + ctx.fillText("I", 0, 10); + const data = ctx.getImageData(0, 0, 10, 10).data; + let enabled = false; + + for (let i = 3; i < data.length; i += 4) { + if (data[i] > 0 && data[i] < 255) { + enabled = true; + break; + } + } + + return (0, _util.shadow)(this, "isFontSubpixelAAEnabled", enabled); + } + + showText(glyphs) { + const current = this.current; + const font = current.font; + + if (font.isType3Font) { + return this.showType3Text(glyphs); + } + + const fontSize = current.fontSize; + + if (fontSize === 0) { + return undefined; + } + + const ctx = this.ctx; + const fontSizeScale = current.fontSizeScale; + const charSpacing = current.charSpacing; + const wordSpacing = current.wordSpacing; + const fontDirection = current.fontDirection; + const textHScale = current.textHScale * fontDirection; + const glyphsLength = glyphs.length; + const vertical = font.vertical; + const spacingDir = vertical ? 1 : -1; + const defaultVMetrics = font.defaultVMetrics; + const widthAdvanceScale = fontSize * current.fontMatrix[0]; + const simpleFillText = current.textRenderingMode === _util.TextRenderingMode.FILL && !font.disableFontFace && !current.patternFill; + ctx.save(); + ctx.transform.apply(ctx, current.textMatrix); + ctx.translate(current.x, current.y + current.textRise); + + if (fontDirection > 0) { + ctx.scale(textHScale, -1); + } else { + ctx.scale(textHScale, 1); + } + + let patternTransform; + + if (current.patternFill) { + ctx.save(); + const pattern = current.fillColor.getPattern(ctx, this, ctx.mozCurrentTransformInverse, _pattern_helper.PathType.FILL); + patternTransform = ctx.mozCurrentTransform; + ctx.restore(); + ctx.fillStyle = pattern; + } + + let lineWidth = current.lineWidth; + const scale = current.textMatrixScale; + + if (scale === 0 || lineWidth === 0) { + const fillStrokeMode = current.textRenderingMode & _util.TextRenderingMode.FILL_STROKE_MASK; + + if (fillStrokeMode === _util.TextRenderingMode.STROKE || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) { + lineWidth = this.getSinglePixelWidth(); + } + } else { + lineWidth /= scale; + } + + if (fontSizeScale !== 1.0) { + ctx.scale(fontSizeScale, fontSizeScale); + lineWidth /= fontSizeScale; + } + + ctx.lineWidth = lineWidth; + let x = 0, + i; + + for (i = 0; i < glyphsLength; ++i) { + const glyph = glyphs[i]; + + if (typeof glyph === "number") { + x += spacingDir * glyph * fontSize / 1000; + continue; + } + + let restoreNeeded = false; + const spacing = (glyph.isSpace ? wordSpacing : 0) + charSpacing; + const character = glyph.fontChar; + const accent = glyph.accent; + let scaledX, scaledY; + let width = glyph.width; + + if (vertical) { + const vmetric = glyph.vmetric || defaultVMetrics; + const vx = -(glyph.vmetric ? vmetric[1] : width * 0.5) * widthAdvanceScale; + const vy = vmetric[2] * widthAdvanceScale; + width = vmetric ? -vmetric[0] : width; + scaledX = vx / fontSizeScale; + scaledY = (x + vy) / fontSizeScale; + } else { + scaledX = x / fontSizeScale; + scaledY = 0; + } + + if (font.remeasure && width > 0) { + const measuredWidth = ctx.measureText(character).width * 1000 / fontSize * fontSizeScale; + + if (width < measuredWidth && this.isFontSubpixelAAEnabled) { + const characterScaleX = width / measuredWidth; + restoreNeeded = true; + ctx.save(); + ctx.scale(characterScaleX, 1); + scaledX /= characterScaleX; + } else if (width !== measuredWidth) { + scaledX += (width - measuredWidth) / 2000 * fontSize / fontSizeScale; + } + } + + if (this.contentVisible && (glyph.isInFont || font.missingFile)) { + if (simpleFillText && !accent) { + ctx.fillText(character, scaledX, scaledY); + } else { + this.paintChar(character, scaledX, scaledY, patternTransform); + + if (accent) { + const scaledAccentX = scaledX + fontSize * accent.offset.x / fontSizeScale; + const scaledAccentY = scaledY - fontSize * accent.offset.y / fontSizeScale; + this.paintChar(accent.fontChar, scaledAccentX, scaledAccentY, patternTransform); + } + } + } + + let charWidth; + + if (vertical) { + charWidth = width * widthAdvanceScale - spacing * fontDirection; + } else { + charWidth = width * widthAdvanceScale + spacing * fontDirection; + } + + x += charWidth; + + if (restoreNeeded) { + ctx.restore(); + } + } + + if (vertical) { + current.y -= x; + } else { + current.x += x * textHScale; + } + + ctx.restore(); + this.compose(); + return undefined; + } + + showType3Text(glyphs) { + const ctx = this.ctx; + const current = this.current; + const font = current.font; + const fontSize = current.fontSize; + const fontDirection = current.fontDirection; + const spacingDir = font.vertical ? 1 : -1; + const charSpacing = current.charSpacing; + const wordSpacing = current.wordSpacing; + const textHScale = current.textHScale * fontDirection; + const fontMatrix = current.fontMatrix || _util.FONT_IDENTITY_MATRIX; + const glyphsLength = glyphs.length; + const isTextInvisible = current.textRenderingMode === _util.TextRenderingMode.INVISIBLE; + let i, glyph, width, spacingLength; + + if (isTextInvisible || fontSize === 0) { + return; + } + + this._cachedScaleForStroking = null; + this._cachedGetSinglePixelWidth = null; + ctx.save(); + ctx.transform.apply(ctx, current.textMatrix); + ctx.translate(current.x, current.y); + ctx.scale(textHScale, fontDirection); + + for (i = 0; i < glyphsLength; ++i) { + glyph = glyphs[i]; + + if (typeof glyph === "number") { + spacingLength = spacingDir * glyph * fontSize / 1000; + this.ctx.translate(spacingLength, 0); + current.x += spacingLength * textHScale; + continue; + } + + const spacing = (glyph.isSpace ? wordSpacing : 0) + charSpacing; + const operatorList = font.charProcOperatorList[glyph.operatorListId]; + + if (!operatorList) { + (0, _util.warn)(`Type3 character "${glyph.operatorListId}" is not available.`); + continue; + } + + if (this.contentVisible) { + this.processingType3 = glyph; + this.save(); + ctx.scale(fontSize, fontSize); + ctx.transform.apply(ctx, fontMatrix); + this.executeOperatorList(operatorList); + this.restore(); + } + + const transformed = _util.Util.applyTransform([glyph.width, 0], fontMatrix); + + width = transformed[0] * fontSize + spacing; + ctx.translate(width, 0); + current.x += width * textHScale; + } + + ctx.restore(); + this.processingType3 = null; + } + + setCharWidth(xWidth, yWidth) {} + + setCharWidthAndBounds(xWidth, yWidth, llx, lly, urx, ury) { + this.ctx.rect(llx, lly, urx - llx, ury - lly); + this.ctx.clip(); + this.endPath(); + } + + getColorN_Pattern(IR) { + let pattern; + + if (IR[0] === "TilingPattern") { + const color = IR[1]; + const baseTransform = this.baseTransform || this.ctx.mozCurrentTransform.slice(); + const canvasGraphicsFactory = { + createCanvasGraphics: ctx => { + return new CanvasGraphics(ctx, this.commonObjs, this.objs, this.canvasFactory); + } + }; + pattern = new _pattern_helper.TilingPattern(IR, color, this.ctx, canvasGraphicsFactory, baseTransform); + } else { + pattern = this._getPattern(IR[1], IR[2]); + } + + return pattern; + } + + setStrokeColorN() { + this.current.strokeColor = this.getColorN_Pattern(arguments); + } + + setFillColorN() { + this.current.fillColor = this.getColorN_Pattern(arguments); + this.current.patternFill = true; + } + + setStrokeRGBColor(r, g, b) { + const color = this.selectColor?.(r, g, b) || _util.Util.makeHexColor(r, g, b); + + this.ctx.strokeStyle = color; + this.current.strokeColor = color; + } + + setFillRGBColor(r, g, b) { + const color = this.selectColor?.(r, g, b) || _util.Util.makeHexColor(r, g, b); + + this.ctx.fillStyle = color; + this.current.fillColor = color; + this.current.patternFill = false; + } + + _getPattern(objId, matrix = null) { + let pattern; + + if (this.cachedPatterns.has(objId)) { + pattern = this.cachedPatterns.get(objId); + } else { + pattern = (0, _pattern_helper.getShadingPattern)(this.objs.get(objId)); + this.cachedPatterns.set(objId, pattern); + } + + if (matrix) { + pattern.matrix = matrix; + } + + return pattern; + } + + shadingFill(objId) { + if (!this.contentVisible) { + return; + } + + const ctx = this.ctx; + this.save(); + + const pattern = this._getPattern(objId); + + ctx.fillStyle = pattern.getPattern(ctx, this, ctx.mozCurrentTransformInverse, _pattern_helper.PathType.SHADING); + const inv = ctx.mozCurrentTransformInverse; + + if (inv) { + const canvas = ctx.canvas; + const width = canvas.width; + const height = canvas.height; + + const bl = _util.Util.applyTransform([0, 0], inv); + + const br = _util.Util.applyTransform([0, height], inv); + + const ul = _util.Util.applyTransform([width, 0], inv); + + const ur = _util.Util.applyTransform([width, height], inv); + + const x0 = Math.min(bl[0], br[0], ul[0], ur[0]); + const y0 = Math.min(bl[1], br[1], ul[1], ur[1]); + const x1 = Math.max(bl[0], br[0], ul[0], ur[0]); + const y1 = Math.max(bl[1], br[1], ul[1], ur[1]); + this.ctx.fillRect(x0, y0, x1 - x0, y1 - y0); + } else { + this.ctx.fillRect(-1e10, -1e10, 2e10, 2e10); + } + + this.compose(this.current.getClippedPathBoundingBox()); + this.restore(); + } + + beginInlineImage() { + (0, _util.unreachable)("Should not call beginInlineImage"); + } + + beginImageData() { + (0, _util.unreachable)("Should not call beginImageData"); + } + + paintFormXObjectBegin(matrix, bbox) { + if (!this.contentVisible) { + return; + } + + this.save(); + this.baseTransformStack.push(this.baseTransform); + + if (Array.isArray(matrix) && matrix.length === 6) { + this.transform.apply(this, matrix); + } + + this.baseTransform = this.ctx.mozCurrentTransform; + + if (bbox) { + const width = bbox[2] - bbox[0]; + const height = bbox[3] - bbox[1]; + this.ctx.rect(bbox[0], bbox[1], width, height); + this.current.updateRectMinMax(this.ctx.mozCurrentTransform, bbox); + this.clip(); + this.endPath(); + } + } + + paintFormXObjectEnd() { + if (!this.contentVisible) { + return; + } + + this.restore(); + this.baseTransform = this.baseTransformStack.pop(); + } + + beginGroup(group) { + if (!this.contentVisible) { + return; + } + + this.save(); + + if (this.inSMaskMode) { + this.endSMaskMode(); + this.current.activeSMask = null; + } + + const currentCtx = this.ctx; + + if (!group.isolated) { + (0, _util.info)("TODO: Support non-isolated groups."); + } + + if (group.knockout) { + (0, _util.warn)("Knockout groups not supported."); + } + + const currentTransform = currentCtx.mozCurrentTransform; + + if (group.matrix) { + currentCtx.transform.apply(currentCtx, group.matrix); + } + + if (!group.bbox) { + throw new Error("Bounding box is required."); + } + + let bounds = _util.Util.getAxialAlignedBoundingBox(group.bbox, currentCtx.mozCurrentTransform); + + const canvasBounds = [0, 0, currentCtx.canvas.width, currentCtx.canvas.height]; + bounds = _util.Util.intersect(bounds, canvasBounds) || [0, 0, 0, 0]; + const offsetX = Math.floor(bounds[0]); + const offsetY = Math.floor(bounds[1]); + let drawnWidth = Math.max(Math.ceil(bounds[2]) - offsetX, 1); + let drawnHeight = Math.max(Math.ceil(bounds[3]) - offsetY, 1); + let scaleX = 1, + scaleY = 1; + + if (drawnWidth > MAX_GROUP_SIZE) { + scaleX = drawnWidth / MAX_GROUP_SIZE; + drawnWidth = MAX_GROUP_SIZE; + } + + if (drawnHeight > MAX_GROUP_SIZE) { + scaleY = drawnHeight / MAX_GROUP_SIZE; + drawnHeight = MAX_GROUP_SIZE; + } + + this.current.startNewPathAndClipBox([0, 0, drawnWidth, drawnHeight]); + let cacheId = "groupAt" + this.groupLevel; + + if (group.smask) { + cacheId += "_smask_" + this.smaskCounter++ % 2; + } + + const scratchCanvas = this.cachedCanvases.getCanvas(cacheId, drawnWidth, drawnHeight, true); + const groupCtx = scratchCanvas.context; + groupCtx.scale(1 / scaleX, 1 / scaleY); + groupCtx.translate(-offsetX, -offsetY); + groupCtx.transform.apply(groupCtx, currentTransform); + + if (group.smask) { + this.smaskStack.push({ + canvas: scratchCanvas.canvas, + context: groupCtx, + offsetX, + offsetY, + scaleX, + scaleY, + subtype: group.smask.subtype, + backdrop: group.smask.backdrop, + transferMap: group.smask.transferMap || null, + startTransformInverse: null + }); + } else { + currentCtx.setTransform(1, 0, 0, 1, 0, 0); + currentCtx.translate(offsetX, offsetY); + currentCtx.scale(scaleX, scaleY); + currentCtx.save(); + } + + copyCtxState(currentCtx, groupCtx); + this.ctx = groupCtx; + this.setGState([["BM", "source-over"], ["ca", 1], ["CA", 1]]); + this.groupStack.push(currentCtx); + this.groupLevel++; + } + + endGroup(group) { + if (!this.contentVisible) { + return; + } + + this.groupLevel--; + const groupCtx = this.ctx; + const ctx = this.groupStack.pop(); + this.ctx = ctx; + this.ctx.imageSmoothingEnabled = false; + + if (group.smask) { + this.tempSMask = this.smaskStack.pop(); + this.restore(); + } else { + this.ctx.restore(); + const currentMtx = this.ctx.mozCurrentTransform; + this.restore(); + this.ctx.save(); + this.ctx.setTransform.apply(this.ctx, currentMtx); + + const dirtyBox = _util.Util.getAxialAlignedBoundingBox([0, 0, groupCtx.canvas.width, groupCtx.canvas.height], currentMtx); + + this.ctx.drawImage(groupCtx.canvas, 0, 0); + this.ctx.restore(); + this.compose(dirtyBox); + } + } + + beginAnnotation(id, rect, transform, matrix, hasOwnCanvas) { + this.#restoreInitialState(); + resetCtxToDefault(this.ctx, this.foregroundColor); + this.ctx.save(); + this.save(); + + if (this.baseTransform) { + this.ctx.setTransform.apply(this.ctx, this.baseTransform); + } + + if (Array.isArray(rect) && rect.length === 4) { + const width = rect[2] - rect[0]; + const height = rect[3] - rect[1]; + + if (hasOwnCanvas && this.annotationCanvasMap) { + transform = transform.slice(); + transform[4] -= rect[0]; + transform[5] -= rect[1]; + rect = rect.slice(); + rect[0] = rect[1] = 0; + rect[2] = width; + rect[3] = height; + + const [scaleX, scaleY] = _util.Util.singularValueDecompose2dScale(this.ctx.mozCurrentTransform); + + const { + viewportScale + } = this; + const canvasWidth = Math.ceil(width * this.outputScaleX * viewportScale); + const canvasHeight = Math.ceil(height * this.outputScaleY * viewportScale); + this.annotationCanvas = this.canvasFactory.create(canvasWidth, canvasHeight); + const { + canvas, + context + } = this.annotationCanvas; + this.annotationCanvasMap.set(id, canvas); + this.annotationCanvas.savedCtx = this.ctx; + this.ctx = context; + addContextCurrentTransform(this.ctx); + this.ctx.setTransform(scaleX, 0, 0, -scaleY, 0, height * scaleY); + resetCtxToDefault(this.ctx, this.foregroundColor); + } else { + resetCtxToDefault(this.ctx, this.foregroundColor); + this.ctx.rect(rect[0], rect[1], width, height); + this.ctx.clip(); + this.endPath(); + } + } + + this.current = new CanvasExtraState(this.ctx.canvas.width, this.ctx.canvas.height); + this.transform.apply(this, transform); + this.transform.apply(this, matrix); + } + + endAnnotation() { + if (this.annotationCanvas) { + this.ctx = this.annotationCanvas.savedCtx; + delete this.annotationCanvas.savedCtx; + delete this.annotationCanvas; + } + } + + paintImageMaskXObject(img) { + if (!this.contentVisible) { + return; + } + + const count = img.count; + img = this.getObject(img.data, img); + img.count = count; + const ctx = this.ctx; + const glyph = this.processingType3; + + if (glyph) { + if (glyph.compiled === undefined) { + glyph.compiled = compileType3Glyph(img); + } + + if (glyph.compiled) { + glyph.compiled(ctx); + return; + } + } + + const mask = this._createMaskCanvas(img); + + const maskCanvas = mask.canvas; + ctx.save(); + ctx.setTransform(1, 0, 0, 1, 0, 0); + ctx.drawImage(maskCanvas, mask.offsetX, mask.offsetY); + ctx.restore(); + this.compose(); + } + + paintImageMaskXObjectRepeat(img, scaleX, skewX = 0, skewY = 0, scaleY, positions) { + if (!this.contentVisible) { + return; + } + + img = this.getObject(img.data, img); + const ctx = this.ctx; + ctx.save(); + const currentTransform = ctx.mozCurrentTransform; + ctx.transform(scaleX, skewX, skewY, scaleY, 0, 0); + + const mask = this._createMaskCanvas(img); + + ctx.setTransform(1, 0, 0, 1, 0, 0); + + for (let i = 0, ii = positions.length; i < ii; i += 2) { + const trans = _util.Util.transform(currentTransform, [scaleX, skewX, skewY, scaleY, positions[i], positions[i + 1]]); + + const [x, y] = _util.Util.applyTransform([0, 0], trans); + + ctx.drawImage(mask.canvas, x, y); + } + + ctx.restore(); + this.compose(); + } + + paintImageMaskXObjectGroup(images) { + if (!this.contentVisible) { + return; + } + + const ctx = this.ctx; + const fillColor = this.current.fillColor; + const isPatternFill = this.current.patternFill; + + for (const image of images) { + const { + data, + width, + height, + transform + } = image; + const maskCanvas = this.cachedCanvases.getCanvas("maskCanvas", width, height, false); + const maskCtx = maskCanvas.context; + maskCtx.save(); + const img = this.getObject(data, image); + putBinaryImageMask(maskCtx, img); + maskCtx.globalCompositeOperation = "source-in"; + maskCtx.fillStyle = isPatternFill ? fillColor.getPattern(maskCtx, this, ctx.mozCurrentTransformInverse, _pattern_helper.PathType.FILL) : fillColor; + maskCtx.fillRect(0, 0, width, height); + maskCtx.restore(); + ctx.save(); + ctx.transform.apply(ctx, transform); + ctx.scale(1, -1); + drawImageAtIntegerCoords(ctx, maskCanvas.canvas, 0, 0, width, height, 0, -1, 1, 1); + ctx.restore(); + } + + this.compose(); + } + + paintImageXObject(objId) { + if (!this.contentVisible) { + return; + } + + const imgData = this.getObject(objId); + + if (!imgData) { + (0, _util.warn)("Dependent image isn't ready yet"); + return; + } + + this.paintInlineImageXObject(imgData); + } + + paintImageXObjectRepeat(objId, scaleX, scaleY, positions) { + if (!this.contentVisible) { + return; + } + + const imgData = this.getObject(objId); + + if (!imgData) { + (0, _util.warn)("Dependent image isn't ready yet"); + return; + } + + const width = imgData.width; + const height = imgData.height; + const map = []; + + for (let i = 0, ii = positions.length; i < ii; i += 2) { + map.push({ + transform: [scaleX, 0, 0, scaleY, positions[i], positions[i + 1]], + x: 0, + y: 0, + w: width, + h: height + }); + } + + this.paintInlineImageXObjectGroup(imgData, map); + } + + paintInlineImageXObject(imgData) { + if (!this.contentVisible) { + return; + } + + const width = imgData.width; + const height = imgData.height; + const ctx = this.ctx; + this.save(); + ctx.scale(1 / width, -1 / height); + let imgToPaint; + + if (typeof HTMLElement === "function" && imgData instanceof HTMLElement || !imgData.data) { + imgToPaint = imgData; + } else { + const tmpCanvas = this.cachedCanvases.getCanvas("inlineImage", width, height, false); + const tmpCtx = tmpCanvas.context; + putBinaryImageData(tmpCtx, imgData, this.current.transferMaps); + imgToPaint = tmpCanvas.canvas; + } + + const scaled = this._scaleImage(imgToPaint, ctx.mozCurrentTransformInverse); + + ctx.imageSmoothingEnabled = getImageSmoothingEnabled(ctx.mozCurrentTransform, imgData.interpolate); + const [rWidth, rHeight] = drawImageAtIntegerCoords(ctx, scaled.img, 0, 0, scaled.paintWidth, scaled.paintHeight, 0, -height, width, height); + + if (this.imageLayer) { + const position = this.getCanvasPosition(0, -height); + this.imageLayer.appendImage({ + imgData, + left: position[0], + top: position[1], + width: rWidth, + height: rHeight + }); + } + + this.compose(); + this.restore(); + } + + paintInlineImageXObjectGroup(imgData, map) { + if (!this.contentVisible) { + return; + } + + const ctx = this.ctx; + const w = imgData.width; + const h = imgData.height; + const tmpCanvas = this.cachedCanvases.getCanvas("inlineImage", w, h, false); + const tmpCtx = tmpCanvas.context; + putBinaryImageData(tmpCtx, imgData, this.current.transferMaps); + + for (let i = 0, ii = map.length; i < ii; i++) { + const entry = map[i]; + ctx.save(); + ctx.transform.apply(ctx, entry.transform); + ctx.scale(1, -1); + drawImageAtIntegerCoords(ctx, tmpCanvas.canvas, entry.x, entry.y, entry.w, entry.h, 0, -1, 1, 1); + + if (this.imageLayer) { + const position = this.getCanvasPosition(entry.x, entry.y); + this.imageLayer.appendImage({ + imgData, + left: position[0], + top: position[1], + width: w, + height: h + }); + } + + ctx.restore(); + } + + this.compose(); + } + + paintSolidColorImageMask() { + if (!this.contentVisible) { + return; + } + + this.ctx.fillRect(0, 0, 1, 1); + this.compose(); + } + + markPoint(tag) {} + + markPointProps(tag, properties) {} + + beginMarkedContent(tag) { + this.markedContentStack.push({ + visible: true + }); + } + + beginMarkedContentProps(tag, properties) { + if (tag === "OC") { + this.markedContentStack.push({ + visible: this.optionalContentConfig.isVisible(properties) + }); + } else { + this.markedContentStack.push({ + visible: true + }); + } + + this.contentVisible = this.isContentVisible(); + } + + endMarkedContent() { + this.markedContentStack.pop(); + this.contentVisible = this.isContentVisible(); + } + + beginCompat() {} + + endCompat() {} + + consumePath(clipBox) { + const isEmpty = this.current.isEmptyClip(); + + if (this.pendingClip) { + this.current.updateClipFromPath(); + } + + if (!this.pendingClip) { + this.compose(clipBox); + } + + const ctx = this.ctx; + + if (this.pendingClip) { + if (!isEmpty) { + if (this.pendingClip === EO_CLIP) { + ctx.clip("evenodd"); + } else { + ctx.clip(); + } + } + + this.pendingClip = null; + } + + this.current.startNewPathAndClipBox(this.current.clipBox); + ctx.beginPath(); + } + + getSinglePixelWidth() { + if (!this._cachedGetSinglePixelWidth) { + const m = this.ctx.mozCurrentTransform; + + if (m[1] === 0 && m[2] === 0) { + this._cachedGetSinglePixelWidth = 1 / Math.min(Math.abs(m[0]), Math.abs(m[3])); + } else { + const absDet = Math.abs(m[0] * m[3] - m[2] * m[1]); + const normX = Math.hypot(m[0], m[2]); + const normY = Math.hypot(m[1], m[3]); + this._cachedGetSinglePixelWidth = Math.max(normX, normY) / absDet; + } + } + + return this._cachedGetSinglePixelWidth; + } + + getScaleForStroking() { + if (!this._cachedScaleForStroking) { + const { + lineWidth + } = this.current; + const m = this.ctx.mozCurrentTransform; + let scaleX, scaleY; + + if (m[1] === 0 && m[2] === 0) { + const normX = Math.abs(m[0]); + const normY = Math.abs(m[3]); + + if (lineWidth === 0) { + scaleX = 1 / normX; + scaleY = 1 / normY; + } else { + const scaledXLineWidth = normX * lineWidth; + const scaledYLineWidth = normY * lineWidth; + scaleX = scaledXLineWidth < 1 ? 1 / scaledXLineWidth : 1; + scaleY = scaledYLineWidth < 1 ? 1 / scaledYLineWidth : 1; + } + } else { + const absDet = Math.abs(m[0] * m[3] - m[2] * m[1]); + const normX = Math.hypot(m[0], m[1]); + const normY = Math.hypot(m[2], m[3]); + + if (lineWidth === 0) { + scaleX = normY / absDet; + scaleY = normX / absDet; + } else { + const baseArea = lineWidth * absDet; + scaleX = normY > baseArea ? normY / baseArea : 1; + scaleY = normX > baseArea ? normX / baseArea : 1; + } + } + + this._cachedScaleForStroking = [scaleX, scaleY]; + } + + return this._cachedScaleForStroking; + } + + rescaleAndStroke(saveRestore) { + const { + ctx + } = this; + const { + lineWidth + } = this.current; + const [scaleX, scaleY] = this.getScaleForStroking(); + ctx.lineWidth = lineWidth || 1; + + if (scaleX === 1 && scaleY === 1) { + ctx.stroke(); + return; + } + + let savedMatrix, savedDashes, savedDashOffset; + + if (saveRestore) { + savedMatrix = ctx.mozCurrentTransform.slice(); + savedDashes = ctx.getLineDash().slice(); + savedDashOffset = ctx.lineDashOffset; + } + + ctx.scale(scaleX, scaleY); + const scale = Math.max(scaleX, scaleY); + ctx.setLineDash(ctx.getLineDash().map(x => x / scale)); + ctx.lineDashOffset /= scale; + ctx.stroke(); + + if (saveRestore) { + ctx.setTransform(...savedMatrix); + ctx.setLineDash(savedDashes); + ctx.lineDashOffset = savedDashOffset; + } + } + + getCanvasPosition(x, y) { + const transform = this.ctx.mozCurrentTransform; + return [transform[0] * x + transform[2] * y + transform[4], transform[1] * x + transform[3] * y + transform[5]]; + } + + isContentVisible() { + for (let i = this.markedContentStack.length - 1; i >= 0; i--) { + if (!this.markedContentStack[i].visible) { + return false; + } + } + + return true; + } + +} + +exports.CanvasGraphics = CanvasGraphics; + +for (const op in _util.OPS) { + if (CanvasGraphics.prototype[op] !== undefined) { + CanvasGraphics.prototype[_util.OPS[op]] = CanvasGraphics.prototype[op]; + } +} + +/***/ }), +/* 13 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.TilingPattern = exports.PathType = void 0; +exports.getShadingPattern = getShadingPattern; + +var _util = __w_pdfjs_require__(1); + +var _is_node = __w_pdfjs_require__(3); + +const PathType = { + FILL: "Fill", + STROKE: "Stroke", + SHADING: "Shading" +}; +exports.PathType = PathType; + +function applyBoundingBox(ctx, bbox) { + if (!bbox || _is_node.isNodeJS) { + return; + } + + const width = bbox[2] - bbox[0]; + const height = bbox[3] - bbox[1]; + const region = new Path2D(); + region.rect(bbox[0], bbox[1], width, height); + ctx.clip(region); +} + +class BaseShadingPattern { + constructor() { + if (this.constructor === BaseShadingPattern) { + (0, _util.unreachable)("Cannot initialize BaseShadingPattern."); + } + } + + getPattern() { + (0, _util.unreachable)("Abstract method `getPattern` called."); + } + +} + +class RadialAxialShadingPattern extends BaseShadingPattern { + constructor(IR) { + super(); + this._type = IR[1]; + this._bbox = IR[2]; + this._colorStops = IR[3]; + this._p0 = IR[4]; + this._p1 = IR[5]; + this._r0 = IR[6]; + this._r1 = IR[7]; + this.matrix = null; + } + + _createGradient(ctx) { + let grad; + + if (this._type === "axial") { + grad = ctx.createLinearGradient(this._p0[0], this._p0[1], this._p1[0], this._p1[1]); + } else if (this._type === "radial") { + grad = ctx.createRadialGradient(this._p0[0], this._p0[1], this._r0, this._p1[0], this._p1[1], this._r1); + } + + for (const colorStop of this._colorStops) { + grad.addColorStop(colorStop[0], colorStop[1]); + } + + return grad; + } + + getPattern(ctx, owner, inverse, pathType) { + let pattern; + + if (pathType === PathType.STROKE || pathType === PathType.FILL) { + const ownerBBox = owner.current.getClippedPathBoundingBox(pathType, ctx.mozCurrentTransform) || [0, 0, 0, 0]; + const width = Math.ceil(ownerBBox[2] - ownerBBox[0]) || 1; + const height = Math.ceil(ownerBBox[3] - ownerBBox[1]) || 1; + const tmpCanvas = owner.cachedCanvases.getCanvas("pattern", width, height, true); + const tmpCtx = tmpCanvas.context; + tmpCtx.clearRect(0, 0, tmpCtx.canvas.width, tmpCtx.canvas.height); + tmpCtx.beginPath(); + tmpCtx.rect(0, 0, tmpCtx.canvas.width, tmpCtx.canvas.height); + tmpCtx.translate(-ownerBBox[0], -ownerBBox[1]); + inverse = _util.Util.transform(inverse, [1, 0, 0, 1, ownerBBox[0], ownerBBox[1]]); + tmpCtx.transform.apply(tmpCtx, owner.baseTransform); + + if (this.matrix) { + tmpCtx.transform.apply(tmpCtx, this.matrix); + } + + applyBoundingBox(tmpCtx, this._bbox); + tmpCtx.fillStyle = this._createGradient(tmpCtx); + tmpCtx.fill(); + pattern = ctx.createPattern(tmpCanvas.canvas, "no-repeat"); + const domMatrix = new DOMMatrix(inverse); + + try { + pattern.setTransform(domMatrix); + } catch (ex) { + (0, _util.warn)(`RadialAxialShadingPattern.getPattern: "${ex?.message}".`); + } + } else { + applyBoundingBox(ctx, this._bbox); + pattern = this._createGradient(ctx); + } + + return pattern; + } + +} + +function drawTriangle(data, context, p1, p2, p3, c1, c2, c3) { + const coords = context.coords, + colors = context.colors; + const bytes = data.data, + rowSize = data.width * 4; + let tmp; + + if (coords[p1 + 1] > coords[p2 + 1]) { + tmp = p1; + p1 = p2; + p2 = tmp; + tmp = c1; + c1 = c2; + c2 = tmp; + } + + if (coords[p2 + 1] > coords[p3 + 1]) { + tmp = p2; + p2 = p3; + p3 = tmp; + tmp = c2; + c2 = c3; + c3 = tmp; + } + + if (coords[p1 + 1] > coords[p2 + 1]) { + tmp = p1; + p1 = p2; + p2 = tmp; + tmp = c1; + c1 = c2; + c2 = tmp; + } + + const x1 = (coords[p1] + context.offsetX) * context.scaleX; + const y1 = (coords[p1 + 1] + context.offsetY) * context.scaleY; + const x2 = (coords[p2] + context.offsetX) * context.scaleX; + const y2 = (coords[p2 + 1] + context.offsetY) * context.scaleY; + const x3 = (coords[p3] + context.offsetX) * context.scaleX; + const y3 = (coords[p3 + 1] + context.offsetY) * context.scaleY; + + if (y1 >= y3) { + return; + } + + const c1r = colors[c1], + c1g = colors[c1 + 1], + c1b = colors[c1 + 2]; + const c2r = colors[c2], + c2g = colors[c2 + 1], + c2b = colors[c2 + 2]; + const c3r = colors[c3], + c3g = colors[c3 + 1], + c3b = colors[c3 + 2]; + const minY = Math.round(y1), + maxY = Math.round(y3); + let xa, car, cag, cab; + let xb, cbr, cbg, cbb; + + for (let y = minY; y <= maxY; y++) { + if (y < y2) { + let k; + + if (y < y1) { + k = 0; + } else { + k = (y1 - y) / (y1 - y2); + } + + xa = x1 - (x1 - x2) * k; + car = c1r - (c1r - c2r) * k; + cag = c1g - (c1g - c2g) * k; + cab = c1b - (c1b - c2b) * k; + } else { + let k; + + if (y > y3) { + k = 1; + } else if (y2 === y3) { + k = 0; + } else { + k = (y2 - y) / (y2 - y3); + } + + xa = x2 - (x2 - x3) * k; + car = c2r - (c2r - c3r) * k; + cag = c2g - (c2g - c3g) * k; + cab = c2b - (c2b - c3b) * k; + } + + let k; + + if (y < y1) { + k = 0; + } else if (y > y3) { + k = 1; + } else { + k = (y1 - y) / (y1 - y3); + } + + xb = x1 - (x1 - x3) * k; + cbr = c1r - (c1r - c3r) * k; + cbg = c1g - (c1g - c3g) * k; + cbb = c1b - (c1b - c3b) * k; + const x1_ = Math.round(Math.min(xa, xb)); + const x2_ = Math.round(Math.max(xa, xb)); + let j = rowSize * y + x1_ * 4; + + for (let x = x1_; x <= x2_; x++) { + k = (xa - x) / (xa - xb); + + if (k < 0) { + k = 0; + } else if (k > 1) { + k = 1; + } + + bytes[j++] = car - (car - cbr) * k | 0; + bytes[j++] = cag - (cag - cbg) * k | 0; + bytes[j++] = cab - (cab - cbb) * k | 0; + bytes[j++] = 255; + } + } +} + +function drawFigure(data, figure, context) { + const ps = figure.coords; + const cs = figure.colors; + let i, ii; + + switch (figure.type) { + case "lattice": + const verticesPerRow = figure.verticesPerRow; + const rows = Math.floor(ps.length / verticesPerRow) - 1; + const cols = verticesPerRow - 1; + + for (i = 0; i < rows; i++) { + let q = i * verticesPerRow; + + for (let j = 0; j < cols; j++, q++) { + drawTriangle(data, context, ps[q], ps[q + 1], ps[q + verticesPerRow], cs[q], cs[q + 1], cs[q + verticesPerRow]); + drawTriangle(data, context, ps[q + verticesPerRow + 1], ps[q + 1], ps[q + verticesPerRow], cs[q + verticesPerRow + 1], cs[q + 1], cs[q + verticesPerRow]); + } + } + + break; + + case "triangles": + for (i = 0, ii = ps.length; i < ii; i += 3) { + drawTriangle(data, context, ps[i], ps[i + 1], ps[i + 2], cs[i], cs[i + 1], cs[i + 2]); + } + + break; + + default: + throw new Error("illegal figure"); + } +} + +class MeshShadingPattern extends BaseShadingPattern { + constructor(IR) { + super(); + this._coords = IR[2]; + this._colors = IR[3]; + this._figures = IR[4]; + this._bounds = IR[5]; + this._bbox = IR[7]; + this._background = IR[8]; + this.matrix = null; + } + + _createMeshCanvas(combinedScale, backgroundColor, cachedCanvases) { + const EXPECTED_SCALE = 1.1; + const MAX_PATTERN_SIZE = 3000; + const BORDER_SIZE = 2; + const offsetX = Math.floor(this._bounds[0]); + const offsetY = Math.floor(this._bounds[1]); + const boundsWidth = Math.ceil(this._bounds[2]) - offsetX; + const boundsHeight = Math.ceil(this._bounds[3]) - offsetY; + const width = Math.min(Math.ceil(Math.abs(boundsWidth * combinedScale[0] * EXPECTED_SCALE)), MAX_PATTERN_SIZE); + const height = Math.min(Math.ceil(Math.abs(boundsHeight * combinedScale[1] * EXPECTED_SCALE)), MAX_PATTERN_SIZE); + const scaleX = boundsWidth / width; + const scaleY = boundsHeight / height; + const context = { + coords: this._coords, + colors: this._colors, + offsetX: -offsetX, + offsetY: -offsetY, + scaleX: 1 / scaleX, + scaleY: 1 / scaleY + }; + const paddedWidth = width + BORDER_SIZE * 2; + const paddedHeight = height + BORDER_SIZE * 2; + const tmpCanvas = cachedCanvases.getCanvas("mesh", paddedWidth, paddedHeight, false); + const tmpCtx = tmpCanvas.context; + const data = tmpCtx.createImageData(width, height); + + if (backgroundColor) { + const bytes = data.data; + + for (let i = 0, ii = bytes.length; i < ii; i += 4) { + bytes[i] = backgroundColor[0]; + bytes[i + 1] = backgroundColor[1]; + bytes[i + 2] = backgroundColor[2]; + bytes[i + 3] = 255; + } + } + + for (const figure of this._figures) { + drawFigure(data, figure, context); + } + + tmpCtx.putImageData(data, BORDER_SIZE, BORDER_SIZE); + const canvas = tmpCanvas.canvas; + return { + canvas, + offsetX: offsetX - BORDER_SIZE * scaleX, + offsetY: offsetY - BORDER_SIZE * scaleY, + scaleX, + scaleY + }; + } + + getPattern(ctx, owner, inverse, pathType) { + applyBoundingBox(ctx, this._bbox); + let scale; + + if (pathType === PathType.SHADING) { + scale = _util.Util.singularValueDecompose2dScale(ctx.mozCurrentTransform); + } else { + scale = _util.Util.singularValueDecompose2dScale(owner.baseTransform); + + if (this.matrix) { + const matrixScale = _util.Util.singularValueDecompose2dScale(this.matrix); + + scale = [scale[0] * matrixScale[0], scale[1] * matrixScale[1]]; + } + } + + const temporaryPatternCanvas = this._createMeshCanvas(scale, pathType === PathType.SHADING ? null : this._background, owner.cachedCanvases); + + if (pathType !== PathType.SHADING) { + ctx.setTransform.apply(ctx, owner.baseTransform); + + if (this.matrix) { + ctx.transform.apply(ctx, this.matrix); + } + } + + ctx.translate(temporaryPatternCanvas.offsetX, temporaryPatternCanvas.offsetY); + ctx.scale(temporaryPatternCanvas.scaleX, temporaryPatternCanvas.scaleY); + return ctx.createPattern(temporaryPatternCanvas.canvas, "no-repeat"); + } + +} + +class DummyShadingPattern extends BaseShadingPattern { + getPattern() { + return "hotpink"; + } + +} + +function getShadingPattern(IR) { + switch (IR[0]) { + case "RadialAxial": + return new RadialAxialShadingPattern(IR); + + case "Mesh": + return new MeshShadingPattern(IR); + + case "Dummy": + return new DummyShadingPattern(); + } + + throw new Error(`Unknown IR type: ${IR[0]}`); +} + +const PaintType = { + COLORED: 1, + UNCOLORED: 2 +}; + +class TilingPattern { + static get MAX_PATTERN_SIZE() { + return (0, _util.shadow)(this, "MAX_PATTERN_SIZE", 3000); + } + + constructor(IR, color, ctx, canvasGraphicsFactory, baseTransform) { + this.operatorList = IR[2]; + this.matrix = IR[3] || [1, 0, 0, 1, 0, 0]; + this.bbox = IR[4]; + this.xstep = IR[5]; + this.ystep = IR[6]; + this.paintType = IR[7]; + this.tilingType = IR[8]; + this.color = color; + this.ctx = ctx; + this.canvasGraphicsFactory = canvasGraphicsFactory; + this.baseTransform = baseTransform; + } + + createPatternCanvas(owner) { + const operatorList = this.operatorList; + const bbox = this.bbox; + const xstep = this.xstep; + const ystep = this.ystep; + const paintType = this.paintType; + const tilingType = this.tilingType; + const color = this.color; + const canvasGraphicsFactory = this.canvasGraphicsFactory; + (0, _util.info)("TilingType: " + tilingType); + const x0 = bbox[0], + y0 = bbox[1], + x1 = bbox[2], + y1 = bbox[3]; + + const matrixScale = _util.Util.singularValueDecompose2dScale(this.matrix); + + const curMatrixScale = _util.Util.singularValueDecompose2dScale(this.baseTransform); + + const combinedScale = [matrixScale[0] * curMatrixScale[0], matrixScale[1] * curMatrixScale[1]]; + const dimx = this.getSizeAndScale(xstep, this.ctx.canvas.width, combinedScale[0]); + const dimy = this.getSizeAndScale(ystep, this.ctx.canvas.height, combinedScale[1]); + const tmpCanvas = owner.cachedCanvases.getCanvas("pattern", dimx.size, dimy.size, true); + const tmpCtx = tmpCanvas.context; + const graphics = canvasGraphicsFactory.createCanvasGraphics(tmpCtx); + graphics.groupLevel = owner.groupLevel; + this.setFillAndStrokeStyleToContext(graphics, paintType, color); + let adjustedX0 = x0; + let adjustedY0 = y0; + let adjustedX1 = x1; + let adjustedY1 = y1; + + if (x0 < 0) { + adjustedX0 = 0; + adjustedX1 += Math.abs(x0); + } + + if (y0 < 0) { + adjustedY0 = 0; + adjustedY1 += Math.abs(y0); + } + + tmpCtx.translate(-(dimx.scale * adjustedX0), -(dimy.scale * adjustedY0)); + graphics.transform(dimx.scale, 0, 0, dimy.scale, 0, 0); + tmpCtx.save(); + this.clipBbox(graphics, adjustedX0, adjustedY0, adjustedX1, adjustedY1); + graphics.baseTransform = graphics.ctx.mozCurrentTransform.slice(); + graphics.executeOperatorList(operatorList); + graphics.endDrawing(); + return { + canvas: tmpCanvas.canvas, + scaleX: dimx.scale, + scaleY: dimy.scale, + offsetX: adjustedX0, + offsetY: adjustedY0 + }; + } + + getSizeAndScale(step, realOutputSize, scale) { + step = Math.abs(step); + const maxSize = Math.max(TilingPattern.MAX_PATTERN_SIZE, realOutputSize); + let size = Math.ceil(step * scale); + + if (size >= maxSize) { + size = maxSize; + } else { + scale = size / step; + } + + return { + scale, + size + }; + } + + clipBbox(graphics, x0, y0, x1, y1) { + const bboxWidth = x1 - x0; + const bboxHeight = y1 - y0; + graphics.ctx.rect(x0, y0, bboxWidth, bboxHeight); + graphics.current.updateRectMinMax(graphics.ctx.mozCurrentTransform, [x0, y0, x1, y1]); + graphics.clip(); + graphics.endPath(); + } + + setFillAndStrokeStyleToContext(graphics, paintType, color) { + const context = graphics.ctx, + current = graphics.current; + + switch (paintType) { + case PaintType.COLORED: + const ctx = this.ctx; + context.fillStyle = ctx.fillStyle; + context.strokeStyle = ctx.strokeStyle; + current.fillColor = ctx.fillStyle; + current.strokeColor = ctx.strokeStyle; + break; + + case PaintType.UNCOLORED: + const cssColor = _util.Util.makeHexColor(color[0], color[1], color[2]); + + context.fillStyle = cssColor; + context.strokeStyle = cssColor; + current.fillColor = cssColor; + current.strokeColor = cssColor; + break; + + default: + throw new _util.FormatError(`Unsupported paint type: ${paintType}`); + } + } + + getPattern(ctx, owner, inverse, pathType) { + let matrix = inverse; + + if (pathType !== PathType.SHADING) { + matrix = _util.Util.transform(matrix, owner.baseTransform); + + if (this.matrix) { + matrix = _util.Util.transform(matrix, this.matrix); + } + } + + const temporaryPatternCanvas = this.createPatternCanvas(owner); + let domMatrix = new DOMMatrix(matrix); + domMatrix = domMatrix.translate(temporaryPatternCanvas.offsetX, temporaryPatternCanvas.offsetY); + domMatrix = domMatrix.scale(1 / temporaryPatternCanvas.scaleX, 1 / temporaryPatternCanvas.scaleY); + const pattern = ctx.createPattern(temporaryPatternCanvas.canvas, "repeat"); + + try { + pattern.setTransform(domMatrix); + } catch (ex) { + (0, _util.warn)(`TilingPattern.getPattern: "${ex?.message}".`); + } + + return pattern; + } + +} + +exports.TilingPattern = TilingPattern; + +/***/ }), +/* 14 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.applyMaskImageData = applyMaskImageData; + +var _util = __w_pdfjs_require__(1); + +function applyMaskImageData({ + src, + srcPos = 0, + dest, + destPos = 0, + width, + height, + inverseDecode = false +}) { + const opaque = _util.FeatureTest.isLittleEndian ? 0xff000000 : 0x000000ff; + const [zeroMapping, oneMapping] = !inverseDecode ? [opaque, 0] : [0, opaque]; + const widthInSource = width >> 3; + const widthRemainder = width & 7; + const srcLength = src.length; + dest = new Uint32Array(dest.buffer); + + for (let i = 0; i < height; i++) { + for (const max = srcPos + widthInSource; srcPos < max; srcPos++) { + const elem = srcPos < srcLength ? src[srcPos] : 255; + dest[destPos++] = elem & 0b10000000 ? oneMapping : zeroMapping; + dest[destPos++] = elem & 0b1000000 ? oneMapping : zeroMapping; + dest[destPos++] = elem & 0b100000 ? oneMapping : zeroMapping; + dest[destPos++] = elem & 0b10000 ? oneMapping : zeroMapping; + dest[destPos++] = elem & 0b1000 ? oneMapping : zeroMapping; + dest[destPos++] = elem & 0b100 ? oneMapping : zeroMapping; + dest[destPos++] = elem & 0b10 ? oneMapping : zeroMapping; + dest[destPos++] = elem & 0b1 ? oneMapping : zeroMapping; + } + + if (widthRemainder === 0) { + continue; + } + + const elem = srcPos < srcLength ? src[srcPos++] : 255; + + for (let j = 0; j < widthRemainder; j++) { + dest[destPos++] = elem & 1 << 7 - j ? oneMapping : zeroMapping; + } + } + + return { + srcPos, + destPos + }; +} + +/***/ }), +/* 15 */ +/***/ ((__unused_webpack_module, exports) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.GlobalWorkerOptions = void 0; +const GlobalWorkerOptions = Object.create(null); +exports.GlobalWorkerOptions = GlobalWorkerOptions; +GlobalWorkerOptions.workerPort = GlobalWorkerOptions.workerPort === undefined ? null : GlobalWorkerOptions.workerPort; +GlobalWorkerOptions.workerSrc = GlobalWorkerOptions.workerSrc === undefined ? "" : GlobalWorkerOptions.workerSrc; + +/***/ }), +/* 16 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.MessageHandler = void 0; + +var _util = __w_pdfjs_require__(1); + +const CallbackKind = { + UNKNOWN: 0, + DATA: 1, + ERROR: 2 +}; +const StreamKind = { + UNKNOWN: 0, + CANCEL: 1, + CANCEL_COMPLETE: 2, + CLOSE: 3, + ENQUEUE: 4, + ERROR: 5, + PULL: 6, + PULL_COMPLETE: 7, + START_COMPLETE: 8 +}; + +function wrapReason(reason) { + if (!(reason instanceof Error || typeof reason === "object" && reason !== null)) { + (0, _util.unreachable)('wrapReason: Expected "reason" to be a (possibly cloned) Error.'); + } + + switch (reason.name) { + case "AbortException": + return new _util.AbortException(reason.message); + + case "MissingPDFException": + return new _util.MissingPDFException(reason.message); + + case "PasswordException": + return new _util.PasswordException(reason.message, reason.code); + + case "UnexpectedResponseException": + return new _util.UnexpectedResponseException(reason.message, reason.status); + + case "UnknownErrorException": + return new _util.UnknownErrorException(reason.message, reason.details); + + default: + return new _util.UnknownErrorException(reason.message, reason.toString()); + } +} + +class MessageHandler { + constructor(sourceName, targetName, comObj) { + this.sourceName = sourceName; + this.targetName = targetName; + this.comObj = comObj; + this.callbackId = 1; + this.streamId = 1; + this.streamSinks = Object.create(null); + this.streamControllers = Object.create(null); + this.callbackCapabilities = Object.create(null); + this.actionHandler = Object.create(null); + + this._onComObjOnMessage = event => { + const data = event.data; + + if (data.targetName !== this.sourceName) { + return; + } + + if (data.stream) { + this._processStreamMessage(data); + + return; + } + + if (data.callback) { + const callbackId = data.callbackId; + const capability = this.callbackCapabilities[callbackId]; + + if (!capability) { + throw new Error(`Cannot resolve callback ${callbackId}`); + } + + delete this.callbackCapabilities[callbackId]; + + if (data.callback === CallbackKind.DATA) { + capability.resolve(data.data); + } else if (data.callback === CallbackKind.ERROR) { + capability.reject(wrapReason(data.reason)); + } else { + throw new Error("Unexpected callback case"); + } + + return; + } + + const action = this.actionHandler[data.action]; + + if (!action) { + throw new Error(`Unknown action from worker: ${data.action}`); + } + + if (data.callbackId) { + const cbSourceName = this.sourceName; + const cbTargetName = data.sourceName; + new Promise(function (resolve) { + resolve(action(data.data)); + }).then(function (result) { + comObj.postMessage({ + sourceName: cbSourceName, + targetName: cbTargetName, + callback: CallbackKind.DATA, + callbackId: data.callbackId, + data: result + }); + }, function (reason) { + comObj.postMessage({ + sourceName: cbSourceName, + targetName: cbTargetName, + callback: CallbackKind.ERROR, + callbackId: data.callbackId, + reason: wrapReason(reason) + }); + }); + return; + } + + if (data.streamId) { + this._createStreamSink(data); + + return; + } + + action(data.data); + }; + + comObj.addEventListener("message", this._onComObjOnMessage); + } + + on(actionName, handler) { + const ah = this.actionHandler; + + if (ah[actionName]) { + throw new Error(`There is already an actionName called "${actionName}"`); + } + + ah[actionName] = handler; + } + + send(actionName, data, transfers) { + this.comObj.postMessage({ + sourceName: this.sourceName, + targetName: this.targetName, + action: actionName, + data + }, transfers); + } + + sendWithPromise(actionName, data, transfers) { + const callbackId = this.callbackId++; + const capability = (0, _util.createPromiseCapability)(); + this.callbackCapabilities[callbackId] = capability; + + try { + this.comObj.postMessage({ + sourceName: this.sourceName, + targetName: this.targetName, + action: actionName, + callbackId, + data + }, transfers); + } catch (ex) { + capability.reject(ex); + } + + return capability.promise; + } + + sendWithStream(actionName, data, queueingStrategy, transfers) { + const streamId = this.streamId++, + sourceName = this.sourceName, + targetName = this.targetName, + comObj = this.comObj; + return new ReadableStream({ + start: controller => { + const startCapability = (0, _util.createPromiseCapability)(); + this.streamControllers[streamId] = { + controller, + startCall: startCapability, + pullCall: null, + cancelCall: null, + isClosed: false + }; + comObj.postMessage({ + sourceName, + targetName, + action: actionName, + streamId, + data, + desiredSize: controller.desiredSize + }, transfers); + return startCapability.promise; + }, + pull: controller => { + const pullCapability = (0, _util.createPromiseCapability)(); + this.streamControllers[streamId].pullCall = pullCapability; + comObj.postMessage({ + sourceName, + targetName, + stream: StreamKind.PULL, + streamId, + desiredSize: controller.desiredSize + }); + return pullCapability.promise; + }, + cancel: reason => { + (0, _util.assert)(reason instanceof Error, "cancel must have a valid reason"); + const cancelCapability = (0, _util.createPromiseCapability)(); + this.streamControllers[streamId].cancelCall = cancelCapability; + this.streamControllers[streamId].isClosed = true; + comObj.postMessage({ + sourceName, + targetName, + stream: StreamKind.CANCEL, + streamId, + reason: wrapReason(reason) + }); + return cancelCapability.promise; + } + }, queueingStrategy); + } + + _createStreamSink(data) { + const streamId = data.streamId, + sourceName = this.sourceName, + targetName = data.sourceName, + comObj = this.comObj; + const self = this, + action = this.actionHandler[data.action]; + const streamSink = { + enqueue(chunk, size = 1, transfers) { + if (this.isCancelled) { + return; + } + + const lastDesiredSize = this.desiredSize; + this.desiredSize -= size; + + if (lastDesiredSize > 0 && this.desiredSize <= 0) { + this.sinkCapability = (0, _util.createPromiseCapability)(); + this.ready = this.sinkCapability.promise; + } + + comObj.postMessage({ + sourceName, + targetName, + stream: StreamKind.ENQUEUE, + streamId, + chunk + }, transfers); + }, + + close() { + if (this.isCancelled) { + return; + } + + this.isCancelled = true; + comObj.postMessage({ + sourceName, + targetName, + stream: StreamKind.CLOSE, + streamId + }); + delete self.streamSinks[streamId]; + }, + + error(reason) { + (0, _util.assert)(reason instanceof Error, "error must have a valid reason"); + + if (this.isCancelled) { + return; + } + + this.isCancelled = true; + comObj.postMessage({ + sourceName, + targetName, + stream: StreamKind.ERROR, + streamId, + reason: wrapReason(reason) + }); + }, + + sinkCapability: (0, _util.createPromiseCapability)(), + onPull: null, + onCancel: null, + isCancelled: false, + desiredSize: data.desiredSize, + ready: null + }; + streamSink.sinkCapability.resolve(); + streamSink.ready = streamSink.sinkCapability.promise; + this.streamSinks[streamId] = streamSink; + new Promise(function (resolve) { + resolve(action(data.data, streamSink)); + }).then(function () { + comObj.postMessage({ + sourceName, + targetName, + stream: StreamKind.START_COMPLETE, + streamId, + success: true + }); + }, function (reason) { + comObj.postMessage({ + sourceName, + targetName, + stream: StreamKind.START_COMPLETE, + streamId, + reason: wrapReason(reason) + }); + }); + } + + _processStreamMessage(data) { + const streamId = data.streamId, + sourceName = this.sourceName, + targetName = data.sourceName, + comObj = this.comObj; + const streamController = this.streamControllers[streamId], + streamSink = this.streamSinks[streamId]; + + switch (data.stream) { + case StreamKind.START_COMPLETE: + if (data.success) { + streamController.startCall.resolve(); + } else { + streamController.startCall.reject(wrapReason(data.reason)); + }
- this.ctx.fillStyle = color; - this.current.fillColor = color; - this.current.patternFill = false; - } + break;
- _getPattern(objId, matrix = null) { - let pattern; + case StreamKind.PULL_COMPLETE: + if (data.success) { + streamController.pullCall.resolve(); + } else { + streamController.pullCall.reject(wrapReason(data.reason)); + }
- if (this.cachedPatterns.has(objId)) { - pattern = this.cachedPatterns.get(objId); - } else { - pattern = (0, _pattern_helper.getShadingPattern)(this.objs.get(objId)); - this.cachedPatterns.set(objId, pattern); - } + break;
- if (matrix) { - pattern.matrix = matrix; - } + case StreamKind.PULL: + if (!streamSink) { + comObj.postMessage({ + sourceName, + targetName, + stream: StreamKind.PULL_COMPLETE, + streamId, + success: true + }); + break; + }
- return pattern; - } + if (streamSink.desiredSize <= 0 && data.desiredSize > 0) { + streamSink.sinkCapability.resolve(); + }
- shadingFill(objId) { - if (!this.contentVisible) { - return; - } + streamSink.desiredSize = data.desiredSize; + new Promise(function (resolve) { + resolve(streamSink.onPull && streamSink.onPull()); + }).then(function () { + comObj.postMessage({ + sourceName, + targetName, + stream: StreamKind.PULL_COMPLETE, + streamId, + success: true + }); + }, function (reason) { + comObj.postMessage({ + sourceName, + targetName, + stream: StreamKind.PULL_COMPLETE, + streamId, + reason: wrapReason(reason) + }); + }); + break;
- const ctx = this.ctx; - this.save(); + case StreamKind.ENQUEUE: + (0, _util.assert)(streamController, "enqueue should have stream controller");
- const pattern = this._getPattern(objId); + if (streamController.isClosed) { + break; + }
- ctx.fillStyle = pattern.getPattern(ctx, this, ctx.mozCurrentTransformInverse, _pattern_helper.PathType.SHADING); - const inv = ctx.mozCurrentTransformInverse; + streamController.controller.enqueue(data.chunk); + break;
- if (inv) { - const canvas = ctx.canvas; - const width = canvas.width; - const height = canvas.height; + case StreamKind.CLOSE: + (0, _util.assert)(streamController, "close should have stream controller");
- const bl = _util.Util.applyTransform([0, 0], inv); + if (streamController.isClosed) { + break; + }
- const br = _util.Util.applyTransform([0, height], inv); + streamController.isClosed = true; + streamController.controller.close();
- const ul = _util.Util.applyTransform([width, 0], inv); + this._deleteStreamController(streamController, streamId);
- const ur = _util.Util.applyTransform([width, height], inv); + break;
- const x0 = Math.min(bl[0], br[0], ul[0], ur[0]); - const y0 = Math.min(bl[1], br[1], ul[1], ur[1]); - const x1 = Math.max(bl[0], br[0], ul[0], ur[0]); - const y1 = Math.max(bl[1], br[1], ul[1], ur[1]); - this.ctx.fillRect(x0, y0, x1 - x0, y1 - y0); - } else { - this.ctx.fillRect(-1e10, -1e10, 2e10, 2e10); - } + case StreamKind.ERROR: + (0, _util.assert)(streamController, "error should have stream controller"); + streamController.controller.error(wrapReason(data.reason));
- this.compose(this.current.getClippedPathBoundingBox()); - this.restore(); - } + this._deleteStreamController(streamController, streamId);
- beginInlineImage() { - (0, _util.unreachable)("Should not call beginInlineImage"); - } + break;
- beginImageData() { - (0, _util.unreachable)("Should not call beginImageData"); - } + case StreamKind.CANCEL_COMPLETE: + if (data.success) { + streamController.cancelCall.resolve(); + } else { + streamController.cancelCall.reject(wrapReason(data.reason)); + }
- paintFormXObjectBegin(matrix, bbox) { - if (!this.contentVisible) { - return; - } + this._deleteStreamController(streamController, streamId);
- this.save(); - this.baseTransformStack.push(this.baseTransform); + break;
- if (Array.isArray(matrix) && matrix.length === 6) { - this.transform.apply(this, matrix); - } + case StreamKind.CANCEL: + if (!streamSink) { + break; + }
- this.baseTransform = this.ctx.mozCurrentTransform; + new Promise(function (resolve) { + resolve(streamSink.onCancel && streamSink.onCancel(wrapReason(data.reason))); + }).then(function () { + comObj.postMessage({ + sourceName, + targetName, + stream: StreamKind.CANCEL_COMPLETE, + streamId, + success: true + }); + }, function (reason) { + comObj.postMessage({ + sourceName, + targetName, + stream: StreamKind.CANCEL_COMPLETE, + streamId, + reason: wrapReason(reason) + }); + }); + streamSink.sinkCapability.reject(wrapReason(data.reason)); + streamSink.isCancelled = true; + delete this.streamSinks[streamId]; + break;
- if (bbox) { - const width = bbox[2] - bbox[0]; - const height = bbox[3] - bbox[1]; - this.ctx.rect(bbox[0], bbox[1], width, height); - this.current.updateRectMinMax(this.ctx.mozCurrentTransform, bbox); - this.clip(); - this.endPath(); + default: + throw new Error("Unexpected stream case"); } }
- paintFormXObjectEnd() { - if (!this.contentVisible) { - return; - } + async _deleteStreamController(streamController, streamId) { + await Promise.allSettled([streamController.startCall && streamController.startCall.promise, streamController.pullCall && streamController.pullCall.promise, streamController.cancelCall && streamController.cancelCall.promise]); + delete this.streamControllers[streamId]; + }
- this.restore(); - this.baseTransform = this.baseTransformStack.pop(); + destroy() { + this.comObj.removeEventListener("message", this._onComObjOnMessage); }
- beginGroup(group) { - if (!this.contentVisible) { - return; - } +}
- this.save(); +exports.MessageHandler = MessageHandler;
- if (this.inSMaskMode) { - this.endSMaskMode(); - this.current.activeSMask = null; - } +/***/ }), +/* 17 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
- const currentCtx = this.ctx;
- if (!group.isolated) { - (0, _util.info)("TODO: Support non-isolated groups."); - }
- if (group.knockout) { - (0, _util.warn)("Knockout groups not supported."); - } +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.Metadata = void 0;
- const currentTransform = currentCtx.mozCurrentTransform; +var _util = __w_pdfjs_require__(1);
- if (group.matrix) { - currentCtx.transform.apply(currentCtx, group.matrix); - } +class Metadata { + #metadataMap; + #data;
- if (!group.bbox) { - throw new Error("Bounding box is required."); - } + constructor({ + parsedData, + rawData + }) { + this.#metadataMap = parsedData; + this.#data = rawData; + }
- let bounds = _util.Util.getAxialAlignedBoundingBox(group.bbox, currentCtx.mozCurrentTransform); + getRaw() { + return this.#data; + }
- const canvasBounds = [0, 0, currentCtx.canvas.width, currentCtx.canvas.height]; - bounds = _util.Util.intersect(bounds, canvasBounds) || [0, 0, 0, 0]; - const offsetX = Math.floor(bounds[0]); - const offsetY = Math.floor(bounds[1]); - let drawnWidth = Math.max(Math.ceil(bounds[2]) - offsetX, 1); - let drawnHeight = Math.max(Math.ceil(bounds[3]) - offsetY, 1); - let scaleX = 1, - scaleY = 1; + get(name) { + return this.#metadataMap.get(name) ?? null; + } + + getAll() { + return (0, _util.objectFromMap)(this.#metadataMap); + } + + has(name) { + return this.#metadataMap.has(name); + }
- if (drawnWidth > MAX_GROUP_SIZE) { - scaleX = drawnWidth / MAX_GROUP_SIZE; - drawnWidth = MAX_GROUP_SIZE; - } +}
- if (drawnHeight > MAX_GROUP_SIZE) { - scaleY = drawnHeight / MAX_GROUP_SIZE; - drawnHeight = MAX_GROUP_SIZE; - } +exports.Metadata = Metadata;
- this.current.startNewPathAndClipBox([0, 0, drawnWidth, drawnHeight]); - let cacheId = "groupAt" + this.groupLevel; +/***/ }), +/* 18 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
- if (group.smask) { - cacheId += "_smask_" + this.smaskCounter++ % 2; - }
- const scratchCanvas = this.cachedCanvases.getCanvas(cacheId, drawnWidth, drawnHeight, true); - const groupCtx = scratchCanvas.context; - groupCtx.scale(1 / scaleX, 1 / scaleY); - groupCtx.translate(-offsetX, -offsetY); - groupCtx.transform.apply(groupCtx, currentTransform);
- if (group.smask) { - this.smaskStack.push({ - canvas: scratchCanvas.canvas, - context: groupCtx, - offsetX, - offsetY, - scaleX, - scaleY, - subtype: group.smask.subtype, - backdrop: group.smask.backdrop, - transferMap: group.smask.transferMap || null, - startTransformInverse: null - }); - } else { - currentCtx.setTransform(1, 0, 0, 1, 0, 0); - currentCtx.translate(offsetX, offsetY); - currentCtx.scale(scaleX, scaleY); - currentCtx.save(); - } +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.OptionalContentConfig = void 0;
- copyCtxState(currentCtx, groupCtx); - this.ctx = groupCtx; - this.setGState([["BM", "source-over"], ["ca", 1], ["CA", 1]]); - this.groupStack.push(currentCtx); - this.groupLevel++; +var _util = __w_pdfjs_require__(1); + +class OptionalContentGroup { + constructor(name, intent) { + this.visible = true; + this.name = name; + this.intent = intent; }
- endGroup(group) { - if (!this.contentVisible) { - return; - } +}
- this.groupLevel--; - const groupCtx = this.ctx; - const ctx = this.groupStack.pop(); - this.ctx = ctx; - this.ctx.imageSmoothingEnabled = false; +class OptionalContentConfig { + constructor(data) { + this.name = null; + this.creator = null; + this._order = null; + this._groups = new Map();
- if (group.smask) { - this.tempSMask = this.smaskStack.pop(); - this.restore(); - } else { - this.ctx.restore(); - const currentMtx = this.ctx.mozCurrentTransform; - this.restore(); - this.ctx.save(); - this.ctx.setTransform.apply(this.ctx, currentMtx); + if (data === null) { + return; + }
- const dirtyBox = _util.Util.getAxialAlignedBoundingBox([0, 0, groupCtx.canvas.width, groupCtx.canvas.height], currentMtx); + this.name = data.name; + this.creator = data.creator; + this._order = data.order;
- this.ctx.drawImage(groupCtx.canvas, 0, 0); - this.ctx.restore(); - this.compose(dirtyBox); + for (const group of data.groups) { + this._groups.set(group.id, new OptionalContentGroup(group.name, group.intent)); } - }
- beginAnnotations() { - this.save(); + if (data.baseState === "OFF") { + for (const group of this._groups) { + group.visible = false; + } + }
- if (this.baseTransform) { - this.ctx.setTransform.apply(this.ctx, this.baseTransform); + for (const on of data.on) { + this._groups.get(on).visible = true; } - }
- endAnnotations() { - this.restore(); + for (const off of data.off) { + this._groups.get(off).visible = false; + } }
- beginAnnotation(id, rect, transform, matrix, hasOwnCanvas) { - this.save(); + _evaluateVisibilityExpression(array) { + const length = array.length;
- if (Array.isArray(rect) && rect.length === 4) { - const width = rect[2] - rect[0]; - const height = rect[3] - rect[1]; + if (length < 2) { + return true; + }
- if (hasOwnCanvas && this.annotationCanvasMap) { - transform = transform.slice(); - transform[4] -= rect[0]; - transform[5] -= rect[1]; - rect = rect.slice(); - rect[0] = rect[1] = 0; - rect[2] = width; - rect[3] = height; + const operator = array[0];
- const [scaleX, scaleY] = _util.Util.singularValueDecompose2dScale(this.ctx.mozCurrentTransform); + for (let i = 1; i < length; i++) { + const element = array[i]; + let state;
- const { - viewportScale - } = this; - const canvasWidth = Math.ceil(width * this.outputScaleX * viewportScale); - const canvasHeight = Math.ceil(height * this.outputScaleY * viewportScale); - this.annotationCanvas = this.canvasFactory.create(canvasWidth, canvasHeight); - const { - canvas, - context - } = this.annotationCanvas; - const viewportScaleFactorStr = `var(--zoom-factor) * ${_display_utils.PixelsPerInch.PDF_TO_CSS_UNITS}`; - canvas.style.width = `calc(${width}px * ${viewportScaleFactorStr})`; - canvas.style.height = `calc(${height}px * ${viewportScaleFactorStr})`; - this.annotationCanvasMap.set(id, canvas); - this.annotationCanvas.savedCtx = this.ctx; - this.ctx = context; - this.ctx.setTransform(scaleX, 0, 0, -scaleY, 0, height * scaleY); - addContextCurrentTransform(this.ctx); - resetCtxToDefault(this.ctx, this.foregroundColor); + if (Array.isArray(element)) { + state = this._evaluateVisibilityExpression(element); + } else if (this._groups.has(element)) { + state = this._groups.get(element).visible; } else { - resetCtxToDefault(this.ctx, this.foregroundColor); - this.ctx.rect(rect[0], rect[1], width, height); - this.ctx.clip(); - this.endPath(); + (0, _util.warn)(`Optional content group not found: ${element}`); + return true; } - } - - this.current = new CanvasExtraState(this.ctx.canvas.width, this.ctx.canvas.height); - this.transform.apply(this, transform); - this.transform.apply(this, matrix); - }
- endAnnotation() { - if (this.annotationCanvas) { - this.ctx = this.annotationCanvas.savedCtx; - delete this.annotationCanvas.savedCtx; - delete this.annotationCanvas; - } + switch (operator) { + case "And": + if (!state) { + return false; + }
- this.restore(); - } + break;
- paintImageMaskXObject(img) { - if (!this.contentVisible) { - return; - } + case "Or": + if (state) { + return true; + }
- const count = img.count; - img = this.getObject(img.data, img); - img.count = count; - const ctx = this.ctx; - const glyph = this.processingType3; + break;
- if (glyph) { - if (glyph.compiled === undefined) { - glyph.compiled = compileType3Glyph(img); - } + case "Not": + return !state;
- if (glyph.compiled) { - glyph.compiled(ctx); - return; + default: + return true; } }
- const mask = this._createMaskCanvas(img); - - const maskCanvas = mask.canvas; - ctx.save(); - ctx.setTransform(1, 0, 0, 1, 0, 0); - ctx.drawImage(maskCanvas, mask.offsetX, mask.offsetY); - ctx.restore(); - this.compose(); + return operator === "And"; }
- paintImageMaskXObjectRepeat(img, scaleX, skewX = 0, skewY = 0, scaleY, positions) { - if (!this.contentVisible) { - return; + isVisible(group) { + if (this._groups.size === 0) { + return true; }
- img = this.getObject(img.data, img); - const ctx = this.ctx; - ctx.save(); - const currentTransform = ctx.mozCurrentTransform; - ctx.transform(scaleX, skewX, skewY, scaleY, 0, 0); + if (!group) { + (0, _util.warn)("Optional content group not defined."); + return true; + }
- const mask = this._createMaskCanvas(img); + if (group.type === "OCG") { + if (!this._groups.has(group.id)) { + (0, _util.warn)(`Optional content group not found: ${group.id}`); + return true; + }
- ctx.setTransform(1, 0, 0, 1, 0, 0); + return this._groups.get(group.id).visible; + } else if (group.type === "OCMD") { + if (group.expression) { + return this._evaluateVisibilityExpression(group.expression); + }
- for (let i = 0, ii = positions.length; i < ii; i += 2) { - const trans = _util.Util.transform(currentTransform, [scaleX, skewX, skewY, scaleY, positions[i], positions[i + 1]]); + if (!group.policy || group.policy === "AnyOn") { + for (const id of group.ids) { + if (!this._groups.has(id)) { + (0, _util.warn)(`Optional content group not found: ${id}`); + return true; + } + + if (this._groups.get(id).visible) { + return true; + } + }
- const [x, y] = _util.Util.applyTransform([0, 0], trans); + return false; + } else if (group.policy === "AllOn") { + for (const id of group.ids) { + if (!this._groups.has(id)) { + (0, _util.warn)(`Optional content group not found: ${id}`); + return true; + }
- ctx.drawImage(mask.canvas, x, y); - } + if (!this._groups.get(id).visible) { + return false; + } + }
- ctx.restore(); - this.compose(); - } + return true; + } else if (group.policy === "AnyOff") { + for (const id of group.ids) { + if (!this._groups.has(id)) { + (0, _util.warn)(`Optional content group not found: ${id}`); + return true; + }
- paintImageMaskXObjectGroup(images) { - if (!this.contentVisible) { - return; - } + if (!this._groups.get(id).visible) { + return true; + } + }
- const ctx = this.ctx; - const fillColor = this.current.fillColor; - const isPatternFill = this.current.patternFill; + return false; + } else if (group.policy === "AllOff") { + for (const id of group.ids) { + if (!this._groups.has(id)) { + (0, _util.warn)(`Optional content group not found: ${id}`); + return true; + }
- for (let i = 0, ii = images.length; i < ii; i++) { - const image = images[i]; - const width = image.width, - height = image.height; - const maskCanvas = this.cachedCanvases.getCanvas("maskCanvas", width, height, false); - const maskCtx = maskCanvas.context; - maskCtx.save(); - putBinaryImageMask(maskCtx, image); - maskCtx.globalCompositeOperation = "source-in"; - maskCtx.fillStyle = isPatternFill ? fillColor.getPattern(maskCtx, this, ctx.mozCurrentTransformInverse, _pattern_helper.PathType.FILL) : fillColor; - maskCtx.fillRect(0, 0, width, height); - maskCtx.restore(); - ctx.save(); - ctx.transform.apply(ctx, image.transform); - ctx.scale(1, -1); - drawImageAtIntegerCoords(ctx, maskCanvas.canvas, 0, 0, width, height, 0, -1, 1, 1); - ctx.restore(); - } + if (this._groups.get(id).visible) { + return false; + } + }
- this.compose(); - } + return true; + }
- paintImageXObject(objId) { - if (!this.contentVisible) { - return; + (0, _util.warn)(`Unknown optional content policy ${group.policy}.`); + return true; }
- const imgData = this.getObject(objId); + (0, _util.warn)(`Unknown group type ${group.type}.`); + return true; + }
- if (!imgData) { - (0, _util.warn)("Dependent image isn't ready yet"); + setVisibility(id, visible = true) { + if (!this._groups.has(id)) { + (0, _util.warn)(`Optional content group not found: ${id}`); return; }
- this.paintInlineImageXObject(imgData); + this._groups.get(id).visible = !!visible; }
- paintImageXObjectRepeat(objId, scaleX, scaleY, positions) { - if (!this.contentVisible) { - return; + getOrder() { + if (!this._groups.size) { + return null; }
- const imgData = this.getObject(objId); - - if (!imgData) { - (0, _util.warn)("Dependent image isn't ready yet"); - return; + if (this._order) { + return this._order.slice(); }
- const width = imgData.width; - const height = imgData.height; - const map = []; - - for (let i = 0, ii = positions.length; i < ii; i += 2) { - map.push({ - transform: [scaleX, 0, 0, scaleY, positions[i], positions[i + 1]], - x: 0, - y: 0, - w: width, - h: height - }); - } + return Array.from(this._groups.keys()); + }
- this.paintInlineImageXObjectGroup(imgData, map); + getGroups() { + return this._groups.size > 0 ? (0, _util.objectFromMap)(this._groups) : null; }
- paintInlineImageXObject(imgData) { - if (!this.contentVisible) { - return; - } + getGroup(id) { + return this._groups.get(id) || null; + }
- const width = imgData.width; - const height = imgData.height; - const ctx = this.ctx; - this.save(); - ctx.scale(1 / width, -1 / height); - let imgToPaint; +}
- if (typeof HTMLElement === "function" && imgData instanceof HTMLElement || !imgData.data) { - imgToPaint = imgData; - } else { - const tmpCanvas = this.cachedCanvases.getCanvas("inlineImage", width, height, false); - const tmpCtx = tmpCanvas.context; - putBinaryImageData(tmpCtx, imgData, this.current.transferMaps); - imgToPaint = tmpCanvas.canvas; - } +exports.OptionalContentConfig = OptionalContentConfig;
- const scaled = this._scaleImage(imgToPaint, ctx.mozCurrentTransformInverse); +/***/ }), +/* 19 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
- ctx.imageSmoothingEnabled = getImageSmoothingEnabled(ctx.mozCurrentTransform, imgData.interpolate); - const [rWidth, rHeight] = drawImageAtIntegerCoords(ctx, scaled.img, 0, 0, scaled.paintWidth, scaled.paintHeight, 0, -height, width, height);
- if (this.imageLayer) { - const position = this.getCanvasPosition(0, -height); - this.imageLayer.appendImage({ - imgData, - left: position[0], - top: position[1], - width: rWidth, - height: rHeight - }); - }
- this.compose(); - this.restore(); - } +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.PDFDataTransportStream = void 0;
- paintInlineImageXObjectGroup(imgData, map) { - if (!this.contentVisible) { - return; - } +var _util = __w_pdfjs_require__(1);
- const ctx = this.ctx; - const w = imgData.width; - const h = imgData.height; - const tmpCanvas = this.cachedCanvases.getCanvas("inlineImage", w, h, false); - const tmpCtx = tmpCanvas.context; - putBinaryImageData(tmpCtx, imgData, this.current.transferMaps); +var _display_utils = __w_pdfjs_require__(4);
- for (let i = 0, ii = map.length; i < ii; i++) { - const entry = map[i]; - ctx.save(); - ctx.transform.apply(ctx, entry.transform); - ctx.scale(1, -1); - drawImageAtIntegerCoords(ctx, tmpCanvas.canvas, entry.x, entry.y, entry.w, entry.h, 0, -1, 1, 1); +class PDFDataTransportStream { + constructor(params, pdfDataRangeTransport) { + (0, _util.assert)(pdfDataRangeTransport, 'PDFDataTransportStream - missing required "pdfDataRangeTransport" argument.'); + this._queuedChunks = []; + this._progressiveDone = params.progressiveDone || false; + this._contentDispositionFilename = params.contentDispositionFilename || null; + const initialData = params.initialData;
- if (this.imageLayer) { - const position = this.getCanvasPosition(entry.x, entry.y); - this.imageLayer.appendImage({ - imgData, - left: position[0], - top: position[1], - width: w, - height: h - }); - } + if (initialData?.length > 0) { + const buffer = new Uint8Array(initialData).buffer;
- ctx.restore(); + this._queuedChunks.push(buffer); }
- this.compose(); - } - - paintSolidColorImageMask() { - if (!this.contentVisible) { - return; - } + this._pdfDataRangeTransport = pdfDataRangeTransport; + this._isStreamingSupported = !params.disableStream; + this._isRangeSupported = !params.disableRange; + this._contentLength = params.length; + this._fullRequestReader = null; + this._rangeReaders = [];
- this.ctx.fillRect(0, 0, 1, 1); - this.compose(); - } + this._pdfDataRangeTransport.addRangeListener((begin, chunk) => { + this._onReceiveData({ + begin, + chunk + }); + });
- markPoint(tag) {} + this._pdfDataRangeTransport.addProgressListener((loaded, total) => { + this._onProgress({ + loaded, + total + }); + });
- markPointProps(tag, properties) {} + this._pdfDataRangeTransport.addProgressiveReadListener(chunk => { + this._onReceiveData({ + chunk + }); + });
- beginMarkedContent(tag) { - this.markedContentStack.push({ - visible: true + this._pdfDataRangeTransport.addProgressiveDoneListener(() => { + this._onProgressiveDone(); }); + + this._pdfDataRangeTransport.transportReady(); }
- beginMarkedContentProps(tag, properties) { - if (tag === "OC") { - this.markedContentStack.push({ - visible: this.optionalContentConfig.isVisible(properties) - }); + _onReceiveData(args) { + const buffer = new Uint8Array(args.chunk).buffer; + + if (args.begin === undefined) { + if (this._fullRequestReader) { + this._fullRequestReader._enqueue(buffer); + } else { + this._queuedChunks.push(buffer); + } } else { - this.markedContentStack.push({ - visible: true + const found = this._rangeReaders.some(function (rangeReader) { + if (rangeReader._begin !== args.begin) { + return false; + } + + rangeReader._enqueue(buffer); + + return true; }); - }
- this.contentVisible = this.isContentVisible(); + (0, _util.assert)(found, "_onReceiveData - no `PDFDataTransportStreamRangeReader` instance found."); + } }
- endMarkedContent() { - this.markedContentStack.pop(); - this.contentVisible = this.isContentVisible(); + get _progressiveDataLength() { + return this._fullRequestReader?._loaded ?? 0; }
- beginCompat() {} - - endCompat() {} + _onProgress(evt) { + if (evt.total === undefined) { + const firstReader = this._rangeReaders[0];
- consumePath(clipBox) { - const isEmpty = this.current.isEmptyClip(); + if (firstReader?.onProgress) { + firstReader.onProgress({ + loaded: evt.loaded + }); + } + } else { + const fullReader = this._fullRequestReader;
- if (this.pendingClip) { - this.current.updateClipFromPath(); + if (fullReader?.onProgress) { + fullReader.onProgress({ + loaded: evt.loaded, + total: evt.total + }); + } } + }
- if (!this.pendingClip) { - this.compose(clipBox); + _onProgressiveDone() { + if (this._fullRequestReader) { + this._fullRequestReader.progressiveDone(); }
- const ctx = this.ctx; + this._progressiveDone = true; + }
- if (this.pendingClip) { - if (!isEmpty) { - if (this.pendingClip === EO_CLIP) { - ctx.clip("evenodd"); - } else { - ctx.clip(); - } - } + _removeRangeReader(reader) { + const i = this._rangeReaders.indexOf(reader);
- this.pendingClip = null; + if (i >= 0) { + this._rangeReaders.splice(i, 1); } - - this.current.startNewPathAndClipBox(this.current.clipBox); - ctx.beginPath(); }
- getSinglePixelWidth() { - if (!this._cachedGetSinglePixelWidth) { - const m = this.ctx.mozCurrentTransform; + getFullReader() { + (0, _util.assert)(!this._fullRequestReader, "PDFDataTransportStream.getFullReader can only be called once."); + const queuedChunks = this._queuedChunks; + this._queuedChunks = null; + return new PDFDataTransportStreamReader(this, queuedChunks, this._progressiveDone, this._contentDispositionFilename); + }
- if (m[1] === 0 && m[2] === 0) { - this._cachedGetSinglePixelWidth = 1 / Math.min(Math.abs(m[0]), Math.abs(m[3])); - } else { - const absDet = Math.abs(m[0] * m[3] - m[2] * m[1]); - const normX = Math.hypot(m[0], m[2]); - const normY = Math.hypot(m[1], m[3]); - this._cachedGetSinglePixelWidth = Math.max(normX, normY) / absDet; - } + getRangeReader(begin, end) { + if (end <= this._progressiveDataLength) { + return null; }
- return this._cachedGetSinglePixelWidth; - } + const reader = new PDFDataTransportStreamRangeReader(this, begin, end);
- getScaleForStroking() { - if (!this._cachedScaleForStroking) { - const { - lineWidth - } = this.current; - const m = this.ctx.mozCurrentTransform; - let scaleX, scaleY; + this._pdfDataRangeTransport.requestDataRange(begin, end);
- if (m[1] === 0 && m[2] === 0) { - const normX = Math.abs(m[0]); - const normY = Math.abs(m[3]); + this._rangeReaders.push(reader);
- if (lineWidth === 0) { - scaleX = 1 / normX; - scaleY = 1 / normY; - } else { - const scaledXLineWidth = normX * lineWidth; - const scaledYLineWidth = normY * lineWidth; - scaleX = scaledXLineWidth < 1 ? 1 / scaledXLineWidth : 1; - scaleY = scaledYLineWidth < 1 ? 1 / scaledYLineWidth : 1; - } - } else { - const absDet = Math.abs(m[0] * m[3] - m[2] * m[1]); - const normX = Math.hypot(m[0], m[1]); - const normY = Math.hypot(m[2], m[3]); + return reader; + }
- if (lineWidth === 0) { - scaleX = normY / absDet; - scaleY = normX / absDet; - } else { - const baseArea = lineWidth * absDet; - scaleX = normY > baseArea ? normY / baseArea : 1; - scaleY = normX > baseArea ? normX / baseArea : 1; - } - } + cancelAllRequests(reason) { + if (this._fullRequestReader) { + this._fullRequestReader.cancel(reason); + }
- this._cachedScaleForStroking = [scaleX, scaleY]; + for (const reader of this._rangeReaders.slice(0)) { + reader.cancel(reason); }
- return this._cachedScaleForStroking; + this._pdfDataRangeTransport.abort(); }
- rescaleAndStroke(saveRestore) { - const { - ctx - } = this; - const { - lineWidth - } = this.current; - const [scaleX, scaleY] = this.getScaleForStroking(); - ctx.lineWidth = lineWidth || 1; +}
- if (scaleX === 1 && scaleY === 1) { - ctx.stroke(); - return; - } +exports.PDFDataTransportStream = PDFDataTransportStream;
- let savedMatrix, savedDashes, savedDashOffset; +class PDFDataTransportStreamReader { + constructor(stream, queuedChunks, progressiveDone = false, contentDispositionFilename = null) { + this._stream = stream; + this._done = progressiveDone || false; + this._filename = (0, _display_utils.isPdfFile)(contentDispositionFilename) ? contentDispositionFilename : null; + this._queuedChunks = queuedChunks || []; + this._loaded = 0;
- if (saveRestore) { - savedMatrix = ctx.mozCurrentTransform.slice(); - savedDashes = ctx.getLineDash().slice(); - savedDashOffset = ctx.lineDashOffset; + for (const chunk of this._queuedChunks) { + this._loaded += chunk.byteLength; }
- ctx.scale(scaleX, scaleY); - const scale = Math.max(scaleX, scaleY); - ctx.setLineDash(ctx.getLineDash().map(x => x / scale)); - ctx.lineDashOffset /= scale; - ctx.stroke(); + this._requests = []; + this._headersReady = Promise.resolve(); + stream._fullRequestReader = this; + this.onProgress = null; + }
- if (saveRestore) { - ctx.setTransform(...savedMatrix); - ctx.setLineDash(savedDashes); - ctx.lineDashOffset = savedDashOffset; + _enqueue(chunk) { + if (this._done) { + return; } - }
- getCanvasPosition(x, y) { - const transform = this.ctx.mozCurrentTransform; - return [transform[0] * x + transform[2] * y + transform[4], transform[1] * x + transform[3] * y + transform[5]]; - } + if (this._requests.length > 0) { + const requestCapability = this._requests.shift();
- isContentVisible() { - for (let i = this.markedContentStack.length - 1; i >= 0; i--) { - if (!this.markedContentStack[i].visible) { - return false; - } + requestCapability.resolve({ + value: chunk, + done: false + }); + } else { + this._queuedChunks.push(chunk); }
- return true; + this._loaded += chunk.byteLength; }
-} + get headersReady() { + return this._headersReady; + }
-exports.CanvasGraphics = CanvasGraphics; + get filename() { + return this._filename; + }
-for (const op in _util.OPS) { - if (CanvasGraphics.prototype[op] !== undefined) { - CanvasGraphics.prototype[_util.OPS[op]] = CanvasGraphics.prototype[op]; + get isRangeSupported() { + return this._stream._isRangeSupported; } -}
-/***/ }), -/* 11 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + get isStreamingSupported() { + return this._stream._isStreamingSupported; + }
+ get contentLength() { + return this._stream._contentLength; + }
+ async read() { + if (this._queuedChunks.length > 0) { + const chunk = this._queuedChunks.shift();
-Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.TilingPattern = exports.PathType = void 0; -exports.getShadingPattern = getShadingPattern; + return { + value: chunk, + done: false + }; + }
-var _util = __w_pdfjs_require__(1); + if (this._done) { + return { + value: undefined, + done: true + }; + }
-var _is_node = __w_pdfjs_require__(3); + const requestCapability = (0, _util.createPromiseCapability)();
-const PathType = { - FILL: "Fill", - STROKE: "Stroke", - SHADING: "Shading" -}; -exports.PathType = PathType; + this._requests.push(requestCapability);
-function applyBoundingBox(ctx, bbox) { - if (!bbox || _is_node.isNodeJS) { - return; + return requestCapability.promise; }
- const width = bbox[2] - bbox[0]; - const height = bbox[3] - bbox[1]; - const region = new Path2D(); - region.rect(bbox[0], bbox[1], width, height); - ctx.clip(region); -} + cancel(reason) { + this._done = true;
-class BaseShadingPattern { - constructor() { - if (this.constructor === BaseShadingPattern) { - (0, _util.unreachable)("Cannot initialize BaseShadingPattern."); + for (const requestCapability of this._requests) { + requestCapability.resolve({ + value: undefined, + done: true + }); } + + this._requests.length = 0; }
- getPattern() { - (0, _util.unreachable)("Abstract method `getPattern` called."); + progressiveDone() { + if (this._done) { + return; + } + + this._done = true; }
}
-class RadialAxialShadingPattern extends BaseShadingPattern { - constructor(IR) { - super(); - this._type = IR[1]; - this._bbox = IR[2]; - this._colorStops = IR[3]; - this._p0 = IR[4]; - this._p1 = IR[5]; - this._r0 = IR[6]; - this._r1 = IR[7]; - this.matrix = null; +class PDFDataTransportStreamRangeReader { + constructor(stream, begin, end) { + this._stream = stream; + this._begin = begin; + this._end = end; + this._queuedChunk = null; + this._requests = []; + this._done = false; + this.onProgress = null; }
- _createGradient(ctx) { - let grad; - - if (this._type === "axial") { - grad = ctx.createLinearGradient(this._p0[0], this._p0[1], this._p1[0], this._p1[1]); - } else if (this._type === "radial") { - grad = ctx.createRadialGradient(this._p0[0], this._p0[1], this._r0, this._p1[0], this._p1[1], this._r1); + _enqueue(chunk) { + if (this._done) { + return; }
- for (const colorStop of this._colorStops) { - grad.addColorStop(colorStop[0], colorStop[1]); - } + if (this._requests.length === 0) { + this._queuedChunk = chunk; + } else { + const requestsCapability = this._requests.shift();
- return grad; - } + requestsCapability.resolve({ + value: chunk, + done: false + });
- getPattern(ctx, owner, inverse, pathType) { - let pattern; + for (const requestCapability of this._requests) { + requestCapability.resolve({ + value: undefined, + done: true + }); + }
- if (pathType === PathType.STROKE || pathType === PathType.FILL) { - const ownerBBox = owner.current.getClippedPathBoundingBox(pathType, ctx.mozCurrentTransform) || [0, 0, 0, 0]; - const width = Math.ceil(ownerBBox[2] - ownerBBox[0]) || 1; - const height = Math.ceil(ownerBBox[3] - ownerBBox[1]) || 1; - const tmpCanvas = owner.cachedCanvases.getCanvas("pattern", width, height, true); - const tmpCtx = tmpCanvas.context; - tmpCtx.clearRect(0, 0, tmpCtx.canvas.width, tmpCtx.canvas.height); - tmpCtx.beginPath(); - tmpCtx.rect(0, 0, tmpCtx.canvas.width, tmpCtx.canvas.height); - tmpCtx.translate(-ownerBBox[0], -ownerBBox[1]); - inverse = _util.Util.transform(inverse, [1, 0, 0, 1, ownerBBox[0], ownerBBox[1]]); - tmpCtx.transform.apply(tmpCtx, owner.baseTransform); + this._requests.length = 0; + }
- if (this.matrix) { - tmpCtx.transform.apply(tmpCtx, this.matrix); - } + this._done = true;
- applyBoundingBox(tmpCtx, this._bbox); - tmpCtx.fillStyle = this._createGradient(tmpCtx); - tmpCtx.fill(); - pattern = ctx.createPattern(tmpCanvas.canvas, "no-repeat"); - const domMatrix = new DOMMatrix(inverse); + this._stream._removeRangeReader(this); + }
- try { - pattern.setTransform(domMatrix); - } catch (ex) { - (0, _util.warn)(`RadialAxialShadingPattern.getPattern: "${ex?.message}".`); - } - } else { - applyBoundingBox(ctx, this._bbox); - pattern = this._createGradient(ctx); + get isStreamingSupported() { + return false; + } + + async read() { + if (this._queuedChunk) { + const chunk = this._queuedChunk; + this._queuedChunk = null; + return { + value: chunk, + done: false + }; }
- return pattern; - } + if (this._done) { + return { + value: undefined, + done: true + }; + }
-} + const requestCapability = (0, _util.createPromiseCapability)();
-function drawTriangle(data, context, p1, p2, p3, c1, c2, c3) { - const coords = context.coords, - colors = context.colors; - const bytes = data.data, - rowSize = data.width * 4; - let tmp; + this._requests.push(requestCapability);
- if (coords[p1 + 1] > coords[p2 + 1]) { - tmp = p1; - p1 = p2; - p2 = tmp; - tmp = c1; - c1 = c2; - c2 = tmp; + return requestCapability.promise; }
- if (coords[p2 + 1] > coords[p3 + 1]) { - tmp = p2; - p2 = p3; - p3 = tmp; - tmp = c2; - c2 = c3; - c3 = tmp; - } + cancel(reason) { + this._done = true;
- if (coords[p1 + 1] > coords[p2 + 1]) { - tmp = p1; - p1 = p2; - p2 = tmp; - tmp = c1; - c1 = c2; - c2 = tmp; - } + for (const requestCapability of this._requests) { + requestCapability.resolve({ + value: undefined, + done: true + }); + }
- const x1 = (coords[p1] + context.offsetX) * context.scaleX; - const y1 = (coords[p1 + 1] + context.offsetY) * context.scaleY; - const x2 = (coords[p2] + context.offsetX) * context.scaleX; - const y2 = (coords[p2 + 1] + context.offsetY) * context.scaleY; - const x3 = (coords[p3] + context.offsetX) * context.scaleX; - const y3 = (coords[p3 + 1] + context.offsetY) * context.scaleY; + this._requests.length = 0;
- if (y1 >= y3) { - return; + this._stream._removeRangeReader(this); }
- const c1r = colors[c1], - c1g = colors[c1 + 1], - c1b = colors[c1 + 2]; - const c2r = colors[c2], - c2g = colors[c2 + 1], - c2b = colors[c2 + 2]; - const c3r = colors[c3], - c3g = colors[c3 + 1], - c3b = colors[c3 + 2]; - const minY = Math.round(y1), - maxY = Math.round(y3); - let xa, car, cag, cab; - let xb, cbr, cbg, cbb; +}
- for (let y = minY; y <= maxY; y++) { - if (y < y2) { - let k; +/***/ }), +/* 20 */ +/***/ ((__unused_webpack_module, exports) => {
- if (y < y1) { - k = 0; - } else { - k = (y1 - y) / (y1 - y2); - }
- xa = x1 - (x1 - x2) * k; - car = c1r - (c1r - c2r) * k; - cag = c1g - (c1g - c2g) * k; - cab = c1b - (c1b - c2b) * k; - } else { - let k;
- if (y > y3) { - k = 1; - } else if (y2 === y3) { - k = 0; - } else { - k = (y2 - y) / (y2 - y3); - } +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.XfaText = void 0;
- xa = x2 - (x2 - x3) * k; - car = c2r - (c2r - c3r) * k; - cag = c2g - (c2g - c3g) * k; - cab = c2b - (c2b - c3b) * k; - } +class XfaText { + static textContent(xfa) { + const items = []; + const output = { + items, + styles: Object.create(null) + };
- let k; + function walk(node) { + if (!node) { + return; + }
- if (y < y1) { - k = 0; - } else if (y > y3) { - k = 1; - } else { - k = (y1 - y) / (y1 - y3); - } + let str = null; + const name = node.name;
- xb = x1 - (x1 - x3) * k; - cbr = c1r - (c1r - c3r) * k; - cbg = c1g - (c1g - c3g) * k; - cbb = c1b - (c1b - c3b) * k; - const x1_ = Math.round(Math.min(xa, xb)); - const x2_ = Math.round(Math.max(xa, xb)); - let j = rowSize * y + x1_ * 4; + if (name === "#text") { + str = node.value; + } else if (!XfaText.shouldBuildText(name)) { + return; + } else if (node?.attributes?.textContent) { + str = node.attributes.textContent; + } else if (node.value) { + str = node.value; + }
- for (let x = x1_; x <= x2_; x++) { - k = (xa - x) / (xa - xb); + if (str !== null) { + items.push({ + str + }); + }
- if (k < 0) { - k = 0; - } else if (k > 1) { - k = 1; + if (!node.children) { + return; }
- bytes[j++] = car - (car - cbr) * k | 0; - bytes[j++] = cag - (cag - cbg) * k | 0; - bytes[j++] = cab - (cab - cbb) * k | 0; - bytes[j++] = 255; + for (const child of node.children) { + walk(child); + } } + + walk(xfa); + return output; + } + + static shouldBuildText(name) { + return !(name === "textarea" || name === "input" || name === "option" || name === "select"); } + }
-function drawFigure(data, figure, context) { - const ps = figure.coords; - const cs = figure.colors; - let i, ii; +exports.XfaText = XfaText;
- switch (figure.type) { - case "lattice": - const verticesPerRow = figure.verticesPerRow; - const rows = Math.floor(ps.length / verticesPerRow) - 1; - const cols = verticesPerRow - 1; +/***/ }), +/* 21 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
- for (i = 0; i < rows; i++) { - let q = i * verticesPerRow;
- for (let j = 0; j < cols; j++, q++) { - drawTriangle(data, context, ps[q], ps[q + 1], ps[q + verticesPerRow], cs[q], cs[q + 1], cs[q + verticesPerRow]); - drawTriangle(data, context, ps[q + verticesPerRow + 1], ps[q + 1], ps[q + verticesPerRow], cs[q + verticesPerRow + 1], cs[q + 1], cs[q + verticesPerRow]); - } - }
- break; +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.AnnotationEditorLayer = void 0;
- case "triangles": - for (i = 0, ii = ps.length; i < ii; i += 3) { - drawTriangle(data, context, ps[i], ps[i + 1], ps[i + 2], cs[i], cs[i + 1], cs[i + 2]); - } +var _util = __w_pdfjs_require__(1);
- break; +var _display_utils = __w_pdfjs_require__(4);
- default: - throw new Error("illegal figure"); - } -} +var _tools = __w_pdfjs_require__(9);
-class MeshShadingPattern extends BaseShadingPattern { - constructor(IR) { - super(); - this._coords = IR[2]; - this._colors = IR[3]; - this._figures = IR[4]; - this._bounds = IR[5]; - this._bbox = IR[7]; - this._background = IR[8]; - this.matrix = null; +var _freetext = __w_pdfjs_require__(22); + +var _ink = __w_pdfjs_require__(23); + +class AnnotationEditorLayer { + #allowClick = false; + #boundPointerup = this.pointerup.bind(this); + #boundPointerdown = this.pointerdown.bind(this); + #editors = new Map(); + #isCleaningUp = false; + #textLayerMap = new WeakMap(); + #textNodes = new Map(); + #uiManager; + #waitingEditors = new Set(); + static _initialized = false; + + constructor(options) { + if (!AnnotationEditorLayer._initialized) { + AnnotationEditorLayer._initialized = true; + + _freetext.FreeTextEditor.initialize(options.l10n); + + _ink.InkEditor.initialize(options.l10n); + + options.uiManager.registerEditorTypes([_freetext.FreeTextEditor, _ink.InkEditor]); + } + + this.#uiManager = options.uiManager; + this.annotationStorage = options.annotationStorage; + this.pageIndex = options.pageIndex; + this.div = options.div; + this.#uiManager.addLayer(this); }
- _createMeshCanvas(combinedScale, backgroundColor, cachedCanvases) { - const EXPECTED_SCALE = 1.1; - const MAX_PATTERN_SIZE = 3000; - const BORDER_SIZE = 2; - const offsetX = Math.floor(this._bounds[0]); - const offsetY = Math.floor(this._bounds[1]); - const boundsWidth = Math.ceil(this._bounds[2]) - offsetX; - const boundsHeight = Math.ceil(this._bounds[3]) - offsetY; - const width = Math.min(Math.ceil(Math.abs(boundsWidth * combinedScale[0] * EXPECTED_SCALE)), MAX_PATTERN_SIZE); - const height = Math.min(Math.ceil(Math.abs(boundsHeight * combinedScale[1] * EXPECTED_SCALE)), MAX_PATTERN_SIZE); - const scaleX = boundsWidth / width; - const scaleY = boundsHeight / height; - const context = { - coords: this._coords, - colors: this._colors, - offsetX: -offsetX, - offsetY: -offsetY, - scaleX: 1 / scaleX, - scaleY: 1 / scaleY - }; - const paddedWidth = width + BORDER_SIZE * 2; - const paddedHeight = height + BORDER_SIZE * 2; - const tmpCanvas = cachedCanvases.getCanvas("mesh", paddedWidth, paddedHeight, false); - const tmpCtx = tmpCanvas.context; - const data = tmpCtx.createImageData(width, height); + get textLayerElements() { + const textLayer = this.div.parentNode.getElementsByClassName("textLayer").item(0);
- if (backgroundColor) { - const bytes = data.data; + if (!textLayer) { + return (0, _util.shadow)(this, "textLayerElements", null); + }
- for (let i = 0, ii = bytes.length; i < ii; i += 4) { - bytes[i] = backgroundColor[0]; - bytes[i + 1] = backgroundColor[1]; - bytes[i + 2] = backgroundColor[2]; - bytes[i + 3] = 255; - } + let textChildren = this.#textLayerMap.get(textLayer); + + if (textChildren) { + return textChildren; }
- for (const figure of this._figures) { - drawFigure(data, figure, context); + textChildren = textLayer.querySelectorAll(`span[role="presentation"]`); + + if (textChildren.length === 0) { + return (0, _util.shadow)(this, "textLayerElements", null); }
- tmpCtx.putImageData(data, BORDER_SIZE, BORDER_SIZE); - const canvas = tmpCanvas.canvas; - return { - canvas, - offsetX: offsetX - BORDER_SIZE * scaleX, - offsetY: offsetY - BORDER_SIZE * scaleY, - scaleX, - scaleY - }; + textChildren = Array.from(textChildren); + textChildren.sort(AnnotationEditorLayer.#compareElementPositions); + this.#textLayerMap.set(textLayer, textChildren); + return textChildren; }
- getPattern(ctx, owner, inverse, pathType) { - applyBoundingBox(ctx, this._bbox); - let scale; + get #hasTextLayer() { + return !!this.div.parentNode.querySelector(".textLayer .endOfContent"); + }
- if (pathType === PathType.SHADING) { - scale = _util.Util.singularValueDecompose2dScale(ctx.mozCurrentTransform); - } else { - scale = _util.Util.singularValueDecompose2dScale(owner.baseTransform); + updateToolbar(mode) { + this.#uiManager.updateToolbar(mode); + }
- if (this.matrix) { - const matrixScale = _util.Util.singularValueDecompose2dScale(this.matrix); + updateMode(mode = this.#uiManager.getMode()) { + this.#cleanup();
- scale = [scale[0] * matrixScale[0], scale[1] * matrixScale[1]]; - } + if (mode === _util.AnnotationEditorType.INK) { + this.addInkEditorIfNeeded(false); + this.disableClick(); + } else { + this.enableClick(); }
- const temporaryPatternCanvas = this._createMeshCanvas(scale, pathType === PathType.SHADING ? null : this._background, owner.cachedCanvases); + this.#uiManager.unselectAll(); + }
- if (pathType !== PathType.SHADING) { - ctx.setTransform.apply(ctx, owner.baseTransform); + addInkEditorIfNeeded(isCommitting) { + if (!isCommitting && this.#uiManager.getMode() !== _util.AnnotationEditorType.INK) { + return; + }
- if (this.matrix) { - ctx.transform.apply(ctx, this.matrix); + if (!isCommitting) { + for (const editor of this.#editors.values()) { + if (editor.isEmpty()) { + editor.setInBackground(); + return; + } } }
- ctx.translate(temporaryPatternCanvas.offsetX, temporaryPatternCanvas.offsetY); - ctx.scale(temporaryPatternCanvas.scaleX, temporaryPatternCanvas.scaleY); - return ctx.createPattern(temporaryPatternCanvas.canvas, "no-repeat"); + const editor = this.#createAndAddNewEditor({ + offsetX: 0, + offsetY: 0 + }); + editor.setInBackground(); }
-} + setEditingState(isEditing) { + this.#uiManager.setEditingState(isEditing); + }
-class DummyShadingPattern extends BaseShadingPattern { - getPattern() { - return "hotpink"; + addCommands(params) { + this.#uiManager.addCommands(params); }
-} + enable() { + this.div.style.pointerEvents = "auto";
-function getShadingPattern(IR) { - switch (IR[0]) { - case "RadialAxial": - return new RadialAxialShadingPattern(IR); + for (const editor of this.#editors.values()) { + editor.enableEditing(); + } + }
- case "Mesh": - return new MeshShadingPattern(IR); + disable() { + this.div.style.pointerEvents = "none";
- case "Dummy": - return new DummyShadingPattern(); + for (const editor of this.#editors.values()) { + editor.disableEditing(); + } }
- throw new Error(`Unknown IR type: ${IR[0]}`); -} + setActiveEditor(editor) { + const currentActive = this.#uiManager.getActive();
-const PaintType = { - COLORED: 1, - UNCOLORED: 2 -}; + if (currentActive === editor) { + return; + }
-class TilingPattern { - static get MAX_PATTERN_SIZE() { - return (0, _util.shadow)(this, "MAX_PATTERN_SIZE", 3000); + this.#uiManager.setActiveEditor(editor); }
- constructor(IR, color, ctx, canvasGraphicsFactory, baseTransform) { - this.operatorList = IR[2]; - this.matrix = IR[3] || [1, 0, 0, 1, 0, 0]; - this.bbox = IR[4]; - this.xstep = IR[5]; - this.ystep = IR[6]; - this.paintType = IR[7]; - this.tilingType = IR[8]; - this.color = color; - this.ctx = ctx; - this.canvasGraphicsFactory = canvasGraphicsFactory; - this.baseTransform = baseTransform; + enableClick() { + this.div.addEventListener("pointerdown", this.#boundPointerdown); + this.div.addEventListener("pointerup", this.#boundPointerup); }
- createPatternCanvas(owner) { - const operatorList = this.operatorList; - const bbox = this.bbox; - const xstep = this.xstep; - const ystep = this.ystep; - const paintType = this.paintType; - const tilingType = this.tilingType; - const color = this.color; - const canvasGraphicsFactory = this.canvasGraphicsFactory; - (0, _util.info)("TilingType: " + tilingType); - const x0 = bbox[0], - y0 = bbox[1], - x1 = bbox[2], - y1 = bbox[3]; + disableClick() { + this.div.removeEventListener("pointerdown", this.#boundPointerdown); + this.div.removeEventListener("pointerup", this.#boundPointerup); + }
- const matrixScale = _util.Util.singularValueDecompose2dScale(this.matrix); + attach(editor) { + this.#editors.set(editor.id, editor); + }
- const curMatrixScale = _util.Util.singularValueDecompose2dScale(this.baseTransform); + detach(editor) { + this.#editors.delete(editor.id); + this.removePointerInTextLayer(editor); + }
- const combinedScale = [matrixScale[0] * curMatrixScale[0], matrixScale[1] * curMatrixScale[1]]; - const dimx = this.getSizeAndScale(xstep, this.ctx.canvas.width, combinedScale[0]); - const dimy = this.getSizeAndScale(ystep, this.ctx.canvas.height, combinedScale[1]); - const tmpCanvas = owner.cachedCanvases.getCanvas("pattern", dimx.size, dimy.size, true); - const tmpCtx = tmpCanvas.context; - const graphics = canvasGraphicsFactory.createCanvasGraphics(tmpCtx); - graphics.groupLevel = owner.groupLevel; - this.setFillAndStrokeStyleToContext(graphics, paintType, color); - let adjustedX0 = x0; - let adjustedY0 = y0; - let adjustedX1 = x1; - let adjustedY1 = y1; + remove(editor) { + this.#uiManager.removeEditor(editor); + this.detach(editor); + this.annotationStorage.removeKey(editor.id); + editor.div.style.display = "none"; + setTimeout(() => { + editor.div.style.display = ""; + editor.div.remove(); + editor.isAttachedToDOM = false;
- if (x0 < 0) { - adjustedX0 = 0; - adjustedX1 += Math.abs(x0); + if (document.activeElement === document.body) { + this.#uiManager.focusMainContainer(); + } + }, 0); + + if (!this.#isCleaningUp) { + this.addInkEditorIfNeeded(false); } + }
- if (y0 < 0) { - adjustedY0 = 0; - adjustedY1 += Math.abs(y0); + #changeParent(editor) { + if (editor.parent === this) { + return; }
- tmpCtx.translate(-(dimx.scale * adjustedX0), -(dimy.scale * adjustedY0)); - graphics.transform(dimx.scale, 0, 0, dimy.scale, 0, 0); - tmpCtx.save(); - this.clipBbox(graphics, adjustedX0, adjustedY0, adjustedX1, adjustedY1); - graphics.baseTransform = graphics.ctx.mozCurrentTransform.slice(); - graphics.executeOperatorList(operatorList); - graphics.endDrawing(); - return { - canvas: tmpCanvas.canvas, - scaleX: dimx.scale, - scaleY: dimy.scale, - offsetX: adjustedX0, - offsetY: adjustedY0 - }; + this.attach(editor); + editor.pageIndex = this.pageIndex; + editor.parent?.detach(editor); + editor.parent = this; + + if (editor.div && editor.isAttachedToDOM) { + editor.div.remove(); + this.div.append(editor.div); + } }
- getSizeAndScale(step, realOutputSize, scale) { - step = Math.abs(step); - const maxSize = Math.max(TilingPattern.MAX_PATTERN_SIZE, realOutputSize); - let size = Math.ceil(step * scale); + static #compareElementPositions(e1, e2) { + const rect1 = e1.getBoundingClientRect(); + const rect2 = e2.getBoundingClientRect();
- if (size >= maxSize) { - size = maxSize; - } else { - scale = size / step; + if (rect1.y + rect1.height <= rect2.y) { + return -1; }
- return { - scale, - size - }; + if (rect2.y + rect2.height <= rect1.y) { + return +1; + } + + const centerX1 = rect1.x + rect1.width / 2; + const centerX2 = rect2.x + rect2.width / 2; + return centerX1 - centerX2; }
- clipBbox(graphics, x0, y0, x1, y1) { - const bboxWidth = x1 - x0; - const bboxHeight = y1 - y0; - graphics.ctx.rect(x0, y0, bboxWidth, bboxHeight); - graphics.current.updateRectMinMax(graphics.ctx.mozCurrentTransform, [x0, y0, x1, y1]); - graphics.clip(); - graphics.endPath(); + onTextLayerRendered() { + this.#textNodes.clear(); + + for (const editor of this.#waitingEditors) { + if (editor.isAttachedToDOM) { + this.addPointerInTextLayer(editor); + } + } + + this.#waitingEditors.clear(); }
- setFillAndStrokeStyleToContext(graphics, paintType, color) { - const context = graphics.ctx, - current = graphics.current; + removePointerInTextLayer(editor) { + if (!this.#hasTextLayer) { + this.#waitingEditors.delete(editor); + return; + }
- switch (paintType) { - case PaintType.COLORED: - const ctx = this.ctx; - context.fillStyle = ctx.fillStyle; - context.strokeStyle = ctx.strokeStyle; - current.fillColor = ctx.fillStyle; - current.strokeColor = ctx.strokeStyle; - break; + const { + id + } = editor; + const node = this.#textNodes.get(id);
- case PaintType.UNCOLORED: - const cssColor = _util.Util.makeHexColor(color[0], color[1], color[2]); + if (!node) { + return; + }
- context.fillStyle = cssColor; - context.strokeStyle = cssColor; - current.fillColor = cssColor; - current.strokeColor = cssColor; - break; + this.#textNodes.delete(id); + let owns = node.getAttribute("aria-owns");
- default: - throw new _util.FormatError(`Unsupported paint type: ${paintType}`); + if (owns?.includes(id)) { + owns = owns.split(" ").filter(x => x !== id).join(" "); + + if (owns) { + node.setAttribute("aria-owns", owns); + } else { + node.removeAttribute("aria-owns"); + node.setAttribute("role", "presentation"); + } } }
- getPattern(ctx, owner, inverse, pathType) { - let matrix = inverse; + addPointerInTextLayer(editor) { + if (!this.#hasTextLayer) { + this.#waitingEditors.add(editor); + return; + }
- if (pathType !== PathType.SHADING) { - matrix = _util.Util.transform(matrix, owner.baseTransform); + this.removePointerInTextLayer(editor); + const children = this.textLayerElements;
- if (this.matrix) { - matrix = _util.Util.transform(matrix, this.matrix); - } + if (!children) { + return; }
- const temporaryPatternCanvas = this.createPatternCanvas(owner); - let domMatrix = new DOMMatrix(matrix); - domMatrix = domMatrix.translate(temporaryPatternCanvas.offsetX, temporaryPatternCanvas.offsetY); - domMatrix = domMatrix.scale(1 / temporaryPatternCanvas.scaleX, 1 / temporaryPatternCanvas.scaleY); - const pattern = ctx.createPattern(temporaryPatternCanvas.canvas, "repeat"); + const { + contentDiv + } = editor; + const id = editor.getIdForTextLayer(); + const index = (0, _display_utils.binarySearchFirstItem)(children, node => AnnotationEditorLayer.#compareElementPositions(contentDiv, node) < 0); + const node = children[Math.max(0, index - 1)]; + const owns = node.getAttribute("aria-owns");
- try { - pattern.setTransform(domMatrix); - } catch (ex) { - (0, _util.warn)(`TilingPattern.getPattern: "${ex?.message}".`); + if (!owns?.includes(id)) { + node.setAttribute("aria-owns", owns ? `${owns} ${id}` : id); }
- return pattern; + node.removeAttribute("role"); + this.#textNodes.set(id, node); }
-} - -exports.TilingPattern = TilingPattern; + moveDivInDOM(editor) { + this.addPointerInTextLayer(editor); + const { + div, + contentDiv + } = editor;
-/***/ }), -/* 12 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + if (!this.div.hasChildNodes()) { + this.div.append(div); + return; + }
+ const children = Array.from(this.div.childNodes).filter(node => node !== div);
+ if (children.length === 0) { + return; + }
-Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.applyMaskImageData = applyMaskImageData; + const index = (0, _display_utils.binarySearchFirstItem)(children, node => AnnotationEditorLayer.#compareElementPositions(contentDiv, node) < 0);
-var _util = __w_pdfjs_require__(1); + if (index === 0) { + children[0].before(div); + } else { + children[index - 1].after(div); + } + }
-function applyMaskImageData({ - src, - srcPos = 0, - dest, - destPos = 0, - width, - height, - inverseDecode = false -}) { - const opaque = _util.FeatureTest.isLittleEndian ? 0xff000000 : 0x000000ff; - const [zeroMapping, oneMapping] = !inverseDecode ? [opaque, 0] : [0, opaque]; - const widthInSource = width >> 3; - const widthRemainder = width & 7; - const srcLength = src.length; - dest = new Uint32Array(dest.buffer); + add(editor) { + this.#changeParent(editor); + this.annotationStorage.setValue(editor.id, editor); + this.#uiManager.addEditor(editor); + this.attach(editor);
- for (let i = 0; i < height; i++) { - for (const max = srcPos + widthInSource; srcPos < max; srcPos++) { - const elem = srcPos < srcLength ? src[srcPos] : 255; - dest[destPos++] = elem & 0b10000000 ? oneMapping : zeroMapping; - dest[destPos++] = elem & 0b1000000 ? oneMapping : zeroMapping; - dest[destPos++] = elem & 0b100000 ? oneMapping : zeroMapping; - dest[destPos++] = elem & 0b10000 ? oneMapping : zeroMapping; - dest[destPos++] = elem & 0b1000 ? oneMapping : zeroMapping; - dest[destPos++] = elem & 0b100 ? oneMapping : zeroMapping; - dest[destPos++] = elem & 0b10 ? oneMapping : zeroMapping; - dest[destPos++] = elem & 0b1 ? oneMapping : zeroMapping; + if (!editor.isAttachedToDOM) { + const div = editor.render(); + this.div.append(div); + editor.isAttachedToDOM = true; }
- if (widthRemainder === 0) { - continue; + this.moveDivInDOM(editor); + editor.onceAdded(); + } + + addOrRebuild(editor) { + if (editor.needsToBeRebuilt()) { + editor.rebuild(); + } else { + this.add(editor); } + }
- const elem = srcPos < srcLength ? src[srcPos++] : 255; + addANewEditor(editor) { + const cmd = () => { + this.addOrRebuild(editor); + };
- for (let j = 0; j < widthRemainder; j++) { - dest[destPos++] = elem & 1 << 7 - j ? oneMapping : zeroMapping; + const undo = () => { + editor.remove(); + }; + + this.addCommands({ + cmd, + undo, + mustExec: true + }); + } + + addUndoableEditor(editor) { + const cmd = () => { + this.addOrRebuild(editor); + }; + + const undo = () => { + editor.remove(); + }; + + this.addCommands({ + cmd, + undo, + mustExec: false + }); + } + + getNextId() { + return this.#uiManager.getId(); + } + + #createNewEditor(params) { + switch (this.#uiManager.getMode()) { + case _util.AnnotationEditorType.FREETEXT: + return new _freetext.FreeTextEditor(params); + + case _util.AnnotationEditorType.INK: + return new _ink.InkEditor(params); } + + return null; }
- return { - srcPos, - destPos - }; -} + deserialize(data) { + switch (data.annotationType) { + case _util.AnnotationEditorType.FREETEXT: + return _freetext.FreeTextEditor.deserialize(data, this);
-/***/ }), -/* 13 */ -/***/ ((__unused_webpack_module, exports) => { + case _util.AnnotationEditorType.INK: + return _ink.InkEditor.deserialize(data, this); + }
+ return null; + }
+ #createAndAddNewEditor(event) { + const id = this.getNextId(); + const editor = this.#createNewEditor({ + parent: this, + id, + x: event.offsetX, + y: event.offsetY + });
-Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.GlobalWorkerOptions = void 0; -const GlobalWorkerOptions = Object.create(null); -exports.GlobalWorkerOptions = GlobalWorkerOptions; -GlobalWorkerOptions.workerPort = GlobalWorkerOptions.workerPort === undefined ? null : GlobalWorkerOptions.workerPort; -GlobalWorkerOptions.workerSrc = GlobalWorkerOptions.workerSrc === undefined ? "" : GlobalWorkerOptions.workerSrc; + if (editor) { + this.add(editor); + }
-/***/ }), -/* 14 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + return editor; + }
+ setSelected(editor) { + this.#uiManager.setSelected(editor); + }
+ toggleSelected(editor) { + this.#uiManager.toggleSelected(editor); + }
-Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.MessageHandler = void 0; + isSelected(editor) { + return this.#uiManager.isSelected(editor); + }
-var _util = __w_pdfjs_require__(1); + unselect(editor) { + this.#uiManager.unselect(editor); + }
-const CallbackKind = { - UNKNOWN: 0, - DATA: 1, - ERROR: 2 -}; -const StreamKind = { - UNKNOWN: 0, - CANCEL: 1, - CANCEL_COMPLETE: 2, - CLOSE: 3, - ENQUEUE: 4, - ERROR: 5, - PULL: 6, - PULL_COMPLETE: 7, - START_COMPLETE: 8 -}; + pointerup(event) { + if (event.target !== this.div) { + return; + }
-function wrapReason(reason) { - if (!(reason instanceof Error || typeof reason === "object" && reason !== null)) { - (0, _util.unreachable)('wrapReason: Expected "reason" to be a (possibly cloned) Error.'); + if (!this.#allowClick) { + this.#allowClick = true; + return; + } + + this.#createAndAddNewEditor(event); }
- switch (reason.name) { - case "AbortException": - return new _util.AbortException(reason.message); + pointerdown(event) { + if (event.target !== this.div) { + return; + }
- case "MissingPDFException": - return new _util.MissingPDFException(reason.message); + const editor = this.#uiManager.getActive(); + this.#allowClick = !editor || editor.isEmpty(); + }
- case "PasswordException": - return new _util.PasswordException(reason.message, reason.code); + drop(event) { + const id = event.dataTransfer.getData("text/plain"); + const editor = this.#uiManager.getEditor(id);
- case "UnexpectedResponseException": - return new _util.UnexpectedResponseException(reason.message, reason.status); + if (!editor) { + return; + }
- case "UnknownErrorException": - return new _util.UnknownErrorException(reason.message, reason.details); + event.preventDefault(); + event.dataTransfer.dropEffect = "move"; + this.#changeParent(editor); + const rect = this.div.getBoundingClientRect(); + const endX = event.clientX - rect.x; + const endY = event.clientY - rect.y; + editor.translate(endX - editor.startX, endY - editor.startY); + this.moveDivInDOM(editor); + editor.div.focus(); + }
- default: - return new _util.UnknownErrorException(reason.message, reason.toString()); + dragover(event) { + event.preventDefault(); } -}
-class MessageHandler { - constructor(sourceName, targetName, comObj) { - this.sourceName = sourceName; - this.targetName = targetName; - this.comObj = comObj; - this.callbackId = 1; - this.streamId = 1; - this.streamSinks = Object.create(null); - this.streamControllers = Object.create(null); - this.callbackCapabilities = Object.create(null); - this.actionHandler = Object.create(null); + destroy() { + if (this.#uiManager.getActive()?.parent === this) { + this.#uiManager.setActiveEditor(null); + }
- this._onComObjOnMessage = event => { - const data = event.data; + for (const editor of this.#editors.values()) { + this.removePointerInTextLayer(editor); + editor.isAttachedToDOM = false; + editor.div.remove(); + editor.parent = null; + }
- if (data.targetName !== this.sourceName) { - return; + this.#textNodes.clear(); + this.div = null; + this.#editors.clear(); + this.#waitingEditors.clear(); + this.#uiManager.removeLayer(this); + } + + #cleanup() { + this.#isCleaningUp = true; + + for (const editor of this.#editors.values()) { + if (editor.isEmpty()) { + editor.remove(); } + }
- if (data.stream) { - this._processStreamMessage(data); + this.#isCleaningUp = false; + } + + render(parameters) { + this.viewport = parameters.viewport; + (0, _tools.bindEvents)(this, this.div, ["dragover", "drop"]); + this.setDimensions(); + + for (const editor of this.#uiManager.getEditors(this.pageIndex)) { + this.add(editor); + } + + this.updateMode(); + }
- return; - } + update(parameters) { + this.viewport = parameters.viewport; + this.setDimensions(); + this.updateMode(); + }
- if (data.callback) { - const callbackId = data.callbackId; - const capability = this.callbackCapabilities[callbackId]; + get scaleFactor() { + return this.viewport.scale; + }
- if (!capability) { - throw new Error(`Cannot resolve callback ${callbackId}`); - } + get pageDimensions() { + const [pageLLx, pageLLy, pageURx, pageURy] = this.viewport.viewBox; + const width = pageURx - pageLLx; + const height = pageURy - pageLLy; + return [width, height]; + }
- delete this.callbackCapabilities[callbackId]; + get viewportBaseDimensions() { + const { + width, + height, + rotation + } = this.viewport; + return rotation % 180 === 0 ? [width, height] : [height, width]; + }
- if (data.callback === CallbackKind.DATA) { - capability.resolve(data.data); - } else if (data.callback === CallbackKind.ERROR) { - capability.reject(wrapReason(data.reason)); - } else { - throw new Error("Unexpected callback case"); - } + setDimensions() { + const { + width, + height, + rotation + } = this.viewport; + const flipOrientation = rotation % 180 !== 0, + widthStr = Math.floor(width) + "px", + heightStr = Math.floor(height) + "px"; + this.div.style.width = flipOrientation ? heightStr : widthStr; + this.div.style.height = flipOrientation ? widthStr : heightStr; + this.div.setAttribute("data-main-rotation", rotation); + }
- return; - } +}
- const action = this.actionHandler[data.action]; +exports.AnnotationEditorLayer = AnnotationEditorLayer;
- if (!action) { - throw new Error(`Unknown action from worker: ${data.action}`); - } +/***/ }), +/* 22 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
- if (data.callbackId) { - const cbSourceName = this.sourceName; - const cbTargetName = data.sourceName; - new Promise(function (resolve) { - resolve(action(data.data)); - }).then(function (result) { - comObj.postMessage({ - sourceName: cbSourceName, - targetName: cbTargetName, - callback: CallbackKind.DATA, - callbackId: data.callbackId, - data: result - }); - }, function (reason) { - comObj.postMessage({ - sourceName: cbSourceName, - targetName: cbTargetName, - callback: CallbackKind.ERROR, - callbackId: data.callbackId, - reason: wrapReason(reason) - }); - }); - return; - }
- if (data.streamId) { - this._createStreamSink(data);
- return; - } +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.FreeTextEditor = void 0;
- action(data.data); - }; +var _util = __w_pdfjs_require__(1);
- comObj.addEventListener("message", this._onComObjOnMessage); +var _tools = __w_pdfjs_require__(9); + +var _editor = __w_pdfjs_require__(8); + +class FreeTextEditor extends _editor.AnnotationEditor { + #boundEditorDivBlur = this.editorDivBlur.bind(this); + #boundEditorDivFocus = this.editorDivFocus.bind(this); + #boundEditorDivKeydown = this.editorDivKeydown.bind(this); + #color; + #content = ""; + #contentHTML = ""; + #hasAlreadyBeenCommitted = false; + #fontSize; + static _freeTextDefaultContent = ""; + static _l10nPromise; + static _internalPadding = 0; + static _defaultColor = null; + static _defaultFontSize = 10; + static _keyboardManager = new _tools.KeyboardManager([[["ctrl+Enter", "mac+meta+Enter", "Escape", "mac+Escape"], FreeTextEditor.prototype.commitOrRemove]]); + + constructor(params) { + super({ ...params, + name: "freeTextEditor" + }); + this.#color = params.color || FreeTextEditor._defaultColor || _editor.AnnotationEditor._defaultLineColor; + this.#fontSize = params.fontSize || FreeTextEditor._defaultFontSize; }
- on(actionName, handler) { - const ah = this.actionHandler; + static initialize(l10n) { + this._l10nPromise = new Map(["free_text_default_content", "editor_free_text_aria_label"].map(str => [str, l10n.get(str)])); + const style = getComputedStyle(document.documentElement); + this._internalPadding = parseFloat(style.getPropertyValue("--freetext-padding")); + }
- if (ah[actionName]) { - throw new Error(`There is already an actionName called "${actionName}"`); + static updateDefaultParams(type, value) { + switch (type) { + case _util.AnnotationEditorParamsType.FREETEXT_SIZE: + FreeTextEditor._defaultFontSize = value; + break; + + case _util.AnnotationEditorParamsType.FREETEXT_COLOR: + FreeTextEditor._defaultColor = value; + break; } + }
- ah[actionName] = handler; + updateParams(type, value) { + switch (type) { + case _util.AnnotationEditorParamsType.FREETEXT_SIZE: + this.#updateFontSize(value); + break; + + case _util.AnnotationEditorParamsType.FREETEXT_COLOR: + this.#updateColor(value); + break; + } }
- send(actionName, data, transfers) { - this.comObj.postMessage({ - sourceName: this.sourceName, - targetName: this.targetName, - action: actionName, - data - }, transfers); + static get defaultPropertiesToUpdate() { + return [[_util.AnnotationEditorParamsType.FREETEXT_SIZE, FreeTextEditor._defaultFontSize], [_util.AnnotationEditorParamsType.FREETEXT_COLOR, FreeTextEditor._defaultColor || _editor.AnnotationEditor._defaultLineColor]]; }
- sendWithPromise(actionName, data, transfers) { - const callbackId = this.callbackId++; - const capability = (0, _util.createPromiseCapability)(); - this.callbackCapabilities[callbackId] = capability; + get propertiesToUpdate() { + return [[_util.AnnotationEditorParamsType.FREETEXT_SIZE, this.#fontSize], [_util.AnnotationEditorParamsType.FREETEXT_COLOR, this.#color]]; + }
- try { - this.comObj.postMessage({ - sourceName: this.sourceName, - targetName: this.targetName, - action: actionName, - callbackId, - data - }, transfers); - } catch (ex) { - capability.reject(ex); - } + #updateFontSize(fontSize) { + const setFontsize = size => { + this.editorDiv.style.fontSize = `calc(${size}px * var(--scale-factor))`; + this.translate(0, -(size - this.#fontSize) * this.parent.scaleFactor); + this.#fontSize = size; + this.#setEditorDimensions(); + };
- return capability.promise; + const savedFontsize = this.#fontSize; + this.parent.addCommands({ + cmd: () => { + setFontsize(fontSize); + }, + undo: () => { + setFontsize(savedFontsize); + }, + mustExec: true, + type: _util.AnnotationEditorParamsType.FREETEXT_SIZE, + overwriteIfSameType: true, + keepUndo: true + }); }
- sendWithStream(actionName, data, queueingStrategy, transfers) { - const streamId = this.streamId++, - sourceName = this.sourceName, - targetName = this.targetName, - comObj = this.comObj; - return new ReadableStream({ - start: controller => { - const startCapability = (0, _util.createPromiseCapability)(); - this.streamControllers[streamId] = { - controller, - startCall: startCapability, - pullCall: null, - cancelCall: null, - isClosed: false - }; - comObj.postMessage({ - sourceName, - targetName, - action: actionName, - streamId, - data, - desiredSize: controller.desiredSize - }, transfers); - return startCapability.promise; + #updateColor(color) { + const savedColor = this.#color; + this.parent.addCommands({ + cmd: () => { + this.#color = color; + this.editorDiv.style.color = color; }, - pull: controller => { - const pullCapability = (0, _util.createPromiseCapability)(); - this.streamControllers[streamId].pullCall = pullCapability; - comObj.postMessage({ - sourceName, - targetName, - stream: StreamKind.PULL, - streamId, - desiredSize: controller.desiredSize - }); - return pullCapability.promise; + undo: () => { + this.#color = savedColor; + this.editorDiv.style.color = savedColor; }, - cancel: reason => { - (0, _util.assert)(reason instanceof Error, "cancel must have a valid reason"); - const cancelCapability = (0, _util.createPromiseCapability)(); - this.streamControllers[streamId].cancelCall = cancelCapability; - this.streamControllers[streamId].isClosed = true; - comObj.postMessage({ - sourceName, - targetName, - stream: StreamKind.CANCEL, - streamId, - reason: wrapReason(reason) - }); - return cancelCapability.promise; - } - }, queueingStrategy); + mustExec: true, + type: _util.AnnotationEditorParamsType.FREETEXT_COLOR, + overwriteIfSameType: true, + keepUndo: true + }); }
- _createStreamSink(data) { - const streamId = data.streamId, - sourceName = this.sourceName, - targetName = data.sourceName, - comObj = this.comObj; - const self = this, - action = this.actionHandler[data.action]; - const streamSink = { - enqueue(chunk, size = 1, transfers) { - if (this.isCancelled) { - return; - } - - const lastDesiredSize = this.desiredSize; - this.desiredSize -= size; - - if (lastDesiredSize > 0 && this.desiredSize <= 0) { - this.sinkCapability = (0, _util.createPromiseCapability)(); - this.ready = this.sinkCapability.promise; - } + getInitialTranslation() { + return [-FreeTextEditor._internalPadding * this.parent.scaleFactor, -(FreeTextEditor._internalPadding + this.#fontSize) * this.parent.scaleFactor]; + }
- comObj.postMessage({ - sourceName, - targetName, - stream: StreamKind.ENQUEUE, - streamId, - chunk - }, transfers); - }, + rebuild() { + super.rebuild();
- close() { - if (this.isCancelled) { - return; - } + if (this.div === null) { + return; + }
- this.isCancelled = true; - comObj.postMessage({ - sourceName, - targetName, - stream: StreamKind.CLOSE, - streamId - }); - delete self.streamSinks[streamId]; - }, + if (!this.isAttachedToDOM) { + this.parent.add(this); + } + }
- error(reason) { - (0, _util.assert)(reason instanceof Error, "error must have a valid reason"); + enableEditMode() { + this.parent.setEditingState(false); + this.parent.updateToolbar(_util.AnnotationEditorType.FREETEXT); + super.enableEditMode(); + this.overlayDiv.classList.remove("enabled"); + this.editorDiv.contentEditable = true; + this.div.draggable = false; + this.editorDiv.addEventListener("keydown", this.#boundEditorDivKeydown); + this.editorDiv.addEventListener("focus", this.#boundEditorDivFocus); + this.editorDiv.addEventListener("blur", this.#boundEditorDivBlur); + }
- if (this.isCancelled) { - return; - } + disableEditMode() { + this.parent.setEditingState(true); + super.disableEditMode(); + this.overlayDiv.classList.add("enabled"); + this.editorDiv.contentEditable = false; + this.div.draggable = true; + this.editorDiv.removeEventListener("keydown", this.#boundEditorDivKeydown); + this.editorDiv.removeEventListener("focus", this.#boundEditorDivFocus); + this.editorDiv.removeEventListener("blur", this.#boundEditorDivBlur); + this.isEditing = false; + }
- this.isCancelled = true; - comObj.postMessage({ - sourceName, - targetName, - stream: StreamKind.ERROR, - streamId, - reason: wrapReason(reason) - }); - }, + focusin(event) { + super.focusin(event);
- sinkCapability: (0, _util.createPromiseCapability)(), - onPull: null, - onCancel: null, - isCancelled: false, - desiredSize: data.desiredSize, - ready: null - }; - streamSink.sinkCapability.resolve(); - streamSink.ready = streamSink.sinkCapability.promise; - this.streamSinks[streamId] = streamSink; - new Promise(function (resolve) { - resolve(action(data.data, streamSink)); - }).then(function () { - comObj.postMessage({ - sourceName, - targetName, - stream: StreamKind.START_COMPLETE, - streamId, - success: true - }); - }, function (reason) { - comObj.postMessage({ - sourceName, - targetName, - stream: StreamKind.START_COMPLETE, - streamId, - reason: wrapReason(reason) - }); - }); + if (event.target !== this.editorDiv) { + this.editorDiv.focus(); + } }
- _processStreamMessage(data) { - const streamId = data.streamId, - sourceName = this.sourceName, - targetName = data.sourceName, - comObj = this.comObj; - const streamController = this.streamControllers[streamId], - streamSink = this.streamSinks[streamId]; + onceAdded() { + if (this.width) { + this.parent.setActiveEditor(this); + return; + }
- switch (data.stream) { - case StreamKind.START_COMPLETE: - if (data.success) { - streamController.startCall.resolve(); - } else { - streamController.startCall.reject(wrapReason(data.reason)); - } + this.enableEditMode(); + this.editorDiv.focus(); + }
- break; + isEmpty() { + return this.editorDiv.innerText.trim() === ""; + }
- case StreamKind.PULL_COMPLETE: - if (data.success) { - streamController.pullCall.resolve(); - } else { - streamController.pullCall.reject(wrapReason(data.reason)); - } + remove() { + this.isEditing = false; + this.parent.setEditingState(true); + super.remove(); + }
- break; + #extractText() { + const divs = this.editorDiv.getElementsByTagName("div");
- case StreamKind.PULL: - if (!streamSink) { - comObj.postMessage({ - sourceName, - targetName, - stream: StreamKind.PULL_COMPLETE, - streamId, - success: true - }); - break; - } + if (divs.length === 0) { + return this.editorDiv.innerText; + }
- if (streamSink.desiredSize <= 0 && data.desiredSize > 0) { - streamSink.sinkCapability.resolve(); - } + const buffer = [];
- streamSink.desiredSize = data.desiredSize; - new Promise(function (resolve) { - resolve(streamSink.onPull && streamSink.onPull()); - }).then(function () { - comObj.postMessage({ - sourceName, - targetName, - stream: StreamKind.PULL_COMPLETE, - streamId, - success: true - }); - }, function (reason) { - comObj.postMessage({ - sourceName, - targetName, - stream: StreamKind.PULL_COMPLETE, - streamId, - reason: wrapReason(reason) - }); - }); - break; + for (let i = 0, ii = divs.length; i < ii; i++) { + const div = divs[i]; + const first = div.firstChild;
- case StreamKind.ENQUEUE: - (0, _util.assert)(streamController, "enqueue should have stream controller"); + if (first?.nodeName === "#text") { + buffer.push(first.data); + } else { + buffer.push(""); + } + }
- if (streamController.isClosed) { - break; - } + return buffer.join("\n"); + }
- streamController.controller.enqueue(data.chunk); - break; + #setEditorDimensions() { + const [parentWidth, parentHeight] = this.parent.viewportBaseDimensions; + const rect = this.div.getBoundingClientRect(); + this.width = rect.width / parentWidth; + this.height = rect.height / parentHeight; + }
- case StreamKind.CLOSE: - (0, _util.assert)(streamController, "close should have stream controller"); + commit() { + if (!this.#hasAlreadyBeenCommitted) { + this.#hasAlreadyBeenCommitted = true; + this.parent.addUndoableEditor(this); + }
- if (streamController.isClosed) { - break; - } + this.disableEditMode(); + this.#contentHTML = this.editorDiv.innerHTML; + this.#content = this.#extractText().trimEnd(); + this.#setEditorDimensions(); + }
- streamController.isClosed = true; - streamController.controller.close(); + shouldGetKeyboardEvents() { + return this.isInEditMode(); + }
- this._deleteStreamController(streamController, streamId); + dblclick(event) { + this.enableEditMode(); + this.editorDiv.focus(); + }
- break; + keydown(event) { + if (event.target === this.div && event.key === "Enter") { + this.enableEditMode(); + this.editorDiv.focus(); + } + }
- case StreamKind.ERROR: - (0, _util.assert)(streamController, "error should have stream controller"); - streamController.controller.error(wrapReason(data.reason)); + editorDivKeydown(event) { + FreeTextEditor._keyboardManager.exec(this, event); + }
- this._deleteStreamController(streamController, streamId); + editorDivFocus(event) { + this.isEditing = true; + }
- break; + editorDivBlur(event) { + this.isEditing = false; + }
- case StreamKind.CANCEL_COMPLETE: - if (data.success) { - streamController.cancelCall.resolve(); - } else { - streamController.cancelCall.reject(wrapReason(data.reason)); - } + disableEditing() { + this.editorDiv.setAttribute("role", "comment"); + this.editorDiv.removeAttribute("aria-multiline"); + }
- this._deleteStreamController(streamController, streamId); + enableEditing() { + this.editorDiv.setAttribute("role", "textbox"); + this.editorDiv.setAttribute("aria-multiline", true); + }
- break; + getIdForTextLayer() { + return this.editorDiv.id; + }
- case StreamKind.CANCEL: - if (!streamSink) { - break; - } + render() { + if (this.div) { + return this.div; + }
- new Promise(function (resolve) { - resolve(streamSink.onCancel && streamSink.onCancel(wrapReason(data.reason))); - }).then(function () { - comObj.postMessage({ - sourceName, - targetName, - stream: StreamKind.CANCEL_COMPLETE, - streamId, - success: true - }); - }, function (reason) { - comObj.postMessage({ - sourceName, - targetName, - stream: StreamKind.CANCEL_COMPLETE, - streamId, - reason: wrapReason(reason) - }); - }); - streamSink.sinkCapability.reject(wrapReason(data.reason)); - streamSink.isCancelled = true; - delete this.streamSinks[streamId]; - break; + let baseX, baseY;
- default: - throw new Error("Unexpected stream case"); + if (this.width) { + baseX = this.x; + baseY = this.y; + } + + super.render(); + this.editorDiv = document.createElement("div"); + this.editorDiv.className = "internal"; + this.editorDiv.setAttribute("id", `${this.id}-editor`); + this.enableEditing(); + + FreeTextEditor._l10nPromise.get("editor_free_text_aria_label").then(msg => this.editorDiv?.setAttribute("aria-label", msg)); + + FreeTextEditor._l10nPromise.get("free_text_default_content").then(msg => this.editorDiv?.setAttribute("default-content", msg)); + + this.editorDiv.contentEditable = true; + const { + style + } = this.editorDiv; + style.fontSize = `calc(${this.#fontSize}px * var(--scale-factor))`; + style.color = this.#color; + this.div.append(this.editorDiv); + this.overlayDiv = document.createElement("div"); + this.overlayDiv.classList.add("overlay", "enabled"); + this.div.append(this.overlayDiv); + (0, _tools.bindEvents)(this, this.div, ["dblclick", "keydown"]); + + if (this.width) { + const [parentWidth, parentHeight] = this.parent.viewportBaseDimensions; + this.setAt(baseX * parentWidth, baseY * parentHeight, this.width * parentWidth, this.height * parentHeight); + this.editorDiv.innerHTML = this.#contentHTML; + this.div.draggable = true; + this.editorDiv.contentEditable = false; + } else { + this.div.draggable = false; + this.editorDiv.contentEditable = true; } + + return this.div; }
- async _deleteStreamController(streamController, streamId) { - await Promise.allSettled([streamController.startCall && streamController.startCall.promise, streamController.pullCall && streamController.pullCall.promise, streamController.cancelCall && streamController.cancelCall.promise]); - delete this.streamControllers[streamId]; + get contentDiv() { + return this.editorDiv; }
- destroy() { - this.comObj.removeEventListener("message", this._onComObjOnMessage); + static deserialize(data, parent) { + const editor = super.deserialize(data, parent); + editor.#fontSize = data.fontSize; + editor.#color = _util.Util.makeHexColor(...data.color); + editor.#content = data.value; + editor.#contentHTML = data.value.split("\n").map(line => `<div>${line}</div>`).join(""); + return editor; + } + + serialize() { + if (this.isEmpty()) { + return null; + } + + const padding = FreeTextEditor._internalPadding * this.parent.scaleFactor; + const rect = this.getRect(padding, padding); + + const color = _editor.AnnotationEditor._colorManager.convert(getComputedStyle(this.editorDiv).color); + + return { + annotationType: _util.AnnotationEditorType.FREETEXT, + color, + fontSize: this.#fontSize, + value: this.#content, + pageIndex: this.parent.pageIndex, + rect, + rotation: this.rotation + }; }
}
-exports.MessageHandler = MessageHandler; +exports.FreeTextEditor = FreeTextEditor;
/***/ }), -/* 15 */ +/* 23 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
@@ -8572,684 +11425,1107 @@ exports.MessageHandler = MessageHandler; Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.Metadata = void 0; +exports.InkEditor = void 0; +Object.defineProperty(exports, "fitCurve", ({ + enumerable: true, + get: function () { + return _pdfjsFitCurve.fitCurve; + } +}));
var _util = __w_pdfjs_require__(1);
-class Metadata { - #metadataMap; - #data; +var _editor = __w_pdfjs_require__(8); + +var _pdfjsFitCurve = __w_pdfjs_require__(24); + +const RESIZER_SIZE = 16; + +class InkEditor extends _editor.AnnotationEditor { + #aspectRatio = 0; + #baseHeight = 0; + #baseWidth = 0; + #boundCanvasPointermove = this.canvasPointermove.bind(this); + #boundCanvasPointerleave = this.canvasPointerleave.bind(this); + #boundCanvasPointerup = this.canvasPointerup.bind(this); + #boundCanvasPointerdown = this.canvasPointerdown.bind(this); + #disableEditing = false; + #isCanvasInitialized = false; + #observer = null; + #realWidth = 0; + #realHeight = 0; + static _defaultColor = null; + static _defaultThickness = 1; + static _l10nPromise; + + constructor(params) { + super({ ...params, + name: "inkEditor" + }); + this.color = params.color || null; + this.thickness = params.thickness || null; + this.paths = []; + this.bezierPath2D = []; + this.currentPath = []; + this.scaleFactor = 1; + this.translationX = this.translationY = 0; + this.x = 0; + this.y = 0; + }
- constructor({ - parsedData, - rawData - }) { - this.#metadataMap = parsedData; - this.#data = rawData; + static initialize(l10n) { + this._l10nPromise = new Map(["editor_ink_canvas_aria_label", "editor_ink_aria_label"].map(str => [str, l10n.get(str)])); }
- getRaw() { - return this.#data; + static updateDefaultParams(type, value) { + switch (type) { + case _util.AnnotationEditorParamsType.INK_THICKNESS: + InkEditor._defaultThickness = value; + break; + + case _util.AnnotationEditorParamsType.INK_COLOR: + InkEditor._defaultColor = value; + break; + } }
- get(name) { - return this.#metadataMap.get(name) ?? null; + updateParams(type, value) { + switch (type) { + case _util.AnnotationEditorParamsType.INK_THICKNESS: + this.#updateThickness(value); + break; + + case _util.AnnotationEditorParamsType.INK_COLOR: + this.#updateColor(value); + break; + } }
- getAll() { - return (0, _util.objectFromMap)(this.#metadataMap); + static get defaultPropertiesToUpdate() { + return [[_util.AnnotationEditorParamsType.INK_THICKNESS, InkEditor._defaultThickness], [_util.AnnotationEditorParamsType.INK_COLOR, InkEditor._defaultColor || _editor.AnnotationEditor._defaultLineColor]]; }
- has(name) { - return this.#metadataMap.has(name); + get propertiesToUpdate() { + return [[_util.AnnotationEditorParamsType.INK_THICKNESS, this.thickness || InkEditor._defaultThickness], [_util.AnnotationEditorParamsType.INK_COLOR, this.color || InkEditor._defaultColor || _editor.AnnotationEditor._defaultLineColor]]; }
-} + #updateThickness(thickness) { + const savedThickness = this.thickness; + this.parent.addCommands({ + cmd: () => { + this.thickness = thickness; + this.#fitToContent(true); + }, + undo: () => { + this.thickness = savedThickness; + this.#fitToContent(true); + }, + mustExec: true, + type: _util.AnnotationEditorParamsType.INK_THICKNESS, + overwriteIfSameType: true, + keepUndo: true + }); + }
-exports.Metadata = Metadata; + #updateColor(color) { + const savedColor = this.color; + this.parent.addCommands({ + cmd: () => { + this.color = color; + this.#redraw(); + }, + undo: () => { + this.color = savedColor; + this.#redraw(); + }, + mustExec: true, + type: _util.AnnotationEditorParamsType.INK_COLOR, + overwriteIfSameType: true, + keepUndo: true + }); + }
-/***/ }), -/* 16 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + rebuild() { + super.rebuild();
+ if (this.div === null) { + return; + }
+ if (!this.canvas) { + this.#createCanvas(); + this.#createObserver(); + }
-Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.OptionalContentConfig = void 0; + if (!this.isAttachedToDOM) { + this.parent.add(this); + this.#setCanvasDims(); + }
-var _util = __w_pdfjs_require__(1); + this.#fitToContent(); + }
-class OptionalContentGroup { - constructor(name, intent) { - this.visible = true; - this.name = name; - this.intent = intent; + remove() { + if (this.canvas === null) { + return; + } + + if (!this.isEmpty()) { + this.commit(); + } + + this.canvas.width = this.canvas.height = 0; + this.canvas.remove(); + this.canvas = null; + this.#observer.disconnect(); + this.#observer = null; + super.remove(); }
-} + enableEditMode() { + if (this.#disableEditing || this.canvas === null) { + return; + }
-class OptionalContentConfig { - constructor(data) { - this.name = null; - this.creator = null; - this._order = null; - this._groups = new Map(); + super.enableEditMode(); + this.div.draggable = false; + this.canvas.addEventListener("pointerdown", this.#boundCanvasPointerdown); + this.canvas.addEventListener("pointerup", this.#boundCanvasPointerup); + } + + disableEditMode() { + if (!this.isInEditMode() || this.canvas === null) { + return; + } + + super.disableEditMode(); + this.div.draggable = !this.isEmpty(); + this.div.classList.remove("editing"); + this.canvas.removeEventListener("pointerdown", this.#boundCanvasPointerdown); + this.canvas.removeEventListener("pointerup", this.#boundCanvasPointerup); + } + + onceAdded() { + this.div.draggable = !this.isEmpty(); + } + + isEmpty() { + return this.paths.length === 0 || this.paths.length === 1 && this.paths[0].length === 0; + } + + #getInitialBBox() { + const { + width, + height, + rotation + } = this.parent.viewport; + + switch (rotation) { + case 90: + return [0, width, width, height];
- if (data === null) { - return; - } + case 180: + return [width, height, width, height];
- this.name = data.name; - this.creator = data.creator; - this._order = data.order; + case 270: + return [height, 0, width, height];
- for (const group of data.groups) { - this._groups.set(group.id, new OptionalContentGroup(group.name, group.intent)); + default: + return [0, 0, width, height]; } + }
- if (data.baseState === "OFF") { - for (const group of this._groups) { - group.visible = false; - } - } + #setStroke() { + this.ctx.lineWidth = this.thickness * this.parent.scaleFactor / this.scaleFactor; + this.ctx.lineCap = "round"; + this.ctx.lineJoin = "round"; + this.ctx.miterLimit = 10; + this.ctx.strokeStyle = this.color; + }
- for (const on of data.on) { - this._groups.get(on).visible = true; - } + #startDrawing(x, y) { + this.isEditing = true;
- for (const off of data.off) { - this._groups.get(off).visible = false; + if (!this.#isCanvasInitialized) { + this.#isCanvasInitialized = true; + this.#setCanvasDims(); + this.thickness ||= InkEditor._defaultThickness; + this.color ||= InkEditor._defaultColor || _editor.AnnotationEditor._defaultLineColor; } + + this.currentPath.push([x, y]); + this.#setStroke(); + this.ctx.beginPath(); + this.ctx.moveTo(x, y); }
- _evaluateVisibilityExpression(array) { - const length = array.length; + #draw(x, y) { + this.currentPath.push([x, y]); + this.ctx.lineTo(x, y); + this.ctx.stroke(); + }
- if (length < 2) { - return true; + #stopDrawing(x, y) { + x = Math.min(Math.max(x, 0), this.canvas.width); + y = Math.min(Math.max(y, 0), this.canvas.height); + this.currentPath.push([x, y]); + let bezier; + + if (this.currentPath.length !== 2 || this.currentPath[0][0] !== x || this.currentPath[0][1] !== y) { + bezier = (0, _pdfjsFitCurve.fitCurve)(this.currentPath, 30, null); + } else { + const xy = [x, y]; + bezier = [[xy, xy.slice(), xy.slice(), xy]]; }
- const operator = array[0]; + const path2D = InkEditor.#buildPath2D(bezier); + this.currentPath.length = 0;
- for (let i = 1; i < length; i++) { - const element = array[i]; - let state; + const cmd = () => { + this.paths.push(bezier); + this.bezierPath2D.push(path2D); + this.rebuild(); + };
- if (Array.isArray(element)) { - state = this._evaluateVisibilityExpression(element); - } else if (this._groups.has(element)) { - state = this._groups.get(element).visible; + const undo = () => { + this.paths.pop(); + this.bezierPath2D.pop(); + + if (this.paths.length === 0) { + this.remove(); } else { - (0, _util.warn)(`Optional content group not found: ${element}`); - return true; + if (!this.canvas) { + this.#createCanvas(); + this.#createObserver(); + } + + this.#fitToContent(); } + };
- switch (operator) { - case "And": - if (!state) { - return false; - } + this.parent.addCommands({ + cmd, + undo, + mustExec: true + }); + }
- break; + #redraw() { + this.#setStroke();
- case "Or": - if (state) { - return true; - } + if (this.isEmpty()) { + this.#updateTransform(); + return; + }
- break; + const [parentWidth, parentHeight] = this.parent.viewportBaseDimensions; + const { + ctx, + height, + width + } = this; + ctx.setTransform(1, 0, 0, 1, 0, 0); + ctx.clearRect(0, 0, width * parentWidth, height * parentHeight); + this.#updateTransform();
- case "Not": - return !state; + for (const path of this.bezierPath2D) { + ctx.stroke(path); + } + }
- default: - return true; - } + commit() { + if (this.#disableEditing) { + return; }
- return operator === "And"; + this.isEditing = false; + this.disableEditMode(); + this.setInForeground(); + this.#disableEditing = true; + this.div.classList.add("disabled"); + this.#fitToContent(); + this.parent.addInkEditorIfNeeded(true); + this.parent.moveDivInDOM(this); + this.div.focus(); }
- isVisible(group) { - if (this._groups.size === 0) { - return true; + focusin(event) { + super.focusin(event); + this.enableEditMode(); + } + + canvasPointerdown(event) { + if (event.button !== 0 || !this.isInEditMode() || this.#disableEditing) { + return; }
- if (!group) { - (0, _util.warn)("Optional content group not defined."); - return true; + this.setInForeground(); + + if (event.type !== "mouse") { + this.div.focus(); }
- if (group.type === "OCG") { - if (!this._groups.has(group.id)) { - (0, _util.warn)(`Optional content group not found: ${group.id}`); - return true; - } + event.stopPropagation(); + this.canvas.addEventListener("pointerleave", this.#boundCanvasPointerleave); + this.canvas.addEventListener("pointermove", this.#boundCanvasPointermove); + this.#startDrawing(event.offsetX, event.offsetY); + }
- return this._groups.get(group.id).visible; - } else if (group.type === "OCMD") { - if (group.expression) { - return this._evaluateVisibilityExpression(group.expression); - } + canvasPointermove(event) { + event.stopPropagation(); + this.#draw(event.offsetX, event.offsetY); + }
- if (!group.policy || group.policy === "AnyOn") { - for (const id of group.ids) { - if (!this._groups.has(id)) { - (0, _util.warn)(`Optional content group not found: ${id}`); - return true; - } + canvasPointerup(event) { + if (event.button !== 0) { + return; + }
- if (this._groups.get(id).visible) { - return true; - } - } + if (this.isInEditMode() && this.currentPath.length !== 0) { + event.stopPropagation(); + this.#endDrawing(event); + this.setInBackground(); + } + }
- return false; - } else if (group.policy === "AllOn") { - for (const id of group.ids) { - if (!this._groups.has(id)) { - (0, _util.warn)(`Optional content group not found: ${id}`); - return true; - } + canvasPointerleave(event) { + this.#endDrawing(event); + this.setInBackground(); + }
- if (!this._groups.get(id).visible) { - return false; - } - } + #endDrawing(event) { + this.#stopDrawing(event.offsetX, event.offsetY); + this.canvas.removeEventListener("pointerleave", this.#boundCanvasPointerleave); + this.canvas.removeEventListener("pointermove", this.#boundCanvasPointermove); + }
- return true; - } else if (group.policy === "AnyOff") { - for (const id of group.ids) { - if (!this._groups.has(id)) { - (0, _util.warn)(`Optional content group not found: ${id}`); - return true; - } + #createCanvas() { + this.canvas = document.createElement("canvas"); + this.canvas.width = this.canvas.height = 0; + this.canvas.className = "inkEditorCanvas";
- if (!this._groups.get(id).visible) { - return true; - } - } + InkEditor._l10nPromise.get("editor_ink_canvas_aria_label").then(msg => this.canvas?.setAttribute("aria-label", msg));
- return false; - } else if (group.policy === "AllOff") { - for (const id of group.ids) { - if (!this._groups.has(id)) { - (0, _util.warn)(`Optional content group not found: ${id}`); - return true; - } + this.div.append(this.canvas); + this.ctx = this.canvas.getContext("2d"); + }
- if (this._groups.get(id).visible) { - return false; - } - } + #createObserver() { + this.#observer = new ResizeObserver(entries => { + const rect = entries[0].contentRect;
- return true; + if (rect.width && rect.height) { + this.setDimensions(rect.width, rect.height); } + }); + this.#observer.observe(this.div); + }
- (0, _util.warn)(`Unknown optional content policy ${group.policy}.`); - return true; + render() { + if (this.div) { + return this.div; }
- (0, _util.warn)(`Unknown group type ${group.type}.`); - return true; - } + let baseX, baseY;
- setVisibility(id, visible = true) { - if (!this._groups.has(id)) { - (0, _util.warn)(`Optional content group not found: ${id}`); - return; + if (this.width) { + baseX = this.x; + baseY = this.y; }
- this._groups.get(id).visible = !!visible; - } + super.render();
- getOrder() { - if (!this._groups.size) { - return null; - } + InkEditor._l10nPromise.get("editor_ink_aria_label").then(msg => this.div?.setAttribute("aria-label", msg));
- if (this._order) { - return this._order.slice(); + const [x, y, w, h] = this.#getInitialBBox(); + this.setAt(x, y, 0, 0); + this.setDims(w, h); + this.#createCanvas(); + + if (this.width) { + const [parentWidth, parentHeight] = this.parent.viewportBaseDimensions; + this.setAt(baseX * parentWidth, baseY * parentHeight, this.width * parentWidth, this.height * parentHeight); + this.#isCanvasInitialized = true; + this.#setCanvasDims(); + this.setDims(this.width * parentWidth, this.height * parentHeight); + this.#redraw(); + this.#setMinDims(); + this.div.classList.add("disabled"); + } else { + this.div.classList.add("editing"); + this.enableEditMode(); }
- return Array.from(this._groups.keys()); + this.#createObserver(); + return this.div; }
- getGroups() { - return this._groups.size > 0 ? (0, _util.objectFromMap)(this._groups) : null; - } + #setCanvasDims() { + if (!this.#isCanvasInitialized) { + return; + }
- getGroup(id) { - return this._groups.get(id) || null; + const [parentWidth, parentHeight] = this.parent.viewportBaseDimensions; + this.canvas.width = Math.ceil(this.width * parentWidth); + this.canvas.height = Math.ceil(this.height * parentHeight); + this.#updateTransform(); }
-} + setDimensions(width, height) { + const roundedWidth = Math.round(width); + const roundedHeight = Math.round(height);
-exports.OptionalContentConfig = OptionalContentConfig; + if (this.#realWidth === roundedWidth && this.#realHeight === roundedHeight) { + return; + }
-/***/ }), -/* 17 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + this.#realWidth = roundedWidth; + this.#realHeight = roundedHeight; + this.canvas.style.visibility = "hidden";
+ if (this.#aspectRatio && Math.abs(this.#aspectRatio - width / height) > 1e-2) { + height = Math.ceil(width / this.#aspectRatio); + this.setDims(width, height); + }
+ const [parentWidth, parentHeight] = this.parent.viewportBaseDimensions; + this.width = width / parentWidth; + this.height = height / parentHeight;
-Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.PDFDataTransportStream = void 0; + if (this.#disableEditing) { + this.#setScaleFactor(width, height); + }
-var _util = __w_pdfjs_require__(1); + this.#setCanvasDims(); + this.#redraw(); + this.canvas.style.visibility = "visible"; + }
-var _display_utils = __w_pdfjs_require__(5); + #setScaleFactor(width, height) { + const padding = this.#getPadding(); + const scaleFactorW = (width - padding) / this.#baseWidth; + const scaleFactorH = (height - padding) / this.#baseHeight; + this.scaleFactor = Math.min(scaleFactorW, scaleFactorH); + }
-class PDFDataTransportStream { - constructor(params, pdfDataRangeTransport) { - (0, _util.assert)(pdfDataRangeTransport, 'PDFDataTransportStream - missing required "pdfDataRangeTransport" argument.'); - this._queuedChunks = []; - this._progressiveDone = params.progressiveDone || false; - this._contentDispositionFilename = params.contentDispositionFilename || null; - const initialData = params.initialData; + #updateTransform() { + const padding = this.#getPadding() / 2; + this.ctx.setTransform(this.scaleFactor, 0, 0, this.scaleFactor, this.translationX * this.scaleFactor + padding, this.translationY * this.scaleFactor + padding); + }
- if (initialData?.length > 0) { - const buffer = new Uint8Array(initialData).buffer; + static #buildPath2D(bezier) { + const path2D = new Path2D();
- this._queuedChunks.push(buffer); - } + for (let i = 0, ii = bezier.length; i < ii; i++) { + const [first, control1, control2, second] = bezier[i];
- this._pdfDataRangeTransport = pdfDataRangeTransport; - this._isStreamingSupported = !params.disableStream; - this._isRangeSupported = !params.disableRange; - this._contentLength = params.length; - this._fullRequestReader = null; - this._rangeReaders = []; + if (i === 0) { + path2D.moveTo(...first); + }
- this._pdfDataRangeTransport.addRangeListener((begin, chunk) => { - this._onReceiveData({ - begin, - chunk - }); - }); + path2D.bezierCurveTo(control1[0], control1[1], control2[0], control2[1], second[0], second[1]); + }
- this._pdfDataRangeTransport.addProgressListener((loaded, total) => { - this._onProgress({ - loaded, - total - }); - }); + return path2D; + }
- this._pdfDataRangeTransport.addProgressiveReadListener(chunk => { - this._onReceiveData({ - chunk - }); - }); + #serializePaths(s, tx, ty, h) { + const NUMBER_OF_POINTS_ON_BEZIER_CURVE = 4; + const paths = []; + const padding = this.thickness / 2; + let buffer, points;
- this._pdfDataRangeTransport.addProgressiveDoneListener(() => { - this._onProgressiveDone(); - }); + for (const bezier of this.paths) { + buffer = []; + points = [];
- this._pdfDataRangeTransport.transportReady(); - } + for (let i = 0, ii = bezier.length; i < ii; i++) { + const [first, control1, control2, second] = bezier[i]; + const p10 = s * (first[0] + tx) + padding; + const p11 = h - s * (first[1] + ty) - padding; + const p20 = s * (control1[0] + tx) + padding; + const p21 = h - s * (control1[1] + ty) - padding; + const p30 = s * (control2[0] + tx) + padding; + const p31 = h - s * (control2[1] + ty) - padding; + const p40 = s * (second[0] + tx) + padding; + const p41 = h - s * (second[1] + ty) - padding;
- _onReceiveData(args) { - const buffer = new Uint8Array(args.chunk).buffer; + if (i === 0) { + buffer.push(p10, p11); + points.push(p10, p11); + }
- if (args.begin === undefined) { - if (this._fullRequestReader) { - this._fullRequestReader._enqueue(buffer); - } else { - this._queuedChunks.push(buffer); + buffer.push(p20, p21, p30, p31, p40, p41); + this.#extractPointsOnBezier(p10, p11, p20, p21, p30, p31, p40, p41, NUMBER_OF_POINTS_ON_BEZIER_CURVE, points); } - } else { - const found = this._rangeReaders.some(function (rangeReader) { - if (rangeReader._begin !== args.begin) { - return false; - }
- rangeReader._enqueue(buffer); + paths.push({ + bezier: buffer, + points + }); + } + + return paths; + }
- return true; - }); + #extractPointsOnBezier(p10, p11, p20, p21, p30, p31, p40, p41, n, points) { + if (this.#isAlmostFlat(p10, p11, p20, p21, p30, p31, p40, p41)) { + points.push(p40, p41); + return; + }
- (0, _util.assert)(found, "_onReceiveData - no `PDFDataTransportStreamRangeReader` instance found."); + for (let i = 1; i < n - 1; i++) { + const t = i / n; + const mt = 1 - t; + let q10 = t * p10 + mt * p20; + let q11 = t * p11 + mt * p21; + let q20 = t * p20 + mt * p30; + let q21 = t * p21 + mt * p31; + const q30 = t * p30 + mt * p40; + const q31 = t * p31 + mt * p41; + q10 = t * q10 + mt * q20; + q11 = t * q11 + mt * q21; + q20 = t * q20 + mt * q30; + q21 = t * q21 + mt * q31; + q10 = t * q10 + mt * q20; + q11 = t * q11 + mt * q21; + points.push(q10, q11); } + + points.push(p40, p41); }
- get _progressiveDataLength() { - return this._fullRequestReader?._loaded ?? 0; + #isAlmostFlat(p10, p11, p20, p21, p30, p31, p40, p41) { + const tol = 10; + const ax = (3 * p20 - 2 * p10 - p40) ** 2; + const ay = (3 * p21 - 2 * p11 - p41) ** 2; + const bx = (3 * p30 - p10 - 2 * p40) ** 2; + const by = (3 * p31 - p11 - 2 * p41) ** 2; + return Math.max(ax, bx) + Math.max(ay, by) <= tol; }
- _onProgress(evt) { - if (evt.total === undefined) { - const firstReader = this._rangeReaders[0]; + #getBbox() { + let xMin = Infinity; + let xMax = -Infinity; + let yMin = Infinity; + let yMax = -Infinity;
- if (firstReader?.onProgress) { - firstReader.onProgress({ - loaded: evt.loaded - }); - } - } else { - const fullReader = this._fullRequestReader; + for (const path of this.paths) { + for (const [first, control1, control2, second] of path) { + const bbox = _util.Util.bezierBoundingBox(...first, ...control1, ...control2, ...second);
- if (fullReader?.onProgress) { - fullReader.onProgress({ - loaded: evt.loaded, - total: evt.total - }); + xMin = Math.min(xMin, bbox[0]); + yMin = Math.min(yMin, bbox[1]); + xMax = Math.max(xMax, bbox[2]); + yMax = Math.max(yMax, bbox[3]); } } + + return [xMin, yMin, xMax, yMax]; }
- _onProgressiveDone() { - if (this._fullRequestReader) { - this._fullRequestReader.progressiveDone(); + #getPadding() { + return this.#disableEditing ? Math.ceil(this.thickness * this.parent.scaleFactor) : 0; + } + + #fitToContent(thicknessChanged = false) { + if (this.isEmpty()) { + return; }
- this._progressiveDone = true; - } + if (!this.#disableEditing) { + this.#redraw(); + return; + }
- _removeRangeReader(reader) { - const i = this._rangeReaders.indexOf(reader); + const bbox = this.#getBbox(); + const padding = this.#getPadding(); + this.#baseWidth = Math.max(RESIZER_SIZE, bbox[2] - bbox[0]); + this.#baseHeight = Math.max(RESIZER_SIZE, bbox[3] - bbox[1]); + const width = Math.ceil(padding + this.#baseWidth * this.scaleFactor); + const height = Math.ceil(padding + this.#baseHeight * this.scaleFactor); + const [parentWidth, parentHeight] = this.parent.viewportBaseDimensions; + this.width = width / parentWidth; + this.height = height / parentHeight; + this.#aspectRatio = width / height; + this.#setMinDims(); + const prevTranslationX = this.translationX; + const prevTranslationY = this.translationY; + this.translationX = -bbox[0]; + this.translationY = -bbox[1]; + this.#setCanvasDims(); + this.#redraw(); + this.#realWidth = width; + this.#realHeight = height; + this.setDims(width, height); + const unscaledPadding = thicknessChanged ? 0 : padding / this.scaleFactor / 2; + this.translate(prevTranslationX - this.translationX - unscaledPadding, prevTranslationY - this.translationY - unscaledPadding); + } + + #setMinDims() { + const { + style + } = this.div;
- if (i >= 0) { - this._rangeReaders.splice(i, 1); + if (this.#aspectRatio >= 1) { + style.minHeight = `${RESIZER_SIZE}px`; + style.minWidth = `${Math.round(this.#aspectRatio * RESIZER_SIZE)}px`; + } else { + style.minWidth = `${RESIZER_SIZE}px`; + style.minHeight = `${Math.round(RESIZER_SIZE / this.#aspectRatio)}px`; } }
- getFullReader() { - (0, _util.assert)(!this._fullRequestReader, "PDFDataTransportStream.getFullReader can only be called once."); - const queuedChunks = this._queuedChunks; - this._queuedChunks = null; - return new PDFDataTransportStreamReader(this, queuedChunks, this._progressiveDone, this._contentDispositionFilename); - } + static deserialize(data, parent) { + const editor = super.deserialize(data, parent); + editor.thickness = data.thickness; + editor.color = _util.Util.makeHexColor(...data.color); + const [pageWidth, pageHeight] = parent.pageDimensions; + const width = editor.width * pageWidth; + const height = editor.height * pageHeight; + const scaleFactor = parent.scaleFactor; + const padding = data.thickness / 2; + editor.#aspectRatio = width / height; + editor.#disableEditing = true; + editor.#realWidth = Math.round(width); + editor.#realHeight = Math.round(height);
- getRangeReader(begin, end) { - if (end <= this._progressiveDataLength) { + for (const { + bezier + } of data.paths) { + const path = []; + editor.paths.push(path); + let p0 = scaleFactor * (bezier[0] - padding); + let p1 = scaleFactor * (height - bezier[1] - padding); + + for (let i = 2, ii = bezier.length; i < ii; i += 6) { + const p10 = scaleFactor * (bezier[i] - padding); + const p11 = scaleFactor * (height - bezier[i + 1] - padding); + const p20 = scaleFactor * (bezier[i + 2] - padding); + const p21 = scaleFactor * (height - bezier[i + 3] - padding); + const p30 = scaleFactor * (bezier[i + 4] - padding); + const p31 = scaleFactor * (height - bezier[i + 5] - padding); + path.push([[p0, p1], [p10, p11], [p20, p21], [p30, p31]]); + p0 = p30; + p1 = p31; + } + + const path2D = this.#buildPath2D(path); + editor.bezierPath2D.push(path2D); + } + + const bbox = editor.#getBbox(); + editor.#baseWidth = bbox[2] - bbox[0]; + editor.#baseHeight = bbox[3] - bbox[1]; + editor.#setScaleFactor(width, height); + return editor; + } + + serialize() { + if (this.isEmpty()) { return null; }
- const reader = new PDFDataTransportStreamRangeReader(this, begin, end); - - this._pdfDataRangeTransport.requestDataRange(begin, end); + const rect = this.getRect(0, 0); + const height = this.rotation % 180 === 0 ? rect[3] - rect[1] : rect[2] - rect[0];
- this._rangeReaders.push(reader); + const color = _editor.AnnotationEditor._colorManager.convert(this.ctx.strokeStyle);
- return reader; + return { + annotationType: _util.AnnotationEditorType.INK, + color, + thickness: this.thickness, + paths: this.#serializePaths(this.scaleFactor / this.parent.scaleFactor, this.translationX, this.translationY, height), + pageIndex: this.parent.pageIndex, + rect, + rotation: this.rotation + }; }
- cancelAllRequests(reason) { - if (this._fullRequestReader) { - this._fullRequestReader.cancel(reason); - } +}
- for (const reader of this._rangeReaders.slice(0)) { - reader.cancel(reason); - } +exports.InkEditor = InkEditor;
- this._pdfDataRangeTransport.abort(); - } +/***/ }), +/* 24 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
-}
-exports.PDFDataTransportStream = PDFDataTransportStream;
-class PDFDataTransportStreamReader { - constructor(stream, queuedChunks, progressiveDone = false, contentDispositionFilename = null) { - this._stream = stream; - this._done = progressiveDone || false; - this._filename = (0, _display_utils.isPdfFile)(contentDispositionFilename) ? contentDispositionFilename : null; - this._queuedChunks = queuedChunks || []; - this._loaded = 0; +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.fitCurve = void 0;
- for (const chunk of this._queuedChunks) { - this._loaded += chunk.byteLength; - } +const fitCurve = __w_pdfjs_require__(25);
- this._requests = []; - this._headersReady = Promise.resolve(); - stream._fullRequestReader = this; - this.onProgress = null; - } +exports.fitCurve = fitCurve;
- _enqueue(chunk) { - if (this._done) { - return; - } +/***/ }), +/* 25 */ +/***/ ((module) => {
- if (this._requests.length > 0) { - const requestCapability = this._requests.shift();
- requestCapability.resolve({ - value: chunk, - done: false - }); - } else { - this._queuedChunks.push(chunk); - }
- this._loaded += chunk.byteLength; +function fitCurve(points, maxError, progressCallback) { + if (!Array.isArray(points)) { + throw new TypeError("First argument should be an array"); }
- get headersReady() { - return this._headersReady; - } + points.forEach(point => { + if (!Array.isArray(point) || point.some(item => typeof item !== 'number') || point.length !== points[0].length) { + throw Error("Each point should be an array of numbers. Each point should have the same amount of numbers."); + } + }); + points = points.filter((point, i) => i === 0 || !point.every((val, j) => val === points[i - 1][j]));
- get filename() { - return this._filename; + if (points.length < 2) { + return []; }
- get isRangeSupported() { - return this._stream._isRangeSupported; - } + const len = points.length; + const leftTangent = createTangent(points[1], points[0]); + const rightTangent = createTangent(points[len - 2], points[len - 1]); + return fitCubic(points, leftTangent, rightTangent, maxError, progressCallback); +}
- get isStreamingSupported() { - return this._stream._isStreamingSupported; +function fitCubic(points, leftTangent, rightTangent, error, progressCallback) { + const MaxIterations = 20; + var bezCurve, u, uPrime, maxError, prevErr, splitPoint, prevSplit, centerVector, toCenterTangent, fromCenterTangent, beziers, dist, i; + + if (points.length === 2) { + dist = maths.vectorLen(maths.subtract(points[0], points[1])) / 3.0; + bezCurve = [points[0], maths.addArrays(points[0], maths.mulItems(leftTangent, dist)), maths.addArrays(points[1], maths.mulItems(rightTangent, dist)), points[1]]; + return [bezCurve]; }
- get contentLength() { - return this._stream._contentLength; + u = chordLengthParameterize(points); + [bezCurve, maxError, splitPoint] = generateAndReport(points, u, u, leftTangent, rightTangent, progressCallback); + + if (maxError === 0 || maxError < error) { + return [bezCurve]; }
- async read() { - if (this._queuedChunks.length > 0) { - const chunk = this._queuedChunks.shift(); + if (maxError < error * error) { + uPrime = u; + prevErr = maxError; + prevSplit = splitPoint;
- return { - value: chunk, - done: false - }; - } + for (i = 0; i < MaxIterations; i++) { + uPrime = reparameterize(bezCurve, points, uPrime); + [bezCurve, maxError, splitPoint] = generateAndReport(points, u, uPrime, leftTangent, rightTangent, progressCallback);
- if (this._done) { - return { - value: undefined, - done: true - }; - } + if (maxError < error) { + return [bezCurve]; + } else if (splitPoint === prevSplit) { + let errChange = maxError / prevErr;
- const requestCapability = (0, _util.createPromiseCapability)(); + if (errChange > .9999 && errChange < 1.0001) { + break; + } + }
- this._requests.push(requestCapability); + prevErr = maxError; + prevSplit = splitPoint; + } + }
- return requestCapability.promise; + beziers = []; + centerVector = maths.subtract(points[splitPoint - 1], points[splitPoint + 1]); + + if (centerVector.every(val => val === 0)) { + centerVector = maths.subtract(points[splitPoint - 1], points[splitPoint]); + [centerVector[0], centerVector[1]] = [-centerVector[1], centerVector[0]]; }
- cancel(reason) { - this._done = true; + toCenterTangent = maths.normalize(centerVector); + fromCenterTangent = maths.mulItems(toCenterTangent, -1); + beziers = beziers.concat(fitCubic(points.slice(0, splitPoint + 1), leftTangent, toCenterTangent, error, progressCallback)); + beziers = beziers.concat(fitCubic(points.slice(splitPoint), fromCenterTangent, rightTangent, error, progressCallback)); + return beziers; +}
- for (const requestCapability of this._requests) { - requestCapability.resolve({ - value: undefined, - done: true - }); - } +;
- this._requests.length = 0; +function generateAndReport(points, paramsOrig, paramsPrime, leftTangent, rightTangent, progressCallback) { + var bezCurve, maxError, splitPoint; + bezCurve = generateBezier(points, paramsPrime, leftTangent, rightTangent, progressCallback); + [maxError, splitPoint] = computeMaxError(points, bezCurve, paramsOrig); + + if (progressCallback) { + progressCallback({ + bez: bezCurve, + points: points, + params: paramsOrig, + maxErr: maxError, + maxPoint: splitPoint + }); }
- progressiveDone() { - if (this._done) { - return; - } - - this._done = true; + return [bezCurve, maxError, splitPoint]; +} + +function generateBezier(points, parameters, leftTangent, rightTangent) { + var bezCurve, + A, + a, + C, + X, + det_C0_C1, + det_C0_X, + det_X_C1, + alpha_l, + alpha_r, + epsilon, + segLength, + i, + len, + tmp, + u, + ux, + firstPoint = points[0], + lastPoint = points[points.length - 1]; + bezCurve = [firstPoint, null, null, lastPoint]; + A = maths.zeros_Xx2x2(parameters.length); + + for (i = 0, len = parameters.length; i < len; i++) { + u = parameters[i]; + ux = 1 - u; + a = A[i]; + a[0] = maths.mulItems(leftTangent, 3 * u * (ux * ux)); + a[1] = maths.mulItems(rightTangent, 3 * ux * (u * u)); + } + + C = [[0, 0], [0, 0]]; + X = [0, 0]; + + for (i = 0, len = points.length; i < len; i++) { + u = parameters[i]; + a = A[i]; + C[0][0] += maths.dot(a[0], a[0]); + C[0][1] += maths.dot(a[0], a[1]); + C[1][0] += maths.dot(a[0], a[1]); + C[1][1] += maths.dot(a[1], a[1]); + tmp = maths.subtract(points[i], bezier.q([firstPoint, firstPoint, lastPoint, lastPoint], u)); + X[0] += maths.dot(a[0], tmp); + X[1] += maths.dot(a[1], tmp); + } + + det_C0_C1 = C[0][0] * C[1][1] - C[1][0] * C[0][1]; + det_C0_X = C[0][0] * X[1] - C[1][0] * X[0]; + det_X_C1 = X[0] * C[1][1] - X[1] * C[0][1]; + alpha_l = det_C0_C1 === 0 ? 0 : det_X_C1 / det_C0_C1; + alpha_r = det_C0_C1 === 0 ? 0 : det_C0_X / det_C0_C1; + segLength = maths.vectorLen(maths.subtract(firstPoint, lastPoint)); + epsilon = 1.0e-6 * segLength; + + if (alpha_l < epsilon || alpha_r < epsilon) { + bezCurve[1] = maths.addArrays(firstPoint, maths.mulItems(leftTangent, segLength / 3.0)); + bezCurve[2] = maths.addArrays(lastPoint, maths.mulItems(rightTangent, segLength / 3.0)); + } else { + bezCurve[1] = maths.addArrays(firstPoint, maths.mulItems(leftTangent, alpha_l)); + bezCurve[2] = maths.addArrays(lastPoint, maths.mulItems(rightTangent, alpha_r)); }
+ return bezCurve; }
-class PDFDataTransportStreamRangeReader { - constructor(stream, begin, end) { - this._stream = stream; - this._begin = begin; - this._end = end; - this._queuedChunk = null; - this._requests = []; - this._done = false; - this.onProgress = null; +; + +function reparameterize(bezier, points, parameters) { + return parameters.map((p, i) => newtonRaphsonRootFind(bezier, points[i], p)); +} + +; + +function newtonRaphsonRootFind(bez, point, u) { + var d = maths.subtract(bezier.q(bez, u), point), + qprime = bezier.qprime(bez, u), + numerator = maths.mulMatrix(d, qprime), + denominator = maths.sum(maths.squareItems(qprime)) + 2 * maths.mulMatrix(d, bezier.qprimeprime(bez, u)); + + if (denominator === 0) { + return u; + } else { + return u - numerator / denominator; } +}
- _enqueue(chunk) { - if (this._done) { - return; - } +;
- if (this._requests.length === 0) { - this._queuedChunk = chunk; - } else { - const requestsCapability = this._requests.shift(); +function chordLengthParameterize(points) { + var u = [], + currU, + prevU, + prevP; + points.forEach((p, i) => { + currU = i ? prevU + maths.vectorLen(maths.subtract(p, prevP)) : 0; + u.push(currU); + prevU = currU; + prevP = p; + }); + u = u.map(x => x / prevU); + return u; +}
- requestsCapability.resolve({ - value: chunk, - done: false - }); +;
- for (const requestCapability of this._requests) { - requestCapability.resolve({ - value: undefined, - done: true - }); - } +function computeMaxError(points, bez, parameters) { + var dist, maxDist, splitPoint, v, i, count, point, t; + maxDist = 0; + splitPoint = Math.floor(points.length / 2); + const t_distMap = mapTtoRelativeDistances(bez, 10);
- this._requests.length = 0; + for (i = 0, count = points.length; i < count; i++) { + point = points[i]; + t = find_t(bez, parameters[i], t_distMap, 10); + v = maths.subtract(bezier.q(bez, t), point); + dist = v[0] * v[0] + v[1] * v[1]; + + if (dist > maxDist) { + maxDist = dist; + splitPoint = i; } + }
- this._done = true; + return [maxDist, splitPoint]; +}
- this._stream._removeRangeReader(this); - } +;
- get isStreamingSupported() { - return false; +var mapTtoRelativeDistances = function (bez, B_parts) { + var B_t_curr; + var B_t_dist = [0]; + var B_t_prev = bez[0]; + var sumLen = 0; + + for (var i = 1; i <= B_parts; i++) { + B_t_curr = bezier.q(bez, i / B_parts); + sumLen += maths.vectorLen(maths.subtract(B_t_curr, B_t_prev)); + B_t_dist.push(sumLen); + B_t_prev = B_t_curr; }
- async read() { - if (this._queuedChunk) { - const chunk = this._queuedChunk; - this._queuedChunk = null; - return { - value: chunk, - done: false - }; - } + B_t_dist = B_t_dist.map(x => x / sumLen); + return B_t_dist; +};
- if (this._done) { - return { - value: undefined, - done: true - }; - } +function find_t(bez, param, t_distMap, B_parts) { + if (param < 0) { + return 0; + }
- const requestCapability = (0, _util.createPromiseCapability)(); + if (param > 1) { + return 1; + }
- this._requests.push(requestCapability); + var lenMax, lenMin, tMax, tMin, t;
- return requestCapability.promise; + for (var i = 1; i <= B_parts; i++) { + if (param <= t_distMap[i]) { + tMin = (i - 1) / B_parts; + tMax = i / B_parts; + lenMin = t_distMap[i - 1]; + lenMax = t_distMap[i]; + t = (param - lenMin) / (lenMax - lenMin) * (tMax - tMin) + tMin; + break; + } }
- cancel(reason) { - this._done = true; + return t; +}
- for (const requestCapability of this._requests) { - requestCapability.resolve({ - value: undefined, - done: true - }); +function createTangent(pointA, pointB) { + return maths.normalize(maths.subtract(pointA, pointB)); +} + +class maths { + static zeros_Xx2x2(x) { + var zs = []; + + while (x--) { + zs.push([0, 0]); }
- this._requests.length = 0; + return zs; + }
- this._stream._removeRangeReader(this); + static mulItems(items, multiplier) { + return items.map(x => x * multiplier); }
-} + static mulMatrix(m1, m2) { + return m1.reduce((sum, x1, i) => sum + x1 * m2[i], 0); + }
-/***/ }), -/* 18 */ -/***/ ((__unused_webpack_module, exports) => { + static subtract(arr1, arr2) { + return arr1.map((x1, i) => x1 - arr2[i]); + }
+ static addArrays(arr1, arr2) { + return arr1.map((x1, i) => x1 + arr2[i]); + }
+ static addItems(items, addition) { + return items.map(x => x + addition); + }
-Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.XfaText = void 0; + static sum(items) { + return items.reduce((sum, x) => sum + x); + }
-class XfaText { - static textContent(xfa) { - const items = []; - const output = { - items, - styles: Object.create(null) - }; + static dot(m1, m2) { + return maths.mulMatrix(m1, m2); + }
- function walk(node) { - if (!node) { - return; - } + static vectorLen(v) { + return Math.hypot(...v); + }
- let str = null; - const name = node.name; + static divItems(items, divisor) { + return items.map(x => x / divisor); + }
- if (name === "#text") { - str = node.value; - } else if (!XfaText.shouldBuildText(name)) { - return; - } else if (node?.attributes?.textContent) { - str = node.attributes.textContent; - } else if (node.value) { - str = node.value; - } + static squareItems(items) { + return items.map(x => x * x); + }
- if (str !== null) { - items.push({ - str - }); - } + static normalize(v) { + return this.divItems(v, this.vectorLen(v)); + }
- if (!node.children) { - return; - } +}
- for (const child of node.children) { - walk(child); - } - } +class bezier { + static q(ctrlPoly, t) { + var tx = 1.0 - t; + var pA = maths.mulItems(ctrlPoly[0], tx * tx * tx), + pB = maths.mulItems(ctrlPoly[1], 3 * tx * tx * t), + pC = maths.mulItems(ctrlPoly[2], 3 * tx * t * t), + pD = maths.mulItems(ctrlPoly[3], t * t * t); + return maths.addArrays(maths.addArrays(pA, pB), maths.addArrays(pC, pD)); + }
- walk(xfa); - return output; + static qprime(ctrlPoly, t) { + var tx = 1.0 - t; + var pA = maths.mulItems(maths.subtract(ctrlPoly[1], ctrlPoly[0]), 3 * tx * tx), + pB = maths.mulItems(maths.subtract(ctrlPoly[2], ctrlPoly[1]), 6 * tx * t), + pC = maths.mulItems(maths.subtract(ctrlPoly[3], ctrlPoly[2]), 3 * t * t); + return maths.addArrays(maths.addArrays(pA, pB), pC); }
- static shouldBuildText(name) { - return !(name === "textarea" || name === "input" || name === "option" || name === "select"); + static qprimeprime(ctrlPoly, t) { + return maths.addArrays(maths.mulItems(maths.addArrays(maths.subtract(ctrlPoly[2], maths.mulItems(ctrlPoly[1], 2)), ctrlPoly[0]), 6 * (1.0 - t)), maths.mulItems(maths.addArrays(maths.subtract(ctrlPoly[3], maths.mulItems(ctrlPoly[2], 2)), ctrlPoly[1]), 6 * t)); }
}
-exports.XfaText = XfaText; +module.exports = fitCurve; +module.exports.fitCubic = fitCubic; +module.exports.createTangent = createTangent;
/***/ }), -/* 19 */ +/* 26 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
@@ -9261,15 +12537,16 @@ exports.AnnotationLayer = void 0;
var _util = __w_pdfjs_require__(1);
-var _display_utils = __w_pdfjs_require__(5); +var _display_utils = __w_pdfjs_require__(4);
-var _annotation_storage = __w_pdfjs_require__(8); +var _annotation_storage = __w_pdfjs_require__(7);
-var _scripting_utils = __w_pdfjs_require__(20); +var _scripting_utils = __w_pdfjs_require__(27);
-var _xfa_layer = __w_pdfjs_require__(21); +var _xfa_layer = __w_pdfjs_require__(28);
const DEFAULT_TAB_INDEX = 1000; +const DEFAULT_FONT_SIZE = 9; const GetElementsByNameSet = new WeakSet();
function getRectDims(rect) { @@ -9400,48 +12677,24 @@ class AnnotationElement { page = this.page, viewport = this.viewport; const container = document.createElement("section"); - let { + const { width, height } = getRectDims(data.rect); + const [pageLLx, pageLLy, pageURx, pageURy] = viewport.viewBox; + const pageWidth = pageURx - pageLLx; + const pageHeight = pageURy - pageLLy; container.setAttribute("data-annotation-id", data.id);
const rect = _util.Util.normalizeRect([data.rect[0], page.view[3] - data.rect[1] + page.view[1], data.rect[2], page.view[3] - data.rect[3] + page.view[1]]);
- if (data.hasOwnCanvas) { - const transform = viewport.transform.slice(); - - const [scaleX, scaleY] = _util.Util.singularValueDecompose2dScale(transform); - - width = Math.ceil(width * scaleX); - height = Math.ceil(height * scaleY); - rect[0] *= scaleX; - rect[1] *= scaleY; - - for (let i = 0; i < 4; i++) { - transform[i] = Math.sign(transform[i]); - } - - container.style.transform = `matrix(${transform.join(",")})`; - } else { - container.style.transform = `matrix(${viewport.transform.join(",")})`; - } - - container.style.transformOrigin = `${-rect[0]}px ${-rect[1]}px`; - if (!ignoreBorder && data.borderStyle.width > 0) { container.style.borderWidth = `${data.borderStyle.width}px`; - - if (data.borderStyle.style !== _util.AnnotationBorderStyleType.UNDERLINE) { - width -= 2 * data.borderStyle.width; - height -= 2 * data.borderStyle.width; - } - const horizontalRadius = data.borderStyle.horizontalCornerRadius; const verticalRadius = data.borderStyle.verticalCornerRadius;
if (horizontalRadius > 0 || verticalRadius > 0) { - const radius = `${horizontalRadius}px / ${verticalRadius}px`; + const radius = `calc(${horizontalRadius}px * var(--scale-factor)) / calc(${verticalRadius}px * var(--scale-factor))`; container.style.borderRadius = radius; }
@@ -9470,28 +12723,54 @@ class AnnotationElement { break; }
- const borderColor = data.borderColor || data.color || null; + const borderColor = data.borderColor || null;
if (borderColor) { - container.style.borderColor = _util.Util.makeHexColor(data.color[0] | 0, data.color[1] | 0, data.color[2] | 0); + container.style.borderColor = _util.Util.makeHexColor(borderColor[0] | 0, borderColor[1] | 0, borderColor[2] | 0); } else { container.style.borderWidth = 0; } }
- container.style.left = `${rect[0]}px`; - container.style.top = `${rect[1]}px`; + container.style.left = `${100 * (rect[0] - pageLLx) / pageWidth}%`; + container.style.top = `${100 * (rect[1] - pageLLy) / pageHeight}%`; + const { + rotation + } = data;
- if (data.hasOwnCanvas) { - container.style.width = container.style.height = "auto"; + if (data.hasOwnCanvas || rotation === 0) { + container.style.width = `${100 * width / pageWidth}%`; + container.style.height = `${100 * height / pageHeight}%`; } else { - container.style.width = `${width}px`; - container.style.height = `${height}px`; + this.setRotation(rotation, container); }
return container; }
+ setRotation(angle, container = this.container) { + const [pageLLx, pageLLy, pageURx, pageURy] = this.viewport.viewBox; + const pageWidth = pageURx - pageLLx; + const pageHeight = pageURy - pageLLy; + const { + width, + height + } = getRectDims(this.data.rect); + let elementWidth, elementHeight; + + if (angle % 180 === 0) { + elementWidth = 100 * width / pageWidth; + elementHeight = 100 * height / pageHeight; + } else { + elementWidth = 100 * height / pageWidth; + elementHeight = 100 * width / pageHeight; + } + + container.style.width = `${elementWidth}%`; + container.style.height = `${elementHeight}%`; + container.setAttribute("data-main-rotation", (360 - angle) % 360); + } + get _commonActions() { const setColor = (jsName, styleName, event) => { const color = event.detail[jsName]; @@ -9501,7 +12780,7 @@ class AnnotationElement { return (0, _util.shadow)(this, "_commonActions", { display: event => { const hidden = event.detail.display % 2 === 1; - event.target.style.visibility = hidden ? "hidden" : "visible"; + this.container.style.visibility = hidden ? "hidden" : "visible"; this.annotationStorage.setValue(this.data.id, { hidden, print: event.detail.display === 0 || event.detail.display === 3 @@ -9513,7 +12792,7 @@ class AnnotationElement { }); }, hidden: event => { - event.target.style.visibility = event.detail.hidden ? "hidden" : "visible"; + this.container.style.visibility = event.detail.hidden ? "hidden" : "visible"; this.annotationStorage.setValue(this.data.id, { hidden: event.detail.hidden }); @@ -9534,11 +12813,7 @@ class AnnotationElement { } }, required: event => { - if (event.detail.required) { - event.target.setAttribute("required", ""); - } else { - event.target.removeAttribute("required"); - } + this._setRequired(event.target, event.detail.required); }, bgColor: event => { setColor("bgColor", "backgroundColor", event); @@ -9557,6 +12832,13 @@ class AnnotationElement { }, strokeColor: event => { setColor("strokeColor", "borderColor", event); + }, + rotation: event => { + const angle = event.detail.rotation; + this.setRotation(angle); + this.annotationStorage.setValue(this.data.id, { + rotation: angle + }); } }); } @@ -9626,9 +12908,8 @@ class AnnotationElement {
if (!trigger) { trigger = document.createElement("div"); - trigger.style.height = container.style.height; - trigger.style.width = container.style.width; - container.appendChild(trigger); + trigger.className = "popupTriggerArea"; + container.append(trigger); }
const popupElement = new PopupElement({ @@ -9642,8 +12923,8 @@ class AnnotationElement { hideWrapper: true }); const popup = popupElement.render(); - popup.style.left = container.style.width; - container.appendChild(popup); + popup.style.left = "100%"; + container.append(popup); }
_renderQuadrilaterals(className) { @@ -9679,7 +12960,7 @@ class AnnotationElement { }
const exportValue = typeof exportValues === "string" ? exportValues : null; - const domElement = document.getElementById(id); + const domElement = document.querySelector(`[data-element-id="${id}"]`);
if (domElement && !GetElementsByNameSet.has(domElement)) { (0, _util.warn)(`_getElementsByName - element not allowed: ${id}`); @@ -9733,12 +13014,12 @@ class AnnotationElement {
class LinkAnnotationElement extends AnnotationElement { constructor(parameters, options = null) { - const isRenderable = !!(parameters.data.url || parameters.data.dest || parameters.data.action || parameters.data.isTooltipOnly || parameters.data.resetForm || parameters.data.actions && (parameters.data.actions.Action || parameters.data.actions["Mouse Up"] || parameters.data.actions["Mouse Down"])); super(parameters, { - isRenderable, + isRenderable: true, ignoreBorder: !!options?.ignoreBorder, createQuadrilaterals: true }); + this.isTooltipOnly = parameters.data.isTooltipOnly; }
render() { @@ -9747,39 +13028,52 @@ class LinkAnnotationElement extends AnnotationElement { linkService } = this; const link = document.createElement("a"); + link.setAttribute("data-element-id", data.id); + let isBound = false;
if (data.url) { linkService.addLinkAttributes(link, data.url, data.newWindow); + isBound = true; } else if (data.action) { this._bindNamedAction(link, data.action); + + isBound = true; } else if (data.dest) { this._bindLink(link, data.dest); - } else { - let hasClickAction = false;
+ isBound = true; + } else { if (data.actions && (data.actions.Action || data.actions["Mouse Up"] || data.actions["Mouse Down"]) && this.enableScripting && this.hasJSActions) { - hasClickAction = true; - this._bindJSAction(link, data); + + isBound = true; }
if (data.resetForm) { this._bindResetFormAction(link, data.resetForm); - } else if (!hasClickAction) { + + isBound = true; + } else if (this.isTooltipOnly && !isBound) { this._bindLink(link, ""); + + isBound = true; } }
if (this.quadrilaterals) { return this._renderQuadrilaterals("linkAnnotation").map((quadrilateral, index) => { const linkElement = index === 0 ? link : link.cloneNode(); - quadrilateral.appendChild(linkElement); + quadrilateral.append(linkElement); return quadrilateral; }); }
this.container.className = "linkAnnotation"; - this.container.appendChild(link); + + if (isBound) { + this.container.append(link); + } + return this.container; }
@@ -9940,9 +13234,12 @@ class LinkAnnotationElement extends AnnotationElement { continue; }
- const domElement = document.getElementById(id); + const domElement = document.querySelector(`[data-element-id="${id}"]`);
- if (!domElement || !GetElementsByNameSet.has(domElement)) { + if (!domElement) { + continue; + } else if (!GetElementsByNameSet.has(domElement)) { + (0, _util.warn)(`_bindResetFormAction - element not allowed: ${id}`); continue; }
@@ -9977,8 +13274,6 @@ class TextAnnotationElement extends AnnotationElement { render() { this.container.className = "textAnnotation"; const image = document.createElement("img"); - image.style.height = this.container.style.height; - image.style.width = this.container.style.width; image.src = this.imageResourcesPath + "annotation-" + this.data.name.toLowerCase() + ".svg"; image.alt = "[{{type}} Annotation]"; image.dataset.l10nId = "text_annotation_type"; @@ -9990,7 +13285,7 @@ class TextAnnotationElement extends AnnotationElement { this._createPopup(image, this.data); }
- this.container.appendChild(image); + this.container.append(image); return this.container; }
@@ -10054,6 +13349,43 @@ class WidgetAnnotationElement extends AnnotationElement { element.style.backgroundColor = color === null ? "transparent" : _util.Util.makeHexColor(color[0], color[1], color[2]); }
+ _setTextStyle(element) { + const TEXT_ALIGNMENT = ["left", "center", "right"]; + const { + fontColor + } = this.data.defaultAppearanceData; + const fontSize = this.data.defaultAppearanceData.fontSize || DEFAULT_FONT_SIZE; + const style = element.style; + let computedFontSize; + + if (this.data.multiLine) { + const height = Math.abs(this.data.rect[3] - this.data.rect[1]); + const numberOfLines = Math.round(height / (_util.LINE_FACTOR * fontSize)) || 1; + const lineHeight = height / numberOfLines; + computedFontSize = Math.min(fontSize, Math.round(lineHeight / _util.LINE_FACTOR)); + } else { + const height = Math.abs(this.data.rect[3] - this.data.rect[1]); + computedFontSize = Math.min(fontSize, Math.round(height / _util.LINE_FACTOR)); + } + + style.fontSize = `calc(${computedFontSize}px * var(--scale-factor))`; + style.color = _util.Util.makeHexColor(fontColor[0], fontColor[1], fontColor[2]); + + if (this.data.textAlignment !== null) { + style.textAlign = TEXT_ALIGNMENT[this.data.textAlignment]; + } + } + + _setRequired(element, isRequired) { + if (isRequired) { + element.setAttribute("required", true); + } else { + element.removeAttribute("required"); + } + + element.setAttribute("aria-required", isRequired); + } + }
class TextWidgetAnnotationElement extends WidgetAnnotationElement { @@ -10090,7 +13422,7 @@ class TextWidgetAnnotationElement extends WidgetAnnotationElement { }); const textContent = storedData.formattedValue || storedData.value || ""; const elementData = { - userValue: null, + userValue: textContent, formattedValue: null, valueOnFocus: "" }; @@ -10098,18 +13430,28 @@ class TextWidgetAnnotationElement extends WidgetAnnotationElement { if (this.data.multiLine) { element = document.createElement("textarea"); element.textContent = textContent; + + if (this.data.doNotScroll) { + element.style.overflowY = "hidden"; + } } else { element = document.createElement("input"); element.type = "text"; element.setAttribute("value", textContent); + + if (this.data.doNotScroll) { + element.style.overflowX = "hidden"; + } }
GetElementsByNameSet.add(element); + element.setAttribute("data-element-id", id); element.disabled = this.data.readOnly; element.name = this.data.fieldName; element.tabIndex = DEFAULT_TAB_INDEX; - elementData.userValue = textContent; - element.setAttribute("id", id); + + this._setRequired(element, this.data.required); + element.addEventListener("input", event => { storage.setValue(id, { value: event.target.value @@ -10321,7 +13663,7 @@ class TextWidgetAnnotationElement extends WidgetAnnotationElement { const fieldWidth = this.data.rect[2] - this.data.rect[0]; const combWidth = fieldWidth / this.data.maxLen; element.classList.add("comb"); - element.style.letterSpacing = `calc(${combWidth}px - 1ch)`; + element.style.letterSpacing = `calc(${combWidth}px * var(--scale-factor) - 1ch)`; } } else { element = document.createElement("div"); @@ -10336,29 +13678,10 @@ class TextWidgetAnnotationElement extends WidgetAnnotationElement {
this._setDefaultPropertiesFromJS(element);
- this.container.appendChild(element); + this.container.append(element); return this.container; }
- _setTextStyle(element) { - const TEXT_ALIGNMENT = ["left", "center", "right"]; - const { - fontSize, - fontColor - } = this.data.defaultAppearanceData; - const style = element.style; - - if (fontSize) { - style.fontSize = `${fontSize}px`; - } - - style.color = _util.Util.makeHexColor(fontColor[0], fontColor[1], fontColor[2]); - - if (this.data.textAlignment !== null) { - style.textAlign = TEXT_ALIGNMENT[this.data.textAlignment]; - } - } - }
class CheckboxWidgetAnnotationElement extends WidgetAnnotationElement { @@ -10386,7 +13709,11 @@ class CheckboxWidgetAnnotationElement extends WidgetAnnotationElement { this.container.className = "buttonWidgetAnnotation checkBox"; const element = document.createElement("input"); GetElementsByNameSet.add(element); + element.setAttribute("data-element-id", id); element.disabled = data.readOnly; + + this._setRequired(element, this.data.required); + element.type = "checkbox"; element.name = data.fieldName;
@@ -10394,7 +13721,6 @@ class CheckboxWidgetAnnotationElement extends WidgetAnnotationElement { element.setAttribute("checked", true); }
- element.setAttribute("id", id); element.setAttribute("exportValue", data.exportValue); element.tabIndex = DEFAULT_TAB_INDEX; element.addEventListener("change", event => { @@ -10446,7 +13772,7 @@ class CheckboxWidgetAnnotationElement extends WidgetAnnotationElement {
this._setDefaultPropertiesFromJS(element);
- this.container.appendChild(element); + this.container.append(element); return this.container; }
@@ -10477,7 +13803,11 @@ class RadioButtonWidgetAnnotationElement extends WidgetAnnotationElement {
const element = document.createElement("input"); GetElementsByNameSet.add(element); + element.setAttribute("data-element-id", id); element.disabled = data.readOnly; + + this._setRequired(element, this.data.required); + element.type = "radio"; element.name = data.fieldName;
@@ -10485,7 +13815,6 @@ class RadioButtonWidgetAnnotationElement extends WidgetAnnotationElement { element.setAttribute("checked", true); }
- element.setAttribute("id", id); element.tabIndex = DEFAULT_TAB_INDEX; element.addEventListener("change", event => { const { @@ -10539,7 +13868,7 @@ class RadioButtonWidgetAnnotationElement extends WidgetAnnotationElement {
this._setDefaultPropertiesFromJS(element);
- this.container.appendChild(element); + this.container.append(element); return this.container; }
@@ -10560,7 +13889,15 @@ class PushButtonWidgetAnnotationElement extends LinkAnnotationElement { container.title = this.data.alternativeText; }
- this._setDefaultPropertiesFromJS(container); + const linkElement = container.lastChild; + + if (this.enableScripting && this.hasJSActions && linkElement) { + this._setDefaultPropertiesFromJS(linkElement); + + linkElement.addEventListener("updatefromsandbox", jsEvent => { + this._dispatchEventFromSandbox({}, jsEvent); + }); + }
return container; } @@ -10581,22 +13918,16 @@ class ChoiceWidgetAnnotationElement extends WidgetAnnotationElement { const storedData = storage.getValue(id, { value: this.data.fieldValue }); - let { - fontSize - } = this.data.defaultAppearanceData; - - if (!fontSize) { - fontSize = 9; - } - - const fontSizeStyle = `calc(${fontSize}px * var(--zoom-factor))`; const selectElement = document.createElement("select"); GetElementsByNameSet.add(selectElement); + selectElement.setAttribute("data-element-id", id); selectElement.disabled = this.data.readOnly; + + this._setRequired(selectElement, this.data.required); + selectElement.name = this.data.fieldName; - selectElement.setAttribute("id", id); selectElement.tabIndex = DEFAULT_TAB_INDEX; - selectElement.style.fontSize = `${fontSize}px`; + let addAnEmptyEntry = this.data.combo && this.data.options.length > 0;
if (!this.data.combo) { selectElement.size = this.data.options.length; @@ -10619,15 +13950,30 @@ class ChoiceWidgetAnnotationElement extends WidgetAnnotationElement { optionElement.textContent = option.displayValue; optionElement.value = option.exportValue;
- if (this.data.combo) { - optionElement.style.fontSize = fontSizeStyle; - } - if (storedData.value.includes(option.exportValue)) { optionElement.setAttribute("selected", true); + addAnEmptyEntry = false; }
- selectElement.appendChild(optionElement); + selectElement.append(optionElement); + } + + let removeEmptyEntry = null; + + if (addAnEmptyEntry) { + const noneOptionElement = document.createElement("option"); + noneOptionElement.value = " "; + noneOptionElement.setAttribute("hidden", true); + noneOptionElement.setAttribute("selected", true); + selectElement.prepend(noneOptionElement); + + removeEmptyEntry = () => { + noneOptionElement.remove(); + selectElement.removeEventListener("input", removeEmptyEntry); + removeEmptyEntry = null; + }; + + selectElement.addEventListener("input", removeEmptyEntry); }
const getValue = (event, isExport) => { @@ -10655,6 +14001,7 @@ class ChoiceWidgetAnnotationElement extends WidgetAnnotationElement { selectElement.addEventListener("updatefromsandbox", jsEvent => { const actions = { value(event) { + removeEmptyEntry?.(); const value = event.detail.value; const values = new Set(Array.isArray(value) ? value : [value]);
@@ -10708,10 +14055,17 @@ class ChoiceWidgetAnnotationElement extends WidgetAnnotationElement { displayValue, exportValue } = event.detail.insert; + const selectChild = selectElement.children[index]; const optionElement = document.createElement("option"); optionElement.textContent = displayValue; optionElement.value = exportValue; - selectElement.insertBefore(optionElement, selectElement.children[index]); + + if (selectChild) { + selectChild.before(optionElement); + } else { + selectElement.append(optionElement); + } + storage.setValue(id, { value: getValue(event, true), items: getItems(event) @@ -10735,7 +14089,7 @@ class ChoiceWidgetAnnotationElement extends WidgetAnnotationElement { const optionElement = document.createElement("option"); optionElement.textContent = displayValue; optionElement.value = exportValue; - selectElement.appendChild(optionElement); + selectElement.append(optionElement); }
if (selectElement.options.length > 0) { @@ -10797,11 +14151,15 @@ class ChoiceWidgetAnnotationElement extends WidgetAnnotationElement { }); }
+ if (this.data.combo) { + this._setTextStyle(selectElement); + } else {} + this._setBackgroundColor(selectElement);
this._setDefaultPropertiesFromJS(selectElement);
- this.container.appendChild(selectElement); + this.container.append(selectElement); return this.container; }
@@ -10845,10 +14203,12 @@ class PopupAnnotationElement extends AnnotationElement {
const popupLeft = rect[0] + this.data.parentRect[2] - this.data.parentRect[0]; const popupTop = rect[1]; - this.container.style.transformOrigin = `${-popupLeft}px ${-popupTop}px`; - this.container.style.left = `${popupLeft}px`; - this.container.style.top = `${popupTop}px`; - this.container.appendChild(popup.render()); + const [pageLLx, pageLLy, pageURx, pageURy] = this.viewport.viewBox; + const pageWidth = pageURx - pageLLx; + const pageHeight = pageURy - pageLLy; + this.container.style.left = `${100 * (popupLeft - pageLLx) / pageWidth}%`; + this.container.style.top = `${100 * (popupTop - pageLLy) / pageHeight}%`; + this.container.append(popup.render()); return this.container; }
@@ -10887,7 +14247,7 @@ class PopupElement { const title = document.createElement("h1"); title.dir = this.titleObj.dir; title.textContent = this.titleObj.str; - popup.appendChild(title); + popup.append(title);
const dateObject = _display_utils.PDFDateString.toDateObject(this.modificationDate);
@@ -10900,7 +14260,7 @@ class PopupElement { date: dateObject.toLocaleDateString(), time: dateObject.toLocaleTimeString() }); - popup.appendChild(modificationDate); + popup.append(modificationDate); }
if (this.richText?.str && (!this.contentsObj?.str || this.contentsObj.str === this.richText.str)) { @@ -10914,7 +14274,7 @@ class PopupElement { } else { const contents = this._formatContents(this.contentsObj);
- popup.appendChild(contents); + popup.append(contents); }
if (!Array.isArray(this.trigger)) { @@ -10928,7 +14288,7 @@ class PopupElement { }
popup.addEventListener("click", this._hide.bind(this, true)); - wrapper.appendChild(popup); + wrapper.append(popup); return wrapper; }
@@ -10943,10 +14303,10 @@ class PopupElement {
for (let i = 0, ii = lines.length; i < ii; ++i) { const line = lines[i]; - p.appendChild(document.createTextNode(line)); + p.append(document.createTextNode(line));
if (i < ii - 1) { - p.appendChild(document.createElement("br")); + p.append(document.createElement("br")); } }
@@ -11022,7 +14382,7 @@ class LineAnnotationElement extends AnnotationElement { width, height } = getRectDims(data.rect); - const svg = this.svgFactory.create(width, height); + const svg = this.svgFactory.create(width, height, true); const line = this.svgFactory.createElement("svg:line"); line.setAttribute("x1", data.rect[2] - data.lineCoordinates[0]); line.setAttribute("y1", data.rect[3] - data.lineCoordinates[1]); @@ -11031,7 +14391,7 @@ class LineAnnotationElement extends AnnotationElement { line.setAttribute("stroke-width", data.borderStyle.width || 1); line.setAttribute("stroke", "transparent"); line.setAttribute("fill", "transparent"); - svg.appendChild(line); + svg.append(line); this.container.append(svg);
this._createPopup(line, data); @@ -11057,7 +14417,7 @@ class SquareAnnotationElement extends AnnotationElement { width, height } = getRectDims(data.rect); - const svg = this.svgFactory.create(width, height); + const svg = this.svgFactory.create(width, height, true); const borderWidth = data.borderStyle.width; const square = this.svgFactory.createElement("svg:rect"); square.setAttribute("x", borderWidth / 2); @@ -11067,7 +14427,7 @@ class SquareAnnotationElement extends AnnotationElement { square.setAttribute("stroke-width", borderWidth || 1); square.setAttribute("stroke", "transparent"); square.setAttribute("fill", "transparent"); - svg.appendChild(square); + svg.append(square); this.container.append(svg);
this._createPopup(square, data); @@ -11093,7 +14453,7 @@ class CircleAnnotationElement extends AnnotationElement { width, height } = getRectDims(data.rect); - const svg = this.svgFactory.create(width, height); + const svg = this.svgFactory.create(width, height, true); const borderWidth = data.borderStyle.width; const circle = this.svgFactory.createElement("svg:ellipse"); circle.setAttribute("cx", width / 2); @@ -11103,7 +14463,7 @@ class CircleAnnotationElement extends AnnotationElement { circle.setAttribute("stroke-width", borderWidth || 1); circle.setAttribute("stroke", "transparent"); circle.setAttribute("fill", "transparent"); - svg.appendChild(circle); + svg.append(circle); this.container.append(svg);
this._createPopup(circle, data); @@ -11131,7 +14491,7 @@ class PolylineAnnotationElement extends AnnotationElement { width, height } = getRectDims(data.rect); - const svg = this.svgFactory.create(width, height); + const svg = this.svgFactory.create(width, height, true); let points = [];
for (const coordinate of data.vertices) { @@ -11146,7 +14506,7 @@ class PolylineAnnotationElement extends AnnotationElement { polyline.setAttribute("stroke-width", data.borderStyle.width || 1); polyline.setAttribute("stroke", "transparent"); polyline.setAttribute("fill", "transparent"); - svg.appendChild(polyline); + svg.append(polyline); this.container.append(svg);
this._createPopup(polyline, data); @@ -11204,7 +14564,7 @@ class InkAnnotationElement extends AnnotationElement { width, height } = getRectDims(data.rect); - const svg = this.svgFactory.create(width, height); + const svg = this.svgFactory.create(width, height, true);
for (const inkList of data.inkLists) { let points = []; @@ -11224,7 +14584,7 @@ class InkAnnotationElement extends AnnotationElement {
this._createPopup(polyline, data);
- svg.appendChild(polyline); + svg.append(polyline); }
this.container.append(svg); @@ -11375,15 +14735,14 @@ class FileAttachmentAnnotationElement extends AnnotationElement { render() { this.container.className = "fileAttachmentAnnotation"; const trigger = document.createElement("div"); - trigger.style.height = this.container.style.height; - trigger.style.width = this.container.style.width; + trigger.className = "popupTriggerArea"; trigger.addEventListener("dblclick", this._download.bind(this));
if (!this.data.hasPopup && (this.data.titleObj?.str || this.data.contentsObj?.str || this.data.richText)) { this._createPopup(trigger, this.data); }
- this.container.appendChild(trigger); + this.container.append(trigger); return this.container; }
@@ -11395,14 +14754,25 @@ class FileAttachmentAnnotationElement extends AnnotationElement {
class AnnotationLayer { static render(parameters) { + const { + annotations, + div, + viewport + } = parameters; + this.#setDimensions(div, viewport); const sortedAnnotations = [], popupAnnotations = [];
- for (const data of parameters.annotations) { + for (const data of annotations) { if (!data) { continue; }
+ if (data.annotationType === _util.AnnotationType.POPUP) { + popupAnnotations.push(data); + continue; + } + const { width, height @@ -11412,11 +14782,6 @@ class AnnotationLayer { continue; }
- if (data.annotationType === _util.AnnotationType.POPUP) { - popupAnnotations.push(data); - continue; - } - sortedAnnotations.push(data); }
@@ -11424,14 +14789,12 @@ class AnnotationLayer { sortedAnnotations.push(...popupAnnotations); }
- const div = parameters.div; - for (const data of sortedAnnotations) { const element = AnnotationElementFactory.create({ data, layer: div, page: parameters.page, - viewport: parameters.viewport, + viewport, linkService: parameters.linkService, downloadManager: parameters.downloadManager, imageResourcesPath: parameters.imageResourcesPath || "", @@ -11455,13 +14818,13 @@ class AnnotationLayer {
if (Array.isArray(rendered)) { for (const renderedElement of rendered) { - div.appendChild(renderedElement); + div.append(renderedElement); } } else { if (element instanceof PopupAnnotationElement) { div.prepend(rendered); } else { - div.appendChild(rendered); + div.append(rendered); } } } @@ -11472,52 +14835,31 @@ class AnnotationLayer {
static update(parameters) { const { - page, - viewport, - annotations, annotationCanvasMap, - div + div, + viewport } = parameters; - const transform = viewport.transform; - const matrix = `matrix(${transform.join(",")})`; - let scale, ownMatrix; - - for (const data of annotations) { - const elements = div.querySelectorAll(`[data-annotation-id="${data.id}"]`); - - if (elements) { - for (const element of elements) { - if (data.hasOwnCanvas) { - const rect = _util.Util.normalizeRect([data.rect[0], page.view[3] - data.rect[1] + page.view[1], data.rect[2], page.view[3] - data.rect[3] + page.view[1]]); - - if (!ownMatrix) { - scale = Math.abs(transform[0] || transform[1]); - const ownTransform = transform.slice(); - - for (let i = 0; i < 4; i++) { - ownTransform[i] = Math.sign(ownTransform[i]); - } - - ownMatrix = `matrix(${ownTransform.join(",")})`; - } - - const left = rect[0] * scale; - const top = rect[1] * scale; - element.style.left = `${left}px`; - element.style.top = `${top}px`; - element.style.transformOrigin = `${-left}px ${-top}px`; - element.style.transform = ownMatrix; - } else { - element.style.transform = matrix; - } - } - } - } - + this.#setDimensions(div, viewport); this.#setAnnotationCanvasMap(div, annotationCanvasMap); div.hidden = false; }
+ static #setDimensions(div, { + width, + height, + rotation + }) { + const { + style + } = div; + const flipOrientation = rotation % 180 !== 0, + widthStr = Math.floor(width) + "px", + heightStr = Math.floor(height) + "px"; + style.width = flipOrientation ? heightStr : widthStr; + style.height = flipOrientation ? widthStr : heightStr; + div.setAttribute("data-main-rotation", rotation); + } + static #setAnnotationCanvasMap(div, annotationCanvasMap) { if (!annotationCanvasMap) { return; @@ -11534,10 +14876,12 @@ class AnnotationLayer { firstChild } = element;
- if (firstChild.nodeName === "CANVAS") { - element.replaceChild(canvas, firstChild); + if (!firstChild) { + element.append(canvas); + } else if (firstChild.nodeName === "CANVAS") { + firstChild.replaceWith(canvas); } else { - element.insertBefore(canvas, firstChild); + firstChild.before(canvas); } }
@@ -11549,7 +14893,7 @@ class AnnotationLayer { exports.AnnotationLayer = AnnotationLayer;
/***/ }), -/* 20 */ +/* 27 */ /***/ ((__unused_webpack_module, exports) => {
@@ -11601,7 +14945,8 @@ class ColorConverters { }
static CMYK_HTML(components) { - return this.RGB_HTML(this.CMYK_RGB(components)); + const rgb = this.CMYK_RGB(components).slice(1); + return this.RGB_HTML(rgb); }
static RGB_CMYK([r, g, b]) { @@ -11617,7 +14962,7 @@ class ColorConverters { exports.ColorConverters = ColorConverters;
/***/ }), -/* 21 */ +/* 28 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
@@ -11627,7 +14972,7 @@ Object.defineProperty(exports, "__esModule", ({ })); exports.XfaLayer = void 0;
-var _xfa_text = __w_pdfjs_require__(18); +var _xfa_text = __w_pdfjs_require__(20);
class XfaLayer { static setupStorage(html, id, element, storage, intent) { @@ -11724,26 +15069,38 @@ class XfaLayer { }
for (const [key, value] of Object.entries(attributes)) { - if (value === null || value === undefined || key === "dataId") { + if (value === null || value === undefined) { continue; }
- if (key !== "style") { - if (key === "textContent") { - html.textContent = value; - } else if (key === "class") { + switch (key) { + case "class": if (value.length) { html.setAttribute(key, value.join(" ")); } - } else { - if (isHTMLAnchorElement && (key === "href" || key === "newWindow")) { - continue; + + break; + + case "dataId": + break; + + case "id": + html.setAttribute("data-element-id", value); + break; + + case "style": + Object.assign(html.style, value); + break; + + case "textContent": + html.textContent = value; + break; + + default: + if (!isHTMLAnchorElement || key !== "href" && key !== "newWindow") { + html.setAttribute(key, value); }
- html.setAttribute(key, value); - } - } else { - Object.assign(html.style, value); } }
@@ -11774,7 +15131,7 @@ class XfaLayer {
const stack = [[root, -1, rootHtml]]; const rootDiv = parameters.div; - rootDiv.appendChild(rootHtml); + rootDiv.append(rootHtml);
if (parameters.viewport) { const transform = `matrix(${parameters.viewport.transform.join(",")})`; @@ -11788,14 +15145,14 @@ class XfaLayer { const textDivs = [];
while (stack.length > 0) { - const [parent, i, html] = stack[stack.length - 1]; + const [parent, i, html] = stack.at(-1);
if (i + 1 === parent.children.length) { stack.pop(); continue; }
- const child = parent.children[++stack[stack.length - 1][1]]; + const child = parent.children[++stack.at(-1)[1]];
if (child === null) { continue; @@ -11808,7 +15165,7 @@ class XfaLayer { if (name === "#text") { const node = document.createTextNode(child.value); textDivs.push(node); - html.appendChild(node); + html.append(node); continue; }
@@ -11820,7 +15177,7 @@ class XfaLayer { childHtml = document.createElement(name); }
- html.appendChild(childHtml); + html.append(childHtml);
if (child.attributes) { this.setAttributes({ @@ -11841,7 +15198,7 @@ class XfaLayer { textDivs.push(node); }
- childHtml.appendChild(node); + childHtml.append(node); } }
@@ -11865,7 +15222,7 @@ class XfaLayer { exports.XfaLayer = XfaLayer;
/***/ }), -/* 22 */ +/* 29 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
@@ -11873,10 +15230,13 @@ exports.XfaLayer = XfaLayer; Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.TextLayerRenderTask = void 0; exports.renderTextLayer = renderTextLayer;
var _util = __w_pdfjs_require__(1);
+var _display_utils = __w_pdfjs_require__(4); + const MAX_TEXT_DIVS_TO_RENDER = 100000; const DEFAULT_FONT_SIZE = 30; const DEFAULT_FONT_ASCENT = 0.8; @@ -12287,7 +15647,7 @@ function expandBoundsLTR(width, bounds) { const useBoundary = affectedBoundary.x2 > boundary.x2 ? affectedBoundary : boundary;
if (lastBoundary === useBoundary) { - changedHorizon[changedHorizon.length - 1].end = horizonPart.end; + changedHorizon.at(-1).end = horizonPart.end; } else { changedHorizon.push({ start: horizonPart.start, @@ -12308,7 +15668,7 @@ function expandBoundsLTR(width, bounds) { }
if (boundary.y2 < horizon[j].end) { - changedHorizon[changedHorizon.length - 1].end = boundary.y2; + changedHorizon.at(-1).end = boundary.y2; changedHorizon.push({ start: boundary.y2, end: horizon[j].end, @@ -12343,7 +15703,7 @@ function expandBoundsLTR(width, bounds) { } }
- Array.prototype.splice.apply(horizon, [i, j - i + 1].concat(changedHorizon)); + Array.prototype.splice.apply(horizon, [i, j - i + 1, ...changedHorizon]); }
for (const horizonPart of horizon) { @@ -12365,6 +15725,10 @@ class TextLayerRenderTask { textContentItemsStr, enhanceTextSelection }) { + if (enhanceTextSelection) { + (0, _display_utils.deprecated)("The `enhanceTextSelection` functionality will be removed in the future."); + } + this._textContent = textContent; this._textContentStream = textContentStream; this._container = container; @@ -12432,7 +15796,7 @@ class TextLayerRenderTask { this._container.setAttribute("id", `${items[i].id}`); }
- parent.appendChild(this._container); + parent.append(this._container); } else if (items[i].type === "endMarkedContent") { this._container = this._container.parentNode; } @@ -12491,14 +15855,14 @@ class TextLayerRenderTask { }
if (textDivProperties.hasText) { - this._container.appendChild(textDiv); + this._container.append(textDiv); }
if (textDivProperties.hasEOL) { const br = document.createElement("br"); br.setAttribute("role", "presentation");
- this._container.appendChild(br); + this._container.append(br); } }
@@ -12509,7 +15873,6 @@ class TextLayerRenderTask { const canvas = this._document.createElement("canvas");
canvas.height = canvas.width = DEFAULT_FONT_SIZE; - canvas.mozOpaque = true; this._layoutTextCtx = canvas.getContext("2d", { alpha: false }); @@ -12630,6 +15993,8 @@ class TextLayerRenderTask {
}
+exports.TextLayerRenderTask = TextLayerRenderTask; + function renderTextLayer(renderParameters) { const task = new TextLayerRenderTask({ textContent: renderParameters.textContent, @@ -12647,7 +16012,7 @@ function renderTextLayer(renderParameters) { }
/***/ }), -/* 23 */ +/* 30 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
@@ -12657,9 +16022,9 @@ Object.defineProperty(exports, "__esModule", ({ })); exports.SVGGraphics = void 0;
-var _util = __w_pdfjs_require__(1); +var _display_utils = __w_pdfjs_require__(4);
-var _display_utils = __w_pdfjs_require__(5); +var _util = __w_pdfjs_require__(1);
var _is_node = __w_pdfjs_require__(3);
@@ -12709,6 +16074,30 @@ var exports = __webpack_exports__; Object.defineProperty(exports, "__esModule", ({ value: true })); +Object.defineProperty(exports, "AnnotationEditorLayer", ({ + enumerable: true, + get: function () { + return _annotation_editor_layer.AnnotationEditorLayer; + } +})); +Object.defineProperty(exports, "AnnotationEditorParamsType", ({ + enumerable: true, + get: function () { + return _util.AnnotationEditorParamsType; + } +})); +Object.defineProperty(exports, "AnnotationEditorType", ({ + enumerable: true, + get: function () { + return _util.AnnotationEditorType; + } +})); +Object.defineProperty(exports, "AnnotationEditorUIManager", ({ + enumerable: true, + get: function () { + return _tools.AnnotationEditorUIManager; + } +})); Object.defineProperty(exports, "AnnotationLayer", ({ enumerable: true, get: function () { @@ -12835,6 +16224,12 @@ Object.defineProperty(exports, "XfaLayer", ({ return _xfa_layer.XfaLayer; } })); +Object.defineProperty(exports, "binarySearchFirstItem", ({ + enumerable: true, + get: function () { + return _display_utils.binarySearchFirstItem; + } +})); Object.defineProperty(exports, "build", ({ enumerable: true, get: function () { @@ -12910,24 +16305,28 @@ Object.defineProperty(exports, "version", ({
var _util = __w_pdfjs_require__(1);
-var _api = __w_pdfjs_require__(4); +var _display_utils = __w_pdfjs_require__(4); + +var _api = __w_pdfjs_require__(6); + +var _annotation_editor_layer = __w_pdfjs_require__(21);
-var _display_utils = __w_pdfjs_require__(5); +var _tools = __w_pdfjs_require__(9);
-var _annotation_layer = __w_pdfjs_require__(19); +var _annotation_layer = __w_pdfjs_require__(26);
-var _worker_options = __w_pdfjs_require__(13); +var _worker_options = __w_pdfjs_require__(15);
var _is_node = __w_pdfjs_require__(3);
-var _text_layer = __w_pdfjs_require__(22); +var _text_layer = __w_pdfjs_require__(29);
-var _svg = __w_pdfjs_require__(23); +var _svg = __w_pdfjs_require__(30);
-var _xfa_layer = __w_pdfjs_require__(21); +var _xfa_layer = __w_pdfjs_require__(28);
-const pdfjsVersion = '2.14.290'; -const pdfjsBuild = '38c82357b'; +const pdfjsVersion = '2.15.305'; +const pdfjsBuild = '2a386eff9'; ; })();
diff --git a/toolkit/components/pdfjs/content/build/pdf.scripting.js b/toolkit/components/pdfjs/content/build/pdf.scripting.js index 4e3d79197ef54..3c2162209ab74 100644 --- a/toolkit/components/pdfjs/content/build/pdf.scripting.js +++ b/toolkit/components/pdfjs/content/build/pdf.scripting.js @@ -29,7 +29,7 @@ exports["pdfjs-dist/build/pdf.scripting"] = factory(); else root.pdfjsScripting = factory(); -})(this, () => { +})(globalThis, () => { return /******/ (() => { // webpackBootstrap /******/ "use strict"; /******/ var __webpack_modules__ = ([ @@ -464,7 +464,6 @@ class Field extends _pdf_object.PDFObject { this.required = data.required; this.richText = data.richText; this.richValue = data.richValue; - this.rotation = data.rotation; this.style = data.style; this.submitName = data.submitName; this.textFont = data.textFont; @@ -489,6 +488,7 @@ class Field extends _pdf_object.PDFObject { this._kidIds = data.kidIds || null; this._fieldType = (0, _common.getFieldType)(this._actions); this._siblings = data.siblings || null; + this._rotation = data.rotation || 0; this._globalEval = data.globalEval; this._appObjects = data.appObjects; } @@ -592,6 +592,26 @@ class Field extends _pdf_object.PDFObject { throw new Error("field.page is read-only"); }
+ get rotation() { + return this._rotation; + } + + set rotation(angle) { + angle = Math.floor(angle); + + if (angle % 90 !== 0) { + throw new Error("Invalid rotation: must be a multiple of 90"); + } + + angle %= 360; + + if (angle < 0) { + angle += 360; + } + + this._rotation = angle; + } + get textColor() { return this._textColor; } @@ -1331,7 +1351,8 @@ class ColorConverters { }
static CMYK_HTML(components) { - return this.RGB_HTML(this.CMYK_RGB(components)); + const rgb = this.CMYK_RGB(components).slice(1); + return this.RGB_HTML(rgb); }
static RGB_CMYK([r, g, b]) { @@ -2638,6 +2659,10 @@ class EventDispatcher { }
if (id === "doc") { + if (event.name === "Open") { + this.formatAll(); + } + this._document.obj._dispatchDocEvent(event.name); } else if (id === "page") { this._document.obj._dispatchPageEvent(event.name, baseEvent.actions, baseEvent.pageNumber); @@ -2720,6 +2745,7 @@ class EventDispatcher {
source.obj._send({ id: source.obj._id, + siblings: source.obj._siblings, value, selRange: [selStart, selEnd] }); @@ -2727,12 +2753,14 @@ class EventDispatcher { } else if (!event.willCommit) { source.obj._send({ id: source.obj._id, + siblings: source.obj._siblings, value: savedChange.value, selRange: [savedChange.selStart, savedChange.selEnd] }); } else { source.obj._send({ id: source.obj._id, + siblings: source.obj._siblings, value: "", formattedValue: null, selRange: [0, 0] @@ -2740,6 +2768,22 @@ class EventDispatcher { } }
+ formatAll() { + const event = globalThis.event = new Event({}); + + for (const source of Object.values(this._objects)) { + event.value = source.obj.value; + + if (this.runActions(source, source, event, "Format")) { + source.obj._send({ + id: source.obj._id, + siblings: source.obj._siblings, + formattedValue: event.value?.toString?.() + }); + } + } + } + runValidation(source, event) { const didValidateRun = this.runActions(source, source, event, "Validate");
@@ -2755,6 +2799,7 @@ class EventDispatcher {
source.obj._send({ id: source.obj._id, + siblings: source.obj._siblings, value: savedValue, formattedValue }); @@ -2763,6 +2808,7 @@ class EventDispatcher { } else if (didValidateRun) { source.obj._send({ id: source.obj._id, + siblings: source.obj._siblings, value: "", formattedValue: null, selRange: [0, 0] @@ -2846,6 +2892,7 @@ class EventDispatcher {
target.obj._send({ id: target.obj._id, + siblings: target.obj._siblings, value: savedValue, formattedValue }); @@ -4089,6 +4136,7 @@ class Doc extends _pdf_object.PDFObject {
this._send({ id: field.obj._id, + siblings: field.obj._siblings, value: field.obj.defaultValue, formattedValue: null, selRange: [0, 0] @@ -5020,8 +5068,8 @@ Object.defineProperty(exports, "initSandbox", ({
var _initialization = __w_pdfjs_require__(1);
-const pdfjsVersion = '2.14.290'; -const pdfjsBuild = '38c82357b'; +const pdfjsVersion = '2.15.305'; +const pdfjsBuild = '2a386eff9'; })();
/******/ return __webpack_exports__; diff --git a/toolkit/components/pdfjs/content/build/pdf.worker.js b/toolkit/components/pdfjs/content/build/pdf.worker.js index cec7840a7c1af..da44b8783f29c 100644 --- a/toolkit/components/pdfjs/content/build/pdf.worker.js +++ b/toolkit/components/pdfjs/content/build/pdf.worker.js @@ -29,7 +29,7 @@ exports["pdfjs-dist/build/pdf.worker"] = factory(); else root["pdfjs-dist/build/pdf.worker"] = root.pdfjsWorker = factory(); -})(this, () => { +})(globalThis, () => { return /******/ (() => { // webpackBootstrap /******/ "use strict"; /******/ var __webpack_modules__ = ([ @@ -48,11 +48,13 @@ var _util = __w_pdfjs_require__(2);
var _primitives = __w_pdfjs_require__(5);
-var _pdf_manager = __w_pdfjs_require__(6); +var _core_utils = __w_pdfjs_require__(6);
-var _cleanup_helper = __w_pdfjs_require__(67); +var _pdf_manager = __w_pdfjs_require__(8);
-var _writer = __w_pdfjs_require__(73); +var _cleanup_helper = __w_pdfjs_require__(71); + +var _writer = __w_pdfjs_require__(65);
var _is_node = __w_pdfjs_require__(4);
@@ -60,8 +62,6 @@ var _message_handler = __w_pdfjs_require__(102);
var _worker_stream = __w_pdfjs_require__(103);
-var _core_utils = __w_pdfjs_require__(8); - class WorkerTask { constructor(name) { this.name = name; @@ -117,7 +117,7 @@ class WorkerMessageHandler { const WorkerTasks = []; const verbosity = (0, _util.getVerbosityLevel)(); const apiVersion = docParams.apiVersion; - const workerVersion = '2.14.290'; + const workerVersion = '2.15.305';
if (apiVersion !== workerVersion) { throw new Error(`The API version "${apiVersion}" does not match ` + `the Worker version "${workerVersion}".`); @@ -208,8 +208,8 @@ class WorkerMessageHandler { rangeChunkSize: source.rangeChunkSize }, evaluatorOptions, enableXfa, docBaseUrl);
- for (let i = 0; i < cachedChunks.length; i++) { - newPdfManager.sendProgressiveData(cachedChunks[i]); + for (const chunk of cachedChunks) { + newPdfManager.sendProgressiveData(chunk); }
cachedChunks = []; @@ -464,8 +464,20 @@ class WorkerMessageHandler { filename }) { pdfManager.requestLoadedStream(); + const newAnnotationsByPage = !isPureXfa ? (0, _core_utils.getNewAnnotationsMap)(annotationStorage) : null; const promises = [pdfManager.onLoadedStream(), pdfManager.ensureCatalog("acroForm"), pdfManager.ensureCatalog("acroFormRef"), pdfManager.ensureDoc("xref"), pdfManager.ensureDoc("startXRef")];
+ if (newAnnotationsByPage) { + for (const [pageIndex, annotations] of newAnnotationsByPage) { + promises.push(pdfManager.getPage(pageIndex).then(page => { + const task = new WorkerTask(`Save (editor): page ${pageIndex}`); + return page.saveNewAnnotations(handler, task, annotations).finally(function () { + finishWorkerTask(task); + }); + })); + } + } + if (isPureXfa) { promises.push(pdfManager.serializeXfaData(annotationStorage)); } else { @@ -490,9 +502,7 @@ class WorkerMessageHandler { return stream.bytes; } } else { - for (const ref of refs) { - newRefs = ref.filter(x => x !== null).reduce((a, b) => a.concat(b), newRefs); - } + newRefs = refs.flat(2);
if (newRefs.length === 0) { return stream.bytes; @@ -699,7 +709,7 @@ if (typeof window === "undefined" && !_is_node.isNodeJS && typeof self !== "unde Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.VerbosityLevel = exports.Util = exports.UnknownErrorException = exports.UnexpectedResponseException = exports.UNSUPPORTED_FEATURES = exports.TextRenderingMode = exports.StreamType = exports.RenderingIntentFlag = exports.PermissionFlag = exports.PasswordResponses = exports.PasswordException = exports.PageActionEventType = exports.OPS = exports.MissingPDFException = exports.InvalidPDFException = exports.ImageKind = exports.IDENTITY_MATRIX = exports.FormatError = exports.FontType = [...] +exports.VerbosityLevel = exports.Util = exports.UnknownErrorException = exports.UnexpectedResponseException = exports.UNSUPPORTED_FEATURES = exports.TextRenderingMode = exports.StreamType = exports.RenderingIntentFlag = exports.PermissionFlag = exports.PasswordResponses = exports.PasswordException = exports.PageActionEventType = exports.OPS = exports.MissingPDFException = exports.LINE_FACTOR = exports.LINE_DESCENT_FACTOR = exports.InvalidPDFException = exports.ImageKind = exports.IDENTIT [...] exports.arrayByteLength = arrayByteLength; exports.arraysToBytes = arraysToBytes; exports.assert = assert; @@ -732,6 +742,10 @@ const IDENTITY_MATRIX = [1, 0, 0, 1, 0, 0]; exports.IDENTITY_MATRIX = IDENTITY_MATRIX; const FONT_IDENTITY_MATRIX = [0.001, 0, 0, 0.001, 0, 0]; exports.FONT_IDENTITY_MATRIX = FONT_IDENTITY_MATRIX; +const LINE_FACTOR = 1.35; +exports.LINE_FACTOR = LINE_FACTOR; +const LINE_DESCENT_FACTOR = 0.35; +exports.LINE_DESCENT_FACTOR = LINE_DESCENT_FACTOR; const RenderingIntentFlag = { ANY: 0x01, DISPLAY: 0x02, @@ -749,6 +763,22 @@ const AnnotationMode = { ENABLE_STORAGE: 3 }; exports.AnnotationMode = AnnotationMode; +const AnnotationEditorPrefix = "pdfjs_internal_editor_"; +exports.AnnotationEditorPrefix = AnnotationEditorPrefix; +const AnnotationEditorType = { + DISABLE: -1, + NONE: 0, + FREETEXT: 3, + INK: 15 +}; +exports.AnnotationEditorType = AnnotationEditorType; +const AnnotationEditorParamsType = { + FREETEXT_SIZE: 0, + FREETEXT_COLOR: 1, + INK_COLOR: 2, + INK_THICKNESS: 3 +}; +exports.AnnotationEditorParamsType = AnnotationEditorParamsType; const PermissionFlag = { PRINT: 0x04, MODIFY_CONTENTS: 0x08, @@ -1767,8 +1797,7 @@ const Name = function NameClosure() { }
static get(name) { - const nameValue = nameCache[name]; - return nameValue ? nameValue : nameCache[name] = new Name(name); + return nameCache[name] || (nameCache[name] = new Name(name)); }
static _clearCache() { @@ -1791,8 +1820,7 @@ const Cmd = function CmdClosure() { }
static get(cmd) { - const cmdValue = cmdCache[cmd]; - return cmdValue ? cmdValue : cmdCache[cmd] = new Cmd(cmd); + return cmdCache[cmd] || (cmdCache[cmd] = new Cmd(cmd)); }
static _clearCache() { @@ -2002,8 +2030,7 @@ const Ref = function RefClosure() {
static get(num, gen) { const key = gen === 0 ? `${num}R` : `${num}R${gen}`; - const refValue = refCache[key]; - return refValue ? refValue : refCache[key] = new Ref(num, gen); + return refCache[key] || (refCache[key] = new Ref(num, gen)); }
static _clearCache() { @@ -2116,1388 +2143,1433 @@ function clearPrimitiveCaches() { Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.NetworkPdfManager = exports.LocalPdfManager = void 0; +exports.XRefParseException = exports.XRefEntryException = exports.ParserEOFException = exports.MissingDataException = exports.DocStats = void 0; +exports.collectActions = collectActions; +exports.encodeToXmlString = encodeToXmlString; +exports.escapePDFName = escapePDFName; +exports.getArrayLookupTableFactory = getArrayLookupTableFactory; +exports.getInheritableProperty = getInheritableProperty; +exports.getLookupTableFactory = getLookupTableFactory; +exports.getNewAnnotationsMap = getNewAnnotationsMap; +exports.isWhiteSpace = isWhiteSpace; +exports.log2 = log2; +exports.numberToString = numberToString; +exports.parseXFAPath = parseXFAPath; +exports.readInt8 = readInt8; +exports.readUint16 = readUint16; +exports.readUint32 = readUint32; +exports.recoverJsURL = recoverJsURL; +exports.toRomanNumerals = toRomanNumerals; +exports.validateCSSFont = validateCSSFont;
var _util = __w_pdfjs_require__(2);
-var _chunked_stream = __w_pdfjs_require__(7); - -var _core_utils = __w_pdfjs_require__(8); - -var _document = __w_pdfjs_require__(11); - -var _stream = __w_pdfjs_require__(10); +var _primitives = __w_pdfjs_require__(5);
-function parseDocBaseUrl(url) { - if (url) { - const absoluteUrl = (0, _util.createValidAbsoluteUrl)(url); +var _base_stream = __w_pdfjs_require__(7);
- if (absoluteUrl) { - return absoluteUrl.href; +function getLookupTableFactory(initializer) { + let lookup; + return function () { + if (initializer) { + lookup = Object.create(null); + initializer(lookup); + initializer = null; }
- (0, _util.warn)(`Invalid absolute docBaseUrl: "${url}".`); - } - - return null; + return lookup; + }; }
-class BasePdfManager { - constructor() { - if (this.constructor === BasePdfManager) { - (0, _util.unreachable)("Cannot initialize BasePdfManager."); - } - } - - get docId() { - return this._docId; - } +function getArrayLookupTableFactory(initializer) { + let lookup; + return function () { + if (initializer) { + let arr = initializer(); + initializer = null; + lookup = Object.create(null);
- get password() { - return this._password; - } + for (let i = 0, ii = arr.length; i < ii; i += 2) { + lookup[arr[i]] = arr[i + 1]; + }
- get docBaseUrl() { - const catalog = this.pdfDocument.catalog; - return (0, _util.shadow)(this, "docBaseUrl", catalog.baseUrl || this._docBaseUrl); - } + arr = null; + }
- onLoadedStream() { - (0, _util.unreachable)("Abstract method `onLoadedStream` called"); - } + return lookup; + }; +}
- ensureDoc(prop, args) { - return this.ensure(this.pdfDocument, prop, args); +class MissingDataException extends _util.BaseException { + constructor(begin, end) { + super(`Missing data [${begin}, ${end})`, "MissingDataException"); + this.begin = begin; + this.end = end; }
- ensureXRef(prop, args) { - return this.ensure(this.pdfDocument.xref, prop, args); - } +}
- ensureCatalog(prop, args) { - return this.ensure(this.pdfDocument.catalog, prop, args); - } +exports.MissingDataException = MissingDataException;
- getPage(pageIndex) { - return this.pdfDocument.getPage(pageIndex); +class ParserEOFException extends _util.BaseException { + constructor(msg) { + super(msg, "ParserEOFException"); }
- fontFallback(id, handler) { - return this.pdfDocument.fontFallback(id, handler); - } +}
- loadXfaFonts(handler, task) { - return this.pdfDocument.loadXfaFonts(handler, task); - } +exports.ParserEOFException = ParserEOFException;
- loadXfaImages() { - return this.pdfDocument.loadXfaImages(); +class XRefEntryException extends _util.BaseException { + constructor(msg) { + super(msg, "XRefEntryException"); }
- serializeXfaData(annotationStorage) { - return this.pdfDocument.serializeXfaData(annotationStorage); - } +}
- cleanup(manuallyTriggered = false) { - return this.pdfDocument.cleanup(manuallyTriggered); - } +exports.XRefEntryException = XRefEntryException;
- async ensure(obj, prop, args) { - (0, _util.unreachable)("Abstract method `ensure` called"); +class XRefParseException extends _util.BaseException { + constructor(msg) { + super(msg, "XRefParseException"); }
- requestRange(begin, end) { - (0, _util.unreachable)("Abstract method `requestRange` called"); - } +}
- requestLoadedStream() { - (0, _util.unreachable)("Abstract method `requestLoadedStream` called"); - } +exports.XRefParseException = XRefParseException;
- sendProgressiveData(chunk) { - (0, _util.unreachable)("Abstract method `sendProgressiveData` called"); +class DocStats { + constructor(handler) { + this._handler = handler; + this._streamTypes = new Set(); + this._fontTypes = new Set(); }
- updatePassword(password) { - this._password = password; - } + _send() { + const streamTypes = Object.create(null), + fontTypes = Object.create(null);
- terminate(reason) { - (0, _util.unreachable)("Abstract method `terminate` called"); - } + for (const type of this._streamTypes) { + streamTypes[type] = true; + }
-} + for (const type of this._fontTypes) { + fontTypes[type] = true; + }
-class LocalPdfManager extends BasePdfManager { - constructor(docId, data, password, msgHandler, evaluatorOptions, enableXfa, docBaseUrl) { - super(); - this._docId = docId; - this._password = password; - this._docBaseUrl = parseDocBaseUrl(docBaseUrl); - this.msgHandler = msgHandler; - this.evaluatorOptions = evaluatorOptions; - this.enableXfa = enableXfa; - const stream = new _stream.Stream(data); - this.pdfDocument = new _document.PDFDocument(this, stream); - this._loadedStreamPromise = Promise.resolve(stream); + this._handler.send("DocStats", { + streamTypes, + fontTypes + }); }
- async ensure(obj, prop, args) { - const value = obj[prop]; - - if (typeof value === "function") { - return value.apply(obj, args); + addStreamType(type) { + if (this._streamTypes.has(type)) { + return; }
- return value; - } + this._streamTypes.add(type);
- requestRange(begin, end) { - return Promise.resolve(); + this._send(); }
- requestLoadedStream() {} + addFontType(type) { + if (this._fontTypes.has(type)) { + return; + }
- onLoadedStream() { - return this._loadedStreamPromise; - } + this._fontTypes.add(type);
- terminate(reason) {} + this._send(); + }
}
-exports.LocalPdfManager = LocalPdfManager; +exports.DocStats = DocStats;
-class NetworkPdfManager extends BasePdfManager { - constructor(docId, pdfNetworkStream, args, evaluatorOptions, enableXfa, docBaseUrl) { - super(); - this._docId = docId; - this._password = args.password; - this._docBaseUrl = parseDocBaseUrl(docBaseUrl); - this.msgHandler = args.msgHandler; - this.evaluatorOptions = evaluatorOptions; - this.enableXfa = enableXfa; - this.streamManager = new _chunked_stream.ChunkedStreamManager(pdfNetworkStream, { - msgHandler: args.msgHandler, - length: args.length, - disableAutoFetch: args.disableAutoFetch, - rangeChunkSize: args.rangeChunkSize - }); - this.pdfDocument = new _document.PDFDocument(this, this.streamManager.getStream()); - } +function getInheritableProperty({ + dict, + key, + getArray = false, + stopWhenFound = true +}) { + let values; + const visited = new _primitives.RefSet();
- async ensure(obj, prop, args) { - try { - const value = obj[prop]; + while (dict instanceof _primitives.Dict && !(dict.objId && visited.has(dict.objId))) { + if (dict.objId) { + visited.put(dict.objId); + }
- if (typeof value === "function") { - return value.apply(obj, args); + const value = getArray ? dict.getArray(key) : dict.get(key); + + if (value !== undefined) { + if (stopWhenFound) { + return value; }
- return value; - } catch (ex) { - if (!(ex instanceof _core_utils.MissingDataException)) { - throw ex; + if (!values) { + values = []; }
- await this.requestRange(ex.begin, ex.end); - return this.ensure(obj, prop, args); + values.push(value); } - }
- requestRange(begin, end) { - return this.streamManager.requestRange(begin, end); + dict = dict.get("Parent"); }
- requestLoadedStream() { - this.streamManager.requestAllChunks(); - } + return values; +}
- sendProgressiveData(chunk) { - this.streamManager.onReceiveData({ - chunk - }); - } +const ROMAN_NUMBER_MAP = ["", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM", "", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC", "", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"];
- onLoadedStream() { - return this.streamManager.onLoadedStream(); - } +function toRomanNumerals(number, lowerCase = false) { + (0, _util.assert)(Number.isInteger(number) && number > 0, "The number should be a positive integer."); + const romanBuf = []; + let pos;
- terminate(reason) { - this.streamManager.abort(reason); + while (number >= 1000) { + number -= 1000; + romanBuf.push("M"); }
+ pos = number / 100 | 0; + number %= 100; + romanBuf.push(ROMAN_NUMBER_MAP[pos]); + pos = number / 10 | 0; + number %= 10; + romanBuf.push(ROMAN_NUMBER_MAP[10 + pos]); + romanBuf.push(ROMAN_NUMBER_MAP[20 + number]); + const romanStr = romanBuf.join(""); + return lowerCase ? romanStr.toLowerCase() : romanStr; }
-exports.NetworkPdfManager = NetworkPdfManager; +function log2(x) { + if (x <= 0) { + return 0; + }
-/***/ }), -/* 7 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + return Math.ceil(Math.log2(x)); +}
+function readInt8(data, offset) { + return data[offset] << 24 >> 24; +}
+function readUint16(data, offset) { + return data[offset] << 8 | data[offset + 1]; +}
-Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.ChunkedStreamManager = exports.ChunkedStream = void 0; +function readUint32(data, offset) { + return (data[offset] << 24 | data[offset + 1] << 16 | data[offset + 2] << 8 | data[offset + 3]) >>> 0; +}
-var _util = __w_pdfjs_require__(2); +function isWhiteSpace(ch) { + return ch === 0x20 || ch === 0x09 || ch === 0x0d || ch === 0x0a; +}
-var _core_utils = __w_pdfjs_require__(8); +function parseXFAPath(path) { + const positionPattern = /(.+)[(\d+)]$/; + return path.split(".").map(component => { + const m = component.match(positionPattern);
-var _stream = __w_pdfjs_require__(10); + if (m) { + return { + name: m[1], + pos: parseInt(m[2], 10) + }; + }
-class ChunkedStream extends _stream.Stream { - constructor(length, chunkSize, manager) { - super(new Uint8Array(length), 0, length, null); - this.chunkSize = chunkSize; - this._loadedChunks = new Set(); - this.numChunks = Math.ceil(length / chunkSize); - this.manager = manager; - this.progressiveDataLength = 0; - this.lastSuccessfulEnsureByteChunk = -1; - } + return { + name: component, + pos: 0 + }; + }); +}
- getMissingChunks() { - const chunks = []; +function escapePDFName(str) { + const buffer = []; + let start = 0;
- for (let chunk = 0, n = this.numChunks; chunk < n; ++chunk) { - if (!this._loadedChunks.has(chunk)) { - chunks.push(chunk); + for (let i = 0, ii = str.length; i < ii; i++) { + const char = str.charCodeAt(i); + + if (char < 0x21 || char > 0x7e || char === 0x23 || char === 0x28 || char === 0x29 || char === 0x3c || char === 0x3e || char === 0x5b || char === 0x5d || char === 0x7b || char === 0x7d || char === 0x2f || char === 0x25) { + if (start < i) { + buffer.push(str.substring(start, i)); } - }
- return chunks; + buffer.push(`#${char.toString(16)}`); + start = i + 1; + } }
- get numChunksLoaded() { - return this._loadedChunks.size; + if (buffer.length === 0) { + return str; }
- get isDataLoaded() { - return this.numChunksLoaded === this.numChunks; + if (start < str.length) { + buffer.push(str.substring(start, str.length)); }
- onReceiveData(begin, chunk) { - const chunkSize = this.chunkSize; - - if (begin % chunkSize !== 0) { - throw new Error(`Bad begin offset: ${begin}`); - } - - const end = begin + chunk.byteLength; - - if (end % chunkSize !== 0 && end !== this.bytes.length) { - throw new Error(`Bad end offset: ${end}`); - } - - this.bytes.set(new Uint8Array(chunk), begin); - const beginChunk = Math.floor(begin / chunkSize); - const endChunk = Math.floor((end - 1) / chunkSize) + 1; + return buffer.join(""); +}
- for (let curChunk = beginChunk; curChunk < endChunk; ++curChunk) { - this._loadedChunks.add(curChunk); - } +function _collectJS(entry, xref, list, parents) { + if (!entry) { + return; }
- onReceiveProgressiveData(data) { - let position = this.progressiveDataLength; - const beginChunk = Math.floor(position / this.chunkSize); - this.bytes.set(new Uint8Array(data), position); - position += data.byteLength; - this.progressiveDataLength = position; - const endChunk = position >= this.end ? this.numChunks : Math.floor(position / this.chunkSize); + let parent = null;
- for (let curChunk = beginChunk; curChunk < endChunk; ++curChunk) { - this._loadedChunks.add(curChunk); + if (entry instanceof _primitives.Ref) { + if (parents.has(entry)) { + return; } + + parent = entry; + parents.put(parent); + entry = xref.fetch(entry); }
- ensureByte(pos) { - if (pos < this.progressiveDataLength) { - return; + if (Array.isArray(entry)) { + for (const element of entry) { + _collectJS(element, xref, list, parents); } + } else if (entry instanceof _primitives.Dict) { + if ((0, _primitives.isName)(entry.get("S"), "JavaScript")) { + const js = entry.get("JS"); + let code;
- const chunk = Math.floor(pos / this.chunkSize); + if (js instanceof _base_stream.BaseStream) { + code = js.getString(); + } else if (typeof js === "string") { + code = js; + }
- if (chunk > this.numChunks) { - return; - } + code = code && (0, _util.stringToPDFString)(code).replace(/\u0000/g, "");
- if (chunk === this.lastSuccessfulEnsureByteChunk) { - return; + if (code) { + list.push(code); + } }
- if (!this._loadedChunks.has(chunk)) { - throw new _core_utils.MissingDataException(pos, pos + 1); - } + _collectJS(entry.getRaw("Next"), xref, list, parents); + }
- this.lastSuccessfulEnsureByteChunk = chunk; + if (parent) { + parents.remove(parent); } +}
- ensureRange(begin, end) { - if (begin >= end) { - return; - } +function collectActions(xref, dict, eventType) { + const actions = Object.create(null); + const additionalActionsDicts = getInheritableProperty({ + dict, + key: "AA", + stopWhenFound: false + });
- if (end <= this.progressiveDataLength) { - return; - } + if (additionalActionsDicts) { + for (let i = additionalActionsDicts.length - 1; i >= 0; i--) { + const additionalActions = additionalActionsDicts[i];
- const beginChunk = Math.floor(begin / this.chunkSize); + if (!(additionalActions instanceof _primitives.Dict)) { + continue; + }
- if (beginChunk > this.numChunks) { - return; - } + for (const key of additionalActions.getKeys()) { + const action = eventType[key];
- const endChunk = Math.min(Math.floor((end - 1) / this.chunkSize) + 1, this.numChunks); + if (!action) { + continue; + }
- for (let chunk = beginChunk; chunk < endChunk; ++chunk) { - if (!this._loadedChunks.has(chunk)) { - throw new _core_utils.MissingDataException(begin, end); + const actionDict = additionalActions.getRaw(key); + const parents = new _primitives.RefSet(); + const list = []; + + _collectJS(actionDict, xref, list, parents); + + if (list.length > 0) { + actions[action] = list; + } } } }
- nextEmptyChunk(beginChunk) { - const numChunks = this.numChunks; + if (dict.has("A")) { + const actionDict = dict.get("A"); + const parents = new _primitives.RefSet(); + const list = [];
- for (let i = 0; i < numChunks; ++i) { - const chunk = (beginChunk + i) % numChunks; + _collectJS(actionDict, xref, list, parents);
- if (!this._loadedChunks.has(chunk)) { - return chunk; - } + if (list.length > 0) { + actions.Action = list; } - - return null; - } - - hasChunk(chunk) { - return this._loadedChunks.has(chunk); }
- getByte() { - const pos = this.pos; + return (0, _util.objectSize)(actions) > 0 ? actions : null; +}
- if (pos >= this.end) { - return -1; - } +const XMLEntities = { + 0x3c: "<", + 0x3e: ">", + 0x26: "&", + 0x22: """, + 0x27: "'" +};
- if (pos >= this.progressiveDataLength) { - this.ensureByte(pos); - } +function encodeToXmlString(str) { + const buffer = []; + let start = 0;
- return this.bytes[this.pos++]; - } + for (let i = 0, ii = str.length; i < ii; i++) { + const char = str.codePointAt(i);
- getBytes(length) { - const bytes = this.bytes; - const pos = this.pos; - const strEnd = this.end; + if (0x20 <= char && char <= 0x7e) { + const entity = XMLEntities[char];
- if (!length) { - if (strEnd > this.progressiveDataLength) { - this.ensureRange(pos, strEnd); + if (entity) { + if (start < i) { + buffer.push(str.substring(start, i)); + } + + buffer.push(entity); + start = i + 1; + } + } else { + if (start < i) { + buffer.push(str.substring(start, i)); }
- return bytes.subarray(pos, strEnd); - } + buffer.push(`&#x${char.toString(16).toUpperCase()};`);
- let end = pos + length; + if (char > 0xd7ff && (char < 0xe000 || char > 0xfffd)) { + i++; + }
- if (end > strEnd) { - end = strEnd; + start = i + 1; } + }
- if (end > this.progressiveDataLength) { - this.ensureRange(pos, end); - } + if (buffer.length === 0) { + return str; + }
- this.pos = end; - return bytes.subarray(pos, end); + if (start < str.length) { + buffer.push(str.substring(start, str.length)); }
- getByteRange(begin, end) { - if (begin < 0) { - begin = 0; - } + return buffer.join(""); +}
- if (end > this.end) { - end = this.end; - } +function validateCSSFont(cssFontInfo) { + const DEFAULT_CSS_FONT_OBLIQUE = "14"; + const DEFAULT_CSS_FONT_WEIGHT = "400"; + const CSS_FONT_WEIGHT_VALUES = new Set(["100", "200", "300", "400", "500", "600", "700", "800", "900", "1000", "normal", "bold", "bolder", "lighter"]); + const { + fontFamily, + fontWeight, + italicAngle + } = cssFontInfo;
- if (end > this.progressiveDataLength) { - this.ensureRange(begin, end); + if (/^".*"$/.test(fontFamily)) { + if (/[^\]"/.test(fontFamily.slice(1, fontFamily.length - 1))) { + (0, _util.warn)(`XFA - FontFamily contains some unescaped ": ${fontFamily}.`); + return false; } - - return this.bytes.subarray(begin, end); - } - - makeSubStream(start, length, dict = null) { - if (length) { - if (start + length > this.progressiveDataLength) { - this.ensureRange(start, start + length); - } - } else { - if (start >= this.progressiveDataLength) { - this.ensureByte(start); + } else if (/^'.*'$/.test(fontFamily)) { + if (/[^\]'/.test(fontFamily.slice(1, fontFamily.length - 1))) { + (0, _util.warn)(`XFA - FontFamily contains some unescaped ': ${fontFamily}.`); + return false; + } + } else { + for (const ident of fontFamily.split(/[ \t]+/)) { + if (/^(\d|(-(\d|-)))/.test(ident) || !/^[\w-\]+$/.test(ident)) { + (0, _util.warn)(`XFA - FontFamily contains some invalid <custom-ident>: ${fontFamily}.`); + return false; } } + }
- function ChunkedStreamSubstream() {} + const weight = fontWeight ? fontWeight.toString() : ""; + cssFontInfo.fontWeight = CSS_FONT_WEIGHT_VALUES.has(weight) ? weight : DEFAULT_CSS_FONT_WEIGHT; + const angle = parseFloat(italicAngle); + cssFontInfo.italicAngle = isNaN(angle) || angle < -90 || angle > 90 ? DEFAULT_CSS_FONT_OBLIQUE : italicAngle.toString(); + return true; +}
- ChunkedStreamSubstream.prototype = Object.create(this); +function recoverJsURL(str) { + const URL_OPEN_METHODS = ["app.launchURL", "window.open", "xfa.host.gotoURL"]; + const regex = new RegExp("^\s*(" + URL_OPEN_METHODS.join("|").split(".").join("\.") + ")\((?:'|")([^'"]*)(?:'|")(?:,\s*(\w+)\)|\))", "i"); + const jsUrl = regex.exec(str);
- ChunkedStreamSubstream.prototype.getMissingChunks = function () { - const chunkSize = this.chunkSize; - const beginChunk = Math.floor(this.start / chunkSize); - const endChunk = Math.floor((this.end - 1) / chunkSize) + 1; - const missingChunks = []; + if (jsUrl && jsUrl[2]) { + const url = jsUrl[2]; + let newWindow = false;
- for (let chunk = beginChunk; chunk < endChunk; ++chunk) { - if (!this._loadedChunks.has(chunk)) { - missingChunks.push(chunk); - } - } + if (jsUrl[3] === "true" && jsUrl[1] === "app.launchURL") { + newWindow = true; + }
- return missingChunks; + return { + url, + newWindow }; - - Object.defineProperty(ChunkedStreamSubstream.prototype, "isDataLoaded", { - get() { - if (this.numChunksLoaded === this.numChunks) { - return true; - } - - return this.getMissingChunks().length === 0; - }, - - configurable: true - }); - const subStream = new ChunkedStreamSubstream(); - subStream.pos = subStream.start = start; - subStream.end = start + length || this.end; - subStream.dict = dict; - return subStream; - } - - getBaseStreams() { - return [this]; }
+ return null; }
-exports.ChunkedStream = ChunkedStream; - -class ChunkedStreamManager { - constructor(pdfNetworkStream, args) { - this.length = args.length; - this.chunkSize = args.rangeChunkSize; - this.stream = new ChunkedStream(this.length, this.chunkSize, this); - this.pdfNetworkStream = pdfNetworkStream; - this.disableAutoFetch = args.disableAutoFetch; - this.msgHandler = args.msgHandler; - this.currRequestId = 0; - this._chunksNeededByRequest = new Map(); - this._requestsByChunk = new Map(); - this._promisesByRequest = new Map(); - this.progressiveDataLength = 0; - this.aborted = false; - this._loadedStreamCapability = (0, _util.createPromiseCapability)(); - } - - onLoadedStream() { - return this._loadedStreamCapability.promise; +function numberToString(value) { + if (Number.isInteger(value)) { + return value.toString(); }
- sendRequest(begin, end) { - const rangeReader = this.pdfNetworkStream.getRangeReader(begin, end); - - if (!rangeReader.isStreamingSupported) { - rangeReader.onProgress = this.onProgress.bind(this); - } - - let chunks = [], - loaded = 0; - return new Promise((resolve, reject) => { - const readChunk = chunk => { - try { - if (!chunk.done) { - const data = chunk.value; - chunks.push(data); - loaded += (0, _util.arrayByteLength)(data); - - if (rangeReader.isStreamingSupported) { - this.onProgress({ - loaded - }); - } - - rangeReader.read().then(readChunk, reject); - return; - } - - const chunkData = (0, _util.arraysToBytes)(chunks); - chunks = null; - resolve(chunkData); - } catch (e) { - reject(e); - } - }; - - rangeReader.read().then(readChunk, reject); - }).then(data => { - if (this.aborted) { - return; - } + const roundedValue = Math.round(value * 100);
- this.onReceiveData({ - chunk: data, - begin - }); - }); + if (roundedValue % 100 === 0) { + return (roundedValue / 100).toString(); }
- requestAllChunks() { - const missingChunks = this.stream.getMissingChunks(); + if (roundedValue % 10 === 0) { + return value.toFixed(1); + }
- this._requestChunks(missingChunks); + return value.toFixed(2); +}
- return this._loadedStreamCapability.promise; +function getNewAnnotationsMap(annotationStorage) { + if (!annotationStorage) { + return null; }
- _requestChunks(chunks) { - const requestId = this.currRequestId++; - const chunksNeeded = new Set(); - - this._chunksNeededByRequest.set(requestId, chunksNeeded); + const newAnnotationsByPage = new Map();
- for (const chunk of chunks) { - if (!this.stream.hasChunk(chunk)) { - chunksNeeded.add(chunk); - } + for (const [key, value] of annotationStorage) { + if (!key.startsWith(_util.AnnotationEditorPrefix)) { + continue; }
- if (chunksNeeded.size === 0) { - return Promise.resolve(); + let annotations = newAnnotationsByPage.get(value.pageIndex); + + if (!annotations) { + annotations = []; + newAnnotationsByPage.set(value.pageIndex, annotations); }
- const capability = (0, _util.createPromiseCapability)(); + annotations.push(value); + }
- this._promisesByRequest.set(requestId, capability); + return newAnnotationsByPage.size > 0 ? newAnnotationsByPage : null; +}
- const chunksToRequest = []; +/***/ }), +/* 7 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
- for (const chunk of chunksNeeded) { - let requestIds = this._requestsByChunk.get(chunk);
- if (!requestIds) { - requestIds = [];
- this._requestsByChunk.set(chunk, requestIds); +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.BaseStream = void 0;
- chunksToRequest.push(chunk); - } +var _util = __w_pdfjs_require__(2);
- requestIds.push(requestId); +class BaseStream { + constructor() { + if (this.constructor === BaseStream) { + (0, _util.unreachable)("Cannot initialize BaseStream."); } + }
- if (chunksToRequest.length > 0) { - const groupedChunksToRequest = this.groupChunks(chunksToRequest); + get length() { + (0, _util.unreachable)("Abstract getter `length` accessed"); + }
- for (const groupedChunk of groupedChunksToRequest) { - const begin = groupedChunk.beginChunk * this.chunkSize; - const end = Math.min(groupedChunk.endChunk * this.chunkSize, this.length); - this.sendRequest(begin, end).catch(capability.reject); - } - } + get isEmpty() { + (0, _util.unreachable)("Abstract getter `isEmpty` accessed"); + }
- return capability.promise.catch(reason => { - if (this.aborted) { - return; - } + get isDataLoaded() { + return (0, _util.shadow)(this, "isDataLoaded", true); + }
- throw reason; - }); + getByte() { + (0, _util.unreachable)("Abstract method `getByte` called"); }
- getStream() { - return this.stream; + getBytes(length) { + (0, _util.unreachable)("Abstract method `getBytes` called"); }
- requestRange(begin, end) { - end = Math.min(end, this.length); - const beginChunk = this.getBeginChunk(begin); - const endChunk = this.getEndChunk(end); - const chunks = []; + peekByte() { + const peekedByte = this.getByte();
- for (let chunk = beginChunk; chunk < endChunk; ++chunk) { - chunks.push(chunk); + if (peekedByte !== -1) { + this.pos--; }
- return this._requestChunks(chunks); + return peekedByte; }
- requestRanges(ranges = []) { - const chunksToRequest = []; + peekBytes(length) { + const bytes = this.getBytes(length); + this.pos -= bytes.length; + return bytes; + }
- for (const range of ranges) { - const beginChunk = this.getBeginChunk(range.begin); - const endChunk = this.getEndChunk(range.end); + getUint16() { + const b0 = this.getByte(); + const b1 = this.getByte();
- for (let chunk = beginChunk; chunk < endChunk; ++chunk) { - if (!chunksToRequest.includes(chunk)) { - chunksToRequest.push(chunk); - } - } + if (b0 === -1 || b1 === -1) { + return -1; }
- chunksToRequest.sort(function (a, b) { - return a - b; - }); - return this._requestChunks(chunksToRequest); + return (b0 << 8) + b1; }
- groupChunks(chunks) { - const groupedChunks = []; - let beginChunk = -1; - let prevChunk = -1; - - for (let i = 0, ii = chunks.length; i < ii; ++i) { - const chunk = chunks[i]; - - if (beginChunk < 0) { - beginChunk = chunk; - } + getInt32() { + const b0 = this.getByte(); + const b1 = this.getByte(); + const b2 = this.getByte(); + const b3 = this.getByte(); + return (b0 << 24) + (b1 << 16) + (b2 << 8) + b3; + }
- if (prevChunk >= 0 && prevChunk + 1 !== chunk) { - groupedChunks.push({ - beginChunk, - endChunk: prevChunk + 1 - }); - beginChunk = chunk; - } + getByteRange(begin, end) { + (0, _util.unreachable)("Abstract method `getByteRange` called"); + }
- if (i + 1 === chunks.length) { - groupedChunks.push({ - beginChunk, - endChunk: chunk + 1 - }); - } + getString(length) { + return (0, _util.bytesToString)(this.getBytes(length)); + }
- prevChunk = chunk; - } + skip(n) { + this.pos += n || 1; + }
- return groupedChunks; + reset() { + (0, _util.unreachable)("Abstract method `reset` called"); }
- onProgress(args) { - this.msgHandler.send("DocProgress", { - loaded: this.stream.numChunksLoaded * this.chunkSize + args.loaded, - total: this.length - }); + moveStart() { + (0, _util.unreachable)("Abstract method `moveStart` called"); }
- onReceiveData(args) { - const chunk = args.chunk; - const isProgressive = args.begin === undefined; - const begin = isProgressive ? this.progressiveDataLength : args.begin; - const end = begin + chunk.byteLength; - const beginChunk = Math.floor(begin / this.chunkSize); - const endChunk = end < this.length ? Math.floor(end / this.chunkSize) : Math.ceil(end / this.chunkSize); + makeSubStream(start, length, dict = null) { + (0, _util.unreachable)("Abstract method `makeSubStream` called"); + }
- if (isProgressive) { - this.stream.onReceiveProgressiveData(chunk); - this.progressiveDataLength = end; - } else { - this.stream.onReceiveData(begin, chunk); - } + getBaseStreams() { + return null; + }
- if (this.stream.isDataLoaded) { - this._loadedStreamCapability.resolve(this.stream); - } +}
- const loadedRequests = []; +exports.BaseStream = BaseStream;
- for (let curChunk = beginChunk; curChunk < endChunk; ++curChunk) { - const requestIds = this._requestsByChunk.get(curChunk); +/***/ }), +/* 8 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
- if (!requestIds) { - continue; - }
- this._requestsByChunk.delete(curChunk);
- for (const requestId of requestIds) { - const chunksNeeded = this._chunksNeededByRequest.get(requestId); +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.NetworkPdfManager = exports.LocalPdfManager = void 0;
- if (chunksNeeded.has(curChunk)) { - chunksNeeded.delete(curChunk); - } +var _util = __w_pdfjs_require__(2);
- if (chunksNeeded.size > 0) { - continue; - } +var _chunked_stream = __w_pdfjs_require__(9);
- loadedRequests.push(requestId); - } - } +var _core_utils = __w_pdfjs_require__(6);
- if (!this.disableAutoFetch && this._requestsByChunk.size === 0) { - let nextEmptyChunk; +var _document = __w_pdfjs_require__(11);
- if (this.stream.numChunksLoaded === 1) { - const lastChunk = this.stream.numChunks - 1; +var _stream = __w_pdfjs_require__(10);
- if (!this.stream.hasChunk(lastChunk)) { - nextEmptyChunk = lastChunk; - } - } else { - nextEmptyChunk = this.stream.nextEmptyChunk(endChunk); - } +function parseDocBaseUrl(url) { + if (url) { + const absoluteUrl = (0, _util.createValidAbsoluteUrl)(url);
- if (Number.isInteger(nextEmptyChunk)) { - this._requestChunks([nextEmptyChunk]); - } + if (absoluteUrl) { + return absoluteUrl.href; }
- for (const requestId of loadedRequests) { - const capability = this._promisesByRequest.get(requestId); + (0, _util.warn)(`Invalid absolute docBaseUrl: "${url}".`); + }
- this._promisesByRequest.delete(requestId); + return null; +}
- capability.resolve(); +class BasePdfManager { + constructor() { + if (this.constructor === BasePdfManager) { + (0, _util.unreachable)("Cannot initialize BasePdfManager."); } - - this.msgHandler.send("DocProgress", { - loaded: this.stream.numChunksLoaded * this.chunkSize, - total: this.length - }); }
- onError(err) { - this._loadedStreamCapability.reject(err); + get docId() { + return this._docId; }
- getBeginChunk(begin) { - return Math.floor(begin / this.chunkSize); + get password() { + return this._password; }
- getEndChunk(end) { - return Math.floor((end - 1) / this.chunkSize) + 1; + get docBaseUrl() { + const catalog = this.pdfDocument.catalog; + return (0, _util.shadow)(this, "docBaseUrl", catalog.baseUrl || this._docBaseUrl); }
- abort(reason) { - this.aborted = true; + onLoadedStream() { + (0, _util.unreachable)("Abstract method `onLoadedStream` called"); + }
- if (this.pdfNetworkStream) { - this.pdfNetworkStream.cancelAllRequests(reason); - } - - for (const capability of this._promisesByRequest.values()) { - capability.reject(reason); - } + ensureDoc(prop, args) { + return this.ensure(this.pdfDocument, prop, args); }
-} - -exports.ChunkedStreamManager = ChunkedStreamManager; - -/***/ }), -/* 8 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + ensureXRef(prop, args) { + return this.ensure(this.pdfDocument.xref, prop, args); + }
+ ensureCatalog(prop, args) { + return this.ensure(this.pdfDocument.catalog, prop, args); + }
+ getPage(pageIndex) { + return this.pdfDocument.getPage(pageIndex); + }
-Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.XRefParseException = exports.XRefEntryException = exports.ParserEOFException = exports.MissingDataException = exports.DocStats = void 0; -exports.collectActions = collectActions; -exports.encodeToXmlString = encodeToXmlString; -exports.escapePDFName = escapePDFName; -exports.getArrayLookupTableFactory = getArrayLookupTableFactory; -exports.getInheritableProperty = getInheritableProperty; -exports.getLookupTableFactory = getLookupTableFactory; -exports.isWhiteSpace = isWhiteSpace; -exports.log2 = log2; -exports.parseXFAPath = parseXFAPath; -exports.readInt8 = readInt8; -exports.readUint16 = readUint16; -exports.readUint32 = readUint32; -exports.recoverJsURL = recoverJsURL; -exports.toRomanNumerals = toRomanNumerals; -exports.validateCSSFont = validateCSSFont; + fontFallback(id, handler) { + return this.pdfDocument.fontFallback(id, handler); + }
-var _util = __w_pdfjs_require__(2); + loadXfaFonts(handler, task) { + return this.pdfDocument.loadXfaFonts(handler, task); + }
-var _primitives = __w_pdfjs_require__(5); + loadXfaImages() { + return this.pdfDocument.loadXfaImages(); + }
-var _base_stream = __w_pdfjs_require__(9); + serializeXfaData(annotationStorage) { + return this.pdfDocument.serializeXfaData(annotationStorage); + }
-function getLookupTableFactory(initializer) { - let lookup; - return function () { - if (initializer) { - lookup = Object.create(null); - initializer(lookup); - initializer = null; - } + cleanup(manuallyTriggered = false) { + return this.pdfDocument.cleanup(manuallyTriggered); + }
- return lookup; - }; -} + async ensure(obj, prop, args) { + (0, _util.unreachable)("Abstract method `ensure` called"); + }
-function getArrayLookupTableFactory(initializer) { - let lookup; - return function () { - if (initializer) { - let arr = initializer(); - initializer = null; - lookup = Object.create(null); + requestRange(begin, end) { + (0, _util.unreachable)("Abstract method `requestRange` called"); + }
- for (let i = 0, ii = arr.length; i < ii; i += 2) { - lookup[arr[i]] = arr[i + 1]; - } + requestLoadedStream() { + (0, _util.unreachable)("Abstract method `requestLoadedStream` called"); + }
- arr = null; - } + sendProgressiveData(chunk) { + (0, _util.unreachable)("Abstract method `sendProgressiveData` called"); + }
- return lookup; - }; -} + updatePassword(password) { + this._password = password; + }
-class MissingDataException extends _util.BaseException { - constructor(begin, end) { - super(`Missing data [${begin}, ${end})`, "MissingDataException"); - this.begin = begin; - this.end = end; + terminate(reason) { + (0, _util.unreachable)("Abstract method `terminate` called"); }
}
-exports.MissingDataException = MissingDataException; - -class ParserEOFException extends _util.BaseException { - constructor(msg) { - super(msg, "ParserEOFException"); +class LocalPdfManager extends BasePdfManager { + constructor(docId, data, password, msgHandler, evaluatorOptions, enableXfa, docBaseUrl) { + super(); + this._docId = docId; + this._password = password; + this._docBaseUrl = parseDocBaseUrl(docBaseUrl); + this.msgHandler = msgHandler; + this.evaluatorOptions = evaluatorOptions; + this.enableXfa = enableXfa; + const stream = new _stream.Stream(data); + this.pdfDocument = new _document.PDFDocument(this, stream); + this._loadedStreamPromise = Promise.resolve(stream); }
-} + async ensure(obj, prop, args) { + const value = obj[prop];
-exports.ParserEOFException = ParserEOFException; + if (typeof value === "function") { + return value.apply(obj, args); + }
-class XRefEntryException extends _util.BaseException { - constructor(msg) { - super(msg, "XRefEntryException"); + return value; }
-} + requestRange(begin, end) { + return Promise.resolve(); + }
-exports.XRefEntryException = XRefEntryException; + requestLoadedStream() {}
-class XRefParseException extends _util.BaseException { - constructor(msg) { - super(msg, "XRefParseException"); + onLoadedStream() { + return this._loadedStreamPromise; }
+ terminate(reason) {} + }
-exports.XRefParseException = XRefParseException; +exports.LocalPdfManager = LocalPdfManager;
-class DocStats { - constructor(handler) { - this._handler = handler; - this._streamTypes = new Set(); - this._fontTypes = new Set(); +class NetworkPdfManager extends BasePdfManager { + constructor(docId, pdfNetworkStream, args, evaluatorOptions, enableXfa, docBaseUrl) { + super(); + this._docId = docId; + this._password = args.password; + this._docBaseUrl = parseDocBaseUrl(docBaseUrl); + this.msgHandler = args.msgHandler; + this.evaluatorOptions = evaluatorOptions; + this.enableXfa = enableXfa; + this.streamManager = new _chunked_stream.ChunkedStreamManager(pdfNetworkStream, { + msgHandler: args.msgHandler, + length: args.length, + disableAutoFetch: args.disableAutoFetch, + rangeChunkSize: args.rangeChunkSize + }); + this.pdfDocument = new _document.PDFDocument(this, this.streamManager.getStream()); }
- _send() { - const streamTypes = Object.create(null), - fontTypes = Object.create(null); - - for (const type of this._streamTypes) { - streamTypes[type] = true; - } + async ensure(obj, prop, args) { + try { + const value = obj[prop];
- for (const type of this._fontTypes) { - fontTypes[type] = true; - } + if (typeof value === "function") { + return value.apply(obj, args); + }
- this._handler.send("DocStats", { - streamTypes, - fontTypes - }); - } + return value; + } catch (ex) { + if (!(ex instanceof _core_utils.MissingDataException)) { + throw ex; + }
- addStreamType(type) { - if (this._streamTypes.has(type)) { - return; + await this.requestRange(ex.begin, ex.end); + return this.ensure(obj, prop, args); } + }
- this._streamTypes.add(type); + requestRange(begin, end) { + return this.streamManager.requestRange(begin, end); + }
- this._send(); + requestLoadedStream() { + this.streamManager.requestAllChunks(); }
- addFontType(type) { - if (this._fontTypes.has(type)) { - return; - } + sendProgressiveData(chunk) { + this.streamManager.onReceiveData({ + chunk + }); + }
- this._fontTypes.add(type); + onLoadedStream() { + return this.streamManager.onLoadedStream(); + }
- this._send(); + terminate(reason) { + this.streamManager.abort(reason); }
}
-exports.DocStats = DocStats; +exports.NetworkPdfManager = NetworkPdfManager;
-function getInheritableProperty({ - dict, - key, - getArray = false, - stopWhenFound = true -}) { - let values; - const visited = new _primitives.RefSet(); +/***/ }), +/* 9 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
- while (dict instanceof _primitives.Dict && !(dict.objId && visited.has(dict.objId))) { - if (dict.objId) { - visited.put(dict.objId); - }
- const value = getArray ? dict.getArray(key) : dict.get(key);
- if (value !== undefined) { - if (stopWhenFound) { - return value; - } +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.ChunkedStreamManager = exports.ChunkedStream = void 0;
- if (!values) { - values = []; - } +var _util = __w_pdfjs_require__(2);
- values.push(value); - } +var _core_utils = __w_pdfjs_require__(6);
- dict = dict.get("Parent"); - } +var _stream = __w_pdfjs_require__(10);
- return values; -} +class ChunkedStream extends _stream.Stream { + constructor(length, chunkSize, manager) { + super(new Uint8Array(length), 0, length, null); + this.chunkSize = chunkSize; + this._loadedChunks = new Set(); + this.numChunks = Math.ceil(length / chunkSize); + this.manager = manager; + this.progressiveDataLength = 0; + this.lastSuccessfulEnsureByteChunk = -1; + }
-const ROMAN_NUMBER_MAP = ["", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM", "", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC", "", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"]; + getMissingChunks() { + const chunks = [];
-function toRomanNumerals(number, lowerCase = false) { - (0, _util.assert)(Number.isInteger(number) && number > 0, "The number should be a positive integer."); - const romanBuf = []; - let pos; + for (let chunk = 0, n = this.numChunks; chunk < n; ++chunk) { + if (!this._loadedChunks.has(chunk)) { + chunks.push(chunk); + } + }
- while (number >= 1000) { - number -= 1000; - romanBuf.push("M"); + return chunks; }
- pos = number / 100 | 0; - number %= 100; - romanBuf.push(ROMAN_NUMBER_MAP[pos]); - pos = number / 10 | 0; - number %= 10; - romanBuf.push(ROMAN_NUMBER_MAP[10 + pos]); - romanBuf.push(ROMAN_NUMBER_MAP[20 + number]); - const romanStr = romanBuf.join(""); - return lowerCase ? romanStr.toLowerCase() : romanStr; -} - -function log2(x) { - if (x <= 0) { - return 0; + get numChunksLoaded() { + return this._loadedChunks.size; }
- return Math.ceil(Math.log2(x)); -} + get isDataLoaded() { + return this.numChunksLoaded === this.numChunks; + }
-function readInt8(data, offset) { - return data[offset] << 24 >> 24; -} + onReceiveData(begin, chunk) { + const chunkSize = this.chunkSize;
-function readUint16(data, offset) { - return data[offset] << 8 | data[offset + 1]; -} + if (begin % chunkSize !== 0) { + throw new Error(`Bad begin offset: ${begin}`); + }
-function readUint32(data, offset) { - return (data[offset] << 24 | data[offset + 1] << 16 | data[offset + 2] << 8 | data[offset + 3]) >>> 0; -} + const end = begin + chunk.byteLength;
-function isWhiteSpace(ch) { - return ch === 0x20 || ch === 0x09 || ch === 0x0d || ch === 0x0a; -} + if (end % chunkSize !== 0 && end !== this.bytes.length) { + throw new Error(`Bad end offset: ${end}`); + }
-function parseXFAPath(path) { - const positionPattern = /(.+)[(\d+)]$/; - return path.split(".").map(component => { - const m = component.match(positionPattern); + this.bytes.set(new Uint8Array(chunk), begin); + const beginChunk = Math.floor(begin / chunkSize); + const endChunk = Math.floor((end - 1) / chunkSize) + 1;
- if (m) { - return { - name: m[1], - pos: parseInt(m[2], 10) - }; + for (let curChunk = beginChunk; curChunk < endChunk; ++curChunk) { + this._loadedChunks.add(curChunk); } + }
- return { - name: component, - pos: 0 - }; - }); -} + onReceiveProgressiveData(data) { + let position = this.progressiveDataLength; + const beginChunk = Math.floor(position / this.chunkSize); + this.bytes.set(new Uint8Array(data), position); + position += data.byteLength; + this.progressiveDataLength = position; + const endChunk = position >= this.end ? this.numChunks : Math.floor(position / this.chunkSize);
-function escapePDFName(str) { - const buffer = []; - let start = 0; + for (let curChunk = beginChunk; curChunk < endChunk; ++curChunk) { + this._loadedChunks.add(curChunk); + } + }
- for (let i = 0, ii = str.length; i < ii; i++) { - const char = str.charCodeAt(i); + ensureByte(pos) { + if (pos < this.progressiveDataLength) { + return; + }
- if (char < 0x21 || char > 0x7e || char === 0x23 || char === 0x28 || char === 0x29 || char === 0x3c || char === 0x3e || char === 0x5b || char === 0x5d || char === 0x7b || char === 0x7d || char === 0x2f || char === 0x25) { - if (start < i) { - buffer.push(str.substring(start, i)); - } + const chunk = Math.floor(pos / this.chunkSize);
- buffer.push(`#${char.toString(16)}`); - start = i + 1; + if (chunk > this.numChunks) { + return; } - } - - if (buffer.length === 0) { - return str; - }
- if (start < str.length) { - buffer.push(str.substring(start, str.length)); - } + if (chunk === this.lastSuccessfulEnsureByteChunk) { + return; + }
- return buffer.join(""); -} + if (!this._loadedChunks.has(chunk)) { + throw new _core_utils.MissingDataException(pos, pos + 1); + }
-function _collectJS(entry, xref, list, parents) { - if (!entry) { - return; + this.lastSuccessfulEnsureByteChunk = chunk; }
- let parent = null; + ensureRange(begin, end) { + if (begin >= end) { + return; + }
- if (entry instanceof _primitives.Ref) { - if (parents.has(entry)) { + if (end <= this.progressiveDataLength) { return; }
- parent = entry; - parents.put(parent); - entry = xref.fetch(entry); - } + const beginChunk = Math.floor(begin / this.chunkSize);
- if (Array.isArray(entry)) { - for (const element of entry) { - _collectJS(element, xref, list, parents); + if (beginChunk > this.numChunks) { + return; } - } else if (entry instanceof _primitives.Dict) { - if ((0, _primitives.isName)(entry.get("S"), "JavaScript")) { - const js = entry.get("JS"); - let code;
- if (js instanceof _base_stream.BaseStream) { - code = js.getString(); - } else if (typeof js === "string") { - code = js; + const endChunk = Math.min(Math.floor((end - 1) / this.chunkSize) + 1, this.numChunks); + + for (let chunk = beginChunk; chunk < endChunk; ++chunk) { + if (!this._loadedChunks.has(chunk)) { + throw new _core_utils.MissingDataException(begin, end); } + } + }
- code = code && (0, _util.stringToPDFString)(code); + nextEmptyChunk(beginChunk) { + const numChunks = this.numChunks;
- if (code) { - list.push(code); + for (let i = 0; i < numChunks; ++i) { + const chunk = (beginChunk + i) % numChunks; + + if (!this._loadedChunks.has(chunk)) { + return chunk; } }
- _collectJS(entry.getRaw("Next"), xref, list, parents); + return null; }
- if (parent) { - parents.remove(parent); + hasChunk(chunk) { + return this._loadedChunks.has(chunk); } -} - -function collectActions(xref, dict, eventType) { - const actions = Object.create(null); - const additionalActionsDicts = getInheritableProperty({ - dict, - key: "AA", - stopWhenFound: false - }); - - if (additionalActionsDicts) { - for (let i = additionalActionsDicts.length - 1; i >= 0; i--) { - const additionalActions = additionalActionsDicts[i];
- if (!(additionalActions instanceof _primitives.Dict)) { - continue; - } + getByte() { + const pos = this.pos;
- for (const key of additionalActions.getKeys()) { - const action = eventType[key]; + if (pos >= this.end) { + return -1; + }
- if (!action) { - continue; - } + if (pos >= this.progressiveDataLength) { + this.ensureByte(pos); + }
- const actionDict = additionalActions.getRaw(key); - const parents = new _primitives.RefSet(); - const list = []; + return this.bytes[this.pos++]; + }
- _collectJS(actionDict, xref, list, parents); + getBytes(length) { + const bytes = this.bytes; + const pos = this.pos; + const strEnd = this.end;
- if (list.length > 0) { - actions[action] = list; - } + if (!length) { + if (strEnd > this.progressiveDataLength) { + this.ensureRange(pos, strEnd); } + + return bytes.subarray(pos, strEnd); } - }
- if (dict.has("A")) { - const actionDict = dict.get("A"); - const parents = new _primitives.RefSet(); - const list = []; + let end = pos + length;
- _collectJS(actionDict, xref, list, parents); + if (end > strEnd) { + end = strEnd; + }
- if (list.length > 0) { - actions.Action = list; + if (end > this.progressiveDataLength) { + this.ensureRange(pos, end); } - }
- return (0, _util.objectSize)(actions) > 0 ? actions : null; -} - -const XMLEntities = { - 0x3c: "<", - 0x3e: ">", - 0x26: "&", - 0x22: """, - 0x27: "'" -}; + this.pos = end; + return bytes.subarray(pos, end); + }
-function encodeToXmlString(str) { - const buffer = []; - let start = 0; + getByteRange(begin, end) { + if (begin < 0) { + begin = 0; + }
- for (let i = 0, ii = str.length; i < ii; i++) { - const char = str.codePointAt(i); + if (end > this.end) { + end = this.end; + }
- if (0x20 <= char && char <= 0x7e) { - const entity = XMLEntities[char]; + if (end > this.progressiveDataLength) { + this.ensureRange(begin, end); + }
- if (entity) { - if (start < i) { - buffer.push(str.substring(start, i)); - } + return this.bytes.subarray(begin, end); + }
- buffer.push(entity); - start = i + 1; + makeSubStream(start, length, dict = null) { + if (length) { + if (start + length > this.progressiveDataLength) { + this.ensureRange(start, start + length); } } else { - if (start < i) { - buffer.push(str.substring(start, i)); + if (start >= this.progressiveDataLength) { + this.ensureByte(start); } + }
- buffer.push(`&#x${char.toString(16).toUpperCase()};`); + function ChunkedStreamSubstream() {}
- if (char > 0xd7ff && (char < 0xe000 || char > 0xfffd)) { - i++; + ChunkedStreamSubstream.prototype = Object.create(this); + + ChunkedStreamSubstream.prototype.getMissingChunks = function () { + const chunkSize = this.chunkSize; + const beginChunk = Math.floor(this.start / chunkSize); + const endChunk = Math.floor((this.end - 1) / chunkSize) + 1; + const missingChunks = []; + + for (let chunk = beginChunk; chunk < endChunk; ++chunk) { + if (!this._loadedChunks.has(chunk)) { + missingChunks.push(chunk); + } }
- start = i + 1; - } - } + return missingChunks; + };
- if (buffer.length === 0) { - return str; + Object.defineProperty(ChunkedStreamSubstream.prototype, "isDataLoaded", { + get() { + if (this.numChunksLoaded === this.numChunks) { + return true; + } + + return this.getMissingChunks().length === 0; + }, + + configurable: true + }); + const subStream = new ChunkedStreamSubstream(); + subStream.pos = subStream.start = start; + subStream.end = start + length || this.end; + subStream.dict = dict; + return subStream; }
- if (start < str.length) { - buffer.push(str.substring(start, str.length)); + getBaseStreams() { + return [this]; }
- return buffer.join(""); }
-function validateCSSFont(cssFontInfo) { - const DEFAULT_CSS_FONT_OBLIQUE = "14"; - const DEFAULT_CSS_FONT_WEIGHT = "400"; - const CSS_FONT_WEIGHT_VALUES = new Set(["100", "200", "300", "400", "500", "600", "700", "800", "900", "1000", "normal", "bold", "bolder", "lighter"]); - const { - fontFamily, - fontWeight, - italicAngle - } = cssFontInfo; +exports.ChunkedStream = ChunkedStream;
- if (/^".*"$/.test(fontFamily)) { - if (/[^\]"/.test(fontFamily.slice(1, fontFamily.length - 1))) { - (0, _util.warn)(`XFA - FontFamily contains some unescaped ": ${fontFamily}.`); - return false; - } - } else if (/^'.*'$/.test(fontFamily)) { - if (/[^\]'/.test(fontFamily.slice(1, fontFamily.length - 1))) { - (0, _util.warn)(`XFA - FontFamily contains some unescaped ': ${fontFamily}.`); - return false; +class ChunkedStreamManager { + constructor(pdfNetworkStream, args) { + this.length = args.length; + this.chunkSize = args.rangeChunkSize; + this.stream = new ChunkedStream(this.length, this.chunkSize, this); + this.pdfNetworkStream = pdfNetworkStream; + this.disableAutoFetch = args.disableAutoFetch; + this.msgHandler = args.msgHandler; + this.currRequestId = 0; + this._chunksNeededByRequest = new Map(); + this._requestsByChunk = new Map(); + this._promisesByRequest = new Map(); + this.progressiveDataLength = 0; + this.aborted = false; + this._loadedStreamCapability = (0, _util.createPromiseCapability)(); + } + + onLoadedStream() { + return this._loadedStreamCapability.promise; + } + + sendRequest(begin, end) { + const rangeReader = this.pdfNetworkStream.getRangeReader(begin, end); + + if (!rangeReader.isStreamingSupported) { + rangeReader.onProgress = this.onProgress.bind(this); } - } else { - for (const ident of fontFamily.split(/[ \t]+/)) { - if (/^(\d|(-(\d|-)))/.test(ident) || !/^[\w-\]+$/.test(ident)) { - (0, _util.warn)(`XFA - FontFamily contains some invalid <custom-ident>: ${fontFamily}.`); - return false; + + let chunks = [], + loaded = 0; + return new Promise((resolve, reject) => { + const readChunk = chunk => { + try { + if (!chunk.done) { + const data = chunk.value; + chunks.push(data); + loaded += (0, _util.arrayByteLength)(data); + + if (rangeReader.isStreamingSupported) { + this.onProgress({ + loaded + }); + } + + rangeReader.read().then(readChunk, reject); + return; + } + + const chunkData = (0, _util.arraysToBytes)(chunks); + chunks = null; + resolve(chunkData); + } catch (e) { + reject(e); + } + }; + + rangeReader.read().then(readChunk, reject); + }).then(data => { + if (this.aborted) { + return; } - } + + this.onReceiveData({ + chunk: data, + begin + }); + }); }
- const weight = fontWeight ? fontWeight.toString() : ""; - cssFontInfo.fontWeight = CSS_FONT_WEIGHT_VALUES.has(weight) ? weight : DEFAULT_CSS_FONT_WEIGHT; - const angle = parseFloat(italicAngle); - cssFontInfo.italicAngle = isNaN(angle) || angle < -90 || angle > 90 ? DEFAULT_CSS_FONT_OBLIQUE : italicAngle.toString(); - return true; -} + requestAllChunks() { + const missingChunks = this.stream.getMissingChunks();
-function recoverJsURL(str) { - const URL_OPEN_METHODS = ["app.launchURL", "window.open", "xfa.host.gotoURL"]; - const regex = new RegExp("^\s*(" + URL_OPEN_METHODS.join("|").split(".").join("\.") + ")\((?:'|")([^'"]*)(?:'|")(?:,\s*(\w+)\)|\))", "i"); - const jsUrl = regex.exec(str); + this._requestChunks(missingChunks);
- if (jsUrl && jsUrl[2]) { - const url = jsUrl[2]; - let newWindow = false; + return this._loadedStreamCapability.promise; + }
- if (jsUrl[3] === "true" && jsUrl[1] === "app.launchURL") { - newWindow = true; + _requestChunks(chunks) { + const requestId = this.currRequestId++; + const chunksNeeded = new Set(); + + this._chunksNeededByRequest.set(requestId, chunksNeeded); + + for (const chunk of chunks) { + if (!this.stream.hasChunk(chunk)) { + chunksNeeded.add(chunk); + } }
- return { - url, - newWindow - }; - } + if (chunksNeeded.size === 0) { + return Promise.resolve(); + }
- return null; -} + const capability = (0, _util.createPromiseCapability)();
-/***/ }), -/* 9 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + this._promisesByRequest.set(requestId, capability);
+ const chunksToRequest = [];
+ for (const chunk of chunksNeeded) { + let requestIds = this._requestsByChunk.get(chunk);
-Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.BaseStream = void 0; + if (!requestIds) { + requestIds = [];
-var _util = __w_pdfjs_require__(2); + this._requestsByChunk.set(chunk, requestIds);
-class BaseStream { - constructor() { - if (this.constructor === BaseStream) { - (0, _util.unreachable)("Cannot initialize BaseStream."); + chunksToRequest.push(chunk); + } + + requestIds.push(requestId); } - }
- get length() { - (0, _util.unreachable)("Abstract getter `length` accessed"); - } + if (chunksToRequest.length > 0) { + const groupedChunksToRequest = this.groupChunks(chunksToRequest);
- get isEmpty() { - (0, _util.unreachable)("Abstract getter `isEmpty` accessed"); - } + for (const groupedChunk of groupedChunksToRequest) { + const begin = groupedChunk.beginChunk * this.chunkSize; + const end = Math.min(groupedChunk.endChunk * this.chunkSize, this.length); + this.sendRequest(begin, end).catch(capability.reject); + } + }
- get isDataLoaded() { - return (0, _util.shadow)(this, "isDataLoaded", true); - } + return capability.promise.catch(reason => { + if (this.aborted) { + return; + }
- getByte() { - (0, _util.unreachable)("Abstract method `getByte` called"); + throw reason; + }); }
- getBytes(length) { - (0, _util.unreachable)("Abstract method `getBytes` called"); + getStream() { + return this.stream; }
- peekByte() { - const peekedByte = this.getByte(); + requestRange(begin, end) { + end = Math.min(end, this.length); + const beginChunk = this.getBeginChunk(begin); + const endChunk = this.getEndChunk(end); + const chunks = [];
- if (peekedByte !== -1) { - this.pos--; + for (let chunk = beginChunk; chunk < endChunk; ++chunk) { + chunks.push(chunk); }
- return peekedByte; + return this._requestChunks(chunks); }
- peekBytes(length) { - const bytes = this.getBytes(length); - this.pos -= bytes.length; - return bytes; - } + requestRanges(ranges = []) { + const chunksToRequest = [];
- getUint16() { - const b0 = this.getByte(); - const b1 = this.getByte(); + for (const range of ranges) { + const beginChunk = this.getBeginChunk(range.begin); + const endChunk = this.getEndChunk(range.end);
- if (b0 === -1 || b1 === -1) { - return -1; + for (let chunk = beginChunk; chunk < endChunk; ++chunk) { + if (!chunksToRequest.includes(chunk)) { + chunksToRequest.push(chunk); + } + } }
- return (b0 << 8) + b1; + chunksToRequest.sort(function (a, b) { + return a - b; + }); + return this._requestChunks(chunksToRequest); }
- getInt32() { - const b0 = this.getByte(); - const b1 = this.getByte(); - const b2 = this.getByte(); - const b3 = this.getByte(); - return (b0 << 24) + (b1 << 16) + (b2 << 8) + b3; - } + groupChunks(chunks) { + const groupedChunks = []; + let beginChunk = -1; + let prevChunk = -1;
- getByteRange(begin, end) { - (0, _util.unreachable)("Abstract method `getByteRange` called"); + for (let i = 0, ii = chunks.length; i < ii; ++i) { + const chunk = chunks[i]; + + if (beginChunk < 0) { + beginChunk = chunk; + } + + if (prevChunk >= 0 && prevChunk + 1 !== chunk) { + groupedChunks.push({ + beginChunk, + endChunk: prevChunk + 1 + }); + beginChunk = chunk; + } + + if (i + 1 === chunks.length) { + groupedChunks.push({ + beginChunk, + endChunk: chunk + 1 + }); + } + + prevChunk = chunk; + } + + return groupedChunks; }
- getString(length) { - return (0, _util.bytesToString)(this.getBytes(length)); + onProgress(args) { + this.msgHandler.send("DocProgress", { + loaded: this.stream.numChunksLoaded * this.chunkSize + args.loaded, + total: this.length + }); }
- skip(n) { - this.pos += n || 1; + onReceiveData(args) { + const chunk = args.chunk; + const isProgressive = args.begin === undefined; + const begin = isProgressive ? this.progressiveDataLength : args.begin; + const end = begin + chunk.byteLength; + const beginChunk = Math.floor(begin / this.chunkSize); + const endChunk = end < this.length ? Math.floor(end / this.chunkSize) : Math.ceil(end / this.chunkSize); + + if (isProgressive) { + this.stream.onReceiveProgressiveData(chunk); + this.progressiveDataLength = end; + } else { + this.stream.onReceiveData(begin, chunk); + } + + if (this.stream.isDataLoaded) { + this._loadedStreamCapability.resolve(this.stream); + } + + const loadedRequests = []; + + for (let curChunk = beginChunk; curChunk < endChunk; ++curChunk) { + const requestIds = this._requestsByChunk.get(curChunk); + + if (!requestIds) { + continue; + } + + this._requestsByChunk.delete(curChunk); + + for (const requestId of requestIds) { + const chunksNeeded = this._chunksNeededByRequest.get(requestId); + + if (chunksNeeded.has(curChunk)) { + chunksNeeded.delete(curChunk); + } + + if (chunksNeeded.size > 0) { + continue; + } + + loadedRequests.push(requestId); + } + } + + if (!this.disableAutoFetch && this._requestsByChunk.size === 0) { + let nextEmptyChunk; + + if (this.stream.numChunksLoaded === 1) { + const lastChunk = this.stream.numChunks - 1; + + if (!this.stream.hasChunk(lastChunk)) { + nextEmptyChunk = lastChunk; + } + } else { + nextEmptyChunk = this.stream.nextEmptyChunk(endChunk); + } + + if (Number.isInteger(nextEmptyChunk)) { + this._requestChunks([nextEmptyChunk]); + } + } + + for (const requestId of loadedRequests) { + const capability = this._promisesByRequest.get(requestId); + + this._promisesByRequest.delete(requestId); + + capability.resolve(); + } + + this.msgHandler.send("DocProgress", { + loaded: this.stream.numChunksLoaded * this.chunkSize, + total: this.length + }); }
- reset() { - (0, _util.unreachable)("Abstract method `reset` called"); + onError(err) { + this._loadedStreamCapability.reject(err); }
- moveStart() { - (0, _util.unreachable)("Abstract method `moveStart` called"); + getBeginChunk(begin) { + return Math.floor(begin / this.chunkSize); }
- makeSubStream(start, length, dict = null) { - (0, _util.unreachable)("Abstract method `makeSubStream` called"); + getEndChunk(end) { + return Math.floor((end - 1) / this.chunkSize) + 1; }
- getBaseStreams() { - return null; + abort(reason) { + this.aborted = true; + + if (this.pdfNetworkStream) { + this.pdfNetworkStream.cancelAllRequests(reason); + } + + for (const capability of this._promisesByRequest.values()) { + capability.reject(reason); + } }
}
-exports.BaseStream = BaseStream; +exports.ChunkedStreamManager = ChunkedStreamManager;
/***/ }), /* 10 */ @@ -3510,7 +3582,7 @@ Object.defineProperty(exports, "__esModule", ({ })); exports.StringStream = exports.Stream = exports.NullStream = void 0;
-var _base_stream = __w_pdfjs_require__(9); +var _base_stream = __w_pdfjs_require__(7);
var _util = __w_pdfjs_require__(2);
@@ -3618,7 +3690,7 @@ exports.Page = exports.PDFDocument = void 0;
var _util = __w_pdfjs_require__(2);
-var _core_utils = __w_pdfjs_require__(8); +var _core_utils = __w_pdfjs_require__(6);
var _primitives = __w_pdfjs_require__(5);
@@ -3626,13 +3698,13 @@ var _xfa_fonts = __w_pdfjs_require__(12);
var _annotation = __w_pdfjs_require__(22);
-var _base_stream = __w_pdfjs_require__(9); +var _base_stream = __w_pdfjs_require__(7);
-var _crypto = __w_pdfjs_require__(74); +var _crypto = __w_pdfjs_require__(67);
-var _catalog = __w_pdfjs_require__(65); +var _catalog = __w_pdfjs_require__(69);
-var _cleanup_helper = __w_pdfjs_require__(67); +var _cleanup_helper = __w_pdfjs_require__(71);
var _dataset_reader = __w_pdfjs_require__(100);
@@ -3640,7 +3712,7 @@ var _parser = __w_pdfjs_require__(27);
var _stream = __w_pdfjs_require__(10);
-var _object_loader = __w_pdfjs_require__(72); +var _object_loader = __w_pdfjs_require__(75);
var _operator_list = __w_pdfjs_require__(62);
@@ -3648,7 +3720,9 @@ var _evaluator = __w_pdfjs_require__(25);
var _decode_stream = __w_pdfjs_require__(29);
-var _struct_tree = __w_pdfjs_require__(71); +var _struct_tree = __w_pdfjs_require__(74); + +var _writer = __w_pdfjs_require__(65);
var _factory = __w_pdfjs_require__(76);
@@ -3727,7 +3801,9 @@ class Page { }
get resources() { - return (0, _util.shadow)(this, "resources", this._getInheritableProperty("Resources") || _primitives.Dict.empty); + const resources = this._getInheritableProperty("Resources"); + + return (0, _util.shadow)(this, "resources", resources instanceof _primitives.Dict ? resources : _primitives.Dict.empty); }
_getBoundingBox(name) { @@ -3834,6 +3910,55 @@ class Page { } : null); }
+ async saveNewAnnotations(handler, task, annotations) { + if (this.xfaFactory) { + throw new Error("XFA: Cannot save new annotations."); + } + + const partialEvaluator = new _evaluator.PartialEvaluator({ + xref: this.xref, + handler, + pageIndex: this.pageIndex, + idFactory: this._localIdFactory, + fontCache: this.fontCache, + builtInCMapCache: this.builtInCMapCache, + standardFontDataCache: this.standardFontDataCache, + globalImageCache: this.globalImageCache, + options: this.evaluatorOptions + }); + const pageDict = this.pageDict; + const annotationsArray = this.annotations.slice(); + const newData = await _annotation.AnnotationFactory.saveNewAnnotations(partialEvaluator, task, annotations); + + for (const { + ref + } of newData.annotations) { + annotationsArray.push(ref); + } + + const savedDict = pageDict.get("Annots"); + pageDict.set("Annots", annotationsArray); + const buffer = []; + let transform = null; + + if (this.xref.encrypt) { + transform = this.xref.encrypt.createCipherTransform(this.ref.num, this.ref.gen); + } + + (0, _writer.writeObject)(this.ref, pageDict, buffer, transform); + + if (savedDict) { + pageDict.set("Annots", savedDict); + } + + const objects = newData.dependencies; + objects.push({ + ref: this.ref, + data: buffer.join("") + }, ...newData.annotations); + return objects; + } + save(handler, task, annotationStorage) { const partialEvaluator = new _evaluator.PartialEvaluator({ xref: this.xref, @@ -3860,7 +3985,9 @@ class Page { })); }
- return Promise.all(newRefsPromises); + return Promise.all(newRefsPromises).then(function (newRefs) { + return newRefs.filter(newRef => !!newRef); + }); }); }
@@ -3896,6 +4023,17 @@ class Page { globalImageCache: this.globalImageCache, options: this.evaluatorOptions }); + const newAnnotationsByPage = !this.xfaFactory ? (0, _core_utils.getNewAnnotationsMap)(annotationStorage) : null; + let newAnnotationsPromise = Promise.resolve(null); + + if (newAnnotationsByPage) { + const newAnnotations = newAnnotationsByPage.get(this.pageIndex); + + if (newAnnotations) { + newAnnotationsPromise = _annotation.AnnotationFactory.printNewAnnotations(partialEvaluator, task, newAnnotations); + } + } + const dataPromises = Promise.all([contentStreamPromise, resourcesPromise]); const pageListPromise = dataPromises.then(([contentStream]) => { const opList = new _operator_list.OperatorList(intent, sink); @@ -3913,7 +4051,11 @@ class Page { return opList; }); }); - return Promise.all([pageListPromise, this._parsedAnnotations]).then(function ([pageOpList, annotations]) { + return Promise.all([pageListPromise, this._parsedAnnotations, newAnnotationsPromise]).then(function ([pageOpList, annotations, newAnnotations]) { + if (newAnnotations) { + annotations = annotations.concat(newAnnotations); + } + if (annotations.length === 0 || intent & _util.RenderingIntentFlag.ANNOTATIONS_DISABLE) { pageOpList.flush(true); return { @@ -3937,13 +4079,10 @@ class Page { }
return Promise.all(opListPromises).then(function (opLists) { - pageOpList.addOp(_util.OPS.beginAnnotations, []); - for (const opList of opLists) { pageOpList.addOpList(opList); }
- pageOpList.addOp(_util.OPS.endAnnotations, []); pageOpList.flush(true); return { length: pageOpList.totalLength @@ -4488,7 +4627,7 @@ class PDFDocument { const pdfFonts = []; const initialState = { get font() { - return pdfFonts[pdfFonts.length - 1]; + return pdfFonts.at(-1); },
set font(font) { @@ -5088,7 +5227,7 @@ var _myriadpro_factors = __w_pdfjs_require__(16);
var _segoeui_factors = __w_pdfjs_require__(17);
-var _core_utils = __w_pdfjs_require__(8); +var _core_utils = __w_pdfjs_require__(6);
var _fonts_utils = __w_pdfjs_require__(18);
@@ -5285,7 +5424,7 @@ function getXfaFontDict(name) { dict.set("CIDToGIDMap", _primitives.Name.get("Identity")); dict.set("W", widths); dict.set("FirstChar", widths[0]); - dict.set("LastChar", widths[widths.length - 2] + widths[widths.length - 1].length - 1); + dict.set("LastChar", widths.at(-2) + widths.at(-1).length - 1); const descriptor = new _primitives.Dict(null); dict.set("FontDescriptor", descriptor); const systemInfo = new _primitives.Dict(null); @@ -5716,7 +5855,7 @@ Object.defineProperty(exports, "__esModule", ({ })); exports.getGlyphsUnicode = exports.getDingbatsGlyphsUnicode = void 0;
-var _core_utils = __w_pdfjs_require__(8); +var _core_utils = __w_pdfjs_require__(6);
const getGlyphsUnicode = (0, _core_utils.getArrayLookupTableFactory)(function () { return ["A", 0x0041, "AE", 0x00c6, "AEacute", 0x01fc, "AEmacron", 0x01e2, "AEsmall", 0xf7e6, "Aacute", 0x00c1, "Aacutesmall", 0xf7e1, "Abreve", 0x0102, "Abreveacute", 0x1eae, "Abrevecyrillic", 0x04d0, "Abrevedotbelow", 0x1eb6, "Abrevegrave", 0x1eb0, "Abrevehookabove", 0x1eb2, "Abrevetilde", 0x1eb4, "Acaron", 0x01cd, "Acircle", 0x24b6, "Acircumflex", 0x00c2, "Acircumflexacute", 0x1ea4, "Acircumflexdotbelow", 0x1eac, "Acircumflexgrave", 0x1ea6, "Acircumflexhookabove", 0x1ea8, "Acircumfle [...] @@ -5744,7 +5883,7 @@ exports.getUnicodeRangeFor = getUnicodeRangeFor; exports.mapSpecialUnicodeValues = mapSpecialUnicodeValues; exports.reverseIfRtl = reverseIfRtl;
-var _core_utils = __w_pdfjs_require__(8); +var _core_utils = __w_pdfjs_require__(6);
const getSpecialPUASymbols = (0, _core_utils.getLookupTableFactory)(function (t) { t[63721] = 0x00a9; @@ -6278,34 +6417,32 @@ exports.getQuadPoints = getQuadPoints;
var _util = __w_pdfjs_require__(2);
-var _core_utils = __w_pdfjs_require__(8); +var _core_utils = __w_pdfjs_require__(6);
var _default_appearance = __w_pdfjs_require__(23);
var _primitives = __w_pdfjs_require__(5);
-var _base_stream = __w_pdfjs_require__(9); +var _writer = __w_pdfjs_require__(65); + +var _base_stream = __w_pdfjs_require__(7);
var _bidi = __w_pdfjs_require__(60);
-var _catalog = __w_pdfjs_require__(65); +var _catalog = __w_pdfjs_require__(69);
var _colorspace = __w_pdfjs_require__(24);
-var _file_spec = __w_pdfjs_require__(68); +var _file_spec = __w_pdfjs_require__(72);
-var _object_loader = __w_pdfjs_require__(72); +var _object_loader = __w_pdfjs_require__(75);
var _operator_list = __w_pdfjs_require__(62);
var _stream = __w_pdfjs_require__(10);
-var _writer = __w_pdfjs_require__(73); - var _factory = __w_pdfjs_require__(76);
-const LINE_FACTOR = 1.35; - class AnnotationFactory { static create(xref, ref, pdfManager, idFactory, collectFields) { return Promise.all([pdfManager.ensureCatalog("acroForm"), pdfManager.ensureCatalog("baseUrl"), pdfManager.ensureDoc("xfaDatasets"), collectFields ? this._getPageIndex(xref, ref, pdfManager) : -1]).then(([acroForm, baseUrl, xfaDatasets, pageIndex]) => pdfManager.ensure(this, "_create", [xref, ref, pdfManager, idFactory, acroForm, xfaDatasets, collectFields, pageIndex])); @@ -6445,6 +6582,74 @@ class AnnotationFactory { } }
+ static async saveNewAnnotations(evaluator, task, annotations) { + const xref = evaluator.xref; + let baseFontRef; + const dependencies = []; + const promises = []; + + for (const annotation of annotations) { + switch (annotation.annotationType) { + case _util.AnnotationEditorType.FREETEXT: + if (!baseFontRef) { + const baseFont = new _primitives.Dict(xref); + baseFont.set("BaseFont", _primitives.Name.get("Helvetica")); + baseFont.set("Type", _primitives.Name.get("Font")); + baseFont.set("Subtype", _primitives.Name.get("Type1")); + baseFont.set("Encoding", _primitives.Name.get("WinAnsiEncoding")); + const buffer = []; + baseFontRef = xref.getNewRef(); + (0, _writer.writeObject)(baseFontRef, baseFont, buffer, null); + dependencies.push({ + ref: baseFontRef, + data: buffer.join("") + }); + } + + promises.push(FreeTextAnnotation.createNewAnnotation(xref, annotation, dependencies, { + evaluator, + task, + baseFontRef + })); + break; + + case _util.AnnotationEditorType.INK: + promises.push(InkAnnotation.createNewAnnotation(xref, annotation, dependencies)); + } + } + + return { + annotations: await Promise.all(promises), + dependencies + }; + } + + static async printNewAnnotations(evaluator, task, annotations) { + if (!annotations) { + return null; + } + + const xref = evaluator.xref; + const promises = []; + + for (const annotation of annotations) { + switch (annotation.annotationType) { + case _util.AnnotationEditorType.FREETEXT: + promises.push(FreeTextAnnotation.createNewPrintAnnotation(xref, annotation, { + evaluator, + task + })); + break; + + case _util.AnnotationEditorType.INK: + promises.push(InkAnnotation.createNewPrintAnnotation(xref, annotation)); + break; + } + } + + return Promise.all(promises); + } + }
exports.AnnotationFactory = AnnotationFactory; @@ -6552,7 +6757,10 @@ class Annotation { this.setColor(dict.getArray("C")); this.setBorderStyle(dict); this.setAppearance(dict); - this.setBorderAndBackgroundColors(dict.get("MK")); + this.setOptionalContent(dict); + const MK = dict.get("MK"); + this.setBorderAndBackgroundColors(MK); + this.setRotation(MK); this._streams = [];
if (this.appearance) { @@ -6565,6 +6773,7 @@ class Annotation { color: this.color, backgroundColor: this.backgroundColor, borderColor: this.borderColor, + rotation: this.rotation, contentsObj: this._contents, hasAppearance: !!this.appearance, id: params.id, @@ -6696,6 +6905,57 @@ class Annotation { this.color = getRgbColor(color); }
+ setLineEndings(lineEndings) { + this.lineEndings = ["None", "None"]; + + if (Array.isArray(lineEndings) && lineEndings.length === 2) { + for (let i = 0; i < 2; i++) { + const obj = lineEndings[i]; + + if (obj instanceof _primitives.Name) { + switch (obj.name) { + case "None": + continue; + + case "Square": + case "Circle": + case "Diamond": + case "OpenArrow": + case "ClosedArrow": + case "Butt": + case "ROpenArrow": + case "RClosedArrow": + case "Slash": + this.lineEndings[i] = obj.name; + continue; + } + } + + (0, _util.warn)(`Ignoring invalid lineEnding: ${obj}`); + } + } + } + + setRotation(mk) { + this.rotation = 0; + + if (mk instanceof _primitives.Dict) { + let angle = mk.get("R") || 0; + + if (Number.isInteger(angle) && angle !== 0) { + angle %= 360; + + if (angle < 0) { + angle += 360; + } + + if (angle % 90 === 0) { + this.rotation = angle; + } + } + } + } + setBorderAndBackgroundColors(mk) { if (mk instanceof _primitives.Dict) { this.borderColor = getRgbColor(mk.getArray("BC"), null); @@ -6766,6 +7026,17 @@ class Annotation { this.appearance = normalAppearanceState.get(as.name); }
+ setOptionalContent(dict) { + this.oc = null; + const oc = dict.get("OC"); + + if (oc instanceof _primitives.Name) { + (0, _util.warn)("setOptionalContent: Support for /Name-entry is not implemented."); + } else if (oc instanceof _primitives.Dict) { + this.oc = oc; + } + } + loadResources(keys, appearance) { return appearance.dict.getAsync("Resources").then(resources => { if (!resources) { @@ -6779,14 +7050,14 @@ class Annotation { }); }
- getOperatorList(evaluator, task, intent, renderForms, annotationStorage) { + async getOperatorList(evaluator, task, intent, renderForms, annotationStorage) { const data = this.data; let appearance = this.appearance; - const isUsingOwnCanvas = data.hasOwnCanvas && intent & _util.RenderingIntentFlag.DISPLAY; + const isUsingOwnCanvas = this.data.hasOwnCanvas && intent & _util.RenderingIntentFlag.DISPLAY;
if (!appearance) { if (!isUsingOwnCanvas) { - return Promise.resolve(new _operator_list.OperatorList()); + return new _operator_list.OperatorList(); }
appearance = new _stream.StringStream(""); @@ -6794,25 +7065,37 @@ class Annotation { }
const appearanceDict = appearance.dict; - const resourcesPromise = this.loadResources(["ExtGState", "ColorSpace", "Pattern", "Shading", "XObject", "Font"], appearance); + const resources = await this.loadResources(["ExtGState", "ColorSpace", "Pattern", "Shading", "XObject", "Font"], appearance); const bbox = appearanceDict.getArray("BBox") || [0, 0, 1, 1]; const matrix = appearanceDict.getArray("Matrix") || [1, 0, 0, 1, 0, 0]; const transform = getTransformMatrix(data.rect, bbox, matrix); - return resourcesPromise.then(resources => { - const opList = new _operator_list.OperatorList(); - opList.addOp(_util.OPS.beginAnnotation, [data.id, data.rect, transform, matrix, isUsingOwnCanvas]); - return evaluator.getOperatorList({ - stream: appearance, - task, - resources, - operatorList: opList, - fallbackFontDict: this._fallbackFontDict - }).then(() => { - opList.addOp(_util.OPS.endAnnotation, []); - this.reset(); - return opList; - }); + const opList = new _operator_list.OperatorList(); + let optionalContent; + + if (this.oc) { + optionalContent = await evaluator.parseMarkedContentProps(this.oc, null); + } + + if (optionalContent !== undefined) { + opList.addOp(_util.OPS.beginMarkedContentProps, ["OC", optionalContent]); + } + + opList.addOp(_util.OPS.beginAnnotation, [data.id, data.rect, transform, matrix, isUsingOwnCanvas]); + await evaluator.getOperatorList({ + stream: appearance, + task, + resources, + operatorList: opList, + fallbackFontDict: this._fallbackFontDict }); + opList.addOp(_util.OPS.endAnnotation, []); + + if (optionalContent !== undefined) { + opList.addOp(_util.OPS.endMarkedContent, []); + } + + this.reset(); + return opList; }
async save(evaluator, task, annotationStorage) { @@ -6829,7 +7112,8 @@ class Annotation { fillColor: this.data.backgroundColor, type: "", kidIds: this.data.kidIds, - page: this.data.pageIndex + page: this.data.pageIndex, + rotation: this.rotation }; }
@@ -7146,6 +7430,40 @@ class MarkupAnnotation extends Annotation { this._streams.push(this.appearance, appearanceStream); }
+ static async createNewAnnotation(xref, annotation, dependencies, params) { + const annotationRef = xref.getNewRef(); + const apRef = xref.getNewRef(); + const annotationDict = this.createNewDict(annotation, xref, { + apRef + }); + const ap = await this.createNewAppearanceStream(annotation, xref, params); + const buffer = []; + let transform = xref.encrypt ? xref.encrypt.createCipherTransform(apRef.num, apRef.gen) : null; + (0, _writer.writeObject)(apRef, ap, buffer, transform); + dependencies.push({ + ref: apRef, + data: buffer.join("") + }); + buffer.length = 0; + transform = xref.encrypt ? xref.encrypt.createCipherTransform(annotationRef.num, annotationRef.gen) : null; + (0, _writer.writeObject)(annotationRef, annotationDict, buffer, transform); + return { + ref: annotationRef, + data: buffer.join("") + }; + } + + static async createNewPrintAnnotation(xref, annotation, params) { + const ap = await this.createNewAppearanceStream(annotation, xref, params); + const annotationDict = this.createNewDict(annotation, xref, { + ap + }); + return new this.prototype.constructor({ + dict: annotationDict, + xref + }); + } + }
exports.MarkupAnnotation = MarkupAnnotation; @@ -7230,6 +7548,7 @@ class WidgetAnnotation extends Annotation { }
data.readOnly = this.hasFieldFlag(_util.AnnotationFieldFlag.READONLY); + data.required = this.hasFieldFlag(_util.AnnotationFieldFlag.REQUIRED); data.hidden = this._hasFlag(data.annotationFlags, _util.AnnotationFlag.HIDDEN); }
@@ -7249,59 +7568,158 @@ class WidgetAnnotation extends Annotation { return !!(this.data.fieldFlags & flag); }
- getOperatorList(evaluator, task, intent, renderForms, annotationStorage) { + static _getRotationMatrix(rotation, width, height) { + switch (rotation) { + case 90: + return [0, 1, -1, 0, width, 0]; + + case 180: + return [-1, 0, 0, -1, width, height]; + + case 270: + return [0, -1, 1, 0, 0, height]; + + default: + throw new Error("Invalid rotation"); + } + } + + getRotationMatrix(annotationStorage) { + const storageEntry = annotationStorage ? annotationStorage.get(this.data.id) : undefined; + let rotation = storageEntry && storageEntry.rotation; + + if (rotation === undefined) { + rotation = this.rotation; + } + + if (rotation === 0) { + return _util.IDENTITY_MATRIX; + } + + const width = this.data.rect[2] - this.data.rect[0]; + const height = this.data.rect[3] - this.data.rect[1]; + return WidgetAnnotation._getRotationMatrix(rotation, width, height); + } + + getBorderAndBackgroundAppearances(annotationStorage) { + const storageEntry = annotationStorage ? annotationStorage.get(this.data.id) : undefined; + let rotation = storageEntry && storageEntry.rotation; + + if (rotation === undefined) { + rotation = this.rotation; + } + + if (!this.backgroundColor && !this.borderColor) { + return ""; + } + + const width = this.data.rect[2] - this.data.rect[0]; + const height = this.data.rect[3] - this.data.rect[1]; + const rect = rotation === 0 || rotation === 180 ? `0 0 ${width} ${height} re` : `0 0 ${height} ${width} re`; + let str = ""; + + if (this.backgroundColor) { + str = `${(0, _default_appearance.getPdfColor)(this.backgroundColor, true)} ${rect} f `; + } + + if (this.borderColor) { + const borderWidth = this.borderStyle.width || 1; + str += `${borderWidth} w ${(0, _default_appearance.getPdfColor)(this.borderColor, false)} ${rect} S `; + } + + return str; + } + + async getOperatorList(evaluator, task, intent, renderForms, annotationStorage) { if (renderForms && !(this instanceof SignatureWidgetAnnotation)) { - return Promise.resolve(new _operator_list.OperatorList()); + return new _operator_list.OperatorList(); }
if (!this._hasText) { return super.getOperatorList(evaluator, task, intent, renderForms, annotationStorage); }
- return this._getAppearance(evaluator, task, annotationStorage).then(content => { - if (this.appearance && content === null) { - return super.getOperatorList(evaluator, task, intent, renderForms, annotationStorage); - } + const content = await this._getAppearance(evaluator, task, annotationStorage);
- const operatorList = new _operator_list.OperatorList(); + if (this.appearance && content === null) { + return super.getOperatorList(evaluator, task, intent, renderForms, annotationStorage); + }
- if (!this._defaultAppearance || content === null) { - return operatorList; - } + const operatorList = new _operator_list.OperatorList();
- const matrix = [1, 0, 0, 1, 0, 0]; - const bbox = [0, 0, this.data.rect[2] - this.data.rect[0], this.data.rect[3] - this.data.rect[1]]; - const transform = getTransformMatrix(this.data.rect, bbox, matrix); - operatorList.addOp(_util.OPS.beginAnnotation, [this.data.id, this.data.rect, transform, matrix]); - const stream = new _stream.StringStream(content); - return evaluator.getOperatorList({ - stream, - task, - resources: this._fieldResources.mergedResources, - operatorList - }).then(function () { - operatorList.addOp(_util.OPS.endAnnotation, []); - return operatorList; - }); + if (!this._defaultAppearance || content === null) { + return operatorList; + } + + const matrix = [1, 0, 0, 1, 0, 0]; + const bbox = [0, 0, this.data.rect[2] - this.data.rect[0], this.data.rect[3] - this.data.rect[1]]; + const transform = getTransformMatrix(this.data.rect, bbox, matrix); + let optionalContent; + + if (this.oc) { + optionalContent = await evaluator.parseMarkedContentProps(this.oc, null); + } + + if (optionalContent !== undefined) { + operatorList.addOp(_util.OPS.beginMarkedContentProps, ["OC", optionalContent]); + } + + operatorList.addOp(_util.OPS.beginAnnotation, [this.data.id, this.data.rect, transform, this.getRotationMatrix(annotationStorage)]); + const stream = new _stream.StringStream(content); + await evaluator.getOperatorList({ + stream, + task, + resources: this._fieldResources.mergedResources, + operatorList }); + operatorList.addOp(_util.OPS.endAnnotation, []); + + if (optionalContent !== undefined) { + operatorList.addOp(_util.OPS.endMarkedContent, []); + } + + return operatorList; + } + + _getMKDict(rotation) { + const mk = new _primitives.Dict(null); + + if (rotation) { + mk.set("R", rotation); + } + + if (this.borderColor) { + mk.set("BC", Array.from(this.borderColor).map(c => c / 255)); + } + + if (this.backgroundColor) { + mk.set("BG", Array.from(this.backgroundColor).map(c => c / 255)); + } + + return mk.size > 0 ? mk : null; }
async save(evaluator, task, annotationStorage) { const storageEntry = annotationStorage ? annotationStorage.get(this.data.id) : undefined; let value = storageEntry && storageEntry.value; + let rotation = storageEntry && storageEntry.rotation;
if (value === this.data.fieldValue || value === undefined) { - if (!this._hasValueFromXFA) { + if (!this._hasValueFromXFA && rotation === undefined) { return null; }
value = value || this.data.fieldValue; }
- if (!this._hasValueFromXFA && Array.isArray(value) && Array.isArray(this.data.fieldValue) && value.length === this.data.fieldValue.length && value.every((x, i) => x === this.data.fieldValue[i])) { + if (rotation === undefined && !this._hasValueFromXFA && Array.isArray(value) && Array.isArray(this.data.fieldValue) && value.length === this.data.fieldValue.length && value.every((x, i) => x === this.data.fieldValue[i])) { return null; }
+ if (rotation === undefined) { + rotation = this.rotation; + } + let appearance = await this._getAppearance(evaluator, task, annotationStorage);
if (appearance === null) { @@ -7340,11 +7758,24 @@ class WidgetAnnotation extends Annotation { dict.set("V", Array.isArray(value) ? value.map(encoder) : encoder(value)); dict.set("AP", AP); dict.set("M", `D:${(0, _util.getModificationDate)()}`); + + const maybeMK = this._getMKDict(rotation); + + if (maybeMK) { + dict.set("MK", maybeMK); + } + const appearanceDict = new _primitives.Dict(xref); appearanceDict.set("Length", appearance.length); appearanceDict.set("Subtype", _primitives.Name.get("Form")); appearanceDict.set("Resources", this._getSaveFieldResources(xref)); appearanceDict.set("BBox", bbox); + const rotationMatrix = this.getRotationMatrix(annotationStorage); + + if (rotationMatrix !== _util.IDENTITY_MATRIX) { + appearanceDict.set("Matrix", rotationMatrix); + } + const bufferOriginal = [`${this.ref.num} ${this.ref.gen} obj\n`]; (0, _writer.writeDict)(dict, bufferOriginal, originalTransform); bufferOriginal.push("\nendobj\n"); @@ -7370,13 +7801,20 @@ class WidgetAnnotation extends Annotation { }
const storageEntry = annotationStorage ? annotationStorage.get(this.data.id) : undefined; - let value = storageEntry && (storageEntry.formattedValue || storageEntry.value); + let value, rotation;
- if (value === undefined) { + if (storageEntry) { + value = storageEntry.formattedValue || storageEntry.value; + rotation = storageEntry.rotation; + } + + if (rotation === undefined && value === undefined) { if (!this._hasValueFromXFA || this.appearance) { return null; } + }
+ if (value === undefined) { value = this.data.fieldValue;
if (!value) { @@ -7384,6 +7822,10 @@ class WidgetAnnotation extends Annotation { } }
+ if (Array.isArray(value) && value.length === 1) { + value = value[0]; + } + (0, _util.assert)(typeof value === "string", "Expected `value` to be a string."); value = value.trim();
@@ -7391,6 +7833,10 @@ class WidgetAnnotation extends Annotation { return ""; }
+ if (rotation === undefined) { + rotation = this.rotation; + } + let lineCount = -1;
if (this.data.multiLine) { @@ -7399,14 +7845,18 @@ class WidgetAnnotation extends Annotation {
const defaultPadding = 2; const hPadding = defaultPadding; - const totalHeight = this.data.rect[3] - this.data.rect[1]; - const totalWidth = this.data.rect[2] - this.data.rect[0]; + let totalHeight = this.data.rect[3] - this.data.rect[1]; + let totalWidth = this.data.rect[2] - this.data.rect[0]; + + if (rotation === 90 || rotation === 270) { + [totalWidth, totalHeight] = [totalHeight, totalWidth]; + }
if (!this._defaultAppearance) { this.data.defaultAppearanceData = (0, _default_appearance.parseDefaultAppearance)(this._defaultAppearance = "/Helvetica 0 Tf 0 g"); }
- const font = await this._getFontData(evaluator, task); + const font = await WidgetAnnotation._getFontData(evaluator, task, this.data.defaultAppearanceData, this._fieldResources.mergedResources);
const [defaultAppearance, fontSize] = this._computeFontSize(totalHeight - defaultPadding, totalWidth - 2 * hPadding, value, font, lineCount);
@@ -7416,29 +7866,32 @@ class WidgetAnnotation extends Annotation { descent = 0; }
- const vPadding = defaultPadding + Math.abs(descent) * fontSize; + const defaultVPadding = Math.min(Math.floor((totalHeight - fontSize) / 2), defaultPadding); + const vPadding = defaultVPadding + Math.abs(descent) * fontSize; const alignment = this.data.textAlignment;
if (this.data.multiLine) { - return this._getMultilineAppearance(defaultAppearance, value, font, fontSize, totalWidth, totalHeight, alignment, hPadding, vPadding); + return this._getMultilineAppearance(defaultAppearance, value, font, fontSize, totalWidth, totalHeight, alignment, hPadding, vPadding, annotationStorage); }
const encodedString = font.encodeString(value).join("");
if (this.data.comb) { - return this._getCombAppearance(defaultAppearance, font, encodedString, totalWidth, hPadding, vPadding); + return this._getCombAppearance(defaultAppearance, font, encodedString, totalWidth, hPadding, vPadding, annotationStorage); }
+ const colors = this.getBorderAndBackgroundAppearances(annotationStorage); + if (alignment === 0 || alignment > 2) { - return "/Tx BMC q BT " + defaultAppearance + ` 1 0 0 1 ${hPadding} ${vPadding} Tm (${(0, _util.escapeString)(encodedString)}) Tj` + " ET Q EMC"; + return `/Tx BMC q ${colors}BT ` + defaultAppearance + ` 1 0 0 1 ${hPadding} ${vPadding} Tm (${(0, _util.escapeString)(encodedString)}) Tj` + " ET Q EMC"; }
const renderedText = this._renderText(encodedString, font, fontSize, totalWidth, alignment, hPadding, vPadding);
- return "/Tx BMC q BT " + defaultAppearance + ` 1 0 0 1 0 0 Tm ${renderedText}` + " ET Q EMC"; + return `/Tx BMC q ${colors}BT ` + defaultAppearance + ` 1 0 0 1 0 0 Tm ${renderedText}` + " ET Q EMC"; }
- async _getFontData(evaluator, task) { + static async _getFontData(evaluator, task, appearanceData, resources) { const operatorList = new _operator_list.OperatorList(); const initialState = { font: null, @@ -7451,8 +7904,8 @@ class WidgetAnnotation extends Annotation { const { fontName, fontSize - } = this.data.defaultAppearanceData; - await evaluator.handleSetFont(this._fieldResources.mergedResources, [fontName && _primitives.Name.get(fontName), fontSize], null, operatorList, task, initialState, null); + } = appearanceData; + await evaluator.handleSetFont(resources, [fontName && _primitives.Name.get(fontName), fontSize], null, operatorList, task, initialState, null); return initialState.font; }
@@ -7471,7 +7924,7 @@ class WidgetAnnotation extends Annotation { if (lineCount === -1) { const textWidth = this._getTextWidth(text, font);
- fontSize = roundWithTwoDigits(Math.min(height / LINE_FACTOR, width / textWidth)); + fontSize = roundWithTwoDigits(Math.min(height / _util.LINE_FACTOR, width / textWidth)); } else { const lines = text.split(/\r\n?|\n/); const cachedLines = []; @@ -7504,13 +7957,13 @@ class WidgetAnnotation extends Annotation { };
fontSize = 12; - let lineHeight = fontSize * LINE_FACTOR; + let lineHeight = fontSize * _util.LINE_FACTOR; let numberOfLines = Math.round(height / lineHeight); numberOfLines = Math.max(numberOfLines, lineCount);
while (true) { lineHeight = height / numberOfLines; - fontSize = roundWithTwoDigits(lineHeight / LINE_FACTOR); + fontSize = roundWithTwoDigits(lineHeight / _util.LINE_FACTOR);
if (isTooBig(fontSize)) { numberOfLines++; @@ -7548,8 +8001,8 @@ class WidgetAnnotation extends Annotation { shift = hPadding; }
- shift = shift.toFixed(2); - vPadding = vPadding.toFixed(2); + shift = (0, _core_utils.numberToString)(shift); + vPadding = (0, _core_utils.numberToString)(vPadding); return `${shift} ${vPadding} Td (${(0, _util.escapeString)(text)}) Tj`; }
@@ -7632,10 +8085,11 @@ class TextWidgetAnnotation extends WidgetAnnotation { this.data.maxLen = maximumLength; this.data.multiLine = this.hasFieldFlag(_util.AnnotationFieldFlag.MULTILINE); this.data.comb = this.hasFieldFlag(_util.AnnotationFieldFlag.COMB) && !this.hasFieldFlag(_util.AnnotationFieldFlag.MULTILINE) && !this.hasFieldFlag(_util.AnnotationFieldFlag.PASSWORD) && !this.hasFieldFlag(_util.AnnotationFieldFlag.FILESELECT) && this.data.maxLen !== null; + this.data.doNotScroll = this.hasFieldFlag(_util.AnnotationFieldFlag.DONOTSCROLL); }
- _getCombAppearance(defaultAppearance, font, text, width, hPadding, vPadding) { - const combWidth = (width / this.data.maxLen).toFixed(2); + _getCombAppearance(defaultAppearance, font, text, width, hPadding, vPadding, annotationStorage) { + const combWidth = (0, _core_utils.numberToString)(width / this.data.maxLen); const buf = []; const positions = font.getCharPositions(text);
@@ -7643,11 +8097,12 @@ class TextWidgetAnnotation extends WidgetAnnotation { buf.push(`(${(0, _util.escapeString)(text.substring(start, end))}) Tj`); }
+ const colors = this.getBorderAndBackgroundAppearances(annotationStorage); const renderedComb = buf.join(` ${combWidth} 0 Td `); - return "/Tx BMC q BT " + defaultAppearance + ` 1 0 0 1 ${hPadding} ${vPadding} Tm ${renderedComb}` + " ET Q EMC"; + return `/Tx BMC q ${colors}BT ` + defaultAppearance + ` 1 0 0 1 ${hPadding} ${vPadding} Tm ${renderedComb}` + " ET Q EMC"; }
- _getMultilineAppearance(defaultAppearance, text, font, fontSize, width, height, alignment, hPadding, vPadding) { + _getMultilineAppearance(defaultAppearance, text, font, fontSize, width, height, alignment, hPadding, vPadding, annotationStorage) { const lines = text.split(/\r\n?|\n/); const buf = []; const totalWidth = width - 2 * hPadding; @@ -7662,7 +8117,8 @@ class TextWidgetAnnotation extends WidgetAnnotation { }
const renderedText = buf.join("\n"); - return "/Tx BMC q BT " + defaultAppearance + ` 1 0 0 1 0 ${height} Tm ${renderedText}` + " ET Q EMC"; + const colors = this.getBorderAndBackgroundAppearances(annotationStorage); + return `/Tx BMC q ${colors}BT ` + defaultAppearance + ` 1 0 0 1 0 ${height} Tm ${renderedText}` + " ET Q EMC"; }
_splitLine(line, font, fontSize, width, cache = {}) { @@ -7743,6 +8199,7 @@ class TextWidgetAnnotation extends WidgetAnnotation { page: this.data.pageIndex, strokeColor: this.data.borderColor, fillColor: this.data.backgroundColor, + rotation: this.rotation, type: "text" }; } @@ -7778,17 +8235,19 @@ class ButtonWidgetAnnotation extends WidgetAnnotation { }
let value = null; + let rotation = null;
if (annotationStorage) { const storageEntry = annotationStorage.get(this.data.id); value = storageEntry ? storageEntry.value : null; + rotation = storageEntry ? storageEntry.rotation : null; }
- if (value === null) { - if (this.appearance) { - return super.getOperatorList(evaluator, task, intent, renderForms, annotationStorage); - } + if (value === null && this.appearance) { + return super.getOperatorList(evaluator, task, intent, renderForms, annotationStorage); + }
+ if (value === null || value === undefined) { if (this.data.checkBox) { value = this.data.fieldValue === this.data.exportValue; } else { @@ -7800,9 +8259,17 @@ class ButtonWidgetAnnotation extends WidgetAnnotation {
if (appearance) { const savedAppearance = this.appearance; + + const savedMatrix = appearance.dict.getArray("Matrix") || _util.IDENTITY_MATRIX; + + if (rotation) { + appearance.dict.set("Matrix", this.getRotationMatrix(annotationStorage)); + } + this.appearance = appearance; const operatorList = super.getOperatorList(evaluator, task, intent, renderForms, annotationStorage); this.appearance = savedAppearance; + appearance.dict.set("Matrix", savedMatrix); return operatorList; }
@@ -7827,16 +8294,19 @@ class ButtonWidgetAnnotation extends WidgetAnnotation { }
const storageEntry = annotationStorage.get(this.data.id); - const value = storageEntry && storageEntry.value; + let rotation = storageEntry && storageEntry.rotation; + let value = storageEntry && storageEntry.value;
- if (value === undefined) { - return null; - } + if (rotation === undefined) { + if (value === undefined) { + return null; + }
- const defaultValue = this.data.fieldValue === this.data.exportValue; + const defaultValue = this.data.fieldValue === this.data.exportValue;
- if (defaultValue === value) { - return null; + if (defaultValue === value) { + return null; + } }
const dict = evaluator.xref.fetchIfRef(this.ref); @@ -7845,6 +8315,14 @@ class ButtonWidgetAnnotation extends WidgetAnnotation { return null; }
+ if (rotation === undefined) { + rotation = this.rotation; + } + + if (value === undefined) { + value = this.data.fieldValue === this.data.exportValue; + } + const xfa = { path: (0, _util.stringToPDFString)(dict.get("T") || ""), value: value ? this.data.exportValue : "" @@ -7855,6 +8333,13 @@ class ButtonWidgetAnnotation extends WidgetAnnotation { dict.set("V", name); dict.set("AS", name); dict.set("M", `D:${(0, _util.getModificationDate)()}`); + + const maybeMK = this._getMKDict(rotation); + + if (maybeMK) { + dict.set("MK", maybeMK); + } + const encrypt = evaluator.xref.encrypt; let originalTransform = null;
@@ -7878,16 +8363,19 @@ class ButtonWidgetAnnotation extends WidgetAnnotation { }
const storageEntry = annotationStorage.get(this.data.id); - const value = storageEntry && storageEntry.value; + let rotation = storageEntry && storageEntry.rotation; + let value = storageEntry && storageEntry.value;
- if (value === undefined) { - return null; - } + if (rotation === undefined) { + if (value === undefined) { + return null; + }
- const defaultValue = this.data.fieldValue === this.data.buttonValue; + const defaultValue = this.data.fieldValue === this.data.buttonValue;
- if (defaultValue === value) { - return null; + if (defaultValue === value) { + return null; + } }
const dict = evaluator.xref.fetchIfRef(this.ref); @@ -7896,6 +8384,14 @@ class ButtonWidgetAnnotation extends WidgetAnnotation { return null; }
+ if (value === undefined) { + value = this.data.fieldValue === this.data.buttonValue; + } + + if (rotation === undefined) { + rotation = this.rotation; + } + const xfa = { path: (0, _util.stringToPDFString)(dict.get("T") || ""), value: value ? this.data.buttonValue : "" @@ -7926,6 +8422,13 @@ class ButtonWidgetAnnotation extends WidgetAnnotation {
dict.set("AS", name); dict.set("M", `D:${(0, _util.getModificationDate)()}`); + + const maybeMK = this._getMKDict(rotation); + + if (maybeMK) { + dict.set("MK", maybeMK); + } + let originalTransform = null;
if (encrypt) { @@ -7976,8 +8479,8 @@ class ButtonWidgetAnnotation extends WidgetAnnotation { (0, _util.unreachable)(`_getDefaultCheckedAppearance - unsupported type: ${type}`); }
- const xShift = (width - metrics.width) / 2; - const yShift = (height - metrics.height) / 2; + const xShift = (0, _core_utils.numberToString)((width - metrics.width) / 2); + const yShift = (0, _core_utils.numberToString)((height - metrics.height) / 2); const appearance = `q BT /PdfJsZaDb ${fontSize} Tf 0 g ${xShift} ${yShift} Td (${char}) Tj ET Q`; const appearanceStreamDict = new _primitives.Dict(params.xref); appearanceStreamDict.set("FormType", 1); @@ -8145,6 +8648,7 @@ class ButtonWidgetAnnotation extends WidgetAnnotation { page: this.data.pageIndex, strokeColor: this.data.borderColor, fillColor: this.data.backgroundColor, + rotation: this.rotation, type }; } @@ -8211,6 +8715,7 @@ class ChoiceWidgetAnnotation extends WidgetAnnotation { page: this.data.pageIndex, strokeColor: this.data.borderColor, fillColor: this.data.backgroundColor, + rotation: this.rotation, type }; } @@ -8225,20 +8730,33 @@ class ChoiceWidgetAnnotation extends WidgetAnnotation { }
const storageEntry = annotationStorage.get(this.data.id); - let exportedValue = storageEntry && storageEntry.value;
- if (exportedValue === undefined) { + if (!storageEntry) { + return null; + } + + const rotation = storageEntry.rotation; + let exportedValue = storageEntry.value; + + if (rotation === undefined && exportedValue === undefined) { return null; }
- if (!Array.isArray(exportedValue)) { + if (exportedValue === undefined) { + exportedValue = this.data.fieldValue; + } else if (!Array.isArray(exportedValue)) { exportedValue = [exportedValue]; }
const defaultPadding = 2; const hPadding = defaultPadding; - const totalHeight = this.data.rect[3] - this.data.rect[1]; - const totalWidth = this.data.rect[2] - this.data.rect[0]; + let totalHeight = this.data.rect[3] - this.data.rect[1]; + let totalWidth = this.data.rect[2] - this.data.rect[0]; + + if (rotation === 90 || rotation === 270) { + [totalWidth, totalHeight] = [totalHeight, totalWidth]; + } + const lineCount = this.data.options.length; const valueIndices = [];
@@ -8256,7 +8774,7 @@ class ChoiceWidgetAnnotation extends WidgetAnnotation { this.data.defaultAppearanceData = (0, _default_appearance.parseDefaultAppearance)(this._defaultAppearance = "/Helvetica 0 Tf 0 g"); }
- const font = await this._getFontData(evaluator, task); + const font = await WidgetAnnotation._getFontData(evaluator, task, this.data.defaultAppearanceData, this._fieldResources.mergedResources); let defaultAppearance; let { fontSize @@ -8270,7 +8788,7 @@ class ChoiceWidgetAnnotation extends WidgetAnnotation { for (const { displayValue } of this.data.options) { - const width = this._getTextWidth(displayValue); + const width = this._getTextWidth(displayValue, font);
if (width > lineWidth) { lineWidth = width; @@ -8283,7 +8801,7 @@ class ChoiceWidgetAnnotation extends WidgetAnnotation { defaultAppearance = this._defaultAppearance; }
- const lineHeight = fontSize * LINE_FACTOR; + const lineHeight = fontSize * _util.LINE_FACTOR; const vPadding = (lineHeight - fontSize) / 2; const numberOfVisibleLines = Math.floor(totalHeight / lineHeight); let firstIndex; @@ -8379,6 +8897,8 @@ class LinkAnnotation extends Annotation { this.data.quadPoints = quadPoints; }
+ this.data.borderColor = this.data.borderColor || this.data.color; + _catalog.Catalog.parseDestDictionary({ destDict: params.dict, resultObj: this.data, @@ -8457,20 +8977,168 @@ class FreeTextAnnotation extends MarkupAnnotation { this.data.annotationType = _util.AnnotationType.FREETEXT; }
+ static createNewDict(annotation, xref, { + apRef, + ap + }) { + const { + color, + fontSize, + rect, + rotation, + user, + value + } = annotation; + const freetext = new _primitives.Dict(xref); + freetext.set("Type", _primitives.Name.get("Annot")); + freetext.set("Subtype", _primitives.Name.get("FreeText")); + freetext.set("CreationDate", `D:${(0, _util.getModificationDate)()}`); + freetext.set("Rect", rect); + const da = `/Helv ${fontSize} Tf ${(0, _default_appearance.getPdfColor)(color, true)}`; + freetext.set("DA", da); + freetext.set("Contents", value); + freetext.set("F", 4); + freetext.set("Border", [0, 0, 0]); + freetext.set("Rotate", rotation); + + if (user) { + freetext.set("T", (0, _util.stringToUTF8String)(user)); + } + + const n = new _primitives.Dict(xref); + freetext.set("AP", n); + + if (apRef) { + n.set("N", apRef); + } else { + n.set("N", ap); + } + + return freetext; + } + + static async createNewAppearanceStream(annotation, xref, params) { + const { + baseFontRef, + evaluator, + task + } = params; + const { + color, + fontSize, + rect, + rotation, + value + } = annotation; + const resources = new _primitives.Dict(xref); + const font = new _primitives.Dict(xref); + + if (baseFontRef) { + font.set("Helv", baseFontRef); + } else { + const baseFont = new _primitives.Dict(xref); + baseFont.set("BaseFont", _primitives.Name.get("Helvetica")); + baseFont.set("Type", _primitives.Name.get("Font")); + baseFont.set("Subtype", _primitives.Name.get("Type1")); + baseFont.set("Encoding", _primitives.Name.get("WinAnsiEncoding")); + font.set("Helv", baseFont); + } + + resources.set("Font", font); + const helv = await WidgetAnnotation._getFontData(evaluator, task, { + fontName: "Helvetica", + fontSize + }, resources); + const [x1, y1, x2, y2] = rect; + let w = x2 - x1; + let h = y2 - y1; + + if (rotation % 180 !== 0) { + [w, h] = [h, w]; + } + + const lines = value.split("\n"); + const scale = fontSize / 1000; + let totalWidth = -Infinity; + const encodedLines = []; + + for (let line of lines) { + line = helv.encodeString(line).join(""); + encodedLines.push(line); + let lineWidth = 0; + const glyphs = helv.charsToGlyphs(line); + + for (const glyph of glyphs) { + lineWidth += glyph.width * scale; + } + + totalWidth = Math.max(totalWidth, lineWidth); + } + + let hscale = 1; + + if (totalWidth > w) { + hscale = w / totalWidth; + } + + let vscale = 1; + const lineHeight = _util.LINE_FACTOR * fontSize; + const lineDescent = _util.LINE_DESCENT_FACTOR * fontSize; + const totalHeight = lineHeight * lines.length; + + if (totalHeight > h) { + vscale = h / totalHeight; + } + + const fscale = Math.min(hscale, vscale); + const newFontSize = fontSize * fscale; + const buffer = ["q", `0 0 ${(0, _core_utils.numberToString)(w)} ${(0, _core_utils.numberToString)(h)} re W n`, `BT`, `1 0 0 1 0 ${(0, _core_utils.numberToString)(h + lineDescent)} Tm 0 Tc ${(0, _default_appearance.getPdfColor)(color, true)}`, `/Helv ${(0, _core_utils.numberToString)(newFontSize)} Tf`]; + const vShift = (0, _core_utils.numberToString)(lineHeight); + + for (const line of encodedLines) { + buffer.push(`0 -${vShift} Td (${(0, _util.escapeString)(line)}) Tj`); + } + + buffer.push("ET", "Q"); + const appearance = buffer.join("\n"); + const appearanceStreamDict = new _primitives.Dict(xref); + appearanceStreamDict.set("FormType", 1); + appearanceStreamDict.set("Subtype", _primitives.Name.get("Form")); + appearanceStreamDict.set("Type", _primitives.Name.get("XObject")); + appearanceStreamDict.set("BBox", [0, 0, w, h]); + appearanceStreamDict.set("Length", appearance.length); + appearanceStreamDict.set("Resources", resources); + + if (rotation) { + const matrix = WidgetAnnotation._getRotationMatrix(rotation, w, h); + + appearanceStreamDict.set("Matrix", matrix); + } + + const ap = new _stream.StringStream(appearance); + ap.dict = appearanceStreamDict; + return ap; + } + }
class LineAnnotation extends MarkupAnnotation { constructor(parameters) { super(parameters); + const { + dict + } = parameters; this.data.annotationType = _util.AnnotationType.LINE; - const lineCoordinates = parameters.dict.getArray("L"); + const lineCoordinates = dict.getArray("L"); this.data.lineCoordinates = _util.Util.normalizeRect(lineCoordinates); + this.setLineEndings(dict.getArray("LE")); + this.data.lineEndings = this.lineEndings;
if (!this.appearance) { const strokeColor = this.color ? Array.from(this.color).map(c => c / 255) : [0, 0, 0]; - const strokeAlpha = parameters.dict.get("CA"); + const strokeAlpha = dict.get("CA"); let fillColor = null, - interiorColor = parameters.dict.getArray("IC"); + interiorColor = dict.getArray("IC");
if (interiorColor) { interiorColor = getRgbColor(interiorColor, null); @@ -8612,9 +9280,18 @@ class CircleAnnotation extends MarkupAnnotation { class PolylineAnnotation extends MarkupAnnotation { constructor(parameters) { super(parameters); + const { + dict + } = parameters; this.data.annotationType = _util.AnnotationType.POLYLINE; this.data.vertices = []; - const rawVertices = parameters.dict.getArray("Vertices"); + + if (!(this instanceof PolygonAnnotation)) { + this.setLineEndings(dict.getArray("LE")); + this.data.lineEndings = this.lineEndings; + } + + const rawVertices = dict.getArray("Vertices");
if (!Array.isArray(rawVertices)) { return; @@ -8629,7 +9306,7 @@ class PolylineAnnotation extends MarkupAnnotation {
if (!this.appearance) { const strokeColor = this.color ? Array.from(this.color).map(c => c / 255) : [0, 0, 0]; - const strokeAlpha = parameters.dict.get("CA"); + const strokeAlpha = dict.get("CA"); const borderWidth = this.borderStyle.width || 1, borderAdjust = 2 * borderWidth; const bbox = [Infinity, Infinity, -Infinity, -Infinity]; @@ -8746,6 +9423,89 @@ class InkAnnotation extends MarkupAnnotation { } }
+ static createNewDict(annotation, xref, { + apRef, + ap + }) { + const { + paths, + rect, + rotation + } = annotation; + const ink = new _primitives.Dict(xref); + ink.set("Type", _primitives.Name.get("Annot")); + ink.set("Subtype", _primitives.Name.get("Ink")); + ink.set("CreationDate", `D:${(0, _util.getModificationDate)()}`); + ink.set("Rect", rect); + ink.set("InkList", paths.map(p => p.points)); + ink.set("F", 4); + ink.set("Border", [0, 0, 0]); + ink.set("Rotate", rotation); + const n = new _primitives.Dict(xref); + ink.set("AP", n); + + if (apRef) { + n.set("N", apRef); + } else { + n.set("N", ap); + } + + return ink; + } + + static async createNewAppearanceStream(annotation, xref, params) { + const { + color, + rect, + rotation, + paths, + thickness + } = annotation; + const [x1, y1, x2, y2] = rect; + let w = x2 - x1; + let h = y2 - y1; + + if (rotation % 180 !== 0) { + [w, h] = [h, w]; + } + + const appearanceBuffer = [`${thickness} w 1 J 1 j`, `${(0, _default_appearance.getPdfColor)(color, false)}`]; + const buffer = []; + + for (const { + bezier + } of paths) { + buffer.length = 0; + buffer.push(`${(0, _core_utils.numberToString)(bezier[0])} ${(0, _core_utils.numberToString)(bezier[1])} m`); + + for (let i = 2, ii = bezier.length; i < ii; i += 6) { + const curve = bezier.slice(i, i + 6).map(_core_utils.numberToString).join(" "); + buffer.push(`${curve} c`); + } + + buffer.push("S"); + appearanceBuffer.push(buffer.join("\n")); + } + + const appearance = appearanceBuffer.join("\n"); + const appearanceStreamDict = new _primitives.Dict(xref); + appearanceStreamDict.set("FormType", 1); + appearanceStreamDict.set("Subtype", _primitives.Name.get("Form")); + appearanceStreamDict.set("Type", _primitives.Name.get("XObject")); + appearanceStreamDict.set("BBox", [0, 0, w, h]); + appearanceStreamDict.set("Length", appearance.length); + + if (rotation) { + const matrix = WidgetAnnotation._getRotationMatrix(rotation, w, h); + + appearanceStreamDict.set("Matrix", matrix); + } + + const ap = new _stream.StringStream(appearance); + ap.dict = appearanceStreamDict; + return ap; + } + }
class HighlightAnnotation extends MarkupAnnotation { @@ -8911,14 +9671,15 @@ Object.defineProperty(exports, "__esModule", ({ value: true })); exports.createDefaultAppearance = createDefaultAppearance; +exports.getPdfColor = getPdfColor; exports.parseDefaultAppearance = parseDefaultAppearance;
+var _core_utils = __w_pdfjs_require__(6); + var _util = __w_pdfjs_require__(2);
var _colorspace = __w_pdfjs_require__(24);
-var _core_utils = __w_pdfjs_require__(8); - var _evaluator = __w_pdfjs_require__(25);
var _primitives = __w_pdfjs_require__(5); @@ -9001,20 +9762,21 @@ function parseDefaultAppearance(str) { return new DefaultAppearanceEvaluator(str).parse(); }
+function getPdfColor(color, isFill) { + if (color[0] === color[1] && color[1] === color[2]) { + const gray = color[0] / 255; + return `${(0, _core_utils.numberToString)(gray)} ${isFill ? "g" : "G"}`; + } + + return Array.from(color).map(c => (0, _core_utils.numberToString)(c / 255)).join(" ") + ` ${isFill ? "rg" : "RG"}`; +} + function createDefaultAppearance({ fontSize, fontName, fontColor }) { - let colorCmd; - - if (fontColor.every(c => c === 0)) { - colorCmd = "0 g"; - } else { - colorCmd = Array.from(fontColor).map(c => (c / 255).toFixed(2)).join(" ") + " rg"; - } - - return `/${(0, _core_utils.escapePDFName)(fontName)} ${fontSize} Tf ${colorCmd}`; + return `/${(0, _core_utils.escapePDFName)(fontName)} ${fontSize} Tf ${getPdfColor(fontColor, true)}`; }
/***/ }), @@ -9032,9 +9794,9 @@ var _util = __w_pdfjs_require__(2);
var _primitives = __w_pdfjs_require__(5);
-var _base_stream = __w_pdfjs_require__(9); +var _base_stream = __w_pdfjs_require__(7);
-var _core_utils = __w_pdfjs_require__(8); +var _core_utils = __w_pdfjs_require__(6);
function resizeRgbImage(src, dest, w1, h1, w2, h2, alpha01) { const COMPONENTS = 3; @@ -10127,7 +10889,7 @@ var _image_utils = __w_pdfjs_require__(59);
var _stream = __w_pdfjs_require__(10);
-var _base_stream = __w_pdfjs_require__(9); +var _base_stream = __w_pdfjs_require__(7);
var _bidi = __w_pdfjs_require__(60);
@@ -10137,7 +10899,7 @@ var _decode_stream = __w_pdfjs_require__(29);
var _glyphlist = __w_pdfjs_require__(20);
-var _core_utils = __w_pdfjs_require__(8); +var _core_utils = __w_pdfjs_require__(6);
var _metrics = __w_pdfjs_require__(51);
@@ -11109,11 +11871,9 @@ class PartialEvaluator { let fontRef;
if (font) { - if (!(font instanceof _primitives.Ref)) { - throw new _util.FormatError('The "font" object should be a reference.'); + if (font instanceof _primitives.Ref) { + fontRef = font; } - - fontRef = font; } else { const fontRes = resources.get("Font");
@@ -12682,7 +13442,7 @@ class PartialEvaluator { } }
- const item = elements[elements.length - 1]; + const item = elements.at(-1);
if (typeof item === "string") { showSpacedTextBuffer.push(item); @@ -12901,6 +13661,8 @@ class PartialEvaluator { return;
case _util.OPS.beginMarkedContent: + flushTextContentItem(); + if (includeMarkedContent) { textContent.items.push({ type: "beginMarkedContent", @@ -12911,8 +13673,9 @@ class PartialEvaluator { break;
case _util.OPS.beginMarkedContentProps: + flushTextContentItem(); + if (includeMarkedContent) { - flushTextContentItem(); let mcid = null;
if (args[1] instanceof _primitives.Dict) { @@ -12929,8 +13692,9 @@ class PartialEvaluator { break;
case _util.OPS.endMarkedContent: + flushTextContentItem(); + if (includeMarkedContent) { - flushTextContentItem(); textContent.items.push({ type: "endMarkedContent" }); @@ -12985,10 +13749,18 @@ class PartialEvaluator { }; }
- const cidToGidMap = dict.get("CIDToGIDMap"); + try { + const cidToGidMap = dict.get("CIDToGIDMap"); + + if (cidToGidMap instanceof _base_stream.BaseStream) { + cidToGidBytes = cidToGidMap.getBytes(); + } + } catch (ex) { + if (!this.options.ignoreErrors) { + throw ex; + }
- if (cidToGidMap instanceof _base_stream.BaseStream) { - cidToGidBytes = cidToGidMap.getBytes(); + (0, _util.warn)(`extractDataStructures - ignoring CIDToGIDMap data: "${ex}".`); } }
@@ -13932,7 +14704,12 @@ class TranslatedFont { const charProcs = this.dict.get("CharProcs"); const fontResources = this.dict.get("Resources") || resources; const charProcOperatorList = Object.create(null); - const isEmptyBBox = !translatedFont.bbox || (0, _util.isArrayEqual)(translatedFont.bbox, [0, 0, 0, 0]); + + const fontBBox = _util.Util.normalizeRect(translatedFont.bbox || [0, 0, 0, 0]), + width = fontBBox[2] - fontBBox[0], + height = fontBBox[3] - fontBBox[1]; + + const fontBBoxSize = Math.hypot(width, height);
for (const key of charProcs.getKeys()) { loadCharProcsPromise = loadCharProcsPromise.then(() => { @@ -13945,7 +14722,7 @@ class TranslatedFont { operatorList }).then(() => { if (operatorList.fnArray[0] === _util.OPS.setCharWidthAndBounds) { - this._removeType3ColorOperators(operatorList, isEmptyBBox); + this._removeType3ColorOperators(operatorList, fontBBoxSize); }
charProcOperatorList[key] = operatorList.getIR(); @@ -13972,25 +14749,35 @@ class TranslatedFont { return this.type3Loaded; }
- _removeType3ColorOperators(operatorList, isEmptyBBox = false) { - if (isEmptyBBox) { + _removeType3ColorOperators(operatorList, fontBBoxSize = NaN) { + const charBBox = _util.Util.normalizeRect(operatorList.argsArray[0].slice(2)), + width = charBBox[2] - charBBox[0], + height = charBBox[3] - charBBox[1]; + + const charBBoxSize = Math.hypot(width, height); + + if (width === 0 || height === 0) { + operatorList.fnArray.splice(0, 1); + operatorList.argsArray.splice(0, 1); + } else if (fontBBoxSize === 0 || Math.round(charBBoxSize / fontBBoxSize) >= 10) { if (!this._bbox) { this._bbox = [Infinity, Infinity, -Infinity, -Infinity]; }
- const charBBox = _util.Util.normalizeRect(operatorList.argsArray[0].slice(2)); - this._bbox[0] = Math.min(this._bbox[0], charBBox[0]); this._bbox[1] = Math.min(this._bbox[1], charBBox[1]); this._bbox[2] = Math.max(this._bbox[2], charBBox[2]); this._bbox[3] = Math.max(this._bbox[3], charBBox[3]); }
- let i = 1, + let i = 0, ii = operatorList.length;
while (i < ii) { switch (operatorList.fnArray[i]) { + case _util.OPS.setCharWidthAndBounds: + break; + case _util.OPS.setStrokeColorSpace: case _util.OPS.setFillColorSpace: case _util.OPS.setStrokeColor: @@ -14540,6 +15327,7 @@ class EvaluatorPreprocessor { }); this.stateManager = stateManager; this.nonProcessedArgs = []; + this._isPathOp = false; this._numInvalidPathOPS = 0; }
@@ -14566,6 +15354,12 @@ class EvaluatorPreprocessor { const numArgs = opSpec.numArgs; let argsLength = args !== null ? args.length : 0;
+ if (!this._isPathOp) { + this._numInvalidPathOPS = 0; + } + + this._isPathOp = fn >= _util.OPS.moveTo && fn <= _util.OPS.endPath; + if (!opSpec.variableArgs) { if (argsLength !== numArgs) { const nonProcessedArgs = this.nonProcessedArgs; @@ -14588,7 +15382,7 @@ class EvaluatorPreprocessor { if (argsLength < numArgs) { const partialMsg = `command ${cmd}: expected ${numArgs} args, ` + `but received ${argsLength} args.`;
- if (fn >= _util.OPS.moveTo && fn <= _util.OPS.endPath && ++this._numInvalidPathOPS > EvaluatorPreprocessor.MAX_INVALID_PATH_OPS) { + if (this._isPathOp && ++this._numInvalidPathOPS > EvaluatorPreprocessor.MAX_INVALID_PATH_OPS) { throw new _util.FormatError(`Invalid ${partialMsg}`); }
@@ -14663,11 +15457,11 @@ var _util = __w_pdfjs_require__(2);
var _primitives = __w_pdfjs_require__(5);
-var _base_stream = __w_pdfjs_require__(9); +var _base_stream = __w_pdfjs_require__(7);
var _parser = __w_pdfjs_require__(27);
-var _core_utils = __w_pdfjs_require__(8); +var _core_utils = __w_pdfjs_require__(6);
var _stream = __w_pdfjs_require__(10);
@@ -15588,7 +16382,7 @@ var _util = __w_pdfjs_require__(2);
var _primitives = __w_pdfjs_require__(5);
-var _core_utils = __w_pdfjs_require__(8); +var _core_utils = __w_pdfjs_require__(6);
var _ascii_85_stream = __w_pdfjs_require__(28);
@@ -16969,7 +17763,7 @@ exports.Ascii85Stream = void 0;
var _decode_stream = __w_pdfjs_require__(29);
-var _core_utils = __w_pdfjs_require__(8); +var _core_utils = __w_pdfjs_require__(6);
class Ascii85Stream extends _decode_stream.DecodeStream { constructor(str, maybeLength) { @@ -17067,7 +17861,7 @@ Object.defineProperty(exports, "__esModule", ({ })); exports.StreamsSequenceStream = exports.DecodeStream = void 0;
-var _base_stream = __w_pdfjs_require__(9); +var _base_stream = __w_pdfjs_require__(7);
var _stream = __w_pdfjs_require__(10);
@@ -18415,7 +19209,7 @@ Object.defineProperty(exports, "__esModule", ({ })); exports.Jbig2Stream = void 0;
-var _base_stream = __w_pdfjs_require__(9); +var _base_stream = __w_pdfjs_require__(7);
var _decode_stream = __w_pdfjs_require__(29);
@@ -18495,7 +19289,7 @@ exports.Jbig2Image = void 0;
var _util = __w_pdfjs_require__(2);
-var _core_utils = __w_pdfjs_require__(8); +var _core_utils = __w_pdfjs_require__(6);
var _arithmetic_decoder = __w_pdfjs_require__(36);
@@ -19837,7 +20631,7 @@ function processSegment(segment, visitor) { break;
default: - throw new Jbig2Error(`segment type ${header.typeName}(${header.type})` + " is not implemented"); + throw new Jbig2Error(`segment type ${header.typeName}(${header.type}) is not implemented`); }
const callbackName = "on" + header.typeName; @@ -19866,55 +20660,7 @@ function parseJbig2Chunks(chunks) { }
function parseJbig2(data) { - const end = data.length; - let position = 0; - - if (data[position] !== 0x97 || data[position + 1] !== 0x4a || data[position + 2] !== 0x42 || data[position + 3] !== 0x32 || data[position + 4] !== 0x0d || data[position + 5] !== 0x0a || data[position + 6] !== 0x1a || data[position + 7] !== 0x0a) { - throw new Jbig2Error("parseJbig2 - invalid header."); - } - - const header = Object.create(null); - position += 8; - const flags = data[position++]; - header.randomAccess = !(flags & 1); - - if (!(flags & 2)) { - header.numberOfPages = (0, _core_utils.readUint32)(data, position); - position += 4; - } - - const segments = readSegments(header, data, position, end); - const visitor = new SimpleSegmentVisitor(); - processSegments(segments, visitor); - const { - width, - height - } = visitor.currentPageInfo; - const bitPacked = visitor.buffer; - const imgData = new Uint8ClampedArray(width * height); - let q = 0, - k = 0; - - for (let i = 0; i < height; i++) { - let mask = 0, - buffer; - - for (let j = 0; j < width; j++) { - if (!mask) { - mask = 128; - buffer = bitPacked[k++]; - } - - imgData[q++] = buffer & mask ? 0 : 255; - mask >>= 1; - } - } - - return { - imgData, - width, - height - }; + throw new Error("Not implemented: parseJbig2"); }
class SimpleSegmentVisitor { @@ -19924,9 +20670,7 @@ class SimpleSegmentVisitor { const buffer = new Uint8ClampedArray(rowSize * info.height);
if (info.defaultPixelValue) { - for (let i = 0, ii = buffer.length; i < ii; i++) { - buffer[i] = 0xff; - } + buffer.fill(0xff); }
this.buffer = buffer; @@ -20020,13 +20764,13 @@ class SimpleSegmentVisitor { this.symbols = symbols = {}; }
- let inputSymbols = []; + const inputSymbols = [];
- for (let i = 0, ii = referredSegments.length; i < ii; i++) { - const referredSymbols = symbols[referredSegments[i]]; + for (const referredSegment of referredSegments) { + const referredSymbols = symbols[referredSegment];
if (referredSymbols) { - inputSymbols = inputSymbols.concat(referredSymbols); + inputSymbols.push(...referredSymbols); } }
@@ -20038,13 +20782,13 @@ class SimpleSegmentVisitor { const regionInfo = region.info; let huffmanTables, huffmanInput; const symbols = this.symbols; - let inputSymbols = []; + const inputSymbols = [];
- for (let i = 0, ii = referredSegments.length; i < ii; i++) { - const referredSymbols = symbols[referredSegments[i]]; + for (const referredSegment of referredSegments) { + const referredSymbols = symbols[referredSegment];
if (referredSymbols) { - inputSymbols = inputSymbols.concat(referredSymbols); + inputSymbols.push(...referredSymbols); } }
@@ -20667,14 +21411,7 @@ class Jbig2Image { }
parse(data) { - const { - imgData, - width, - height - } = parseJbig2(data); - this.width = width; - this.height = height; - return imgData; + throw new Error("Not implemented: Jbig2Image.parse"); }
} @@ -21147,7 +21884,7 @@ exports.JpegImage = void 0;
var _util = __w_pdfjs_require__(2);
-var _core_utils = __w_pdfjs_require__(8); +var _core_utils = __w_pdfjs_require__(6);
class JpegError extends _util.BaseException { constructor(msg) { @@ -22474,7 +23211,7 @@ exports.JpxImage = void 0;
var _util = __w_pdfjs_require__(2);
-var _core_utils = __w_pdfjs_require__(8); +var _core_utils = __w_pdfjs_require__(6);
var _arithmetic_decoder = __w_pdfjs_require__(36);
@@ -25302,7 +26039,7 @@ var _cmap = __w_pdfjs_require__(26);
var _opentype_file_builder = __w_pdfjs_require__(53);
-var _core_utils = __w_pdfjs_require__(8); +var _core_utils = __w_pdfjs_require__(6);
var _stream = __w_pdfjs_require__(10);
@@ -25580,11 +26317,14 @@ function convertCidString(charCode, cid, shouldThrow = false) { return cid; }
-function adjustMapping(charCodeToGlyphId, hasGlyph, newGlyphZeroId) { +function adjustMapping(charCodeToGlyphId, hasGlyph, newGlyphZeroId, toUnicode) { const newMap = Object.create(null); + const toUnicodeExtraMap = new Map(); const toFontChar = []; + const usedGlyphIds = new Set(); let privateUseAreaIndex = 0; - let nextAvailableFontCharCode = PRIVATE_USE_AREAS[privateUseAreaIndex][0]; + const privateUseOffetStart = PRIVATE_USE_AREAS[privateUseAreaIndex][0]; + let nextAvailableFontCharCode = privateUseOffetStart; let privateUseOffetEnd = PRIVATE_USE_AREAS[privateUseAreaIndex][1];
for (let originalCharCode in charCodeToGlyphId) { @@ -25613,6 +26353,17 @@ function adjustMapping(charCodeToGlyphId, hasGlyph, newGlyphZeroId) { glyphId = newGlyphZeroId; }
+ let unicode = toUnicode.get(originalCharCode); + + if (typeof unicode === "string") { + unicode = unicode.codePointAt(0); + } + + if (unicode && unicode < privateUseOffetStart && !usedGlyphIds.has(glyphId)) { + toUnicodeExtraMap.set(unicode, glyphId); + usedGlyphIds.add(glyphId); + } + newMap[fontCharCode] = glyphId; toFontChar[originalCharCode] = fontCharCode; } @@ -25620,11 +26371,12 @@ function adjustMapping(charCodeToGlyphId, hasGlyph, newGlyphZeroId) { return { toFontChar, charCodeToGlyphId: newMap, + toUnicodeExtraMap, nextAvailableFontCharCode }; }
-function getRanges(glyphs, numGlyphs) { +function getRanges(glyphs, toUnicodeExtraMap, numGlyphs) { const codes = [];
for (const charCode in glyphs) { @@ -25638,6 +26390,19 @@ function getRanges(glyphs, numGlyphs) { }); }
+ if (toUnicodeExtraMap) { + for (const [unicode, glyphId] of toUnicodeExtraMap) { + if (glyphId >= numGlyphs) { + continue; + } + + codes.push({ + fontCharCode: unicode, + glyphId + }); + } + } + if (codes.length === 0) { codes.push({ fontCharCode: 0, @@ -25673,9 +26438,9 @@ function getRanges(glyphs, numGlyphs) { return ranges; }
-function createCmapTable(glyphs, numGlyphs) { - const ranges = getRanges(glyphs, numGlyphs); - const numTables = ranges[ranges.length - 1][1] > 0xffff ? 2 : 1; +function createCmapTable(glyphs, toUnicodeExtraMap, numGlyphs) { + const ranges = getRanges(glyphs, toUnicodeExtraMap, numGlyphs); + const numTables = ranges.at(-1)[1] > 0xffff ? 2 : 1; let cmap = "\x00\x00" + string16(numTables) + "\x00\x03" + "\x00\x01" + (0, _util.string32)(4 + numTables * 8); let i, ii, j, jj;
@@ -26236,7 +27001,7 @@ class Font { const offset = file.getInt32() >>> 0; const length = file.getInt32() >>> 0; const previousPosition = file.pos; - file.pos = file.start ? file.start : 0; + file.pos = file.start || 0; file.skip(offset); const data = file.getBytes(length); file.pos = previousPosition; @@ -26373,7 +27138,7 @@ class Font { }
let segment; - let start = (file.start ? file.start : 0) + cmap.offset; + let start = (file.start || 0) + cmap.offset; file.pos = start; file.skip(2); const numTables = file.getUint16(); @@ -26649,7 +27414,7 @@ class Font { return; }
- file.pos = (file.start ? file.start : 0) + header.offset; + file.pos = (file.start || 0) + header.offset; file.pos += 4; file.pos += 2; file.pos += 2; @@ -26971,7 +27736,7 @@ class Font { }
function readPostScriptTable(post, propertiesObj, maxpNumGlyphs) { - const start = (font.start ? font.start : 0) + post.offset; + const start = (font.start || 0) + post.offset; font.pos = start; const length = post.length, end = start + length; @@ -27059,7 +27824,7 @@ class Font { }
function readNameTable(nameTable) { - const start = (font.start ? font.start : 0) + nameTable.offset; + const start = (font.start || 0) + nameTable.offset; font.pos = start; const names = [[], []]; const length = nameTable.length, @@ -27191,7 +27956,7 @@ class Font { } } else if (op === 0x2b && !tooComplexToFollowFunctions) { if (!inFDEF && !inELSE) { - funcId = stack[stack.length - 1]; + funcId = stack.at(-1);
if (isNaN(funcId)) { (0, _util.info)("TT: CALL empty stack (or invalid entry)."); @@ -27279,7 +28044,7 @@ class Font { --ifLevel; } else if (op === 0x1c) { if (!inFDEF && !inELSE) { - const offset = stack[stack.length - 1]; + const offset = stack.at(-1);
if (offset > 0) { i += offset - 1; @@ -27740,11 +28505,11 @@ class Font { }
if (!properties.cssFontInfo) { - const newMapping = adjustMapping(charCodeToGlyphId, hasGlyph, glyphZeroId); + const newMapping = adjustMapping(charCodeToGlyphId, hasGlyph, glyphZeroId, this.toUnicode); this.toFontChar = newMapping.toFontChar; tables.cmap = { tag: "cmap", - data: createCmapTable(newMapping.charCodeToGlyphId, numGlyphsOut) + data: createCmapTable(newMapping.charCodeToGlyphId, newMapping.toUnicodeExtraMap, numGlyphsOut) };
if (!tables["OS/2"] || !validateOS2Table(tables["OS/2"], font)) { @@ -27804,11 +28569,13 @@ class Font { const mapping = font.getGlyphMapping(properties); let newMapping = null; let newCharCodeToGlyphId = mapping; + let toUnicodeExtraMap = null;
if (!properties.cssFontInfo) { - newMapping = adjustMapping(mapping, font.hasGlyphId.bind(font), glyphZeroId); + newMapping = adjustMapping(mapping, font.hasGlyphId.bind(font), glyphZeroId, this.toUnicode); this.toFontChar = newMapping.toFontChar; newCharCodeToGlyphId = newMapping.charCodeToGlyphId; + toUnicodeExtraMap = newMapping.toUnicodeExtraMap; }
const numGlyphs = font.numGlyphs; @@ -27889,7 +28656,7 @@ class Font { const builder = new _opentype_file_builder.OpenTypeFileBuilder("\x4F\x54\x54\x4F"); builder.addTable("CFF ", font.data); builder.addTable("OS/2", createOS2Table(properties, newCharCodeToGlyphId)); - builder.addTable("cmap", createCmapTable(newCharCodeToGlyphId, numGlyphs)); + builder.addTable("cmap", createCmapTable(newCharCodeToGlyphId, toUnicodeExtraMap, numGlyphs)); builder.addTable("head", "\x00\x01\x00\x00" + "\x00\x00\x10\x00" + "\x00\x00\x00\x00" + "\x5F\x0F\x3C\xF5" + "\x00\x00" + safeString16(unitsPerEm) + "\x00\x00\x00\x00\x9e\x0b\x7e\x27" + "\x00\x00\x00\x00\x9e\x0b\x7e\x27" + "\x00\x00" + safeString16(properties.descent) + "\x0F\xFF" + safeString16(properties.ascent) + string16(properties.italicAngle ? 2 : 0) + "\x00\x11" + "\x00\x00" + "\x00\x00" + "\x00\x00"); builder.addTable("hhea", "\x00\x01\x00\x00" + safeString16(properties.ascent) + safeString16(properties.descent) + "\x00\x00" + "\xFF\xFF" + "\x00\x00" + "\x00\x00" + "\x00\x00" + safeString16(properties.capHeight) + safeString16(Math.tan(properties.italicAngle) * properties.xHeight) + "\x00\x00" + "\x00\x00" + "\x00\x00" + "\x00\x00" + "\x00\x00" + "\x00\x00" + string16(numGlyphs)); builder.addTable("hmtx", function fontFieldsHmtx() { @@ -29528,10 +30295,12 @@ class CFFCompiler { const output = { data: [], length: 0, - add: function CFFCompiler_add(data) { + + add(data) { this.data = this.data.concat(data); this.length = this.data.length; } + }; const header = this.compileHeader(cff.header); output.add(header); @@ -29765,12 +30534,9 @@ class CFFCompiler { }
compileDict(dict, offsetTracker) { - let out = []; - const order = dict.order; - - for (let i = 0; i < order.length; ++i) { - const key = order[i]; + const out = [];
+ for (const key of dict.order) { if (!(key in dict.values)) { continue; } @@ -29797,7 +30563,7 @@ class CFFCompiler { switch (type) { case "num": case "sid": - out = out.concat(this.encodeNumber(value)); + out.push(...this.encodeNumber(value)); break;
case "offset": @@ -29807,15 +30573,15 @@ class CFFCompiler { offsetTracker.track(name, out.length); }
- out = out.concat([0x1d, 0, 0, 0, 0]); + out.push(0x1d, 0, 0, 0, 0); break;
case "array": case "delta": - out = out.concat(this.encodeNumber(value)); + out.push(...this.encodeNumber(value));
for (let k = 1, kk = values.length; k < kk; ++k) { - out = out.concat(this.encodeNumber(values[k])); + out.push(...this.encodeNumber(values[k])); }
break; @@ -29825,7 +30591,7 @@ class CFFCompiler { } }
- out = out.concat(dict.opcodes[key]); + out.push(...dict.opcodes[key]); }
return out; @@ -30050,7 +30816,7 @@ exports.getSerifFonts = exports.getNonStdFontMap = exports.getGlyphMapForStandar exports.getStandardFontName = getStandardFontName; exports.getSymbolsFonts = exports.getSupplementalGlyphMapForCalibri = exports.getSupplementalGlyphMapForArialBlack = exports.getStdFontMap = void 0;
-var _core_utils = __w_pdfjs_require__(8); +var _core_utils = __w_pdfjs_require__(6);
var _fonts_utils = __w_pdfjs_require__(18);
@@ -30085,10 +30851,14 @@ const getStdFontMap = (0, _core_utils.getLookupTableFactory)(function (t) { t["Arial-Bold"] = "Helvetica-Bold"; t["Arial-BoldItalic"] = "Helvetica-BoldOblique"; t["Arial-Italic"] = "Helvetica-Oblique"; + t.ArialMT = "Helvetica"; t["Arial-BoldItalicMT"] = "Helvetica-BoldOblique"; t["Arial-BoldMT"] = "Helvetica-Bold"; t["Arial-ItalicMT"] = "Helvetica-Oblique"; - t.ArialMT = "Helvetica"; + t.ArialUnicodeMS = "Helvetica"; + t["ArialUnicodeMS-Bold"] = "Helvetica-Bold"; + t["ArialUnicodeMS-BoldItalic"] = "Helvetica-BoldOblique"; + t["ArialUnicodeMS-Italic"] = "Helvetica-Oblique"; t["Courier-BoldItalic"] = "Courier-BoldOblique"; t["Courier-Italic"] = "Courier-Oblique"; t.CourierNew = "Courier"; @@ -30547,6 +31317,33 @@ const getGlyphMapForStandardFonts = (0, _core_utils.getLookupTableFactory)(funct t[337] = 9552; t[493] = 1039; t[494] = 1040; + t[672] = 1488; + t[673] = 1489; + t[674] = 1490; + t[675] = 1491; + t[676] = 1492; + t[677] = 1493; + t[678] = 1494; + t[679] = 1495; + t[680] = 1496; + t[681] = 1497; + t[682] = 1498; + t[683] = 1499; + t[684] = 1500; + t[685] = 1501; + t[686] = 1502; + t[687] = 1503; + t[688] = 1504; + t[689] = 1505; + t[690] = 1506; + t[691] = 1507; + t[692] = 1508; + t[693] = 1509; + t[694] = 1510; + t[695] = 1511; + t[696] = 1512; + t[697] = 1513; + t[698] = 1514; t[705] = 1524; t[706] = 8362; t[710] = 64288; @@ -31369,7 +32166,7 @@ function compileGlyf(code, cmds, font) {
const instructionLength = getUint16(code, i); i += 2 + instructionLength; - const numberOfPoints = endPtsOfContours[endPtsOfContours.length - 1] + 1; + const numberOfPoints = endPtsOfContours.at(-1) + 1; const points = [];
while (points.length < numberOfPoints) { @@ -31433,13 +32230,13 @@ function compileGlyf(code, cmds, font) {
if (contour[0].flags & 1) { contour.push(contour[0]); - } else if (contour[contour.length - 1].flags & 1) { - contour.unshift(contour[contour.length - 1]); + } else if (contour.at(-1).flags & 1) { + contour.unshift(contour.at(-1)); } else { const p = { flags: 1, - x: (contour[0].x + contour[contour.length - 1].x) / 2, - y: (contour[0].y + contour[contour.length - 1].y) / 2 + x: (contour[0].x + contour.at(-1).x) / 2, + y: (contour[0].y + contour.at(-1).y) / 2 }; contour.unshift(p); contour.push(p); @@ -32081,7 +32878,7 @@ Object.defineProperty(exports, "__esModule", ({ })); exports.getMetrics = exports.getFontBasicMetrics = void 0;
-var _core_utils = __w_pdfjs_require__(8); +var _core_utils = __w_pdfjs_require__(6);
const getMetrics = (0, _core_utils.getLookupTableFactory)(function (t) { t.Courier = 600; @@ -35775,7 +36572,7 @@ Object.defineProperty(exports, "__esModule", ({ })); exports.OpenTypeFileBuilder = void 0;
-var _core_utils = __w_pdfjs_require__(8); +var _core_utils = __w_pdfjs_require__(6);
var _util = __w_pdfjs_require__(2);
@@ -35919,7 +36716,7 @@ var _cff_parser = __w_pdfjs_require__(45);
var _fonts_utils = __w_pdfjs_require__(18);
-var _core_utils = __w_pdfjs_require__(8); +var _core_utils = __w_pdfjs_require__(6);
var _stream = __w_pdfjs_require__(10);
@@ -36071,10 +36868,11 @@ class Type1Font {
getCharset() { const charset = [".notdef"]; - const charstrings = this.charstrings;
- for (let glyphId = 0; glyphId < charstrings.length; glyphId++) { - charset.push(charstrings[glyphId].glyphName); + for (const { + glyphName + } of this.charstrings) { + charset.push(glyphName); }
return charset; @@ -36282,7 +37080,7 @@ exports.Type1Parser = void 0;
var _encodings = __w_pdfjs_require__(19);
-var _core_utils = __w_pdfjs_require__(8); +var _core_utils = __w_pdfjs_require__(6);
var _stream = __w_pdfjs_require__(10);
@@ -36471,7 +37269,7 @@ const Type1CharString = function Type1CharStringClosure() {
case (12 << 8) + 6: if (seacAnalysisEnabled) { - const asb = this.stack[this.stack.length - 5]; + const asb = this.stack.at(-5); this.seac = this.stack.splice(-4, 4); this.seac[0] += this.lsb - asb; error = this.executeCommand(0, COMMAND_MAP.endchar); @@ -36782,7 +37580,7 @@ const Type1Parser = function Type1ParserClosure() { privateData } }; - let token, length, data, lenIV, encoded; + let token, length, data, lenIV;
while ((token = this.getToken()) !== null) { if (token !== "/") { @@ -36814,7 +37612,7 @@ const Type1Parser = function Type1ParserClosure() { this.getToken(); data = length > 0 ? stream.getBytes(length) : new Uint8Array(0); lenIV = program.properties.privateData.lenIV; - encoded = this.readCharStrings(data, lenIV); + const encoded = this.readCharStrings(data, lenIV); this.nextChar(); token = this.getToken();
@@ -36842,7 +37640,7 @@ const Type1Parser = function Type1ParserClosure() { this.getToken(); data = length > 0 ? stream.getBytes(length) : new Uint8Array(0); lenIV = program.properties.privateData.lenIV; - encoded = this.readCharStrings(data, lenIV); + const encoded = this.readCharStrings(data, lenIV); this.nextChar(); token = this.getToken();
@@ -36892,9 +37690,10 @@ const Type1Parser = function Type1ParserClosure() { } }
- for (let i = 0; i < charstrings.length; i++) { - const glyph = charstrings[i].glyph; - encoded = charstrings[i].encoded; + for (const { + encoded, + glyph + } of charstrings) { const charString = new Type1CharString(); const error = charString.convert(encoded, subrs, this.seacAnalysisEnabled); let output = charString.output; @@ -37013,11 +37812,11 @@ exports.getTilingPatternIR = getTilingPatternIR;
var _util = __w_pdfjs_require__(2);
-var _base_stream = __w_pdfjs_require__(9); +var _base_stream = __w_pdfjs_require__(7);
var _colorspace = __w_pdfjs_require__(24);
-var _core_utils = __w_pdfjs_require__(8); +var _core_utils = __w_pdfjs_require__(6);
const ShadingType = { FUNCTION_BASED: 1, @@ -37176,7 +37975,7 @@ class RadialAxialShading extends BaseShading { }
if (!extendEnd) { - colorStops[colorStops.length - 1][0] -= BaseShading.SMALL_NUMBER; + colorStops.at(-1)[0] -= BaseShading.SMALL_NUMBER; colorStops.push([1, background]); }
@@ -37461,12 +38260,12 @@ class MeshShading extends BaseShading { break;
case 1: - ps.push(ps[ps.length - 2], ps[ps.length - 1]); + ps.push(ps.at(-2), ps.at(-1)); verticesLeft = 1; break;
case 2: - ps.push(ps[ps.length - 3], ps[ps.length - 1]); + ps.push(ps.at(-3), ps.at(-1)); verticesLeft = 1; break; } @@ -37960,7 +38759,7 @@ var _util = __w_pdfjs_require__(2);
var _ps_parser = __w_pdfjs_require__(58);
-var _base_stream = __w_pdfjs_require__(9); +var _base_stream = __w_pdfjs_require__(7);
var _image_utils = __w_pdfjs_require__(59);
@@ -39188,7 +39987,7 @@ const PostScriptCompiler = function PostScriptCompilerClosure() { break; }
- ast1 = stack[stack.length - 1]; + ast1 = stack.at(-1);
if (ast1.type === "literal" || ast1.type === "var") { stack.push(ast1); @@ -39294,7 +40093,7 @@ var _util = __w_pdfjs_require__(2);
var _primitives = __w_pdfjs_require__(5);
-var _core_utils = __w_pdfjs_require__(8); +var _core_utils = __w_pdfjs_require__(6);
class PostScriptParser { constructor(lexer) { @@ -40309,7 +41108,7 @@ function addState(parentState, pattern, checkFn, iterateFn, processFn) { state = state[item] || (state[item] = []); }
- state[pattern[pattern.length - 1]] = { + state[pattern.at(-1)] = { checkFn, iterateFn, processFn @@ -40951,7 +41750,7 @@ var _util = __w_pdfjs_require__(2);
var _image_utils = __w_pdfjs_require__(64);
-var _base_stream = __w_pdfjs_require__(9); +var _base_stream = __w_pdfjs_require__(7);
var _colorspace = __w_pdfjs_require__(24);
@@ -41743,2086 +42542,2558 @@ function applyMaskImageData({ Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.Catalog = void 0; - -var _core_utils = __w_pdfjs_require__(8); +exports.incrementalUpdate = incrementalUpdate; +exports.writeDict = writeDict; +exports.writeObject = writeObject;
var _util = __w_pdfjs_require__(2);
var _primitives = __w_pdfjs_require__(5);
-var _name_number_tree = __w_pdfjs_require__(66); - -var _base_stream = __w_pdfjs_require__(9); - -var _cleanup_helper = __w_pdfjs_require__(67); - -var _colorspace = __w_pdfjs_require__(24); +var _core_utils = __w_pdfjs_require__(6);
-var _file_spec = __w_pdfjs_require__(68); +var _xml_parser = __w_pdfjs_require__(66);
-var _image_utils = __w_pdfjs_require__(59); +var _base_stream = __w_pdfjs_require__(7);
-var _metadata_parser = __w_pdfjs_require__(69); +var _crypto = __w_pdfjs_require__(67);
-var _struct_tree = __w_pdfjs_require__(71); +function writeObject(ref, obj, buffer, transform) { + buffer.push(`${ref.num} ${ref.gen} obj\n`);
-function fetchDestination(dest) { - if (dest instanceof _primitives.Dict) { - dest = dest.get("D"); + if (obj instanceof _primitives.Dict) { + writeDict(obj, buffer, transform); + } else if (obj instanceof _base_stream.BaseStream) { + writeStream(obj, buffer, transform); }
- return Array.isArray(dest) ? dest : null; + buffer.push("\nendobj\n"); }
-class Catalog { - constructor(pdfManager, xref) { - this.pdfManager = pdfManager; - this.xref = xref; - this._catDict = xref.getCatalogObj(); - - if (!(this._catDict instanceof _primitives.Dict)) { - throw new _util.FormatError("Catalog object is not a dictionary."); - } +function writeDict(dict, buffer, transform) { + buffer.push("<<");
- this.toplevelPagesDict; - this._actualNumPages = null; - this.fontCache = new _primitives.RefSetCache(); - this.builtInCMapCache = new Map(); - this.standardFontDataCache = new Map(); - this.globalImageCache = new _image_utils.GlobalImageCache(); - this.pageKidsCountCache = new _primitives.RefSetCache(); - this.pageIndexCache = new _primitives.RefSetCache(); - this.nonBlendModesSet = new _primitives.RefSet(); + for (const key of dict.getKeys()) { + buffer.push(` /${(0, _core_utils.escapePDFName)(key)} `); + writeValue(dict.getRaw(key), buffer, transform); }
- get version() { - const version = this._catDict.get("Version"); - - return (0, _util.shadow)(this, "version", version instanceof _primitives.Name ? version.name : null); - } + buffer.push(">>"); +}
- get lang() { - const lang = this._catDict.get("Lang"); +function writeStream(stream, buffer, transform) { + writeDict(stream.dict, buffer, transform); + buffer.push(" stream\n"); + let string = stream.getString();
- return (0, _util.shadow)(this, "lang", typeof lang === "string" ? (0, _util.stringToPDFString)(lang) : null); + if (transform !== null) { + string = transform.encryptString(string); }
- get needsRendering() { - const needsRendering = this._catDict.get("NeedsRendering"); + buffer.push(string, "\nendstream\n"); +}
- return (0, _util.shadow)(this, "needsRendering", typeof needsRendering === "boolean" ? needsRendering : false); - } +function writeArray(array, buffer, transform) { + buffer.push("["); + let first = true;
- get collection() { - let collection = null; + for (const val of array) { + if (!first) { + buffer.push(" "); + } else { + first = false; + }
- try { - const obj = this._catDict.get("Collection"); + writeValue(val, buffer, transform); + }
- if (obj instanceof _primitives.Dict && obj.size > 0) { - collection = obj; - } - } catch (ex) { - if (ex instanceof _core_utils.MissingDataException) { - throw ex; - } + buffer.push("]"); +}
- (0, _util.info)("Cannot fetch Collection entry; assuming no collection is present."); +function writeValue(value, buffer, transform) { + if (value instanceof _primitives.Name) { + buffer.push(`/${(0, _core_utils.escapePDFName)(value.name)}`); + } else if (value instanceof _primitives.Ref) { + buffer.push(`${value.num} ${value.gen} R`); + } else if (Array.isArray(value)) { + writeArray(value, buffer, transform); + } else if (typeof value === "string") { + if (transform !== null) { + value = transform.encryptString(value); }
- return (0, _util.shadow)(this, "collection", collection); + buffer.push(`(${(0, _util.escapeString)(value)})`); + } else if (typeof value === "number") { + buffer.push((0, _core_utils.numberToString)(value)); + } else if (typeof value === "boolean") { + buffer.push(value.toString()); + } else if (value instanceof _primitives.Dict) { + writeDict(value, buffer, transform); + } else if (value instanceof _base_stream.BaseStream) { + writeStream(value, buffer, transform); + } else if (value === null) { + buffer.push("null"); + } else { + (0, _util.warn)(`Unhandled value in writer: ${typeof value}, please file a bug.`); } +}
- get acroForm() { - let acroForm = null; +function writeInt(number, size, offset, buffer) { + for (let i = size + offset - 1; i > offset - 1; i--) { + buffer[i] = number & 0xff; + number >>= 8; + }
- try { - const obj = this._catDict.get("AcroForm"); + return offset + size; +}
- if (obj instanceof _primitives.Dict && obj.size > 0) { - acroForm = obj; - } - } catch (ex) { - if (ex instanceof _core_utils.MissingDataException) { - throw ex; - } +function writeString(string, offset, buffer) { + for (let i = 0, len = string.length; i < len; i++) { + buffer[offset + i] = string.charCodeAt(i) & 0xff; + } +}
- (0, _util.info)("Cannot fetch AcroForm entry; assuming no forms are present."); - } +function computeMD5(filesize, xrefInfo) { + const time = Math.floor(Date.now() / 1000); + const filename = xrefInfo.filename || ""; + const md5Buffer = [time.toString(), filename, filesize.toString()]; + let md5BufferLen = md5Buffer.reduce((a, str) => a + str.length, 0);
- return (0, _util.shadow)(this, "acroForm", acroForm); + for (const value of Object.values(xrefInfo.info)) { + md5Buffer.push(value); + md5BufferLen += value.length; }
- get acroFormRef() { - const value = this._catDict.getRaw("AcroForm"); + const array = new Uint8Array(md5BufferLen); + let offset = 0;
- return (0, _util.shadow)(this, "acroFormRef", value instanceof _primitives.Ref ? value : null); + for (const str of md5Buffer) { + writeString(str, offset, array); + offset += str.length; }
- get metadata() { - const streamRef = this._catDict.getRaw("Metadata"); + return (0, _util.bytesToString)((0, _crypto.calculateMD5)(array)); +}
- if (!(streamRef instanceof _primitives.Ref)) { - return (0, _util.shadow)(this, "metadata", null); - } +function writeXFADataForAcroform(str, newRefs) { + const xml = new _xml_parser.SimpleXMLParser({ + hasAttributes: true + }).parseFromString(str);
- let metadata = null; + for (const { + xfa + } of newRefs) { + if (!xfa) { + continue; + }
- try { - const suppressEncryption = !(this.xref.encrypt && this.xref.encrypt.encryptMetadata); - const stream = this.xref.fetch(streamRef, suppressEncryption); + const { + path, + value + } = xfa;
- if (stream instanceof _base_stream.BaseStream && stream.dict instanceof _primitives.Dict) { - const type = stream.dict.get("Type"); - const subtype = stream.dict.get("Subtype"); + if (!path) { + continue; + }
- if ((0, _primitives.isName)(type, "Metadata") && (0, _primitives.isName)(subtype, "XML")) { - const data = (0, _util.stringToUTF8String)(stream.getString()); + const node = xml.documentElement.searchNode((0, _core_utils.parseXFAPath)(path), 0);
- if (data) { - metadata = new _metadata_parser.MetadataParser(data).serializable; - } - } - } - } catch (ex) { - if (ex instanceof _core_utils.MissingDataException) { - throw ex; + if (node) { + if (Array.isArray(value)) { + node.childNodes = value.map(val => new _xml_parser.SimpleDOMNode("value", val)); + } else { + node.childNodes = [new _xml_parser.SimpleDOMNode("#text", value)]; } - - (0, _util.info)(`Skipping invalid Metadata: "${ex}".`); + } else { + (0, _util.warn)(`Node not found for path: ${path}`); } - - return (0, _util.shadow)(this, "metadata", metadata); }
- get markInfo() { - let markInfo = null; + const buffer = []; + xml.documentElement.dump(buffer); + return buffer.join(""); +}
- try { - markInfo = this._readMarkInfo(); - } catch (ex) { - if (ex instanceof _core_utils.MissingDataException) { - throw ex; - } +function updateXFA({ + xfaData, + xfaDatasetsRef, + hasXfaDatasetsEntry, + acroFormRef, + acroForm, + newRefs, + xref, + xrefInfo +}) { + if (xref === null) { + return; + }
- (0, _util.warn)("Unable to read mark info."); + if (!hasXfaDatasetsEntry) { + if (!acroFormRef) { + (0, _util.warn)("XFA - Cannot save it"); + return; }
- return (0, _util.shadow)(this, "markInfo", markInfo); - } - - _readMarkInfo() { - const obj = this._catDict.get("MarkInfo"); + const oldXfa = acroForm.get("XFA"); + const newXfa = oldXfa.slice(); + newXfa.splice(2, 0, "datasets"); + newXfa.splice(3, 0, xfaDatasetsRef); + acroForm.set("XFA", newXfa); + const encrypt = xref.encrypt; + let transform = null;
- if (!(obj instanceof _primitives.Dict)) { - return null; + if (encrypt) { + transform = encrypt.createCipherTransform(acroFormRef.num, acroFormRef.gen); }
- const markInfo = { - Marked: false, - UserProperties: false, - Suspects: false - }; + const buffer = [`${acroFormRef.num} ${acroFormRef.gen} obj\n`]; + writeDict(acroForm, buffer, transform); + buffer.push("\n"); + acroForm.set("XFA", oldXfa); + newRefs.push({ + ref: acroFormRef, + data: buffer.join("") + }); + }
- for (const key in markInfo) { - const value = obj.get(key); + if (xfaData === null) { + const datasets = xref.fetchIfRef(xfaDatasetsRef); + xfaData = writeXFADataForAcroform(datasets.getString(), newRefs); + }
- if (typeof value === "boolean") { - markInfo[key] = value; - } - } + const encrypt = xref.encrypt;
- return markInfo; + if (encrypt) { + const transform = encrypt.createCipherTransform(xfaDatasetsRef.num, xfaDatasetsRef.gen); + xfaData = transform.encryptString(xfaData); }
- get structTreeRoot() { - let structTree = null; + const data = `${xfaDatasetsRef.num} ${xfaDatasetsRef.gen} obj\n` + `<< /Type /EmbeddedFile /Length ${xfaData.length}>>\nstream\n` + xfaData + "\nendstream\nendobj\n"; + newRefs.push({ + ref: xfaDatasetsRef, + data + }); +}
- try { - structTree = this._readStructTreeRoot(); - } catch (ex) { - if (ex instanceof _core_utils.MissingDataException) { - throw ex; - } +function incrementalUpdate({ + originalData, + xrefInfo, + newRefs, + xref = null, + hasXfa = false, + xfaDatasetsRef = null, + hasXfaDatasetsEntry = false, + acroFormRef = null, + acroForm = null, + xfaData = null +}) { + if (hasXfa) { + updateXFA({ + xfaData, + xfaDatasetsRef, + hasXfaDatasetsEntry, + acroFormRef, + acroForm, + newRefs, + xref, + xrefInfo + }); + }
- (0, _util.warn)("Unable read to structTreeRoot info."); - } + const newXref = new _primitives.Dict(null); + const refForXrefTable = xrefInfo.newRef; + let buffer, baseOffset; + const lastByte = originalData.at(-1);
- return (0, _util.shadow)(this, "structTreeRoot", structTree); + if (lastByte === 0x0a || lastByte === 0x0d) { + buffer = []; + baseOffset = originalData.length; + } else { + buffer = ["\n"]; + baseOffset = originalData.length + 1; }
- _readStructTreeRoot() { - const obj = this._catDict.get("StructTreeRoot"); + newXref.set("Size", refForXrefTable.num + 1); + newXref.set("Prev", xrefInfo.startXRef); + newXref.set("Type", _primitives.Name.get("XRef"));
- if (!(obj instanceof _primitives.Dict)) { - return null; - } + if (xrefInfo.rootRef !== null) { + newXref.set("Root", xrefInfo.rootRef); + }
- const root = new _struct_tree.StructTreeRoot(obj); - root.init(); - return root; + if (xrefInfo.infoRef !== null) { + newXref.set("Info", xrefInfo.infoRef); }
- get toplevelPagesDict() { - const pagesObj = this._catDict.get("Pages"); + if (xrefInfo.encryptRef !== null) { + newXref.set("Encrypt", xrefInfo.encryptRef); + }
- if (!(pagesObj instanceof _primitives.Dict)) { - throw new _util.FormatError("Invalid top-level pages dictionary."); - } + newRefs.push({ + ref: refForXrefTable, + data: "" + }); + newRefs = newRefs.sort((a, b) => { + return a.ref.num - b.ref.num; + }); + const xrefTableData = [[0, 1, 0xffff]]; + const indexes = [0, 1]; + let maxOffset = 0;
- return (0, _util.shadow)(this, "toplevelPagesDict", pagesObj); + for (const { + ref, + data + } of newRefs) { + maxOffset = Math.max(maxOffset, baseOffset); + xrefTableData.push([1, baseOffset, Math.min(ref.gen, 0xffff)]); + baseOffset += data.length; + indexes.push(ref.num, 1); + buffer.push(data); }
- get documentOutline() { - let obj = null; - - try { - obj = this._readDocumentOutline(); - } catch (ex) { - if (ex instanceof _core_utils.MissingDataException) { - throw ex; - } + newXref.set("Index", indexes);
- (0, _util.warn)("Unable to read document outline."); - } + if (Array.isArray(xrefInfo.fileIds) && xrefInfo.fileIds.length > 0) { + const md5 = computeMD5(baseOffset, xrefInfo); + newXref.set("ID", [xrefInfo.fileIds[0], md5]); + }
- return (0, _util.shadow)(this, "documentOutline", obj); - } - - _readDocumentOutline() { - let obj = this._catDict.get("Outlines"); - - if (!(obj instanceof _primitives.Dict)) { - return null; - } - - obj = obj.getRaw("First"); + const offsetSize = Math.ceil(Math.log2(maxOffset) / 8); + const sizes = [1, offsetSize, 2]; + const structSize = sizes[0] + sizes[1] + sizes[2]; + const tableLength = structSize * xrefTableData.length; + newXref.set("W", sizes); + newXref.set("Length", tableLength); + buffer.push(`${refForXrefTable.num} ${refForXrefTable.gen} obj\n`); + writeDict(newXref, buffer, null); + buffer.push(" stream\n"); + const bufferLen = buffer.reduce((a, str) => a + str.length, 0); + const footer = `\nendstream\nendobj\nstartxref\n${baseOffset}\n%%EOF\n`; + const array = new Uint8Array(originalData.length + bufferLen + tableLength + footer.length); + array.set(originalData); + let offset = originalData.length;
- if (!(obj instanceof _primitives.Ref)) { - return null; - } + for (const str of buffer) { + writeString(str, offset, array); + offset += str.length; + }
- const root = { - items: [] - }; - const queue = [{ - obj, - parent: root - }]; - const processed = new _primitives.RefSet(); - processed.put(obj); - const xref = this.xref, - blackColor = new Uint8ClampedArray(3); + for (const [type, objOffset, gen] of xrefTableData) { + offset = writeInt(type, sizes[0], offset, array); + offset = writeInt(objOffset, sizes[1], offset, array); + offset = writeInt(gen, sizes[2], offset, array); + }
- while (queue.length > 0) { - const i = queue.shift(); - const outlineDict = xref.fetchIfRef(i.obj); + writeString(footer, offset, array); + return array; +}
- if (outlineDict === null) { - continue; - } +/***/ }), +/* 66 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
- if (!outlineDict.has("Title")) { - throw new _util.FormatError("Invalid outline item encountered."); - }
- const data = { - url: null, - dest: null - }; - Catalog.parseDestDictionary({ - destDict: outlineDict, - resultObj: data, - docBaseUrl: this.pdfManager.docBaseUrl - }); - const title = outlineDict.get("Title"); - const flags = outlineDict.get("F") || 0; - const color = outlineDict.getArray("C"); - const count = outlineDict.get("Count"); - let rgbColor = blackColor;
- if (Array.isArray(color) && color.length === 3 && (color[0] !== 0 || color[1] !== 0 || color[2] !== 0)) { - rgbColor = _colorspace.ColorSpace.singletons.rgb.getRgb(color, 0); - } +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.XMLParserErrorCode = exports.XMLParserBase = exports.SimpleXMLParser = exports.SimpleDOMNode = void 0;
- const outlineItem = { - dest: data.dest, - url: data.url, - unsafeUrl: data.unsafeUrl, - newWindow: data.newWindow, - title: (0, _util.stringToPDFString)(title), - color: rgbColor, - count: Number.isInteger(count) ? count : undefined, - bold: !!(flags & 2), - italic: !!(flags & 1), - items: [] - }; - i.parent.items.push(outlineItem); - obj = outlineDict.getRaw("First"); +var _core_utils = __w_pdfjs_require__(6);
- if (obj instanceof _primitives.Ref && !processed.has(obj)) { - queue.push({ - obj, - parent: outlineItem - }); - processed.put(obj); - } +const XMLParserErrorCode = { + NoError: 0, + EndOfDocument: -1, + UnterminatedCdat: -2, + UnterminatedXmlDeclaration: -3, + UnterminatedDoctypeDeclaration: -4, + UnterminatedComment: -5, + MalformedElement: -6, + OutOfMemory: -7, + UnterminatedAttributeValue: -8, + UnterminatedElement: -9, + ElementNeverBegun: -10 +}; +exports.XMLParserErrorCode = XMLParserErrorCode;
- obj = outlineDict.getRaw("Next"); +function isWhitespace(s, index) { + const ch = s[index]; + return ch === " " || ch === "\n" || ch === "\r" || ch === "\t"; +}
- if (obj instanceof _primitives.Ref && !processed.has(obj)) { - queue.push({ - obj, - parent: i.parent - }); - processed.put(obj); - } +function isWhitespaceString(s) { + for (let i = 0, ii = s.length; i < ii; i++) { + if (!isWhitespace(s, i)) { + return false; } - - return root.items.length > 0 ? root.items : null; }
- get permissions() { - let permissions = null; + return true; +}
- try { - permissions = this._readPermissions(); - } catch (ex) { - if (ex instanceof _core_utils.MissingDataException) { - throw ex; +class XMLParserBase { + _resolveEntities(s) { + return s.replace(/&([^;]+);/g, (all, entity) => { + if (entity.substring(0, 2) === "#x") { + return String.fromCodePoint(parseInt(entity.substring(2), 16)); + } else if (entity.substring(0, 1) === "#") { + return String.fromCodePoint(parseInt(entity.substring(1), 10)); }
- (0, _util.warn)("Unable to read permissions."); - } - - return (0, _util.shadow)(this, "permissions", permissions); - } + switch (entity) { + case "lt": + return "<";
- _readPermissions() { - const encrypt = this.xref.trailer.get("Encrypt"); + case "gt": + return ">";
- if (!(encrypt instanceof _primitives.Dict)) { - return null; - } + case "amp": + return "&";
- let flags = encrypt.get("P"); + case "quot": + return '"';
- if (typeof flags !== "number") { - return null; - } + case "apos": + return "'"; + }
- flags += 2 ** 32; - const permissions = []; + return this.onResolveEntity(entity); + }); + }
- for (const key in _util.PermissionFlag) { - const value = _util.PermissionFlag[key]; + _parseContent(s, start) { + const attributes = []; + let pos = start;
- if (flags & value) { - permissions.push(value); + function skipWs() { + while (pos < s.length && isWhitespace(s, pos)) { + ++pos; } }
- return permissions; - } + while (pos < s.length && !isWhitespace(s, pos) && s[pos] !== ">" && s[pos] !== "/") { + ++pos; + }
- get optionalContentConfig() { - let config = null; + const name = s.substring(start, pos); + skipWs();
- try { - const properties = this._catDict.get("OCProperties"); + while (pos < s.length && s[pos] !== ">" && s[pos] !== "/" && s[pos] !== "?") { + skipWs(); + let attrName = "", + attrValue = "";
- if (!properties) { - return (0, _util.shadow)(this, "optionalContentConfig", null); + while (pos < s.length && !isWhitespace(s, pos) && s[pos] !== "=") { + attrName += s[pos]; + ++pos; }
- const defaultConfig = properties.get("D"); + skipWs();
- if (!defaultConfig) { - return (0, _util.shadow)(this, "optionalContentConfig", null); + if (s[pos] !== "=") { + return null; }
- const groupsData = properties.get("OCGs"); + ++pos; + skipWs(); + const attrEndChar = s[pos];
- if (!Array.isArray(groupsData)) { - return (0, _util.shadow)(this, "optionalContentConfig", null); + if (attrEndChar !== '"' && attrEndChar !== "'") { + return null; }
- const groups = []; - const groupRefs = []; - - for (const groupRef of groupsData) { - if (!(groupRef instanceof _primitives.Ref)) { - continue; - } - - groupRefs.push(groupRef); - const group = this.xref.fetchIfRef(groupRef); - groups.push({ - id: groupRef.toString(), - name: typeof group.get("Name") === "string" ? (0, _util.stringToPDFString)(group.get("Name")) : null, - intent: typeof group.get("Intent") === "string" ? (0, _util.stringToPDFString)(group.get("Intent")) : null - }); - } + const attrEndIndex = s.indexOf(attrEndChar, ++pos);
- config = this._readOptionalContentConfig(defaultConfig, groupRefs); - config.groups = groups; - } catch (ex) { - if (ex instanceof _core_utils.MissingDataException) { - throw ex; + if (attrEndIndex < 0) { + return null; }
- (0, _util.warn)(`Unable to read optional content config: ${ex}`); + attrValue = s.substring(pos, attrEndIndex); + attributes.push({ + name: attrName, + value: this._resolveEntities(attrValue) + }); + pos = attrEndIndex + 1; + skipWs(); }
- return (0, _util.shadow)(this, "optionalContentConfig", config); + return { + name, + attributes, + parsed: pos - start + }; }
- _readOptionalContentConfig(config, contentGroupRefs) { - function parseOnOff(refs) { - const onParsed = []; - - if (Array.isArray(refs)) { - for (const value of refs) { - if (!(value instanceof _primitives.Ref)) { - continue; - } + _parseProcessingInstruction(s, start) { + let pos = start;
- if (contentGroupRefs.includes(value)) { - onParsed.push(value.toString()); - } - } + function skipWs() { + while (pos < s.length && isWhitespace(s, pos)) { + ++pos; } + }
- return onParsed; + while (pos < s.length && !isWhitespace(s, pos) && s[pos] !== ">" && s[pos] !== "?" && s[pos] !== "/") { + ++pos; }
- function parseOrder(refs, nestedLevels = 0) { - if (!Array.isArray(refs)) { - return null; - } + const name = s.substring(start, pos); + skipWs(); + const attrStart = pos;
- const order = []; + while (pos < s.length && (s[pos] !== "?" || s[pos + 1] !== ">")) { + ++pos; + }
- for (const value of refs) { - if (value instanceof _primitives.Ref && contentGroupRefs.includes(value)) { - parsedOrderRefs.put(value); - order.push(value.toString()); - continue; - } + const value = s.substring(attrStart, pos); + return { + name, + value, + parsed: pos - start + }; + }
- const nestedOrder = parseNestedOrder(value, nestedLevels); + parseXml(s) { + let i = 0;
- if (nestedOrder) { - order.push(nestedOrder); - } - } + while (i < s.length) { + const ch = s[i]; + let j = i;
- if (nestedLevels > 0) { - return order; - } + if (ch === "<") { + ++j; + const ch2 = s[j]; + let q;
- const hiddenGroups = []; + switch (ch2) { + case "/": + ++j; + q = s.indexOf(">", j);
- for (const groupRef of contentGroupRefs) { - if (parsedOrderRefs.has(groupRef)) { - continue; - } + if (q < 0) { + this.onError(XMLParserErrorCode.UnterminatedElement); + return; + }
- hiddenGroups.push(groupRef.toString()); - } + this.onEndElement(s.substring(j, q)); + j = q + 1; + break;
- if (hiddenGroups.length) { - order.push({ - name: null, - order: hiddenGroups - }); - } + case "?": + ++j;
- return order; - } + const pi = this._parseProcessingInstruction(s, j);
- function parseNestedOrder(ref, nestedLevels) { - if (++nestedLevels > MAX_NESTED_LEVELS) { - (0, _util.warn)("parseNestedOrder - reached MAX_NESTED_LEVELS."); - return null; - } + if (s.substring(j + pi.parsed, j + pi.parsed + 2) !== "?>") { + this.onError(XMLParserErrorCode.UnterminatedXmlDeclaration); + return; + }
- const value = xref.fetchIfRef(ref); + this.onPi(pi.name, pi.value); + j += pi.parsed + 2; + break;
- if (!Array.isArray(value)) { - return null; - } + case "!": + if (s.substring(j + 1, j + 3) === "--") { + q = s.indexOf("-->", j + 3);
- const nestedName = xref.fetchIfRef(value[0]); + if (q < 0) { + this.onError(XMLParserErrorCode.UnterminatedComment); + return; + }
- if (typeof nestedName !== "string") { - return null; - } + this.onComment(s.substring(j + 3, q)); + j = q + 3; + } else if (s.substring(j + 1, j + 8) === "[CDATA[") { + q = s.indexOf("]]>", j + 8);
- const nestedOrder = parseOrder(value.slice(1), nestedLevels); + if (q < 0) { + this.onError(XMLParserErrorCode.UnterminatedCdat); + return; + }
- if (!nestedOrder || !nestedOrder.length) { - return null; - } + this.onCdata(s.substring(j + 8, q)); + j = q + 3; + } else if (s.substring(j + 1, j + 8) === "DOCTYPE") { + const q2 = s.indexOf("[", j + 8); + let complexDoctype = false; + q = s.indexOf(">", j + 8);
- return { - name: (0, _util.stringToPDFString)(nestedName), - order: nestedOrder - }; - } + if (q < 0) { + this.onError(XMLParserErrorCode.UnterminatedDoctypeDeclaration); + return; + }
- const xref = this.xref, - parsedOrderRefs = new _primitives.RefSet(), - MAX_NESTED_LEVELS = 10; - return { - name: typeof config.get("Name") === "string" ? (0, _util.stringToPDFString)(config.get("Name")) : null, - creator: typeof config.get("Creator") === "string" ? (0, _util.stringToPDFString)(config.get("Creator")) : null, - baseState: config.get("BaseState") instanceof _primitives.Name ? config.get("BaseState").name : null, - on: parseOnOff(config.get("ON")), - off: parseOnOff(config.get("OFF")), - order: parseOrder(config.get("Order")), - groups: null - }; - } + if (q2 > 0 && q > q2) { + q = s.indexOf("]>", j + 8);
- setActualNumPages(num = null) { - this._actualNumPages = num; - } + if (q < 0) { + this.onError(XMLParserErrorCode.UnterminatedDoctypeDeclaration); + return; + }
- get hasActualNumPages() { - return this._actualNumPages !== null; - } + complexDoctype = true; + }
- get _pagesCount() { - const obj = this.toplevelPagesDict.get("Count"); + const doctypeContent = s.substring(j + 8, q + (complexDoctype ? 1 : 0)); + this.onDoctype(doctypeContent); + j = q + (complexDoctype ? 2 : 1); + } else { + this.onError(XMLParserErrorCode.MalformedElement); + return; + }
- if (!Number.isInteger(obj)) { - throw new _util.FormatError("Page count in top-level pages dictionary is not an integer."); - } + break;
- return (0, _util.shadow)(this, "_pagesCount", obj); - } + default: + const content = this._parseContent(s, j);
- get numPages() { - return this.hasActualNumPages ? this._actualNumPages : this._pagesCount; - } + if (content === null) { + this.onError(XMLParserErrorCode.MalformedElement); + return; + }
- get destinations() { - const obj = this._readDests(), - dests = Object.create(null); + let isClosed = false;
- if (obj instanceof _name_number_tree.NameTree) { - for (const [key, value] of obj.getAll()) { - const dest = fetchDestination(value); + if (s.substring(j + content.parsed, j + content.parsed + 2) === "/>") { + isClosed = true; + } else if (s.substring(j + content.parsed, j + content.parsed + 1) !== ">") { + this.onError(XMLParserErrorCode.UnterminatedElement); + return; + }
- if (dest) { - dests[(0, _util.stringToPDFString)(key)] = dest; + this.onBeginElement(content.name, content.attributes, isClosed); + j += content.parsed + (isClosed ? 2 : 1); + break; + } + } else { + while (j < s.length && s[j] !== "<") { + j++; } + + const text = s.substring(i, j); + this.onText(this._resolveEntities(text)); } - } else if (obj instanceof _primitives.Dict) { - obj.forEach(function (key, value) { - const dest = fetchDestination(value);
- if (dest) { - dests[key] = dest; - } - }); + i = j; } + }
- return (0, _util.shadow)(this, "destinations", dests); + onResolveEntity(name) { + return `&${name};`; }
- getDestination(id) { - const obj = this._readDests(); + onPi(name, value) {}
- if (obj instanceof _name_number_tree.NameTree) { - const dest = fetchDestination(obj.get(id)); + onComment(text) {}
- if (dest) { - return dest; - } + onCdata(text) {}
- const allDest = this.destinations[id]; + onDoctype(doctypeContent) {}
- if (allDest) { - (0, _util.warn)(`Found "${id}" at an incorrect position in the NameTree.`); - return allDest; - } - } else if (obj instanceof _primitives.Dict) { - const dest = fetchDestination(obj.get(id)); + onText(text) {}
- if (dest) { - return dest; - } - } + onBeginElement(name, attributes, isEmpty) {}
- return null; - } + onEndElement(name) {}
- _readDests() { - const obj = this._catDict.get("Names"); + onError(code) {}
- if (obj && obj.has("Dests")) { - return new _name_number_tree.NameTree(obj.getRaw("Dests"), this.xref); - } else if (this._catDict.has("Dests")) { - return this._catDict.get("Dests"); - } +}
- return undefined; +exports.XMLParserBase = XMLParserBase; + +class SimpleDOMNode { + constructor(nodeName, nodeValue) { + this.nodeName = nodeName; + this.nodeValue = nodeValue; + Object.defineProperty(this, "parentNode", { + value: null, + writable: true + }); }
- get pageLabels() { - let obj = null; + get firstChild() { + return this.childNodes && this.childNodes[0]; + }
- try { - obj = this._readPageLabels(); - } catch (ex) { - if (ex instanceof _core_utils.MissingDataException) { - throw ex; - } + get nextSibling() { + const childNodes = this.parentNode.childNodes;
- (0, _util.warn)("Unable to read page labels."); + if (!childNodes) { + return undefined; }
- return (0, _util.shadow)(this, "pageLabels", obj); - } + const index = childNodes.indexOf(this);
- _readPageLabels() { - const obj = this._catDict.getRaw("PageLabels"); + if (index === -1) { + return undefined; + }
- if (!obj) { - return null; + return childNodes[index + 1]; + } + + get textContent() { + if (!this.childNodes) { + return this.nodeValue || ""; }
- const pageLabels = new Array(this.numPages); - let style = null, - prefix = ""; - const numberTree = new _name_number_tree.NumberTree(obj, this.xref); - const nums = numberTree.getAll(); - let currentLabel = "", - currentIndex = 1; + return this.childNodes.map(function (child) { + return child.textContent; + }).join(""); + }
- for (let i = 0, ii = this.numPages; i < ii; i++) { - const labelDict = nums.get(i); + get children() { + return this.childNodes || []; + }
- if (labelDict !== undefined) { - if (!(labelDict instanceof _primitives.Dict)) { - throw new _util.FormatError("PageLabel is not a dictionary."); - } + hasChildNodes() { + return this.childNodes && this.childNodes.length > 0; + }
- if (labelDict.has("Type") && !(0, _primitives.isName)(labelDict.get("Type"), "PageLabel")) { - throw new _util.FormatError("Invalid type in PageLabel dictionary."); - } + searchNode(paths, pos) { + if (pos >= paths.length) { + return this; + }
- if (labelDict.has("S")) { - const s = labelDict.get("S"); + const component = paths[pos]; + const stack = []; + let node = this;
- if (!(s instanceof _primitives.Name)) { - throw new _util.FormatError("Invalid style in PageLabel dictionary."); - } + while (true) { + if (component.name === node.nodeName) { + if (component.pos === 0) { + const res = node.searchNode(paths, pos + 1);
- style = s.name; + if (res !== null) { + return res; + } + } else if (stack.length === 0) { + return null; } else { - style = null; - } + const [parent] = stack.pop(); + let siblingPos = 0;
- if (labelDict.has("P")) { - const p = labelDict.get("P"); + for (const child of parent.childNodes) { + if (component.name === child.nodeName) { + if (siblingPos === component.pos) { + return child.searchNode(paths, pos + 1); + }
- if (typeof p !== "string") { - throw new _util.FormatError("Invalid prefix in PageLabel dictionary."); + siblingPos++; + } }
- prefix = (0, _util.stringToPDFString)(p); - } else { - prefix = ""; + return node.searchNode(paths, pos + 1); } + }
- if (labelDict.has("St")) { - const st = labelDict.get("St"); + if (node.childNodes && node.childNodes.length !== 0) { + stack.push([node, 0]); + node = node.childNodes[0]; + } else if (stack.length === 0) { + return null; + } else { + while (stack.length !== 0) { + const [parent, currentPos] = stack.pop(); + const newPos = currentPos + 1;
- if (!(Number.isInteger(st) && st >= 1)) { - throw new _util.FormatError("Invalid start in PageLabel dictionary."); + if (newPos < parent.childNodes.length) { + stack.push([parent, newPos]); + node = parent.childNodes[newPos]; + break; } + }
- currentIndex = st; - } else { - currentIndex = 1; + if (stack.length === 0) { + return null; } } + } + }
- switch (style) { - case "D": - currentLabel = currentIndex; - break; + dump(buffer) { + if (this.nodeName === "#text") { + buffer.push((0, _core_utils.encodeToXmlString)(this.nodeValue)); + return; + }
- case "R": - case "r": - currentLabel = (0, _core_utils.toRomanNumerals)(currentIndex, style === "r"); - break; + buffer.push(`<${this.nodeName}`);
- case "A": - case "a": - const LIMIT = 26; - const A_UPPER_CASE = 0x41, - A_LOWER_CASE = 0x61; - const baseCharCode = style === "a" ? A_LOWER_CASE : A_UPPER_CASE; - const letterIndex = currentIndex - 1; - const character = String.fromCharCode(baseCharCode + letterIndex % LIMIT); - currentLabel = character.repeat(Math.floor(letterIndex / LIMIT) + 1); - break; + if (this.attributes) { + for (const attribute of this.attributes) { + buffer.push(` ${attribute.name}="${(0, _core_utils.encodeToXmlString)(attribute.value)}"`); + } + }
- default: - if (style) { - throw new _util.FormatError(`Invalid style "${style}" in PageLabel dictionary.`); - } + if (this.hasChildNodes()) { + buffer.push(">");
- currentLabel = ""; + for (const child of this.childNodes) { + child.dump(buffer); }
- pageLabels[i] = prefix + currentLabel; - currentIndex++; + buffer.push(`</${this.nodeName}>`); + } else if (this.nodeValue) { + buffer.push(`>${(0, _core_utils.encodeToXmlString)(this.nodeValue)}</${this.nodeName}>`); + } else { + buffer.push("/>"); } - - return pageLabels; }
- get pageLayout() { - const obj = this._catDict.get("PageLayout"); - - let pageLayout = ""; +}
- if (obj instanceof _primitives.Name) { - switch (obj.name) { - case "SinglePage": - case "OneColumn": - case "TwoColumnLeft": - case "TwoColumnRight": - case "TwoPageLeft": - case "TwoPageRight": - pageLayout = obj.name; - } - } +exports.SimpleDOMNode = SimpleDOMNode;
- return (0, _util.shadow)(this, "pageLayout", pageLayout); +class SimpleXMLParser extends XMLParserBase { + constructor({ + hasAttributes = false, + lowerCaseName = false + }) { + super(); + this._currentFragment = null; + this._stack = null; + this._errorCode = XMLParserErrorCode.NoError; + this._hasAttributes = hasAttributes; + this._lowerCaseName = lowerCaseName; }
- get pageMode() { - const obj = this._catDict.get("PageMode"); + parseFromString(data) { + this._currentFragment = []; + this._stack = []; + this._errorCode = XMLParserErrorCode.NoError; + this.parseXml(data);
- let pageMode = "UseNone"; + if (this._errorCode !== XMLParserErrorCode.NoError) { + return undefined; + }
- if (obj instanceof _primitives.Name) { - switch (obj.name) { - case "UseNone": - case "UseOutlines": - case "UseThumbs": - case "FullScreen": - case "UseOC": - case "UseAttachments": - pageMode = obj.name; - } + const [documentElement] = this._currentFragment; + + if (!documentElement) { + return undefined; }
- return (0, _util.shadow)(this, "pageMode", pageMode); + return { + documentElement + }; }
- get viewerPreferences() { - const obj = this._catDict.get("ViewerPreferences"); - - if (!(obj instanceof _primitives.Dict)) { - return (0, _util.shadow)(this, "viewerPreferences", null); + onText(text) { + if (isWhitespaceString(text)) { + return; }
- let prefs = null; + const node = new SimpleDOMNode("#text", text);
- for (const key of obj.getKeys()) { - const value = obj.get(key); - let prefValue; + this._currentFragment.push(node); + }
- switch (key) { - case "HideToolbar": - case "HideMenubar": - case "HideWindowUI": - case "FitWindow": - case "CenterWindow": - case "DisplayDocTitle": - case "PickTrayByPDFSize": - if (typeof value === "boolean") { - prefValue = value; - } + onCdata(text) { + const node = new SimpleDOMNode("#text", text);
- break; + this._currentFragment.push(node); + }
- case "NonFullScreenPageMode": - if (value instanceof _primitives.Name) { - switch (value.name) { - case "UseNone": - case "UseOutlines": - case "UseThumbs": - case "UseOC": - prefValue = value.name; - break; + onBeginElement(name, attributes, isEmpty) { + if (this._lowerCaseName) { + name = name.toLowerCase(); + }
- default: - prefValue = "UseNone"; - } - } + const node = new SimpleDOMNode(name); + node.childNodes = [];
- break; + if (this._hasAttributes) { + node.attributes = attributes; + }
- case "Direction": - if (value instanceof _primitives.Name) { - switch (value.name) { - case "L2R": - case "R2L": - prefValue = value.name; - break; + this._currentFragment.push(node);
- default: - prefValue = "L2R"; - } - } + if (isEmpty) { + return; + }
- break; + this._stack.push(this._currentFragment);
- case "ViewArea": - case "ViewClip": - case "PrintArea": - case "PrintClip": - if (value instanceof _primitives.Name) { - switch (value.name) { - case "MediaBox": - case "CropBox": - case "BleedBox": - case "TrimBox": - case "ArtBox": - prefValue = value.name; - break; + this._currentFragment = node.childNodes; + }
- default: - prefValue = "CropBox"; - } - } + onEndElement(name) { + this._currentFragment = this._stack.pop() || [];
- break; + const lastElement = this._currentFragment.at(-1);
- case "PrintScaling": - if (value instanceof _primitives.Name) { - switch (value.name) { - case "None": - case "AppDefault": - prefValue = value.name; - break; + if (!lastElement) { + return null; + }
- default: - prefValue = "AppDefault"; - } - } + for (let i = 0, ii = lastElement.childNodes.length; i < ii; i++) { + lastElement.childNodes[i].parentNode = lastElement; + }
- break; + return lastElement; + }
- case "Duplex": - if (value instanceof _primitives.Name) { - switch (value.name) { - case "Simplex": - case "DuplexFlipShortEdge": - case "DuplexFlipLongEdge": - prefValue = value.name; - break; + onError(code) { + this._errorCode = code; + }
- default: - prefValue = "None"; - } - } +}
- break; +exports.SimpleXMLParser = SimpleXMLParser;
- case "PrintPageRange": - if (Array.isArray(value) && value.length % 2 === 0) { - const isValid = value.every((page, i, arr) => { - return Number.isInteger(page) && page > 0 && (i === 0 || page >= arr[i - 1]) && page <= this.numPages; - }); +/***/ }), +/* 67 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
- if (isValid) { - prefValue = value; - } - }
- break;
- case "NumCopies": - if (Number.isInteger(value) && value > 0) { - prefValue = value; - } +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.calculateSHA256 = exports.calculateMD5 = exports.PDF20 = exports.PDF17 = exports.CipherTransformFactory = exports.ARCFourCipher = exports.AES256Cipher = exports.AES128Cipher = void 0; +exports.calculateSHA384 = calculateSHA384; +exports.calculateSHA512 = void 0;
- break; +var _util = __w_pdfjs_require__(2);
- default: - (0, _util.warn)(`Ignoring non-standard key in ViewerPreferences: ${key}.`); - continue; - } +var _primitives = __w_pdfjs_require__(5);
- if (prefValue === undefined) { - (0, _util.warn)(`Bad value, for key "${key}", in ViewerPreferences: ${value}.`); - continue; - } +var _decrypt_stream = __w_pdfjs_require__(68);
- if (!prefs) { - prefs = Object.create(null); - } +class ARCFourCipher { + constructor(key) { + this.a = 0; + this.b = 0; + const s = new Uint8Array(256); + const keyLength = key.length;
- prefs[key] = prefValue; + for (let i = 0; i < 256; ++i) { + s[i] = i; }
- return (0, _util.shadow)(this, "viewerPreferences", prefs); - } - - get openAction() { - const obj = this._catDict.get("OpenAction"); + for (let i = 0, j = 0; i < 256; ++i) { + const tmp = s[i]; + j = j + tmp + key[i % keyLength] & 0xff; + s[i] = s[j]; + s[j] = tmp; + }
- const openAction = Object.create(null); + this.s = s; + }
- if (obj instanceof _primitives.Dict) { - const destDict = new _primitives.Dict(this.xref); - destDict.set("A", obj); - const resultObj = { - url: null, - dest: null, - action: null - }; - Catalog.parseDestDictionary({ - destDict, - resultObj - }); + encryptBlock(data) { + let a = this.a, + b = this.b; + const s = this.s; + const n = data.length; + const output = new Uint8Array(n);
- if (Array.isArray(resultObj.dest)) { - openAction.dest = resultObj.dest; - } else if (resultObj.action) { - openAction.action = resultObj.action; - } - } else if (Array.isArray(obj)) { - openAction.dest = obj; + for (let i = 0; i < n; ++i) { + a = a + 1 & 0xff; + const tmp = s[a]; + b = b + tmp & 0xff; + const tmp2 = s[b]; + s[a] = tmp2; + s[b] = tmp; + output[i] = data[i] ^ s[tmp + tmp2 & 0xff]; }
- return (0, _util.shadow)(this, "openAction", (0, _util.objectSize)(openAction) > 0 ? openAction : null); + this.a = a; + this.b = b; + return output; }
- get attachments() { - const obj = this._catDict.get("Names"); - - let attachments = null; + decryptBlock(data) { + return this.encryptBlock(data); + }
- if (obj instanceof _primitives.Dict && obj.has("EmbeddedFiles")) { - const nameTree = new _name_number_tree.NameTree(obj.getRaw("EmbeddedFiles"), this.xref); + encrypt(data) { + return this.encryptBlock(data); + }
- for (const [key, value] of nameTree.getAll()) { - const fs = new _file_spec.FileSpec(value, this.xref); +}
- if (!attachments) { - attachments = Object.create(null); - } +exports.ARCFourCipher = ARCFourCipher;
- attachments[(0, _util.stringToPDFString)(key)] = fs.serializable; - } - } - - return (0, _util.shadow)(this, "attachments", attachments); - } - - get xfaImages() { - const obj = this._catDict.get("Names"); - - let xfaImages = null; - - if (obj instanceof _primitives.Dict && obj.has("XFAImages")) { - const nameTree = new _name_number_tree.NameTree(obj.getRaw("XFAImages"), this.xref); +const calculateMD5 = function calculateMD5Closure() { + const r = new Uint8Array([7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20, 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23, 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21]); + const k = new Int32Array([-680876936, -389564586, 606105819, -1044525330, -176418897, 1200080426, -1473231341, -45705983, 1770035416, -1958414417, -42063, -1990404162, 1804603682, -40341101, -1502002290, 1236535329, -165796510, -1069501632, 643717713, -373897302, -701558691, 38016083, -660478335, -405537848, 568446438, -1019803690, -187363961, 1163531501, -1444681467, -51403784, 1735328473, -1926607734, -378558, -2022574463, 1839030562, -35309556, -1530992060, 1272893353, -155497632, - [...]
- for (const [key, value] of nameTree.getAll()) { - if (!xfaImages) { - xfaImages = new _primitives.Dict(this.xref); - } + function hash(data, offset, length) { + let h0 = 1732584193, + h1 = -271733879, + h2 = -1732584194, + h3 = 271733878; + const paddedLength = length + 72 & ~63; + const padded = new Uint8Array(paddedLength); + let i, j;
- xfaImages.set((0, _util.stringToPDFString)(key), value); - } + for (i = 0; i < length; ++i) { + padded[i] = data[offset++]; }
- return (0, _util.shadow)(this, "xfaImages", xfaImages); - } - - _collectJavaScript() { - const obj = this._catDict.get("Names"); + padded[i++] = 0x80; + const n = paddedLength - 8;
- let javaScript = null; + while (i < n) { + padded[i++] = 0; + }
- function appendIfJavaScriptDict(name, jsDict) { - if (!(jsDict instanceof _primitives.Dict)) { - return; - } + padded[i++] = length << 3 & 0xff; + padded[i++] = length >> 5 & 0xff; + padded[i++] = length >> 13 & 0xff; + padded[i++] = length >> 21 & 0xff; + padded[i++] = length >>> 29 & 0xff; + padded[i++] = 0; + padded[i++] = 0; + padded[i++] = 0; + const w = new Int32Array(16);
- if (!(0, _primitives.isName)(jsDict.get("S"), "JavaScript")) { - return; + for (i = 0; i < paddedLength;) { + for (j = 0; j < 16; ++j, i += 4) { + w[j] = padded[i] | padded[i + 1] << 8 | padded[i + 2] << 16 | padded[i + 3] << 24; }
- let js = jsDict.get("JS"); + let a = h0, + b = h1, + c = h2, + d = h3, + f, + g;
- if (js instanceof _base_stream.BaseStream) { - js = js.getString(); - } else if (typeof js !== "string") { - return; - } + for (j = 0; j < 64; ++j) { + if (j < 16) { + f = b & c | ~b & d; + g = j; + } else if (j < 32) { + f = d & b | ~d & c; + g = 5 * j + 1 & 15; + } else if (j < 48) { + f = b ^ c ^ d; + g = 3 * j + 5 & 15; + } else { + f = c ^ (b | ~d); + g = 7 * j & 15; + }
- if (javaScript === null) { - javaScript = new Map(); + const tmp = d, + rotateArg = a + f + k[j] + w[g] | 0, + rotate = r[j]; + d = c; + c = b; + b = b + (rotateArg << rotate | rotateArg >>> 32 - rotate) | 0; + a = tmp; }
- javaScript.set(name, (0, _util.stringToPDFString)(js)); + h0 = h0 + a | 0; + h1 = h1 + b | 0; + h2 = h2 + c | 0; + h3 = h3 + d | 0; }
- if (obj instanceof _primitives.Dict && obj.has("JavaScript")) { - const nameTree = new _name_number_tree.NameTree(obj.getRaw("JavaScript"), this.xref); + return new Uint8Array([h0 & 0xFF, h0 >> 8 & 0xFF, h0 >> 16 & 0xFF, h0 >>> 24 & 0xFF, h1 & 0xFF, h1 >> 8 & 0xFF, h1 >> 16 & 0xFF, h1 >>> 24 & 0xFF, h2 & 0xFF, h2 >> 8 & 0xFF, h2 >> 16 & 0xFF, h2 >>> 24 & 0xFF, h3 & 0xFF, h3 >> 8 & 0xFF, h3 >> 16 & 0xFF, h3 >>> 24 & 0xFF]); + }
- for (const [key, value] of nameTree.getAll()) { - appendIfJavaScriptDict((0, _util.stringToPDFString)(key), value); - } - } + return hash; +}();
- const openAction = this._catDict.get("OpenAction"); +exports.calculateMD5 = calculateMD5;
- if (openAction) { - appendIfJavaScriptDict("OpenAction", openAction); - } +class Word64 { + constructor(highInteger, lowInteger) { + this.high = highInteger | 0; + this.low = lowInteger | 0; + }
- return javaScript; + and(word) { + this.high &= word.high; + this.low &= word.low; }
- get javaScript() { - const javaScript = this._collectJavaScript(); + xor(word) { + this.high ^= word.high; + this.low ^= word.low; + }
- return (0, _util.shadow)(this, "javaScript", javaScript ? [...javaScript.values()] : null); + or(word) { + this.high |= word.high; + this.low |= word.low; }
- get jsActions() { - const javaScript = this._collectJavaScript(); + shiftRight(places) { + if (places >= 32) { + this.low = this.high >>> places - 32 | 0; + this.high = 0; + } else { + this.low = this.low >>> places | this.high << 32 - places; + this.high = this.high >>> places | 0; + } + }
- let actions = (0, _core_utils.collectActions)(this.xref, this._catDict, _util.DocumentActionEventType); + shiftLeft(places) { + if (places >= 32) { + this.high = this.low << places - 32; + this.low = 0; + } else { + this.high = this.high << places | this.low >>> 32 - places; + this.low <<= places; + } + }
- if (javaScript) { - if (!actions) { - actions = Object.create(null); - } + rotateRight(places) { + let low, high;
- for (const [key, val] of javaScript) { - if (key in actions) { - actions[key].push(val); - } else { - actions[key] = [val]; - } - } + if (places & 32) { + high = this.low; + low = this.high; + } else { + low = this.low; + high = this.high; }
- return (0, _util.shadow)(this, "jsActions", actions); + places &= 31; + this.low = low >>> places | high << 32 - places; + this.high = high >>> places | low << 32 - places; }
- async fontFallback(id, handler) { - const translatedFonts = await Promise.all(this.fontCache); - - for (const translatedFont of translatedFonts) { - if (translatedFont.loadedName === id) { - translatedFont.fallback(handler); - return; - } - } + not() { + this.high = ~this.high; + this.low = ~this.low; }
- async cleanup(manuallyTriggered = false) { - (0, _cleanup_helper.clearGlobalCaches)(); - this.globalImageCache.clear(manuallyTriggered); - this.pageKidsCountCache.clear(); - this.pageIndexCache.clear(); - this.nonBlendModesSet.clear(); - const translatedFonts = await Promise.all(this.fontCache); + add(word) { + const lowAdd = (this.low >>> 0) + (word.low >>> 0); + let highAdd = (this.high >>> 0) + (word.high >>> 0);
- for (const { - dict - } of translatedFonts) { - delete dict.cacheKey; + if (lowAdd > 0xffffffff) { + highAdd += 1; }
- this.fontCache.clear(); - this.builtInCMapCache.clear(); - this.standardFontDataCache.clear(); + this.low = lowAdd | 0; + this.high = highAdd | 0; }
- async getPageDict(pageIndex) { - const nodesToVisit = [this.toplevelPagesDict]; - const visitedNodes = new _primitives.RefSet(); + copyTo(bytes, offset) { + bytes[offset] = this.high >>> 24 & 0xff; + bytes[offset + 1] = this.high >> 16 & 0xff; + bytes[offset + 2] = this.high >> 8 & 0xff; + bytes[offset + 3] = this.high & 0xff; + bytes[offset + 4] = this.low >>> 24 & 0xff; + bytes[offset + 5] = this.low >> 16 & 0xff; + bytes[offset + 6] = this.low >> 8 & 0xff; + bytes[offset + 7] = this.low & 0xff; + }
- const pagesRef = this._catDict.getRaw("Pages"); + assign(word) { + this.high = word.high; + this.low = word.low; + }
- if (pagesRef instanceof _primitives.Ref) { - visitedNodes.put(pagesRef); - } +}
- const xref = this.xref, - pageKidsCountCache = this.pageKidsCountCache, - pageIndexCache = this.pageIndexCache; - let currentPageIndex = 0; +const calculateSHA256 = function calculateSHA256Closure() { + function rotr(x, n) { + return x >>> n | x << 32 - n; + }
- while (nodesToVisit.length) { - const currentNode = nodesToVisit.pop(); + function ch(x, y, z) { + return x & y ^ ~x & z; + }
- if (currentNode instanceof _primitives.Ref) { - const count = pageKidsCountCache.get(currentNode); + function maj(x, y, z) { + return x & y ^ x & z ^ y & z; + }
- if (count >= 0 && currentPageIndex + count <= pageIndex) { - currentPageIndex += count; - continue; - } + function sigma(x) { + return rotr(x, 2) ^ rotr(x, 13) ^ rotr(x, 22); + }
- if (visitedNodes.has(currentNode)) { - throw new _util.FormatError("Pages tree contains circular reference."); - } + function sigmaPrime(x) { + return rotr(x, 6) ^ rotr(x, 11) ^ rotr(x, 25); + }
- visitedNodes.put(currentNode); - const obj = await xref.fetchAsync(currentNode); + function littleSigma(x) { + return rotr(x, 7) ^ rotr(x, 18) ^ x >>> 3; + }
- if (obj instanceof _primitives.Dict) { - let type = obj.getRaw("Type"); + function littleSigmaPrime(x) { + return rotr(x, 17) ^ rotr(x, 19) ^ x >>> 10; + }
- if (type instanceof _primitives.Ref) { - type = await xref.fetchAsync(type); - } + const k = [0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, [...]
- if ((0, _primitives.isName)(type, "Page") || !obj.has("Kids")) { - if (!pageKidsCountCache.has(currentNode)) { - pageKidsCountCache.put(currentNode, 1); - } + function hash(data, offset, length) { + let h0 = 0x6a09e667, + h1 = 0xbb67ae85, + h2 = 0x3c6ef372, + h3 = 0xa54ff53a, + h4 = 0x510e527f, + h5 = 0x9b05688c, + h6 = 0x1f83d9ab, + h7 = 0x5be0cd19; + const paddedLength = Math.ceil((length + 9) / 64) * 64; + const padded = new Uint8Array(paddedLength); + let i, j;
- if (!pageIndexCache.has(currentNode)) { - pageIndexCache.put(currentNode, currentPageIndex); - } + for (i = 0; i < length; ++i) { + padded[i] = data[offset++]; + }
- if (currentPageIndex === pageIndex) { - return [obj, currentNode]; - } + padded[i++] = 0x80; + const n = paddedLength - 8;
- currentPageIndex++; - continue; - } - } + while (i < n) { + padded[i++] = 0; + }
- nodesToVisit.push(obj); - continue; - } + padded[i++] = 0; + padded[i++] = 0; + padded[i++] = 0; + padded[i++] = length >>> 29 & 0xff; + padded[i++] = length >> 21 & 0xff; + padded[i++] = length >> 13 & 0xff; + padded[i++] = length >> 5 & 0xff; + padded[i++] = length << 3 & 0xff; + const w = new Uint32Array(64);
- if (!(currentNode instanceof _primitives.Dict)) { - throw new _util.FormatError("Page dictionary kid reference points to wrong type of object."); + for (i = 0; i < paddedLength;) { + for (j = 0; j < 16; ++j) { + w[j] = padded[i] << 24 | padded[i + 1] << 16 | padded[i + 2] << 8 | padded[i + 3]; + i += 4; }
- const { - objId - } = currentNode; - let count = currentNode.getRaw("Count"); - - if (count instanceof _primitives.Ref) { - count = await xref.fetchAsync(count); + for (j = 16; j < 64; ++j) { + w[j] = littleSigmaPrime(w[j - 2]) + w[j - 7] + littleSigma(w[j - 15]) + w[j - 16] | 0; }
- if (Number.isInteger(count) && count >= 0) { - if (objId && !pageKidsCountCache.has(objId)) { - pageKidsCountCache.put(objId, count); - } + let a = h0, + b = h1, + c = h2, + d = h3, + e = h4, + f = h5, + g = h6, + h = h7, + t1, + t2;
- if (currentPageIndex + count <= pageIndex) { - currentPageIndex += count; - continue; - } + for (j = 0; j < 64; ++j) { + t1 = h + sigmaPrime(e) + ch(e, f, g) + k[j] + w[j]; + t2 = sigma(a) + maj(a, b, c); + h = g; + g = f; + f = e; + e = d + t1 | 0; + d = c; + c = b; + b = a; + a = t1 + t2 | 0; }
- let kids = currentNode.getRaw("Kids"); + h0 = h0 + a | 0; + h1 = h1 + b | 0; + h2 = h2 + c | 0; + h3 = h3 + d | 0; + h4 = h4 + e | 0; + h5 = h5 + f | 0; + h6 = h6 + g | 0; + h7 = h7 + h | 0; + }
- if (kids instanceof _primitives.Ref) { - kids = await xref.fetchAsync(kids); - } + return new Uint8Array([h0 >> 24 & 0xFF, h0 >> 16 & 0xFF, h0 >> 8 & 0xFF, h0 & 0xFF, h1 >> 24 & 0xFF, h1 >> 16 & 0xFF, h1 >> 8 & 0xFF, h1 & 0xFF, h2 >> 24 & 0xFF, h2 >> 16 & 0xFF, h2 >> 8 & 0xFF, h2 & 0xFF, h3 >> 24 & 0xFF, h3 >> 16 & 0xFF, h3 >> 8 & 0xFF, h3 & 0xFF, h4 >> 24 & 0xFF, h4 >> 16 & 0xFF, h4 >> 8 & 0xFF, h4 & 0xFF, h5 >> 24 & 0xFF, h5 >> 16 & 0xFF, h5 >> 8 & 0xFF, h5 & 0xFF, h6 >> 24 & 0xFF, h6 >> 16 & 0xFF, h6 >> 8 & 0xFF, h6 & 0xFF, h7 >> 24 & 0xFF, h7 >> 16 & 0xFF, h7 > [...] + }
- if (!Array.isArray(kids)) { - let type = currentNode.getRaw("Type"); + return hash; +}();
- if (type instanceof _primitives.Ref) { - type = await xref.fetchAsync(type); - } +exports.calculateSHA256 = calculateSHA256;
- if ((0, _primitives.isName)(type, "Page") || !currentNode.has("Kids")) { - if (currentPageIndex === pageIndex) { - return [currentNode, null]; - } +const calculateSHA512 = function calculateSHA512Closure() { + function ch(result, x, y, z, tmp) { + result.assign(x); + result.and(y); + tmp.assign(x); + tmp.not(); + tmp.and(z); + result.xor(tmp); + }
- currentPageIndex++; - continue; - } + function maj(result, x, y, z, tmp) { + result.assign(x); + result.and(y); + tmp.assign(x); + tmp.and(z); + result.xor(tmp); + tmp.assign(y); + tmp.and(z); + result.xor(tmp); + }
- throw new _util.FormatError("Page dictionary kids object is not an array."); - } + function sigma(result, x, tmp) { + result.assign(x); + result.rotateRight(28); + tmp.assign(x); + tmp.rotateRight(34); + result.xor(tmp); + tmp.assign(x); + tmp.rotateRight(39); + result.xor(tmp); + }
- for (let last = kids.length - 1; last >= 0; last--) { - nodesToVisit.push(kids[last]); - } - } + function sigmaPrime(result, x, tmp) { + result.assign(x); + result.rotateRight(14); + tmp.assign(x); + tmp.rotateRight(18); + result.xor(tmp); + tmp.assign(x); + tmp.rotateRight(41); + result.xor(tmp); + }
- throw new Error(`Page index ${pageIndex} not found.`); + function littleSigma(result, x, tmp) { + result.assign(x); + result.rotateRight(1); + tmp.assign(x); + tmp.rotateRight(8); + result.xor(tmp); + tmp.assign(x); + tmp.shiftRight(7); + result.xor(tmp); }
- async getAllPageDicts(recoveryMode = false) { - const queue = [{ - currentNode: this.toplevelPagesDict, - posInKids: 0 - }]; - const visitedNodes = new _primitives.RefSet(); + function littleSigmaPrime(result, x, tmp) { + result.assign(x); + result.rotateRight(19); + tmp.assign(x); + tmp.rotateRight(61); + result.xor(tmp); + tmp.assign(x); + tmp.shiftRight(6); + result.xor(tmp); + }
- const pagesRef = this._catDict.getRaw("Pages"); + const k = [new Word64(0x428a2f98, 0xd728ae22), new Word64(0x71374491, 0x23ef65cd), new Word64(0xb5c0fbcf, 0xec4d3b2f), new Word64(0xe9b5dba5, 0x8189dbbc), new Word64(0x3956c25b, 0xf348b538), new Word64(0x59f111f1, 0xb605d019), new Word64(0x923f82a4, 0xaf194f9b), new Word64(0xab1c5ed5, 0xda6d8118), new Word64(0xd807aa98, 0xa3030242), new Word64(0x12835b01, 0x45706fbe), new Word64(0x243185be, 0x4ee4b28c), new Word64(0x550c7dc3, 0xd5ffb4e2), new Word64(0x72be5d74, 0xf27b896f), new Word64( [...]
- if (pagesRef instanceof _primitives.Ref) { - visitedNodes.put(pagesRef); - } + function hash(data, offset, length, mode384 = false) { + let h0, h1, h2, h3, h4, h5, h6, h7;
- const map = new Map(), - xref = this.xref, - pageIndexCache = this.pageIndexCache; - let pageIndex = 0; + if (!mode384) { + h0 = new Word64(0x6a09e667, 0xf3bcc908); + h1 = new Word64(0xbb67ae85, 0x84caa73b); + h2 = new Word64(0x3c6ef372, 0xfe94f82b); + h3 = new Word64(0xa54ff53a, 0x5f1d36f1); + h4 = new Word64(0x510e527f, 0xade682d1); + h5 = new Word64(0x9b05688c, 0x2b3e6c1f); + h6 = new Word64(0x1f83d9ab, 0xfb41bd6b); + h7 = new Word64(0x5be0cd19, 0x137e2179); + } else { + h0 = new Word64(0xcbbb9d5d, 0xc1059ed8); + h1 = new Word64(0x629a292a, 0x367cd507); + h2 = new Word64(0x9159015a, 0x3070dd17); + h3 = new Word64(0x152fecd8, 0xf70e5939); + h4 = new Word64(0x67332667, 0xffc00b31); + h5 = new Word64(0x8eb44a87, 0x68581511); + h6 = new Word64(0xdb0c2e0d, 0x64f98fa7); + h7 = new Word64(0x47b5481d, 0xbefa4fa4); + }
- function addPageDict(pageDict, pageRef) { - if (pageRef && !pageIndexCache.has(pageRef)) { - pageIndexCache.put(pageRef, pageIndex); - } + const paddedLength = Math.ceil((length + 17) / 128) * 128; + const padded = new Uint8Array(paddedLength); + let i, j;
- map.set(pageIndex++, [pageDict, pageRef]); + for (i = 0; i < length; ++i) { + padded[i] = data[offset++]; }
- function addPageError(error) { - if (error instanceof _core_utils.XRefEntryException && !recoveryMode) { - throw error; - } + padded[i++] = 0x80; + const n = paddedLength - 16;
- map.set(pageIndex++, [error, null]); + while (i < n) { + padded[i++] = 0; }
- while (queue.length > 0) { - const queueItem = queue[queue.length - 1]; - const { - currentNode, - posInKids - } = queueItem; - let kids = currentNode.getRaw("Kids"); + padded[i++] = 0; + padded[i++] = 0; + padded[i++] = 0; + padded[i++] = 0; + padded[i++] = 0; + padded[i++] = 0; + padded[i++] = 0; + padded[i++] = 0; + padded[i++] = 0; + padded[i++] = 0; + padded[i++] = 0; + padded[i++] = length >>> 29 & 0xff; + padded[i++] = length >> 21 & 0xff; + padded[i++] = length >> 13 & 0xff; + padded[i++] = length >> 5 & 0xff; + padded[i++] = length << 3 & 0xff; + const w = new Array(80);
- if (kids instanceof _primitives.Ref) { - try { - kids = await xref.fetchAsync(kids); - } catch (ex) { - addPageError(ex); - break; - } - } + for (i = 0; i < 80; i++) { + w[i] = new Word64(0, 0); + }
- if (!Array.isArray(kids)) { - addPageError(new _util.FormatError("Page dictionary kids object is not an array.")); - break; + let a = new Word64(0, 0), + b = new Word64(0, 0), + c = new Word64(0, 0); + let d = new Word64(0, 0), + e = new Word64(0, 0), + f = new Word64(0, 0); + let g = new Word64(0, 0), + h = new Word64(0, 0); + const t1 = new Word64(0, 0), + t2 = new Word64(0, 0); + const tmp1 = new Word64(0, 0), + tmp2 = new Word64(0, 0); + let tmp3; + + for (i = 0; i < paddedLength;) { + for (j = 0; j < 16; ++j) { + w[j].high = padded[i] << 24 | padded[i + 1] << 16 | padded[i + 2] << 8 | padded[i + 3]; + w[j].low = padded[i + 4] << 24 | padded[i + 5] << 16 | padded[i + 6] << 8 | padded[i + 7]; + i += 8; }
- if (posInKids >= kids.length) { - queue.pop(); - continue; + for (j = 16; j < 80; ++j) { + tmp3 = w[j]; + littleSigmaPrime(tmp3, w[j - 2], tmp2); + tmp3.add(w[j - 7]); + littleSigma(tmp1, w[j - 15], tmp2); + tmp3.add(tmp1); + tmp3.add(w[j - 16]); }
- const kidObj = kids[posInKids]; - let obj; + a.assign(h0); + b.assign(h1); + c.assign(h2); + d.assign(h3); + e.assign(h4); + f.assign(h5); + g.assign(h6); + h.assign(h7);
- if (kidObj instanceof _primitives.Ref) { - if (visitedNodes.has(kidObj)) { - addPageError(new _util.FormatError("Pages tree contains circular reference.")); - break; - } + for (j = 0; j < 80; ++j) { + t1.assign(h); + sigmaPrime(tmp1, e, tmp2); + t1.add(tmp1); + ch(tmp1, e, f, g, tmp2); + t1.add(tmp1); + t1.add(k[j]); + t1.add(w[j]); + sigma(t2, a, tmp2); + maj(tmp1, a, b, c, tmp2); + t2.add(tmp1); + tmp3 = h; + h = g; + g = f; + f = e; + d.add(t1); + e = d; + d = c; + c = b; + b = a; + tmp3.assign(t1); + tmp3.add(t2); + a = tmp3; + }
- visitedNodes.put(kidObj); + h0.add(a); + h1.add(b); + h2.add(c); + h3.add(d); + h4.add(e); + h5.add(f); + h6.add(g); + h7.add(h); + }
- try { - obj = await xref.fetchAsync(kidObj); - } catch (ex) { - addPageError(ex); - break; - } - } else { - obj = kidObj; - } + let result;
- if (!(obj instanceof _primitives.Dict)) { - addPageError(new _util.FormatError("Page dictionary kid reference points to wrong type of object.")); - break; - } + if (!mode384) { + result = new Uint8Array(64); + h0.copyTo(result, 0); + h1.copyTo(result, 8); + h2.copyTo(result, 16); + h3.copyTo(result, 24); + h4.copyTo(result, 32); + h5.copyTo(result, 40); + h6.copyTo(result, 48); + h7.copyTo(result, 56); + } else { + result = new Uint8Array(48); + h0.copyTo(result, 0); + h1.copyTo(result, 8); + h2.copyTo(result, 16); + h3.copyTo(result, 24); + h4.copyTo(result, 32); + h5.copyTo(result, 40); + }
- let type = obj.getRaw("Type"); + return result; + }
- if (type instanceof _primitives.Ref) { - try { - type = await xref.fetchAsync(type); - } catch (ex) { - addPageError(ex); - break; - } - } + return hash; +}();
- if ((0, _primitives.isName)(type, "Page") || !obj.has("Kids")) { - addPageDict(obj, kidObj instanceof _primitives.Ref ? kidObj : null); - } else { - queue.push({ - currentNode: obj, - posInKids: 0 - }); - } +exports.calculateSHA512 = calculateSHA512;
- queueItem.posInKids++; - } +function calculateSHA384(data, offset, length) { + return calculateSHA512(data, offset, length, true); +}
- return map; +class NullCipher { + decryptBlock(data) { + return data; }
- getPageIndex(pageRef) { - const cachedPageIndex = this.pageIndexCache.get(pageRef); + encrypt(data) { + return data; + }
- if (cachedPageIndex !== undefined) { - return Promise.resolve(cachedPageIndex); +} + +class AESBaseCipher { + constructor() { + if (this.constructor === AESBaseCipher) { + (0, _util.unreachable)("Cannot initialize AESBaseCipher."); }
- const xref = this.xref; + this._s = new Uint8Array([0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76, 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0, 0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15, 0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75, 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, 0x52, 0x3b, 0xd6, 0xb3, 0x29, [...] + this._inv_s = new Uint8Array([0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38, 0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb, 0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87, 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb, 0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d, 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e, 0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2, 0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25, 0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xd4, 0xa4, 0x5c, 0xcc, 0x [...] + this._mix = new Uint32Array([0x00000000, 0x0e090d0b, 0x1c121a16, 0x121b171d, 0x3824342c, 0x362d3927, 0x24362e3a, 0x2a3f2331, 0x70486858, 0x7e416553, 0x6c5a724e, 0x62537f45, 0x486c5c74, 0x4665517f, 0x547e4662, 0x5a774b69, 0xe090d0b0, 0xee99ddbb, 0xfc82caa6, 0xf28bc7ad, 0xd8b4e49c, 0xd6bde997, 0xc4a6fe8a, 0xcaaff381, 0x90d8b8e8, 0x9ed1b5e3, 0x8ccaa2fe, 0x82c3aff5, 0xa8fc8cc4, 0xa6f581cf, 0xb4ee96d2, 0xbae79bd9, 0xdb3bbb7b, 0xd532b670, 0xc729a16d, 0xc920ac66, 0xe31f8f57, 0xed16825c, 0xf [...] + this._mixCol = new Uint8Array(256);
- function pagesBeforeRef(kidRef) { - let total = 0, - parentRef; - return xref.fetchAsync(kidRef).then(function (node) { - if ((0, _primitives.isRefsEqual)(kidRef, pageRef) && !(0, _primitives.isDict)(node, "Page") && !(node instanceof _primitives.Dict && !node.has("Type") && node.has("Contents"))) { - throw new _util.FormatError("The reference does not point to a /Page dictionary."); - } + for (let i = 0; i < 256; i++) { + if (i < 128) { + this._mixCol[i] = i << 1; + } else { + this._mixCol[i] = i << 1 ^ 0x1b; + } + }
- if (!node) { - return null; - } + this.buffer = new Uint8Array(16); + this.bufferPosition = 0; + }
- if (!(node instanceof _primitives.Dict)) { - throw new _util.FormatError("Node must be a dictionary."); - } + _expandKey(cipherKey) { + (0, _util.unreachable)("Cannot call `_expandKey` on the base class"); + }
- parentRef = node.getRaw("Parent"); - return node.getAsync("Parent"); - }).then(function (parent) { - if (!parent) { - return null; - } + _decrypt(input, key) { + let t, u, v; + const state = new Uint8Array(16); + state.set(input);
- if (!(parent instanceof _primitives.Dict)) { - throw new _util.FormatError("Parent must be a dictionary."); - } + for (let j = 0, k = this._keySize; j < 16; ++j, ++k) { + state[j] ^= key[k]; + }
- return parent.getAsync("Kids"); - }).then(function (kids) { - if (!kids) { - return null; - } + for (let i = this._cyclesOfRepetition - 1; i >= 1; --i) { + t = state[13]; + state[13] = state[9]; + state[9] = state[5]; + state[5] = state[1]; + state[1] = t; + t = state[14]; + u = state[10]; + state[14] = state[6]; + state[10] = state[2]; + state[6] = t; + state[2] = u; + t = state[15]; + u = state[11]; + v = state[7]; + state[15] = state[3]; + state[11] = t; + state[7] = u; + state[3] = v;
- const kidPromises = []; - let found = false; + for (let j = 0; j < 16; ++j) { + state[j] = this._inv_s[state[j]]; + }
- for (let i = 0, ii = kids.length; i < ii; i++) { - const kid = kids[i]; + for (let j = 0, k = i * 16; j < 16; ++j, ++k) { + state[j] ^= key[k]; + }
- if (!(kid instanceof _primitives.Ref)) { - throw new _util.FormatError("Kid must be a reference."); - } + for (let j = 0; j < 16; j += 4) { + const s0 = this._mix[state[j]]; + const s1 = this._mix[state[j + 1]]; + const s2 = this._mix[state[j + 2]]; + const s3 = this._mix[state[j + 3]]; + t = s0 ^ s1 >>> 8 ^ s1 << 24 ^ s2 >>> 16 ^ s2 << 16 ^ s3 >>> 24 ^ s3 << 8; + state[j] = t >>> 24 & 0xff; + state[j + 1] = t >> 16 & 0xff; + state[j + 2] = t >> 8 & 0xff; + state[j + 3] = t & 0xff; + } + }
- if ((0, _primitives.isRefsEqual)(kid, kidRef)) { - found = true; - break; - } + t = state[13]; + state[13] = state[9]; + state[9] = state[5]; + state[5] = state[1]; + state[1] = t; + t = state[14]; + u = state[10]; + state[14] = state[6]; + state[10] = state[2]; + state[6] = t; + state[2] = u; + t = state[15]; + u = state[11]; + v = state[7]; + state[15] = state[3]; + state[11] = t; + state[7] = u; + state[3] = v;
- kidPromises.push(xref.fetchAsync(kid).then(function (obj) { - if (!(obj instanceof _primitives.Dict)) { - throw new _util.FormatError("Kid node must be a dictionary."); - } + for (let j = 0; j < 16; ++j) { + state[j] = this._inv_s[state[j]]; + state[j] ^= key[j]; + }
- if (obj.has("Count")) { - total += obj.get("Count"); - } else { - total++; - } - })); - } + return state; + }
- if (!found) { - throw new _util.FormatError("Kid reference not found in parent's kids."); - } + _encrypt(input, key) { + const s = this._s; + let t, u, v; + const state = new Uint8Array(16); + state.set(input);
- return Promise.all(kidPromises).then(function () { - return [total, parentRef]; - }); - }); + for (let j = 0; j < 16; ++j) { + state[j] ^= key[j]; }
- let total = 0; - - const next = ref => pagesBeforeRef(ref).then(args => { - if (!args) { - this.pageIndexCache.put(pageRef, total); - return total; + for (let i = 1; i < this._cyclesOfRepetition; i++) { + for (let j = 0; j < 16; ++j) { + state[j] = s[state[j]]; }
- const [count, parentRef] = args; - total += count; - return next(parentRef); - }); + v = state[1]; + state[1] = state[5]; + state[5] = state[9]; + state[9] = state[13]; + state[13] = v; + v = state[2]; + u = state[6]; + state[2] = state[10]; + state[6] = state[14]; + state[10] = v; + state[14] = u; + v = state[3]; + u = state[7]; + t = state[11]; + state[3] = state[15]; + state[7] = v; + state[11] = u; + state[15] = t;
- return next(pageRef); - } + for (let j = 0; j < 16; j += 4) { + const s0 = state[j + 0]; + const s1 = state[j + 1]; + const s2 = state[j + 2]; + const s3 = state[j + 3]; + t = s0 ^ s1 ^ s2 ^ s3; + state[j + 0] ^= t ^ this._mixCol[s0 ^ s1]; + state[j + 1] ^= t ^ this._mixCol[s1 ^ s2]; + state[j + 2] ^= t ^ this._mixCol[s2 ^ s3]; + state[j + 3] ^= t ^ this._mixCol[s3 ^ s0]; + }
- get baseUrl() { - const uri = this._catDict.get("URI"); + for (let j = 0, k = i * 16; j < 16; ++j, ++k) { + state[j] ^= key[k]; + } + }
- if (uri instanceof _primitives.Dict) { - const base = uri.get("Base"); + for (let j = 0; j < 16; ++j) { + state[j] = s[state[j]]; + }
- if (typeof base === "string") { - const absoluteUrl = (0, _util.createValidAbsoluteUrl)(base, null, { - tryConvertEncoding: true - }); + v = state[1]; + state[1] = state[5]; + state[5] = state[9]; + state[9] = state[13]; + state[13] = v; + v = state[2]; + u = state[6]; + state[2] = state[10]; + state[6] = state[14]; + state[10] = v; + state[14] = u; + v = state[3]; + u = state[7]; + t = state[11]; + state[3] = state[15]; + state[7] = v; + state[11] = u; + state[15] = t;
- if (absoluteUrl) { - return (0, _util.shadow)(this, "baseUrl", absoluteUrl.href); - } - } + for (let j = 0, k = this._keySize; j < 16; ++j, ++k) { + state[j] ^= key[k]; }
- return (0, _util.shadow)(this, "baseUrl", null); + return state; }
- static parseDestDictionary(params) { - const destDict = params.destDict; + _decryptBlock2(data, finalize) { + const sourceLength = data.length; + let buffer = this.buffer, + bufferLength = this.bufferPosition; + const result = []; + let iv = this.iv;
- if (!(destDict instanceof _primitives.Dict)) { - (0, _util.warn)("parseDestDictionary: `destDict` must be a dictionary."); - return; + for (let i = 0; i < sourceLength; ++i) { + buffer[bufferLength] = data[i]; + ++bufferLength; + + if (bufferLength < 16) { + continue; + } + + const plain = this._decrypt(buffer, this._key); + + for (let j = 0; j < 16; ++j) { + plain[j] ^= iv[j]; + } + + iv = buffer; + result.push(plain); + buffer = new Uint8Array(16); + bufferLength = 0; }
- const resultObj = params.resultObj; + this.buffer = buffer; + this.bufferLength = bufferLength; + this.iv = iv;
- if (typeof resultObj !== "object") { - (0, _util.warn)("parseDestDictionary: `resultObj` must be an object."); - return; + if (result.length === 0) { + return new Uint8Array(0); }
- const docBaseUrl = params.docBaseUrl || null; - let action = destDict.get("A"), - url, - dest; + let outputLength = 16 * result.length;
- if (!(action instanceof _primitives.Dict)) { - if (destDict.has("Dest")) { - action = destDict.get("Dest"); - } else { - action = destDict.get("AA"); + if (finalize) { + const lastBlock = result.at(-1); + let psLen = lastBlock[15];
- if (action instanceof _primitives.Dict) { - if (action.has("D")) { - action = action.get("D"); - } else if (action.has("U")) { - action = action.get("U"); + if (psLen <= 16) { + for (let i = 15, ii = 16 - psLen; i >= ii; --i) { + if (lastBlock[i] !== psLen) { + psLen = 0; + break; } } + + outputLength -= psLen; + result[result.length - 1] = lastBlock.subarray(0, 16 - psLen); } }
- if (action instanceof _primitives.Dict) { - const actionType = action.get("S"); + const output = new Uint8Array(outputLength);
- if (!(actionType instanceof _primitives.Name)) { - (0, _util.warn)("parseDestDictionary: Invalid type in Action dictionary."); - return; - } + for (let i = 0, j = 0, ii = result.length; i < ii; ++i, j += 16) { + output.set(result[i], j); + }
- const actionName = actionType.name; + return output; + }
- switch (actionName) { - case "ResetForm": - const flags = action.get("Flags"); - const include = ((typeof flags === "number" ? flags : 0) & 1) === 0; - const fields = []; - const refs = []; + decryptBlock(data, finalize, iv = null) { + const sourceLength = data.length; + const buffer = this.buffer; + let bufferLength = this.bufferPosition;
- for (const obj of action.get("Fields") || []) { - if (obj instanceof _primitives.Ref) { - refs.push(obj.toString()); - } else if (typeof obj === "string") { - fields.push((0, _util.stringToPDFString)(obj)); - } - } + if (iv) { + this.iv = iv; + } else { + for (let i = 0; bufferLength < 16 && i < sourceLength; ++i, ++bufferLength) { + buffer[bufferLength] = data[i]; + }
- resultObj.resetForm = { - fields, - refs, - include - }; - break; + if (bufferLength < 16) { + this.bufferLength = bufferLength; + return new Uint8Array(0); + }
- case "URI": - url = action.get("URI"); + this.iv = buffer; + data = data.subarray(16); + }
- if (url instanceof _primitives.Name) { - url = "/" + url.name; - } + this.buffer = new Uint8Array(16); + this.bufferLength = 0; + this.decryptBlock = this._decryptBlock2; + return this.decryptBlock(data, finalize); + }
- break; + encrypt(data, iv) { + const sourceLength = data.length; + let buffer = this.buffer, + bufferLength = this.bufferPosition; + const result = [];
- case "GoTo": - dest = action.get("D"); - break; + if (!iv) { + iv = new Uint8Array(16); + }
- case "Launch": - case "GoToR": - const urlDict = action.get("F"); + for (let i = 0; i < sourceLength; ++i) { + buffer[bufferLength] = data[i]; + ++bufferLength;
- if (urlDict instanceof _primitives.Dict) { - url = urlDict.get("F") || null; - } else if (typeof urlDict === "string") { - url = urlDict; - } + if (bufferLength < 16) { + continue; + }
- let remoteDest = action.get("D"); + for (let j = 0; j < 16; ++j) { + buffer[j] ^= iv[j]; + }
- if (remoteDest) { - if (remoteDest instanceof _primitives.Name) { - remoteDest = remoteDest.name; - } + const cipher = this._encrypt(buffer, this._key);
- if (typeof url === "string") { - const baseUrl = url.split("#")[0]; + iv = cipher; + result.push(cipher); + buffer = new Uint8Array(16); + bufferLength = 0; + }
- if (typeof remoteDest === "string") { - url = baseUrl + "#" + remoteDest; - } else if (Array.isArray(remoteDest)) { - url = baseUrl + "#" + JSON.stringify(remoteDest); - } - } - } + this.buffer = buffer; + this.bufferLength = bufferLength; + this.iv = iv;
- const newWindow = action.get("NewWindow"); + if (result.length === 0) { + return new Uint8Array(0); + }
- if (typeof newWindow === "boolean") { - resultObj.newWindow = newWindow; - } + const outputLength = 16 * result.length; + const output = new Uint8Array(outputLength);
- break; + for (let i = 0, j = 0, ii = result.length; i < ii; ++i, j += 16) { + output.set(result[i], j); + }
- case "Named": - const namedAction = action.get("N"); + return output; + }
- if (namedAction instanceof _primitives.Name) { - resultObj.action = namedAction.name; - } +}
- break; +class AES128Cipher extends AESBaseCipher { + constructor(key) { + super(); + this._cyclesOfRepetition = 10; + this._keySize = 160; + this._rcon = new Uint8Array([0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb [...] + this._key = this._expandKey(key); + }
- case "JavaScript": - const jsAction = action.get("JS"); - let js; + _expandKey(cipherKey) { + const b = 176; + const s = this._s; + const rcon = this._rcon; + const result = new Uint8Array(b); + result.set(cipherKey);
- if (jsAction instanceof _base_stream.BaseStream) { - js = jsAction.getString(); - } else if (typeof jsAction === "string") { - js = jsAction; - } + for (let j = 16, i = 1; j < b; ++i) { + let t1 = result[j - 3]; + let t2 = result[j - 2]; + let t3 = result[j - 1]; + let t4 = result[j - 4]; + t1 = s[t1]; + t2 = s[t2]; + t3 = s[t3]; + t4 = s[t4]; + t1 ^= rcon[i];
- const jsURL = js && (0, _core_utils.recoverJsURL)((0, _util.stringToPDFString)(js)); + for (let n = 0; n < 4; ++n) { + result[j] = t1 ^= result[j - 16]; + j++; + result[j] = t2 ^= result[j - 16]; + j++; + result[j] = t3 ^= result[j - 16]; + j++; + result[j] = t4 ^= result[j - 16]; + j++; + } + }
- if (jsURL) { - url = jsURL.url; - resultObj.newWindow = jsURL.newWindow; - break; - } + return result; + }
- default: - if (actionName === "JavaScript" || actionName === "SubmitForm") { - break; - } +}
- (0, _util.warn)(`parseDestDictionary - unsupported action: "${actionName}".`); - break; - } - } else if (destDict.has("Dest")) { - dest = destDict.get("Dest"); - } +exports.AES128Cipher = AES128Cipher;
- if (typeof url === "string") { - const absoluteUrl = (0, _util.createValidAbsoluteUrl)(url, docBaseUrl, { - addDefaultProtocol: true, - tryConvertEncoding: true - }); +class AES256Cipher extends AESBaseCipher { + constructor(key) { + super(); + this._cyclesOfRepetition = 14; + this._keySize = 224; + this._key = this._expandKey(key); + }
- if (absoluteUrl) { - resultObj.url = absoluteUrl.href; - } + _expandKey(cipherKey) { + const b = 240; + const s = this._s; + const result = new Uint8Array(b); + result.set(cipherKey); + let r = 1; + let t1, t2, t3, t4;
- resultObj.unsafeUrl = url; - } + for (let j = 32, i = 1; j < b; ++i) { + if (j % 32 === 16) { + t1 = s[t1]; + t2 = s[t2]; + t3 = s[t3]; + t4 = s[t4]; + } else if (j % 32 === 0) { + t1 = result[j - 3]; + t2 = result[j - 2]; + t3 = result[j - 1]; + t4 = result[j - 4]; + t1 = s[t1]; + t2 = s[t2]; + t3 = s[t3]; + t4 = s[t4]; + t1 ^= r;
- if (dest) { - if (dest instanceof _primitives.Name) { - dest = dest.name; + if ((r <<= 1) >= 256) { + r = (r ^ 0x1b) & 0xff; + } }
- if (typeof dest === "string") { - resultObj.dest = (0, _util.stringToPDFString)(dest); - } else if (Array.isArray(dest)) { - resultObj.dest = dest; + for (let n = 0; n < 4; ++n) { + result[j] = t1 ^= result[j - 32]; + j++; + result[j] = t2 ^= result[j - 32]; + j++; + result[j] = t3 ^= result[j - 32]; + j++; + result[j] = t4 ^= result[j - 32]; + j++; } } + + return result; }
}
-exports.Catalog = Catalog; - -/***/ }), -/* 66 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.NumberTree = exports.NameTree = void 0; +exports.AES256Cipher = AES256Cipher;
-var _primitives = __w_pdfjs_require__(5); +class PDF17 { + checkOwnerPassword(password, ownerValidationSalt, userBytes, ownerPassword) { + const hashData = new Uint8Array(password.length + 56); + hashData.set(password, 0); + hashData.set(ownerValidationSalt, password.length); + hashData.set(userBytes, password.length + ownerValidationSalt.length); + const result = calculateSHA256(hashData, 0, hashData.length); + return (0, _util.isArrayEqual)(result, ownerPassword); + }
-var _util = __w_pdfjs_require__(2); + checkUserPassword(password, userValidationSalt, userPassword) { + const hashData = new Uint8Array(password.length + 8); + hashData.set(password, 0); + hashData.set(userValidationSalt, password.length); + const result = calculateSHA256(hashData, 0, hashData.length); + return (0, _util.isArrayEqual)(result, userPassword); + }
-class NameOrNumberTree { - constructor(root, xref, type) { - if (this.constructor === NameOrNumberTree) { - (0, _util.unreachable)("Cannot initialize NameOrNumberTree."); - } + getOwnerKey(password, ownerKeySalt, userBytes, ownerEncryption) { + const hashData = new Uint8Array(password.length + 56); + hashData.set(password, 0); + hashData.set(ownerKeySalt, password.length); + hashData.set(userBytes, password.length + ownerKeySalt.length); + const key = calculateSHA256(hashData, 0, hashData.length); + const cipher = new AES256Cipher(key); + return cipher.decryptBlock(ownerEncryption, false, new Uint8Array(16)); + }
- this.root = root; - this.xref = xref; - this._type = type; + getUserKey(password, userKeySalt, userEncryption) { + const hashData = new Uint8Array(password.length + 8); + hashData.set(password, 0); + hashData.set(userKeySalt, password.length); + const key = calculateSHA256(hashData, 0, hashData.length); + const cipher = new AES256Cipher(key); + return cipher.decryptBlock(userEncryption, false, new Uint8Array(16)); }
- getAll() { - const map = new Map(); +}
- if (!this.root) { - return map; - } +exports.PDF17 = PDF17;
- const xref = this.xref; - const processed = new _primitives.RefSet(); - processed.put(this.root); - const queue = [this.root]; +const PDF20 = function PDF20Closure() { + function calculatePDF20Hash(password, input, userBytes) { + let k = calculateSHA256(input, 0, input.length).subarray(0, 32); + let e = [0]; + let i = 0;
- while (queue.length > 0) { - const obj = xref.fetchIfRef(queue.shift()); + while (i < 64 || e.at(-1) > i - 32) { + const combinedLength = password.length + k.length + userBytes.length, + combinedArray = new Uint8Array(combinedLength); + let writeOffset = 0; + combinedArray.set(password, writeOffset); + writeOffset += password.length; + combinedArray.set(k, writeOffset); + writeOffset += k.length; + combinedArray.set(userBytes, writeOffset); + const k1 = new Uint8Array(combinedLength * 64);
- if (!(obj instanceof _primitives.Dict)) { - continue; + for (let j = 0, pos = 0; j < 64; j++, pos += combinedLength) { + k1.set(combinedArray, pos); }
- if (obj.has("Kids")) { - const kids = obj.get("Kids"); - - if (!Array.isArray(kids)) { - continue; - } - - for (const kid of kids) { - if (processed.has(kid)) { - throw new _util.FormatError(`Duplicate entry in "${this._type}" tree.`); - } - - queue.push(kid); - processed.put(kid); - } + const cipher = new AES128Cipher(k.subarray(0, 16)); + e = cipher.encrypt(k1, k.subarray(16, 32)); + let remainder = 0;
- continue; + for (let z = 0; z < 16; z++) { + remainder *= 256 % 3; + remainder %= 3; + remainder += (e[z] >>> 0) % 3; + remainder %= 3; }
- const entries = obj.get(this._type); - - if (!Array.isArray(entries)) { - continue; + if (remainder === 0) { + k = calculateSHA256(e, 0, e.length); + } else if (remainder === 1) { + k = calculateSHA384(e, 0, e.length); + } else if (remainder === 2) { + k = calculateSHA512(e, 0, e.length); }
- for (let i = 0, ii = entries.length; i < ii; i += 2) { - map.set(xref.fetchIfRef(entries[i]), xref.fetchIfRef(entries[i + 1])); - } + i++; }
- return map; + return k.subarray(0, 32); }
- get(key) { - if (!this.root) { - return null; + class PDF20 { + hash(password, concatBytes, userBytes) { + return calculatePDF20Hash(password, concatBytes, userBytes); }
- const xref = this.xref; - let kidsOrEntries = xref.fetchIfRef(this.root); - let loopCount = 0; - const MAX_LEVELS = 10; + checkOwnerPassword(password, ownerValidationSalt, userBytes, ownerPassword) { + const hashData = new Uint8Array(password.length + 56); + hashData.set(password, 0); + hashData.set(ownerValidationSalt, password.length); + hashData.set(userBytes, password.length + ownerValidationSalt.length); + const result = calculatePDF20Hash(password, hashData, userBytes); + return (0, _util.isArrayEqual)(result, ownerPassword); + }
- while (kidsOrEntries.has("Kids")) { - if (++loopCount > MAX_LEVELS) { - (0, _util.warn)(`Search depth limit reached for "${this._type}" tree.`); - return null; - } + checkUserPassword(password, userValidationSalt, userPassword) { + const hashData = new Uint8Array(password.length + 8); + hashData.set(password, 0); + hashData.set(userValidationSalt, password.length); + const result = calculatePDF20Hash(password, hashData, []); + return (0, _util.isArrayEqual)(result, userPassword); + }
- const kids = kidsOrEntries.get("Kids"); + getOwnerKey(password, ownerKeySalt, userBytes, ownerEncryption) { + const hashData = new Uint8Array(password.length + 56); + hashData.set(password, 0); + hashData.set(ownerKeySalt, password.length); + hashData.set(userBytes, password.length + ownerKeySalt.length); + const key = calculatePDF20Hash(password, hashData, userBytes); + const cipher = new AES256Cipher(key); + return cipher.decryptBlock(ownerEncryption, false, new Uint8Array(16)); + }
- if (!Array.isArray(kids)) { - return null; - } + getUserKey(password, userKeySalt, userEncryption) { + const hashData = new Uint8Array(password.length + 8); + hashData.set(password, 0); + hashData.set(userKeySalt, password.length); + const key = calculatePDF20Hash(password, hashData, []); + const cipher = new AES256Cipher(key); + return cipher.decryptBlock(userEncryption, false, new Uint8Array(16)); + }
- let l = 0, - r = kids.length - 1; + }
- while (l <= r) { - const m = l + r >> 1; - const kid = xref.fetchIfRef(kids[m]); - const limits = kid.get("Limits"); + return PDF20; +}();
- if (key < xref.fetchIfRef(limits[0])) { - r = m - 1; - } else if (key > xref.fetchIfRef(limits[1])) { - l = m + 1; - } else { - kidsOrEntries = kid; - break; - } - } +exports.PDF20 = PDF20;
- if (l > r) { - return null; - } - } +class CipherTransform { + constructor(stringCipherConstructor, streamCipherConstructor) { + this.StringCipherConstructor = stringCipherConstructor; + this.StreamCipherConstructor = streamCipherConstructor; + }
- const entries = kidsOrEntries.get(this._type); + createStream(stream, length) { + const cipher = new this.StreamCipherConstructor(); + return new _decrypt_stream.DecryptStream(stream, length, function cipherTransformDecryptStream(data, finalize) { + return cipher.decryptBlock(data, finalize); + }); + }
- if (Array.isArray(entries)) { - let l = 0, - r = entries.length - 2; + decryptString(s) { + const cipher = new this.StringCipherConstructor(); + let data = (0, _util.stringToBytes)(s); + data = cipher.decryptBlock(data, true); + return (0, _util.bytesToString)(data); + }
- while (l <= r) { - const tmp = l + r >> 1, - m = tmp + (tmp & 1); - const currentKey = xref.fetchIfRef(entries[m]); + encryptString(s) { + const cipher = new this.StringCipherConstructor();
- if (key < currentKey) { - r = m - 2; - } else if (key > currentKey) { - l = m + 2; - } else { - return xref.fetchIfRef(entries[m + 1]); + if (cipher instanceof AESBaseCipher) { + const strLen = s.length; + const pad = 16 - strLen % 16; + s += String.fromCharCode(pad).repeat(pad); + const iv = new Uint8Array(16); + + if (typeof crypto !== "undefined") { + crypto.getRandomValues(iv); + } else { + for (let i = 0; i < 16; i++) { + iv[i] = Math.floor(256 * Math.random()); } } + + let data = (0, _util.stringToBytes)(s); + data = cipher.encrypt(data, iv); + const buf = new Uint8Array(16 + data.length); + buf.set(iv); + buf.set(data, 16); + return (0, _util.bytesToString)(buf); }
- return null; + let data = (0, _util.stringToBytes)(s); + data = cipher.encrypt(data); + return (0, _util.bytesToString)(data); }
}
-class NameTree extends NameOrNumberTree { - constructor(root, xref) { - super(root, xref, "Names"); - } +const CipherTransformFactory = function CipherTransformFactoryClosure() { + const defaultPasswordBytes = new Uint8Array([0x28, 0xbf, 0x4e, 0x5e, 0x4e, 0x75, 0x8a, 0x41, 0x64, 0x00, 0x4e, 0x56, 0xff, 0xfa, 0x01, 0x08, 0x2e, 0x2e, 0x00, 0xb6, 0xd0, 0x68, 0x3e, 0x80, 0x2f, 0x0c, 0xa9, 0xfe, 0x64, 0x53, 0x69, 0x7a]);
-} + function createEncryptionKey20(revision, password, ownerPassword, ownerValidationSalt, ownerKeySalt, uBytes, userPassword, userValidationSalt, userKeySalt, ownerEncryption, userEncryption, perms) { + if (password) { + const passwordLength = Math.min(127, password.length); + password = password.subarray(0, passwordLength); + } else { + password = []; + }
-exports.NameTree = NameTree; + let pdfAlgorithm;
-class NumberTree extends NameOrNumberTree { - constructor(root, xref) { - super(root, xref, "Nums"); + if (revision === 6) { + pdfAlgorithm = new PDF20(); + } else { + pdfAlgorithm = new PDF17(); + } + + if (pdfAlgorithm.checkUserPassword(password, userValidationSalt, userPassword)) { + return pdfAlgorithm.getUserKey(password, userKeySalt, userEncryption); + } else if (password.length && pdfAlgorithm.checkOwnerPassword(password, ownerValidationSalt, uBytes, ownerPassword)) { + return pdfAlgorithm.getOwnerKey(password, ownerKeySalt, uBytes, ownerEncryption); + } + + return null; }
-} + function prepareKeyData(fileId, password, ownerPassword, userPassword, flags, revision, keyLength, encryptMetadata) { + const hashDataSize = 40 + ownerPassword.length + fileId.length; + const hashData = new Uint8Array(hashDataSize); + let i = 0, + j, + n;
-exports.NumberTree = NumberTree; + if (password) { + n = Math.min(32, password.length);
-/***/ }), -/* 67 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + for (; i < n; ++i) { + hashData[i] = password[i]; + } + }
+ j = 0;
+ while (i < 32) { + hashData[i++] = defaultPasswordBytes[j++]; + }
-Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.clearGlobalCaches = clearGlobalCaches; + for (j = 0, n = ownerPassword.length; j < n; ++j) { + hashData[i++] = ownerPassword[j]; + }
-var _primitives = __w_pdfjs_require__(5); + hashData[i++] = flags & 0xff; + hashData[i++] = flags >> 8 & 0xff; + hashData[i++] = flags >> 16 & 0xff; + hashData[i++] = flags >>> 24 & 0xff;
-var _unicode = __w_pdfjs_require__(21); + for (j = 0, n = fileId.length; j < n; ++j) { + hashData[i++] = fileId[j]; + }
-function clearGlobalCaches() { - (0, _primitives.clearPrimitiveCaches)(); - (0, _unicode.clearUnicodeCaches)(); -} + if (revision >= 4 && !encryptMetadata) { + hashData[i++] = 0xff; + hashData[i++] = 0xff; + hashData[i++] = 0xff; + hashData[i++] = 0xff; + }
-/***/ }), -/* 68 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + let hash = calculateMD5(hashData, 0, i); + const keyLengthInBytes = keyLength >> 3;
+ if (revision >= 3) { + for (j = 0; j < 50; ++j) { + hash = calculateMD5(hash, 0, keyLengthInBytes); + } + }
+ const encryptionKey = hash.subarray(0, keyLengthInBytes); + let cipher, checkData;
-Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.FileSpec = void 0; + if (revision >= 3) { + for (i = 0; i < 32; ++i) { + hashData[i] = defaultPasswordBytes[i]; + }
-var _util = __w_pdfjs_require__(2); + for (j = 0, n = fileId.length; j < n; ++j) { + hashData[i++] = fileId[j]; + }
-var _base_stream = __w_pdfjs_require__(9); + cipher = new ARCFourCipher(encryptionKey); + checkData = cipher.encryptBlock(calculateMD5(hashData, 0, i)); + n = encryptionKey.length; + const derivedKey = new Uint8Array(n);
-var _primitives = __w_pdfjs_require__(5); + for (j = 1; j <= 19; ++j) { + for (let k = 0; k < n; ++k) { + derivedKey[k] = encryptionKey[k] ^ j; + }
-function pickPlatformItem(dict) { - if (dict.has("UF")) { - return dict.get("UF"); - } else if (dict.has("F")) { - return dict.get("F"); - } else if (dict.has("Unix")) { - return dict.get("Unix"); - } else if (dict.has("Mac")) { - return dict.get("Mac"); - } else if (dict.has("DOS")) { - return dict.get("DOS"); + cipher = new ARCFourCipher(derivedKey); + checkData = cipher.encryptBlock(checkData); + } + + for (j = 0, n = checkData.length; j < n; ++j) { + if (userPassword[j] !== checkData[j]) { + return null; + } + } + } else { + cipher = new ARCFourCipher(encryptionKey); + checkData = cipher.encryptBlock(defaultPasswordBytes); + + for (j = 0, n = checkData.length; j < n; ++j) { + if (userPassword[j] !== checkData[j]) { + return null; + } + } + } + + return encryptionKey; }
- return null; -} + function decodeUserPassword(password, ownerPassword, revision, keyLength) { + const hashData = new Uint8Array(32); + let i = 0; + const n = Math.min(32, password.length);
-class FileSpec { - constructor(root, xref) { - if (!(root instanceof _primitives.Dict)) { - return; + for (; i < n; ++i) { + hashData[i] = password[i]; }
- this.xref = xref; - this.root = root; + let j = 0;
- if (root.has("FS")) { - this.fs = root.get("FS"); + while (i < 32) { + hashData[i++] = defaultPasswordBytes[j++]; }
- this.description = root.has("Desc") ? (0, _util.stringToPDFString)(root.get("Desc")) : ""; + let hash = calculateMD5(hashData, 0, i); + const keyLengthInBytes = keyLength >> 3;
- if (root.has("RF")) { - (0, _util.warn)("Related file specifications are not supported"); + if (revision >= 3) { + for (j = 0; j < 50; ++j) { + hash = calculateMD5(hash, 0, hash.length); + } }
- this.contentAvailable = true; + let cipher, userPassword;
- if (!root.has("EF")) { - this.contentAvailable = false; - (0, _util.warn)("Non-embedded file specifications are not supported"); + if (revision >= 3) { + userPassword = ownerPassword; + const derivedKey = new Uint8Array(keyLengthInBytes); + + for (j = 19; j >= 0; j--) { + for (let k = 0; k < keyLengthInBytes; ++k) { + derivedKey[k] = hash[k] ^ j; + } + + cipher = new ARCFourCipher(derivedKey); + userPassword = cipher.encryptBlock(userPassword); + } + } else { + cipher = new ARCFourCipher(hash.subarray(0, keyLengthInBytes)); + userPassword = cipher.encryptBlock(ownerPassword); } + + return userPassword; }
- get filename() { - if (!this._filename && this.root) { - const filename = pickPlatformItem(this.root) || "unnamed"; - this._filename = (0, _util.stringToPDFString)(filename).replace(/\\/g, "\").replace(/\//g, "/").replace(/\/g, "/"); + const identityName = _primitives.Name.get("Identity"); + + function buildObjectKey(num, gen, encryptionKey, isAes = false) { + const key = new Uint8Array(encryptionKey.length + 9); + const n = encryptionKey.length; + let i; + + for (i = 0; i < n; ++i) { + key[i] = encryptionKey[i]; }
- return this._filename; + key[i++] = num & 0xff; + key[i++] = num >> 8 & 0xff; + key[i++] = num >> 16 & 0xff; + key[i++] = gen & 0xff; + key[i++] = gen >> 8 & 0xff; + + if (isAes) { + key[i++] = 0x73; + key[i++] = 0x41; + key[i++] = 0x6c; + key[i++] = 0x54; + } + + const hash = calculateMD5(key, 0, i); + return hash.subarray(0, Math.min(encryptionKey.length + 5, 16)); }
- get content() { - if (!this.contentAvailable) { - return null; + function buildCipherConstructor(cf, name, num, gen, key) { + if (!(name instanceof _primitives.Name)) { + throw new _util.FormatError("Invalid crypt filter name."); }
- if (!this.contentRef && this.root) { - this.contentRef = pickPlatformItem(this.root.get("EF")); + const cryptFilter = cf.get(name.name); + let cfm; + + if (cryptFilter !== null && cryptFilter !== undefined) { + cfm = cryptFilter.get("CFM"); }
- let content = null; + if (!cfm || cfm.name === "None") { + return function cipherTransformFactoryBuildCipherConstructorNone() { + return new NullCipher(); + }; + }
- if (this.contentRef) { - const fileObj = this.xref.fetchIfRef(this.contentRef); + if (cfm.name === "V2") { + return function cipherTransformFactoryBuildCipherConstructorV2() { + return new ARCFourCipher(buildObjectKey(num, gen, key, false)); + }; + }
- if (fileObj instanceof _base_stream.BaseStream) { - content = fileObj.getBytes(); - } else { - (0, _util.warn)("Embedded file specification points to non-existing/invalid content"); - } - } else { - (0, _util.warn)("Embedded file specification does not have a content"); + if (cfm.name === "AESV2") { + return function cipherTransformFactoryBuildCipherConstructorAESV2() { + return new AES128Cipher(buildObjectKey(num, gen, key, true)); + }; }
- return content; - } + if (cfm.name === "AESV3") { + return function cipherTransformFactoryBuildCipherConstructorAESV3() { + return new AES256Cipher(key); + }; + }
- get serializable() { - return { - filename: this.filename, - content: this.content - }; + throw new _util.FormatError("Unknown crypto method"); }
-} + class CipherTransformFactory { + constructor(dict, fileId, password) { + const filter = dict.get("Filter");
-exports.FileSpec = FileSpec; + if (!(0, _primitives.isName)(filter, "Standard")) { + throw new _util.FormatError("unknown encryption method"); + }
-/***/ }), -/* 69 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + this.filterName = filter.name; + this.dict = dict; + const algorithm = dict.get("V");
+ if (!Number.isInteger(algorithm) || algorithm !== 1 && algorithm !== 2 && algorithm !== 4 && algorithm !== 5) { + throw new _util.FormatError("unsupported encryption algorithm"); + }
+ this.algorithm = algorithm; + let keyLength = dict.get("Length");
-Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.MetadataParser = void 0; + if (!keyLength) { + if (algorithm <= 3) { + keyLength = 40; + } else { + const cfDict = dict.get("CF"); + const streamCryptoName = dict.get("StmF");
-var _xml_parser = __w_pdfjs_require__(70); + if (cfDict instanceof _primitives.Dict && streamCryptoName instanceof _primitives.Name) { + cfDict.suppressEncryption = true; + const handlerDict = cfDict.get(streamCryptoName.name); + keyLength = handlerDict && handlerDict.get("Length") || 128;
-class MetadataParser { - constructor(data) { - data = this._repair(data); - const parser = new _xml_parser.SimpleXMLParser({ - lowerCaseName: true - }); - const xmlDocument = parser.parseFromString(data); - this._metadataMap = new Map(); - this._data = data; + if (keyLength < 40) { + keyLength <<= 3; + } + } + } + }
- if (xmlDocument) { - this._parse(xmlDocument); - } - } + if (!Number.isInteger(keyLength) || keyLength < 40 || keyLength % 8 !== 0) { + throw new _util.FormatError("invalid key length"); + }
- _repair(data) { - return data.replace(/^[^<]+/, "").replace(/>\376\377([^<]+)/g, function (all, codes) { - const bytes = codes.replace(/\([0-3])([0-7])([0-7])/g, function (code, d1, d2, d3) { - return String.fromCharCode(d1 * 64 + d2 * 8 + d3 * 1); - }).replace(/&(amp|apos|gt|lt|quot);/g, function (str, name) { - switch (name) { - case "amp": - return "&"; + const ownerPassword = (0, _util.stringToBytes)(dict.get("O")).subarray(0, 32); + const userPassword = (0, _util.stringToBytes)(dict.get("U")).subarray(0, 32); + const flags = dict.get("P"); + const revision = dict.get("R"); + const encryptMetadata = (algorithm === 4 || algorithm === 5) && dict.get("EncryptMetadata") !== false; + this.encryptMetadata = encryptMetadata; + const fileIdBytes = (0, _util.stringToBytes)(fileId); + let passwordBytes;
- case "apos": - return "'"; + if (password) { + if (revision === 6) { + try { + password = (0, _util.utf8StringToString)(password); + } catch (ex) { + (0, _util.warn)("CipherTransformFactory: " + "Unable to convert UTF8 encoded password."); + } + }
- case "gt": - return ">"; + passwordBytes = (0, _util.stringToBytes)(password); + }
- case "lt": - return "<"; + let encryptionKey;
- case "quot": - return '"'; - } + if (algorithm !== 5) { + encryptionKey = prepareKeyData(fileIdBytes, passwordBytes, ownerPassword, userPassword, flags, revision, keyLength, encryptMetadata); + } else { + const ownerValidationSalt = (0, _util.stringToBytes)(dict.get("O")).subarray(32, 40); + const ownerKeySalt = (0, _util.stringToBytes)(dict.get("O")).subarray(40, 48); + const uBytes = (0, _util.stringToBytes)(dict.get("U")).subarray(0, 48); + const userValidationSalt = (0, _util.stringToBytes)(dict.get("U")).subarray(32, 40); + const userKeySalt = (0, _util.stringToBytes)(dict.get("U")).subarray(40, 48); + const ownerEncryption = (0, _util.stringToBytes)(dict.get("OE")); + const userEncryption = (0, _util.stringToBytes)(dict.get("UE")); + const perms = (0, _util.stringToBytes)(dict.get("Perms")); + encryptionKey = createEncryptionKey20(revision, passwordBytes, ownerPassword, ownerValidationSalt, ownerKeySalt, uBytes, userPassword, userValidationSalt, userKeySalt, ownerEncryption, userEncryption, perms); + }
- throw new Error(`_repair: ${name} isn't defined.`); - }); - const charBuf = []; + if (!encryptionKey && !password) { + throw new _util.PasswordException("No password given", _util.PasswordResponses.NEED_PASSWORD); + } else if (!encryptionKey && password) { + const decodedPassword = decodeUserPassword(passwordBytes, ownerPassword, revision, keyLength); + encryptionKey = prepareKeyData(fileIdBytes, decodedPassword, ownerPassword, userPassword, flags, revision, keyLength, encryptMetadata); + }
- for (let i = 0, ii = bytes.length; i < ii; i += 2) { - const code = bytes.charCodeAt(i) * 256 + bytes.charCodeAt(i + 1); + if (!encryptionKey) { + throw new _util.PasswordException("Incorrect Password", _util.PasswordResponses.INCORRECT_PASSWORD); + }
- if (code >= 32 && code < 127 && code !== 60 && code !== 62 && code !== 38) { - charBuf.push(String.fromCharCode(code)); - } else { - charBuf.push("&#x" + (0x10000 + code).toString(16).substring(1) + ";"); + this.encryptionKey = encryptionKey; + + if (algorithm >= 4) { + const cf = dict.get("CF"); + + if (cf instanceof _primitives.Dict) { + cf.suppressEncryption = true; } + + this.cf = cf; + this.stmf = dict.get("StmF") || identityName; + this.strf = dict.get("StrF") || identityName; + this.eff = dict.get("EFF") || this.stmf; } + }
- return ">" + charBuf.join(""); - }); - } + createCipherTransform(num, gen) { + if (this.algorithm === 4 || this.algorithm === 5) { + return new CipherTransform(buildCipherConstructor(this.cf, this.stmf, num, gen, this.encryptionKey), buildCipherConstructor(this.cf, this.strf, num, gen, this.encryptionKey)); + }
- _getSequence(entry) { - const name = entry.nodeName; + const key = buildObjectKey(num, gen, this.encryptionKey, false);
- if (name !== "rdf:bag" && name !== "rdf:seq" && name !== "rdf:alt") { - return null; + const cipherConstructor = function buildCipherCipherConstructor() { + return new ARCFourCipher(key); + }; + + return new CipherTransform(cipherConstructor, cipherConstructor); }
- return entry.childNodes.filter(node => node.nodeName === "rdf:li"); }
- _parseArray(entry) { - if (!entry.hasChildNodes()) { - return; - } + return CipherTransformFactory; +}();
- const [seqNode] = entry.childNodes; - const sequence = this._getSequence(seqNode) || []; +exports.CipherTransformFactory = CipherTransformFactory;
- this._metadataMap.set(entry.nodeName, sequence.map(node => node.textContent.trim())); - } +/***/ }), +/* 68 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
- _parse(xmlDocument) { - let rdf = xmlDocument.documentElement;
- if (rdf.nodeName !== "rdf:rdf") { - rdf = rdf.firstChild;
- while (rdf && rdf.nodeName !== "rdf:rdf") { - rdf = rdf.nextSibling; - } - } +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.DecryptStream = void 0;
- if (!rdf || rdf.nodeName !== "rdf:rdf" || !rdf.hasChildNodes()) { - return; - } +var _decode_stream = __w_pdfjs_require__(29);
- for (const desc of rdf.childNodes) { - if (desc.nodeName !== "rdf:description") { - continue; - } +const chunkSize = 512;
- for (const entry of desc.childNodes) { - const name = entry.nodeName; +class DecryptStream extends _decode_stream.DecodeStream { + constructor(str, maybeLength, decrypt) { + super(maybeLength); + this.str = str; + this.dict = str.dict; + this.decrypt = decrypt; + this.nextChunk = null; + this.initialized = false; + }
- switch (name) { - case "#text": - continue; + readBlock() { + let chunk;
- case "dc:creator": - case "dc:subject": - this._parseArray(entry); + if (this.initialized) { + chunk = this.nextChunk; + } else { + chunk = this.str.getBytes(chunkSize); + this.initialized = true; + }
- continue; - } + if (!chunk || chunk.length === 0) { + this.eof = true; + return; + }
- this._metadataMap.set(name, entry.textContent.trim()); - } + this.nextChunk = this.str.getBytes(chunkSize); + const hasMoreData = this.nextChunk && this.nextChunk.length > 0; + const decrypt = this.decrypt; + chunk = decrypt(chunk, !hasMoreData); + let bufferLength = this.bufferLength; + const n = chunk.length, + buffer = this.ensureBuffer(bufferLength + n); + + for (let i = 0; i < n; i++) { + buffer[bufferLength++] = chunk[i]; } - }
- get serializable() { - return { - parsedData: this._metadataMap, - rawData: this._data - }; + this.bufferLength = bufferLength; }
}
-exports.MetadataParser = MetadataParser; +exports.DecryptStream = DecryptStream;
/***/ }), -/* 70 */ +/* 69 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
@@ -43830,3078 +45101,2603 @@ exports.MetadataParser = MetadataParser; Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.XMLParserErrorCode = exports.XMLParserBase = exports.SimpleXMLParser = exports.SimpleDOMNode = void 0; +exports.Catalog = void 0;
-var _core_utils = __w_pdfjs_require__(8); +var _core_utils = __w_pdfjs_require__(6);
-const XMLParserErrorCode = { - NoError: 0, - EndOfDocument: -1, - UnterminatedCdat: -2, - UnterminatedXmlDeclaration: -3, - UnterminatedDoctypeDeclaration: -4, - UnterminatedComment: -5, - MalformedElement: -6, - OutOfMemory: -7, - UnterminatedAttributeValue: -8, - UnterminatedElement: -9, - ElementNeverBegun: -10 -}; -exports.XMLParserErrorCode = XMLParserErrorCode; +var _util = __w_pdfjs_require__(2);
-function isWhitespace(s, index) { - const ch = s[index]; - return ch === " " || ch === "\n" || ch === "\r" || ch === "\t"; -} +var _primitives = __w_pdfjs_require__(5);
-function isWhitespaceString(s) { - for (let i = 0, ii = s.length; i < ii; i++) { - if (!isWhitespace(s, i)) { - return false; - } - } +var _name_number_tree = __w_pdfjs_require__(70);
- return true; -} +var _base_stream = __w_pdfjs_require__(7);
-class XMLParserBase { - _resolveEntities(s) { - return s.replace(/&([^;]+);/g, (all, entity) => { - if (entity.substring(0, 2) === "#x") { - return String.fromCodePoint(parseInt(entity.substring(2), 16)); - } else if (entity.substring(0, 1) === "#") { - return String.fromCodePoint(parseInt(entity.substring(1), 10)); - } +var _cleanup_helper = __w_pdfjs_require__(71);
- switch (entity) { - case "lt": - return "<"; +var _colorspace = __w_pdfjs_require__(24);
- case "gt": - return ">"; +var _file_spec = __w_pdfjs_require__(72);
- case "amp": - return "&"; +var _image_utils = __w_pdfjs_require__(59);
- case "quot": - return '"'; +var _metadata_parser = __w_pdfjs_require__(73);
- case "apos": - return "'"; - } +var _struct_tree = __w_pdfjs_require__(74);
- return this.onResolveEntity(entity); - }); +function fetchDestination(dest) { + if (dest instanceof _primitives.Dict) { + dest = dest.get("D"); }
- _parseContent(s, start) { - const attributes = []; - let pos = start; + return Array.isArray(dest) ? dest : null; +}
- function skipWs() { - while (pos < s.length && isWhitespace(s, pos)) { - ++pos; - } - } +class Catalog { + constructor(pdfManager, xref) { + this.pdfManager = pdfManager; + this.xref = xref; + this._catDict = xref.getCatalogObj();
- while (pos < s.length && !isWhitespace(s, pos) && s[pos] !== ">" && s[pos] !== "/") { - ++pos; + if (!(this._catDict instanceof _primitives.Dict)) { + throw new _util.FormatError("Catalog object is not a dictionary."); }
- const name = s.substring(start, pos); - skipWs(); + this.toplevelPagesDict; + this._actualNumPages = null; + this.fontCache = new _primitives.RefSetCache(); + this.builtInCMapCache = new Map(); + this.standardFontDataCache = new Map(); + this.globalImageCache = new _image_utils.GlobalImageCache(); + this.pageKidsCountCache = new _primitives.RefSetCache(); + this.pageIndexCache = new _primitives.RefSetCache(); + this.nonBlendModesSet = new _primitives.RefSet(); + }
- while (pos < s.length && s[pos] !== ">" && s[pos] !== "/" && s[pos] !== "?") { - skipWs(); - let attrName = "", - attrValue = ""; + get version() { + const version = this._catDict.get("Version");
- while (pos < s.length && !isWhitespace(s, pos) && s[pos] !== "=") { - attrName += s[pos]; - ++pos; - } + return (0, _util.shadow)(this, "version", version instanceof _primitives.Name ? version.name : null); + }
- skipWs(); + get lang() { + const lang = this._catDict.get("Lang");
- if (s[pos] !== "=") { - return null; - } + return (0, _util.shadow)(this, "lang", typeof lang === "string" ? (0, _util.stringToPDFString)(lang) : null); + }
- ++pos; - skipWs(); - const attrEndChar = s[pos]; + get needsRendering() { + const needsRendering = this._catDict.get("NeedsRendering");
- if (attrEndChar !== '"' && attrEndChar !== "'") { - return null; - } + return (0, _util.shadow)(this, "needsRendering", typeof needsRendering === "boolean" ? needsRendering : false); + }
- const attrEndIndex = s.indexOf(attrEndChar, ++pos); + get collection() { + let collection = null;
- if (attrEndIndex < 0) { - return null; + try { + const obj = this._catDict.get("Collection"); + + if (obj instanceof _primitives.Dict && obj.size > 0) { + collection = obj; + } + } catch (ex) { + if (ex instanceof _core_utils.MissingDataException) { + throw ex; }
- attrValue = s.substring(pos, attrEndIndex); - attributes.push({ - name: attrName, - value: this._resolveEntities(attrValue) - }); - pos = attrEndIndex + 1; - skipWs(); + (0, _util.info)("Cannot fetch Collection entry; assuming no collection is present."); }
- return { - name, - attributes, - parsed: pos - start - }; + return (0, _util.shadow)(this, "collection", collection); }
- _parseProcessingInstruction(s, start) { - let pos = start; + get acroForm() { + let acroForm = null;
- function skipWs() { - while (pos < s.length && isWhitespace(s, pos)) { - ++pos; + try { + const obj = this._catDict.get("AcroForm"); + + if (obj instanceof _primitives.Dict && obj.size > 0) { + acroForm = obj; + } + } catch (ex) { + if (ex instanceof _core_utils.MissingDataException) { + throw ex; } - }
- while (pos < s.length && !isWhitespace(s, pos) && s[pos] !== ">" && s[pos] !== "?" && s[pos] !== "/") { - ++pos; + (0, _util.info)("Cannot fetch AcroForm entry; assuming no forms are present."); }
- const name = s.substring(start, pos); - skipWs(); - const attrStart = pos; + return (0, _util.shadow)(this, "acroForm", acroForm); + }
- while (pos < s.length && (s[pos] !== "?" || s[pos + 1] !== ">")) { - ++pos; - } + get acroFormRef() { + const value = this._catDict.getRaw("AcroForm");
- const value = s.substring(attrStart, pos); - return { - name, - value, - parsed: pos - start - }; + return (0, _util.shadow)(this, "acroFormRef", value instanceof _primitives.Ref ? value : null); }
- parseXml(s) { - let i = 0; + get metadata() { + const streamRef = this._catDict.getRaw("Metadata");
- while (i < s.length) { - const ch = s[i]; - let j = i; + if (!(streamRef instanceof _primitives.Ref)) { + return (0, _util.shadow)(this, "metadata", null); + }
- if (ch === "<") { - ++j; - const ch2 = s[j]; - let q; + let metadata = null;
- switch (ch2) { - case "/": - ++j; - q = s.indexOf(">", j); + try { + const suppressEncryption = !(this.xref.encrypt && this.xref.encrypt.encryptMetadata); + const stream = this.xref.fetch(streamRef, suppressEncryption);
- if (q < 0) { - this.onError(XMLParserErrorCode.UnterminatedElement); - return; - } + if (stream instanceof _base_stream.BaseStream && stream.dict instanceof _primitives.Dict) { + const type = stream.dict.get("Type"); + const subtype = stream.dict.get("Subtype");
- this.onEndElement(s.substring(j, q)); - j = q + 1; - break; + if ((0, _primitives.isName)(type, "Metadata") && (0, _primitives.isName)(subtype, "XML")) { + const data = (0, _util.stringToUTF8String)(stream.getString());
- case "?": - ++j; + if (data) { + metadata = new _metadata_parser.MetadataParser(data).serializable; + } + } + } + } catch (ex) { + if (ex instanceof _core_utils.MissingDataException) { + throw ex; + }
- const pi = this._parseProcessingInstruction(s, j); + (0, _util.info)(`Skipping invalid Metadata: "${ex}".`); + }
- if (s.substring(j + pi.parsed, j + pi.parsed + 2) !== "?>") { - this.onError(XMLParserErrorCode.UnterminatedXmlDeclaration); - return; - } + return (0, _util.shadow)(this, "metadata", metadata); + }
- this.onPi(pi.name, pi.value); - j += pi.parsed + 2; - break; + get markInfo() { + let markInfo = null;
- case "!": - if (s.substring(j + 1, j + 3) === "--") { - q = s.indexOf("-->", j + 3); + try { + markInfo = this._readMarkInfo(); + } catch (ex) { + if (ex instanceof _core_utils.MissingDataException) { + throw ex; + }
- if (q < 0) { - this.onError(XMLParserErrorCode.UnterminatedComment); - return; - } + (0, _util.warn)("Unable to read mark info."); + }
- this.onComment(s.substring(j + 3, q)); - j = q + 3; - } else if (s.substring(j + 1, j + 8) === "[CDATA[") { - q = s.indexOf("]]>", j + 8); + return (0, _util.shadow)(this, "markInfo", markInfo); + }
- if (q < 0) { - this.onError(XMLParserErrorCode.UnterminatedCdat); - return; - } + _readMarkInfo() { + const obj = this._catDict.get("MarkInfo");
- this.onCdata(s.substring(j + 8, q)); - j = q + 3; - } else if (s.substring(j + 1, j + 8) === "DOCTYPE") { - const q2 = s.indexOf("[", j + 8); - let complexDoctype = false; - q = s.indexOf(">", j + 8); + if (!(obj instanceof _primitives.Dict)) { + return null; + }
- if (q < 0) { - this.onError(XMLParserErrorCode.UnterminatedDoctypeDeclaration); - return; - } + const markInfo = { + Marked: false, + UserProperties: false, + Suspects: false + };
- if (q2 > 0 && q > q2) { - q = s.indexOf("]>", j + 8); + for (const key in markInfo) { + const value = obj.get(key);
- if (q < 0) { - this.onError(XMLParserErrorCode.UnterminatedDoctypeDeclaration); - return; - } + if (typeof value === "boolean") { + markInfo[key] = value; + } + }
- complexDoctype = true; - } + return markInfo; + }
- const doctypeContent = s.substring(j + 8, q + (complexDoctype ? 1 : 0)); - this.onDoctype(doctypeContent); - j = q + (complexDoctype ? 2 : 1); - } else { - this.onError(XMLParserErrorCode.MalformedElement); - return; - } + get structTreeRoot() { + let structTree = null;
- break; + try { + structTree = this._readStructTreeRoot(); + } catch (ex) { + if (ex instanceof _core_utils.MissingDataException) { + throw ex; + }
- default: - const content = this._parseContent(s, j); + (0, _util.warn)("Unable read to structTreeRoot info."); + }
- if (content === null) { - this.onError(XMLParserErrorCode.MalformedElement); - return; - } + return (0, _util.shadow)(this, "structTreeRoot", structTree); + }
- let isClosed = false; + _readStructTreeRoot() { + const obj = this._catDict.get("StructTreeRoot");
- if (s.substring(j + content.parsed, j + content.parsed + 2) === "/>") { - isClosed = true; - } else if (s.substring(j + content.parsed, j + content.parsed + 1) !== ">") { - this.onError(XMLParserErrorCode.UnterminatedElement); - return; - } + if (!(obj instanceof _primitives.Dict)) { + return null; + }
- this.onBeginElement(content.name, content.attributes, isClosed); - j += content.parsed + (isClosed ? 2 : 1); - break; - } - } else { - while (j < s.length && s[j] !== "<") { - j++; - } + const root = new _struct_tree.StructTreeRoot(obj); + root.init(); + return root; + }
- const text = s.substring(i, j); - this.onText(this._resolveEntities(text)); - } + get toplevelPagesDict() { + const pagesObj = this._catDict.get("Pages");
- i = j; + if (!(pagesObj instanceof _primitives.Dict)) { + throw new _util.FormatError("Invalid top-level pages dictionary."); } - }
- onResolveEntity(name) { - return `&${name};`; + return (0, _util.shadow)(this, "toplevelPagesDict", pagesObj); }
- onPi(name, value) {} + get documentOutline() { + let obj = null;
- onComment(text) {} + try { + obj = this._readDocumentOutline(); + } catch (ex) { + if (ex instanceof _core_utils.MissingDataException) { + throw ex; + }
- onCdata(text) {} + (0, _util.warn)("Unable to read document outline."); + }
- onDoctype(doctypeContent) {} + return (0, _util.shadow)(this, "documentOutline", obj); + }
- onText(text) {} + _readDocumentOutline() { + let obj = this._catDict.get("Outlines");
- onBeginElement(name, attributes, isEmpty) {} + if (!(obj instanceof _primitives.Dict)) { + return null; + }
- onEndElement(name) {} + obj = obj.getRaw("First");
- onError(code) {} + if (!(obj instanceof _primitives.Ref)) { + return null; + }
-} + const root = { + items: [] + }; + const queue = [{ + obj, + parent: root + }]; + const processed = new _primitives.RefSet(); + processed.put(obj); + const xref = this.xref, + blackColor = new Uint8ClampedArray(3);
-exports.XMLParserBase = XMLParserBase; + while (queue.length > 0) { + const i = queue.shift(); + const outlineDict = xref.fetchIfRef(i.obj);
-class SimpleDOMNode { - constructor(nodeName, nodeValue) { - this.nodeName = nodeName; - this.nodeValue = nodeValue; - Object.defineProperty(this, "parentNode", { - value: null, - writable: true - }); - } + if (outlineDict === null) { + continue; + }
- get firstChild() { - return this.childNodes && this.childNodes[0]; - } + if (!outlineDict.has("Title")) { + throw new _util.FormatError("Invalid outline item encountered."); + }
- get nextSibling() { - const childNodes = this.parentNode.childNodes; + const data = { + url: null, + dest: null + }; + Catalog.parseDestDictionary({ + destDict: outlineDict, + resultObj: data, + docBaseUrl: this.pdfManager.docBaseUrl + }); + const title = outlineDict.get("Title"); + const flags = outlineDict.get("F") || 0; + const color = outlineDict.getArray("C"); + const count = outlineDict.get("Count"); + let rgbColor = blackColor;
- if (!childNodes) { - return undefined; - } + if (Array.isArray(color) && color.length === 3 && (color[0] !== 0 || color[1] !== 0 || color[2] !== 0)) { + rgbColor = _colorspace.ColorSpace.singletons.rgb.getRgb(color, 0); + }
- const index = childNodes.indexOf(this); + const outlineItem = { + dest: data.dest, + url: data.url, + unsafeUrl: data.unsafeUrl, + newWindow: data.newWindow, + title: (0, _util.stringToPDFString)(title), + color: rgbColor, + count: Number.isInteger(count) ? count : undefined, + bold: !!(flags & 2), + italic: !!(flags & 1), + items: [] + }; + i.parent.items.push(outlineItem); + obj = outlineDict.getRaw("First");
- if (index === -1) { - return undefined; - } + if (obj instanceof _primitives.Ref && !processed.has(obj)) { + queue.push({ + obj, + parent: outlineItem + }); + processed.put(obj); + }
- return childNodes[index + 1]; - } + obj = outlineDict.getRaw("Next");
- get textContent() { - if (!this.childNodes) { - return this.nodeValue || ""; + if (obj instanceof _primitives.Ref && !processed.has(obj)) { + queue.push({ + obj, + parent: i.parent + }); + processed.put(obj); + } }
- return this.childNodes.map(function (child) { - return child.textContent; - }).join(""); + return root.items.length > 0 ? root.items : null; }
- get children() { - return this.childNodes || []; - } + get permissions() { + let permissions = null;
- hasChildNodes() { - return this.childNodes && this.childNodes.length > 0; - } + try { + permissions = this._readPermissions(); + } catch (ex) { + if (ex instanceof _core_utils.MissingDataException) { + throw ex; + }
- searchNode(paths, pos) { - if (pos >= paths.length) { - return this; + (0, _util.warn)("Unable to read permissions."); }
- const component = paths[pos]; - const stack = []; - let node = this; + return (0, _util.shadow)(this, "permissions", permissions); + }
- while (true) { - if (component.name === node.nodeName) { - if (component.pos === 0) { - const res = node.searchNode(paths, pos + 1); + _readPermissions() { + const encrypt = this.xref.trailer.get("Encrypt");
- if (res !== null) { - return res; - } - } else if (stack.length === 0) { - return null; - } else { - const [parent] = stack.pop(); - let siblingPos = 0; - - for (const child of parent.childNodes) { - if (component.name === child.nodeName) { - if (siblingPos === component.pos) { - return child.searchNode(paths, pos + 1); - } + if (!(encrypt instanceof _primitives.Dict)) { + return null; + }
- siblingPos++; - } - } + let flags = encrypt.get("P");
- return node.searchNode(paths, pos + 1); - } - } + if (typeof flags !== "number") { + return null; + }
- if (node.childNodes && node.childNodes.length !== 0) { - stack.push([node, 0]); - node = node.childNodes[0]; - } else if (stack.length === 0) { - return null; - } else { - while (stack.length !== 0) { - const [parent, currentPos] = stack.pop(); - const newPos = currentPos + 1; + flags += 2 ** 32; + const permissions = [];
- if (newPos < parent.childNodes.length) { - stack.push([parent, newPos]); - node = parent.childNodes[newPos]; - break; - } - } + for (const key in _util.PermissionFlag) { + const value = _util.PermissionFlag[key];
- if (stack.length === 0) { - return null; - } + if (flags & value) { + permissions.push(value); } } + + return permissions; }
- dump(buffer) { - if (this.nodeName === "#text") { - buffer.push((0, _core_utils.encodeToXmlString)(this.nodeValue)); - return; - } + get optionalContentConfig() { + let config = null;
- buffer.push(`<${this.nodeName}`); + try { + const properties = this._catDict.get("OCProperties");
- if (this.attributes) { - for (const attribute of this.attributes) { - buffer.push(` ${attribute.name}="${(0, _core_utils.encodeToXmlString)(attribute.value)}"`); + if (!properties) { + return (0, _util.shadow)(this, "optionalContentConfig", null); } - }
- if (this.hasChildNodes()) { - buffer.push(">"); + const defaultConfig = properties.get("D");
- for (const child of this.childNodes) { - child.dump(buffer); + if (!defaultConfig) { + return (0, _util.shadow)(this, "optionalContentConfig", null); }
- buffer.push(`</${this.nodeName}>`); - } else if (this.nodeValue) { - buffer.push(`>${(0, _core_utils.encodeToXmlString)(this.nodeValue)}</${this.nodeName}>`); - } else { - buffer.push("/>"); - } - } - -} + const groupsData = properties.get("OCGs");
-exports.SimpleDOMNode = SimpleDOMNode; + if (!Array.isArray(groupsData)) { + return (0, _util.shadow)(this, "optionalContentConfig", null); + }
-class SimpleXMLParser extends XMLParserBase { - constructor({ - hasAttributes = false, - lowerCaseName = false - }) { - super(); - this._currentFragment = null; - this._stack = null; - this._errorCode = XMLParserErrorCode.NoError; - this._hasAttributes = hasAttributes; - this._lowerCaseName = lowerCaseName; - } + const groups = []; + const groupRefs = [];
- parseFromString(data) { - this._currentFragment = []; - this._stack = []; - this._errorCode = XMLParserErrorCode.NoError; - this.parseXml(data); + for (const groupRef of groupsData) { + if (!(groupRef instanceof _primitives.Ref)) { + continue; + }
- if (this._errorCode !== XMLParserErrorCode.NoError) { - return undefined; - } + groupRefs.push(groupRef); + const group = this.xref.fetchIfRef(groupRef); + groups.push({ + id: groupRef.toString(), + name: typeof group.get("Name") === "string" ? (0, _util.stringToPDFString)(group.get("Name")) : null, + intent: typeof group.get("Intent") === "string" ? (0, _util.stringToPDFString)(group.get("Intent")) : null + }); + }
- const [documentElement] = this._currentFragment; + config = this._readOptionalContentConfig(defaultConfig, groupRefs); + config.groups = groups; + } catch (ex) { + if (ex instanceof _core_utils.MissingDataException) { + throw ex; + }
- if (!documentElement) { - return undefined; + (0, _util.warn)(`Unable to read optional content config: ${ex}`); }
- return { - documentElement - }; + return (0, _util.shadow)(this, "optionalContentConfig", config); }
- onText(text) { - if (isWhitespaceString(text)) { - return; - } - - const node = new SimpleDOMNode("#text", text); - - this._currentFragment.push(node); - } + _readOptionalContentConfig(config, contentGroupRefs) { + function parseOnOff(refs) { + const onParsed = [];
- onCdata(text) { - const node = new SimpleDOMNode("#text", text); + if (Array.isArray(refs)) { + for (const value of refs) { + if (!(value instanceof _primitives.Ref)) { + continue; + }
- this._currentFragment.push(node); - } + if (contentGroupRefs.includes(value)) { + onParsed.push(value.toString()); + } + } + }
- onBeginElement(name, attributes, isEmpty) { - if (this._lowerCaseName) { - name = name.toLowerCase(); + return onParsed; }
- const node = new SimpleDOMNode(name); - node.childNodes = []; - - if (this._hasAttributes) { - node.attributes = attributes; - } + function parseOrder(refs, nestedLevels = 0) { + if (!Array.isArray(refs)) { + return null; + }
- this._currentFragment.push(node); + const order = [];
- if (isEmpty) { - return; - } + for (const value of refs) { + if (value instanceof _primitives.Ref && contentGroupRefs.includes(value)) { + parsedOrderRefs.put(value); + order.push(value.toString()); + continue; + }
- this._stack.push(this._currentFragment); + const nestedOrder = parseNestedOrder(value, nestedLevels);
- this._currentFragment = node.childNodes; - } + if (nestedOrder) { + order.push(nestedOrder); + } + }
- onEndElement(name) { - this._currentFragment = this._stack.pop() || []; - const lastElement = this._currentFragment[this._currentFragment.length - 1]; + if (nestedLevels > 0) { + return order; + }
- if (!lastElement) { - return null; - } + const hiddenGroups = [];
- for (let i = 0, ii = lastElement.childNodes.length; i < ii; i++) { - lastElement.childNodes[i].parentNode = lastElement; - } + for (const groupRef of contentGroupRefs) { + if (parsedOrderRefs.has(groupRef)) { + continue; + }
- return lastElement; - } + hiddenGroups.push(groupRef.toString()); + }
- onError(code) { - this._errorCode = code; - } + if (hiddenGroups.length) { + order.push({ + name: null, + order: hiddenGroups + }); + }
-} + return order; + }
-exports.SimpleXMLParser = SimpleXMLParser; + function parseNestedOrder(ref, nestedLevels) { + if (++nestedLevels > MAX_NESTED_LEVELS) { + (0, _util.warn)("parseNestedOrder - reached MAX_NESTED_LEVELS."); + return null; + }
-/***/ }), -/* 71 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + const value = xref.fetchIfRef(ref);
+ if (!Array.isArray(value)) { + return null; + }
+ const nestedName = xref.fetchIfRef(value[0]);
-Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.StructTreeRoot = exports.StructTreePage = void 0; + if (typeof nestedName !== "string") { + return null; + }
-var _primitives = __w_pdfjs_require__(5); + const nestedOrder = parseOrder(value.slice(1), nestedLevels);
-var _util = __w_pdfjs_require__(2); + if (!nestedOrder || !nestedOrder.length) { + return null; + }
-var _name_number_tree = __w_pdfjs_require__(66); + return { + name: (0, _util.stringToPDFString)(nestedName), + order: nestedOrder + }; + }
-const MAX_DEPTH = 40; -const StructElementType = { - PAGE_CONTENT: "PAGE_CONTENT", - STREAM_CONTENT: "STREAM_CONTENT", - OBJECT: "OBJECT", - ELEMENT: "ELEMENT" -}; + const xref = this.xref, + parsedOrderRefs = new _primitives.RefSet(), + MAX_NESTED_LEVELS = 10; + return { + name: typeof config.get("Name") === "string" ? (0, _util.stringToPDFString)(config.get("Name")) : null, + creator: typeof config.get("Creator") === "string" ? (0, _util.stringToPDFString)(config.get("Creator")) : null, + baseState: config.get("BaseState") instanceof _primitives.Name ? config.get("BaseState").name : null, + on: parseOnOff(config.get("ON")), + off: parseOnOff(config.get("OFF")), + order: parseOrder(config.get("Order")), + groups: null + }; + }
-class StructTreeRoot { - constructor(rootDict) { - this.dict = rootDict; - this.roleMap = new Map(); + setActualNumPages(num = null) { + this._actualNumPages = num; }
- init() { - this.readRoleMap(); + get hasActualNumPages() { + return this._actualNumPages !== null; }
- readRoleMap() { - const roleMapDict = this.dict.get("RoleMap"); + get _pagesCount() { + const obj = this.toplevelPagesDict.get("Count");
- if (!(roleMapDict instanceof _primitives.Dict)) { - return; + if (!Number.isInteger(obj)) { + throw new _util.FormatError("Page count in top-level pages dictionary is not an integer."); }
- roleMapDict.forEach((key, value) => { - if (!(value instanceof _primitives.Name)) { - return; - } - - this.roleMap.set(key, value.name); - }); + return (0, _util.shadow)(this, "_pagesCount", obj); }
-} + get numPages() { + return this.hasActualNumPages ? this._actualNumPages : this._pagesCount; + }
-exports.StructTreeRoot = StructTreeRoot; + get destinations() { + const obj = this._readDests(), + dests = Object.create(null);
-class StructElementNode { - constructor(tree, dict) { - this.tree = tree; - this.dict = dict; - this.kids = []; - this.parseKids(); - } + if (obj instanceof _name_number_tree.NameTree) { + for (const [key, value] of obj.getAll()) { + const dest = fetchDestination(value);
- get role() { - const nameObj = this.dict.get("S"); - const name = nameObj instanceof _primitives.Name ? nameObj.name : ""; - const { - root - } = this.tree; + if (dest) { + dests[(0, _util.stringToPDFString)(key)] = dest; + } + } + } else if (obj instanceof _primitives.Dict) { + obj.forEach(function (key, value) { + const dest = fetchDestination(value);
- if (root.roleMap.has(name)) { - return root.roleMap.get(name); + if (dest) { + dests[key] = dest; + } + }); }
- return name; + return (0, _util.shadow)(this, "destinations", dests); }
- parseKids() { - let pageObjId = null; - const objRef = this.dict.getRaw("Pg"); + getDestination(id) { + const obj = this._readDests();
- if (objRef instanceof _primitives.Ref) { - pageObjId = objRef.toString(); - } + if (obj instanceof _name_number_tree.NameTree) { + const dest = fetchDestination(obj.get(id));
- const kids = this.dict.get("K"); + if (dest) { + return dest; + }
- if (Array.isArray(kids)) { - for (const kid of kids) { - const element = this.parseKid(pageObjId, kid); + const allDest = this.destinations[id];
- if (element) { - this.kids.push(element); - } + if (allDest) { + (0, _util.warn)(`Found "${id}" at an incorrect position in the NameTree.`); + return allDest; } - } else { - const element = this.parseKid(pageObjId, kids); + } else if (obj instanceof _primitives.Dict) { + const dest = fetchDestination(obj.get(id));
- if (element) { - this.kids.push(element); + if (dest) { + return dest; } } + + return null; }
- parseKid(pageObjId, kid) { - if (Number.isInteger(kid)) { - if (this.tree.pageDict.objId !== pageObjId) { - return null; - } + _readDests() { + const obj = this._catDict.get("Names");
- return new StructElement({ - type: StructElementType.PAGE_CONTENT, - mcid: kid, - pageObjId - }); + if (obj && obj.has("Dests")) { + return new _name_number_tree.NameTree(obj.getRaw("Dests"), this.xref); + } else if (this._catDict.has("Dests")) { + return this._catDict.get("Dests"); }
- let kidDict = null; - - if (kid instanceof _primitives.Ref) { - kidDict = this.dict.xref.fetch(kid); - } else if (kid instanceof _primitives.Dict) { - kidDict = kid; - } + return undefined; + }
- if (!kidDict) { - return null; - } + get pageLabels() { + let obj = null;
- const pageRef = kidDict.getRaw("Pg"); + try { + obj = this._readPageLabels(); + } catch (ex) { + if (ex instanceof _core_utils.MissingDataException) { + throw ex; + }
- if (pageRef instanceof _primitives.Ref) { - pageObjId = pageRef.toString(); + (0, _util.warn)("Unable to read page labels."); }
- const type = kidDict.get("Type") instanceof _primitives.Name ? kidDict.get("Type").name : null; + return (0, _util.shadow)(this, "pageLabels", obj); + }
- if (type === "MCR") { - if (this.tree.pageDict.objId !== pageObjId) { - return null; - } + _readPageLabels() { + const obj = this._catDict.getRaw("PageLabels");
- return new StructElement({ - type: StructElementType.STREAM_CONTENT, - refObjId: kidDict.getRaw("Stm") instanceof _primitives.Ref ? kidDict.getRaw("Stm").toString() : null, - pageObjId, - mcid: kidDict.get("MCID") - }); + if (!obj) { + return null; }
- if (type === "OBJR") { - if (this.tree.pageDict.objId !== pageObjId) { - return null; - } - - return new StructElement({ - type: StructElementType.OBJECT, - refObjId: kidDict.getRaw("Obj") instanceof _primitives.Ref ? kidDict.getRaw("Obj").toString() : null, - pageObjId - }); - } + const pageLabels = new Array(this.numPages); + let style = null, + prefix = ""; + const numberTree = new _name_number_tree.NumberTree(obj, this.xref); + const nums = numberTree.getAll(); + let currentLabel = "", + currentIndex = 1;
- return new StructElement({ - type: StructElementType.ELEMENT, - dict: kidDict - }); - } + for (let i = 0, ii = this.numPages; i < ii; i++) { + const labelDict = nums.get(i);
-} + if (labelDict !== undefined) { + if (!(labelDict instanceof _primitives.Dict)) { + throw new _util.FormatError("PageLabel is not a dictionary."); + }
-class StructElement { - constructor({ - type, - dict = null, - mcid = null, - pageObjId = null, - refObjId = null - }) { - this.type = type; - this.dict = dict; - this.mcid = mcid; - this.pageObjId = pageObjId; - this.refObjId = refObjId; - this.parentNode = null; - } + if (labelDict.has("Type") && !(0, _primitives.isName)(labelDict.get("Type"), "PageLabel")) { + throw new _util.FormatError("Invalid type in PageLabel dictionary."); + }
-} + if (labelDict.has("S")) { + const s = labelDict.get("S");
-class StructTreePage { - constructor(structTreeRoot, pageDict) { - this.root = structTreeRoot; - this.rootDict = structTreeRoot ? structTreeRoot.dict : null; - this.pageDict = pageDict; - this.nodes = []; - } + if (!(s instanceof _primitives.Name)) { + throw new _util.FormatError("Invalid style in PageLabel dictionary."); + }
- parse() { - if (!this.root || !this.rootDict) { - return; - } + style = s.name; + } else { + style = null; + }
- const parentTree = this.rootDict.get("ParentTree"); + if (labelDict.has("P")) { + const p = labelDict.get("P");
- if (!parentTree) { - return; - } + if (typeof p !== "string") { + throw new _util.FormatError("Invalid prefix in PageLabel dictionary."); + }
- const id = this.pageDict.get("StructParents"); - - if (!Number.isInteger(id)) { - return; - } - - const numberTree = new _name_number_tree.NumberTree(parentTree, this.rootDict.xref); - const parentArray = numberTree.get(id); + prefix = (0, _util.stringToPDFString)(p); + } else { + prefix = ""; + }
- if (!Array.isArray(parentArray)) { - return; - } + if (labelDict.has("St")) { + const st = labelDict.get("St");
- const map = new Map(); + if (!(Number.isInteger(st) && st >= 1)) { + throw new _util.FormatError("Invalid start in PageLabel dictionary."); + }
- for (const ref of parentArray) { - if (ref instanceof _primitives.Ref) { - this.addNode(this.rootDict.xref.fetch(ref), map); + currentIndex = st; + } else { + currentIndex = 1; + } } - } - }
- addNode(dict, map, level = 0) { - if (level > MAX_DEPTH) { - (0, _util.warn)("StructTree MAX_DEPTH reached."); - return null; - } + switch (style) { + case "D": + currentLabel = currentIndex; + break;
- if (map.has(dict)) { - return map.get(dict); - } + case "R": + case "r": + currentLabel = (0, _core_utils.toRomanNumerals)(currentIndex, style === "r"); + break;
- const element = new StructElementNode(this, dict); - map.set(dict, element); - const parent = dict.get("P"); + case "A": + case "a": + const LIMIT = 26; + const A_UPPER_CASE = 0x41, + A_LOWER_CASE = 0x61; + const baseCharCode = style === "a" ? A_LOWER_CASE : A_UPPER_CASE; + const letterIndex = currentIndex - 1; + const character = String.fromCharCode(baseCharCode + letterIndex % LIMIT); + currentLabel = character.repeat(Math.floor(letterIndex / LIMIT) + 1); + break;
- if (!parent || (0, _primitives.isName)(parent.get("Type"), "StructTreeRoot")) { - if (!this.addTopLevelNode(dict, element)) { - map.delete(dict); + default: + if (style) { + throw new _util.FormatError(`Invalid style "${style}" in PageLabel dictionary.`); + } + + currentLabel = ""; }
- return element; + pageLabels[i] = prefix + currentLabel; + currentIndex++; }
- const parentNode = this.addNode(parent, map, level + 1); + return pageLabels; + }
- if (!parentNode) { - return element; - } + get pageLayout() { + const obj = this._catDict.get("PageLayout");
- let save = false; + let pageLayout = "";
- for (const kid of parentNode.kids) { - if (kid.type === StructElementType.ELEMENT && kid.dict === dict) { - kid.parentNode = element; - save = true; + if (obj instanceof _primitives.Name) { + switch (obj.name) { + case "SinglePage": + case "OneColumn": + case "TwoColumnLeft": + case "TwoColumnRight": + case "TwoPageLeft": + case "TwoPageRight": + pageLayout = obj.name; } }
- if (!save) { - map.delete(dict); - } - - return element; + return (0, _util.shadow)(this, "pageLayout", pageLayout); }
- addTopLevelNode(dict, element) { - const obj = this.rootDict.get("K"); + get pageMode() { + const obj = this._catDict.get("PageMode");
- if (!obj) { - return false; - } + let pageMode = "UseNone";
- if (obj instanceof _primitives.Dict) { - if (obj.objId !== dict.objId) { - return false; + if (obj instanceof _primitives.Name) { + switch (obj.name) { + case "UseNone": + case "UseOutlines": + case "UseThumbs": + case "FullScreen": + case "UseOC": + case "UseAttachments": + pageMode = obj.name; } - - this.nodes[0] = element; - return true; }
- if (!Array.isArray(obj)) { - return true; + return (0, _util.shadow)(this, "pageMode", pageMode); + } + + get viewerPreferences() { + const obj = this._catDict.get("ViewerPreferences"); + + if (!(obj instanceof _primitives.Dict)) { + return (0, _util.shadow)(this, "viewerPreferences", null); }
- let save = false; + let prefs = null;
- for (let i = 0; i < obj.length; i++) { - const kidRef = obj[i]; + for (const key of obj.getKeys()) { + const value = obj.get(key); + let prefValue;
- if (kidRef && kidRef.toString() === dict.objId) { - this.nodes[i] = element; - save = true; - } - } + switch (key) { + case "HideToolbar": + case "HideMenubar": + case "HideWindowUI": + case "FitWindow": + case "CenterWindow": + case "DisplayDocTitle": + case "PickTrayByPDFSize": + if (typeof value === "boolean") { + prefValue = value; + }
- return save; - } + break;
- get serializable() { - function nodeToSerializable(node, parent, level = 0) { - if (level > MAX_DEPTH) { - (0, _util.warn)("StructTree too deep to be fully serialized."); - return; - } + case "NonFullScreenPageMode": + if (value instanceof _primitives.Name) { + switch (value.name) { + case "UseNone": + case "UseOutlines": + case "UseThumbs": + case "UseOC": + prefValue = value.name; + break;
- const obj = Object.create(null); - obj.role = node.role; - obj.children = []; - parent.children.push(obj); - const alt = node.dict.get("Alt"); + default: + prefValue = "UseNone"; + } + }
- if (typeof alt === "string") { - obj.alt = (0, _util.stringToPDFString)(alt); - } + break;
- const lang = node.dict.get("Lang"); + case "Direction": + if (value instanceof _primitives.Name) { + switch (value.name) { + case "L2R": + case "R2L": + prefValue = value.name; + break;
- if (typeof lang === "string") { - obj.lang = (0, _util.stringToPDFString)(lang); - } + default: + prefValue = "L2R"; + } + }
- for (const kid of node.kids) { - const kidElement = kid.type === StructElementType.ELEMENT ? kid.parentNode : null; + break;
- if (kidElement) { - nodeToSerializable(kidElement, obj, level + 1); - continue; - } else if (kid.type === StructElementType.PAGE_CONTENT || kid.type === StructElementType.STREAM_CONTENT) { - obj.children.push({ - type: "content", - id: `page${kid.pageObjId}_mcid${kid.mcid}` - }); - } else if (kid.type === StructElementType.OBJECT) { - obj.children.push({ - type: "object", - id: kid.refObjId - }); - } - } - } + case "ViewArea": + case "ViewClip": + case "PrintArea": + case "PrintClip": + if (value instanceof _primitives.Name) { + switch (value.name) { + case "MediaBox": + case "CropBox": + case "BleedBox": + case "TrimBox": + case "ArtBox": + prefValue = value.name; + break;
- const root = Object.create(null); - root.children = []; - root.role = "Root"; + default: + prefValue = "CropBox"; + } + }
- for (const child of this.nodes) { - if (!child) { - continue; - } + break;
- nodeToSerializable(child, root); - } + case "PrintScaling": + if (value instanceof _primitives.Name) { + switch (value.name) { + case "None": + case "AppDefault": + prefValue = value.name; + break;
- return root; - } + default: + prefValue = "AppDefault"; + } + }
-} + break;
-exports.StructTreePage = StructTreePage; + case "Duplex": + if (value instanceof _primitives.Name) { + switch (value.name) { + case "Simplex": + case "DuplexFlipShortEdge": + case "DuplexFlipLongEdge": + prefValue = value.name; + break;
-/***/ }), -/* 72 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + default: + prefValue = "None"; + } + }
+ break;
+ case "PrintPageRange": + if (Array.isArray(value) && value.length % 2 === 0) { + const isValid = value.every((page, i, arr) => { + return Number.isInteger(page) && page > 0 && (i === 0 || page >= arr[i - 1]) && page <= this.numPages; + });
-Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.ObjectLoader = void 0; + if (isValid) { + prefValue = value; + } + }
-var _primitives = __w_pdfjs_require__(5); + break;
-var _base_stream = __w_pdfjs_require__(9); + case "NumCopies": + if (Number.isInteger(value) && value > 0) { + prefValue = value; + }
-var _core_utils = __w_pdfjs_require__(8); + break;
-var _util = __w_pdfjs_require__(2); + default: + (0, _util.warn)(`Ignoring non-standard key in ViewerPreferences: ${key}.`); + continue; + }
-function mayHaveChildren(value) { - return value instanceof _primitives.Ref || value instanceof _primitives.Dict || value instanceof _base_stream.BaseStream || Array.isArray(value); -} + if (prefValue === undefined) { + (0, _util.warn)(`Bad value, for key "${key}", in ViewerPreferences: ${value}.`); + continue; + }
-function addChildren(node, nodesToVisit) { - if (node instanceof _primitives.Dict) { - node = node.getRawValues(); - } else if (node instanceof _base_stream.BaseStream) { - node = node.dict.getRawValues(); - } else if (!Array.isArray(node)) { - return; - } + if (!prefs) { + prefs = Object.create(null); + }
- for (const rawValue of node) { - if (mayHaveChildren(rawValue)) { - nodesToVisit.push(rawValue); + prefs[key] = prefValue; } - } -}
-class ObjectLoader { - constructor(dict, keys, xref) { - this.dict = dict; - this.keys = keys; - this.xref = xref; - this.refSet = null; + return (0, _util.shadow)(this, "viewerPreferences", prefs); }
- async load() { - if (this.xref.stream.isDataLoaded) { - return undefined; - } + get openAction() { + const obj = this._catDict.get("OpenAction");
- const { - keys, - dict - } = this; - this.refSet = new _primitives.RefSet(); - const nodesToVisit = []; + const openAction = Object.create(null);
- for (let i = 0, ii = keys.length; i < ii; i++) { - const rawValue = dict.getRaw(keys[i]); + if (obj instanceof _primitives.Dict) { + const destDict = new _primitives.Dict(this.xref); + destDict.set("A", obj); + const resultObj = { + url: null, + dest: null, + action: null + }; + Catalog.parseDestDictionary({ + destDict, + resultObj + });
- if (rawValue !== undefined) { - nodesToVisit.push(rawValue); + if (Array.isArray(resultObj.dest)) { + openAction.dest = resultObj.dest; + } else if (resultObj.action) { + openAction.action = resultObj.action; } + } else if (Array.isArray(obj)) { + openAction.dest = obj; }
- return this._walk(nodesToVisit); + return (0, _util.shadow)(this, "openAction", (0, _util.objectSize)(openAction) > 0 ? openAction : null); }
- async _walk(nodesToVisit) { - const nodesToRevisit = []; - const pendingRequests = []; + get attachments() { + const obj = this._catDict.get("Names");
- while (nodesToVisit.length) { - let currentNode = nodesToVisit.pop(); + let attachments = null;
- if (currentNode instanceof _primitives.Ref) { - if (this.refSet.has(currentNode)) { - continue; - } + if (obj instanceof _primitives.Dict && obj.has("EmbeddedFiles")) { + const nameTree = new _name_number_tree.NameTree(obj.getRaw("EmbeddedFiles"), this.xref);
- try { - this.refSet.put(currentNode); - currentNode = this.xref.fetch(currentNode); - } catch (ex) { - if (!(ex instanceof _core_utils.MissingDataException)) { - (0, _util.warn)(`ObjectLoader._walk - requesting all data: "${ex}".`); - this.refSet = null; - const { - manager - } = this.xref.stream; - return manager.requestAllChunks(); - } + for (const [key, value] of nameTree.getAll()) { + const fs = new _file_spec.FileSpec(value, this.xref);
- nodesToRevisit.push(currentNode); - pendingRequests.push({ - begin: ex.begin, - end: ex.end - }); + if (!attachments) { + attachments = Object.create(null); } + + attachments[(0, _util.stringToPDFString)(key)] = fs.serializable; } + }
- if (currentNode instanceof _base_stream.BaseStream) { - const baseStreams = currentNode.getBaseStreams(); + return (0, _util.shadow)(this, "attachments", attachments); + }
- if (baseStreams) { - let foundMissingData = false; + get xfaImages() { + const obj = this._catDict.get("Names");
- for (const stream of baseStreams) { - if (stream.isDataLoaded) { - continue; - } + let xfaImages = null;
- foundMissingData = true; - pendingRequests.push({ - begin: stream.start, - end: stream.end - }); - } + if (obj instanceof _primitives.Dict && obj.has("XFAImages")) { + const nameTree = new _name_number_tree.NameTree(obj.getRaw("XFAImages"), this.xref);
- if (foundMissingData) { - nodesToRevisit.push(currentNode); - } + for (const [key, value] of nameTree.getAll()) { + if (!xfaImages) { + xfaImages = new _primitives.Dict(this.xref); } - } - - addChildren(currentNode, nodesToVisit); - } - - if (pendingRequests.length) { - await this.xref.stream.manager.requestRanges(pendingRequests);
- for (const node of nodesToRevisit) { - if (node instanceof _primitives.Ref) { - this.refSet.remove(node); - } + xfaImages.set((0, _util.stringToPDFString)(key), value); } - - return this._walk(nodesToRevisit); }
- this.refSet = null; - return undefined; + return (0, _util.shadow)(this, "xfaImages", xfaImages); }
-} + _collectJavaScript() { + const obj = this._catDict.get("Names");
-exports.ObjectLoader = ObjectLoader; + let javaScript = null;
-/***/ }), -/* 73 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + function appendIfJavaScriptDict(name, jsDict) { + if (!(jsDict instanceof _primitives.Dict)) { + return; + }
+ if (!(0, _primitives.isName)(jsDict.get("S"), "JavaScript")) { + return; + }
+ let js = jsDict.get("JS");
-Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.incrementalUpdate = incrementalUpdate; -exports.writeDict = writeDict; + if (js instanceof _base_stream.BaseStream) { + js = js.getString(); + } else if (typeof js !== "string") { + return; + }
-var _util = __w_pdfjs_require__(2); + if (javaScript === null) { + javaScript = new Map(); + }
-var _primitives = __w_pdfjs_require__(5); + js = (0, _util.stringToPDFString)(js).replace(/\u0000/g, ""); + javaScript.set(name, js); + } + + if (obj instanceof _primitives.Dict && obj.has("JavaScript")) { + const nameTree = new _name_number_tree.NameTree(obj.getRaw("JavaScript"), this.xref);
-var _core_utils = __w_pdfjs_require__(8); + for (const [key, value] of nameTree.getAll()) { + appendIfJavaScriptDict((0, _util.stringToPDFString)(key), value); + } + }
-var _xml_parser = __w_pdfjs_require__(70); + const openAction = this._catDict.get("OpenAction");
-var _base_stream = __w_pdfjs_require__(9); + if (openAction) { + appendIfJavaScriptDict("OpenAction", openAction); + }
-var _crypto = __w_pdfjs_require__(74); + return javaScript; + }
-function writeDict(dict, buffer, transform) { - buffer.push("<<"); + get javaScript() { + const javaScript = this._collectJavaScript();
- for (const key of dict.getKeys()) { - buffer.push(` /${(0, _core_utils.escapePDFName)(key)} `); - writeValue(dict.getRaw(key), buffer, transform); + return (0, _util.shadow)(this, "javaScript", javaScript ? [...javaScript.values()] : null); }
- buffer.push(">>"); -} + get jsActions() { + const javaScript = this._collectJavaScript();
-function writeStream(stream, buffer, transform) { - writeDict(stream.dict, buffer, transform); - buffer.push(" stream\n"); - let string = stream.getString(); - - if (transform !== null) { - string = transform.encryptString(string); - } - - buffer.push(string, "\nendstream\n"); -} + let actions = (0, _core_utils.collectActions)(this.xref, this._catDict, _util.DocumentActionEventType);
-function writeArray(array, buffer, transform) { - buffer.push("["); - let first = true; + if (javaScript) { + if (!actions) { + actions = Object.create(null); + }
- for (const val of array) { - if (!first) { - buffer.push(" "); - } else { - first = false; + for (const [key, val] of javaScript) { + if (key in actions) { + actions[key].push(val); + } else { + actions[key] = [val]; + } + } }
- writeValue(val, buffer, transform); + return (0, _util.shadow)(this, "jsActions", actions); }
- buffer.push("]"); -} + async fontFallback(id, handler) { + const translatedFonts = await Promise.all(this.fontCache);
-function numberToString(value) { - if (Number.isInteger(value)) { - return value.toString(); + for (const translatedFont of translatedFonts) { + if (translatedFont.loadedName === id) { + translatedFont.fallback(handler); + return; + } + } }
- const roundedValue = Math.round(value * 100); + async cleanup(manuallyTriggered = false) { + (0, _cleanup_helper.clearGlobalCaches)(); + this.globalImageCache.clear(manuallyTriggered); + this.pageKidsCountCache.clear(); + this.pageIndexCache.clear(); + this.nonBlendModesSet.clear(); + const translatedFonts = await Promise.all(this.fontCache);
- if (roundedValue % 100 === 0) { - return (roundedValue / 100).toString(); - } + for (const { + dict + } of translatedFonts) { + delete dict.cacheKey; + }
- if (roundedValue % 10 === 0) { - return value.toFixed(1); + this.fontCache.clear(); + this.builtInCMapCache.clear(); + this.standardFontDataCache.clear(); }
- return value.toFixed(2); -} + async getPageDict(pageIndex) { + const nodesToVisit = [this.toplevelPagesDict]; + const visitedNodes = new _primitives.RefSet();
-function writeValue(value, buffer, transform) { - if (value instanceof _primitives.Name) { - buffer.push(`/${(0, _core_utils.escapePDFName)(value.name)}`); - } else if (value instanceof _primitives.Ref) { - buffer.push(`${value.num} ${value.gen} R`); - } else if (Array.isArray(value)) { - writeArray(value, buffer, transform); - } else if (typeof value === "string") { - if (transform !== null) { - value = transform.encryptString(value); - } + const pagesRef = this._catDict.getRaw("Pages");
- buffer.push(`(${(0, _util.escapeString)(value)})`); - } else if (typeof value === "number") { - buffer.push(numberToString(value)); - } else if (typeof value === "boolean") { - buffer.push(value.toString()); - } else if (value instanceof _primitives.Dict) { - writeDict(value, buffer, transform); - } else if (value instanceof _base_stream.BaseStream) { - writeStream(value, buffer, transform); - } else if (value === null) { - buffer.push("null"); - } else { - (0, _util.warn)(`Unhandled value in writer: ${typeof value}, please file a bug.`); - } -} + if (pagesRef instanceof _primitives.Ref) { + visitedNodes.put(pagesRef); + }
-function writeInt(number, size, offset, buffer) { - for (let i = size + offset - 1; i > offset - 1; i--) { - buffer[i] = number & 0xff; - number >>= 8; - } + const xref = this.xref, + pageKidsCountCache = this.pageKidsCountCache, + pageIndexCache = this.pageIndexCache; + let currentPageIndex = 0;
- return offset + size; -} + while (nodesToVisit.length) { + const currentNode = nodesToVisit.pop();
-function writeString(string, offset, buffer) { - for (let i = 0, len = string.length; i < len; i++) { - buffer[offset + i] = string.charCodeAt(i) & 0xff; - } -} + if (currentNode instanceof _primitives.Ref) { + const count = pageKidsCountCache.get(currentNode);
-function computeMD5(filesize, xrefInfo) { - const time = Math.floor(Date.now() / 1000); - const filename = xrefInfo.filename || ""; - const md5Buffer = [time.toString(), filename, filesize.toString()]; - let md5BufferLen = md5Buffer.reduce((a, str) => a + str.length, 0); + if (count >= 0 && currentPageIndex + count <= pageIndex) { + currentPageIndex += count; + continue; + }
- for (const value of Object.values(xrefInfo.info)) { - md5Buffer.push(value); - md5BufferLen += value.length; - } + if (visitedNodes.has(currentNode)) { + throw new _util.FormatError("Pages tree contains circular reference."); + }
- const array = new Uint8Array(md5BufferLen); - let offset = 0; + visitedNodes.put(currentNode); + const obj = await xref.fetchAsync(currentNode);
- for (const str of md5Buffer) { - writeString(str, offset, array); - offset += str.length; - } + if (obj instanceof _primitives.Dict) { + let type = obj.getRaw("Type");
- return (0, _util.bytesToString)((0, _crypto.calculateMD5)(array)); -} + if (type instanceof _primitives.Ref) { + type = await xref.fetchAsync(type); + }
-function writeXFADataForAcroform(str, newRefs) { - const xml = new _xml_parser.SimpleXMLParser({ - hasAttributes: true - }).parseFromString(str); + if ((0, _primitives.isName)(type, "Page") || !obj.has("Kids")) { + if (!pageKidsCountCache.has(currentNode)) { + pageKidsCountCache.put(currentNode, 1); + }
- for (const { - xfa - } of newRefs) { - if (!xfa) { - continue; - } + if (!pageIndexCache.has(currentNode)) { + pageIndexCache.put(currentNode, currentPageIndex); + }
- const { - path, - value - } = xfa; + if (currentPageIndex === pageIndex) { + return [obj, currentNode]; + }
- if (!path) { - continue; - } + currentPageIndex++; + continue; + } + }
- const node = xml.documentElement.searchNode((0, _core_utils.parseXFAPath)(path), 0); + nodesToVisit.push(obj); + continue; + }
- if (node) { - if (Array.isArray(value)) { - node.childNodes = value.map(val => new _xml_parser.SimpleDOMNode("value", val)); - } else { - node.childNodes = [new _xml_parser.SimpleDOMNode("#text", value)]; + if (!(currentNode instanceof _primitives.Dict)) { + throw new _util.FormatError("Page dictionary kid reference points to wrong type of object."); } - } else { - (0, _util.warn)(`Node not found for path: ${path}`); - } - }
- const buffer = []; - xml.documentElement.dump(buffer); - return buffer.join(""); -} + const { + objId + } = currentNode; + let count = currentNode.getRaw("Count");
-function updateXFA({ - xfaData, - xfaDatasetsRef, - hasXfaDatasetsEntry, - acroFormRef, - acroForm, - newRefs, - xref, - xrefInfo -}) { - if (xref === null) { - return; - } + if (count instanceof _primitives.Ref) { + count = await xref.fetchAsync(count); + }
- if (!hasXfaDatasetsEntry) { - if (!acroFormRef) { - (0, _util.warn)("XFA - Cannot save it"); - return; - } + if (Number.isInteger(count) && count >= 0) { + if (objId && !pageKidsCountCache.has(objId)) { + pageKidsCountCache.put(objId, count); + }
- const oldXfa = acroForm.get("XFA"); - const newXfa = oldXfa.slice(); - newXfa.splice(2, 0, "datasets"); - newXfa.splice(3, 0, xfaDatasetsRef); - acroForm.set("XFA", newXfa); - const encrypt = xref.encrypt; - let transform = null; + if (currentPageIndex + count <= pageIndex) { + currentPageIndex += count; + continue; + } + }
- if (encrypt) { - transform = encrypt.createCipherTransform(acroFormRef.num, acroFormRef.gen); - } + let kids = currentNode.getRaw("Kids");
- const buffer = [`${acroFormRef.num} ${acroFormRef.gen} obj\n`]; - writeDict(acroForm, buffer, transform); - buffer.push("\n"); - acroForm.set("XFA", oldXfa); - newRefs.push({ - ref: acroFormRef, - data: buffer.join("") - }); - } + if (kids instanceof _primitives.Ref) { + kids = await xref.fetchAsync(kids); + }
- if (xfaData === null) { - const datasets = xref.fetchIfRef(xfaDatasetsRef); - xfaData = writeXFADataForAcroform(datasets.getString(), newRefs); - } + if (!Array.isArray(kids)) { + let type = currentNode.getRaw("Type");
- const encrypt = xref.encrypt; + if (type instanceof _primitives.Ref) { + type = await xref.fetchAsync(type); + }
- if (encrypt) { - const transform = encrypt.createCipherTransform(xfaDatasetsRef.num, xfaDatasetsRef.gen); - xfaData = transform.encryptString(xfaData); - } + if ((0, _primitives.isName)(type, "Page") || !currentNode.has("Kids")) { + if (currentPageIndex === pageIndex) { + return [currentNode, null]; + }
- const data = `${xfaDatasetsRef.num} ${xfaDatasetsRef.gen} obj\n` + `<< /Type /EmbeddedFile /Length ${xfaData.length}>>\nstream\n` + xfaData + "\nendstream\nendobj\n"; - newRefs.push({ - ref: xfaDatasetsRef, - data - }); -} + currentPageIndex++; + continue; + }
-function incrementalUpdate({ - originalData, - xrefInfo, - newRefs, - xref = null, - hasXfa = false, - xfaDatasetsRef = null, - hasXfaDatasetsEntry = false, - acroFormRef = null, - acroForm = null, - xfaData = null -}) { - if (hasXfa) { - updateXFA({ - xfaData, - xfaDatasetsRef, - hasXfaDatasetsEntry, - acroFormRef, - acroForm, - newRefs, - xref, - xrefInfo - }); - } + throw new _util.FormatError("Page dictionary kids object is not an array."); + }
- const newXref = new _primitives.Dict(null); - const refForXrefTable = xrefInfo.newRef; - let buffer, baseOffset; - const lastByte = originalData[originalData.length - 1]; + for (let last = kids.length - 1; last >= 0; last--) { + nodesToVisit.push(kids[last]); + } + }
- if (lastByte === 0x0a || lastByte === 0x0d) { - buffer = []; - baseOffset = originalData.length; - } else { - buffer = ["\n"]; - baseOffset = originalData.length + 1; + throw new Error(`Page index ${pageIndex} not found.`); }
- newXref.set("Size", refForXrefTable.num + 1); - newXref.set("Prev", xrefInfo.startXRef); - newXref.set("Type", _primitives.Name.get("XRef")); - - if (xrefInfo.rootRef !== null) { - newXref.set("Root", xrefInfo.rootRef); - } + async getAllPageDicts(recoveryMode = false) { + const queue = [{ + currentNode: this.toplevelPagesDict, + posInKids: 0 + }]; + const visitedNodes = new _primitives.RefSet();
- if (xrefInfo.infoRef !== null) { - newXref.set("Info", xrefInfo.infoRef); - } + const pagesRef = this._catDict.getRaw("Pages");
- if (xrefInfo.encryptRef !== null) { - newXref.set("Encrypt", xrefInfo.encryptRef); - } + if (pagesRef instanceof _primitives.Ref) { + visitedNodes.put(pagesRef); + }
- newRefs.push({ - ref: refForXrefTable, - data: "" - }); - newRefs = newRefs.sort((a, b) => { - return a.ref.num - b.ref.num; - }); - const xrefTableData = [[0, 1, 0xffff]]; - const indexes = [0, 1]; - let maxOffset = 0; + const map = new Map(), + xref = this.xref, + pageIndexCache = this.pageIndexCache; + let pageIndex = 0;
- for (const { - ref, - data - } of newRefs) { - maxOffset = Math.max(maxOffset, baseOffset); - xrefTableData.push([1, baseOffset, Math.min(ref.gen, 0xffff)]); - baseOffset += data.length; - indexes.push(ref.num, 1); - buffer.push(data); - } + function addPageDict(pageDict, pageRef) { + if (pageRef && !pageIndexCache.has(pageRef)) { + pageIndexCache.put(pageRef, pageIndex); + }
- newXref.set("Index", indexes); + map.set(pageIndex++, [pageDict, pageRef]); + }
- if (Array.isArray(xrefInfo.fileIds) && xrefInfo.fileIds.length > 0) { - const md5 = computeMD5(baseOffset, xrefInfo); - newXref.set("ID", [xrefInfo.fileIds[0], md5]); - } + function addPageError(error) { + if (error instanceof _core_utils.XRefEntryException && !recoveryMode) { + throw error; + }
- const offsetSize = Math.ceil(Math.log2(maxOffset) / 8); - const sizes = [1, offsetSize, 2]; - const structSize = sizes[0] + sizes[1] + sizes[2]; - const tableLength = structSize * xrefTableData.length; - newXref.set("W", sizes); - newXref.set("Length", tableLength); - buffer.push(`${refForXrefTable.num} ${refForXrefTable.gen} obj\n`); - writeDict(newXref, buffer, null); - buffer.push(" stream\n"); - const bufferLen = buffer.reduce((a, str) => a + str.length, 0); - const footer = `\nendstream\nendobj\nstartxref\n${baseOffset}\n%%EOF\n`; - const array = new Uint8Array(originalData.length + bufferLen + tableLength + footer.length); - array.set(originalData); - let offset = originalData.length; + map.set(pageIndex++, [error, null]); + }
- for (const str of buffer) { - writeString(str, offset, array); - offset += str.length; - } + while (queue.length > 0) { + const queueItem = queue.at(-1); + const { + currentNode, + posInKids + } = queueItem; + let kids = currentNode.getRaw("Kids");
- for (const [type, objOffset, gen] of xrefTableData) { - offset = writeInt(type, sizes[0], offset, array); - offset = writeInt(objOffset, sizes[1], offset, array); - offset = writeInt(gen, sizes[2], offset, array); - } + if (kids instanceof _primitives.Ref) { + try { + kids = await xref.fetchAsync(kids); + } catch (ex) { + addPageError(ex); + break; + } + }
- writeString(footer, offset, array); - return array; -} + if (!Array.isArray(kids)) { + addPageError(new _util.FormatError("Page dictionary kids object is not an array.")); + break; + }
-/***/ }), -/* 74 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + if (posInKids >= kids.length) { + queue.pop(); + continue; + }
+ const kidObj = kids[posInKids]; + let obj;
+ if (kidObj instanceof _primitives.Ref) { + if (visitedNodes.has(kidObj)) { + addPageError(new _util.FormatError("Pages tree contains circular reference.")); + break; + }
-Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.calculateSHA256 = exports.calculateMD5 = exports.PDF20 = exports.PDF17 = exports.CipherTransformFactory = exports.ARCFourCipher = exports.AES256Cipher = exports.AES128Cipher = void 0; -exports.calculateSHA384 = calculateSHA384; -exports.calculateSHA512 = void 0; + visitedNodes.put(kidObj);
-var _util = __w_pdfjs_require__(2); + try { + obj = await xref.fetchAsync(kidObj); + } catch (ex) { + addPageError(ex); + break; + } + } else { + obj = kidObj; + }
-var _primitives = __w_pdfjs_require__(5); + if (!(obj instanceof _primitives.Dict)) { + addPageError(new _util.FormatError("Page dictionary kid reference points to wrong type of object.")); + break; + }
-var _decrypt_stream = __w_pdfjs_require__(75); + let type = obj.getRaw("Type");
-class ARCFourCipher { - constructor(key) { - this.a = 0; - this.b = 0; - const s = new Uint8Array(256); - const keyLength = key.length; + if (type instanceof _primitives.Ref) { + try { + type = await xref.fetchAsync(type); + } catch (ex) { + addPageError(ex); + break; + } + }
- for (let i = 0; i < 256; ++i) { - s[i] = i; - } + if ((0, _primitives.isName)(type, "Page") || !obj.has("Kids")) { + addPageDict(obj, kidObj instanceof _primitives.Ref ? kidObj : null); + } else { + queue.push({ + currentNode: obj, + posInKids: 0 + }); + }
- for (let i = 0, j = 0; i < 256; ++i) { - const tmp = s[i]; - j = j + tmp + key[i % keyLength] & 0xff; - s[i] = s[j]; - s[j] = tmp; + queueItem.posInKids++; }
- this.s = s; + return map; }
- encryptBlock(data) { - let a = this.a, - b = this.b; - const s = this.s; - const n = data.length; - const output = new Uint8Array(n); + getPageIndex(pageRef) { + const cachedPageIndex = this.pageIndexCache.get(pageRef);
- for (let i = 0; i < n; ++i) { - a = a + 1 & 0xff; - const tmp = s[a]; - b = b + tmp & 0xff; - const tmp2 = s[b]; - s[a] = tmp2; - s[b] = tmp; - output[i] = data[i] ^ s[tmp + tmp2 & 0xff]; + if (cachedPageIndex !== undefined) { + return Promise.resolve(cachedPageIndex); }
- this.a = a; - this.b = b; - return output; - } - - decryptBlock(data) { - return this.encryptBlock(data); - } + const xref = this.xref;
- encrypt(data) { - return this.encryptBlock(data); - } + function pagesBeforeRef(kidRef) { + let total = 0, + parentRef; + return xref.fetchAsync(kidRef).then(function (node) { + if ((0, _primitives.isRefsEqual)(kidRef, pageRef) && !(0, _primitives.isDict)(node, "Page") && !(node instanceof _primitives.Dict && !node.has("Type") && node.has("Contents"))) { + throw new _util.FormatError("The reference does not point to a /Page dictionary."); + }
-} + if (!node) { + return null; + }
-exports.ARCFourCipher = ARCFourCipher; + if (!(node instanceof _primitives.Dict)) { + throw new _util.FormatError("Node must be a dictionary."); + }
-const calculateMD5 = function calculateMD5Closure() { - const r = new Uint8Array([7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20, 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23, 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21]); - const k = new Int32Array([-680876936, -389564586, 606105819, -1044525330, -176418897, 1200080426, -1473231341, -45705983, 1770035416, -1958414417, -42063, -1990404162, 1804603682, -40341101, -1502002290, 1236535329, -165796510, -1069501632, 643717713, -373897302, -701558691, 38016083, -660478335, -405537848, 568446438, -1019803690, -187363961, 1163531501, -1444681467, -51403784, 1735328473, -1926607734, -378558, -2022574463, 1839030562, -35309556, -1530992060, 1272893353, -155497632, - [...] + parentRef = node.getRaw("Parent"); + return node.getAsync("Parent"); + }).then(function (parent) { + if (!parent) { + return null; + }
- function hash(data, offset, length) { - let h0 = 1732584193, - h1 = -271733879, - h2 = -1732584194, - h3 = 271733878; - const paddedLength = length + 72 & ~63; - const padded = new Uint8Array(paddedLength); - let i, j; + if (!(parent instanceof _primitives.Dict)) { + throw new _util.FormatError("Parent must be a dictionary."); + }
- for (i = 0; i < length; ++i) { - padded[i] = data[offset++]; - } + return parent.getAsync("Kids"); + }).then(function (kids) { + if (!kids) { + return null; + }
- padded[i++] = 0x80; - const n = paddedLength - 8; + const kidPromises = []; + let found = false;
- while (i < n) { - padded[i++] = 0; - } + for (let i = 0, ii = kids.length; i < ii; i++) { + const kid = kids[i];
- padded[i++] = length << 3 & 0xff; - padded[i++] = length >> 5 & 0xff; - padded[i++] = length >> 13 & 0xff; - padded[i++] = length >> 21 & 0xff; - padded[i++] = length >>> 29 & 0xff; - padded[i++] = 0; - padded[i++] = 0; - padded[i++] = 0; - const w = new Int32Array(16); + if (!(kid instanceof _primitives.Ref)) { + throw new _util.FormatError("Kid must be a reference."); + }
- for (i = 0; i < paddedLength;) { - for (j = 0; j < 16; ++j, i += 4) { - w[j] = padded[i] | padded[i + 1] << 8 | padded[i + 2] << 16 | padded[i + 3] << 24; - } + if ((0, _primitives.isRefsEqual)(kid, kidRef)) { + found = true; + break; + }
- let a = h0, - b = h1, - c = h2, - d = h3, - f, - g; + kidPromises.push(xref.fetchAsync(kid).then(function (obj) { + if (!(obj instanceof _primitives.Dict)) { + throw new _util.FormatError("Kid node must be a dictionary."); + }
- for (j = 0; j < 64; ++j) { - if (j < 16) { - f = b & c | ~b & d; - g = j; - } else if (j < 32) { - f = d & b | ~d & c; - g = 5 * j + 1 & 15; - } else if (j < 48) { - f = b ^ c ^ d; - g = 3 * j + 5 & 15; - } else { - f = c ^ (b | ~d); - g = 7 * j & 15; + if (obj.has("Count")) { + total += obj.get("Count"); + } else { + total++; + } + })); }
- const tmp = d, - rotateArg = a + f + k[j] + w[g] | 0, - rotate = r[j]; - d = c; - c = b; - b = b + (rotateArg << rotate | rotateArg >>> 32 - rotate) | 0; - a = tmp; - } + if (!found) { + throw new _util.FormatError("Kid reference not found in parent's kids."); + }
- h0 = h0 + a | 0; - h1 = h1 + b | 0; - h2 = h2 + c | 0; - h3 = h3 + d | 0; + return Promise.all(kidPromises).then(function () { + return [total, parentRef]; + }); + }); }
- return new Uint8Array([h0 & 0xFF, h0 >> 8 & 0xFF, h0 >> 16 & 0xFF, h0 >>> 24 & 0xFF, h1 & 0xFF, h1 >> 8 & 0xFF, h1 >> 16 & 0xFF, h1 >>> 24 & 0xFF, h2 & 0xFF, h2 >> 8 & 0xFF, h2 >> 16 & 0xFF, h2 >>> 24 & 0xFF, h3 & 0xFF, h3 >> 8 & 0xFF, h3 >> 16 & 0xFF, h3 >>> 24 & 0xFF]); - } + let total = 0;
- return hash; -}(); + const next = ref => pagesBeforeRef(ref).then(args => { + if (!args) { + this.pageIndexCache.put(pageRef, total); + return total; + }
-exports.calculateMD5 = calculateMD5; + const [count, parentRef] = args; + total += count; + return next(parentRef); + });
-class Word64 { - constructor(highInteger, lowInteger) { - this.high = highInteger | 0; - this.low = lowInteger | 0; + return next(pageRef); }
- and(word) { - this.high &= word.high; - this.low &= word.low; - } + get baseUrl() { + const uri = this._catDict.get("URI");
- xor(word) { - this.high ^= word.high; - this.low ^= word.low; - } + if (uri instanceof _primitives.Dict) { + const base = uri.get("Base");
- or(word) { - this.high |= word.high; - this.low |= word.low; - } + if (typeof base === "string") { + const absoluteUrl = (0, _util.createValidAbsoluteUrl)(base, null, { + tryConvertEncoding: true + });
- shiftRight(places) { - if (places >= 32) { - this.low = this.high >>> places - 32 | 0; - this.high = 0; - } else { - this.low = this.low >>> places | this.high << 32 - places; - this.high = this.high >>> places | 0; + if (absoluteUrl) { + return (0, _util.shadow)(this, "baseUrl", absoluteUrl.href); + } + } } - }
- shiftLeft(places) { - if (places >= 32) { - this.high = this.low << places - 32; - this.low = 0; - } else { - this.high = this.high << places | this.low >>> 32 - places; - this.low <<= places; - } + return (0, _util.shadow)(this, "baseUrl", null); }
- rotateRight(places) { - let low, high; + static parseDestDictionary(params) { + const destDict = params.destDict;
- if (places & 32) { - high = this.low; - low = this.high; - } else { - low = this.low; - high = this.high; + if (!(destDict instanceof _primitives.Dict)) { + (0, _util.warn)("parseDestDictionary: `destDict` must be a dictionary."); + return; }
- places &= 31; - this.low = low >>> places | high << 32 - places; - this.high = high >>> places | low << 32 - places; - } - - not() { - this.high = ~this.high; - this.low = ~this.low; - } - - add(word) { - const lowAdd = (this.low >>> 0) + (word.low >>> 0); - let highAdd = (this.high >>> 0) + (word.high >>> 0); + const resultObj = params.resultObj;
- if (lowAdd > 0xffffffff) { - highAdd += 1; + if (typeof resultObj !== "object") { + (0, _util.warn)("parseDestDictionary: `resultObj` must be an object."); + return; }
- this.low = lowAdd | 0; - this.high = highAdd | 0; - } - - copyTo(bytes, offset) { - bytes[offset] = this.high >>> 24 & 0xff; - bytes[offset + 1] = this.high >> 16 & 0xff; - bytes[offset + 2] = this.high >> 8 & 0xff; - bytes[offset + 3] = this.high & 0xff; - bytes[offset + 4] = this.low >>> 24 & 0xff; - bytes[offset + 5] = this.low >> 16 & 0xff; - bytes[offset + 6] = this.low >> 8 & 0xff; - bytes[offset + 7] = this.low & 0xff; - } - - assign(word) { - this.high = word.high; - this.low = word.low; - } - -} - -const calculateSHA256 = function calculateSHA256Closure() { - function rotr(x, n) { - return x >>> n | x << 32 - n; - } - - function ch(x, y, z) { - return x & y ^ ~x & z; - } - - function maj(x, y, z) { - return x & y ^ x & z ^ y & z; - } - - function sigma(x) { - return rotr(x, 2) ^ rotr(x, 13) ^ rotr(x, 22); - } - - function sigmaPrime(x) { - return rotr(x, 6) ^ rotr(x, 11) ^ rotr(x, 25); - } - - function littleSigma(x) { - return rotr(x, 7) ^ rotr(x, 18) ^ x >>> 3; - } - - function littleSigmaPrime(x) { - return rotr(x, 17) ^ rotr(x, 19) ^ x >>> 10; - } - - const k = [0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, [...] - - function hash(data, offset, length) { - let h0 = 0x6a09e667, - h1 = 0xbb67ae85, - h2 = 0x3c6ef372, - h3 = 0xa54ff53a, - h4 = 0x510e527f, - h5 = 0x9b05688c, - h6 = 0x1f83d9ab, - h7 = 0x5be0cd19; - const paddedLength = Math.ceil((length + 9) / 64) * 64; - const padded = new Uint8Array(paddedLength); - let i, j; - - for (i = 0; i < length; ++i) { - padded[i] = data[offset++]; - } + const docBaseUrl = params.docBaseUrl || null; + let action = destDict.get("A"), + url, + dest;
- padded[i++] = 0x80; - const n = paddedLength - 8; + if (!(action instanceof _primitives.Dict)) { + if (destDict.has("Dest")) { + action = destDict.get("Dest"); + } else { + action = destDict.get("AA");
- while (i < n) { - padded[i++] = 0; + if (action instanceof _primitives.Dict) { + if (action.has("D")) { + action = action.get("D"); + } else if (action.has("U")) { + action = action.get("U"); + } + } + } }
- padded[i++] = 0; - padded[i++] = 0; - padded[i++] = 0; - padded[i++] = length >>> 29 & 0xff; - padded[i++] = length >> 21 & 0xff; - padded[i++] = length >> 13 & 0xff; - padded[i++] = length >> 5 & 0xff; - padded[i++] = length << 3 & 0xff; - const w = new Uint32Array(64); - - for (i = 0; i < paddedLength;) { - for (j = 0; j < 16; ++j) { - w[j] = padded[i] << 24 | padded[i + 1] << 16 | padded[i + 2] << 8 | padded[i + 3]; - i += 4; - } + if (action instanceof _primitives.Dict) { + const actionType = action.get("S");
- for (j = 16; j < 64; ++j) { - w[j] = littleSigmaPrime(w[j - 2]) + w[j - 7] + littleSigma(w[j - 15]) + w[j - 16] | 0; + if (!(actionType instanceof _primitives.Name)) { + (0, _util.warn)("parseDestDictionary: Invalid type in Action dictionary."); + return; }
- let a = h0, - b = h1, - c = h2, - d = h3, - e = h4, - f = h5, - g = h6, - h = h7, - t1, - t2; + const actionName = actionType.name;
- for (j = 0; j < 64; ++j) { - t1 = h + sigmaPrime(e) + ch(e, f, g) + k[j] + w[j]; - t2 = sigma(a) + maj(a, b, c); - h = g; - g = f; - f = e; - e = d + t1 | 0; - d = c; - c = b; - b = a; - a = t1 + t2 | 0; - } + switch (actionName) { + case "ResetForm": + const flags = action.get("Flags"); + const include = ((typeof flags === "number" ? flags : 0) & 1) === 0; + const fields = []; + const refs = [];
- h0 = h0 + a | 0; - h1 = h1 + b | 0; - h2 = h2 + c | 0; - h3 = h3 + d | 0; - h4 = h4 + e | 0; - h5 = h5 + f | 0; - h6 = h6 + g | 0; - h7 = h7 + h | 0; - } + for (const obj of action.get("Fields") || []) { + if (obj instanceof _primitives.Ref) { + refs.push(obj.toString()); + } else if (typeof obj === "string") { + fields.push((0, _util.stringToPDFString)(obj)); + } + }
- return new Uint8Array([h0 >> 24 & 0xFF, h0 >> 16 & 0xFF, h0 >> 8 & 0xFF, h0 & 0xFF, h1 >> 24 & 0xFF, h1 >> 16 & 0xFF, h1 >> 8 & 0xFF, h1 & 0xFF, h2 >> 24 & 0xFF, h2 >> 16 & 0xFF, h2 >> 8 & 0xFF, h2 & 0xFF, h3 >> 24 & 0xFF, h3 >> 16 & 0xFF, h3 >> 8 & 0xFF, h3 & 0xFF, h4 >> 24 & 0xFF, h4 >> 16 & 0xFF, h4 >> 8 & 0xFF, h4 & 0xFF, h5 >> 24 & 0xFF, h5 >> 16 & 0xFF, h5 >> 8 & 0xFF, h5 & 0xFF, h6 >> 24 & 0xFF, h6 >> 16 & 0xFF, h6 >> 8 & 0xFF, h6 & 0xFF, h7 >> 24 & 0xFF, h7 >> 16 & 0xFF, h7 > [...] - } + resultObj.resetForm = { + fields, + refs, + include + }; + break;
- return hash; -}(); + case "URI": + url = action.get("URI");
-exports.calculateSHA256 = calculateSHA256; + if (url instanceof _primitives.Name) { + url = "/" + url.name; + }
-const calculateSHA512 = function calculateSHA512Closure() { - function ch(result, x, y, z, tmp) { - result.assign(x); - result.and(y); - tmp.assign(x); - tmp.not(); - tmp.and(z); - result.xor(tmp); - } + break;
- function maj(result, x, y, z, tmp) { - result.assign(x); - result.and(y); - tmp.assign(x); - tmp.and(z); - result.xor(tmp); - tmp.assign(y); - tmp.and(z); - result.xor(tmp); - } + case "GoTo": + dest = action.get("D"); + break;
- function sigma(result, x, tmp) { - result.assign(x); - result.rotateRight(28); - tmp.assign(x); - tmp.rotateRight(34); - result.xor(tmp); - tmp.assign(x); - tmp.rotateRight(39); - result.xor(tmp); - } + case "Launch": + case "GoToR": + const urlDict = action.get("F");
- function sigmaPrime(result, x, tmp) { - result.assign(x); - result.rotateRight(14); - tmp.assign(x); - tmp.rotateRight(18); - result.xor(tmp); - tmp.assign(x); - tmp.rotateRight(41); - result.xor(tmp); - } + if (urlDict instanceof _primitives.Dict) { + url = urlDict.get("F") || null; + } else if (typeof urlDict === "string") { + url = urlDict; + }
- function littleSigma(result, x, tmp) { - result.assign(x); - result.rotateRight(1); - tmp.assign(x); - tmp.rotateRight(8); - result.xor(tmp); - tmp.assign(x); - tmp.shiftRight(7); - result.xor(tmp); - } + let remoteDest = action.get("D");
- function littleSigmaPrime(result, x, tmp) { - result.assign(x); - result.rotateRight(19); - tmp.assign(x); - tmp.rotateRight(61); - result.xor(tmp); - tmp.assign(x); - tmp.shiftRight(6); - result.xor(tmp); - } + if (remoteDest) { + if (remoteDest instanceof _primitives.Name) { + remoteDest = remoteDest.name; + }
- const k = [new Word64(0x428a2f98, 0xd728ae22), new Word64(0x71374491, 0x23ef65cd), new Word64(0xb5c0fbcf, 0xec4d3b2f), new Word64(0xe9b5dba5, 0x8189dbbc), new Word64(0x3956c25b, 0xf348b538), new Word64(0x59f111f1, 0xb605d019), new Word64(0x923f82a4, 0xaf194f9b), new Word64(0xab1c5ed5, 0xda6d8118), new Word64(0xd807aa98, 0xa3030242), new Word64(0x12835b01, 0x45706fbe), new Word64(0x243185be, 0x4ee4b28c), new Word64(0x550c7dc3, 0xd5ffb4e2), new Word64(0x72be5d74, 0xf27b896f), new Word64( [...] + if (typeof url === "string") { + const baseUrl = url.split("#")[0];
- function hash(data, offset, length, mode384 = false) { - let h0, h1, h2, h3, h4, h5, h6, h7; + if (typeof remoteDest === "string") { + url = baseUrl + "#" + remoteDest; + } else if (Array.isArray(remoteDest)) { + url = baseUrl + "#" + JSON.stringify(remoteDest); + } + } + }
- if (!mode384) { - h0 = new Word64(0x6a09e667, 0xf3bcc908); - h1 = new Word64(0xbb67ae85, 0x84caa73b); - h2 = new Word64(0x3c6ef372, 0xfe94f82b); - h3 = new Word64(0xa54ff53a, 0x5f1d36f1); - h4 = new Word64(0x510e527f, 0xade682d1); - h5 = new Word64(0x9b05688c, 0x2b3e6c1f); - h6 = new Word64(0x1f83d9ab, 0xfb41bd6b); - h7 = new Word64(0x5be0cd19, 0x137e2179); - } else { - h0 = new Word64(0xcbbb9d5d, 0xc1059ed8); - h1 = new Word64(0x629a292a, 0x367cd507); - h2 = new Word64(0x9159015a, 0x3070dd17); - h3 = new Word64(0x152fecd8, 0xf70e5939); - h4 = new Word64(0x67332667, 0xffc00b31); - h5 = new Word64(0x8eb44a87, 0x68581511); - h6 = new Word64(0xdb0c2e0d, 0x64f98fa7); - h7 = new Word64(0x47b5481d, 0xbefa4fa4); - } + const newWindow = action.get("NewWindow");
- const paddedLength = Math.ceil((length + 17) / 128) * 128; - const padded = new Uint8Array(paddedLength); - let i, j; + if (typeof newWindow === "boolean") { + resultObj.newWindow = newWindow; + }
- for (i = 0; i < length; ++i) { - padded[i] = data[offset++]; - } + break;
- padded[i++] = 0x80; - const n = paddedLength - 16; + case "Named": + const namedAction = action.get("N");
- while (i < n) { - padded[i++] = 0; - } + if (namedAction instanceof _primitives.Name) { + resultObj.action = namedAction.name; + }
- padded[i++] = 0; - padded[i++] = 0; - padded[i++] = 0; - padded[i++] = 0; - padded[i++] = 0; - padded[i++] = 0; - padded[i++] = 0; - padded[i++] = 0; - padded[i++] = 0; - padded[i++] = 0; - padded[i++] = 0; - padded[i++] = length >>> 29 & 0xff; - padded[i++] = length >> 21 & 0xff; - padded[i++] = length >> 13 & 0xff; - padded[i++] = length >> 5 & 0xff; - padded[i++] = length << 3 & 0xff; - const w = new Array(80); + break;
- for (i = 0; i < 80; i++) { - w[i] = new Word64(0, 0); - } + case "JavaScript": + const jsAction = action.get("JS"); + let js;
- let a = new Word64(0, 0), - b = new Word64(0, 0), - c = new Word64(0, 0); - let d = new Word64(0, 0), - e = new Word64(0, 0), - f = new Word64(0, 0); - let g = new Word64(0, 0), - h = new Word64(0, 0); - const t1 = new Word64(0, 0), - t2 = new Word64(0, 0); - const tmp1 = new Word64(0, 0), - tmp2 = new Word64(0, 0); - let tmp3; + if (jsAction instanceof _base_stream.BaseStream) { + js = jsAction.getString(); + } else if (typeof jsAction === "string") { + js = jsAction; + }
- for (i = 0; i < paddedLength;) { - for (j = 0; j < 16; ++j) { - w[j].high = padded[i] << 24 | padded[i + 1] << 16 | padded[i + 2] << 8 | padded[i + 3]; - w[j].low = padded[i + 4] << 24 | padded[i + 5] << 16 | padded[i + 6] << 8 | padded[i + 7]; - i += 8; - } + const jsURL = js && (0, _core_utils.recoverJsURL)((0, _util.stringToPDFString)(js));
- for (j = 16; j < 80; ++j) { - tmp3 = w[j]; - littleSigmaPrime(tmp3, w[j - 2], tmp2); - tmp3.add(w[j - 7]); - littleSigma(tmp1, w[j - 15], tmp2); - tmp3.add(tmp1); - tmp3.add(w[j - 16]); - } + if (jsURL) { + url = jsURL.url; + resultObj.newWindow = jsURL.newWindow; + break; + }
- a.assign(h0); - b.assign(h1); - c.assign(h2); - d.assign(h3); - e.assign(h4); - f.assign(h5); - g.assign(h6); - h.assign(h7); + default: + if (actionName === "JavaScript" || actionName === "SubmitForm") { + break; + }
- for (j = 0; j < 80; ++j) { - t1.assign(h); - sigmaPrime(tmp1, e, tmp2); - t1.add(tmp1); - ch(tmp1, e, f, g, tmp2); - t1.add(tmp1); - t1.add(k[j]); - t1.add(w[j]); - sigma(t2, a, tmp2); - maj(tmp1, a, b, c, tmp2); - t2.add(tmp1); - tmp3 = h; - h = g; - g = f; - f = e; - d.add(t1); - e = d; - d = c; - c = b; - b = a; - tmp3.assign(t1); - tmp3.add(t2); - a = tmp3; + (0, _util.warn)(`parseDestDictionary - unsupported action: "${actionName}".`); + break; } - - h0.add(a); - h1.add(b); - h2.add(c); - h3.add(d); - h4.add(e); - h5.add(f); - h6.add(g); - h7.add(h); + } else if (destDict.has("Dest")) { + dest = destDict.get("Dest"); }
- let result; + if (typeof url === "string") { + const absoluteUrl = (0, _util.createValidAbsoluteUrl)(url, docBaseUrl, { + addDefaultProtocol: true, + tryConvertEncoding: true + });
- if (!mode384) { - result = new Uint8Array(64); - h0.copyTo(result, 0); - h1.copyTo(result, 8); - h2.copyTo(result, 16); - h3.copyTo(result, 24); - h4.copyTo(result, 32); - h5.copyTo(result, 40); - h6.copyTo(result, 48); - h7.copyTo(result, 56); - } else { - result = new Uint8Array(48); - h0.copyTo(result, 0); - h1.copyTo(result, 8); - h2.copyTo(result, 16); - h3.copyTo(result, 24); - h4.copyTo(result, 32); - h5.copyTo(result, 40); + if (absoluteUrl) { + resultObj.url = absoluteUrl.href; + } + + resultObj.unsafeUrl = url; }
- return result; + if (dest) { + if (dest instanceof _primitives.Name) { + dest = dest.name; + } + + if (typeof dest === "string") { + resultObj.dest = (0, _util.stringToPDFString)(dest); + } else if (Array.isArray(dest)) { + resultObj.dest = dest; + } + } }
- return hash; -}(); +}
-exports.calculateSHA512 = calculateSHA512; +exports.Catalog = Catalog;
-function calculateSHA384(data, offset, length) { - return calculateSHA512(data, offset, length, true); -} +/***/ }), +/* 70 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
-class NullCipher { - decryptBlock(data) { - return data; - }
- encrypt(data) { - return data; - }
-} +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.NumberTree = exports.NameTree = void 0;
-class AESBaseCipher { - constructor() { - if (this.constructor === AESBaseCipher) { - (0, _util.unreachable)("Cannot initialize AESBaseCipher."); - } +var _primitives = __w_pdfjs_require__(5);
- this._s = new Uint8Array([0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76, 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0, 0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15, 0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75, 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, 0x52, 0x3b, 0xd6, 0xb3, 0x29, [...] - this._inv_s = new Uint8Array([0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38, 0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb, 0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87, 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb, 0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d, 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e, 0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2, 0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25, 0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xd4, 0xa4, 0x5c, 0xcc, 0x [...] - this._mix = new Uint32Array([0x00000000, 0x0e090d0b, 0x1c121a16, 0x121b171d, 0x3824342c, 0x362d3927, 0x24362e3a, 0x2a3f2331, 0x70486858, 0x7e416553, 0x6c5a724e, 0x62537f45, 0x486c5c74, 0x4665517f, 0x547e4662, 0x5a774b69, 0xe090d0b0, 0xee99ddbb, 0xfc82caa6, 0xf28bc7ad, 0xd8b4e49c, 0xd6bde997, 0xc4a6fe8a, 0xcaaff381, 0x90d8b8e8, 0x9ed1b5e3, 0x8ccaa2fe, 0x82c3aff5, 0xa8fc8cc4, 0xa6f581cf, 0xb4ee96d2, 0xbae79bd9, 0xdb3bbb7b, 0xd532b670, 0xc729a16d, 0xc920ac66, 0xe31f8f57, 0xed16825c, 0xf [...] - this._mixCol = new Uint8Array(256); +var _util = __w_pdfjs_require__(2);
- for (let i = 0; i < 256; i++) { - if (i < 128) { - this._mixCol[i] = i << 1; - } else { - this._mixCol[i] = i << 1 ^ 0x1b; - } +class NameOrNumberTree { + constructor(root, xref, type) { + if (this.constructor === NameOrNumberTree) { + (0, _util.unreachable)("Cannot initialize NameOrNumberTree."); }
- this.buffer = new Uint8Array(16); - this.bufferPosition = 0; - } - - _expandKey(cipherKey) { - (0, _util.unreachable)("Cannot call `_expandKey` on the base class"); + this.root = root; + this.xref = xref; + this._type = type; }
- _decrypt(input, key) { - let t, u, v; - const state = new Uint8Array(16); - state.set(input); + getAll() { + const map = new Map();
- for (let j = 0, k = this._keySize; j < 16; ++j, ++k) { - state[j] ^= key[k]; + if (!this.root) { + return map; }
- for (let i = this._cyclesOfRepetition - 1; i >= 1; --i) { - t = state[13]; - state[13] = state[9]; - state[9] = state[5]; - state[5] = state[1]; - state[1] = t; - t = state[14]; - u = state[10]; - state[14] = state[6]; - state[10] = state[2]; - state[6] = t; - state[2] = u; - t = state[15]; - u = state[11]; - v = state[7]; - state[15] = state[3]; - state[11] = t; - state[7] = u; - state[3] = v; + const xref = this.xref; + const processed = new _primitives.RefSet(); + processed.put(this.root); + const queue = [this.root];
- for (let j = 0; j < 16; ++j) { - state[j] = this._inv_s[state[j]]; + while (queue.length > 0) { + const obj = xref.fetchIfRef(queue.shift()); + + if (!(obj instanceof _primitives.Dict)) { + continue; }
- for (let j = 0, k = i * 16; j < 16; ++j, ++k) { - state[j] ^= key[k]; + if (obj.has("Kids")) { + const kids = obj.get("Kids"); + + if (!Array.isArray(kids)) { + continue; + } + + for (const kid of kids) { + if (processed.has(kid)) { + throw new _util.FormatError(`Duplicate entry in "${this._type}" tree.`); + } + + queue.push(kid); + processed.put(kid); + } + + continue; }
- for (let j = 0; j < 16; j += 4) { - const s0 = this._mix[state[j]]; - const s1 = this._mix[state[j + 1]]; - const s2 = this._mix[state[j + 2]]; - const s3 = this._mix[state[j + 3]]; - t = s0 ^ s1 >>> 8 ^ s1 << 24 ^ s2 >>> 16 ^ s2 << 16 ^ s3 >>> 24 ^ s3 << 8; - state[j] = t >>> 24 & 0xff; - state[j + 1] = t >> 16 & 0xff; - state[j + 2] = t >> 8 & 0xff; - state[j + 3] = t & 0xff; + const entries = obj.get(this._type); + + if (!Array.isArray(entries)) { + continue; + } + + for (let i = 0, ii = entries.length; i < ii; i += 2) { + map.set(xref.fetchIfRef(entries[i]), xref.fetchIfRef(entries[i + 1])); } }
- t = state[13]; - state[13] = state[9]; - state[9] = state[5]; - state[5] = state[1]; - state[1] = t; - t = state[14]; - u = state[10]; - state[14] = state[6]; - state[10] = state[2]; - state[6] = t; - state[2] = u; - t = state[15]; - u = state[11]; - v = state[7]; - state[15] = state[3]; - state[11] = t; - state[7] = u; - state[3] = v; + return map; + }
- for (let j = 0; j < 16; ++j) { - state[j] = this._inv_s[state[j]]; - state[j] ^= key[j]; + get(key) { + if (!this.root) { + return null; }
- return state; - } + const xref = this.xref; + let kidsOrEntries = xref.fetchIfRef(this.root); + let loopCount = 0; + const MAX_LEVELS = 10;
- _encrypt(input, key) { - const s = this._s; - let t, u, v; - const state = new Uint8Array(16); - state.set(input); + while (kidsOrEntries.has("Kids")) { + if (++loopCount > MAX_LEVELS) { + (0, _util.warn)(`Search depth limit reached for "${this._type}" tree.`); + return null; + }
- for (let j = 0; j < 16; ++j) { - state[j] ^= key[j]; - } + const kids = kidsOrEntries.get("Kids");
- for (let i = 1; i < this._cyclesOfRepetition; i++) { - for (let j = 0; j < 16; ++j) { - state[j] = s[state[j]]; + if (!Array.isArray(kids)) { + return null; }
- v = state[1]; - state[1] = state[5]; - state[5] = state[9]; - state[9] = state[13]; - state[13] = v; - v = state[2]; - u = state[6]; - state[2] = state[10]; - state[6] = state[14]; - state[10] = v; - state[14] = u; - v = state[3]; - u = state[7]; - t = state[11]; - state[3] = state[15]; - state[7] = v; - state[11] = u; - state[15] = t; + let l = 0, + r = kids.length - 1;
- for (let j = 0; j < 16; j += 4) { - const s0 = state[j + 0]; - const s1 = state[j + 1]; - const s2 = state[j + 2]; - const s3 = state[j + 3]; - t = s0 ^ s1 ^ s2 ^ s3; - state[j + 0] ^= t ^ this._mixCol[s0 ^ s1]; - state[j + 1] ^= t ^ this._mixCol[s1 ^ s2]; - state[j + 2] ^= t ^ this._mixCol[s2 ^ s3]; - state[j + 3] ^= t ^ this._mixCol[s3 ^ s0]; + while (l <= r) { + const m = l + r >> 1; + const kid = xref.fetchIfRef(kids[m]); + const limits = kid.get("Limits"); + + if (key < xref.fetchIfRef(limits[0])) { + r = m - 1; + } else if (key > xref.fetchIfRef(limits[1])) { + l = m + 1; + } else { + kidsOrEntries = kid; + break; + } }
- for (let j = 0, k = i * 16; j < 16; ++j, ++k) { - state[j] ^= key[k]; + if (l > r) { + return null; } }
- for (let j = 0; j < 16; ++j) { - state[j] = s[state[j]]; - } + const entries = kidsOrEntries.get(this._type);
- v = state[1]; - state[1] = state[5]; - state[5] = state[9]; - state[9] = state[13]; - state[13] = v; - v = state[2]; - u = state[6]; - state[2] = state[10]; - state[6] = state[14]; - state[10] = v; - state[14] = u; - v = state[3]; - u = state[7]; - t = state[11]; - state[3] = state[15]; - state[7] = v; - state[11] = u; - state[15] = t; + if (Array.isArray(entries)) { + let l = 0, + r = entries.length - 2;
- for (let j = 0, k = this._keySize; j < 16; ++j, ++k) { - state[j] ^= key[k]; + while (l <= r) { + const tmp = l + r >> 1, + m = tmp + (tmp & 1); + const currentKey = xref.fetchIfRef(entries[m]); + + if (key < currentKey) { + r = m - 2; + } else if (key > currentKey) { + l = m + 2; + } else { + return xref.fetchIfRef(entries[m + 1]); + } + } }
- return state; + return null; }
- _decryptBlock2(data, finalize) { - const sourceLength = data.length; - let buffer = this.buffer, - bufferLength = this.bufferPosition; - const result = []; - let iv = this.iv; +}
- for (let i = 0; i < sourceLength; ++i) { - buffer[bufferLength] = data[i]; - ++bufferLength; +class NameTree extends NameOrNumberTree { + constructor(root, xref) { + super(root, xref, "Names"); + }
- if (bufferLength < 16) { - continue; - } +}
- const plain = this._decrypt(buffer, this._key); +exports.NameTree = NameTree;
- for (let j = 0; j < 16; ++j) { - plain[j] ^= iv[j]; - } +class NumberTree extends NameOrNumberTree { + constructor(root, xref) { + super(root, xref, "Nums"); + }
- iv = buffer; - result.push(plain); - buffer = new Uint8Array(16); - bufferLength = 0; - } +}
- this.buffer = buffer; - this.bufferLength = bufferLength; - this.iv = iv; +exports.NumberTree = NumberTree;
- if (result.length === 0) { - return new Uint8Array(0); - } +/***/ }), +/* 71 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
- let outputLength = 16 * result.length;
- if (finalize) { - const lastBlock = result[result.length - 1]; - let psLen = lastBlock[15];
- if (psLen <= 16) { - for (let i = 15, ii = 16 - psLen; i >= ii; --i) { - if (lastBlock[i] !== psLen) { - psLen = 0; - break; - } - } +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.clearGlobalCaches = clearGlobalCaches;
- outputLength -= psLen; - result[result.length - 1] = lastBlock.subarray(0, 16 - psLen); - } - } +var _primitives = __w_pdfjs_require__(5);
- const output = new Uint8Array(outputLength); +var _unicode = __w_pdfjs_require__(21);
- for (let i = 0, j = 0, ii = result.length; i < ii; ++i, j += 16) { - output.set(result[i], j); - } +function clearGlobalCaches() { + (0, _primitives.clearPrimitiveCaches)(); + (0, _unicode.clearUnicodeCaches)(); +}
- return output; - } +/***/ }), +/* 72 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
- decryptBlock(data, finalize, iv = null) { - const sourceLength = data.length; - const buffer = this.buffer; - let bufferLength = this.bufferPosition;
- if (iv) { - this.iv = iv; - } else { - for (let i = 0; bufferLength < 16 && i < sourceLength; ++i, ++bufferLength) { - buffer[bufferLength] = data[i]; - }
- if (bufferLength < 16) { - this.bufferLength = bufferLength; - return new Uint8Array(0); - } +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.FileSpec = void 0;
- this.iv = buffer; - data = data.subarray(16); - } +var _util = __w_pdfjs_require__(2);
- this.buffer = new Uint8Array(16); - this.bufferLength = 0; - this.decryptBlock = this._decryptBlock2; - return this.decryptBlock(data, finalize); +var _base_stream = __w_pdfjs_require__(7); + +var _primitives = __w_pdfjs_require__(5); + +function pickPlatformItem(dict) { + if (dict.has("UF")) { + return dict.get("UF"); + } else if (dict.has("F")) { + return dict.get("F"); + } else if (dict.has("Unix")) { + return dict.get("Unix"); + } else if (dict.has("Mac")) { + return dict.get("Mac"); + } else if (dict.has("DOS")) { + return dict.get("DOS"); }
- encrypt(data, iv) { - const sourceLength = data.length; - let buffer = this.buffer, - bufferLength = this.bufferPosition; - const result = []; + return null; +}
- if (!iv) { - iv = new Uint8Array(16); +class FileSpec { + constructor(root, xref) { + if (!(root instanceof _primitives.Dict)) { + return; }
- for (let i = 0; i < sourceLength; ++i) { - buffer[bufferLength] = data[i]; - ++bufferLength; + this.xref = xref; + this.root = root;
- if (bufferLength < 16) { - continue; - } + if (root.has("FS")) { + this.fs = root.get("FS"); + }
- for (let j = 0; j < 16; ++j) { - buffer[j] ^= iv[j]; - } + this.description = root.has("Desc") ? (0, _util.stringToPDFString)(root.get("Desc")) : "";
- const cipher = this._encrypt(buffer, this._key); + if (root.has("RF")) { + (0, _util.warn)("Related file specifications are not supported"); + }
- iv = cipher; - result.push(cipher); - buffer = new Uint8Array(16); - bufferLength = 0; + this.contentAvailable = true; + + if (!root.has("EF")) { + this.contentAvailable = false; + (0, _util.warn)("Non-embedded file specifications are not supported"); } + }
- this.buffer = buffer; - this.bufferLength = bufferLength; - this.iv = iv; + get filename() { + if (!this._filename && this.root) { + const filename = pickPlatformItem(this.root) || "unnamed"; + this._filename = (0, _util.stringToPDFString)(filename).replace(/\\/g, "\").replace(/\//g, "/").replace(/\/g, "/"); + }
- if (result.length === 0) { - return new Uint8Array(0); + return this._filename; + } + + get content() { + if (!this.contentAvailable) { + return null; }
- const outputLength = 16 * result.length; - const output = new Uint8Array(outputLength); + if (!this.contentRef && this.root) { + this.contentRef = pickPlatformItem(this.root.get("EF")); + }
- for (let i = 0, j = 0, ii = result.length; i < ii; ++i, j += 16) { - output.set(result[i], j); + let content = null; + + if (this.contentRef) { + const fileObj = this.xref.fetchIfRef(this.contentRef); + + if (fileObj instanceof _base_stream.BaseStream) { + content = fileObj.getBytes(); + } else { + (0, _util.warn)("Embedded file specification points to non-existing/invalid content"); + } + } else { + (0, _util.warn)("Embedded file specification does not have a content"); }
- return output; + return content; + } + + get serializable() { + return { + filename: this.filename, + content: this.content + }; }
}
-class AES128Cipher extends AESBaseCipher { - constructor(key) { - super(); - this._cyclesOfRepetition = 10; - this._keySize = 160; - this._rcon = new Uint8Array([0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb [...] - this._key = this._expandKey(key); - } +exports.FileSpec = FileSpec;
- _expandKey(cipherKey) { - const b = 176; - const s = this._s; - const rcon = this._rcon; - const result = new Uint8Array(b); - result.set(cipherKey); +/***/ }), +/* 73 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
- for (let j = 16, i = 1; j < b; ++i) { - let t1 = result[j - 3]; - let t2 = result[j - 2]; - let t3 = result[j - 1]; - let t4 = result[j - 4]; - t1 = s[t1]; - t2 = s[t2]; - t3 = s[t3]; - t4 = s[t4]; - t1 ^= rcon[i];
- for (let n = 0; n < 4; ++n) { - result[j] = t1 ^= result[j - 16]; - j++; - result[j] = t2 ^= result[j - 16]; - j++; - result[j] = t3 ^= result[j - 16]; - j++; - result[j] = t4 ^= result[j - 16]; - j++; - } - }
- return result; - } +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.MetadataParser = void 0;
-} +var _xml_parser = __w_pdfjs_require__(66);
-exports.AES128Cipher = AES128Cipher; +class MetadataParser { + constructor(data) { + data = this._repair(data); + const parser = new _xml_parser.SimpleXMLParser({ + lowerCaseName: true + }); + const xmlDocument = parser.parseFromString(data); + this._metadataMap = new Map(); + this._data = data;
-class AES256Cipher extends AESBaseCipher { - constructor(key) { - super(); - this._cyclesOfRepetition = 14; - this._keySize = 224; - this._key = this._expandKey(key); + if (xmlDocument) { + this._parse(xmlDocument); + } }
- _expandKey(cipherKey) { - const b = 240; - const s = this._s; - const result = new Uint8Array(b); - result.set(cipherKey); - let r = 1; - let t1, t2, t3, t4; + _repair(data) { + return data.replace(/^[^<]+/, "").replace(/>\376\377([^<]+)/g, function (all, codes) { + const bytes = codes.replace(/\([0-3])([0-7])([0-7])/g, function (code, d1, d2, d3) { + return String.fromCharCode(d1 * 64 + d2 * 8 + d3 * 1); + }).replace(/&(amp|apos|gt|lt|quot);/g, function (str, name) { + switch (name) { + case "amp": + return "&";
- for (let j = 32, i = 1; j < b; ++i) { - if (j % 32 === 16) { - t1 = s[t1]; - t2 = s[t2]; - t3 = s[t3]; - t4 = s[t4]; - } else if (j % 32 === 0) { - t1 = result[j - 3]; - t2 = result[j - 2]; - t3 = result[j - 1]; - t4 = result[j - 4]; - t1 = s[t1]; - t2 = s[t2]; - t3 = s[t3]; - t4 = s[t4]; - t1 ^= r; + case "apos": + return "'";
- if ((r <<= 1) >= 256) { - r = (r ^ 0x1b) & 0xff; + case "gt": + return ">"; + + case "lt": + return "<"; + + case "quot": + return '"'; } - }
- for (let n = 0; n < 4; ++n) { - result[j] = t1 ^= result[j - 32]; - j++; - result[j] = t2 ^= result[j - 32]; - j++; - result[j] = t3 ^= result[j - 32]; - j++; - result[j] = t4 ^= result[j - 32]; - j++; + throw new Error(`_repair: ${name} isn't defined.`); + }); + const charBuf = []; + + for (let i = 0, ii = bytes.length; i < ii; i += 2) { + const code = bytes.charCodeAt(i) * 256 + bytes.charCodeAt(i + 1); + + if (code >= 32 && code < 127 && code !== 60 && code !== 62 && code !== 38) { + charBuf.push(String.fromCharCode(code)); + } else { + charBuf.push("&#x" + (0x10000 + code).toString(16).substring(1) + ";"); + } } - }
- return result; + return ">" + charBuf.join(""); + }); }
-} + _getSequence(entry) { + const name = entry.nodeName;
-exports.AES256Cipher = AES256Cipher; + if (name !== "rdf:bag" && name !== "rdf:seq" && name !== "rdf:alt") { + return null; + }
-class PDF17 { - checkOwnerPassword(password, ownerValidationSalt, userBytes, ownerPassword) { - const hashData = new Uint8Array(password.length + 56); - hashData.set(password, 0); - hashData.set(ownerValidationSalt, password.length); - hashData.set(userBytes, password.length + ownerValidationSalt.length); - const result = calculateSHA256(hashData, 0, hashData.length); - return (0, _util.isArrayEqual)(result, ownerPassword); + return entry.childNodes.filter(node => node.nodeName === "rdf:li"); }
- checkUserPassword(password, userValidationSalt, userPassword) { - const hashData = new Uint8Array(password.length + 8); - hashData.set(password, 0); - hashData.set(userValidationSalt, password.length); - const result = calculateSHA256(hashData, 0, hashData.length); - return (0, _util.isArrayEqual)(result, userPassword); - } + _parseArray(entry) { + if (!entry.hasChildNodes()) { + return; + }
- getOwnerKey(password, ownerKeySalt, userBytes, ownerEncryption) { - const hashData = new Uint8Array(password.length + 56); - hashData.set(password, 0); - hashData.set(ownerKeySalt, password.length); - hashData.set(userBytes, password.length + ownerKeySalt.length); - const key = calculateSHA256(hashData, 0, hashData.length); - const cipher = new AES256Cipher(key); - return cipher.decryptBlock(ownerEncryption, false, new Uint8Array(16)); - } + const [seqNode] = entry.childNodes; + const sequence = this._getSequence(seqNode) || [];
- getUserKey(password, userKeySalt, userEncryption) { - const hashData = new Uint8Array(password.length + 8); - hashData.set(password, 0); - hashData.set(userKeySalt, password.length); - const key = calculateSHA256(hashData, 0, hashData.length); - const cipher = new AES256Cipher(key); - return cipher.decryptBlock(userEncryption, false, new Uint8Array(16)); + this._metadataMap.set(entry.nodeName, sequence.map(node => node.textContent.trim())); }
-} + _parse(xmlDocument) { + let rdf = xmlDocument.documentElement;
-exports.PDF17 = PDF17; + if (rdf.nodeName !== "rdf:rdf") { + rdf = rdf.firstChild;
-const PDF20 = function PDF20Closure() { - function calculatePDF20Hash(password, input, userBytes) { - let k = calculateSHA256(input, 0, input.length).subarray(0, 32); - let e = [0]; - let i = 0; + while (rdf && rdf.nodeName !== "rdf:rdf") { + rdf = rdf.nextSibling; + } + }
- while (i < 64 || e[e.length - 1] > i - 32) { - const combinedLength = password.length + k.length + userBytes.length, - combinedArray = new Uint8Array(combinedLength); - let writeOffset = 0; - combinedArray.set(password, writeOffset); - writeOffset += password.length; - combinedArray.set(k, writeOffset); - writeOffset += k.length; - combinedArray.set(userBytes, writeOffset); - const k1 = new Uint8Array(combinedLength * 64); + if (!rdf || rdf.nodeName !== "rdf:rdf" || !rdf.hasChildNodes()) { + return; + }
- for (let j = 0, pos = 0; j < 64; j++, pos += combinedLength) { - k1.set(combinedArray, pos); + for (const desc of rdf.childNodes) { + if (desc.nodeName !== "rdf:description") { + continue; }
- const cipher = new AES128Cipher(k.subarray(0, 16)); - e = cipher.encrypt(k1, k.subarray(16, 32)); - let remainder = 0; + for (const entry of desc.childNodes) { + const name = entry.nodeName;
- for (let z = 0; z < 16; z++) { - remainder *= 256 % 3; - remainder %= 3; - remainder += (e[z] >>> 0) % 3; - remainder %= 3; - } + switch (name) { + case "#text": + continue;
- if (remainder === 0) { - k = calculateSHA256(e, 0, e.length); - } else if (remainder === 1) { - k = calculateSHA384(e, 0, e.length); - } else if (remainder === 2) { - k = calculateSHA512(e, 0, e.length); - } + case "dc:creator": + case "dc:subject": + this._parseArray(entry);
- i++; + continue; + } + + this._metadataMap.set(name, entry.textContent.trim()); + } } + }
- return k.subarray(0, 32); + get serializable() { + return { + parsedData: this._metadataMap, + rawData: this._data + }; }
- class PDF20 { - hash(password, concatBytes, userBytes) { - return calculatePDF20Hash(password, concatBytes, userBytes); - } +}
- checkOwnerPassword(password, ownerValidationSalt, userBytes, ownerPassword) { - const hashData = new Uint8Array(password.length + 56); - hashData.set(password, 0); - hashData.set(ownerValidationSalt, password.length); - hashData.set(userBytes, password.length + ownerValidationSalt.length); - const result = calculatePDF20Hash(password, hashData, userBytes); - return (0, _util.isArrayEqual)(result, ownerPassword); - } +exports.MetadataParser = MetadataParser;
- checkUserPassword(password, userValidationSalt, userPassword) { - const hashData = new Uint8Array(password.length + 8); - hashData.set(password, 0); - hashData.set(userValidationSalt, password.length); - const result = calculatePDF20Hash(password, hashData, []); - return (0, _util.isArrayEqual)(result, userPassword); - } +/***/ }), +/* 74 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
- getOwnerKey(password, ownerKeySalt, userBytes, ownerEncryption) { - const hashData = new Uint8Array(password.length + 56); - hashData.set(password, 0); - hashData.set(ownerKeySalt, password.length); - hashData.set(userBytes, password.length + ownerKeySalt.length); - const key = calculatePDF20Hash(password, hashData, userBytes); - const cipher = new AES256Cipher(key); - return cipher.decryptBlock(ownerEncryption, false, new Uint8Array(16)); - }
- getUserKey(password, userKeySalt, userEncryption) { - const hashData = new Uint8Array(password.length + 8); - hashData.set(password, 0); - hashData.set(userKeySalt, password.length); - const key = calculatePDF20Hash(password, hashData, []); - const cipher = new AES256Cipher(key); - return cipher.decryptBlock(userEncryption, false, new Uint8Array(16)); - }
- } +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.StructTreeRoot = exports.StructTreePage = void 0;
- return PDF20; -}(); +var _primitives = __w_pdfjs_require__(5);
-exports.PDF20 = PDF20; +var _util = __w_pdfjs_require__(2);
-class CipherTransform { - constructor(stringCipherConstructor, streamCipherConstructor) { - this.StringCipherConstructor = stringCipherConstructor; - this.StreamCipherConstructor = streamCipherConstructor; - } +var _name_number_tree = __w_pdfjs_require__(70);
- createStream(stream, length) { - const cipher = new this.StreamCipherConstructor(); - return new _decrypt_stream.DecryptStream(stream, length, function cipherTransformDecryptStream(data, finalize) { - return cipher.decryptBlock(data, finalize); - }); +const MAX_DEPTH = 40; +const StructElementType = { + PAGE_CONTENT: "PAGE_CONTENT", + STREAM_CONTENT: "STREAM_CONTENT", + OBJECT: "OBJECT", + ELEMENT: "ELEMENT" +}; + +class StructTreeRoot { + constructor(rootDict) { + this.dict = rootDict; + this.roleMap = new Map(); }
- decryptString(s) { - const cipher = new this.StringCipherConstructor(); - let data = (0, _util.stringToBytes)(s); - data = cipher.decryptBlock(data, true); - return (0, _util.bytesToString)(data); + init() { + this.readRoleMap(); }
- encryptString(s) { - const cipher = new this.StringCipherConstructor(); + readRoleMap() { + const roleMapDict = this.dict.get("RoleMap");
- if (cipher instanceof AESBaseCipher) { - const strLen = s.length; - const pad = 16 - strLen % 16; - s += String.fromCharCode(pad).repeat(pad); - const iv = new Uint8Array(16); + if (!(roleMapDict instanceof _primitives.Dict)) { + return; + }
- if (typeof crypto !== "undefined") { - crypto.getRandomValues(iv); - } else { - for (let i = 0; i < 16; i++) { - iv[i] = Math.floor(256 * Math.random()); - } + roleMapDict.forEach((key, value) => { + if (!(value instanceof _primitives.Name)) { + return; }
- let data = (0, _util.stringToBytes)(s); - data = cipher.encrypt(data, iv); - const buf = new Uint8Array(16 + data.length); - buf.set(iv); - buf.set(data, 16); - return (0, _util.bytesToString)(buf); - } - - let data = (0, _util.stringToBytes)(s); - data = cipher.encrypt(data); - return (0, _util.bytesToString)(data); + this.roleMap.set(key, value.name); + }); }
}
-const CipherTransformFactory = function CipherTransformFactoryClosure() { - const defaultPasswordBytes = new Uint8Array([0x28, 0xbf, 0x4e, 0x5e, 0x4e, 0x75, 0x8a, 0x41, 0x64, 0x00, 0x4e, 0x56, 0xff, 0xfa, 0x01, 0x08, 0x2e, 0x2e, 0x00, 0xb6, 0xd0, 0x68, 0x3e, 0x80, 0x2f, 0x0c, 0xa9, 0xfe, 0x64, 0x53, 0x69, 0x7a]); +exports.StructTreeRoot = StructTreeRoot;
- function createEncryptionKey20(revision, password, ownerPassword, ownerValidationSalt, ownerKeySalt, uBytes, userPassword, userValidationSalt, userKeySalt, ownerEncryption, userEncryption, perms) { - if (password) { - const passwordLength = Math.min(127, password.length); - password = password.subarray(0, passwordLength); - } else { - password = []; - } +class StructElementNode { + constructor(tree, dict) { + this.tree = tree; + this.dict = dict; + this.kids = []; + this.parseKids(); + }
- let pdfAlgorithm; + get role() { + const nameObj = this.dict.get("S"); + const name = nameObj instanceof _primitives.Name ? nameObj.name : ""; + const { + root + } = this.tree;
- if (revision === 6) { - pdfAlgorithm = new PDF20(); - } else { - pdfAlgorithm = new PDF17(); + if (root.roleMap.has(name)) { + return root.roleMap.get(name); }
- if (pdfAlgorithm.checkUserPassword(password, userValidationSalt, userPassword)) { - return pdfAlgorithm.getUserKey(password, userKeySalt, userEncryption); - } else if (password.length && pdfAlgorithm.checkOwnerPassword(password, ownerValidationSalt, uBytes, ownerPassword)) { - return pdfAlgorithm.getOwnerKey(password, ownerKeySalt, uBytes, ownerEncryption); + return name; + } + + parseKids() { + let pageObjId = null; + const objRef = this.dict.getRaw("Pg"); + + if (objRef instanceof _primitives.Ref) { + pageObjId = objRef.toString(); }
- return null; - } + const kids = this.dict.get("K");
- function prepareKeyData(fileId, password, ownerPassword, userPassword, flags, revision, keyLength, encryptMetadata) { - const hashDataSize = 40 + ownerPassword.length + fileId.length; - const hashData = new Uint8Array(hashDataSize); - let i = 0, - j, - n; + if (Array.isArray(kids)) { + for (const kid of kids) { + const element = this.parseKid(pageObjId, kid);
- if (password) { - n = Math.min(32, password.length); + if (element) { + this.kids.push(element); + } + } + } else { + const element = this.parseKid(pageObjId, kids);
- for (; i < n; ++i) { - hashData[i] = password[i]; + if (element) { + this.kids.push(element); } } + }
- j = 0; + parseKid(pageObjId, kid) { + if (Number.isInteger(kid)) { + if (this.tree.pageDict.objId !== pageObjId) { + return null; + }
- while (i < 32) { - hashData[i++] = defaultPasswordBytes[j++]; + return new StructElement({ + type: StructElementType.PAGE_CONTENT, + mcid: kid, + pageObjId + }); }
- for (j = 0, n = ownerPassword.length; j < n; ++j) { - hashData[i++] = ownerPassword[j]; - } + let kidDict = null;
- hashData[i++] = flags & 0xff; - hashData[i++] = flags >> 8 & 0xff; - hashData[i++] = flags >> 16 & 0xff; - hashData[i++] = flags >>> 24 & 0xff; + if (kid instanceof _primitives.Ref) { + kidDict = this.dict.xref.fetch(kid); + } else if (kid instanceof _primitives.Dict) { + kidDict = kid; + }
- for (j = 0, n = fileId.length; j < n; ++j) { - hashData[i++] = fileId[j]; + if (!kidDict) { + return null; }
- if (revision >= 4 && !encryptMetadata) { - hashData[i++] = 0xff; - hashData[i++] = 0xff; - hashData[i++] = 0xff; - hashData[i++] = 0xff; + const pageRef = kidDict.getRaw("Pg"); + + if (pageRef instanceof _primitives.Ref) { + pageObjId = pageRef.toString(); }
- let hash = calculateMD5(hashData, 0, i); - const keyLengthInBytes = keyLength >> 3; + const type = kidDict.get("Type") instanceof _primitives.Name ? kidDict.get("Type").name : null;
- if (revision >= 3) { - for (j = 0; j < 50; ++j) { - hash = calculateMD5(hash, 0, keyLengthInBytes); + if (type === "MCR") { + if (this.tree.pageDict.objId !== pageObjId) { + return null; } - }
- const encryptionKey = hash.subarray(0, keyLengthInBytes); - let cipher, checkData; + return new StructElement({ + type: StructElementType.STREAM_CONTENT, + refObjId: kidDict.getRaw("Stm") instanceof _primitives.Ref ? kidDict.getRaw("Stm").toString() : null, + pageObjId, + mcid: kidDict.get("MCID") + }); + }
- if (revision >= 3) { - for (i = 0; i < 32; ++i) { - hashData[i] = defaultPasswordBytes[i]; + if (type === "OBJR") { + if (this.tree.pageDict.objId !== pageObjId) { + return null; }
- for (j = 0, n = fileId.length; j < n; ++j) { - hashData[i++] = fileId[j]; - } + return new StructElement({ + type: StructElementType.OBJECT, + refObjId: kidDict.getRaw("Obj") instanceof _primitives.Ref ? kidDict.getRaw("Obj").toString() : null, + pageObjId + }); + } + + return new StructElement({ + type: StructElementType.ELEMENT, + dict: kidDict + }); + }
- cipher = new ARCFourCipher(encryptionKey); - checkData = cipher.encryptBlock(calculateMD5(hashData, 0, i)); - n = encryptionKey.length; - const derivedKey = new Uint8Array(n); +}
- for (j = 1; j <= 19; ++j) { - for (let k = 0; k < n; ++k) { - derivedKey[k] = encryptionKey[k] ^ j; - } +class StructElement { + constructor({ + type, + dict = null, + mcid = null, + pageObjId = null, + refObjId = null + }) { + this.type = type; + this.dict = dict; + this.mcid = mcid; + this.pageObjId = pageObjId; + this.refObjId = refObjId; + this.parentNode = null; + }
- cipher = new ARCFourCipher(derivedKey); - checkData = cipher.encryptBlock(checkData); - } +}
- for (j = 0, n = checkData.length; j < n; ++j) { - if (userPassword[j] !== checkData[j]) { - return null; - } - } - } else { - cipher = new ARCFourCipher(encryptionKey); - checkData = cipher.encryptBlock(defaultPasswordBytes); +class StructTreePage { + constructor(structTreeRoot, pageDict) { + this.root = structTreeRoot; + this.rootDict = structTreeRoot ? structTreeRoot.dict : null; + this.pageDict = pageDict; + this.nodes = []; + }
- for (j = 0, n = checkData.length; j < n; ++j) { - if (userPassword[j] !== checkData[j]) { - return null; - } - } + parse() { + if (!this.root || !this.rootDict) { + return; }
- return encryptionKey; - } + const parentTree = this.rootDict.get("ParentTree");
- function decodeUserPassword(password, ownerPassword, revision, keyLength) { - const hashData = new Uint8Array(32); - let i = 0; - const n = Math.min(32, password.length); + if (!parentTree) { + return; + }
- for (; i < n; ++i) { - hashData[i] = password[i]; + const id = this.pageDict.get("StructParents"); + + if (!Number.isInteger(id)) { + return; }
- let j = 0; + const numberTree = new _name_number_tree.NumberTree(parentTree, this.rootDict.xref); + const parentArray = numberTree.get(id);
- while (i < 32) { - hashData[i++] = defaultPasswordBytes[j++]; + if (!Array.isArray(parentArray)) { + return; }
- let hash = calculateMD5(hashData, 0, i); - const keyLengthInBytes = keyLength >> 3; + const map = new Map();
- if (revision >= 3) { - for (j = 0; j < 50; ++j) { - hash = calculateMD5(hash, 0, hash.length); + for (const ref of parentArray) { + if (ref instanceof _primitives.Ref) { + this.addNode(this.rootDict.xref.fetch(ref), map); } } + }
- let cipher, userPassword; + addNode(dict, map, level = 0) { + if (level > MAX_DEPTH) { + (0, _util.warn)("StructTree MAX_DEPTH reached."); + return null; + }
- if (revision >= 3) { - userPassword = ownerPassword; - const derivedKey = new Uint8Array(keyLengthInBytes); + if (map.has(dict)) { + return map.get(dict); + }
- for (j = 19; j >= 0; j--) { - for (let k = 0; k < keyLengthInBytes; ++k) { - derivedKey[k] = hash[k] ^ j; - } + const element = new StructElementNode(this, dict); + map.set(dict, element); + const parent = dict.get("P");
- cipher = new ARCFourCipher(derivedKey); - userPassword = cipher.encryptBlock(userPassword); + if (!parent || (0, _primitives.isName)(parent.get("Type"), "StructTreeRoot")) { + if (!this.addTopLevelNode(dict, element)) { + map.delete(dict); } - } else { - cipher = new ARCFourCipher(hash.subarray(0, keyLengthInBytes)); - userPassword = cipher.encryptBlock(ownerPassword); + + return element; }
- return userPassword; - } + const parentNode = this.addNode(parent, map, level + 1);
- const identityName = _primitives.Name.get("Identity"); + if (!parentNode) { + return element; + }
- function buildObjectKey(num, gen, encryptionKey, isAes = false) { - const key = new Uint8Array(encryptionKey.length + 9); - const n = encryptionKey.length; - let i; + let save = false;
- for (i = 0; i < n; ++i) { - key[i] = encryptionKey[i]; + for (const kid of parentNode.kids) { + if (kid.type === StructElementType.ELEMENT && kid.dict === dict) { + kid.parentNode = element; + save = true; + } }
- key[i++] = num & 0xff; - key[i++] = num >> 8 & 0xff; - key[i++] = num >> 16 & 0xff; - key[i++] = gen & 0xff; - key[i++] = gen >> 8 & 0xff; - - if (isAes) { - key[i++] = 0x73; - key[i++] = 0x41; - key[i++] = 0x6c; - key[i++] = 0x54; + if (!save) { + map.delete(dict); }
- const hash = calculateMD5(key, 0, i); - return hash.subarray(0, Math.min(encryptionKey.length + 5, 16)); + return element; }
- function buildCipherConstructor(cf, name, num, gen, key) { - if (!(name instanceof _primitives.Name)) { - throw new _util.FormatError("Invalid crypt filter name."); + addTopLevelNode(dict, element) { + const obj = this.rootDict.get("K"); + + if (!obj) { + return false; }
- const cryptFilter = cf.get(name.name); - let cfm; + if (obj instanceof _primitives.Dict) { + if (obj.objId !== dict.objId) { + return false; + }
- if (cryptFilter !== null && cryptFilter !== undefined) { - cfm = cryptFilter.get("CFM"); + this.nodes[0] = element; + return true; }
- if (!cfm || cfm.name === "None") { - return function cipherTransformFactoryBuildCipherConstructorNone() { - return new NullCipher(); - }; + if (!Array.isArray(obj)) { + return true; }
- if (cfm.name === "V2") { - return function cipherTransformFactoryBuildCipherConstructorV2() { - return new ARCFourCipher(buildObjectKey(num, gen, key, false)); - }; - } + let save = false;
- if (cfm.name === "AESV2") { - return function cipherTransformFactoryBuildCipherConstructorAESV2() { - return new AES128Cipher(buildObjectKey(num, gen, key, true)); - }; - } + for (let i = 0; i < obj.length; i++) { + const kidRef = obj[i];
- if (cfm.name === "AESV3") { - return function cipherTransformFactoryBuildCipherConstructorAESV3() { - return new AES256Cipher(key); - }; + if (kidRef && kidRef.toString() === dict.objId) { + this.nodes[i] = element; + save = true; + } }
- throw new _util.FormatError("Unknown crypto method"); + return save; }
- class CipherTransformFactory { - constructor(dict, fileId, password) { - const filter = dict.get("Filter"); - - if (!(0, _primitives.isName)(filter, "Standard")) { - throw new _util.FormatError("unknown encryption method"); + get serializable() { + function nodeToSerializable(node, parent, level = 0) { + if (level > MAX_DEPTH) { + (0, _util.warn)("StructTree too deep to be fully serialized."); + return; }
- this.filterName = filter.name; - this.dict = dict; - const algorithm = dict.get("V"); + const obj = Object.create(null); + obj.role = node.role; + obj.children = []; + parent.children.push(obj); + const alt = node.dict.get("Alt");
- if (!Number.isInteger(algorithm) || algorithm !== 1 && algorithm !== 2 && algorithm !== 4 && algorithm !== 5) { - throw new _util.FormatError("unsupported encryption algorithm"); + if (typeof alt === "string") { + obj.alt = (0, _util.stringToPDFString)(alt); }
- this.algorithm = algorithm; - let keyLength = dict.get("Length"); + const lang = node.dict.get("Lang");
- if (!keyLength) { - if (algorithm <= 3) { - keyLength = 40; - } else { - const cfDict = dict.get("CF"); - const streamCryptoName = dict.get("StmF"); + if (typeof lang === "string") { + obj.lang = (0, _util.stringToPDFString)(lang); + }
- if (cfDict instanceof _primitives.Dict && streamCryptoName instanceof _primitives.Name) { - cfDict.suppressEncryption = true; - const handlerDict = cfDict.get(streamCryptoName.name); - keyLength = handlerDict && handlerDict.get("Length") || 128; + for (const kid of node.kids) { + const kidElement = kid.type === StructElementType.ELEMENT ? kid.parentNode : null;
- if (keyLength < 40) { - keyLength <<= 3; - } - } + if (kidElement) { + nodeToSerializable(kidElement, obj, level + 1); + continue; + } else if (kid.type === StructElementType.PAGE_CONTENT || kid.type === StructElementType.STREAM_CONTENT) { + obj.children.push({ + type: "content", + id: `page${kid.pageObjId}_mcid${kid.mcid}` + }); + } else if (kid.type === StructElementType.OBJECT) { + obj.children.push({ + type: "object", + id: kid.refObjId + }); } } + }
- if (!Number.isInteger(keyLength) || keyLength < 40 || keyLength % 8 !== 0) { - throw new _util.FormatError("invalid key length"); + const root = Object.create(null); + root.children = []; + root.role = "Root"; + + for (const child of this.nodes) { + if (!child) { + continue; }
- const ownerPassword = (0, _util.stringToBytes)(dict.get("O")).subarray(0, 32); - const userPassword = (0, _util.stringToBytes)(dict.get("U")).subarray(0, 32); - const flags = dict.get("P"); - const revision = dict.get("R"); - const encryptMetadata = (algorithm === 4 || algorithm === 5) && dict.get("EncryptMetadata") !== false; - this.encryptMetadata = encryptMetadata; - const fileIdBytes = (0, _util.stringToBytes)(fileId); - let passwordBytes; + nodeToSerializable(child, root); + }
- if (password) { - if (revision === 6) { - try { - password = (0, _util.utf8StringToString)(password); - } catch (ex) { - (0, _util.warn)("CipherTransformFactory: " + "Unable to convert UTF8 encoded password."); - } - } + return root; + }
- passwordBytes = (0, _util.stringToBytes)(password); - } +}
- let encryptionKey; +exports.StructTreePage = StructTreePage;
- if (algorithm !== 5) { - encryptionKey = prepareKeyData(fileIdBytes, passwordBytes, ownerPassword, userPassword, flags, revision, keyLength, encryptMetadata); - } else { - const ownerValidationSalt = (0, _util.stringToBytes)(dict.get("O")).subarray(32, 40); - const ownerKeySalt = (0, _util.stringToBytes)(dict.get("O")).subarray(40, 48); - const uBytes = (0, _util.stringToBytes)(dict.get("U")).subarray(0, 48); - const userValidationSalt = (0, _util.stringToBytes)(dict.get("U")).subarray(32, 40); - const userKeySalt = (0, _util.stringToBytes)(dict.get("U")).subarray(40, 48); - const ownerEncryption = (0, _util.stringToBytes)(dict.get("OE")); - const userEncryption = (0, _util.stringToBytes)(dict.get("UE")); - const perms = (0, _util.stringToBytes)(dict.get("Perms")); - encryptionKey = createEncryptionKey20(revision, passwordBytes, ownerPassword, ownerValidationSalt, ownerKeySalt, uBytes, userPassword, userValidationSalt, userKeySalt, ownerEncryption, userEncryption, perms); - } +/***/ }), +/* 75 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
- if (!encryptionKey && !password) { - throw new _util.PasswordException("No password given", _util.PasswordResponses.NEED_PASSWORD); - } else if (!encryptionKey && password) { - const decodedPassword = decodeUserPassword(passwordBytes, ownerPassword, revision, keyLength); - encryptionKey = prepareKeyData(fileIdBytes, decodedPassword, ownerPassword, userPassword, flags, revision, keyLength, encryptMetadata); - }
- if (!encryptionKey) { - throw new _util.PasswordException("Incorrect Password", _util.PasswordResponses.INCORRECT_PASSWORD); - }
- this.encryptionKey = encryptionKey; +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.ObjectLoader = void 0;
- if (algorithm >= 4) { - const cf = dict.get("CF"); +var _primitives = __w_pdfjs_require__(5);
- if (cf instanceof _primitives.Dict) { - cf.suppressEncryption = true; - } +var _base_stream = __w_pdfjs_require__(7);
- this.cf = cf; - this.stmf = dict.get("StmF") || identityName; - this.strf = dict.get("StrF") || identityName; - this.eff = dict.get("EFF") || this.stmf; - } +var _core_utils = __w_pdfjs_require__(6); + +var _util = __w_pdfjs_require__(2); + +function mayHaveChildren(value) { + return value instanceof _primitives.Ref || value instanceof _primitives.Dict || value instanceof _base_stream.BaseStream || Array.isArray(value); +} + +function addChildren(node, nodesToVisit) { + if (node instanceof _primitives.Dict) { + node = node.getRawValues(); + } else if (node instanceof _base_stream.BaseStream) { + node = node.dict.getRawValues(); + } else if (!Array.isArray(node)) { + return; + } + + for (const rawValue of node) { + if (mayHaveChildren(rawValue)) { + nodesToVisit.push(rawValue); } + } +}
- createCipherTransform(num, gen) { - if (this.algorithm === 4 || this.algorithm === 5) { - return new CipherTransform(buildCipherConstructor(this.cf, this.stmf, num, gen, this.encryptionKey), buildCipherConstructor(this.cf, this.strf, num, gen, this.encryptionKey)); - } +class ObjectLoader { + constructor(dict, keys, xref) { + this.dict = dict; + this.keys = keys; + this.xref = xref; + this.refSet = null; + }
- const key = buildObjectKey(num, gen, this.encryptionKey, false); + async load() { + if (this.xref.stream.isDataLoaded) { + return undefined; + }
- const cipherConstructor = function buildCipherCipherConstructor() { - return new ARCFourCipher(key); - }; + const { + keys, + dict + } = this; + this.refSet = new _primitives.RefSet(); + const nodesToVisit = [];
- return new CipherTransform(cipherConstructor, cipherConstructor); + for (let i = 0, ii = keys.length; i < ii; i++) { + const rawValue = dict.getRaw(keys[i]); + + if (rawValue !== undefined) { + nodesToVisit.push(rawValue); + } }
+ return this._walk(nodesToVisit); }
- return CipherTransformFactory; -}(); + async _walk(nodesToVisit) { + const nodesToRevisit = []; + const pendingRequests = [];
-exports.CipherTransformFactory = CipherTransformFactory; + while (nodesToVisit.length) { + let currentNode = nodesToVisit.pop();
-/***/ }), -/* 75 */ -/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + if (currentNode instanceof _primitives.Ref) { + if (this.refSet.has(currentNode)) { + continue; + }
+ try { + this.refSet.put(currentNode); + currentNode = this.xref.fetch(currentNode); + } catch (ex) { + if (!(ex instanceof _core_utils.MissingDataException)) { + (0, _util.warn)(`ObjectLoader._walk - requesting all data: "${ex}".`); + this.refSet = null; + const { + manager + } = this.xref.stream; + return manager.requestAllChunks(); + }
+ nodesToRevisit.push(currentNode); + pendingRequests.push({ + begin: ex.begin, + end: ex.end + }); + } + }
-Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.DecryptStream = void 0; + if (currentNode instanceof _base_stream.BaseStream) { + const baseStreams = currentNode.getBaseStreams();
-var _decode_stream = __w_pdfjs_require__(29); + if (baseStreams) { + let foundMissingData = false;
-const chunkSize = 512; + for (const stream of baseStreams) { + if (stream.isDataLoaded) { + continue; + }
-class DecryptStream extends _decode_stream.DecodeStream { - constructor(str, maybeLength, decrypt) { - super(maybeLength); - this.str = str; - this.dict = str.dict; - this.decrypt = decrypt; - this.nextChunk = null; - this.initialized = false; - } + foundMissingData = true; + pendingRequests.push({ + begin: stream.start, + end: stream.end + }); + }
- readBlock() { - let chunk; + if (foundMissingData) { + nodesToRevisit.push(currentNode); + } + } + }
- if (this.initialized) { - chunk = this.nextChunk; - } else { - chunk = this.str.getBytes(chunkSize); - this.initialized = true; + addChildren(currentNode, nodesToVisit); }
- if (!chunk || chunk.length === 0) { - this.eof = true; - return; - } + if (pendingRequests.length) { + await this.xref.stream.manager.requestRanges(pendingRequests);
- this.nextChunk = this.str.getBytes(chunkSize); - const hasMoreData = this.nextChunk && this.nextChunk.length > 0; - const decrypt = this.decrypt; - chunk = decrypt(chunk, !hasMoreData); - let bufferLength = this.bufferLength; - const n = chunk.length, - buffer = this.ensureBuffer(bufferLength + n); + for (const node of nodesToRevisit) { + if (node instanceof _primitives.Ref) { + this.refSet.remove(node); + } + }
- for (let i = 0; i < n; i++) { - buffer[bufferLength++] = chunk[i]; + return this._walk(nodesToRevisit); }
- this.bufferLength = bufferLength; + this.refSet = null; + return undefined; }
}
-exports.DecryptStream = DecryptStream; +exports.ObjectLoader = ObjectLoader;
/***/ }), /* 76 */ @@ -47114,7 +47910,7 @@ var _utils = __w_pdfjs_require__(78);
var _util = __w_pdfjs_require__(2);
-var _core_utils = __w_pdfjs_require__(8); +var _core_utils = __w_pdfjs_require__(6);
var _namespaces = __w_pdfjs_require__(79);
@@ -48715,7 +49511,7 @@ function parseExpression(expr, dotDotAllowed, noExpr = true) { return null; }
- parsed[parsed.length - 1].index = parseIndex(match[0]); + parsed.at(-1).index = parseIndex(match[0]); pos += match[0].length + 1; continue; } @@ -48880,7 +49676,7 @@ function searchNode(root, container, expr, dotDotAllowed = true, useCache = true if (isFinite(index)) { root = nodes.filter(node => index < node.length).map(node => node[index]); } else { - root = nodes.reduce((acc, node) => acc.concat(node), []); + root = nodes.flat(); } }
@@ -49616,7 +50412,7 @@ var _util = __w_pdfjs_require__(2);
var _fonts = __w_pdfjs_require__(85);
-var _core_utils = __w_pdfjs_require__(8); +var _core_utils = __w_pdfjs_require__(6);
var _som = __w_pdfjs_require__(80);
@@ -49679,6 +50475,10 @@ function* getContainedChildren(node) { } }
+function isRequired(node) { + return node.validate && node.validate.nullTest === "error"; +} + function setTabIndex(node) { while (node) { if (!node.traversal) { @@ -49946,7 +50746,7 @@ class Arc extends _xfa_object.XFAObject { }
[_xfa_object.$toHTML]() { - const edge = this.edge ? this.edge : new Edge({}); + const edge = this.edge || new Edge({});
const edgeStyle = edge[_xfa_object.$toStyle]();
@@ -50279,7 +51079,7 @@ class Border extends _xfa_object.XFAObject { const edges = this.edge.children.slice();
if (edges.length < 4) { - const defaultEdge = edges[edges.length - 1] || new Edge({}); + const defaultEdge = edges.at(-1) || new Edge({});
for (let i = edges.length; i < 4; i++) { edges.push(defaultEdge); @@ -50331,7 +51131,7 @@ class Border extends _xfa_object.XFAObject { const cornerStyles = this.corner.children.map(node => node[_xfa_object.$toStyle]());
if (cornerStyles.length === 2 || cornerStyles.length === 3) { - const last = cornerStyles[cornerStyles.length - 1]; + const last = cornerStyles.at(-1);
for (let i = cornerStyles.length; i < 4; i++) { cornerStyles.push(last); @@ -50730,7 +51530,8 @@ class CheckButton extends _xfa_object.XFAObject { checked, xfaOn: exportedValue.on, xfaOff: exportedValue.off, - "aria-label": ariaLabel(field) + "aria-label": ariaLabel(field), + "aria-required": false } };
@@ -50738,6 +51539,11 @@ class CheckButton extends _xfa_object.XFAObject { input.attributes.name = groupId; }
+ if (isRequired(field)) { + input.attributes["aria-required"] = true; + input.attributes.required = true; + } + return _utils.HTMLResult.success({ name: "label", attributes: { @@ -50776,7 +51582,7 @@ class ChoiceList extends _xfa_object.XFAObject {
const fontSize = field.font && field.font.size || 10; const optionStyle = { - fontSize: `calc(${fontSize}px * var(--zoom-factor))` + fontSize: `calc(${fontSize}px * var(--scale-factor))` }; const children = [];
@@ -50831,9 +51637,15 @@ class ChoiceList extends _xfa_object.XFAObject { fieldId: field[_xfa_object.$uid], dataId: field[_xfa_object.$data] && field[_xfa_object.$data][_xfa_object.$uid] || field[_xfa_object.$uid], style, - "aria-label": ariaLabel(field) + "aria-label": ariaLabel(field), + "aria-required": false };
+ if (isRequired(field)) { + selectAttributes["aria-required"] = true; + selectAttributes.required = true; + } + if (this.open === "multiSelect") { selectAttributes.multiple = true; } @@ -51044,9 +51856,16 @@ class DateTimeEdit extends _xfa_object.XFAObject { dataId: field[_xfa_object.$data] && field[_xfa_object.$data][_xfa_object.$uid] || field[_xfa_object.$uid], class: ["xfaTextfield"], style, - "aria-label": ariaLabel(field) + "aria-label": ariaLabel(field), + "aria-required": false } }; + + if (isRequired(field)) { + html.attributes["aria-required"] = true; + html.attributes.required = true; + } + return _utils.HTMLResult.success({ name: "label", attributes: { @@ -52754,7 +53573,7 @@ class Line extends _xfa_object.XFAObject { [_xfa_object.$toHTML]() { const parent = this[_xfa_object.$getParent]()[_xfa_object.$getParent]();
- const edge = this.edge ? this.edge : new Edge({}); + const edge = this.edge || new Edge({});
const edgeStyle = edge[_xfa_object.$toStyle]();
@@ -52964,9 +53783,16 @@ class NumericEdit extends _xfa_object.XFAObject { dataId: field[_xfa_object.$data] && field[_xfa_object.$data][_xfa_object.$uid] || field[_xfa_object.$uid], class: ["xfaTextfield"], style, - "aria-label": ariaLabel(field) + "aria-label": ariaLabel(field), + "aria-required": false } }; + + if (isRequired(field)) { + html.attributes["aria-required"] = true; + html.attributes.required = true; + } + return _utils.HTMLResult.success({ name: "label", attributes: { @@ -54548,7 +55374,7 @@ class Template extends _xfa_object.XFAObject { if (target instanceof PageArea) { targetPageArea = target; } else if (target instanceof ContentArea) { - const index = contentAreas.findIndex(e => e === target); + const index = contentAreas.indexOf(target);
if (index !== -1) { if (index > currentIndex) { @@ -54558,7 +55384,7 @@ class Template extends _xfa_object.XFAObject { } } else { targetPageArea = target[_xfa_object.$getParent](); - startIndex = targetPageArea.contentArea.children.findIndex(e => e === target); + startIndex = targetPageArea.contentArea.children.indexOf(target); } }
@@ -54732,7 +55558,8 @@ class TextEdit extends _xfa_object.XFAObject { fieldId: field[_xfa_object.$uid], class: ["xfaTextfield"], style, - "aria-label": ariaLabel(field) + "aria-label": ariaLabel(field), + "aria-required": false } }; } else { @@ -54744,11 +55571,17 @@ class TextEdit extends _xfa_object.XFAObject { fieldId: field[_xfa_object.$uid], class: ["xfaTextfield"], style, - "aria-label": ariaLabel(field) + "aria-label": ariaLabel(field), + "aria-required": false } }; }
+ if (isRequired(field)) { + html.attributes["aria-required"] = true; + html.attributes.required = true; + } + return _utils.HTMLResult.success({ name: "label", attributes: { @@ -56143,7 +56976,7 @@ function layoutNode(node, availableSpace) { } }
- const maxWidth = (!node.w ? availableSpace.width : node.w) - marginH; + const maxWidth = (node.w || availableSpace.width) - marginH; const fontFinder = node[_xfa_object.$globalData].fontFinder;
if (node.value.exData && node.value.exData[_xfa_object.$content] && node.value.exData.contentType === "text/html") { @@ -56457,7 +57290,7 @@ function isPrintOnly(node) { function getCurrentPara(node) { const stack = node[_xfa_object.$getTemplateRoot]()[_xfa_object.$extra].paraStack;
- return stack.length ? stack[stack.length - 1] : null; + return stack.length ? stack.at(-1) : null; }
function setPara(node, nodeStyle, value) { @@ -56844,7 +57677,7 @@ class FontSelector { }
pushData(xfaFont, margin, lineHeight) { - const lastFont = this.stack[this.stack.length - 1]; + const lastFont = this.stack.at(-1);
for (const name of ["typeface", "posture", "weight", "size", "letterSpacing"]) { if (!xfaFont[name]) { @@ -56872,7 +57705,7 @@ class FontSelector { }
topFont() { - return this.stack[this.stack.length - 1]; + return this.stack.at(-1); }
} @@ -57049,7 +57882,7 @@ class DataHandler { const stack = [[-1, this.data[_xfa_object.$getChildren]()]];
while (stack.length > 0) { - const last = stack[stack.length - 1]; + const last = stack.at(-1); const [i, children] = last;
if (i + 1 === children.length) { @@ -57116,7 +57949,7 @@ exports.XFAParser = void 0;
var _xfa_object = __w_pdfjs_require__(77);
-var _xml_parser = __w_pdfjs_require__(70); +var _xml_parser = __w_pdfjs_require__(66);
var _builder = __w_pdfjs_require__(89);
@@ -57494,7 +58327,7 @@ class Builder { const prefixStack = this._namespacePrefixes.get(prefix);
if (prefixStack && prefixStack.length > 0) { - return prefixStack[prefixStack.length - 1]; + return prefixStack.at(-1); }
(0, _util.warn)(`Unknown namespace prefix: ${prefix}.`); @@ -60300,6 +61133,10 @@ function mapStyle(styleStr, node, richText) { style.verticalAlign = (0, _html_utils.measureToString)(Math.sign((0, _utils.getMeasurement)(style.verticalAlign)) * fontSize * VERTICAL_FACTOR); }
+ if (richText && style.fontSize) { + style.fontSize = `calc(${style.fontSize} * var(--scale-factor))`; + } + (0, _html_utils.fixTextIndent)(style); return style; } @@ -60649,7 +61486,7 @@ class P extends XhtmlObject { [_xfa_object.$text]() { const siblings = this[_xfa_object.$getParent]()[_xfa_object.$getChildren]();
- if (siblings[siblings.length - 1] === this) { + if (siblings.at(-1) === this) { return super[_xfa_object.$text](); }
@@ -60792,9 +61629,9 @@ exports.DatasetReader = void 0;
var _util = __w_pdfjs_require__(2);
-var _core_utils = __w_pdfjs_require__(8); +var _core_utils = __w_pdfjs_require__(6);
-var _xml_parser = __w_pdfjs_require__(70); +var _xml_parser = __w_pdfjs_require__(66);
function decodeString(str) { try { @@ -60880,13 +61717,13 @@ var _util = __w_pdfjs_require__(2);
var _primitives = __w_pdfjs_require__(5);
-var _core_utils = __w_pdfjs_require__(8); +var _core_utils = __w_pdfjs_require__(6);
var _parser = __w_pdfjs_require__(27);
-var _base_stream = __w_pdfjs_require__(9); +var _base_stream = __w_pdfjs_require__(7);
-var _crypto = __w_pdfjs_require__(74); +var _crypto = __w_pdfjs_require__(67);
class XRef { constructor(stream, pdfManager) { @@ -60902,7 +61739,7 @@ class XRef {
getNewRef() { if (this._newRefNum === null) { - this._newRefNum = this.entries.length; + this._newRefNum = this.entries.length || 1; }
return _primitives.Ref.get(this._newRefNum++, 0); @@ -62433,8 +63270,8 @@ Object.defineProperty(exports, "WorkerMessageHandler", ({
var _worker = __w_pdfjs_require__(1);
-const pdfjsVersion = '2.14.290'; -const pdfjsBuild = '38c82357b'; +const pdfjsVersion = '2.15.305'; +const pdfjsBuild = '2a386eff9'; })();
/******/ return __webpack_exports__; diff --git a/toolkit/components/pdfjs/content/web/debugger.js b/toolkit/components/pdfjs/content/web/debugger.js index 1d5571007306f..210e388ad07d2 100644 --- a/toolkit/components/pdfjs/content/web/debugger.js +++ b/toolkit/components/pdfjs/content/web/debugger.js @@ -68,10 +68,10 @@ const FontInspector = (function FontInspectorClosure() { const tmp = document.createElement("button"); tmp.addEventListener("click", resetSelection); tmp.textContent = "Refresh"; - panel.appendChild(tmp); + panel.append(tmp);
fonts = document.createElement("div"); - panel.appendChild(fonts); + panel.append(fonts); }, cleanup() { fonts.textContent = ""; @@ -98,11 +98,11 @@ const FontInspector = (function FontInspectorClosure() { const tr = document.createElement("tr"); const td1 = document.createElement("td"); td1.textContent = entry; - tr.appendChild(td1); + tr.append(td1); const td2 = document.createElement("td"); td2.textContent = obj[entry].toString(); - tr.appendChild(td2); - moreInfo.appendChild(tr); + tr.append(td2); + moreInfo.append(tr); } return moreInfo; } @@ -117,7 +117,7 @@ const FontInspector = (function FontInspectorClosure() { download.href = url[1]; } else if (fontObj.data) { download.href = URL.createObjectURL( - new Blob([fontObj.data], { type: fontObj.mimeType }) + new Blob([fontObj.data], { type: fontObj.mimetype }) ); } download.textContent = "Download"; @@ -134,14 +134,8 @@ const FontInspector = (function FontInspectorClosure() { select.addEventListener("click", function () { selectFont(fontName, select.checked); }); - font.appendChild(select); - font.appendChild(name); - font.appendChild(document.createTextNode(" ")); - font.appendChild(download); - font.appendChild(document.createTextNode(" ")); - font.appendChild(logIt); - font.appendChild(moreInfo); - fonts.appendChild(font); + font.append(select, name, " ", download, " ", logIt, moreInfo); + fonts.append(font); // Somewhat of a hack, should probably add a hook for when the text layer // is done rendering. setTimeout(() => { @@ -173,10 +167,9 @@ const StepperManager = (function StepperManagerClosure() { stepperChooser.addEventListener("change", function (event) { self.selectStepper(this.value); }); - stepperControls.appendChild(stepperChooser); + stepperControls.append(stepperChooser); stepperDiv = document.createElement("div"); - this.panel.appendChild(stepperControls); - this.panel.appendChild(stepperDiv); + this.panel.append(stepperControls, stepperDiv); if (sessionStorage.getItem("pdfjsBreakPoints")) { breakPoints = JSON.parse(sessionStorage.getItem("pdfjsBreakPoints")); } @@ -199,11 +192,11 @@ const StepperManager = (function StepperManagerClosure() { debug.id = "stepper" + pageIndex; debug.hidden = true; debug.className = "stepper"; - stepperDiv.appendChild(debug); + stepperDiv.append(debug); const b = document.createElement("option"); b.textContent = "Page " + (pageIndex + 1); b.value = pageIndex; - stepperChooser.appendChild(b); + stepperChooser.append(b); const initBreakPoints = breakPoints[pageIndex] || []; const stepper = new Stepper(debug, pageIndex, initBreakPoints); steppers.push(stepper); @@ -289,15 +282,17 @@ const Stepper = (function StepperClosure() { const panel = this.panel; const content = c("div", "c=continue, s=step"); const table = c("table"); - content.appendChild(table); + content.append(table); table.cellSpacing = 0; const headerRow = c("tr"); - table.appendChild(headerRow); - headerRow.appendChild(c("th", "Break")); - headerRow.appendChild(c("th", "Idx")); - headerRow.appendChild(c("th", "fn")); - headerRow.appendChild(c("th", "args")); - panel.appendChild(content); + table.append(headerRow); + headerRow.append( + c("th", "Break"), + c("th", "Idx"), + c("th", "fn"), + c("th", "args") + ); + panel.append(content); this.table = table; this.updateOperatorList(operatorList); } @@ -329,7 +324,7 @@ const Stepper = (function StepperClosure() { const line = c("tr"); line.className = "line"; line.dataset.idx = i; - chunk.appendChild(line); + chunk.append(line); const checked = this.breakPoints.includes(i); const args = operatorList.argsArray[i] || [];
@@ -341,9 +336,8 @@ const Stepper = (function StepperClosure() { cbox.dataset.idx = i; cbox.onclick = cboxOnClick;
- breakCell.appendChild(cbox); - line.appendChild(breakCell); - line.appendChild(c("td", i.toString())); + breakCell.append(cbox); + line.append(breakCell, c("td", i.toString())); const fn = opMap[operatorList.fnArray[i]]; let decArgs = args; if (fn === "showText") { @@ -353,46 +347,44 @@ const Stepper = (function StepperClosure() { const unicodeRow = c("tr"); for (const glyph of glyphs) { if (typeof glyph === "object" && glyph !== null) { - charCodeRow.appendChild(c("td", glyph.originalCharCode)); - fontCharRow.appendChild(c("td", glyph.fontChar)); - unicodeRow.appendChild(c("td", glyph.unicode)); + charCodeRow.append(c("td", glyph.originalCharCode)); + fontCharRow.append(c("td", glyph.fontChar)); + unicodeRow.append(c("td", glyph.unicode)); } else { // null or number const advanceEl = c("td", glyph); advanceEl.classList.add("advance"); - charCodeRow.appendChild(advanceEl); - fontCharRow.appendChild(c("td")); - unicodeRow.appendChild(c("td")); + charCodeRow.append(advanceEl); + fontCharRow.append(c("td")); + unicodeRow.append(c("td")); } } decArgs = c("td"); const table = c("table"); table.classList.add("showText"); - decArgs.appendChild(table); - table.appendChild(charCodeRow); - table.appendChild(fontCharRow); - table.appendChild(unicodeRow); + decArgs.append(table); + table.append(charCodeRow, fontCharRow, unicodeRow); } else if (fn === "restore") { this.indentLevel--; } - line.appendChild(c("td", " ".repeat(this.indentLevel * 2) + fn)); + line.append(c("td", " ".repeat(this.indentLevel * 2) + fn)); if (fn === "save") { this.indentLevel++; }
if (decArgs instanceof HTMLElement) { - line.appendChild(decArgs); + line.append(decArgs); } else { - line.appendChild(c("td", JSON.stringify(simplifyArgs(decArgs)))); + line.append(c("td", JSON.stringify(simplifyArgs(decArgs)))); } } if (operatorsToDisplay < operatorList.fnArray.length) { const lastCell = c("td", "..."); lastCell.colspan = 4; - chunk.appendChild(lastCell); + chunk.append(lastCell); } this.operatorListIdx = operatorList.fnArray.length; - this.table.appendChild(chunk); + this.table.append(chunk); }
getNextBreakPoint() { @@ -485,15 +477,14 @@ const Stats = (function Stats() { title.textContent = "Page: " + pageNumber; const statsDiv = document.createElement("div"); statsDiv.textContent = stat.toString(); - wrapper.appendChild(title); - wrapper.appendChild(statsDiv); + wrapper.append(title, statsDiv); stats.push({ pageNumber, div: wrapper }); stats.sort(function (a, b) { return a.pageNumber - b.pageNumber; }); clear(this.panel); for (const entry of stats) { - this.panel.appendChild(entry.div); + this.panel.append(entry.div); } }, cleanup() { @@ -547,13 +538,13 @@ const PDFBug = (function PDFBugClosure() {
const controls = document.createElement("div"); controls.setAttribute("class", "controls"); - ui.appendChild(controls); + ui.append(controls);
const panels = document.createElement("div"); panels.setAttribute("class", "panels"); - ui.appendChild(panels); + ui.append(panels);
- container.appendChild(ui); + container.append(ui); container.style.right = panelWidth + "px";
// Initialize all the debugging tools. @@ -565,8 +556,8 @@ const PDFBug = (function PDFBugClosure() { event.preventDefault(); this.selectPanel(tool); }); - controls.appendChild(panelButton); - panels.appendChild(panel); + controls.append(panelButton); + panels.append(panel); tool.panel = panel; tool.manager = this; if (tool.enabled) { @@ -587,7 +578,7 @@ const PDFBug = (function PDFBugClosure() { link.rel = "stylesheet"; link.href = url.replace(/.js$/, ".css");
- document.head.appendChild(link); + document.head.append(link); }, cleanup() { for (const tool of this.tools) { diff --git a/toolkit/components/pdfjs/content/web/images/toolbarButton-editorFreeText.svg b/toolkit/components/pdfjs/content/web/images/toolbarButton-editorFreeText.svg new file mode 100644 index 0000000000000..7f4f20458ddb0 --- /dev/null +++ b/toolkit/components/pdfjs/content/web/images/toolbarButton-editorFreeText.svg @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- copied from https://www.svgrepo.com/svg/255881/text --> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + viewBox="0 0 16 16" style="enable-background:new 0 0 16 16;" xml:space="preserve"> +<g> + <g transform="scale(0.03125)"> + <path d="M405.787,43.574H8.17c-4.513,0-8.17,3.658-8.17,8.17v119.83c0,4.512,3.657,8.17,8.17,8.17h32.681 + c4.513,0,8.17-3.658,8.17-8.17v-24.511h95.319v119.83c0,4.512,3.657,8.17,8.17,8.17c4.513,0,8.17-3.658,8.17-8.17v-128 + c0-4.512-3.657-8.17-8.17-8.17H40.851c-4.513,0-8.17,3.658-8.17,8.17v24.511H16.34V59.915h381.277v103.489h-16.34v-24.511 + c0-4.512-3.657-8.17-8.17-8.17h-111.66c-4.513,0-8.17,3.658-8.17,8.17v288.681c0,4.512,3.657,8.17,8.17,8.17h57.191v16.34H95.319 + v-16.34h57.191c4.513,0,8.17-3.658,8.17-8.17v-128c0-4.512-3.657-8.17-8.17-8.17c-4.513,0-8.17,3.658-8.17,8.17v119.83H87.149 + c-4.513,0-8.17,3.658-8.17,8.17v32.681c0,4.512,3.657,8.17,8.17,8.17h239.66c4.513,0,8.17-3.658,8.17-8.17v-32.681 + c0-4.512-3.657-8.17-8.17-8.17h-57.192v-272.34h95.319v24.511c0,4.512,3.657,8.17,8.17,8.17h32.681c4.513,0,8.17-3.658,8.17-8.17 + V51.745C413.957,47.233,410.3,43.574,405.787,43.574z"/> + </g> +</g> +<g> + <g transform="scale(0.03125)"> + <path d="M503.83,452.085h-24.511V59.915h24.511c4.513,0,8.17-3.658,8.17-8.17s-3.657-8.17-8.17-8.17h-65.362 + c-4.513,0-8.17,3.658-8.17,8.17s3.657,8.17,8.17,8.17h24.511v392.17h-24.511c-4.513,0-8.17,3.658-8.17,8.17s3.657,8.17,8.17,8.17 + h65.362c4.513,0,8.17-3.658,8.17-8.17S508.343,452.085,503.83,452.085z"/> + </g> +</g> +</svg> diff --git a/toolkit/components/pdfjs/content/web/images/toolbarButton-editorInk.svg b/toolkit/components/pdfjs/content/web/images/toolbarButton-editorInk.svg new file mode 100644 index 0000000000000..e51484dd2c84a --- /dev/null +++ b/toolkit/components/pdfjs/content/web/images/toolbarButton-editorInk.svg @@ -0,0 +1,9 @@ +<?xml version='1.0' encoding='utf-8'?> +<!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'> +<svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" xmlns:xlink="http://www.w3.org/1999/xlink" enable-background="new 0 0 16 16"> + <g> + <g transform="scale(0.03125)"> + <path d="m455.1,137.9l-32.4,32.4-81-81.1 32.4-32.4c6.6-6.6 18.1-6.6 24.7,0l56.3,56.4c6.8,6.8 6.8,17.9 0,24.7zm-270.7,271l-81-81.1 209.4-209.7 81,81.1-209.4,209.7zm-99.7-42l60.6,60.7-84.4,23.8 23.8-84.5zm399.3-282.6l-56.3-56.4c-11-11-50.7-31.8-82.4,0l-285.3,285.5c-2.5,2.5-4.3,5.5-5.2,8.9l-43,153.1c-2,7.1 0.1,14.7 5.2,20 5.2,5.3 15.6,6.2 20,5.2l153-43.1c3.4-0.9 6.4-2.7 8.9-5.2l285.1-285.5c22.7-22.7 22.7-59.7 0-82.5z"/> + </g> + </g> +</svg> diff --git a/toolkit/components/pdfjs/content/web/images/toolbarButton-editorNone.svg b/toolkit/components/pdfjs/content/web/images/toolbarButton-editorNone.svg new file mode 100644 index 0000000000000..4d1e7f29c64fe --- /dev/null +++ b/toolkit/components/pdfjs/content/web/images/toolbarButton-editorNone.svg @@ -0,0 +1,4 @@ +<!-- 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/. --> +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><path d="M12.407 8.217l-8.083-6.7A.2.2 0 0 0 4 1.672V12.3a.2.2 0 0 0 .333.146l2.56-2.372 1.857 3.9A1.125 1.125 0 1 0 10.782 13L8.913 9.075l3.4-.51a.2.2 0 0 0 .095-.348z"></path></svg> \ No newline at end of file diff --git a/toolkit/components/pdfjs/content/web/viewer.css b/toolkit/components/pdfjs/content/web/viewer.css index 09a5705989fb7..298199fab0156 100644 --- a/toolkit/components/pdfjs/content/web/viewer.css +++ b/toolkit/components/pdfjs/content/web/viewer.css @@ -100,9 +100,30 @@ --annotation-unfocused-field-background: url("data:image/svg+xml;charset=UTF-8,<svg width='1px' height='1px' xmlns='http://www.w3.org/2000/svg'><rect width='100%' height='100%' style='fill:rgba(0, 54, 255, 0.13);'/></svg>"); }
+@media (forced-colors: active) { + .annotationLayer .textWidgetAnnotation input:required, + .annotationLayer .textWidgetAnnotation textarea:required, + .annotationLayer .choiceWidgetAnnotation select:required, + .annotationLayer .buttonWidgetAnnotation.checkBox input:required, + .annotationLayer .buttonWidgetAnnotation.radioButton input:required { + outline: 1.5px solid selectedItem; + } +} + +.annotationLayer { + position: absolute; + top: 0; + left: 0; + pointer-events: none; + transform-origin: 0 0; +} + .annotationLayer section { position: absolute; text-align: initial; + pointer-events: auto; + box-sizing: border-box; + transform-origin: 0 0; }
.annotationLayer .linkAnnotation > a, @@ -116,10 +137,8 @@ }
.annotationLayer .buttonWidgetAnnotation.pushButton > canvas { - position: relative; - top: 0; - left: 0; - z-index: -1; + width: 100%; + height: 100%; }
.annotationLayer .linkAnnotation > a:hover, @@ -132,6 +151,8 @@ .annotationLayer .textAnnotation img { position: absolute; cursor: pointer; + width: 100%; + height: 100%; }
.annotationLayer .textWidgetAnnotation input, @@ -142,14 +163,21 @@ background-image: var(--annotation-unfocused-field-background); border: 1px solid transparent; box-sizing: border-box; - font-size: 9px; + font: calc(9px * var(--scale-factor)) sans-serif; height: 100%; margin: 0; - padding: 0 3px; vertical-align: top; width: 100%; }
+.annotationLayer .textWidgetAnnotation input:required, +.annotationLayer .textWidgetAnnotation textarea:required, +.annotationLayer .choiceWidgetAnnotation select:required, +.annotationLayer .buttonWidgetAnnotation.checkBox input:required, +.annotationLayer .buttonWidgetAnnotation.radioButton input:required { + outline: 1.5px solid red; +} + .annotationLayer .choiceWidgetAnnotation select option { padding: 0; } @@ -159,8 +187,6 @@ }
.annotationLayer .textWidgetAnnotation textarea { - font: message-box; - font-size: 9px; resize: none; }
@@ -202,7 +228,7 @@ .annotationLayer .buttonWidgetAnnotation.checkBox input:checked:before, .annotationLayer .buttonWidgetAnnotation.checkBox input:checked:after, .annotationLayer .buttonWidgetAnnotation.radioButton input:checked:before { - background-color: rgba(0, 0, 0, 1); + background-color: CanvasText; content: ""; display: block; position: absolute; @@ -250,32 +276,40 @@ .annotationLayer .buttonWidgetAnnotation.checkBox input, .annotationLayer .buttonWidgetAnnotation.radioButton input { appearance: none; - padding: 0; +} + +.annotationLayer .popupTriggerArea { + height: 100%; + width: 100%; }
.annotationLayer .popupWrapper { position: absolute; - width: 20em; + font-size: calc(9px * var(--scale-factor)); + width: 100%; + min-width: calc(180px * var(--scale-factor)); + pointer-events: none; }
.annotationLayer .popup { position: absolute; z-index: 200; - max-width: 20em; + max-width: calc(180px * var(--scale-factor)); background-color: rgba(255, 255, 153, 1); - box-shadow: 0 2px 5px rgba(136, 136, 136, 1); - border-radius: 2px; - padding: 6px; - margin-left: 5px; + box-shadow: 0 calc(2px * var(--scale-factor)) calc(5px * var(--scale-factor)) + rgba(136, 136, 136, 1); + border-radius: calc(2px * var(--scale-factor)); + padding: calc(6px * var(--scale-factor)); + margin-left: calc(5px * var(--scale-factor)); cursor: pointer; font: message-box; - font-size: 9px; white-space: normal; word-wrap: break-word; + pointer-events: auto; }
.annotationLayer .popup > * { - font-size: 9px; + font-size: calc(9px * var(--scale-factor)); }
.annotationLayer .popup h1 { @@ -284,17 +318,18 @@
.annotationLayer .popupDate { display: inline-block; - margin-left: 5px; + margin-left: calc(5px * var(--scale-factor)); }
.annotationLayer .popupContent { border-top: 1px solid rgba(51, 51, 51, 1); - margin-top: 2px; - padding-top: 2px; + margin-top: calc(2px * var(--scale-factor)); + padding-top: calc(2px * var(--scale-factor)); }
.annotationLayer .richText > * { white-space: pre-wrap; + font-size: calc(9px * var(--scale-factor)); }
.annotationLayer .highlightAnnotation, @@ -314,11 +349,23 @@ cursor: pointer; }
+.annotationLayer section svg { + position: absolute; + width: 100%; + height: 100%; +} +
:root { --xfa-unfocused-field-background: url("data:image/svg+xml;charset=UTF-8,<svg width='1px' height='1px' xmlns='http://www.w3.org/2000/svg'><rect width='100%' height='100%' style='fill:rgba(0, 54, 255, 0.13);'/></svg>"); }
+@media (forced-colors: active) { + .xfaLayer *:required { + outline: 1.5px solid selectedItem; + } +} + .xfaLayer .highlight { margin: -1px; padding: 1px; @@ -389,6 +436,10 @@ line-height: inherit; }
+.xfaLayer *:required { + outline: 1.5px solid red; +} + .xfaLayer div { pointer-events: none; } @@ -633,24 +684,163 @@ } }
+ +:root { + --focus-outline: solid 2px red; + --hover-outline: dashed 2px blue; + --freetext-line-height: 1.35; + --freetext-padding: 2px; + --editorInk-editing-cursor: url(images/toolbarButton-editorInk.svg) 0 16; +} + +@media (forced-colors: active) { + :root { + --focus-outline: solid 3px ButtonText; + --hover-outline: dashed 3px ButtonText; + } +} + +[data-editor-rotation="90"] { + transform: rotate(90deg); +} +[data-editor-rotation="180"] { + transform: rotate(180deg); +} +[data-editor-rotation="270"] { + transform: rotate(270deg); +} + +.annotationEditorLayer { + background: transparent; + position: absolute; + top: 0; + left: 0; + font-size: calc(100px * var(--scale-factor)); + transform-origin: 0 0; +} + +.annotationEditorLayer .selectedEditor { + outline: var(--focus-outline); + resize: none; +} + +.annotationEditorLayer .freeTextEditor { + position: absolute; + background: transparent; + border-radius: 3px; + padding: calc(var(--freetext-padding) * var(--scale-factor)); + resize: none; + width: auto; + height: auto; + z-index: 1; + transform-origin: 0 0; + touch-action: none; +} + +.annotationEditorLayer .freeTextEditor .internal { + background: transparent; + border: none; + top: 0; + left: 0; + overflow: visible; + white-space: nowrap; + resize: none; + font: 10px sans-serif; + line-height: var(--freetext-line-height); +} + +.annotationEditorLayer .freeTextEditor .overlay { + position: absolute; + display: none; + background: transparent; + top: 0; + left: 0; + width: 100%; + height: 100%; +} + +.annotationEditorLayer .freeTextEditor .overlay.enabled { + display: block; +} + +.annotationEditorLayer .freeTextEditor .internal:empty::before { + content: attr(default-content); + color: gray; +} + +.annotationEditorLayer .freeTextEditor .internal:focus { + outline: none; +} + +.annotationEditorLayer .inkEditor.disabled { + resize: none; +} + +.annotationEditorLayer .inkEditor.disabled.selectedEditor { + resize: horizontal; +} + +.annotationEditorLayer .freeTextEditor:hover:not(.selectedEditor), +.annotationEditorLayer .inkEditor:hover:not(.selectedEditor) { + outline: var(--hover-outline); +} + +.annotationEditorLayer .inkEditor { + position: absolute; + background: transparent; + border-radius: 3px; + overflow: auto; + width: 100%; + height: 100%; + z-index: 1; + transform-origin: 0 0; + cursor: auto; +} + +.annotationEditorLayer .inkEditor.editing { + resize: none; + cursor: var(--editorInk-editing-cursor), pointer; +} + +.annotationEditorLayer .inkEditor .inkEditorCanvas { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + touch-action: none; +} + :root { --viewer-container-height: 0; --pdfViewer-padding-bottom: 0; --page-margin: 1px auto -8px; --page-border: 9px solid transparent; + --page-border-image: url(images/shadow.png) 9 9 repeat; --spreadHorizontalWrapped-margin-LR: -3.5px; - --zoom-factor: 1; + --scale-factor: 1; }
@media screen and (forced-colors: active) { :root { --pdfViewer-padding-bottom: 9px; - --page-margin: 9px auto 0; - --page-border: none; - --spreadHorizontalWrapped-margin-LR: 4.5px; + --page-margin: 8px auto -1px; + --page-border: 1px solid CanvasText; + --page-border-image: none; + --spreadHorizontalWrapped-margin-LR: 3.5px; } }
+[data-main-rotation="90"] { + transform: rotate(90deg) translateY(-100%); +} +[data-main-rotation="180"] { + transform: rotate(180deg) translate(-100%, -100%); +} +[data-main-rotation="270"] { + transform: rotate(270deg) translateX(-100%); +} + .pdfViewer { padding-bottom: var(--pdfViewer-padding-bottom); } @@ -667,8 +857,8 @@ position: relative; overflow: visible; border: var(--page-border); + border-image: var(--page-border-image); background-clip: content-box; - border-image: url(images/shadow.png) 9 9 repeat; background-color: rgba(255, 255, 255, 1); }
@@ -783,13 +973,14 @@ --sidebar-transition-timing-function: ease; --scale-select-container-width: 140px; --scale-select-overflow: 22px; - --loadingBar-end-offset: 0;
--toolbar-icon-opacity: 0.7; --doorhanger-icon-opacity: 0.9;
--main-color: rgba(12, 12, 13, 1); --body-bg-color: rgba(237, 237, 240, 1); + --progressBar-percent: 0%; + --progressBar-end-offset: 0; --progressBar-color: rgba(10, 132, 255, 1); --progressBar-indeterminate-bg-color: rgba(221, 221, 222, 1); --progressBar-indeterminate-blend-color: rgba(116, 177, 239, 1); @@ -828,6 +1019,9 @@ --loading-icon: url(images/loading.svg); --treeitem-expanded-icon: url(images/treeitem-expanded.svg); --treeitem-collapsed-icon: url(images/treeitem-collapsed.svg); + --toolbarButton-editorNone-icon: url(images/toolbarButton-editorNone.svg); + --toolbarButton-editorFreeText-icon: url(images/toolbarButton-editorFreeText.svg); + --toolbarButton-editorInk-icon: url(images/toolbarButton-editorInk.svg); --toolbarButton-menuArrow-icon: url(images/toolbarButton-menuArrow.svg); --toolbarButton-sidebarToggle-icon: url(images/toolbarButton-sidebarToggle.svg); --toolbarButton-secondaryToolbarToggle-icon: url(images/toolbarButton-secondaryToolbarToggle.svg); @@ -1018,7 +1212,7 @@ select { right: 0; bottom: 0; left: 0; - min-width: 320px; + min-width: 350px; }
#sidebarContent { @@ -1083,7 +1277,8 @@ select {
#toolbarContainer, .findbar, -.secondaryToolbar { +.secondaryToolbar, +.editorParamsToolbar { position: relative; height: 32px; background-color: var(--toolbar-bg-color); @@ -1096,7 +1291,7 @@ select {
#loadingBar { position: absolute; - inset-inline: 0 var(--loadingBar-end-offset); + inset-inline: 0 var(--progressBar-end-offset); height: 4px; background-color: var(--body-bg-color); border-bottom: 1px solid var(--toolbar-border-color); @@ -1113,28 +1308,31 @@ select { position: absolute; top: 0; left: 0; - width: 0%; + width: 100%; + transform: scaleX(var(--progressBar-percent)); + transform-origin: 0 0; height: 100%; background-color: var(--progressBar-color); overflow: hidden; - transition: width 200ms; + transition: transform 200ms; }
@keyframes progressIndeterminate { 0% { - left: -142px; + transform: translateX(-142px); } 100% { - left: 0; + transform: translateX(0); } }
-#loadingBar .progress.indeterminate { +#loadingBar.indeterminate .progress { + transform: none; background-color: var(--progressBar-indeterminate-bg-color); transition: none; }
-#loadingBar .progress.indeterminate .glimmer { +#loadingBar.indeterminate .progress .glimmer { position: absolute; top: 0; left: 0; @@ -1160,7 +1358,8 @@ select { }
.findbar, -.secondaryToolbar { +.secondaryToolbar, +.editorParamsToolbar { top: 32px; position: absolute; z-index: 10000; @@ -1227,7 +1426,8 @@ select { background-color: rgba(255, 102, 102, 1); }
-.secondaryToolbar { +.secondaryToolbar, +.editorParamsToolbar { padding: 6px 0 10px; inset-inline-end: 4px; height: auto; @@ -1235,6 +1435,50 @@ select { background-color: var(--doorhanger-bg-color); }
+.editorParamsToolbarContainer { + width: 220px; + margin-bottom: -4px; +} + +.editorParamsToolbarContainer > .editorParamsSetter { + min-height: 26px; + display: flex; + align-items: center; + justify-content: space-between; + padding-inline: 10px; +} + +.editorParamsToolbarContainer .editorParamsLabel { + padding-inline-end: 10px; + flex: none; + color: var(--main-color); +} + +.editorParamsToolbarContainer .editorParamsColor { + width: 32px; + height: 32px; + flex: none; +} + +.editorParamsToolbarContainer .editorParamsSlider { + background-color: transparent; + width: 90px; + flex: 0 1 0; +} + +.editorParamsToolbarContainer .editorParamsSlider::-moz-range-progress { + background-color: black; +} +.editorParamsToolbarContainer .editorParamsSlider::-moz-range-track, +.editorParamsToolbarContainer + .editorParamsSlider::-webkit-slider-runnable-track { + background-color: black; +} +.editorParamsToolbarContainer .editorParamsSlider::-moz-range-thumb, +.editorParamsToolbarContainer .editorParamsSlider::-webkit-slider-thumb { + background-color: white; +} + #secondaryToolbarButtonContainer { max-width: 220px; min-height: 26px; @@ -1243,6 +1487,16 @@ select { margin-bottom: -4px; }
+#editorInkParamsToolbar { + inset-inline-end: 40px; + background-color: var(--toolbar-bg-color); +} + +#editorFreeTextParamsToolbar { + inset-inline-end: 68px; + background-color: var(--toolbar-bg-color); +} + .doorHanger, .doorHangerRight { border-radius: 2px; @@ -1567,12 +1821,23 @@ select { mask-image: var(--toolbarButton-presentationMode-icon); }
+#editorNone::before { + mask-image: var(--toolbarButton-editorNone-icon); +} + +#editorFreeText::before { + mask-image: var(--toolbarButton-editorFreeText-icon); +} + +#editorInk::before { + mask-image: var(--toolbarButton-editorInk-icon); +} + #print::before, #secondaryPrint::before { mask-image: var(--toolbarButton-print-icon); }
- #download::before, #secondaryDownload::before { mask-image: var(--toolbarButton-download-icon); @@ -1873,12 +2138,16 @@ a:focus > .thumbnail > .thumbnailSelectionRing, cursor: pointer; }
-#layersView .treeItem > a > * { +#layersView .treeItem > a * { cursor: pointer; } #layersView .treeItem > a > label { padding-inline-start: 4px; } +#layersView .treeItem > a > label > input { + float: inline-start; + margin-top: 1px; +}
.treeItemToggler { position: relative; @@ -1921,7 +2190,6 @@ a:focus > .thumbnail > .thumbnailSelectionRing, background: rgba(0, 0, 255, 0.3); }
- .dialogButton { width: auto; margin: 3px 4px 2px !important; @@ -2107,7 +2375,7 @@ dialog :link { } }
-@media all and (max-width: 770px) { +@media all and (max-width: 820px) { #outerContainer .hiddenLargeView { display: none; } @@ -2116,7 +2384,7 @@ dialog :link { } }
-@media all and (max-width: 700px) { +@media all and (max-width: 750px) { #outerContainer .hiddenMediumView { display: none; } @@ -2125,7 +2393,7 @@ dialog :link { } }
-@media all and (max-width: 640px) { +@media all and (max-width: 690px) { .hiddenSmallView, .hiddenSmallView * { display: none; @@ -2141,7 +2409,7 @@ dialog :link { } }
-@media all and (max-width: 535px) { +@media all and (max-width: 560px) { #scaleSelectContainer { display: none; } diff --git a/toolkit/components/pdfjs/content/web/viewer.html b/toolkit/components/pdfjs/content/web/viewer.html index 4b1cd13a81b91..02187731697c1 100644 --- a/toolkit/components/pdfjs/content/web/viewer.html +++ b/toolkit/components/pdfjs/content/web/viewer.html @@ -30,11 +30,8 @@ See https://github.com/adobe-type-tools/cmap-resources <base href="resource://pdf.js/web/"> <script src="../build/pdf.js"></script>
- <link rel="stylesheet" href="viewer.css">
- - <script src="viewer.js"></script>
</head> @@ -118,13 +115,38 @@ See https://github.com/adobe-type-tools/cmap-resources </div> </div> <!-- findbar -->
+ <div class="editorParamsToolbar hidden doorHangerRight" id="editorFreeTextParamsToolbar"> + <div class="editorParamsToolbarContainer"> + <div class="editorParamsSetter"> + <label for="editorFreeTextColor" class="editorParamsLabel" data-l10n-id="editor_free_text_font_color">Font Color</label> + <input type="color" id="editorFreeTextColor" class="editorParamsColor" tabindex="100"> + </div> + <div class="editorParamsSetter"> + <label for="editorFreeTextFontSize" class="editorParamsLabel" data-l10n-id="editor_free_text_font_size">Font Size</label> + <input type="range" id="editorFreeTextFontSize" class="editorParamsSlider" value="10" min="5" max="100" step="1" tabindex="101"> + </div> + </div> + </div> + + <div class="editorParamsToolbar hidden doorHangerRight" id="editorInkParamsToolbar"> + <div class="editorParamsToolbarContainer"> + <div class="editorParamsSetter"> + <label for="editorInkColor" class="editorParamsLabel" data-l10n-id="editor_ink_line_color">Line Color</label> + <input type="color" id="editorInkColor" class="editorParamsColor" tabindex="102"> + </div> + <div class="editorParamsSetter"> + <label for="editorInkThickness" class="editorParamsLabel" data-l10n-id="editor_ink_line_thickness">Line Thickness</label> + <input type="range" id="editorInkThickness" class="editorParamsSlider" value="1" min="1" max="20" step="1" tabindex="103"> + </div> + </div> + </div> + <div id="secondaryToolbar" class="secondaryToolbar hidden doorHangerRight"> <div id="secondaryToolbarButtonContainer"> <button id="secondaryPresentationMode" class="secondaryToolbarButton visibleLargeView" title="Switch to Presentation Mode" tabindex="51" data-l10n-id="presentation_mode"> <span data-l10n-id="presentation_mode_label">Presentation Mode</span> </button>
- <button id="secondaryPrint" class="secondaryToolbarButton visibleMediumView" title="Print" tabindex="53" data-l10n-id="print"> <span data-l10n-id="print_label">Print</span> </button> @@ -233,7 +255,6 @@ See https://github.com/adobe-type-tools/cmap-resources <span data-l10n-id="presentation_mode_label">Presentation Mode</span> </button>
- <button id="print" class="toolbarButton hiddenMediumView" title="Print" tabindex="33" data-l10n-id="print"> <span data-l10n-id="print_label">Print</span> </button> @@ -247,7 +268,22 @@ See https://github.com/adobe-type-tools/cmap-resources
<div class="verticalToolbarSeparator hiddenSmallView"></div>
- <button id="secondaryToolbarToggle" class="toolbarButton" title="Tools" tabindex="36" data-l10n-id="tools" aria-expanded="false" aria-controls="secondaryToolbar"> + <div id="editorModeButtons" class="splitToolbarButton toggled hidden" role="radiogroup"> + <button id="editorNone" class="toolbarButton toggled" disabled="disabled" title="Disable Annotation Editing" role="radio" aria-checked="true" tabindex="36" data-l10n-id="editor_none"> + <span data-l10n-id="editor_none_label">Disable Editing</span> + </button> + <button id="editorFreeText" class="toolbarButton" disabled="disabled" title="Add FreeText Annotation" role="radio" aria-checked="false" tabindex="37" data-l10n-id="editor_free_text"> + <span data-l10n-id="editor_free_text_label">FreeText Annotation</span> + </button> + <button id="editorInk" class="toolbarButton" disabled="disabled" title="Add Ink Annotation" role="radio" aria-checked="false" tabindex="38" data-l10n-id="editor_ink"> + <span data-l10n-id="editor_ink_label">Ink Annotation</span> + </button> + </div> + + <!-- Should be visible when the "editorModeButtons" are visible. --> + <div id="editorModeSeparator" class="verticalToolbarSeparator hidden"></div> + + <button id="secondaryToolbarToggle" class="toolbarButton" title="Tools" tabindex="48" data-l10n-id="tools" aria-expanded="false" aria-controls="secondaryToolbar"> <span data-l10n-id="tools_label">Tools</span> </button> </div> diff --git a/toolkit/components/pdfjs/content/web/viewer.js b/toolkit/components/pdfjs/content/web/viewer.js index 6df7f42928480..7fab34d096f41 100644 --- a/toolkit/components/pdfjs/content/web/viewer.js +++ b/toolkit/components/pdfjs/content/web/viewer.js @@ -44,6 +44,10 @@ const OptionKind = { }; exports.OptionKind = OptionKind; const defaultOptions = { + annotationEditorMode: { + value: -1, + kind: OptionKind.VIEWER + OptionKind.PREFERENCE + }, annotationMode: { value: 2, kind: OptionKind.VIEWER + OptionKind.PREFERENCE @@ -52,10 +56,6 @@ const defaultOptions = { value: 0, kind: OptionKind.VIEWER + OptionKind.PREFERENCE }, - defaultUrl: { - value: "compressed.tracemonkey-pldi-09.pdf", - kind: OptionKind.VIEWER - }, defaultZoomValue: { value: "", kind: OptionKind.VIEWER + OptionKind.PREFERENCE @@ -102,9 +102,12 @@ const defaultOptions = { }, maxCanvasPixels: { value: 16777216, - compatibility: compatibilityParams.maxCanvasPixels, kind: OptionKind.VIEWER }, + forcePageColors: { + value: false, + kind: OptionKind.VIEWER + OptionKind.PREFERENCE + }, pageColorsBackground: { value: "Canvas", kind: OptionKind.VIEWER + OptionKind.PREFERENCE @@ -121,10 +124,6 @@ const defaultOptions = { value: 150, kind: OptionKind.VIEWER }, - renderer: { - value: "canvas", - kind: OptionKind.VIEWER - }, sidebarViewOnLoad: { value: -1, kind: OptionKind.VIEWER + OptionKind.PREFERENCE @@ -236,7 +235,7 @@ class AppOptions { const defaultOption = defaultOptions[name];
if (defaultOption !== undefined) { - return defaultOption.compatibility ?? defaultOption.value; + return compatibilityParams[name] ?? defaultOption.value; }
return undefined; @@ -267,7 +266,7 @@ class AppOptions { }
const userOption = userOptions[name]; - options[name] = userOption !== undefined ? userOption : defaultOption.compatibility ?? defaultOption.value; + options[name] = userOption !== undefined ? userOption : compatibilityParams[name] ?? defaultOption.value; }
return options; @@ -308,53 +307,55 @@ exports.PDFViewerApplication = exports.PDFPrintServiceFactory = exports.DefaultE
var _ui_utils = __webpack_require__(3);
-var _app_options = __webpack_require__(1); +var _pdfjsLib = __webpack_require__(4);
-var _event_utils = __webpack_require__(4); +var _app_options = __webpack_require__(1);
-var _pdfjsLib = __webpack_require__(5); +var _event_utils = __webpack_require__(5);
var _pdf_cursor_tools = __webpack_require__(6);
var _pdf_link_service = __webpack_require__(8);
-var _overlay_manager = __webpack_require__(9); +var _annotation_editor_params = __webpack_require__(9);
-var _password_prompt = __webpack_require__(10); +var _overlay_manager = __webpack_require__(10);
-var _pdf_attachment_viewer = __webpack_require__(11); +var _password_prompt = __webpack_require__(11);
-var _pdf_document_properties = __webpack_require__(13); +var _pdf_attachment_viewer = __webpack_require__(12);
-var _pdf_find_bar = __webpack_require__(14); +var _pdf_document_properties = __webpack_require__(14);
-var _pdf_find_controller = __webpack_require__(15); +var _pdf_find_bar = __webpack_require__(15);
-var _pdf_history = __webpack_require__(17); +var _pdf_find_controller = __webpack_require__(16);
-var _pdf_layer_viewer = __webpack_require__(18); +var _pdf_history = __webpack_require__(18);
-var _pdf_outline_viewer = __webpack_require__(19); +var _pdf_layer_viewer = __webpack_require__(19);
-var _pdf_presentation_mode = __webpack_require__(20); +var _pdf_outline_viewer = __webpack_require__(20);
-var _pdf_rendering_queue = __webpack_require__(21); +var _pdf_presentation_mode = __webpack_require__(21);
-var _pdf_scripting_manager = __webpack_require__(22); +var _pdf_rendering_queue = __webpack_require__(22);
-var _pdf_sidebar = __webpack_require__(23); +var _pdf_scripting_manager = __webpack_require__(23);
-var _pdf_sidebar_resizer = __webpack_require__(24); +var _pdf_sidebar = __webpack_require__(24);
-var _pdf_thumbnail_viewer = __webpack_require__(25); +var _pdf_sidebar_resizer = __webpack_require__(25);
-var _pdf_viewer = __webpack_require__(27); +var _pdf_thumbnail_viewer = __webpack_require__(26);
-var _secondary_toolbar = __webpack_require__(36); +var _pdf_viewer = __webpack_require__(28);
-var _toolbar = __webpack_require__(37); +var _secondary_toolbar = __webpack_require__(38);
-var _view_history = __webpack_require__(38); +var _toolbar = __webpack_require__(39); + +var _view_history = __webpack_require__(40);
const DISABLE_AUTO_FETCH_LOADING_BAR_TIMEOUT = 5000; const FORCE_PAGES_LOADED_TIMEOUT = 10000; @@ -420,6 +421,10 @@ class DefaultExternalServices { return (0, _pdfjsLib.shadow)(this, "isInAutomation", false); }
+ static updateEditorStates(data) { + throw new Error("Not implemented: updateEditorStates"); + } + }
exports.DefaultExternalServices = DefaultExternalServices; @@ -452,6 +457,7 @@ const PDFViewerApplication = { secondaryToolbar: null, eventBus: null, l10n: null, + annotationEditorParams: null, isInitialViewSet: false, downloadComplete: false, isViewerEmbedded: window.parent !== window, @@ -469,6 +475,7 @@ const PDFViewerApplication = { _wheelUnusedTicks: 0, _idleCallbacks: new Set(), _PDFBug: null, + _printAnnotationStoragePromise: null,
async initialize(appConfig) { this.preferences = this.externalServices.createPreferences(); @@ -670,8 +677,15 @@ const PDFViewerApplication = { docPropertiesLookup: this._scriptingDocProperties.bind(this) }); this.pdfScriptingManager = pdfScriptingManager; - const container = appConfig.mainContainer; - const viewer = appConfig.viewerContainer; + const container = appConfig.mainContainer, + viewer = appConfig.viewerContainer; + + const annotationEditorMode = _app_options.AppOptions.get("annotationEditorMode"); + + const pageColors = _app_options.AppOptions.get("forcePageColors") || window.matchMedia("(forced-colors: active)").matches ? { + background: _app_options.AppOptions.get("pageColorsBackground"), + foreground: _app_options.AppOptions.get("pageColorsForeground") + } : null; this.pdfViewer = new _pdf_viewer.PDFViewer({ container, viewer, @@ -681,19 +695,17 @@ const PDFViewerApplication = { downloadManager, findController, scriptingManager: _app_options.AppOptions.get("enableScripting") && pdfScriptingManager, - renderer: _app_options.AppOptions.get("renderer"), + renderer: null, l10n: this.l10n, textLayerMode: _app_options.AppOptions.get("textLayerMode"), annotationMode: _app_options.AppOptions.get("annotationMode"), + annotationEditorMode, imageResourcesPath: _app_options.AppOptions.get("imageResourcesPath"), enablePrintAutoRotate: _app_options.AppOptions.get("enablePrintAutoRotate"), useOnlyCssZoom: _app_options.AppOptions.get("useOnlyCssZoom"), maxCanvasPixels: _app_options.AppOptions.get("maxCanvasPixels"), enablePermissions: _app_options.AppOptions.get("enablePermissions"), - pageColors: { - background: _app_options.AppOptions.get("pageColorsBackground"), - foreground: _app_options.AppOptions.get("pageColorsForeground") - } + pageColors }); pdfRenderingQueue.setViewer(this.pdfViewer); pdfLinkService.setViewer(this.pdfViewer); @@ -703,7 +715,8 @@ const PDFViewerApplication = { eventBus, renderingQueue: pdfRenderingQueue, linkService: pdfLinkService, - l10n: this.l10n + l10n: this.l10n, + pageColors }); pdfRenderingQueue.setThumbnailViewer(this.pdfThumbnailViewer);
@@ -719,7 +732,17 @@ const PDFViewerApplication = { this.findBar = new _pdf_find_bar.PDFFindBar(appConfig.findBar, eventBus, this.l10n); }
- this.pdfDocumentProperties = new _pdf_document_properties.PDFDocumentProperties(appConfig.documentProperties, this.overlayManager, eventBus, this.l10n); + if (annotationEditorMode !== _pdfjsLib.AnnotationEditorType.DISABLE) { + this.annotationEditorParams = new _annotation_editor_params.AnnotationEditorParams(appConfig.annotationEditorParams, eventBus); + + for (const element of [document.getElementById("editorModeButtons"), document.getElementById("editorModeSeparator")]) { + element.classList.remove("hidden"); + } + } + + this.pdfDocumentProperties = new _pdf_document_properties.PDFDocumentProperties(appConfig.documentProperties, this.overlayManager, eventBus, this.l10n, () => { + return this._docFilename; + }); this.pdfCursorTools = new _pdf_cursor_tools.PDFCursorTools({ container, eventBus, @@ -828,7 +851,7 @@ const PDFViewerApplication = { },
get loadingBar() { - const bar = new _ui_utils.ProgressBar("#loadingBar"); + const bar = new _ui_utils.ProgressBar("loadingBar"); return (0, _pdfjsLib.shadow)(this, "loadingBar", bar); },
@@ -1069,9 +1092,7 @@ const PDFViewerApplication = { throw new Error("PDF document not downloaded."); },
- async download({ - sourceEventType = "download" - } = {}) { + async download() { const url = this._downloadUrl, filename = this._docFilename;
@@ -1082,15 +1103,13 @@ const PDFViewerApplication = { const blob = new Blob([data], { type: "application/pdf" }); - await this.downloadManager.download(blob, url, filename, sourceEventType); + await this.downloadManager.download(blob, url, filename); } catch (reason) { await this.downloadManager.downloadUrl(url, filename); } },
- async save({ - sourceEventType = "download" - } = {}) { + async save() { if (this._saveInProgress) { return; } @@ -1107,23 +1126,21 @@ const PDFViewerApplication = { const blob = new Blob([data], { type: "application/pdf" }); - await this.downloadManager.download(blob, url, filename, sourceEventType); + await this.downloadManager.download(blob, url, filename); } catch (reason) { console.error(`Error when saving the document: ${reason.message}`); - await this.download({ - sourceEventType - }); + await this.download(); } finally { await this.pdfScriptingManager.dispatchDidSave(); this._saveInProgress = false; } },
- downloadOrSave(options) { + downloadOrSave() { if (this.pdfDocument?.annotationStorage.size > 0) { - this.save(options); + this.save(); } else { - this.download(options); + this.download(); } },
@@ -1189,23 +1206,28 @@ const PDFViewerApplication = {
const percent = Math.round(level * 100);
- if (percent > this.loadingBar.percent || isNaN(percent)) { - this.loadingBar.percent = percent; - const disableAutoFetch = this.pdfDocument ? this.pdfDocument.loadingParams.disableAutoFetch : _app_options.AppOptions.get("disableAutoFetch"); + if (percent <= this.loadingBar.percent) { + return; + }
- if (disableAutoFetch && percent) { - if (this.disableAutoFetchLoadingBarTimeout) { - clearTimeout(this.disableAutoFetchLoadingBarTimeout); - this.disableAutoFetchLoadingBarTimeout = null; - } + this.loadingBar.percent = percent;
- this.loadingBar.show(); - this.disableAutoFetchLoadingBarTimeout = setTimeout(() => { - this.loadingBar.hide(); - this.disableAutoFetchLoadingBarTimeout = null; - }, DISABLE_AUTO_FETCH_LOADING_BAR_TIMEOUT); - } + const disableAutoFetch = this.pdfDocument?.loadingParams.disableAutoFetch ?? _app_options.AppOptions.get("disableAutoFetch"); + + if (!disableAutoFetch || isNaN(percent)) { + return; + } + + if (this.disableAutoFetchLoadingBarTimeout) { + clearTimeout(this.disableAutoFetchLoadingBarTimeout); + this.disableAutoFetchLoadingBarTimeout = null; } + + this.loadingBar.show(); + this.disableAutoFetchLoadingBarTimeout = setTimeout(() => { + this.loadingBar.hide(); + this.disableAutoFetchLoadingBarTimeout = null; + }, DISABLE_AUTO_FETCH_LOADING_BAR_TIMEOUT); },
load(pdfDocument) { @@ -1230,7 +1252,7 @@ const PDFViewerApplication = { let baseDocumentUrl; baseDocumentUrl = this.baseUrl; this.pdfLinkService.setDocument(pdfDocument, baseDocumentUrl); - this.pdfDocumentProperties.setDocument(pdfDocument, this.url); + this.pdfDocumentProperties.setDocument(pdfDocument); const pdfViewer = this.pdfViewer; pdfViewer.setDocument(pdfDocument); const { @@ -1507,7 +1529,7 @@ const PDFViewerApplication = { this._contentDispositionFilename ??= contentDispositionFilename; this._contentLength ??= contentLength; console.log(`PDF ${pdfDocument.fingerprints[0]} [${info.PDFFormatVersion} ` + `${(info.Producer || "-").trim()} / ${(info.Creator || "-").trim()}] ` + `(PDF.js: ${_pdfjsLib.version || "-"})`); - let pdfTitle = info?.Title; + let pdfTitle = info.Title; const metadataTitle = metadata?.get("dc:title");
if (metadataTitle) { @@ -1517,9 +1539,9 @@ const PDFViewerApplication = { }
if (pdfTitle) { - this.setTitle(`${pdfTitle} - ${contentDispositionFilename || document.title}`); - } else if (contentDispositionFilename) { - this.setTitle(contentDispositionFilename); + this.setTitle(`${pdfTitle} - ${this._contentDispositionFilename || document.title}`); + } else if (this._contentDispositionFilename) { + this.setTitle(this._contentDispositionFilename); }
if (info.IsXFAPresent && !info.IsAcroFormPresent && !pdfDocument.isPureXfa) { @@ -1719,17 +1741,19 @@ const PDFViewerApplication = {
this.pdfViewer.cleanup(); this.pdfThumbnailViewer.cleanup(); - this.pdfDocument.cleanup(this.pdfViewer.renderer === _ui_utils.RendererType.SVG); + this.pdfDocument.cleanup(); },
forceRendering() { this.pdfRenderingQueue.printing = !!this.printService; - this.pdfRenderingQueue.isThumbnailViewEnabled = this.pdfSidebar.isThumbnailViewVisible; + this.pdfRenderingQueue.isThumbnailViewEnabled = this.pdfSidebar.visibleView === _ui_utils.SidebarView.THUMBS; this.pdfRenderingQueue.renderHighestPriority(); },
beforePrint() { - this.pdfScriptingManager.dispatchWillPrint(); + this._printAnnotationStoragePromise = this.pdfScriptingManager.dispatchWillPrint().catch(() => {}).then(() => { + return this.pdfDocument?.annotationStorage.print; + });
if (this.printService) { return; @@ -1755,7 +1779,7 @@ const PDFViewerApplication = { const printResolution = _app_options.AppOptions.get("printResolution");
const optionalContentConfigPromise = this.pdfViewer.optionalContentConfigPromise; - const printService = PDFPrintServiceFactory.instance.createPrintService(this.pdfDocument, pagesOverview, printContainer, printResolution, optionalContentConfigPromise, this.l10n); + const printService = PDFPrintServiceFactory.instance.createPrintService(this.pdfDocument, pagesOverview, printContainer, printResolution, optionalContentConfigPromise, this._printAnnotationStoragePromise, this.l10n); this.printService = printService; this.forceRendering(); printService.layout(); @@ -1765,7 +1789,13 @@ const PDFViewerApplication = { },
afterPrint() { - this.pdfScriptingManager.dispatchDidPrint(); + if (this._printAnnotationStoragePromise) { + this._printAnnotationStoragePromise.then(() => { + this.pdfScriptingManager.dispatchDidPrint(); + }); + + this._printAnnotationStoragePromise = null; + }
if (this.printService) { this.printService.destroy(); @@ -1828,12 +1858,14 @@ const PDFViewerApplication = {
eventBus._on("presentationmode", webViewerPresentationMode);
+ eventBus._on("switchannotationeditormode", webViewerSwitchAnnotationEditorMode); + + eventBus._on("switchannotationeditorparams", webViewerSwitchAnnotationEditorParams); + eventBus._on("print", webViewerPrint);
eventBus._on("download", webViewerDownload);
- eventBus._on("save", webViewerSave); - eventBus._on("firstpage", webViewerFirstPage);
eventBus._on("lastpage", webViewerLastPage); @@ -1881,6 +1913,8 @@ const PDFViewerApplication = {
eventBus._on("pagechanging", _boundEvents.reportPageStatsPDFBug); } + + eventBus._on("annotationeditorstateschanged", webViewerAnnotationEditorStatesChanged); },
bindWindowEvents() { @@ -2067,7 +2101,7 @@ function webViewerPageRendered({ PDFViewerApplication.toolbar.updateLoadingIndicatorState(false); }
- if (PDFViewerApplication.pdfSidebar.isThumbnailViewVisible) { + if (PDFViewerApplication.pdfSidebar.visibleView === _ui_utils.SidebarView.THUMBS) { const pageView = PDFViewerApplication.pdfViewer.getPageView(pageNumber - 1); const thumbnailView = PDFViewerApplication.pdfThumbnailViewer.getThumbnail(pageNumber - 1);
@@ -2138,7 +2172,7 @@ function webViewerNamedAction(evt) { break;
case "SaveAs": - webViewerSave(); + PDFViewerApplication.downloadOrSave(); break; } } @@ -2147,17 +2181,19 @@ function webViewerPresentationModeChanged(evt) { PDFViewerApplication.pdfViewer.presentationModeState = evt.state; }
-function webViewerSidebarViewChanged(evt) { - PDFViewerApplication.pdfRenderingQueue.isThumbnailViewEnabled = PDFViewerApplication.pdfSidebar.isThumbnailViewVisible; +function webViewerSidebarViewChanged({ + view +}) { + PDFViewerApplication.pdfRenderingQueue.isThumbnailViewEnabled = view === _ui_utils.SidebarView.THUMBS;
if (PDFViewerApplication.isInitialViewSet) { - PDFViewerApplication.store?.set("sidebarView", evt.view).catch(() => {}); + PDFViewerApplication.store?.set("sidebarView", view).catch(() => {}); } }
-function webViewerUpdateViewarea(evt) { - const location = evt.location; - +function webViewerUpdateViewarea({ + location +}) { if (PDFViewerApplication.isInitialViewSet) { PDFViewerApplication.store?.setMultiple({ page: location.pageNumber, @@ -2228,20 +2264,20 @@ function webViewerPresentationMode() { PDFViewerApplication.requestPresentationMode(); }
+function webViewerSwitchAnnotationEditorMode(evt) { + PDFViewerApplication.pdfViewer.annotationEditorMode = evt.mode; +} + +function webViewerSwitchAnnotationEditorParams(evt) { + PDFViewerApplication.pdfViewer.annotationEditorParams = evt; +} + function webViewerPrint() { PDFViewerApplication.triggerPrinting(); }
function webViewerDownload() { - PDFViewerApplication.downloadOrSave({ - sourceEventType: "download" - }); -} - -function webViewerSave() { - PDFViewerApplication.downloadOrSave({ - sourceEventType: "save" - }); + PDFViewerApplication.downloadOrSave(); }
function webViewerFirstPage() { @@ -2376,7 +2412,7 @@ function webViewerPageChanging({ PDFViewerApplication.toolbar.setPageNumber(pageNumber, pageLabel); PDFViewerApplication.secondaryToolbar.setPageNumber(pageNumber);
- if (PDFViewerApplication.pdfSidebar.isThumbnailViewVisible) { + if (PDFViewerApplication.pdfSidebar.visibleView === _ui_utils.SidebarView.THUMBS) { PDFViewerApplication.pdfThumbnailViewer.scrollThumbnailIntoView(pageNumber); } } @@ -2757,6 +2793,10 @@ function beforeUnload(evt) { return false; }
+function webViewerAnnotationEditorStatesChanged(data) { + PDFViewerApplication.externalServices.updateEditorStates(data); +} + const PDFPrintServiceFactory = { instance: { supportsPrinting: false, @@ -2771,7 +2811,7 @@ exports.PDFPrintServiceFactory = PDFPrintServiceFactory;
/***/ }), /* 3 */ -/***/ ((__unused_webpack_module, exports) => { +/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
@@ -2783,7 +2823,7 @@ exports.apiPageLayoutToViewerModes = apiPageLayoutToViewerModes; exports.apiPageModeToSidebarView = apiPageModeToSidebarView; exports.approximateFraction = approximateFraction; exports.backtrackBeforeAllVisibleElements = backtrackBeforeAllVisibleElements; -exports.binarySearchFirstItem = binarySearchFirstItem; +exports.docStyle = void 0; exports.getActiveOrFocusedElement = getActiveOrFocusedElement; exports.getPageSizeInches = getPageSizeInches; exports.getVisibleElements = getVisibleElements; @@ -2799,6 +2839,9 @@ exports.removeNullCharacters = removeNullCharacters; exports.roundToDivide = roundToDivide; exports.scrollIntoView = scrollIntoView; exports.watchScroll = watchScroll; + +var _pdfjsLib = __webpack_require__(4); + const DEFAULT_SCALE_VALUE = "auto"; exports.DEFAULT_SCALE_VALUE = DEFAULT_SCALE_VALUE; const DEFAULT_SCALE = 1.0; @@ -2817,7 +2860,6 @@ const SCROLLBAR_PADDING = 40; exports.SCROLLBAR_PADDING = SCROLLBAR_PADDING; const VERTICAL_PADDING = 5; exports.VERTICAL_PADDING = VERTICAL_PADDING; -const LOADINGBAR_END_OFFSET_VAR = "--loadingBar-end-offset"; const RenderingStates = { INITIAL: 0, RUNNING: 1, @@ -2841,10 +2883,7 @@ const SidebarView = { LAYERS: 4 }; exports.SidebarView = SidebarView; -const RendererType = { - CANVAS: "canvas", - SVG: "svg" -}; +const RendererType = null; exports.RendererType = RendererType; const TextLayerMode = { DISABLE: 0, @@ -2986,32 +3025,6 @@ function removeNullCharacters(str, replaceInvisible = false) { return str.replace(NullCharactersRegExp, ""); }
-function binarySearchFirstItem(items, condition, start = 0) { - let minIndex = start; - let maxIndex = items.length - 1; - - if (maxIndex < 0 || !condition(items[maxIndex])) { - return items.length; - } - - if (condition(items[minIndex])) { - return minIndex; - } - - while (minIndex < maxIndex) { - const currentIndex = minIndex + maxIndex >> 1; - const currentItem = items[currentIndex]; - - if (condition(currentItem)) { - maxIndex = currentIndex; - } else { - minIndex = currentIndex + 1; - } - } - - return minIndex; -} - function approximateFraction(x) { if (Math.floor(x) === x) { return [x, 1]; @@ -3134,7 +3147,7 @@ function getVisibleElements({ const visible = [], ids = new Set(), numViews = views.length; - let firstVisibleElementInd = binarySearchFirstItem(views, horizontal ? isElementNextAfterViewHorizontally : isElementBottomAfterViewTop); + let firstVisibleElementInd = (0, _pdfjsLib.binarySearchFirstItem)(views, horizontal ? isElementNextAfterViewHorizontally : isElementBottomAfterViewTop);
if (firstVisibleElementInd > 0 && firstVisibleElementInd < numViews && !horizontal) { firstVisibleElementInd = backtrackBeforeAllVisibleElements(firstVisibleElementInd, views, top); @@ -3181,7 +3194,7 @@ function getVisibleElements({ }
const first = visible[0], - last = visible[visible.length - 1]; + last = visible.at(-1);
if (sortByVisibility) { visible.sort(function (a, b) { @@ -3254,48 +3267,37 @@ const animationStarted = new Promise(function (resolve) { window.requestAnimationFrame(resolve); }); exports.animationStarted = animationStarted; +const docStyle = document.documentElement.style; +exports.docStyle = docStyle;
function clamp(v, min, max) { return Math.min(Math.max(v, min), max); }
class ProgressBar { - constructor(id, { - height, - width, - units - } = {}) { - this.visible = true; - this.div = document.querySelector(id + " .progress"); - this.bar = this.div.parentNode; - this.height = height || 100; - this.width = width || 100; - this.units = units || "%"; - this.div.style.height = this.height + this.units; - this.percent = 0; - } - - _updateBar() { - if (this._indeterminate) { - this.div.classList.add("indeterminate"); - this.div.style.width = this.width + this.units; - return; - } + #classList = null; + #percent = 0; + #visible = true;
- this.div.classList.remove("indeterminate"); - const progressSize = this.width * this._percent / 100; - this.div.style.width = progressSize + this.units; + constructor(id) { + const bar = document.getElementById(id); + this.#classList = bar.classList; }
get percent() { - return this._percent; + return this.#percent; }
set percent(val) { - this._indeterminate = isNaN(val); - this._percent = clamp(val, 0, 100); + this.#percent = clamp(val, 0, 100); + + if (isNaN(val)) { + this.#classList.add("indeterminate"); + return; + }
- this._updateBar(); + this.#classList.remove("indeterminate"); + docStyle.setProperty("--progressBar-percent", `${this.#percent}%`); }
setWidth(viewer) { @@ -3307,27 +3309,26 @@ class ProgressBar { const scrollbarWidth = container.offsetWidth - viewer.offsetWidth;
if (scrollbarWidth > 0) { - const doc = document.documentElement; - doc.style.setProperty(LOADINGBAR_END_OFFSET_VAR, `${scrollbarWidth}px`); + docStyle.setProperty("--progressBar-end-offset", `${scrollbarWidth}px`); } }
hide() { - if (!this.visible) { + if (!this.#visible) { return; }
- this.visible = false; - this.bar.classList.add("hidden"); + this.#visible = false; + this.#classList.add("hidden"); }
show() { - if (this.visible) { + if (this.#visible) { return; }
- this.visible = true; - this.bar.classList.remove("hidden"); + this.#visible = true; + this.#classList.remove("hidden"); }
} @@ -3402,6 +3403,22 @@ function apiPageModeToSidebarView(mode) {
/***/ }), /* 4 */ +/***/ ((module) => { + + + +let pdfjsLib; + +if (typeof window !== "undefined" && window["pdfjs-dist/build/pdf"]) { + pdfjsLib = window["pdfjs-dist/build/pdf"]; +} else { + pdfjsLib = require("../build/pdf.js"); +} + +module.exports = pdfjsLib; + +/***/ }), +/* 5 */ /***/ ((__unused_webpack_module, exports) => {
@@ -3566,22 +3583,6 @@ class AutomationEventBus extends EventBus {
exports.AutomationEventBus = AutomationEventBus;
-/***/ }), -/* 5 */ -/***/ ((module) => { - - - -let pdfjsLib; - -if (typeof window !== "undefined" && window["pdfjs-dist/build/pdf"]) { - pdfjsLib = window["pdfjs-dist/build/pdf"]; -} else { - pdfjsLib = require("../build/pdf.js"); -} - -module.exports = pdfjsLib; - /***/ }), /* 6 */ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { @@ -3826,7 +3827,7 @@ class GrabToPan { }
if (!this.overlay.parentNode) { - document.body.appendChild(this.overlay); + document.body.append(this.overlay); } }
@@ -4376,6 +4377,87 @@ exports.SimpleLinkService = SimpleLinkService;
/***/ }), /* 9 */ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.AnnotationEditorParams = void 0; + +var _pdfjsLib = __webpack_require__(4); + +class AnnotationEditorParams { + constructor(options, eventBus) { + this.eventBus = eventBus; + this.#bindListeners(options); + } + + #bindListeners({ + editorFreeTextFontSize, + editorFreeTextColor, + editorInkColor, + editorInkThickness + }) { + editorFreeTextFontSize.addEventListener("input", evt => { + this.eventBus.dispatch("switchannotationeditorparams", { + source: this, + type: _pdfjsLib.AnnotationEditorParamsType.FREETEXT_SIZE, + value: editorFreeTextFontSize.valueAsNumber + }); + }); + editorFreeTextColor.addEventListener("input", evt => { + this.eventBus.dispatch("switchannotationeditorparams", { + source: this, + type: _pdfjsLib.AnnotationEditorParamsType.FREETEXT_COLOR, + value: editorFreeTextColor.value + }); + }); + editorInkColor.addEventListener("input", evt => { + this.eventBus.dispatch("switchannotationeditorparams", { + source: this, + type: _pdfjsLib.AnnotationEditorParamsType.INK_COLOR, + value: editorInkColor.value + }); + }); + editorInkThickness.addEventListener("input", evt => { + this.eventBus.dispatch("switchannotationeditorparams", { + source: this, + type: _pdfjsLib.AnnotationEditorParamsType.INK_THICKNESS, + value: editorInkThickness.valueAsNumber + }); + }); + + this.eventBus._on("annotationeditorparamschanged", evt => { + for (const [type, value] of evt.details) { + switch (type) { + case _pdfjsLib.AnnotationEditorParamsType.FREETEXT_SIZE: + editorFreeTextFontSize.value = value; + break; + + case _pdfjsLib.AnnotationEditorParamsType.FREETEXT_COLOR: + editorFreeTextColor.value = value; + break; + + case _pdfjsLib.AnnotationEditorParamsType.INK_COLOR: + editorInkColor.value = value; + break; + + case _pdfjsLib.AnnotationEditorParamsType.INK_THICKNESS: + editorInkThickness.value = value; + break; + } + } + }); + } + +} + +exports.AnnotationEditorParams = AnnotationEditorParams; + +/***/ }), +/* 10 */ /***/ ((__unused_webpack_module, exports) => {
@@ -4453,7 +4535,7 @@ class OverlayManager { exports.OverlayManager = OverlayManager;
/***/ }), -/* 10 */ +/* 11 */ /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
@@ -4463,7 +4545,7 @@ Object.defineProperty(exports, "__esModule", ({ })); exports.PasswordPrompt = void 0;
-var _pdfjsLib = __webpack_require__(5); +var _pdfjsLib = __webpack_require__(4);
class PasswordPrompt { #updateCallback = null; @@ -4539,7 +4621,7 @@ class PasswordPrompt { exports.PasswordPrompt = PasswordPrompt;
/***/ }), -/* 11 */ +/* 12 */ /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
@@ -4549,11 +4631,11 @@ Object.defineProperty(exports, "__esModule", ({ })); exports.PDFAttachmentViewer = void 0;
-var _pdfjsLib = __webpack_require__(5); +var _pdfjsLib = __webpack_require__(4);
-var _base_tree_viewer = __webpack_require__(12); +var _base_tree_viewer = __webpack_require__(13);
-var _event_utils = __webpack_require__(4); +var _event_utils = __webpack_require__(5);
class PDFAttachmentViewer extends _base_tree_viewer.BaseTreeViewer { constructor(options) { @@ -4643,8 +4725,8 @@ class PDFAttachmentViewer extends _base_tree_viewer.BaseTreeViewer { });
element.textContent = this._normalizeTextContent(filename); - div.appendChild(element); - fragment.appendChild(div); + div.append(element); + fragment.append(div); attachmentsCount++; }
@@ -4685,7 +4767,7 @@ class PDFAttachmentViewer extends _base_tree_viewer.BaseTreeViewer { exports.PDFAttachmentViewer = PDFAttachmentViewer;
/***/ }), -/* 12 */ +/* 13 */ /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
@@ -4750,7 +4832,7 @@ class BaseTreeViewer { } };
- div.insertBefore(toggler, div.firstChild); + div.prepend(toggler); }
_toggleTreeItem(root, show = false) { @@ -4771,7 +4853,7 @@ class BaseTreeViewer { this._lastToggleIsShow = !fragment.querySelector(".treeItemsHidden"); }
- this.container.appendChild(fragment); + this.container.append(fragment);
this._dispatchEvent(count); } @@ -4819,7 +4901,7 @@ class BaseTreeViewer { exports.BaseTreeViewer = BaseTreeViewer;
/***/ }), -/* 13 */ +/* 14 */ /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
@@ -4829,7 +4911,7 @@ Object.defineProperty(exports, "__esModule", ({ })); exports.PDFDocumentProperties = void 0;
-var _pdfjsLib = __webpack_require__(5); +var _pdfjsLib = __webpack_require__(4);
var _ui_utils = __webpack_require__(3);
@@ -4857,11 +4939,12 @@ class PDFDocumentProperties { dialog, fields, closeButton - }, overlayManager, eventBus, l10n) { + }, overlayManager, eventBus, l10n, fileNameLookup) { this.dialog = dialog; this.fields = fields; this.overlayManager = overlayManager; this.l10n = l10n; + this._fileNameLookup = fileNameLookup; this.#reset(); closeButton.addEventListener("click", this.close.bind(this)); this.overlayManager.register(this.dialog); @@ -4892,10 +4975,9 @@ class PDFDocumentProperties {
const { info, - contentDispositionFilename, contentLength } = await this.pdfDocument.getMetadata(); - const [fileName, fileSize, creationDate, modificationDate, pageSize, isLinearized] = await Promise.all([contentDispositionFilename || (0, _pdfjsLib.getPdfFilenameFromUrl)(this.url), this.#parseFileSize(contentLength), this.#parseDate(info.CreationDate), this.#parseDate(info.ModDate), this.pdfDocument.getPage(currentPageNumber).then(pdfPage => { + const [fileName, fileSize, creationDate, modificationDate, pageSize, isLinearized] = await Promise.all([this._fileNameLookup(), this.#parseFileSize(contentLength), this.#parseDate(info.CreationDate), this.#parseDate(info.ModDate), this.pdfDocument.getPage(currentPageNumber).then(pdfPage => { return this.#parsePageSize((0, _ui_utils.getPageSizeInches)(pdfPage), pagesRotation); }), this.#parseLinearization(info.IsLinearized)]); this.#fieldData = Object.freeze({ @@ -4935,7 +5017,7 @@ class PDFDocumentProperties { this.overlayManager.close(this.dialog); }
- setDocument(pdfDocument, url = null) { + setDocument(pdfDocument) { if (this.pdfDocument) { this.#reset(); this.#updateUI(true); @@ -4946,14 +5028,12 @@ class PDFDocumentProperties { }
this.pdfDocument = pdfDocument; - this.url = url;
this._dataAvailableCapability.resolve(); }
#reset() { this.pdfDocument = null; - this.url = null; this.#fieldData = null; this._dataAvailableCapability = (0, _pdfjsLib.createPromiseCapability)(); this._currentPageNumber = 1; @@ -5075,7 +5155,7 @@ class PDFDocumentProperties { exports.PDFDocumentProperties = PDFDocumentProperties;
/***/ }), -/* 14 */ +/* 15 */ /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
@@ -5085,7 +5165,7 @@ Object.defineProperty(exports, "__esModule", ({ })); exports.PDFFindBar = void 0;
-var _pdf_find_controller = __webpack_require__(15); +var _pdf_find_controller = __webpack_require__(16);
const MATCHES_COUNT_LIMIT = 1000;
@@ -5280,7 +5360,7 @@ class PDFFindBar { exports.PDFFindBar = PDFFindBar;
/***/ }), -/* 15 */ +/* 16 */ /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
@@ -5290,11 +5370,11 @@ Object.defineProperty(exports, "__esModule", ({ })); exports.PDFFindController = exports.FindState = void 0;
-var _ui_utils = __webpack_require__(3); +var _pdfjsLib = __webpack_require__(4);
-var _pdfjsLib = __webpack_require__(5); +var _pdf_find_utils = __webpack_require__(17);
-var _pdf_find_utils = __webpack_require__(16); +var _ui_utils = __webpack_require__(3);
const FindState = { FOUND: 0, @@ -5326,16 +5406,51 @@ const DIACRITICS_REG_EXP = /\p{M}+/gu; const SPECIAL_CHARS_REG_EXP = /([.*+?^${}()|[]\])|(\p{P})|(\s+)|(\p{M})|(\p{L})/gu; const NOT_DIACRITIC_FROM_END_REG_EXP = /([^\p{M}])\p{M}*$/u; const NOT_DIACRITIC_FROM_START_REG_EXP = /^\p{M}*([^\p{M}])/u; -let normalizationRegex = null; +const SYLLABLES_REG_EXP = /[\uAC00-\uD7AF\uFA6C\uFACF-\uFAD1\uFAD5-\uFAD7]+/g; +const SYLLABLES_LENGTHS = new Map(); +const FIRST_CHAR_SYLLABLES_REG_EXP = "[\u1100-\u1112\ud7a4-\ud7af\ud84a\ud84c\ud850\ud854\ud857\ud85f]"; +let noSyllablesRegExp = null; +let withSyllablesRegExp = null;
function normalize(text) { - if (!normalizationRegex) { + const syllablePositions = []; + let m; + + while ((m = SYLLABLES_REG_EXP.exec(text)) !== null) { + let { + index + } = m; + + for (const char of m[0]) { + let len = SYLLABLES_LENGTHS.get(char); + + if (!len) { + len = char.normalize("NFD").length; + SYLLABLES_LENGTHS.set(char, len); + } + + syllablePositions.push([len, index++]); + } + } + + let normalizationRegex; + + if (syllablePositions.length === 0 && noSyllablesRegExp) { + normalizationRegex = noSyllablesRegExp; + } else if (syllablePositions.length > 0 && withSyllablesRegExp) { + normalizationRegex = withSyllablesRegExp; + } else { const replace = Object.keys(CHARACTERS_TO_NORMALIZE).join(""); - normalizationRegex = new RegExp(`([${replace}])|(\p{M}+(?:-\n)?)|(\S-\n)|(\n)`, "gum"); + const regexp = `([${replace}])|(\p{M}+(?:-\n)?)|(\S-\n)|(\n)`; + + if (syllablePositions.length === 0) { + normalizationRegex = noSyllablesRegExp = new RegExp(regexp + "|(\u0000)", "gum"); + } else { + normalizationRegex = withSyllablesRegExp = new RegExp(regexp + `|(${FIRST_CHAR_SYLLABLES_REG_EXP})`, "gum"); + } }
const rawDiacriticsPositions = []; - let m;
while ((m = DIACRITICS_REG_EXP.exec(text)) !== null) { rawDiacriticsPositions.push([m[0].length, m.index]); @@ -5343,12 +5458,13 @@ function normalize(text) {
let normalized = text.normalize("NFD"); const positions = [[0, 0]]; - let k = 0; + let rawDiacriticsIndex = 0; + let syllableIndex = 0; let shift = 0; let shiftOrigin = 0; let eol = 0; let hasDiacritics = false; - normalized = normalized.replace(normalizationRegex, (match, p1, p2, p3, p4, i) => { + normalized = normalized.replace(normalizationRegex, (match, p1, p2, p3, p4, p5, i) => { i -= shiftOrigin;
if (p1) { @@ -5369,12 +5485,12 @@ function normalize(text) { hasDiacritics = true; let jj = len;
- if (i + eol === rawDiacriticsPositions[k]?.[1]) { - jj -= rawDiacriticsPositions[k][0]; - ++k; + if (i + eol === rawDiacriticsPositions[rawDiacriticsIndex]?.[1]) { + jj -= rawDiacriticsPositions[rawDiacriticsIndex][0]; + ++rawDiacriticsIndex; }
- for (let j = 1; j < jj + 1; j++) { + for (let j = 1; j <= jj; j++) { positions.push([i - 1 - shift + j, shift - j]); }
@@ -5401,11 +5517,27 @@ function normalize(text) { return p3.charAt(0); }
- positions.push([i - shift + 1, shift - 1]); - shift -= 1; - shiftOrigin += 1; - eol += 1; - return " "; + if (p4) { + positions.push([i - shift + 1, shift - 1]); + shift -= 1; + shiftOrigin += 1; + eol += 1; + return " "; + } + + if (i + eol === syllablePositions[syllableIndex]?.[1]) { + const newCharLen = syllablePositions[syllableIndex][0] - 1; + ++syllableIndex; + + for (let j = 1; j <= newCharLen; j++) { + positions.push([i - (shift - j), shift - j]); + } + + shift -= newCharLen; + shiftOrigin += newCharLen; + } + + return p5; }); positions.push([normalized.length, shift]); return [normalized, positions, hasDiacritics]; @@ -5418,13 +5550,13 @@ function getOriginalIndex(diffs, pos, len) {
const start = pos; const end = pos + len; - let i = (0, _ui_utils.binarySearchFirstItem)(diffs, x => x[0] >= start); + let i = (0, _pdfjsLib.binarySearchFirstItem)(diffs, x => x[0] >= start);
if (diffs[i][0] > start) { --i; }
- let j = (0, _ui_utils.binarySearchFirstItem)(diffs, x => x[0] >= end, i); + let j = (0, _pdfjsLib.binarySearchFirstItem)(diffs, x => x[0] >= end, i);
if (diffs[j][0] > end) { --j; @@ -6042,7 +6174,7 @@ class PDFFindController { exports.PDFFindController = PDFFindController;
/***/ }), -/* 16 */ +/* 17 */ /***/ ((__unused_webpack_module, exports) => {
@@ -6137,7 +6269,7 @@ function getCharacterType(charCode) { }
/***/ }), -/* 17 */ +/* 18 */ /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
@@ -6151,7 +6283,7 @@ exports.isDestHashesEqual = isDestHashesEqual;
var _ui_utils = __webpack_require__(3);
-var _event_utils = __webpack_require__(4); +var _event_utils = __webpack_require__(5);
const HASH_CHANGE_TIMEOUT = 1000; const POSITION_UPDATED_THRESHOLD = 50; @@ -6746,7 +6878,7 @@ function isDestArraysEqual(firstDest, secondDest) { }
/***/ }), -/* 18 */ +/* 19 */ /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
@@ -6756,7 +6888,7 @@ Object.defineProperty(exports, "__esModule", ({ })); exports.PDFLayerViewer = void 0;
-var _base_tree_viewer = __webpack_require__(12); +var _base_tree_viewer = __webpack_require__(13);
class PDFLayerViewer extends _base_tree_viewer.BaseTreeViewer { constructor(options) { @@ -6866,7 +6998,7 @@ class PDFLayerViewer extends _base_tree_viewer.BaseTreeViewer { const div = document.createElement("div"); div.className = "treeItem"; const element = document.createElement("a"); - div.appendChild(element); + div.append(element);
if (typeof groupId === "object") { hasAnyNesting = true; @@ -6877,7 +7009,7 @@ class PDFLayerViewer extends _base_tree_viewer.BaseTreeViewer {
const itemsDiv = document.createElement("div"); itemsDiv.className = "treeItems"; - div.appendChild(itemsDiv); + div.append(itemsDiv); queue.push({ parent: itemsDiv, groups: groupId.order @@ -6892,17 +7024,15 @@ class PDFLayerViewer extends _base_tree_viewer.BaseTreeViewer { });
input.type = "checkbox"; - input.id = groupId; input.checked = group.visible; const label = document.createElement("label"); - label.setAttribute("for", groupId); label.textContent = this._normalizeTextContent(group.name); - element.appendChild(input); - element.appendChild(label); + label.append(input); + element.append(label); layersCount++; }
- levelData.parent.appendChild(div); + levelData.parent.append(div); } }
@@ -6930,7 +7060,7 @@ class PDFLayerViewer extends _base_tree_viewer.BaseTreeViewer { exports.PDFLayerViewer = PDFLayerViewer;
/***/ }), -/* 19 */ +/* 20 */ /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
@@ -6940,9 +7070,9 @@ Object.defineProperty(exports, "__esModule", ({ })); exports.PDFOutlineViewer = void 0;
-var _base_tree_viewer = __webpack_require__(12); +var _base_tree_viewer = __webpack_require__(13);
-var _pdfjsLib = __webpack_require__(5); +var _pdfjsLib = __webpack_require__(4);
var _ui_utils = __webpack_require__(3);
@@ -7121,7 +7251,7 @@ class PDFOutlineViewer extends _base_tree_viewer.BaseTreeViewer { this._setStyles(element, item);
element.textContent = this._normalizeTextContent(item.title); - div.appendChild(element); + div.append(element);
if (item.items.length > 0) { hasAnyNesting = true; @@ -7130,14 +7260,14 @@ class PDFOutlineViewer extends _base_tree_viewer.BaseTreeViewer {
const itemsDiv = document.createElement("div"); itemsDiv.className = "treeItems"; - div.appendChild(itemsDiv); + div.append(itemsDiv); queue.push({ parent: itemsDiv, items: item.items }); }
- levelData.parent.appendChild(div); + levelData.parent.append(div); outlineCount++; } } @@ -7265,7 +7395,7 @@ class PDFOutlineViewer extends _base_tree_viewer.BaseTreeViewer { exports.PDFOutlineViewer = PDFOutlineViewer;
/***/ }), -/* 20 */ +/* 21 */ /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
@@ -7277,6 +7407,8 @@ exports.PDFPresentationMode = void 0;
var _ui_utils = __webpack_require__(3);
+var _pdfjsLib = __webpack_require__(4); + const DELAY_BEFORE_HIDING_CONTROLS = 3000; const ACTIVE_SELECTOR = "pdfPresentationMode"; const CONTROLS_SELECTOR = "pdfPresentationModeControls"; @@ -7320,7 +7452,8 @@ class PDFPresentationMode { pageNumber: pdfViewer.currentPageNumber, scaleValue: pdfViewer.currentScaleValue, scrollMode: pdfViewer.scrollMode, - spreadMode: null + spreadMode: null, + annotationEditorMode: null };
if (pdfViewer.spreadMode !== _ui_utils.SpreadMode.NONE && !(pdfViewer.pageViewsReady && pdfViewer.hasEqualPageSizes)) { @@ -7328,6 +7461,10 @@ class PDFPresentationMode { this.#args.spreadMode = pdfViewer.spreadMode; }
+ if (pdfViewer.annotationEditorMode !== _pdfjsLib.AnnotationEditorType.DISABLE) { + this.#args.annotationEditorMode = pdfViewer.annotationEditorMode; + } + try { await promise; return true; @@ -7394,6 +7531,10 @@ class PDFPresentationMode {
this.pdfViewer.currentPageNumber = this.#args.pageNumber; this.pdfViewer.currentScaleValue = "page-fit"; + + if (this.#args.annotationEditorMode !== null) { + this.pdfViewer.annotationEditorMode = _pdfjsLib.AnnotationEditorType.NONE; + } }, 0); this.#addWindowListeners(); this.#showControls(); @@ -7415,6 +7556,11 @@ class PDFPresentationMode {
this.pdfViewer.currentScaleValue = this.#args.scaleValue; this.pdfViewer.currentPageNumber = pageNumber; + + if (this.#args.annotationEditorMode !== null) { + this.pdfViewer.annotationEditorMode = this.#args.annotationEditorMode; + } + this.#args = null; }, 0); this.#removeWindowListeners(); @@ -7594,7 +7740,7 @@ class PDFPresentationMode { exports.PDFPresentationMode = PDFPresentationMode;
/***/ }), -/* 21 */ +/* 22 */ /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
@@ -7604,7 +7750,7 @@ Object.defineProperty(exports, "__esModule", ({ })); exports.PDFRenderingQueue = void 0;
-var _pdfjsLib = __webpack_require__(5); +var _pdfjsLib = __webpack_require__(4);
var _ui_utils = __webpack_require__(3);
@@ -7756,7 +7902,7 @@ class PDFRenderingQueue { exports.PDFRenderingQueue = PDFRenderingQueue;
/***/ }), -/* 22 */ +/* 23 */ /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
@@ -7768,7 +7914,7 @@ exports.PDFScriptingManager = void 0;
var _ui_utils = __webpack_require__(3);
-var _pdfjsLib = __webpack_require__(5); +var _pdfjsLib = __webpack_require__(4);
class PDFScriptingManager { constructor({ @@ -8038,7 +8184,7 @@ class PDFScriptingManager { break;
case "SaveAs": - this._eventBus.dispatch("save", { + this._eventBus.dispatch("download", { source: this });
@@ -8095,7 +8241,7 @@ class PDFScriptingManager { const ids = siblings ? [id, ...siblings] : [id];
for (const elementId of ids) { - const element = document.getElementById(elementId); + const element = document.querySelector(`[data-element-id="${elementId}"]`);
if (element) { element.dispatchEvent(new CustomEvent("updatefromsandbox", { @@ -8250,7 +8396,7 @@ class PDFScriptingManager { exports.PDFScriptingManager = PDFScriptingManager;
/***/ }), -/* 23 */ +/* 24 */ /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
@@ -8275,6 +8421,7 @@ class PDFSidebar { this.isOpen = false; this.active = _ui_utils.SidebarView.THUMBS; this.isInitialViewSet = false; + this.isInitialEventDispatched = false; this.onToggled = null; this.pdfViewer = pdfViewer; this.pdfThumbnailViewer = pdfThumbnailViewer; @@ -8293,15 +8440,13 @@ class PDFSidebar { this._currentOutlineItemButton = elements.currentOutlineItemButton; this.eventBus = eventBus; this.l10n = l10n; - - this._addEventListeners(); + this.#addEventListeners(); }
reset() { this.isInitialViewSet = false; - - this._hideUINotification(true); - + this.isInitialEventDispatched = false; + this.#hideUINotification(true); this.switchView(_ui_utils.SidebarView.THUMBS); this.outlineButton.disabled = false; this.attachmentsButton.disabled = false; @@ -8313,22 +8458,6 @@ class PDFSidebar { return this.isOpen ? this.active : _ui_utils.SidebarView.NONE; }
- get isThumbnailViewVisible() { - return this.isOpen && this.active === _ui_utils.SidebarView.THUMBS; - } - - get isOutlineViewVisible() { - return this.isOpen && this.active === _ui_utils.SidebarView.OUTLINE; - } - - get isAttachmentsViewVisible() { - return this.isOpen && this.active === _ui_utils.SidebarView.ATTACHMENTS; - } - - get isLayersViewVisible() { - return this.isOpen && this.active === _ui_utils.SidebarView.LAYERS; - } - setInitialView(view = _ui_utils.SidebarView.NONE) { if (this.isInitialViewSet) { return; @@ -8337,21 +8466,18 @@ class PDFSidebar { this.isInitialViewSet = true;
if (view === _ui_utils.SidebarView.NONE || view === _ui_utils.SidebarView.UNKNOWN) { - this._dispatchEvent(); - + this.#dispatchEvent(); return; }
- if (!this._switchView(view, true)) { - this._dispatchEvent(); + this.switchView(view, true); + + if (!this.isInitialEventDispatched) { + this.#dispatchEvent(); } }
switchView(view, forceOpen = false) { - this._switchView(view, forceOpen); - } - - _switchView(view, forceOpen = false) { const isViewChanged = view !== this.active; let shouldForceRendering = false;
@@ -8359,10 +8485,9 @@ class PDFSidebar { case _ui_utils.SidebarView.NONE: if (this.isOpen) { this.close(); - return true; }
- return false; + return;
case _ui_utils.SidebarView.THUMBS: if (this.isOpen && isViewChanged) { @@ -8373,28 +8498,28 @@ class PDFSidebar {
case _ui_utils.SidebarView.OUTLINE: if (this.outlineButton.disabled) { - return false; + return; }
break;
case _ui_utils.SidebarView.ATTACHMENTS: if (this.attachmentsButton.disabled) { - return false; + return; }
break;
case _ui_utils.SidebarView.LAYERS: if (this.layersButton.disabled) { - return false; + return; }
break;
default: - console.error(`PDFSidebar._switchView: "${view}" is not a valid view.`); - return false; + console.error(`PDFSidebar.switchView: "${view}" is not a valid view.`); + return; }
this.active = view; @@ -8419,20 +8544,17 @@ class PDFSidebar {
if (forceOpen && !this.isOpen) { this.open(); - return true; + return; }
if (shouldForceRendering) { - this._updateThumbnailViewer(); - - this._forceRendering(); + this.#updateThumbnailViewer(); + this.#forceRendering(); }
if (isViewChanged) { - this._dispatchEvent(); + this.#dispatchEvent(); } - - return isViewChanged; }
open() { @@ -8446,14 +8568,12 @@ class PDFSidebar { this.outerContainer.classList.add("sidebarMoving", "sidebarOpen");
if (this.active === _ui_utils.SidebarView.THUMBS) { - this._updateThumbnailViewer(); + this.#updateThumbnailViewer(); }
- this._forceRendering(); - - this._dispatchEvent(); - - this._hideUINotification(); + this.#forceRendering(); + this.#dispatchEvent(); + this.#hideUINotification(); }
close() { @@ -8466,10 +8586,8 @@ class PDFSidebar { this.toggleButton.setAttribute("aria-expanded", "false"); this.outerContainer.classList.add("sidebarMoving"); this.outerContainer.classList.remove("sidebarOpen"); - - this._forceRendering(); - - this._dispatchEvent(); + this.#forceRendering(); + this.#dispatchEvent(); }
toggle() { @@ -8480,14 +8598,18 @@ class PDFSidebar { } }
- _dispatchEvent() { + #dispatchEvent() { + if (this.isInitialViewSet && !this.isInitialEventDispatched) { + this.isInitialEventDispatched = true; + } + this.eventBus.dispatch("sidebarviewchanged", { source: this, view: this.visibleView }); }
- _forceRendering() { + #forceRendering() { if (this.onToggled) { this.onToggled(); } else { @@ -8496,7 +8618,7 @@ class PDFSidebar { } }
- _updateThumbnailViewer() { + #updateThumbnailViewer() { const { pdfViewer, pdfThumbnailViewer @@ -8515,7 +8637,7 @@ class PDFSidebar { pdfThumbnailViewer.scrollThumbnailIntoView(pdfViewer.currentPageNumber); }
- _showUINotification() { + #showUINotification() { this.l10n.get("toggle_sidebar_notification2.title").then(msg => { this.toggleButton.title = msg; }); @@ -8525,7 +8647,7 @@ class PDFSidebar { } }
- _hideUINotification(reset = false) { + #hideUINotification(reset = false) { if (this.isOpen || reset) { this.toggleButton.classList.remove(UI_NOTIFICATION_CLASS); } @@ -8537,7 +8659,7 @@ class PDFSidebar { } }
- _addEventListeners() { + #addEventListeners() { this.sidebarContainer.addEventListener("transitionend", evt => { if (evt.target === this.sidebarContainer) { this.outerContainer.classList.remove("sidebarMoving"); @@ -8579,7 +8701,7 @@ class PDFSidebar { button.disabled = !count;
if (count) { - this._showUINotification(); + this.#showUINotification(); } else if (this.active === view) { this.switchView(_ui_utils.SidebarView.THUMBS); } @@ -8605,8 +8727,8 @@ class PDFSidebar { });
this.eventBus._on("presentationmodechanged", evt => { - if (evt.state === _ui_utils.PresentationModeState.NORMAL && this.isThumbnailViewVisible) { - this._updateThumbnailViewer(); + if (evt.state === _ui_utils.PresentationModeState.NORMAL && this.visibleView === _ui_utils.SidebarView.THUMBS) { + this.#updateThumbnailViewer(); } }); } @@ -8616,8 +8738,8 @@ class PDFSidebar { exports.PDFSidebar = PDFSidebar;
/***/ }), -/* 24 */ -/***/ ((__unused_webpack_module, exports) => { +/* 25 */ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
@@ -8625,6 +8747,9 @@ Object.defineProperty(exports, "__esModule", ({ value: true })); exports.PDFSidebarResizer = void 0; + +var _ui_utils = __webpack_require__(3); + const SIDEBAR_WIDTH_VAR = "--sidebar-width"; const SIDEBAR_MIN_WIDTH = 200; const SIDEBAR_RESIZING_CLASS = "sidebarResizing"; @@ -8633,7 +8758,6 @@ class PDFSidebarResizer { constructor(options, eventBus, l10n) { this.isRTL = false; this.sidebarOpen = false; - this.doc = document.documentElement; this._width = null; this._outerContainerWidth = null; this._boundEvents = Object.create(null); @@ -8667,7 +8791,9 @@ class PDFSidebarResizer { }
this._width = width; - this.doc.style.setProperty(SIDEBAR_WIDTH_VAR, `${width}px`); + + _ui_utils.docStyle.setProperty(SIDEBAR_WIDTH_VAR, `${width}px`); + return true; }
@@ -8747,7 +8873,7 @@ class PDFSidebarResizer { exports.PDFSidebarResizer = PDFSidebarResizer;
/***/ }), -/* 25 */ +/* 26 */ /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
@@ -8759,7 +8885,7 @@ exports.PDFThumbnailViewer = void 0;
var _ui_utils = __webpack_require__(3);
-var _pdf_thumbnail_view = __webpack_require__(26); +var _pdf_thumbnail_view = __webpack_require__(27);
const THUMBNAIL_SCROLL_MARGIN = -19; const THUMBNAIL_SELECTED_CLASS = "selected"; @@ -8770,12 +8896,14 @@ class PDFThumbnailViewer { eventBus, linkService, renderingQueue, - l10n + l10n, + pageColors }) { this.container = container; this.linkService = linkService; this.renderingQueue = renderingQueue; this.l10n = l10n; + this.pageColors = pageColors || null; this.scroll = (0, _ui_utils.watchScroll)(this.container, this._scrollUpdated.bind(this));
this._resetView(); @@ -8935,7 +9063,8 @@ class PDFThumbnailViewer { linkService: this.linkService, renderingQueue: this.renderingQueue, checkSetImageDisabled, - l10n: this.l10n + l10n: this.l10n, + pageColors: this.pageColors });
this._thumbnails.push(thumbnail); @@ -9029,7 +9158,7 @@ class PDFThumbnailViewer { exports.PDFThumbnailViewer = PDFThumbnailViewer;
/***/ }), -/* 26 */ +/* 27 */ /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
@@ -9041,7 +9170,7 @@ exports.TempImageFactory = exports.PDFThumbnailView = void 0;
var _ui_utils = __webpack_require__(3);
-var _pdfjsLib = __webpack_require__(5); +var _pdfjsLib = __webpack_require__(4);
const DRAW_UPSCALE_FACTOR = 2; const MAX_NUM_SCALING_STEPS = 3; @@ -9055,7 +9184,6 @@ class TempImageFactory { const tempCanvas = this.#tempCanvas ||= document.createElement("canvas"); tempCanvas.width = width; tempCanvas.height = height; - tempCanvas.mozOpaque = true; const ctx = tempCanvas.getContext("2d", { alpha: false }); @@ -9090,7 +9218,8 @@ class PDFThumbnailView { linkService, renderingQueue, checkSetImageDisabled, - l10n + l10n, + pageColors }) { this.id = id; this.renderingId = "thumbnail" + id; @@ -9100,6 +9229,7 @@ class PDFThumbnailView { this.viewport = defaultViewport; this.pdfPageRotate = defaultViewport.rotation; this._optionalContentConfigPromise = optionalContentConfigPromise || null; + this.pageColors = pageColors || null; this.linkService = linkService; this.renderingQueue = renderingQueue; this.renderTask = null; @@ -9140,9 +9270,9 @@ class PDFThumbnailView { ring.style.width = this.canvasWidth + borderAdjustment + "px"; ring.style.height = this.canvasHeight + borderAdjustment + "px"; this.ring = ring; - div.appendChild(ring); - anchor.appendChild(div); - container.appendChild(anchor); + div.append(ring); + anchor.append(div); + container.append(anchor); }
setPdfPage(pdfPage) { @@ -9209,7 +9339,6 @@ class PDFThumbnailView {
_getPageDrawContext(upscaleFactor = 1) { const canvas = document.createElement("canvas"); - canvas.mozOpaque = true; const ctx = canvas.getContext("2d", { alpha: false }); @@ -9243,7 +9372,7 @@ class PDFThumbnailView { image.src = reducedCanvas.toDataURL(); this.image = image; this.div.setAttribute("data-loaded", true); - this.ring.appendChild(image); + this.ring.append(image); reducedCanvas.width = 0; reducedCanvas.height = 0; } @@ -9312,7 +9441,8 @@ class PDFThumbnailView { canvasContext: ctx, transform, viewport: drawViewport, - optionalContentConfigPromise: this._optionalContentConfigPromise + optionalContentConfigPromise: this._optionalContentConfigPromise, + pageColors: this.pageColors }; const renderTask = this.renderTask = pdfPage.render(renderContext); renderTask.onContinue = renderContinueCallback; @@ -9425,7 +9555,7 @@ class PDFThumbnailView { exports.PDFThumbnailView = PDFThumbnailView;
/***/ }), -/* 27 */ +/* 28 */ /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
@@ -9437,7 +9567,7 @@ exports.PDFViewer = exports.PDFSinglePageViewer = void 0;
var _ui_utils = __webpack_require__(3);
-var _base_viewer = __webpack_require__(28); +var _base_viewer = __webpack_require__(29);
class PDFViewer extends _base_viewer.BaseViewer {}
@@ -9464,7 +9594,7 @@ class PDFSinglePageViewer extends _base_viewer.BaseViewer { exports.PDFSinglePageViewer = PDFSinglePageViewer;
/***/ }), -/* 28 */ +/* 29 */ /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
@@ -9474,27 +9604,31 @@ Object.defineProperty(exports, "__esModule", ({ })); exports.PagesCountLimit = exports.PDFPageViewBuffer = exports.BaseViewer = void 0;
-var _pdfjsLib = __webpack_require__(5); +var _pdfjsLib = __webpack_require__(4);
var _ui_utils = __webpack_require__(3);
-var _annotation_layer_builder = __webpack_require__(29); +var _annotation_editor_layer_builder = __webpack_require__(30);
-var _l10n_utils = __webpack_require__(30); +var _annotation_layer_builder = __webpack_require__(32); + +var _app_options = __webpack_require__(1);
-var _pdf_page_view = __webpack_require__(31); +var _l10n_utils = __webpack_require__(31);
-var _pdf_rendering_queue = __webpack_require__(21); +var _pdf_page_view = __webpack_require__(33); + +var _pdf_rendering_queue = __webpack_require__(22);
var _pdf_link_service = __webpack_require__(8);
-var _struct_tree_layer_builder = __webpack_require__(32); +var _struct_tree_layer_builder = __webpack_require__(34);
-var _text_highlighter = __webpack_require__(33); +var _text_highlighter = __webpack_require__(35);
-var _text_layer_builder = __webpack_require__(34); +var _text_layer_builder = __webpack_require__(36);
-var _xfa_layer_builder = __webpack_require__(35); +var _xfa_layer_builder = __webpack_require__(37);
const DEFAULT_CACHE_SIZE = 10; const ENABLE_PERMISSIONS_CLASS = "enablePermissions"; @@ -9504,6 +9638,11 @@ const PagesCountLimit = { PAUSE_EAGER_PAGE_INIT: 250 }; exports.PagesCountLimit = PagesCountLimit; +const ANNOTATION_EDITOR_MODE = _app_options.compatibilityParams.annotationEditorMode ?? _pdfjsLib.AnnotationEditorType.DISABLE; + +function isValidAnnotationEditorMode(mode) { + return Object.values(_pdfjsLib.AnnotationEditorType).includes(mode) && mode !== _pdfjsLib.AnnotationEditorType.DISABLE; +}
class PDFPageViewBuffer { #buf = new Set(); @@ -9572,8 +9711,9 @@ exports.PDFPageViewBuffer = PDFPageViewBuffer;
class BaseViewer { #buffer = null; + #annotationEditorMode = _pdfjsLib.AnnotationEditorType.DISABLE; + #annotationEditorUIManager = null; #annotationMode = _pdfjsLib.AnnotationMode.ENABLE_FORMS; - #previousAnnotationMode = null; #enablePermissions = false; #previousContainerHeight = 0; #scrollModePageState = null; @@ -9584,7 +9724,7 @@ class BaseViewer { throw new Error("Cannot initialize BaseViewer."); }
- const viewerVersion = '2.14.290'; + const viewerVersion = '2.15.305';
if (_pdfjsLib.version !== viewerVersion) { throw new Error(`The API version "${_pdfjsLib.version}" does not match the Viewer version "${viewerVersion}".`); @@ -9600,9 +9740,9 @@ class BaseViewer { this.removePageBorders = options.removePageBorders || false; this.textLayerMode = options.textLayerMode ?? _ui_utils.TextLayerMode.ENABLE; this.#annotationMode = options.annotationMode ?? _pdfjsLib.AnnotationMode.ENABLE_FORMS; + this.#annotationEditorMode = options.annotationEditorMode ?? ANNOTATION_EDITOR_MODE; this.imageResourcesPath = options.imageResourcesPath || ""; this.enablePrintAutoRotate = options.enablePrintAutoRotate || false; - this.renderer = options.renderer || _ui_utils.RendererType.CANVAS; this.useOnlyCssZoom = options.useOnlyCssZoom || false; this.maxCanvasPixels = options.maxCanvasPixels; this.l10n = options.l10n || _l10n_utils.NullL10n; @@ -9617,7 +9757,6 @@ class BaseViewer { this.renderingQueue = options.renderingQueue; }
- this._doc = document.documentElement; this.scroll = (0, _ui_utils.watchScroll)(this.container, this._scrollUpdate.bind(this)); this.presentationModeState = _ui_utils.PresentationModeState.UNKNOWN; this._onBeforeDraw = this._onAfterDraw = null; @@ -9629,11 +9768,6 @@ class BaseViewer { }
this.updateContainerHeightCss(); - Promise.resolve().then(() => { - this.eventBus.dispatch("baseviewerinit", { - source: this - }); - }); }
get pagesCount() { @@ -9822,20 +9956,29 @@ class BaseViewer { }
#initializePermissions(permissions) { + const params = { + annotationEditorMode: this.#annotationEditorMode, + annotationMode: this.#annotationMode, + textLayerMode: this.textLayerMode + }; + if (!permissions) { - return; + return params; }
if (!permissions.includes(_pdfjsLib.PermissionFlag.COPY)) { this.viewer.classList.add(ENABLE_PERMISSIONS_CLASS); }
- if (!permissions.includes(_pdfjsLib.PermissionFlag.MODIFY_ANNOTATIONS) && !permissions.includes(_pdfjsLib.PermissionFlag.FILL_INTERACTIVE_FORMS)) { - if (this.#annotationMode === _pdfjsLib.AnnotationMode.ENABLE_FORMS) { - this.#previousAnnotationMode = this.#annotationMode; - this.#annotationMode = _pdfjsLib.AnnotationMode.ENABLE; - } + if (!permissions.includes(_pdfjsLib.PermissionFlag.MODIFY_CONTENTS)) { + params.annotationEditorMode = _pdfjsLib.AnnotationEditorType.DISABLE; + } + + if (!permissions.includes(_pdfjsLib.PermissionFlag.MODIFY_ANNOTATIONS) && !permissions.includes(_pdfjsLib.PermissionFlag.FILL_INTERACTIVE_FORMS) && this.#annotationMode === _pdfjsLib.AnnotationMode.ENABLE_FORMS) { + params.annotationMode = _pdfjsLib.AnnotationMode.ENABLE; } + + return params; }
#onePageRenderedOrForceFetch() { @@ -9876,6 +10019,11 @@ class BaseViewer { if (this._scriptingManager) { this._scriptingManager.setDocument(null); } + + if (this.#annotationEditorUIManager) { + this.#annotationEditorUIManager.destroy(); + this.#annotationEditorUIManager = null; + } }
this.pdfDocument = pdfDocument; @@ -9947,15 +10095,41 @@ class BaseViewer { this._firstPageCapability.resolve(firstPdfPage);
this._optionalContentConfigPromise = optionalContentConfigPromise; - this.#initializePermissions(permissions); + const { + annotationEditorMode, + annotationMode, + textLayerMode + } = this.#initializePermissions(permissions); + + if (annotationEditorMode !== _pdfjsLib.AnnotationEditorType.DISABLE) { + const mode = annotationEditorMode; + + if (isPureXfa) { + console.warn("Warning: XFA-editing is not implemented."); + } else if (isValidAnnotationEditorMode(mode)) { + this.eventBus.dispatch("annotationeditormodechanged", { + source: this, + mode + }); + this.#annotationEditorUIManager = new _pdfjsLib.AnnotationEditorUIManager(this.container, this.eventBus); + + if (mode !== _pdfjsLib.AnnotationEditorType.NONE) { + this.#annotationEditorUIManager.updateMode(mode); + } + } else { + console.error(`Invalid AnnotationEditor mode: ${mode}`); + } + } + const viewerElement = this._scrollMode === _ui_utils.ScrollMode.PAGE ? null : this.viewer; const scale = this.currentScale; const viewport = firstPdfPage.getViewport({ scale: scale * _pdfjsLib.PixelsPerInch.PDF_TO_CSS_UNITS }); - const textLayerFactory = this.textLayerMode !== _ui_utils.TextLayerMode.DISABLE && !isPureXfa ? this : null; - const annotationLayerFactory = this.#annotationMode !== _pdfjsLib.AnnotationMode.DISABLE ? this : null; + const textLayerFactory = textLayerMode !== _ui_utils.TextLayerMode.DISABLE && !isPureXfa ? this : null; + const annotationLayerFactory = annotationMode !== _pdfjsLib.AnnotationMode.DISABLE ? this : null; const xfaLayerFactory = isPureXfa ? this : null; + const annotationEditorLayerFactory = this.#annotationEditorUIManager ? this : null;
for (let pageNum = 1; pageNum <= pagesCount; ++pageNum) { const pageView = new _pdf_page_view.PDFPageView({ @@ -9967,14 +10141,15 @@ class BaseViewer { optionalContentConfigPromise, renderingQueue: this.renderingQueue, textLayerFactory, - textLayerMode: this.textLayerMode, + textLayerMode, annotationLayerFactory, - annotationMode: this.#annotationMode, + annotationMode, xfaLayerFactory, + annotationEditorLayerFactory, textHighlighterFactory: this, structTreeLayerFactory: this, imageResourcesPath: this.imageResourcesPath, - renderer: this.renderer, + renderer: null, useOnlyCssZoom: this.useOnlyCssZoom, maxCanvasPixels: this.maxCanvasPixels, pageColors: this.pageColors, @@ -10135,11 +10310,6 @@ class BaseViewer {
this.viewer.removeAttribute("lang"); this.viewer.classList.remove(ENABLE_PERMISSIONS_CLASS); - - if (this.#previousAnnotationMode !== null) { - this.#annotationMode = this.#previousAnnotationMode; - this.#previousAnnotationMode = null; - } }
#ensurePageViewVisible() { @@ -10155,7 +10325,7 @@ class BaseViewer {
if (this._spreadMode === _ui_utils.SpreadMode.NONE && !this.isInPresentationMode) { const pageView = this._pages[pageNumber - 1]; - viewer.appendChild(pageView.div); + viewer.append(pageView.div); state.pages.push(pageView); } else { const pageIndexSet = new Set(), @@ -10177,7 +10347,7 @@ class BaseViewer { if (this.isInPresentationMode) { const dummyPage = document.createElement("div"); dummyPage.className = "dummyPage"; - spread.appendChild(dummyPage); + spread.append(dummyPage); }
for (const i of pageIndexSet) { @@ -10187,11 +10357,11 @@ class BaseViewer { continue; }
- spread.appendChild(pageView.div); + spread.append(pageView.div); state.pages.push(pageView); }
- viewer.appendChild(spread); + viewer.append(spread); }
state.scrollDown = pageNumber >= state.previousPageNumber; @@ -10257,7 +10427,7 @@ class BaseViewer { return; }
- this._doc.style.setProperty("--zoom-factor", newScale); + _ui_utils.docStyle.setProperty("--scale-factor", newScale * _pdfjsLib.PixelsPerInch.PDF_TO_CSS_UNITS);
const updateArgs = { scale: newScale @@ -10761,6 +10931,16 @@ class BaseViewer { }); }
+ createAnnotationEditorLayerBuilder(pageDiv, pdfPage, l10n, annotationStorage = null) { + return new _annotation_editor_layer_builder.AnnotationEditorLayerBuilder({ + uiManager: this.#annotationEditorUIManager, + pageDiv, + pdfPage, + annotationStorage: annotationStorage || this.pdfDocument?.annotationStorage, + l10n + }); + } + createXfaLayerBuilder(pageDiv, pdfPage, annotationStorage = null) { return new _xfa_layer_builder.XfaLayerBuilder({ pageDiv, @@ -10942,7 +11122,7 @@ class BaseViewer {
if (this._spreadMode === _ui_utils.SpreadMode.NONE) { for (const pageView of this._pages) { - viewer.appendChild(pageView.div); + viewer.append(pageView.div); } } else { const parity = this._spreadMode - 1; @@ -10952,13 +11132,13 @@ class BaseViewer { if (spread === null) { spread = document.createElement("div"); spread.className = "spread"; - viewer.appendChild(spread); + viewer.append(spread); } else if (i % 2 === parity) { spread = spread.cloneNode(false); - viewer.appendChild(spread); + viewer.append(spread); }
- spread.appendChild(pages[i].div); + spread.append(pages[i].div); } } } @@ -11160,8 +11340,48 @@ class BaseViewer { if (height !== this.#previousContainerHeight) { this.#previousContainerHeight = height;
- this._doc.style.setProperty("--viewer-container-height", `${height}px`); + _ui_utils.docStyle.setProperty("--viewer-container-height", `${height}px`); + } + } + + get annotationEditorMode() { + return this.#annotationEditorUIManager ? this.#annotationEditorMode : _pdfjsLib.AnnotationEditorType.DISABLE; + } + + set annotationEditorMode(mode) { + if (!this.#annotationEditorUIManager) { + throw new Error(`The AnnotationEditor is not enabled.`); + } + + if (this.#annotationEditorMode === mode) { + return; + } + + if (!isValidAnnotationEditorMode(mode)) { + throw new Error(`Invalid AnnotationEditor mode: ${mode}`); } + + if (!this.pdfDocument) { + return; + } + + this.#annotationEditorMode = mode; + this.eventBus.dispatch("annotationeditormodechanged", { + source: this, + mode + }); + this.#annotationEditorUIManager.updateMode(mode); + } + + set annotationEditorParams({ + type, + value + }) { + if (!this.#annotationEditorUIManager) { + throw new Error(`The AnnotationEditor is not enabled.`); + } + + this.#annotationEditorUIManager.updateParams(type, value); }
} @@ -11169,7 +11389,7 @@ class BaseViewer { exports.BaseViewer = BaseViewer;
/***/ }), -/* 29 */ +/* 30 */ /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
@@ -11177,89 +11397,71 @@ exports.BaseViewer = BaseViewer; Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.AnnotationLayerBuilder = void 0; +exports.AnnotationEditorLayerBuilder = void 0;
-var _pdfjsLib = __webpack_require__(5); +var _pdfjsLib = __webpack_require__(4);
-var _l10n_utils = __webpack_require__(30); +var _l10n_utils = __webpack_require__(31);
-class AnnotationLayerBuilder { - constructor({ - pageDiv, - pdfPage, - linkService, - downloadManager, - annotationStorage = null, - imageResourcesPath = "", - renderForms = true, - l10n = _l10n_utils.NullL10n, - enableScripting = false, - hasJSActionsPromise = null, - fieldObjectsPromise = null, - mouseState = null, - annotationCanvasMap = null - }) { - this.pageDiv = pageDiv; - this.pdfPage = pdfPage; - this.linkService = linkService; - this.downloadManager = downloadManager; - this.imageResourcesPath = imageResourcesPath; - this.renderForms = renderForms; - this.l10n = l10n; - this.annotationStorage = annotationStorage; - this.enableScripting = enableScripting; - this._hasJSActionsPromise = hasJSActionsPromise; - this._fieldObjectsPromise = fieldObjectsPromise; - this._mouseState = mouseState; - this._annotationCanvasMap = annotationCanvasMap; +class AnnotationEditorLayerBuilder { + #uiManager; + + constructor(options) { + this.pageDiv = options.pageDiv; + this.pdfPage = options.pdfPage; + this.annotationStorage = options.annotationStorage || null; + this.l10n = options.l10n || _l10n_utils.NullL10n; + this.annotationEditorLayer = null; this.div = null; this._cancelled = false; + this.#uiManager = options.uiManager; }
async render(viewport, intent = "display") { - const [annotations, hasJSActions = false, fieldObjects = null] = await Promise.all([this.pdfPage.getAnnotations({ - intent - }), this._hasJSActionsPromise, this._fieldObjectsPromise]); + if (intent !== "display") { + return; + }
- if (this._cancelled || annotations.length === 0) { + if (this._cancelled) { return; }
- const parameters = { - viewport: viewport.clone({ - dontFlip: true - }), - div: this.div, - annotations, - page: this.pdfPage, - imageResourcesPath: this.imageResourcesPath, - renderForms: this.renderForms, - linkService: this.linkService, - downloadManager: this.downloadManager, - annotationStorage: this.annotationStorage, - enableScripting: this.enableScripting, - hasJSActions, - fieldObjects, - mouseState: this._mouseState, - annotationCanvasMap: this._annotationCanvasMap - }; + const clonedViewport = viewport.clone({ + dontFlip: true + });
if (this.div) { - _pdfjsLib.AnnotationLayer.update(parameters); - } else { - this.div = document.createElement("div"); - this.div.className = "annotationLayer"; - this.pageDiv.appendChild(this.div); - parameters.div = this.div; - - _pdfjsLib.AnnotationLayer.render(parameters); - - this.l10n.translate(this.div); + this.annotationEditorLayer.update({ + viewport: clonedViewport + }); + this.show(); + return; } + + this.div = document.createElement("div"); + this.div.className = "annotationEditorLayer"; + this.div.tabIndex = 0; + this.pageDiv.append(this.div); + this.annotationEditorLayer = new _pdfjsLib.AnnotationEditorLayer({ + uiManager: this.#uiManager, + div: this.div, + annotationStorage: this.annotationStorage, + pageIndex: this.pdfPage._pageIndex, + l10n: this.l10n, + viewport: clonedViewport + }); + const parameters = { + viewport: clonedViewport, + div: this.div, + annotations: null, + intent + }; + this.annotationEditorLayer.render(parameters); }
cancel() { this._cancelled = true; + this.destroy(); }
hide() { @@ -11270,12 +11472,30 @@ class AnnotationLayerBuilder { this.div.hidden = true; }
+ show() { + if (!this.div) { + return; + } + + this.div.hidden = false; + } + + destroy() { + if (!this.div) { + return; + } + + this.pageDiv = null; + this.annotationEditorLayer.destroy(); + this.div.remove(); + } + }
-exports.AnnotationLayerBuilder = AnnotationLayerBuilder; +exports.AnnotationEditorLayerBuilder = AnnotationEditorLayerBuilder;
/***/ }), -/* 30 */ +/* 31 */ /***/ ((__unused_webpack_module, exports) => {
@@ -11336,7 +11556,11 @@ const DEFAULT_L10N_STRINGS = { unexpected_response_error: "Unexpected server response.", printing_not_supported: "Warning: Printing is not fully supported by this browser.", printing_not_ready: "Warning: The PDF is not fully loaded for printing.", - web_fonts_disabled: "Web fonts are disabled: unable to use embedded PDF fonts." + web_fonts_disabled: "Web fonts are disabled: unable to use embedded PDF fonts.", + free_text_default_content: "Enter text…", + editor_free_text_aria_label: "FreeText Editor", + editor_ink_aria_label: "Ink Editor", + editor_ink_canvas_aria_label: "User-created image" };
function getL10nFallback(key, args) { @@ -11403,7 +11627,113 @@ const NullL10n = { exports.NullL10n = NullL10n;
/***/ }), -/* 31 */ +/* 32 */ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.AnnotationLayerBuilder = void 0; + +var _pdfjsLib = __webpack_require__(4); + +var _l10n_utils = __webpack_require__(31); + +class AnnotationLayerBuilder { + constructor({ + pageDiv, + pdfPage, + linkService, + downloadManager, + annotationStorage = null, + imageResourcesPath = "", + renderForms = true, + l10n = _l10n_utils.NullL10n, + enableScripting = false, + hasJSActionsPromise = null, + fieldObjectsPromise = null, + mouseState = null, + annotationCanvasMap = null + }) { + this.pageDiv = pageDiv; + this.pdfPage = pdfPage; + this.linkService = linkService; + this.downloadManager = downloadManager; + this.imageResourcesPath = imageResourcesPath; + this.renderForms = renderForms; + this.l10n = l10n; + this.annotationStorage = annotationStorage; + this.enableScripting = enableScripting; + this._hasJSActionsPromise = hasJSActionsPromise; + this._fieldObjectsPromise = fieldObjectsPromise; + this._mouseState = mouseState; + this._annotationCanvasMap = annotationCanvasMap; + this.div = null; + this._cancelled = false; + } + + async render(viewport, intent = "display") { + const [annotations, hasJSActions = false, fieldObjects = null] = await Promise.all([this.pdfPage.getAnnotations({ + intent + }), this._hasJSActionsPromise, this._fieldObjectsPromise]); + + if (this._cancelled || annotations.length === 0) { + return; + } + + const parameters = { + viewport: viewport.clone({ + dontFlip: true + }), + div: this.div, + annotations, + page: this.pdfPage, + imageResourcesPath: this.imageResourcesPath, + renderForms: this.renderForms, + linkService: this.linkService, + downloadManager: this.downloadManager, + annotationStorage: this.annotationStorage, + enableScripting: this.enableScripting, + hasJSActions, + fieldObjects, + mouseState: this._mouseState, + annotationCanvasMap: this._annotationCanvasMap + }; + + if (this.div) { + _pdfjsLib.AnnotationLayer.update(parameters); + } else { + this.div = document.createElement("div"); + this.div.className = "annotationLayer"; + this.pageDiv.append(this.div); + parameters.div = this.div; + + _pdfjsLib.AnnotationLayer.render(parameters); + + this.l10n.translate(this.div); + } + } + + cancel() { + this._cancelled = true; + } + + hide() { + if (!this.div) { + return; + } + + this.div.hidden = true; + } + +} + +exports.AnnotationLayerBuilder = AnnotationLayerBuilder; + +/***/ }), +/* 33 */ /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
@@ -11413,13 +11743,13 @@ Object.defineProperty(exports, "__esModule", ({ })); exports.PDFPageView = void 0;
-var _pdfjsLib = __webpack_require__(5); +var _pdfjsLib = __webpack_require__(4);
var _ui_utils = __webpack_require__(3);
var _app_options = __webpack_require__(1);
-var _l10n_utils = __webpack_require__(30); +var _l10n_utils = __webpack_require__(31);
const MAX_CANVAS_PIXELS = _app_options.compatibilityParams.maxCanvasPixels || 16777216;
@@ -11449,10 +11779,10 @@ class PDFPageView { this.renderingQueue = options.renderingQueue; this.textLayerFactory = options.textLayerFactory; this.annotationLayerFactory = options.annotationLayerFactory; + this.annotationEditorLayerFactory = options.annotationEditorLayerFactory; this.xfaLayerFactory = options.xfaLayerFactory; this.textHighlighter = options.textHighlighterFactory?.createTextHighlighter(this.id - 1, this.eventBus); this.structTreeLayerFactory = options.structTreeLayerFactory; - this.renderer = options.renderer || _ui_utils.RendererType.CANVAS; this.l10n = options.l10n || _l10n_utils.NullL10n; this.paintTask = null; this.paintedViewportMap = new WeakMap(); @@ -11462,6 +11792,7 @@ class PDFPageView { this._isStandalone = !this.renderingQueue?.hasViewer(); this._annotationCanvasMap = null; this.annotationLayer = null; + this.annotationEditorLayer = null; this.textLayer = null; this.zoomLayer = null; this.xfaLayer = null; @@ -11478,7 +11809,7 @@ class PDFPageView { div.setAttribute("aria-label", msg); }); this.div = div; - container?.appendChild(div); + container?.append(div); }
setPdfPage(pdfPage) { @@ -11516,6 +11847,22 @@ class PDFPageView { } }
+ async _renderAnnotationEditorLayer() { + let error = null; + + try { + await this.annotationEditorLayer.render(this.viewport, "display"); + } catch (ex) { + error = ex; + } finally { + this.eventBus.dispatch("annotationeditorlayerrendered", { + source: this, + pageNumber: this.id, + error + }); + } + } + async _renderXfaLayer() { let error = null;
@@ -11568,10 +11915,12 @@ class PDFPageView { reset({ keepZoomLayer = false, keepAnnotationLayer = false, + keepAnnotationEditorLayer = false, keepXfaLayer = false } = {}) { this.cancelRendering({ keepAnnotationLayer, + keepAnnotationEditorLayer, keepXfaLayer }); this.renderingState = _ui_utils.RenderingStates.INITIAL; @@ -11581,6 +11930,7 @@ class PDFPageView { const childNodes = div.childNodes, zoomLayerNode = keepZoomLayer && this.zoomLayer || null, annotationLayerNode = keepAnnotationLayer && this.annotationLayer?.div || null, + annotationEditorLayerNode = keepAnnotationEditorLayer && this.annotationEditorLayer?.div || null, xfaLayerNode = keepXfaLayer && this.xfaLayer?.div || null;
for (let i = childNodes.length - 1; i >= 0; i--) { @@ -11589,6 +11939,7 @@ class PDFPageView { switch (node) { case zoomLayerNode: case annotationLayerNode: + case annotationEditorLayerNode: case xfaLayerNode: continue; } @@ -11602,6 +11953,12 @@ class PDFPageView { this.annotationLayer.hide(); }
+ if (annotationEditorLayerNode) { + this.annotationEditorLayer.hide(); + } else { + this.annotationEditorLayer?.destroy(); + } + if (xfaLayerNode) { this.xfaLayer.hide(); } @@ -11617,11 +11974,6 @@ class PDFPageView { this._resetZoomLayer(); }
- if (this.svg) { - this.paintedViewportMap.delete(this.svg); - delete this.svg; - } - this.loadingIconDiv = document.createElement("div"); this.loadingIconDiv.className = "loadingIcon notVisible";
@@ -11633,7 +11985,7 @@ class PDFPageView { this.l10n.get("loading").then(msg => { this.loadingIconDiv?.setAttribute("aria-label", msg); }); - div.appendChild(this.loadingIconDiv); + div.append(this.loadingIconDiv); }
update({ @@ -11658,26 +12010,7 @@ class PDFPageView { });
if (this._isStandalone) { - const { - style - } = document.documentElement; - style.setProperty("--zoom-factor", this.scale); - } - - if (this.svg) { - this.cssTransform({ - target: this.svg, - redrawAnnotationLayer: true, - redrawXfaLayer: true - }); - this.eventBus.dispatch("pagerendered", { - source: this, - pageNumber: this.id, - cssTransform: true, - timestamp: performance.now(), - error: this._renderError - }); - return; + _ui_utils.docStyle.setProperty("--scale-factor", this.viewport.scale); }
let isScalingRestricted = false; @@ -11695,6 +12028,7 @@ class PDFPageView { this.cssTransform({ target: this.canvas, redrawAnnotationLayer: true, + redrawAnnotationEditorLayer: true, redrawXfaLayer: true }); this.eventBus.dispatch("pagerendered", { @@ -11722,12 +12056,14 @@ class PDFPageView { this.reset({ keepZoomLayer: true, keepAnnotationLayer: true, + keepAnnotationEditorLayer: true, keepXfaLayer: true }); }
cancelRendering({ keepAnnotationLayer = false, + keepAnnotationEditorLayer = false, keepXfaLayer = false } = {}) { if (this.paintTask) { @@ -11748,6 +12084,11 @@ class PDFPageView { this._annotationCanvasMap = null; }
+ if (this.annotationEditorLayer && (!keepAnnotationEditorLayer || !this.annotationEditorLayer.div)) { + this.annotationEditorLayer.cancel(); + this.annotationEditorLayer = null; + } + if (this.xfaLayer && (!keepXfaLayer || !this.xfaLayer.div)) { this.xfaLayer.cancel(); this.xfaLayer = null; @@ -11764,6 +12105,7 @@ class PDFPageView { cssTransform({ target, redrawAnnotationLayer = false, + redrawAnnotationEditorLayer = false, redrawXfaLayer = false }) { const width = this.viewport.width; @@ -11829,6 +12171,10 @@ class PDFPageView { this._renderAnnotationLayer(); }
+ if (redrawAnnotationEditorLayer && this.annotationEditorLayer) { + this._renderAnnotationEditorLayer(); + } + if (redrawXfaLayer && this.xfaLayer) { this._renderXfaLayer(); } @@ -11877,11 +12223,12 @@ class PDFPageView { canvasWrapper.style.width = div.style.width; canvasWrapper.style.height = div.style.height; canvasWrapper.classList.add("canvasWrapper"); + const lastDivBeforeTextDiv = this.annotationLayer?.div || this.annotationEditorLayer?.div;
- if (this.annotationLayer?.div) { - div.insertBefore(canvasWrapper, this.annotationLayer.div); + if (lastDivBeforeTextDiv) { + lastDivBeforeTextDiv.before(canvasWrapper); } else { - div.appendChild(canvasWrapper); + div.append(canvasWrapper); }
let textLayer = null; @@ -11892,10 +12239,10 @@ class PDFPageView { textLayerDiv.style.width = canvasWrapper.style.width; textLayerDiv.style.height = canvasWrapper.style.height;
- if (this.annotationLayer?.div) { - div.insertBefore(textLayerDiv, this.annotationLayer.div); + if (lastDivBeforeTextDiv) { + lastDivBeforeTextDiv.before(textLayerDiv); } else { - div.appendChild(textLayerDiv); + div.append(textLayerDiv); }
textLayer = this.textLayerFactory.createTextLayerBuilder(textLayerDiv, this.id - 1, this.viewport, this.textLayerMode === _ui_utils.TextLayerMode.ENABLE_ENHANCE, this.eventBus, this.textHighlighter); @@ -11909,7 +12256,7 @@ class PDFPageView { }
if (this.xfaLayer?.div) { - div.appendChild(this.xfaLayer.div); + div.append(this.xfaLayer.div); }
let renderContinueCallback = null; @@ -11964,7 +12311,7 @@ class PDFPageView { } };
- const paintTask = this.renderer === _ui_utils.RendererType.SVG ? this.paintOnSvg(canvasWrapper) : this.paintOnCanvas(canvasWrapper); + const paintTask = this.paintOnCanvas(canvasWrapper); paintTask.onRenderContinue = renderContinueCallback; this.paintTask = paintTask; const resultPromise = paintTask.promise.then(() => { @@ -11978,7 +12325,13 @@ class PDFPageView { }
if (this.annotationLayer) { - this._renderAnnotationLayer(); + this._renderAnnotationLayer().then(() => { + if (this.annotationEditorLayerFactory) { + this.annotationEditorLayer ||= this.annotationEditorLayerFactory.createAnnotationEditorLayerBuilder(div, pdfPage, this.l10n, null); + + this._renderAnnotationEditorLayer(); + } + }); } }); }, function (reason) { @@ -12018,7 +12371,7 @@ class PDFPageView {
const treeDom = this.structTreeLayer.render(tree); treeDom.classList.add("structTree"); - this.canvas.appendChild(treeDom); + this.canvas.append(treeDom); }); };
@@ -12051,6 +12404,7 @@ class PDFPageView { }; const viewport = this.viewport; const canvas = document.createElement("canvas"); + canvas.setAttribute("role", "presentation"); canvas.hidden = true; let isCanvasHidden = true;
@@ -12061,9 +12415,8 @@ class PDFPageView { } };
- canvasWrapper.appendChild(canvas); + canvasWrapper.append(canvas); this.canvas = canvas; - canvas.mozOpaque = true; const ctx = canvas.getContext("2d", { alpha: false }); @@ -12130,14 +12483,7 @@ class PDFPageView { }
paintOnSvg(wrapper) { - return { - promise: Promise.reject(new Error("SVG rendering is not supported.")), - - onRenderContinue(cont) {}, - - cancel() {} - - }; + throw new Error("Not implemented: paintOnSvg"); }
setPageLabel(label) { @@ -12155,7 +12501,7 @@ class PDFPageView { exports.PDFPageView = PDFPageView;
/***/ }), -/* 32 */ +/* 34 */ /***/ ((__unused_webpack_module, exports) => {
@@ -12261,7 +12607,7 @@ class StructTreeLayerBuilder { this._setAttributes(node.children[0], element); } else { for (const kid of node.children) { - element.appendChild(this._walk(kid)); + element.append(this._walk(kid)); } } } @@ -12274,7 +12620,7 @@ class StructTreeLayerBuilder { exports.StructTreeLayerBuilder = StructTreeLayerBuilder;
/***/ }), -/* 33 */ +/* 35 */ /***/ ((__unused_webpack_module, exports) => {
@@ -12424,8 +12770,8 @@ class TextHighlighter {
if (div.nodeType === Node.TEXT_NODE) { const span = document.createElement("span"); - div.parentNode.insertBefore(span, div); - span.appendChild(div); + div.before(span); + span.append(div); textDivs[divIdx] = span; div = span; } @@ -12436,12 +12782,12 @@ class TextHighlighter { if (className) { const span = document.createElement("span"); span.className = `${className} appended`; - span.appendChild(node); - div.appendChild(span); + span.append(node); + div.append(span); return className.includes("selected") ? span.offsetLeft : 0; }
- div.appendChild(node); + div.append(node); return 0; }
@@ -12547,7 +12893,7 @@ class TextHighlighter { exports.TextHighlighter = TextHighlighter;
/***/ }), -/* 34 */ +/* 36 */ /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
@@ -12557,7 +12903,7 @@ Object.defineProperty(exports, "__esModule", ({ })); exports.TextLayerBuilder = void 0;
-var _pdfjsLib = __webpack_require__(5); +var _pdfjsLib = __webpack_require__(4);
const EXPAND_DIVS_TIMEOUT = 300;
@@ -12592,7 +12938,7 @@ class TextLayerBuilder { if (!this.enhanceTextSelection) { const endOfContent = document.createElement("div"); endOfContent.className = "endOfContent"; - this.textLayerDiv.appendChild(endOfContent); + this.textLayerDiv.append(endOfContent); }
this.eventBus.dispatch("textlayerrendered", { @@ -12622,7 +12968,7 @@ class TextLayerBuilder { enhanceTextSelection: this.enhanceTextSelection }); this.textLayerRenderTask.promise.then(() => { - this.textLayerDiv.appendChild(textLayerFrag); + this.textLayerDiv.append(textLayerFrag);
this._finishRendering();
@@ -12687,7 +13033,7 @@ class TextLayerBuilder { exports.TextLayerBuilder = TextLayerBuilder;
/***/ }), -/* 35 */ +/* 37 */ /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
@@ -12697,7 +13043,7 @@ Object.defineProperty(exports, "__esModule", ({ })); exports.XfaLayerBuilder = void 0;
-var _pdfjsLib = __webpack_require__(5); +var _pdfjsLib = __webpack_require__(4);
class XfaLayerBuilder { constructor({ @@ -12729,7 +13075,7 @@ class XfaLayerBuilder { intent }; const div = document.createElement("div"); - this.pageDiv.appendChild(div); + this.pageDiv.append(div); parameters.div = div;
const result = _pdfjsLib.XfaLayer.render(parameters); @@ -12760,7 +13106,7 @@ class XfaLayerBuilder { }
this.div = document.createElement("div"); - this.pageDiv.appendChild(this.div); + this.pageDiv.append(this.div); parameters.div = this.div; return _pdfjsLib.XfaLayer.render(parameters); }).catch(error => { @@ -12785,7 +13131,7 @@ class XfaLayerBuilder { exports.XfaLayerBuilder = XfaLayerBuilder;
/***/ }), -/* 36 */ +/* 38 */ /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
@@ -12799,7 +13145,7 @@ var _ui_utils = __webpack_require__(3);
var _pdf_cursor_tools = __webpack_require__(6);
-var _base_viewer = __webpack_require__(28); +var _base_viewer = __webpack_require__(29);
class SecondaryToolbar { constructor(options, eventBus) { @@ -13105,7 +13451,7 @@ class SecondaryToolbar { exports.SecondaryToolbar = SecondaryToolbar;
/***/ }), -/* 37 */ +/* 39 */ /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
@@ -13117,6 +13463,8 @@ exports.Toolbar = void 0;
var _ui_utils = __webpack_require__(3);
+var _pdfjsLib = __webpack_require__(4); + const PAGE_NUMBER_LOADING_INDICATOR = "visiblePageIsLoading";
class Toolbar { @@ -13148,6 +13496,24 @@ class Toolbar { }, { element: options.viewBookmark, eventName: null + }, { + element: options.editorNoneButton, + eventName: "switchannotationeditormode", + eventDetails: { + mode: _pdfjsLib.AnnotationEditorType.NONE + } + }, { + element: options.editorFreeTextButton, + eventName: "switchannotationeditormode", + eventDetails: { + mode: _pdfjsLib.AnnotationEditorType.FREETEXT + } + }, { + element: options.editorInkButton, + eventName: "switchannotationeditormode", + eventDetails: { + mode: _pdfjsLib.AnnotationEditorType.INK + } }]; this.items = { numPages: options.numPages, @@ -13157,12 +13523,17 @@ class Toolbar { previous: options.previous, next: options.next, zoomIn: options.zoomIn, - zoomOut: options.zoomOut + zoomOut: options.zoomOut, + editorNoneButton: options.editorNoneButton, + editorFreeTextButton: options.editorFreeTextButton, + editorFreeTextParamsToolbar: options.editorFreeTextParamsToolbar, + editorInkButton: options.editorInkButton, + editorInkParamsToolbar: options.editorInkParamsToolbar }; this._wasLocalized = false; this.reset();
- this._bindListeners(); + this._bindListeners(options); }
setPageNumber(pageNumber, pageLabel) { @@ -13197,9 +13568,12 @@ class Toolbar { this._updateUIState(true);
this.updateLoadingIndicatorState(); + this.eventBus.dispatch("toolbarreset", { + source: this + }); }
- _bindListeners() { + _bindListeners(options) { const { pageNumber, scaleSelect @@ -13208,13 +13582,22 @@ class Toolbar {
for (const { element, - eventName + eventName, + eventDetails } of this.buttons) { element.addEventListener("click", evt => { if (eventName !== null) { - this.eventBus.dispatch(eventName, { + const details = { source: this - }); + }; + + if (eventDetails) { + for (const property in eventDetails) { + details[property] = eventDetails[property]; + } + } + + this.eventBus.dispatch(eventName, details); } }); } @@ -13249,11 +13632,60 @@ class Toolbar {
this.eventBus._on("localized", () => { this._wasLocalized = true; - - this._adjustScaleWidth(); + this.#adjustScaleWidth();
this._updateUIState(true); }); + + this.#bindEditorToolsListener(options); + } + + #bindEditorToolsListener({ + editorNoneButton, + editorFreeTextButton, + editorFreeTextParamsToolbar, + editorInkButton, + editorInkParamsToolbar + }) { + const editorModeChanged = (evt, disableButtons = false) => { + const editorButtons = [{ + mode: _pdfjsLib.AnnotationEditorType.NONE, + button: editorNoneButton + }, { + mode: _pdfjsLib.AnnotationEditorType.FREETEXT, + button: editorFreeTextButton, + toolbar: editorFreeTextParamsToolbar + }, { + mode: _pdfjsLib.AnnotationEditorType.INK, + button: editorInkButton, + toolbar: editorInkParamsToolbar + }]; + + for (const { + mode, + button, + toolbar + } of editorButtons) { + const checked = mode === evt.mode; + button.classList.toggle("toggled", checked); + button.setAttribute("aria-checked", checked); + button.disabled = disableButtons; + + if (toolbar) { + toolbar.classList.toggle("hidden", !checked); + } + } + }; + + this.eventBus._on("annotationeditormodechanged", editorModeChanged); + + this.eventBus._on("toolbarreset", evt => { + if (evt.source === this) { + editorModeChanged({ + mode: _pdfjsLib.AnnotationEditorType.NONE + }, true); + } + }); }
_updateUIState(resetNumPages = false) { @@ -13323,25 +13755,26 @@ class Toolbar { }
updateLoadingIndicatorState(loading = false) { - const pageNumberInput = this.items.pageNumber; - pageNumberInput.classList.toggle(PAGE_NUMBER_LOADING_INDICATOR, loading); + const { + pageNumber + } = this.items; + pageNumber.classList.toggle(PAGE_NUMBER_LOADING_INDICATOR, loading); }
- async _adjustScaleWidth() { + async #adjustScaleWidth() { const { items, l10n } = this; const predefinedValuesPromise = Promise.all([l10n.get("page_scale_auto"), l10n.get("page_scale_actual"), l10n.get("page_scale_fit"), l10n.get("page_scale_width")]); + await _ui_utils.animationStarted; const style = getComputedStyle(items.scaleSelect), scaleSelectContainerWidth = parseInt(style.getPropertyValue("--scale-select-container-width"), 10), scaleSelectOverflow = parseInt(style.getPropertyValue("--scale-select-overflow"), 10); - let canvas = document.createElement("canvas"); - canvas.mozOpaque = true; - let ctx = canvas.getContext("2d", { + const canvas = document.createElement("canvas"); + const ctx = canvas.getContext("2d", { alpha: false }); - await _ui_utils.animationStarted; ctx.font = `${style.fontSize} ${style.fontFamily}`; let maxWidth = 0;
@@ -13358,13 +13791,11 @@ class Toolbar { maxWidth += 2 * scaleSelectOverflow;
if (maxWidth > scaleSelectContainerWidth) { - const doc = document.documentElement; - doc.style.setProperty("--scale-select-container-width", `${maxWidth}px`); + _ui_utils.docStyle.setProperty("--scale-select-container-width", `${maxWidth}px`); }
canvas.width = 0; canvas.height = 0; - canvas = ctx = null; }
} @@ -13372,7 +13803,7 @@ class Toolbar { exports.Toolbar = Toolbar;
/***/ }), -/* 38 */ +/* 40 */ /***/ ((__unused_webpack_module, exports) => {
@@ -13467,7 +13898,7 @@ class ViewHistory { exports.ViewHistory = ViewHistory;
/***/ }), -/* 39 */ +/* 41 */ /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
@@ -13477,24 +13908,24 @@ Object.defineProperty(exports, "__esModule", ({ })); exports.FirefoxCom = exports.DownloadManager = void 0;
-__webpack_require__(40); +__webpack_require__(42);
var _app = __webpack_require__(2);
-var _pdfjsLib = __webpack_require__(5); +var _pdfjsLib = __webpack_require__(4);
-var _preferences = __webpack_require__(41); +var _preferences = __webpack_require__(43);
var _ui_utils = __webpack_require__(3);
-var _l10n_utils = __webpack_require__(30); +var _l10n_utils = __webpack_require__(31);
;
class FirefoxCom { static requestSync(action, data) { const request = document.createTextNode(""); - document.documentElement.appendChild(request); + document.documentElement.append(request); const sender = document.createEvent("CustomEvent"); sender.initCustomEvent("pdf.js.message", true, false, { action, @@ -13526,7 +13957,7 @@ class FirefoxCom { }); }
- document.documentElement.appendChild(request); + document.documentElement.append(request); const sender = document.createEvent("CustomEvent"); sender.initCustomEvent("pdf.js.message", true, false, { action, @@ -13557,13 +13988,11 @@ class DownloadManager { const blobUrl = URL.createObjectURL(new Blob([data], { type: contentType })); - FirefoxCom.requestAsync("download", { + FirefoxCom.request("download", { blobUrl, originalUrl: blobUrl, filename, isAttachment: true - }).then(error => { - URL.revokeObjectURL(blobUrl); }); }
@@ -13599,19 +14028,12 @@ class DownloadManager { return false; }
- download(blob, url, filename, sourceEventType = "download") { + download(blob, url, filename) { const blobUrl = URL.createObjectURL(blob); - FirefoxCom.requestAsync("download", { + FirefoxCom.request("download", { blobUrl, originalUrl: url, - filename, - sourceEventType - }).then(error => { - if (error) { - console.error("`ChromeActions.download` failed."); - } - - URL.revokeObjectURL(blobUrl); + filename }); }
@@ -13726,7 +14148,7 @@ class MozL10n { return; }
- _app.PDFViewerApplication.eventBus.dispatch(type, { + _app.PDFViewerApplication.eventBus.dispatch("download", { source: window }); }; @@ -13734,6 +14156,23 @@ class MozL10n { window.addEventListener("save", handleEvent); })();
+(function listenEditingEvent() { + const handleEvent = function ({ + detail + }) { + if (!_app.PDFViewerApplication.initialized) { + return; + } + + _app.PDFViewerApplication.eventBus.dispatch("editingaction", { + source: window, + name: detail.name + }); + }; + + window.addEventListener("editingaction", handleEvent); +})(); + class FirefoxComDataRangeTransport extends _pdfjsLib.PDFDataRangeTransport { requestDataRange(begin, end) { FirefoxCom.request("requestDataRange", { @@ -13847,6 +14286,10 @@ class FirefoxExternalServices extends _app.DefaultExternalServices { return new FirefoxPreferences(); }
+ static updateEditorStates(data) { + FirefoxCom.request("updateEditorStates", data); + } + static createL10n(options) { const mozL10n = document.mozL10n; return new MozL10n(mozL10n); @@ -13891,7 +14334,7 @@ document.mozL10n.setExternalLocalizerServices({ });
/***/ }), -/* 40 */ +/* 42 */ /***/ (() => {
@@ -14014,7 +14457,7 @@ document.mozL10n.setExternalLocalizerServices({ })(void 0);
/***/ }), -/* 41 */ +/* 43 */ /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
@@ -14028,6 +14471,7 @@ var _app_options = __webpack_require__(1);
class BasePreferences { #defaults = Object.freeze({ + "annotationEditorMode": -1, "annotationMode": 2, "cursorToolOnLoad": 0, "defaultZoomValue": "", @@ -14038,6 +14482,7 @@ class BasePreferences { "externalLinkTarget": 0, "historyUpdateUrl": false, "ignoreDestinationZoom": false, + "forcePageColors": false, "pageColorsBackground": "Canvas", "pageColorsForeground": "CanvasText", "pdfBugEnabled": false, @@ -14151,7 +14596,7 @@ class BasePreferences { exports.BasePreferences = BasePreferences;
/***/ }), -/* 42 */ +/* 44 */ /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
@@ -14161,21 +14606,21 @@ Object.defineProperty(exports, "__esModule", ({ })); exports.FirefoxPrintService = FirefoxPrintService;
-var _pdfjsLib = __webpack_require__(5); +var _pdfjsLib = __webpack_require__(4);
-var _print_utils = __webpack_require__(43); +var _print_utils = __webpack_require__(45);
var _app = __webpack_require__(2);
-function composePage(pdfDocument, pageNumber, size, printContainer, printResolution, optionalContentConfigPromise) { +function composePage(pdfDocument, pageNumber, size, printContainer, printResolution, optionalContentConfigPromise, printAnnotationStoragePromise) { const canvas = document.createElement("canvas"); const PRINT_UNITS = printResolution / _pdfjsLib.PixelsPerInch.PDF; canvas.width = Math.floor(size.width * PRINT_UNITS); canvas.height = Math.floor(size.height * PRINT_UNITS); const canvasWrapper = document.createElement("div"); canvasWrapper.className = "printedPage"; - canvasWrapper.appendChild(canvas); - printContainer.appendChild(canvasWrapper); + canvasWrapper.append(canvas); + printContainer.append(canvasWrapper); let currentRenderTask = null;
canvas.mozPrintCallback = function (obj) { @@ -14185,7 +14630,7 @@ function composePage(pdfDocument, pageNumber, size, printContainer, printResolut ctx.fillRect(0, 0, canvas.width, canvas.height); ctx.restore(); let thisRenderTask = null; - pdfDocument.getPage(pageNumber).then(function (pdfPage) { + Promise.all([pdfDocument.getPage(pageNumber), printAnnotationStoragePromise]).then(function ([pdfPage, printAnnotationStorage]) { if (currentRenderTask) { currentRenderTask.cancel(); currentRenderTask = null; @@ -14200,7 +14645,8 @@ function composePage(pdfDocument, pageNumber, size, printContainer, printResolut }), intent: "print", annotationMode: _pdfjsLib.AnnotationMode.ENABLE_STORAGE, - optionalContentConfigPromise + optionalContentConfigPromise, + printAnnotationStorage }; currentRenderTask = thisRenderTask = pdfPage.render(renderContext); return thisRenderTask.promise; @@ -14229,12 +14675,13 @@ function composePage(pdfDocument, pageNumber, size, printContainer, printResolut }; }
-function FirefoxPrintService(pdfDocument, pagesOverview, printContainer, printResolution, optionalContentConfigPromise = null) { +function FirefoxPrintService(pdfDocument, pagesOverview, printContainer, printResolution, optionalContentConfigPromise = null, printAnnotationStoragePromise = null) { this.pdfDocument = pdfDocument; this.pagesOverview = pagesOverview; this.printContainer = printContainer; this._printResolution = printResolution || 150; this._optionalContentConfigPromise = optionalContentConfigPromise || pdfDocument.getOptionalContentConfig(); + this._printAnnotationStoragePromise = printAnnotationStoragePromise || Promise.resolve(); }
FirefoxPrintService.prototype = { @@ -14244,7 +14691,8 @@ FirefoxPrintService.prototype = { pagesOverview, printContainer, _printResolution, - _optionalContentConfigPromise + _optionalContentConfigPromise, + _printAnnotationStoragePromise } = this; const body = document.querySelector("body"); body.setAttribute("data-pdfjsprinting", true); @@ -14255,7 +14703,7 @@ FirefoxPrintService.prototype = { }
for (let i = 0, ii = pagesOverview.length; i < ii; ++i) { - composePage(pdfDocument, i + 1, pagesOverview[i], printContainer, _printResolution, _optionalContentConfigPromise); + composePage(pdfDocument, i + 1, pagesOverview[i], printContainer, _printResolution, _optionalContentConfigPromise, _printAnnotationStoragePromise); } },
@@ -14273,14 +14721,14 @@ _app.PDFPrintServiceFactory.instance = { return (0, _pdfjsLib.shadow)(this, "supportsPrinting", value); },
- createPrintService(pdfDocument, pagesOverview, printContainer, printResolution, optionalContentConfigPromise) { - return new FirefoxPrintService(pdfDocument, pagesOverview, printContainer, printResolution, optionalContentConfigPromise); + createPrintService(pdfDocument, pagesOverview, printContainer, printResolution, optionalContentConfigPromise, printAnnotationStoragePromise) { + return new FirefoxPrintService(pdfDocument, pagesOverview, printContainer, printResolution, optionalContentConfigPromise, printAnnotationStoragePromise); }
};
/***/ }), -/* 43 */ +/* 45 */ /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
@@ -14290,11 +14738,11 @@ Object.defineProperty(exports, "__esModule", ({ })); exports.getXfaHtmlForPrinting = getXfaHtmlForPrinting;
-var _pdfjsLib = __webpack_require__(5); +var _pdfjsLib = __webpack_require__(4);
var _pdf_link_service = __webpack_require__(8);
-var _xfa_layer_builder = __webpack_require__(35); +var _xfa_layer_builder = __webpack_require__(37);
function getXfaHtmlForPrinting(printContainer, pdfDocument) { const xfaHtml = pdfDocument.allXfaHtml; @@ -14304,7 +14752,7 @@ function getXfaHtmlForPrinting(printContainer, pdfDocument) { for (const xfaPage of xfaHtml.children) { const page = document.createElement("div"); page.className = "xfaPrintedPage"; - printContainer.appendChild(page); + printContainer.append(page); const builder = new _xfa_layer_builder.XfaLayerBuilder({ pageDiv: page, pdfPage: null, @@ -14373,15 +14821,15 @@ var _app_options = __webpack_require__(1);
var _app = __webpack_require__(2);
-const pdfjsVersion = '2.14.290'; -const pdfjsBuild = '38c82357b'; +const pdfjsVersion = '2.15.305'; +const pdfjsBuild = '2a386eff9'; window.PDFViewerApplication = _app.PDFViewerApplication; window.PDFViewerApplicationOptions = _app_options.AppOptions; ; { - __webpack_require__(39); + __webpack_require__(41);
- __webpack_require__(42); + __webpack_require__(44); } ; ; @@ -14406,6 +14854,11 @@ function getViewerConfiguration() { viewFind: document.getElementById("viewFind"), openFile: null, print: document.getElementById("print"), + editorNoneButton: document.getElementById("editorNone"), + editorFreeTextButton: document.getElementById("editorFreeText"), + editorFreeTextParamsToolbar: document.getElementById("editorFreeTextParamsToolbar"), + editorInkButton: document.getElementById("editorInk"), + editorInkParamsToolbar: document.getElementById("editorInkParamsToolbar"), presentationModeButton: document.getElementById("presentationMode"), download: document.getElementById("download"), viewBookmark: document.getElementById("viewBookmark") @@ -14492,6 +14945,12 @@ function getViewerConfiguration() { linearized: document.getElementById("linearizedField") } }, + annotationEditorParams: { + editorFreeTextFontSize: document.getElementById("editorFreeTextFontSize"), + editorFreeTextColor: document.getElementById("editorFreeTextColor"), + editorInkColor: document.getElementById("editorInkColor"), + editorInkThickness: document.getElementById("editorInkThickness") + }, errorWrapper, printContainer: document.getElementById("printContainer"), openFileInput: null, diff --git a/toolkit/components/pdfjs/moz.yaml b/toolkit/components/pdfjs/moz.yaml index 0adf830d2dad3..9742816da0b0f 100644 --- a/toolkit/components/pdfjs/moz.yaml +++ b/toolkit/components/pdfjs/moz.yaml @@ -20,8 +20,8 @@ origin:
# Human-readable identifier for this version/release # Generally "version NNN", "tag SSS", "bookmark SSS" - release: commit 38c82357b247199b11fb573d0a3d4201347a47fc - revision: 38c82357b247199b11fb573d0a3d4201347a47fc + release: commit bf000687313b08924186f9f35a604f8cce27bd1d + revision: bf000687313b08924186f9f35a604f8cce27bd1d
# The package's license, where possible using the mnemonic from # https://spdx.org/licenses/ diff --git a/toolkit/components/pdfjs/test/browser_pdfjs_js.js b/toolkit/components/pdfjs/test/browser_pdfjs_js.js index 9e260a2560a41..19500a5b1f38a 100644 --- a/toolkit/components/pdfjs/test/browser_pdfjs_js.js +++ b/toolkit/components/pdfjs/test/browser_pdfjs_js.js @@ -36,7 +36,7 @@ add_task(async function test_js_sandbox() { const button = document.querySelector("[data-annotation-id='16R'] a"); button.dispatchEvent(new content.Event("click"));
- const text = document.querySelector("#\31 5R"); + const text = document.querySelector(`[data-element-id="15R"]`);
is(text.value, "test", "Text field must containt 'test' string");
This is an automated email from the git hooks/post-receive script.
richard pushed a commit to branch geckoview-102.3.0esr-12.0-1 in repository tor-browser.
commit 5404656aa22632296e1ae00d41609a979a828a35 Author: Bernard Igiri bigiri@mozilla.com AuthorDate: Wed Jul 27 17:25:48 2022 +0000
Bug 1776222 - Disable fullscreen on audio tags. r=jaws, a=RyanVM
Disabling fullscreen on audio tags so that double clicking does not cause those tags to display as full screen.
Differential Revision: https://phabricator.services.mozilla.com/D152564 --- toolkit/content/tests/widgets/mochitest.ini | 3 ++ .../content/tests/widgets/test_videocontrols.html | 8 ++++ .../tests/widgets/test_videocontrols_audio.html | 45 ++++++++++++++++++++-- toolkit/content/widgets/videocontrols.js | 9 +++-- 4 files changed, 58 insertions(+), 7 deletions(-)
diff --git a/toolkit/content/tests/widgets/mochitest.ini b/toolkit/content/tests/widgets/mochitest.ini index a78cbac927887..1e8cc1b3a3d94 100644 --- a/toolkit/content/tests/widgets/mochitest.ini +++ b/toolkit/content/tests/widgets/mochitest.ini @@ -37,6 +37,9 @@ skip-if = (toolkit == 'android') || (os == 'linux') #Bug 1366957 [test_videocontrols_iframe_fullscreen.html] [test_videocontrols_size.html] [test_videocontrols_audio.html] +skip-if = + win10_2004 && !debug # Bug 1781917 + apple_catalina && !debug # Bug 1781917 [test_videocontrols_audio_direction.html] skip-if = xorigin # Rendering of reftest videocontrols_direction-2a.html should not be different to the reference, fails/passes inconsistently [test_videocontrols_jsdisabled.html] diff --git a/toolkit/content/tests/widgets/test_videocontrols.html b/toolkit/content/tests/widgets/test_videocontrols.html index 40cb1c2a09b2b..865e1c9076fa7 100644 --- a/toolkit/content/tests/widgets/test_videocontrols.html +++ b/toolkit/content/tests/widgets/test_videocontrols.html @@ -445,6 +445,14 @@ add_task(async function ensure_fullscreen_button() { document.getElementById("content").appendChild(video); });
+add_task(async function ensure_doubleclick_triggers_fullscreen() { + const { x, y } = video.getBoundingClientRect(); + info("attempt double click"); + synthesizeMouse(video, x, y, { clickCount: 2 }); + await waitForEvent("play"); + await waitForEvent("mozfullscreenchange"); +}); + </script> </pre> </body> diff --git a/toolkit/content/tests/widgets/test_videocontrols_audio.html b/toolkit/content/tests/widgets/test_videocontrols_audio.html index 5c095df430d3f..4c7f14c1a1f6f 100644 --- a/toolkit/content/tests/widgets/test_videocontrols_audio.html +++ b/toolkit/content/tests/widgets/test_videocontrols_audio.html @@ -16,6 +16,36 @@ <pre id="test"> <script class="testbody" type="application/javascript">
+ const video = document.getElementById("video"); + + class EventLogger { + constructor() { + this._log = []; + this._xEventsPromise = new Promise(r => this._xReached = r); + this._x = Number.MAX_VALUE; + } + createListener() { + return e => { + this._log.push(e); + if (this._log.length >= this._x) { + this._xReached(this._log); + } + } + } + waitForXEvents(x) { + this._x = x; + return this._xEventsPromise; + } + clearEvents() { + this._log = []; + } + } + const logger = new EventLogger(); + + video.addEventListener("play", logger.createListener()); + video.addEventListener("pause", logger.createListener()); + document.addEventListener("mozfullscreenchange", logger.createListener()); + const InspectorUtils = SpecialPowers.InspectorUtils;
function findElementByAttribute(element, aName, aValue) { @@ -37,15 +67,22 @@ }
function loadedmetadata(event) { - SimpleTest.executeSoon(function() { - var controlBar = findElementByAttribute(video, "class", "controlBar"); + SimpleTest.executeSoon(async function test_fullscreen_unavailable() { + const { x, y } = video.getBoundingClientRect(); + const controlBar = findElementByAttribute(video, "class", "controlBar"); is(controlBar.getAttribute("fullscreen-unavailable"), "true", "Fullscreen button is hidden"); + logger.clearEvents(); + synthesizeMouse(video, x, y, { clickCount: 2 }); + const events = await logger.waitForXEvents(2); + ok( + !events.find(e => e.type === "mozfullscreenchange"), + "Double clicking should not trigger fullscreen event" + ); + is(events.length, 2, "Two events should have been fired."); SimpleTest.finish(); }); }
- var video = document.getElementById("video"); - SpecialPowers.pushPrefEnv({"set": [["media.cache_size", 40000]]}, startTest); function startTest() { // Kick off test once audio has loaded. diff --git a/toolkit/content/widgets/videocontrols.js b/toolkit/content/widgets/videocontrols.js index a411b0150c1a4..f962a0fa39508 100644 --- a/toolkit/content/widgets/videocontrols.js +++ b/toolkit/content/widgets/videocontrols.js @@ -1705,9 +1705,12 @@ this.VideoControlsImplWidget = class { },
toggleFullscreen() { - this.isVideoInFullScreen - ? this.document.exitFullscreen() - : this.video.requestFullscreen(); + // audio tags cannot toggle fullscreen + if (!this.isAudioOnly) { + this.isVideoInFullScreen + ? this.document.exitFullscreen() + : this.video.requestFullscreen(); + } },
setFullscreenButtonState() {
This is an automated email from the git hooks/post-receive script.
richard pushed a commit to branch geckoview-102.3.0esr-12.0-1 in repository tor-browser.
commit d902453efafea1b7d63ad3366d8db1c6775f365c Author: Masayuki Nakano masayuki@d-toybox.com AuthorDate: Fri Sep 2 06:29:36 2022 +0000
Bug 1785801 - Make `RangeUpdater::SelAdjJoinNodes` take the ex-offset of right node. r=m_kato, a=RyanVM
In bug 1739524, I misunderstood the meaning of `aOffset` of `SelAdjJoinNodes`.
After joining 2 nodes, and a point points right node which will have ex-left node content, the point needs to point ex-start of the right node to keep next insertion point as-is. Therefore, it's not useful with new join nodes direction, it needs to know the ex-offset of the right node.
This is a backport patch of https://phabricator.services.mozilla.com/D155438 for ESR 102.
Differential Revision: https://phabricator.services.mozilla.com/D156271 --- editor/libeditor/HTMLEditor.cpp | 8 ++++---- editor/libeditor/SelectionState.cpp | 14 +++++++------- editor/libeditor/SelectionState.h | 6 +++--- testing/web-platform/tests/editing/data/inserttext.js | 6 ++++++ 4 files changed, 20 insertions(+), 14 deletions(-)
diff --git a/editor/libeditor/HTMLEditor.cpp b/editor/libeditor/HTMLEditor.cpp index 822203e3c9773..d3a277633e45b 100644 --- a/editor/libeditor/HTMLEditor.cpp +++ b/editor/libeditor/HTMLEditor.cpp @@ -4939,8 +4939,8 @@ nsresult HTMLEditor::DoJoinNodes(nsIContent& aContentToKeep, MOZ_ASSERT(IsEditActionDataAvailable());
const uint32_t removingContentLength = aContentToRemove.Length(); - const Maybe<uint32_t> removingContentIndex = - aContentToRemove.ComputeIndexInParentNode(); + const Maybe<uint32_t> keepingContentExIndex = + aContentToKeep.ComputeIndexInParentNode();
// Remember all selection points. // XXX Do we need to restore all types of selections by ourselves? Normal @@ -5055,11 +5055,11 @@ nsresult HTMLEditor::DoJoinNodes(nsIContent& aContentToKeep, } }
- if (MOZ_LIKELY(removingContentIndex.isSome())) { + if (MOZ_LIKELY(keepingContentExIndex.isSome())) { DebugOnly<nsresult> rvIgnored = RangeUpdaterRef().SelAdjJoinNodes( EditorRawDOMPoint(&aContentToKeep, std::min(removingContentLength, aContentToKeep.Length())), - aContentToRemove, *removingContentIndex, + aContentToRemove, *keepingContentExIndex, JoinNodesDirection::LeftNodeIntoRightNode); NS_WARNING_ASSERTION(NS_SUCCEEDED(rvIgnored), "RangeUpdater::SelAdjJoinNodes() failed, but ignored"); diff --git a/editor/libeditor/SelectionState.cpp b/editor/libeditor/SelectionState.cpp index 42179428422c0..751cd21975381 100644 --- a/editor/libeditor/SelectionState.cpp +++ b/editor/libeditor/SelectionState.cpp @@ -327,7 +327,7 @@ nsresult RangeUpdater::SelAdjSplitNode(nsIContent& aOriginalContent,
nsresult RangeUpdater::SelAdjJoinNodes( const EditorRawDOMPoint& aStartOfRightContent, - const nsIContent& aRemovedContent, uint32_t aOffsetOfRemovedContent, + const nsIContent& aRemovedContent, uint32_t aOffsetOfJoinedContent, JoinNodesDirection aJoinNodesDirection) { MOZ_ASSERT(aStartOfRightContent.IsSetAndValid());
@@ -343,14 +343,14 @@ nsresult RangeUpdater::SelAdjJoinNodes( auto AdjustDOMPoint = [&](nsCOMPtr<nsINode>& aContainer, uint32_t& aOffset) -> void { if (aContainer == aStartOfRightContent.GetContainerParent()) { - // If the point is in common parent of joined content nodes and the - // point is after the removed point, decrease the offset. - if (aOffset > aOffsetOfRemovedContent) { + // If the point is in common parent of joined content nodes and it pointed + // after the right content node, decrease the offset. + if (aOffset > aOffsetOfJoinedContent) { aOffset--; } - // If it pointed the removed content node, move to start of right content - // which was moved from the removed content. - else if (aOffset == aOffsetOfRemovedContent) { + // If it pointed the right content node, adjust it to point ex-first + // content of the right node. + else if (aOffset == aOffsetOfJoinedContent) { aContainer = aStartOfRightContent.GetContainer(); aOffset = aStartOfRightContent.Offset(); } diff --git a/editor/libeditor/SelectionState.h b/editor/libeditor/SelectionState.h index 6d71d70d23b6b..b0ffdb42a10f6 100644 --- a/editor/libeditor/SelectionState.h +++ b/editor/libeditor/SelectionState.h @@ -231,12 +231,12 @@ class MOZ_STACK_CLASS RangeUpdater final { * in aRemovedContent. And this points where * the joined position. * @param aRemovedContent The removed content. - * @param aOffsetOfRemovedContent The offset which aRemovedContent was in - * its ex-parent. + * @param aOffsetOfJoinedContent The offset which the container of + * aStartOfRightContent was in its parent. */ nsresult SelAdjJoinNodes(const EditorRawDOMPoint& aStartOfRightContent, const nsIContent& aRemovedContent, - uint32_t aOffsetOfRemovedContent, + uint32_t aOffsetOfJoinedContent, JoinNodesDirection aJoinNodesDirection); void SelAdjInsertText(const dom::Text& aTextNode, uint32_t aOffset, uint32_t aInsertedLength); diff --git a/testing/web-platform/tests/editing/data/inserttext.js b/testing/web-platform/tests/editing/data/inserttext.js index 59057d03c9136..ca90b9ae9cadc 100644 --- a/testing/web-platform/tests/editing/data/inserttext.js +++ b/testing/web-platform/tests/editing/data/inserttext.js @@ -1374,4 +1374,10 @@ var browserTests = [ "<div style="white-space:pre-wrap">a<br><span style="padding:1px"></span><p>bc</p></div>", [true], {"inserttext":[false,false,"",false,false,""]}], +// https://bugzilla.mozilla.org/show_bug.cgi?id=1785801 +["<div>abc{</div><div>}efg</div>", + [["inserttext", "d"]], + "<div>abcdefg</div>", + [true], + {"inserttext":[false,false,"",false,false,""]}], ]
This is an automated email from the git hooks/post-receive script.
richard pushed a commit to branch geckoview-102.3.0esr-12.0-1 in repository tor-browser.
commit d74be19592019631c59fed3b25bba98e24bf66a4 Author: Ryan VanderMeulen ryanvm@gmail.com AuthorDate: Tue Sep 6 17:24:39 2022 -0400
Bug 1780839 - Fix browser_parsable_css.js failures. a=bustage DONTBUILD
This was removed in bug 1774017 and got missed in the uplift patch. --- browser/base/content/test/static/browser_parsable_css.js | 3 --- 1 file changed, 3 deletions(-)
diff --git a/browser/base/content/test/static/browser_parsable_css.js b/browser/base/content/test/static/browser_parsable_css.js index 5cfbfa6bc9b4d..dde51220c6014 100644 --- a/browser/base/content/test/static/browser_parsable_css.js +++ b/browser/base/content/test/static/browser_parsable_css.js @@ -145,9 +145,6 @@ let propNameWhitelist = [
// This variable is used from CSS embedded in JS in adjustableTitle.js { propName: "--icon-url", isFromDevTools: false }, - - // This variable is used from CSS embedded in JS in pdf.js - { propName: "--zoom-factor", isFromDevTools: false }, ];
// Add suffix to stylesheets' URI so that we always load them here and
This is an automated email from the git hooks/post-receive script.
richard pushed a commit to branch geckoview-102.3.0esr-12.0-1 in repository tor-browser.
commit bfcf5e8ea73200782ac78c740b61b3692a7a51ba Author: David Parks daparks@mozilla.com AuthorDate: Fri Jul 29 19:32:14 2022 +0000
Bug 1755700: Use StartAudioSession and StopAudioSession symmetrically r=cmartin, a=RyanVM
Moves StopAudioSession earlier -- to nsAppShell::Run -- where we call StartAudioSession.
Differential Revision: https://phabricator.services.mozilla.com/D152299 --- toolkit/xre/nsAppRunner.cpp | 13 ------------- widget/windows/nsAppShell.cpp | 16 +++++++++------- 2 files changed, 9 insertions(+), 20 deletions(-)
diff --git a/toolkit/xre/nsAppRunner.cpp b/toolkit/xre/nsAppRunner.cpp index 8b6b91d826dd3..79baf84160830 100644 --- a/toolkit/xre/nsAppRunner.cpp +++ b/toolkit/xre/nsAppRunner.cpp @@ -117,7 +117,6 @@ # include "mozilla/WinHeaderOnlyUtils.h" # include "mozilla/mscom/ProcessRuntime.h" # include "mozilla/mscom/ProfilerMarkers.h" -# include "mozilla/widget/AudioSession.h" # include "WinTokenUtils.h"
# if defined(MOZ_LAUNCHER_PROCESS) @@ -5943,18 +5942,6 @@ int XREMain::XRE_main(int argc, char* argv[], const BootstrapConfig& aConfig) { XRE_CleanupX11ErrorHandler(); #endif
-#if defined(XP_WIN) - bool wantAudio = true; -# ifdef MOZ_BACKGROUNDTASKS - if (BackgroundTasks::IsBackgroundTaskMode()) { - wantAudio = false; - } -# endif - if (MOZ_LIKELY(wantAudio)) { - mozilla::widget::StopAudioSession(); - } -#endif - #ifdef MOZ_INSTRUMENT_EVENT_LOOP mozilla::ShutdownEventTracing(); #endif diff --git a/widget/windows/nsAppShell.cpp b/widget/windows/nsAppShell.cpp index 664977a83028a..07f28b1d3308b 100644 --- a/widget/windows/nsAppShell.cpp +++ b/widget/windows/nsAppShell.cpp @@ -589,8 +589,8 @@ nsresult nsAppShell::Init() {
NS_IMETHODIMP nsAppShell::Run(void) { + bool wantAudio = true; if (XRE_IsParentProcess()) { - bool wantAudio = true; #ifdef MOZ_BACKGROUNDTASKS if (BackgroundTasks::IsBackgroundTaskMode()) { wantAudio = false; @@ -599,13 +599,11 @@ nsAppShell::Run(void) { if (MOZ_LIKELY(wantAudio)) { mozilla::widget::StartAudioSession(); } - }
- // Add an observer that disables the screen saver when requested by Gecko. - // For example when we're playing video in the foreground tab. Whole firefox - // only needs one wakelock instance, so we would only create one listener in - // chrome process to prevent requesting unnecessary wakelock. - if (XRE_IsParentProcess()) { + // Add an observer that disables the screen saver when requested by Gecko. + // For example when we're playing video in the foreground tab. Whole firefox + // only needs one wakelock instance, so we would only create one listener in + // chrome process to prevent requesting unnecessary wakelock. AddScreenWakeLockListener(); }
@@ -613,6 +611,10 @@ nsAppShell::Run(void) {
if (XRE_IsParentProcess()) { RemoveScreenWakeLockListener(); + + if (MOZ_LIKELY(wantAudio)) { + mozilla::widget::StopAudioSession(); + } }
return rv;
This is an automated email from the git hooks/post-receive script.
richard pushed a commit to branch geckoview-102.3.0esr-12.0-1 in repository tor-browser.
commit d03f74a543ed4bfd7e1d97735720b1477096df10 Author: David Parks daparks@mozilla.com AuthorDate: Fri Jul 29 19:32:14 2022 +0000
Bug 1755700: Simplify ownership of AudioSession r=cmartin, a=RyanVM
Concurrent operations in the MTA make the required lifetime of the AudioSession complex. In particular, it cannot be known when/if any methods are currently queued or being executed (in particular, Start). In order to make this safe, we keep the AudioSession at least as long as XPCOM is running background threads.
This patch also removes a long-defunct state machine and does some basic code cleanup.
Differential Revision: https://phabricator.services.mozilla.com/D152300 --- widget/windows/AudioSession.cpp | 212 +++++++++++++++------------------------- 1 file changed, 78 insertions(+), 134 deletions(-)
diff --git a/widget/windows/AudioSession.cpp b/widget/windows/AudioSession.cpp index cd04834c9f5da..c696f2f50af21 100644 --- a/widget/windows/AudioSession.cpp +++ b/widget/windows/AudioSession.cpp @@ -9,7 +9,10 @@ #include <windows.h> #include <mmdeviceapi.h>
+#include "mozilla/ClearOnShutdown.h" #include "mozilla/RefPtr.h" +#include "mozilla/ScopeExit.h" +#include "mozilla/StaticPtr.h" #include "nsIStringBundle.h"
#include "nsCOMPtr.h" @@ -33,6 +36,8 @@ namespace widget { */ class AudioSession final : public IAudioSessionEvents { public: + AudioSession(); + static AudioSession* GetSingleton();
// COM IUnknown @@ -54,29 +59,16 @@ class AudioSession final : public IAudioSessionEvents {
void Start(); void Stop(); - void StopInternal(); - void InitializeAudioSession();
nsresult GetSessionData(nsID& aID, nsString& aSessionName, nsString& aIconPath); nsresult SetSessionData(const nsID& aID, const nsString& aSessionName, const nsString& aIconPath);
- enum SessionState { - UNINITIALIZED, // Has not been initialized yet - STARTED, // Started - CLONED, // SetSessionInfoCalled, Start not called - FAILED, // The audio session failed to start - STOPPED, // Stop called - AUDIO_SESSION_DISCONNECTED // Audio session disconnected - }; - - SessionState mState; - private: - AudioSession(); - ~AudioSession(); - nsresult CommitAudioSessionData(); + ~AudioSession() = default; + + void StopInternal(const MutexAutoLock& aProofOfLock);
protected: RefPtr<IAudioSessionControl> mAudioSessionControl; @@ -90,44 +82,38 @@ class AudioSession final : public IAudioSessionEvents { NS_DECL_OWNINGTHREAD };
-static std::atomic<AudioSession*> sService = nullptr; +StaticRefPtr<AudioSession> sService;
void StartAudioSession() { - AudioSession::GetSingleton()->InitializeAudioSession(); - NS_DispatchBackgroundTask(NS_NewRunnableFunction( - "StartAudioSession", - []() -> void { AudioSession::GetSingleton()->Start(); })); + MOZ_ASSERT(NS_IsMainThread()); + MOZ_ASSERT(!sService); + sService = new AudioSession(); + + // Destroy AudioSession only after any background task threads have been + // stopped or abandoned. + ClearOnShutdown(&sService, ShutdownPhase::XPCOMShutdownFinal); + + NS_DispatchBackgroundTask( + NS_NewCancelableRunnableFunction("StartAudioSession", []() -> void { + MOZ_ASSERT(AudioSession::GetSingleton(), + "AudioSession should outlive background threads"); + AudioSession::GetSingleton()->Start(); + })); }
void StopAudioSession() { - RefPtr<AudioSession> audioSession; - AudioSession* temp = sService; - audioSession.swap(temp); - sService = nullptr; - - if (audioSession) { - NS_DispatchBackgroundTask(NS_NewRunnableFunction( - "StopAudioSession", - [audioSession]() -> void { audioSession->Stop(); })); - } -} - -AudioSession::AudioSession() : mMutex("AudioSessionControl") { - mState = UNINITIALIZED; + MOZ_ASSERT(NS_IsMainThread()); + MOZ_ASSERT(sService); + NS_DispatchBackgroundTask( + NS_NewRunnableFunction("StopAudioSession", []() -> void { + MOZ_ASSERT(AudioSession::GetSingleton(), + "AudioSession should outlive background threads"); + AudioSession::GetSingleton()->Stop(); + })); }
-AudioSession::~AudioSession() {} - AudioSession* AudioSession::GetSingleton() { - if (!sService) { - RefPtr<AudioSession> service = new AudioSession(); - AudioSession* temp = nullptr; - service.swap(temp); - sService = temp; - } - - // We don't refcount AudioSession on the Gecko side, we hold one single ref - // as long as the appshell is running. + MOZ_ASSERT(mscom::IsCurrentThreadMTA()); return sService; }
@@ -147,7 +133,7 @@ AudioSession::QueryInterface(REFIID iid, void** ppv) { return E_NOINTERFACE; }
-void AudioSession::InitializeAudioSession() { +AudioSession::AudioSession() : mMutex("AudioSessionControl") { // This func must be run on the main thread as // nsStringBundle is not thread safe otherwise MOZ_ASSERT(NS_IsMainThread()); @@ -155,8 +141,6 @@ void AudioSession::InitializeAudioSession() { MOZ_ASSERT(XRE_IsParentProcess(), "Should only get here in a chrome process!");
- if (mState != UNINITIALIZED) return; - nsCOMPtr<nsIStringBundleService> bundleService = do_GetService(NS_STRINGBUNDLE_CONTRACTID); MOZ_ASSERT(bundleService); @@ -181,25 +165,25 @@ void AudioSession::InitializeAudioSession() { // calls Stop. void AudioSession::Start() { MOZ_ASSERT(mscom::IsCurrentThreadMTA()); - MOZ_ASSERT(mState == UNINITIALIZED || mState == CLONED || - mState == AUDIO_SESSION_DISCONNECTED, - "State invariants violated");
const CLSID CLSID_MMDeviceEnumerator = __uuidof(MMDeviceEnumerator); const IID IID_IMMDeviceEnumerator = __uuidof(IMMDeviceEnumerator); const IID IID_IAudioSessionManager = __uuidof(IAudioSessionManager);
- HRESULT hr; - - mState = FAILED; - + MutexAutoLock lock(mMutex); + MOZ_ASSERT(!mAudioSessionControl); MOZ_ASSERT(!mDisplayName.IsEmpty() || !mIconPath.IsEmpty(), "Should never happen ...");
+ auto scopeExit = MakeScopeExit([&] { StopInternal(lock); }); + RefPtr<IMMDeviceEnumerator> enumerator; - hr = ::CoCreateInstance(CLSID_MMDeviceEnumerator, nullptr, CLSCTX_ALL, - IID_IMMDeviceEnumerator, getter_AddRefs(enumerator)); - if (FAILED(hr)) return; + HRESULT hr = + ::CoCreateInstance(CLSID_MMDeviceEnumerator, nullptr, CLSCTX_ALL, + IID_IMMDeviceEnumerator, getter_AddRefs(enumerator)); + if (FAILED(hr)) { + return; + }
RefPtr<IMMDevice> device; hr = enumerator->GetDefaultAudioEndpoint( @@ -215,50 +199,59 @@ void AudioSession::Start() { return; }
- MutexAutoLock lock(mMutex); hr = manager->GetAudioSessionControl(&GUID_NULL, 0, getter_AddRefs(mAudioSessionControl));
- if (FAILED(hr)) { + if (FAILED(hr) || !mAudioSessionControl) { return; }
// Increments refcount of 'this'. hr = mAudioSessionControl->RegisterAudioSessionNotification(this); if (FAILED(hr)) { - StopInternal(); return; }
- CommitAudioSessionData(); - mState = STARTED; -} + hr = mAudioSessionControl->SetGroupingParam( + (LPGUID) & (mSessionGroupingParameter), nullptr); + if (FAILED(hr)) { + return; + }
-void AudioSession::StopInternal() { - mMutex.AssertCurrentThreadOwns(); - - if (mAudioSessionControl && (mState == STARTED || mState == STOPPED)) { - // Decrement refcount of 'this' - mAudioSessionControl->UnregisterAudioSessionNotification(this); - // Deleting this COM object seems to require the STA / main thread. - // Audio code may concurrently be running on the main thread and it may - // block waiting for this to complete, creating deadlock. So we destroy the - // object on the main thread instead. - NS_DispatchToMainThread(NS_NewRunnableFunction( - "ShutdownAudioSession", - [asc = std::move(mAudioSessionControl)] { /* */ })); + hr = mAudioSessionControl->SetDisplayName(mDisplayName.get(), nullptr); + if (FAILED(hr)) { + return; } + + hr = mAudioSessionControl->SetIconPath(mIconPath.get(), nullptr); + if (FAILED(hr)) { + return; + } + + scopeExit.release(); }
void AudioSession::Stop() { - MOZ_ASSERT(mState == STARTED || mState == UNINITIALIZED || // XXXremove this - mState == FAILED, - "State invariants violated"); MOZ_ASSERT(mscom::IsCurrentThreadMTA());
MutexAutoLock lock(mMutex); - mState = STOPPED; - StopInternal(); + StopInternal(lock); +} + +void AudioSession::StopInternal(const MutexAutoLock& aProofOfLock) { + if (!mAudioSessionControl) { + return; + } + + // Decrement refcount of 'this' + mAudioSessionControl->UnregisterAudioSessionNotification(this); + + // Deleting the IAudioSessionControl COM object requires the STA/main thread. + // Audio code may concurrently be running on the main thread and it may + // block waiting for this to complete, creating deadlock. So we destroy the + // IAudioSessionControl on the main thread instead. + NS_DispatchToMainThread(NS_NewRunnableFunction( + "FreeAudioSession", [asc = std::move(mAudioSessionControl)] { /* */ })); }
void CopynsID(nsID& lhs, const nsID& rhs) { @@ -272,62 +265,24 @@ void CopynsID(nsID& lhs, const nsID& rhs) {
nsresult AudioSession::GetSessionData(nsID& aID, nsString& aSessionName, nsString& aIconPath) { - MOZ_ASSERT(mState == FAILED || mState == STARTED || mState == CLONED, - "State invariants violated"); - CopynsID(aID, mSessionGroupingParameter); aSessionName = mDisplayName; aIconPath = mIconPath;
- if (mState == FAILED) return NS_ERROR_FAILURE; - return NS_OK; }
nsresult AudioSession::SetSessionData(const nsID& aID, const nsString& aSessionName, const nsString& aIconPath) { - MOZ_ASSERT(mState == UNINITIALIZED, "State invariants violated"); MOZ_ASSERT(!XRE_IsParentProcess(), "Should never get here in a chrome process!"); - mState = CLONED; - CopynsID(mSessionGroupingParameter, aID); mDisplayName = aSessionName; mIconPath = aIconPath; return NS_OK; }
-nsresult AudioSession::CommitAudioSessionData() { - mMutex.AssertCurrentThreadOwns(); - - if (!mAudioSessionControl) { - // Stop() was called before we had a chance to do this. - return NS_OK; - } - - HRESULT hr = mAudioSessionControl->SetGroupingParam( - (LPGUID) & (mSessionGroupingParameter), nullptr); - if (FAILED(hr)) { - StopInternal(); - return NS_ERROR_FAILURE; - } - - hr = mAudioSessionControl->SetDisplayName(mDisplayName.get(), nullptr); - if (FAILED(hr)) { - StopInternal(); - return NS_ERROR_FAILURE; - } - - hr = mAudioSessionControl->SetIconPath(mIconPath.get(), nullptr); - if (FAILED(hr)) { - StopInternal(); - return NS_ERROR_FAILURE; - } - - return NS_OK; -} - STDMETHODIMP AudioSession::OnChannelVolumeChanged(DWORD aChannelCount, float aChannelVolumeArray[], @@ -352,19 +307,8 @@ AudioSession::OnIconPathChanged(LPCWSTR aIconPath, LPCGUID aContext) {
STDMETHODIMP AudioSession::OnSessionDisconnected(AudioSessionDisconnectReason aReason) { - { - MutexAutoLock lock(mMutex); - if (!mAudioSessionControl) return S_OK; - mAudioSessionControl->UnregisterAudioSessionNotification(this); - // Deleting this COM object seems to require the STA / main thread. - // Audio code may concurrently be running on the main thread and it may - // block waiting for this to complete, creating deadlock. So we destroy the - // object on the main thread instead. - NS_DispatchToMainThread(NS_NewRunnableFunction( - "FreeAudioSession", [asc = std::move(mAudioSessionControl)] { /* */ })); - mState = AUDIO_SESSION_DISCONNECTED; - } - Start(); // If it fails there's not much we can do. + Stop(); + Start(); return S_OK; }
This is an automated email from the git hooks/post-receive script.
richard pushed a commit to branch geckoview-102.3.0esr-12.0-1 in repository tor-browser.
commit a592e02f6803ddb5d8d12fccc0be6aa5ddf76694 Author: David Parks daparks@mozilla.com AuthorDate: Fri Jul 29 19:32:14 2022 +0000
Bug 1755700: Use AgileReference for cross-apartment AudioSessionControl use r=Jamie, a=RyanVM
A deadlock issue with our main thread audio playback handling arises when we try to destroy the AudioSessionControl from the MTA, despite it being an MTA object. We therefore dispatch its destruction to the main thread (STA) so the deadlock is impossible. In order to use it from the STA, we should wrap it in an AgileReference.
Differential Revision: https://phabricator.services.mozilla.com/D152301 --- widget/windows/AudioSession.cpp | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-)
diff --git a/widget/windows/AudioSession.cpp b/widget/windows/AudioSession.cpp index c696f2f50af21..a9d683195e33d 100644 --- a/widget/windows/AudioSession.cpp +++ b/widget/windows/AudioSession.cpp @@ -22,6 +22,7 @@ #include "nsThreadUtils.h" #include "nsXULAppAPI.h" #include "mozilla/Attributes.h" +#include "mozilla/mscom/AgileReference.h" #include "mozilla/mscom/Utils.h" #include "mozilla/Mutex.h" #include "mozilla/WindowsVersion.h" @@ -249,9 +250,23 @@ void AudioSession::StopInternal(const MutexAutoLock& aProofOfLock) { // Deleting the IAudioSessionControl COM object requires the STA/main thread. // Audio code may concurrently be running on the main thread and it may // block waiting for this to complete, creating deadlock. So we destroy the - // IAudioSessionControl on the main thread instead. + // IAudioSessionControl on the main thread instead. In order to do that, we + // need to marshall the object to the main thread's apartment with an + // AgileReference. + const IID IID_IAudioSessionControl = __uuidof(IAudioSessionControl); + auto agileAsc = MakeUniquemozilla::mscom::AgileReference( + IID_IAudioSessionControl, mAudioSessionControl); + mAudioSessionControl = nullptr; NS_DispatchToMainThread(NS_NewRunnableFunction( - "FreeAudioSession", [asc = std::move(mAudioSessionControl)] { /* */ })); + "FreeAudioSession", + [agileAsc = std::move(agileAsc), IID_IAudioSessionControl] { + RefPtr<IAudioSessionControl> toDelete; + [[maybe_unused]] HRESULT hr = agileAsc->Resolve( + IID_IAudioSessionControl, getter_AddRefs(toDelete)); + MOZ_ASSERT(SUCCEEDED(hr)); + // Now release the AgileReference which holds our only reference to the + // IAudioSessionControl. + })); }
void CopynsID(nsID& lhs, const nsID& rhs) {
This is an automated email from the git hooks/post-receive script.
richard pushed a commit to branch geckoview-102.3.0esr-12.0-1 in repository tor-browser.
commit ffc0e69dfd2c34b7e6eee61ccd639f1d02878d3f Author: David Parks daparks@mozilla.com AuthorDate: Fri Jul 29 19:32:15 2022 +0000
Bug 1755700: Serialize IAudioSessionControl destruction/re-creation r=cmartin, a=RyanVM
Destroying the IAudioSessionControl has concurrency issues with audio playback that require it to be done on the main thread. We have been trying to create a new AudioSessionControl on a background thread while this happens but some AudioSessionControl internals/dependencies are not thread safe. In order to avoid concurrency crashes, we destroy the old IAudioSessionControl on the main thread, then dispatch the restart to a background (MTA) thread asynchronously.
Differential Revision: https://phabricator.services.mozilla.com/D152302 --- widget/windows/AudioSession.cpp | 29 +++++++++++++++++++---------- 1 file changed, 19 insertions(+), 10 deletions(-)
diff --git a/widget/windows/AudioSession.cpp b/widget/windows/AudioSession.cpp index a9d683195e33d..a38e2a83f6de5 100644 --- a/widget/windows/AudioSession.cpp +++ b/widget/windows/AudioSession.cpp @@ -59,7 +59,7 @@ class AudioSession final : public IAudioSessionEvents { STDMETHODIMP OnStateChanged(AudioSessionState aState);
void Start(); - void Stop(); + void Stop(bool shouldRestart = false);
nsresult GetSessionData(nsID& aID, nsString& aSessionName, nsString& aIconPath); @@ -69,7 +69,8 @@ class AudioSession final : public IAudioSessionEvents { private: ~AudioSession() = default;
- void StopInternal(const MutexAutoLock& aProofOfLock); + void StopInternal(const MutexAutoLock& aProofOfLock, + bool shouldRestart = false);
protected: RefPtr<IAudioSessionControl> mAudioSessionControl; @@ -232,14 +233,15 @@ void AudioSession::Start() { scopeExit.release(); }
-void AudioSession::Stop() { +void AudioSession::Stop(bool shouldRestart) { MOZ_ASSERT(mscom::IsCurrentThreadMTA());
MutexAutoLock lock(mMutex); - StopInternal(lock); + StopInternal(lock, shouldRestart); }
-void AudioSession::StopInternal(const MutexAutoLock& aProofOfLock) { +void AudioSession::StopInternal(const MutexAutoLock& aProofOfLock, + bool shouldRestart) { if (!mAudioSessionControl) { return; } @@ -258,14 +260,22 @@ void AudioSession::StopInternal(const MutexAutoLock& aProofOfLock) { IID_IAudioSessionControl, mAudioSessionControl); mAudioSessionControl = nullptr; NS_DispatchToMainThread(NS_NewRunnableFunction( - "FreeAudioSession", - [agileAsc = std::move(agileAsc), IID_IAudioSessionControl] { + "FreeAudioSession", [agileAsc = std::move(agileAsc), + IID_IAudioSessionControl, shouldRestart] { RefPtr<IAudioSessionControl> toDelete; [[maybe_unused]] HRESULT hr = agileAsc->Resolve( IID_IAudioSessionControl, getter_AddRefs(toDelete)); MOZ_ASSERT(SUCCEEDED(hr)); // Now release the AgileReference which holds our only reference to the - // IAudioSessionControl. + // IAudioSessionControl, then maybe restart. + if (shouldRestart) { + NS_DispatchBackgroundTask( + NS_NewCancelableRunnableFunction("RestartAudioSession", [] { + AudioSession* as = AudioSession::GetSingleton(); + MOZ_ASSERT(as); + as->Start(); + })); + } })); }
@@ -322,8 +332,7 @@ AudioSession::OnIconPathChanged(LPCWSTR aIconPath, LPCGUID aContext) {
STDMETHODIMP AudioSession::OnSessionDisconnected(AudioSessionDisconnectReason aReason) { - Stop(); - Start(); + Stop(true /* shouldRestart */); return S_OK; }
This is an automated email from the git hooks/post-receive script.
richard pushed a commit to branch geckoview-102.3.0esr-12.0-1 in repository tor-browser.
commit 628f4b80a2627a57a0140f6a43c851dbdb5bc953 Author: Masatoshi Kimura VYV03354@nifty.ne.jp AuthorDate: Tue Sep 6 15:59:06 2022 +0000
Bug 1787633 - Make nsTextToSubURI::UnEscapeNonAsciiURI static. r=m_kato, a=RyanVM
Differential Revision: https://phabricator.services.mozilla.com/D156007 --- dom/jsurl/nsJSProtocolHandler.cpp | 12 +++--------- intl/uconv/moz.build | 1 + intl/uconv/nsITextToSubURI.idl | 1 + intl/uconv/nsTextToSubURI.cpp | 14 +++++++++++--- intl/uconv/nsTextToSubURI.h | 10 ++++++++-- uriloader/exthandler/win/nsMIMEInfoWin.cpp | 11 +++-------- 6 files changed, 27 insertions(+), 22 deletions(-)
diff --git a/dom/jsurl/nsJSProtocolHandler.cpp b/dom/jsurl/nsJSProtocolHandler.cpp index 2cee247736efc..170342be7ed6b 100644 --- a/dom/jsurl/nsJSProtocolHandler.cpp +++ b/dom/jsurl/nsJSProtocolHandler.cpp @@ -36,10 +36,10 @@ #include "mozilla/dom/Document.h" #include "nsIObjectInputStream.h" #include "nsIObjectOutputStream.h" -#include "nsITextToSubURI.h" #include "nsIWritablePropertyBag2.h" #include "nsIContentSecurityPolicy.h" #include "nsSandboxFlags.h" +#include "nsTextToSubURI.h" #include "mozilla/BasePrincipal.h" #include "mozilla/CycleCollectedJSContext.h" #include "mozilla/dom/AutoEntryScript.h" @@ -1100,15 +1100,9 @@ NS_IMPL_ISUPPORTS(nsJSProtocolHandler, nsIProtocolHandler) const nsCString& aSpec, const char* aCharset, nsACString& aUTF8Spec) { aUTF8Spec.Truncate();
- nsresult rv; - - nsCOMPtr<nsITextToSubURI> txtToSubURI = - do_GetService(NS_ITEXTTOSUBURI_CONTRACTID, &rv); - NS_ENSURE_SUCCESS(rv, rv); - nsAutoString uStr; - rv = txtToSubURI->UnEscapeNonAsciiURI(nsDependentCString(aCharset), aSpec, - uStr); + nsresult rv = nsTextToSubURI::UnEscapeNonAsciiURI( + nsDependentCString(aCharset), aSpec, uStr); NS_ENSURE_SUCCESS(rv, rv);
if (!IsAscii(uStr)) { diff --git a/intl/uconv/moz.build b/intl/uconv/moz.build index 8d9d6250a3b04..e83d8704d83f7 100644 --- a/intl/uconv/moz.build +++ b/intl/uconv/moz.build @@ -15,6 +15,7 @@ XPIDL_MODULE = "uconv"
EXPORTS += [ "nsConverterInputStream.h", + "nsTextToSubURI.h", ]
UNIFIED_SOURCES += [ diff --git a/intl/uconv/nsITextToSubURI.idl b/intl/uconv/nsITextToSubURI.idl index da709928a8f00..2b7598cc325fa 100644 --- a/intl/uconv/nsITextToSubURI.idl +++ b/intl/uconv/nsITextToSubURI.idl @@ -55,5 +55,6 @@ interface nsITextToSubURI : nsISupports * @throws NS_ERROR_UCONV_NOCONV when there is no decoder for aCharset * or NS_ERROR_UDEC_ILLEGALINPUT in case of conversion failure */ + [binaryname(UnEscapeNonAsciiURIJS)] AString unEscapeNonAsciiURI(in ACString aCharset, in AUTF8String aURIFragment); }; diff --git a/intl/uconv/nsTextToSubURI.cpp b/intl/uconv/nsTextToSubURI.cpp index 86b71d21c60d9..e70d9ccbd8917 100644 --- a/intl/uconv/nsTextToSubURI.cpp +++ b/intl/uconv/nsTextToSubURI.cpp @@ -71,6 +71,7 @@ static bool statefulCharset(const char* charset) { return false; }
+// static nsresult nsTextToSubURI::convertURItoUnicode(const nsCString& aCharset, const nsCString& aURI, nsAString& aOut) { @@ -141,9 +142,16 @@ NS_IMETHODIMP nsTextToSubURI::UnEscapeURIForUI(const nsACString& aURIFragment, }
NS_IMETHODIMP -nsTextToSubURI::UnEscapeNonAsciiURI(const nsACString& aCharset, - const nsACString& aURIFragment, - nsAString& _retval) { +nsTextToSubURI::UnEscapeNonAsciiURIJS(const nsACString& aCharset, + const nsACString& aURIFragment, + nsAString& _retval) { + return UnEscapeNonAsciiURI(aCharset, aURIFragment, _retval); +} + +// static +nsresult nsTextToSubURI::UnEscapeNonAsciiURI(const nsACString& aCharset, + const nsACString& aURIFragment, + nsAString& _retval) { nsAutoCString unescapedSpec; NS_UnescapeURL(PromiseFlatCString(aURIFragment), esc_AlwaysCopy | esc_OnlyNonASCII, unescapedSpec); diff --git a/intl/uconv/nsTextToSubURI.h b/intl/uconv/nsTextToSubURI.h index 6b2b742888b3e..1eaeb554dc89b 100644 --- a/intl/uconv/nsTextToSubURI.h +++ b/intl/uconv/nsTextToSubURI.h @@ -15,12 +15,18 @@ class nsTextToSubURI : public nsITextToSubURI { NS_DECL_ISUPPORTS NS_DECL_NSITEXTTOSUBURI
+ // Thread-safe function for C++ callers + static nsresult UnEscapeNonAsciiURI(const nsACString& aCharset, + const nsACString& aURIFragment, + nsAString& _retval); + private: virtual ~nsTextToSubURI();
// We assume that the URI is encoded as UTF-8. - nsresult convertURItoUnicode(const nsCString& aCharset, const nsCString& aURI, - nsAString& _retval); + static nsresult convertURItoUnicode(const nsCString& aCharset, + const nsCString& aURI, + nsAString& _retval);
// Characters defined in netwerk/dns/IDNCharacterBlocklist.inc or via the // network.IDN.extra_allowed_chars and network.IDN.extra_blocked_chars prefs. diff --git a/uriloader/exthandler/win/nsMIMEInfoWin.cpp b/uriloader/exthandler/win/nsMIMEInfoWin.cpp index ccc04ec96afcb..1eaf7f6567bf8 100644 --- a/uriloader/exthandler/win/nsMIMEInfoWin.cpp +++ b/uriloader/exthandler/win/nsMIMEInfoWin.cpp @@ -16,7 +16,7 @@ #include <shlobj.h> #include "nsIWindowsRegKey.h" #include "nsUnicharUtils.h" -#include "nsITextToSubURI.h" +#include "nsTextToSubURI.h" #include "nsVariant.h" #include "mozilla/CmdLineAndEnvUtils.h" #include "mozilla/ShellHeaderOnlyUtils.h" @@ -287,13 +287,8 @@ nsresult nsMIMEInfoWin::LoadUriInternal(nsIURI* aURL) {
// Unescape non-ASCII characters in the URL nsAutoString utf16Spec; - - nsCOMPtr<nsITextToSubURI> textToSubURI = - do_GetService(NS_ITEXTTOSUBURI_CONTRACTID, &rv); - NS_ENSURE_SUCCESS(rv, rv); - - if (NS_FAILED(textToSubURI->UnEscapeNonAsciiURI("UTF-8"_ns, urlSpec, - utf16Spec))) { + if (NS_FAILED(nsTextToSubURI::UnEscapeNonAsciiURI("UTF-8"_ns, urlSpec, + utf16Spec))) { CopyASCIItoUTF16(urlSpec, utf16Spec); }
This is an automated email from the git hooks/post-receive script.
richard pushed a commit to branch geckoview-102.3.0esr-12.0-1 in repository tor-browser.
commit 80b8c7a3e34a0b038bb5327d31e4ec40d2f7a2ac Author: ffxbld ffxbld@mozilla.com AuthorDate: Thu Sep 8 11:17:49 2022 +0000
No Bug, mozilla-esr102 repo-update HSTS HPKP remote-settings - a=repo-update r=RyanVM
Differential Revision: https://phabricator.services.mozilla.com/D156816 --- security/manager/ssl/StaticHPKPins.h | 2 +- security/manager/ssl/nsSTSPreloadList.inc | 539 +++++++++------------ .../dumps/blocklists/addons-bloomfilters.json | 41 +- .../dumps/security-state/intermediates.json | 110 ++--- 4 files changed, 332 insertions(+), 360 deletions(-)
diff --git a/security/manager/ssl/StaticHPKPins.h b/security/manager/ssl/StaticHPKPins.h index 7aca30f0aaeed..78fa6b67a9542 100644 --- a/security/manager/ssl/StaticHPKPins.h +++ b/security/manager/ssl/StaticHPKPins.h @@ -1125,4 +1125,4 @@ static const TransportSecurityPreload kPublicKeyPinningPreloadList[] = {
static const int32_t kUnknownId = -1;
-static const PRTime kPreloadPKPinsExpirationTime = INT64_C(1670847555992000); +static const PRTime kPreloadPKPinsExpirationTime = INT64_C(1671102568343000); diff --git a/security/manager/ssl/nsSTSPreloadList.inc b/security/manager/ssl/nsSTSPreloadList.inc index d9edc5e63160e..26acc230748c2 100644 --- a/security/manager/ssl/nsSTSPreloadList.inc +++ b/security/manager/ssl/nsSTSPreloadList.inc @@ -8,7 +8,7 @@ /*****************************************************************************/
#include <stdint.h> -const PRTime gPreloadListExpirationTime = INT64_C(1673266750804000); +const PRTime gPreloadListExpirationTime = INT64_C(1673521764602000); %% 0--1.de, 1 0-0.io, 1 @@ -46,22 +46,22 @@ const PRTime gPreloadListExpirationTime = INT64_C(1673266750804000); 001yapan.com, 1 002.ro, 1 00220022.net, 1 -00228.am, 0 +00228.am, 1 00228.org, 1 00228555.com, 1 00228999.com, 1 00228vip5.com, 1 00228vip6.com, 1 00228vip8.com, 1 -00228vv.com, 0 +00228vv.com, 1 00228w.com, 1 -00228ww.com, 0 -00228x.com, 0 -00228xx.com, 0 -00228y.com, 0 -00228yy.com, 0 -00228z.com, 0 -00228zz.com, 0 +00228ww.com, 1 +00228x.com, 1 +00228xx.com, 1 +00228y.com, 1 +00228yy.com, 1 +00228z.com, 1 +00228zz.com, 1 002k8.com, 0 003.mx, 1 00321365.com, 1 @@ -123,7 +123,6 @@ const PRTime gPreloadListExpirationTime = INT64_C(1673266750804000); 019zl.com, 1 01bargainhunter.com, 1 01electronica.com.ar, 1 -01media.fr, 1 01seguridad.com.ar, 1 01smh.com, 1 01tools.com, 1 @@ -1154,7 +1153,6 @@ const PRTime gPreloadListExpirationTime = INT64_C(1673266750804000); 1750studios.com, 0 175k8.com, 0 175ks.com, 1 -1768calc.com.au, 1 178ks.net, 1 17901.com, 1 17920.com, 1 @@ -1234,7 +1232,6 @@ const PRTime gPreloadListExpirationTime = INT64_C(1673266750804000); 18521.com, 1 185k8.com, 1 186526.club, 1 -186526.top, 1 186526.xyz, 1 1869365.com, 0 186kb.com, 1 @@ -1600,14 +1597,14 @@ const PRTime gPreloadListExpirationTime = INT64_C(1673266750804000); 22884.org, 1 2288422.com, 1 2288499.com, 1 -22884a.com, 0 -22884b.com, 0 -22884c.com, 0 -22884d.com, 0 -22884e.com, 0 -22884f.com, 0 -22884g.com, 0 -22884h.com, 0 +22884a.com, 1 +22884b.com, 1 +22884c.com, 1 +22884d.com, 1 +22884e.com, 1 +22884f.com, 1 +22884g.com, 1 +22884h.com, 1 22994.org, 1 2299411.com, 1 2299422.com, 1 @@ -2389,8 +2386,8 @@ const PRTime gPreloadListExpirationTime = INT64_C(1673266750804000); 3798.com, 0 37987.com, 1 37987d.com, 1 -37987e.com, 0 -37987f.com, 0 +37987e.com, 1 +37987f.com, 1 379efss.com, 1 37zk.com, 1 37zw.com, 1 @@ -3679,7 +3676,6 @@ const PRTime gPreloadListExpirationTime = INT64_C(1673266750804000); 666365iosapp.com, 0 666365t.com, 1 6664553.com, 1 -666555bet.com, 1 666668722.com, 1 666689999.xyz, 1 666777bet.com, 1 @@ -4053,8 +4049,8 @@ const PRTime gPreloadListExpirationTime = INT64_C(1673266750804000); 769sc.com, 0 76networks.tk, 1 77-elagage.fr, 1 -77018dd.com, 0 -77018vip.com, 0 +77018dd.com, 1 +77018vip.com, 1 77168365.com, 1 77177.de, 1 77321365.com, 0 @@ -4512,15 +4508,15 @@ const PRTime gPreloadListExpirationTime = INT64_C(1673266750804000); 8861ks.com, 1 88661234.com, 1 886666f.com, 1 -886666l.com, 0 -886666n.com, 0 -886666p.com, 0 +886666l.com, 1 +886666n.com, 1 +886666p.com, 1 886666q.com, 1 886666r.com, 1 886666s.com, 1 -886666t.com, 0 -886666u.com, 0 -886666v.com, 0 +886666t.com, 1 +886666u.com, 1 +886666v.com, 1 8866d88.com, 1 8868ty8.com, 1 8869ks.com, 1 @@ -6037,7 +6033,6 @@ accolade.com.br, 0 accoladescreens.com.au, 1 accomexicana.com.mx, 1 accomexico.com, 1 -accontabilidad.cl, 1 accord-application.com, 1 accordable.gq, 1 accordimento.de, 1 @@ -6823,7 +6818,6 @@ advaithnikhi.ml, 1 advaithnikhi.tk, 1 advance.hr, 1 advanced-online.eu, 1 -advanced.info, 0 advancedboilers.com, 1 advancedbotoxclinic.com, 1 advanceddermmohssurgery.com, 1 @@ -7225,7 +7219,6 @@ afiyetolsun.jp, 1 aflam-online.tk, 1 aflattr.com, 1 aflebedevo.tk, 1 -afoikrali.gr, 1 afonso.io, 1 aforadearrastu.tk, 1 aforism.tk, 1 @@ -7747,7 +7740,6 @@ agworkers.com, 1 agzlapp.com, 1 ahanet.tk, 1 ahansen.is, 0 -ahbap.org, 1 ahc.fyi, 1 ahccorleone.tk, 1 ahcpb.com, 1 @@ -7757,7 +7749,6 @@ ahealthyjourney.ca, 1 ahegaoroulette.com, 1 ahelos.tk, 1 ahenkerp.com, 1 -ahero4all.org, 1 ahg-offices.fr, 1 ahhcomfortshoes.com, 1 ahidta.gov, 1 @@ -8340,7 +8331,6 @@ ajorban.com, 1 ajramos.tk, 1 ajsb85.com, 1 ajscred.online, 1 -ajsrp.com, 1 ajt.io, 1 ajutor.tk, 1 ajvco.com.hk, 1 @@ -8993,7 +8983,6 @@ algerie-music.tk, 1 alghadpowersolutions.com, 1 alghanimcatering.com, 1 alghubaibatours.com, 0 -algoarmada.com, 1 algoentremanos.com, 1 algofactory.de, 1 algolia.com, 1 @@ -9567,7 +9556,6 @@ alpencams.nl, 1 alpenguides.de, 1 alpenhof-suedtirol.com, 1 alpenjuice.com, 1 -alpenrose.de, 1 alperenremziunal.me, 1 alperozmen.kim, 1 alpertron.com.ar, 1 @@ -10546,6 +10534,7 @@ andalosse.tk, 1 andaluciaboard.tk, 1 andalusiaal.gov, 1 andantepiano.studio, 1 +andcable.com, 1 andel.info, 0 anderbelt.com.br, 1 anders.hamburg, 1 @@ -11066,6 +11055,7 @@ anjocerdena.com, 1 anjoola.com, 1 ankane.org, 1 ankaraarabakiralama.name.tr, 1 +ankaraarackiralama.name.tr, 1 ankaraciftkabin.com, 1 ankaradaozelders.tk, 1 ankaraevdenevenakliyat.name.tr, 1 @@ -11319,6 +11309,7 @@ anthonycarbonaro.com, 0 anthonychampagne.fr, 1 anthonychampagne.me, 1 anthonydegrande.tk, 1 +anthonyellis.com, 1 anthonyfontanez.com, 1 anthonygaidot.fr, 1 anthonylaberge.tk, 1 @@ -11649,6 +11640,7 @@ apercloud.es, 1 aperioadvice.ga, 1 aperiomoney.ga, 1 aperiotaxation.ga, 1 +apert.be, 1 aperta.ro, 1 aperta.shop, 1 apertis.org, 0 @@ -11704,7 +11696,6 @@ apination.com, 1 apio.systems, 1 apiora.ru, 1 apiordie.com, 1 -apipalominos.cl, 1 apiplus.fr, 1 apipsandiego.ga, 1 apipsandiego.gq, 1 @@ -11719,6 +11710,7 @@ apisyouwonthate.com, 0 apit-kovrov.ru, 1 apitodemestre.com.br, 1 apiu.me, 1 +apix.uz, 1 apk-world.cf, 1 apk.li, 1 apk4fun.com, 1 @@ -12005,7 +11997,6 @@ apsa.paris, 1 apsb.cz, 1 apsbengdubi.org, 1 apse.ga, 1 -apssb.in, 1 apssolucoesfinanceiras.online, 1 apstats.tk, 1 apstudynotes.org, 1 @@ -12514,6 +12505,7 @@ arizonatech.tk, 1 arjan.nl, 1 arjandejong.eu, 1 arjanenthijs.nl, 1 +arjanhofmann.nl, 1 arjansteevels.nl, 1 arjanvaartjes.net, 1 arjen-robben.tk, 1 @@ -12664,7 +12656,6 @@ arod.tk, 1 arofabric.com, 1 arogov.com, 1 arokha.com, 1 -aroma-dum.com.ua, 1 aroma-therapy.tk, 1 aroma24.ml, 1 aromachat.eu, 1 @@ -12676,6 +12667,7 @@ aromatherapy.cf, 1 aromatlas.com, 1 aromatraining.com, 1 aromex.ml, 1 +aroncull.de, 1 aronsonrosenthal.com, 1 aroonchande.com, 0 arooshi.website, 1 @@ -12853,6 +12845,7 @@ artgaragecrewe.com, 1 artgorod.tk, 1 artgranit.tk, 1 arthousecarousel.co.uk, 1 +arthritisgrouppa.com, 1 arthritisrheumaticdiseases.com, 1 arthrosis.ml, 1 arthur.cn, 1 @@ -13182,7 +13175,6 @@ ashtonwealth.com, 1 ashtronaut.space, 1 ashutoshmishra.org, 1 ashutov.rocks, 0 -ashwainfo.in, 1 ashwaubenon.gov, 1 asia-gazette.com, 1 asia-global-risk.com, 1 @@ -14453,6 +14445,7 @@ autoparts.sh, 1 autoparts.wf, 1 autopartso.com, 1 autopaulito.pt, 1 +autopocket.co, 1 autoportal.tk, 1 autopril.com, 1 autoprogconsortium.ga, 1 @@ -14818,7 +14811,6 @@ avogel.si, 1 avogelusa.com, 1 avoids-troops.gq, 1 avoinna24.fi, 1 -avoka.do, 1 avondaleestatesga.gov, 1 avonindiana.gov, 1 avonlearningcampus.com, 1 @@ -15017,7 +15009,7 @@ ayatosuzuki.com, 1 aycasac.com, 1 aycomba.de, 1 aydacosmetics.com, 1 -aydahwa.com, 1 +aydahwa.com, 0 aydesignco.com, 1 aydinescmagazin.tk, 1 aydinhaberleri.tk, 1 @@ -15818,7 +15810,6 @@ bahrainonline.tk, 1 bahrep.com, 1 baidu-s.com, 0 baiduo.com, 1 -baif.hr, 1 baikal.cf, 1 baikalfond.ml, 1 baikalppk.tk, 1 @@ -16167,7 +16158,6 @@ banking-services.tk, 1 bankingheralders.ga, 1 bankinter.pt, 1 bankio.se, 1 -bankipmr.ru, 0 bankiros.ru, 1 bankitt.network, 1 bankmno.ga, 1 @@ -16259,7 +16249,6 @@ baraxolka.ga, 1 baraxolka.ml, 1 barbaderespeito.com.br, 1 barbaleonecuador.com, 1 -barbara-bertagnolli.co.uk, 1 barbara-fuchs-gruene-fuerth.de, 1 barbarabowersrealty.com, 1 barbarabryce.com, 1 @@ -16731,7 +16720,7 @@ bazos.pl, 1 bazos.sk, 1 bazziergraphik.com, 1 bb.church, 1 -bb00228.com, 0 +bb00228.com, 1 bb057.com, 0 bb087.com, 0 bb168.cc, 0 @@ -17465,6 +17454,7 @@ belzlongroup.com, 1 bembee.tk, 1 bemcorp.de, 1 bemindly.com, 1 +bemmequerenxovais.com.br, 1 bemsoft.pl, 1 ben-deneme.gq, 1 ben-energy.com, 0 @@ -18649,6 +18639,7 @@ bhpin.pl, 1 bhpropco.com, 1 bhrenovations.com, 1 bhserralheria.com.br, 1 +bhtelecom.ba, 1 bhub.tk, 1 bhuntr.com, 1 bhuvanreddy.space, 1 @@ -19046,7 +19037,7 @@ billusherwood.com, 1 billview.com.au, 1 billwebb.com.au, 1 billy.pictures, 1 -billy.wales, 1 +billy.wales, 0 billybob.tk, 1 billykwok.me, 1 billyoh.com, 1 @@ -19104,7 +19095,7 @@ binaryvision.tk, 1 binbin9.com, 1 binbo.cz, 1 binbo.sk, 1 -bind.ch, 1 +bind.ch, 0 bindb.com, 1 binding-problem.com, 1 bindsolutions.com, 1 @@ -19762,6 +19753,7 @@ black-mail.nl, 1 black-market.ga, 1 black-pool.net, 1 black-raven.fr, 1 +black-rider-studio.eu, 1 black-rosella.tk, 1 black-side.tk, 1 black.dating, 1 @@ -20320,6 +20312,7 @@ blueparrotpainting.com, 1 bluepearl.tk, 1 blueperil.de, 1 bluepostbox.de, 1 +blueprintma.com, 1 blueprintrealtytn.com, 1 bluepromocode.com, 1 bluerange.io, 1 @@ -20374,7 +20367,6 @@ blui.ml, 0 bluiandaj.ml, 1 bluicraft.tk, 1 bluimedia.com, 1 -blumagine.de, 1 blumando.de, 1 blumen-garage.de, 1 blumenbasteln.ml, 1 @@ -20472,6 +20464,7 @@ boat-engines.eu, 1 boathut.com.au, 1 boatlogs.herokuapp.com, 1 boatmanwindsor.com, 1 +boatsandoats.com, 1 boatseller.org, 0 boattour.ru, 1 boattrader.com.au, 1 @@ -20494,6 +20487,7 @@ bobbyrobinson.tk, 1 bobcoffee.com.br, 1 bobcopeland.com, 1 bobek.cz, 1 +bobfilm.ml, 1 bobigames.com, 1 bobiji.com, 0 bobijoel.ml, 1 @@ -20529,6 +20523,7 @@ bocloud.eu, 1 bodas.com.mx, 1 bodas.net, 1 bodascartagena.com, 1 +bodclansite.tk, 1 bodegademuebles.com, 1 bodegagarces.tk, 1 bodegasvirei.com, 0 @@ -20645,7 +20640,7 @@ boldbeau.pt, 1 bolderly.com, 1 boldhaus.de, 1 boldogsagadni.hu, 1 -boldsmartlock.com, 1 +boldsmartlock.com, 0 bolehvpn.net, 1 bolektro.de, 1 bolele.org, 1 @@ -20885,6 +20880,7 @@ booldamm.llc, 1 boombangcreditos.tk, 1 boomboomboat.com, 1 boomerangworkouts.com, 1 +boomersclub.com.au, 1 boomersurf.com, 1 boomfestival.org, 1 boomgamer.ru, 1 @@ -21592,16 +21588,6 @@ bravica.tk, 1 bravo.bi, 1 bravoasociados.com, 1 bravobet.et, 1 -bravodeal.com, 1 -bravodescuento.es, 1 -bravogutschein.at, 1 -bravogutschein.de, 1 -bravokorting.nl, 1 -bravokupony.pl, 1 -bravopromo.be, 1 -bravopromo.fr, 1 -bravosconto.it, 1 -bravovoucher.co.uk, 1 bravurasolutions.com, 1 brawin.cf, 1 brawlstarsitalia.com, 1 @@ -21728,7 +21714,6 @@ breton.pm, 1 bretonhouse.ca, 1 brett.ml, 1 brettabel.com, 1 -brettcornwall.com, 1 brettelliff.com, 1 bretti.net, 1 brettlawyer.com, 1 @@ -21796,7 +21781,6 @@ brickadia.com, 1 brickfilmfestival.tk, 1 brickftp.com, 1 brickland.tk, 1 -bricklet.com.au, 1 bricks-clicks.com, 1 bricks4kidzelearn.com, 1 bricksandmotor.co.uk, 1 @@ -21804,7 +21788,6 @@ brickstreettrio.com, 1 brickvortex.com, 1 brickweb.co.uk, 1 brickwerks.io, 1 -brickzfinance.com, 1 bricmon.tk, 1 bricolajeux.ch, 0 bricolea.fr, 1 @@ -21838,7 +21821,6 @@ bridgepayday.ph, 1 bridgeportlaboratory.tk, 1 bridgercanyonfiremt.gov, 1 bridges.ml, 1 -bridges2understanding.com, 1 bridgesinbelize.org, 1 bridgethailand28chidlom.com, 1 bridgetownrecords.tk, 1 @@ -22265,6 +22247,10 @@ bspecialfx.nl, 1 bsq1492.com, 1 bsquared.org, 1 bsrueti.ch, 1 +bss-systems.net, 1 +bss.com.ph, 1 +bss.solutions, 1 +bss.systems, 1 bss01.de, 1 bssolvfagen-pre-storeswa-wap.azurewebsites.net, 1 bsstainless.com, 1 @@ -22321,7 +22307,6 @@ btraviswrightmps.com, 1 btraviswrightmps.org, 1 btrb.ml, 1 btrfs.no, 1 -btsapem.com, 1 btsline.co.id, 1 btslr.co, 1 btsoft.eu, 1 @@ -22551,7 +22536,6 @@ bukkenfan.jp, 1 bukowski.se, 1 bukowski.tk, 1 bukpcszerviz.hu, 1 -buksu.edu.ph, 1 bukularis.ga, 1 bul3seas.eu, 1 bulario.com, 1 @@ -24467,7 +24451,7 @@ capriccio.to, 1 caprice-holdings.co.uk, 1 caprichosdevicky.com, 1 caprigo.ru, 1 -capris.cr, 1 +capris.cr, 0 capro.global, 1 caps-hats.tk, 1 caps.equipment, 1 @@ -24885,7 +24869,6 @@ carrozziere.roma.it, 1 carry.luxe, 1 carryvanbruggen.tk, 1 cars4salecy.com, 1 -carsales.com.ng, 0 carseatchecks.ca, 1 carshippingcarriers.com, 1 carsinsuranceis.com, 1 @@ -25565,7 +25548,7 @@ cby.im, 0 cc-customer.de, 1 cc.edu.rs, 1 cc.hn, 1 -cc00228.com, 0 +cc00228.com, 1 cc5197.co, 1 cc6729.co, 1 cc6729.com, 0 @@ -25634,6 +25617,7 @@ ccr.ovh, 1 ccrun.tk, 1 ccsaposs.com, 1 ccshire.ga, 1 +ccsistema.com, 1 ccsk.training, 1 ccskills.org.uk, 1 ccsource.org, 1 @@ -26114,6 +26098,7 @@ cevo.com.hr, 1 cevt.ar, 1 cewek.ml, 1 cewood.xyz, 1 +ceyhanmolla.com, 1 ceyizlikelisleri.com, 1 cezdent.com, 1 cf-connect.nl, 1 @@ -26922,6 +26907,7 @@ children1st.jp, 1 childrenandmedia.org.au, 1 childrenfirstalways.org, 1 childreninadversity.gov, 1 +childrenoftheshadow.org, 1 childrens-room.com, 1 childrensdentalranch.com, 1 childrensentertainmentleicester.co.uk, 1 @@ -27176,7 +27162,6 @@ chriscutts.uk, 1 chrisdasie.com, 1 chrisdecairos.ca, 1 chrisebert.net, 1 -chriseldon.com, 1 chrisfinazzo.com, 0 chrisgieger.com, 1 chrisirwin.ca, 1 @@ -27546,7 +27531,7 @@ cimet.com.au, 1 cimet.io, 1 cimfax.com, 1 cimtools.net, 1 -cin.net.au, 1 +cin.net.au, 0 cinafilm.com, 1 cinay.pw, 1 cinccapital.com, 1 @@ -28169,7 +28154,6 @@ cleanertoday.com, 1 cleanfacesest.ga, 1 cleanforce.ca, 1 cleango.pl, 1 -cleangreen.tech, 1 cleanhortihigienizados.com.br, 1 cleanhouse2000.us, 1 cleaningbyrosie.com, 0 @@ -28441,6 +28425,7 @@ cliqz.com, 1 clive.io, 1 cliveptr.cc, 1 clixa.com, 1 +clixz.nl, 1 clmbr.ch, 0 clmde.de, 1 clmz.nl, 1 @@ -29179,7 +29164,6 @@ coffeetom.de, 1 coffeist.com, 1 cofidis-group.com, 1 cofinco.nl, 1 -cofob.ru, 1 cofradiaqueimada.tk, 1 cogent.cc, 1 cogetop.com.br, 1 @@ -29584,7 +29568,6 @@ comicspornoxxx.com, 1 comicstrove.com, 1 comicsymanga.com, 1 comicwiki.dk, 1 -comicyears.com, 1 comidina.com, 1 comingto.icu, 1 comiq.io, 1 @@ -29647,7 +29630,6 @@ communication-services.tk, 1 communiques.info, 1 communiquons.org, 1 communist-party.tk, 1 -community-cupboard.org, 0 community-pro.de, 1 community-pro.net, 1 community-services.cz, 0 @@ -29786,7 +29768,6 @@ comprar.club, 1 comprarefiereygana.com, 1 comprarimpresoras-3d.com, 1 comprarpapelhigienico.online, 1 -comprarparaguas.online, 1 comprauncelular.com, 1 comprax.nl, 1 compree.com, 1 @@ -29803,7 +29784,6 @@ compucastell.ch, 1 compucorner.mx, 1 compucorner.tk, 1 compudoc.tk, 1 -compufix.ml, 1 compunetwor.com, 1 compusrit.tk, 1 compustore.pe, 1 @@ -30082,6 +30062,7 @@ connictro.de, 1 conniesacademy.com, 1 connollycove.com, 1 connorhatch.com, 1 +connorjc.io, 1 connorlim.net, 1 connornoddin.com, 1 conntrack.com, 1 @@ -30296,6 +30277,7 @@ contro.ga, 1 contro.gq, 1 contro.ml, 1 contro.tk, 1 +controladores.net, 1 controlautocom.com.br, 1 controlbooth.com, 1 controle-exportations.fr, 1 @@ -30563,7 +30545,6 @@ cornerperk.com, 1 cornerstone.network, 1 cornerstone.photography, 1 cornerstonecmc.org, 1 -cornerstonefoundationrepairllc.com, 1 cornerstonenorthwest.com, 1 cornertoyshop.ga, 1 corniche.com, 1 @@ -31266,6 +31247,7 @@ creativenz.govt.nz, 1 creativephysics.ml, 1 creativescorpio.tk, 1 creativesectors.tk, 1 +creativesmm.com.ua, 1 creativestories.me, 1 creativetechsolution.in, 1 creativeweb.biz, 1 @@ -31932,7 +31914,6 @@ ctf.link, 1 cthomas.work, 1 cthu.io, 1 cthulhuden.com, 1 -ctir.gov.br, 1 ctj.im, 1 ctknight.me, 1 ctkwwri.org, 1 @@ -32016,10 +31997,8 @@ cucabot.tk, 1 cucaracha.tk, 1 cuchichi.es, 1 cuckold-secrets.tk, 1 -cuckoldjungle.com, 1 cuckoo.ee, 1 cuddlecat.io, 1 -cuddlecomfort.com, 1 cuddlingyaks.com, 1 cuddlybeardaycare.com.au, 1 cudesa.gq, 1 @@ -32669,7 +32648,7 @@ d-vision-create.com, 1 d.ac, 1 d.nf, 1 d.nr, 1 -d00228.com, 0 +d00228.com, 1 d00d.de, 1 d0g.cc, 1 d0xq.net, 1 @@ -32723,7 +32702,7 @@ d8181.com, 1 d82365.com, 1 d88-livechat.com, 0 d88.ag, 1 -d88.cc, 0 +d88.cc, 1 d88.cn.com, 1 d88.xyz, 1 d88118.com, 1 @@ -33490,6 +33469,7 @@ dashwebconsulting.com, 1 dasignsource.com, 1 dasinternetluegt.at, 1 daskirschhaus.com, 1 +dasmailarchiv.ch, 1 dasolindustrialpark.tk, 1 dassolutions.eu, 1 dastchin.live, 1 @@ -33754,6 +33734,7 @@ davidfuentes.es, 1 davidgouveia.net, 1 davidgreig.uk, 1 davidgroup.co.id, 1 +davidgroup.id, 1 davidgrudl.com, 1 davidhanle.com, 1 davidinteriors.tk, 1 @@ -33991,7 +33972,7 @@ dcyph.de, 1 dd-groupinc.com, 1 dd.art.pl, 1 dd.center, 1 -dd00228.com, 0 +dd00228.com, 1 dd11d.net, 1 dd202d.com, 1 dd207d.com, 1 @@ -34327,7 +34308,6 @@ deeperblue.com, 0 deepfake-porn.com, 1 deepgame.tk, 1 deephill.com, 1 -deephouse.ovh, 1 deephousex.ru, 1 deepinnov.com, 1 deepinsight.io, 1 @@ -34505,7 +34485,7 @@ dekoration.cf, 1 dekoration.gq, 1 dekoration.ml, 1 dekoration.tk, 1 -dekulk.nl, 1 +dekulk.nl, 0 del-ex.de, 1 dela-django-app.herokuapp.com, 1 delahrzolder.nl, 1 @@ -35178,7 +35158,6 @@ desuchan.eu, 1 desuchan.org, 1 desucla.com, 1 desvan.tk, 1 -desveja.com.br, 1 deswaffelaars.tk, 1 desy.tk, 1 desyatnichenko.ml, 1 @@ -35259,7 +35238,6 @@ deutschlandreport.com, 1 deux.solutions, 1 deuxsol.co, 1 deuxsol.com, 1 -deuxsolutions.com, 1 dev, 1 dev-advancedservicesportal.com, 1 dev-brandywineglobal.com, 1 @@ -35431,7 +35409,6 @@ dextermarket.com, 1 dexterseries.ru, 1 dextra.tk, 1 deyaar-sl.com, 1 -deyanadeco.com, 1 deyute.com, 1 dezea.net, 1 dezeregio.nl, 1 @@ -35463,6 +35440,7 @@ df5dd.com, 1 df5ee.com, 1 df63.cc, 1 dfaapostille.ph, 1 +dfafacts.gov, 1 dfagent.com, 0 dfc.gov, 1 dfc52.com, 0 @@ -35472,6 +35450,7 @@ dfile.tech, 0 dflcares.com, 1 dfmn.berlin, 1 dfmvf.org, 1 +dfpg.com, 1 dfranke.com, 1 dfspdfl.gov, 1 dfstoryteller.com, 1 @@ -35574,7 +35553,6 @@ diadorafitness.it, 1 diagilev.ml, 1 diagnocentro.cl, 1 diagnoseo.com, 1 -diagnoseo.pl, 1 diagnoseo.se, 1 diagnosingfiction.com, 1 diagnostix.org, 1 @@ -35602,7 +35580,6 @@ diamondcargotrailers.org, 1 diamondcontent.com, 1 diamondgoldmarkcity.cf, 1 diamondgrid.ga, 1 -diamondpkg.org, 1 diamondsystem.ro, 1 diamondyacca.co.uk, 1 diamorphine.com, 1 @@ -35918,6 +35895,7 @@ digital-liberal.ch, 1 digital-mu.tk, 1 digital-nut.com, 1 digital-rainbow-dolls.tk, 1 +digital-sculpture.org, 1 digital-techs.com, 1 digital-workshop.at, 0 digital.democrat, 1 @@ -36092,7 +36070,6 @@ dihmedical.net, 1 dihmedical.org, 1 diipoo.com, 1 diis.plus, 1 -dijibot.com, 1 dijispin.com, 1 dijitaller.com, 1 dijitalzade.com, 1 @@ -36269,6 +36246,7 @@ direktvermarktung-schmitzberger.at, 1 diretonoponto.gq, 1 direwolfsoftware.ca, 1 dirhami.com, 1 +diriya.lk, 0 dirk-dogs.tk, 1 dirk-weise.de, 1 dirkdoering.de, 1 @@ -36568,7 +36546,6 @@ ditissaskia.nl, 1 dittvertshus.no, 1 div12.org, 1 divacresent.tk, 1 -divanmsk.ru, 1 divari.nl, 1 divatri.tk, 1 divcoder.com, 1 @@ -37314,7 +37291,6 @@ dogsnaturallymagazine.com, 1 dogsnow.com, 1 dogtowneastpowell.com, 1 dogtrack.tk, 1 -dogtrainersreno.com, 1 dogualp.com, 1 dogvolution.com, 1 dogwithblog.in, 1 @@ -37891,6 +37867,7 @@ doughseeker.com, 1 doughstory.cf, 1 douglas-ma.gov, 1 douglascounty-oregon.gov, 1 +douglascountybar.com, 1 douglascountycolorado.gov, 1 douglascountyga.gov, 1 douglascountyil.gov, 1 @@ -38208,7 +38185,6 @@ drchristaengelbrecht.com, 1 drchristophepanthier.com, 0 drclub.tk, 1 drcp.tokyo, 1 -drdavidricketts.com, 1 drdeath.tk, 1 drdegenhart.de, 1 drdenisvincenzi.com.br, 1 @@ -38249,6 +38225,7 @@ dreaming.solutions, 1 dreaminjewelz.tk, 1 dreamlab.co.jp, 1 dreamlandmagic.com, 1 +dreamlandsdesign.com, 1 dreamlifeproperty.cf, 1 dreamlinks.tk, 1 dreamlordpress.it, 1 @@ -38963,6 +38940,7 @@ dunkle-seite.org, 1 dunlaptn.gov, 1 dunmanelectric.com, 1 dunmanpoolandspa.com, 1 +dunneworthy.com, 1 dunningtonaudio.co.uk, 1 dunyahalleri.com, 1 duo-tauceti.com, 1 @@ -39341,7 +39319,7 @@ e-dv.eu, 1 e-e.icu, 1 e-emploi.be, 1 e-enterprise.gov, 1 -e-estonia.com, 1 +e-estonia.com, 0 e-estonians.ee, 1 e-facture.net, 1 e-fireplaces.tk, 1 @@ -39459,7 +39437,7 @@ e-zine.tk, 1 e.gg, 1 e.ki, 0 e.mail.ru, 1 -e00228.com, 0 +e00228.com, 1 e15r.co, 1 e27.co, 1 e2b.com.au, 1 @@ -40593,6 +40571,7 @@ educlove.com, 1 educnum.fr, 1 educourse.nl, 1 edufestival.cz, 1 +edufever.com, 1 edugeton.com, 1 eduhublisbon.com, 1 eduid.se, 1 @@ -40659,7 +40638,7 @@ edyou.org, 0 edzilla.info, 0 edzo.dk, 1 ee-terminals.com, 1 -ee00228.com, 0 +ee00228.com, 1 ee362.com, 0 ee367.com, 0 ee372.com, 0 @@ -40847,6 +40826,7 @@ egittophilia.tk, 1 egles.eu, 1 eglinlife.net, 1 egliseclichy92.fr, 1 +eglisedenantes.fr, 1 egm-sakura.com, 1 ego4u.com, 1 ego4u.de, 1 @@ -41368,7 +41348,6 @@ elekner.tk, 1 elektiriktasarruf.tk, 1 elektrikal.com, 1 elektriker-notdienst-zentrale.de, 1 -elektrikvesukesintileri.com, 1 elektrilevi.com, 1 elektrilevi.ee, 1 elektrilevi.eu, 1 @@ -41661,7 +41640,6 @@ elkim.cz, 1 elkmontal.gov, 1 elkmotel.at, 1 elkonsults.com, 1 -elkoy.org, 1 elkvalley-nsn.gov, 1 ell-net.tokyo, 1 ella-kwikmed.com, 0 @@ -41925,7 +41903,6 @@ embracethedarkness.co.uk, 1 embracezine.tk, 1 embryologist.info, 1 embryooptions.com, 1 -emby.cloud, 1 emby.live, 1 emceemanic.tk, 1 emcentrix-com-site-mvc.azurewebsites.net, 1 @@ -43379,6 +43356,7 @@ esoterikerforum.de, 1 espace-caen.fr, 0 espace-gestion.fr, 1 espace-habitat-francais.fr, 1 +espace-orenda.ch, 1 espace-vet.fr, 1 espace.network, 1 espace.spb.ru, 0 @@ -43445,6 +43423,7 @@ esrinfo.com, 1 esrs.gov, 1 essaandmore.com.au, 1 essay-writing-topics-fce.tk, 1 +essayace.co.uk, 1 essaybrand.com, 1 essaychecker.com, 1 essaydirectory.com, 0 @@ -43732,7 +43711,6 @@ ettbattreinternet.se, 1 ettebiz.com, 1 ettgottliv.com, 1 ettip.com, 1 -ettounsi.net, 1 ettyproject.org, 1 etudepresse.tk, 1 etudes-litteraires.com, 1 @@ -43925,7 +43903,6 @@ eustaquio.tk, 1 eusystemic.com, 1 euterpiaradio.ch, 1 eutotal.com, 1 -euusofreedom.com.br, 1 euvo.tk, 0 euwid.de, 1 euzissima.com.br, 1 @@ -43999,7 +43976,7 @@ eve.tax, 1 eve0s.com, 1 eveapk.com, 1 evearly.com, 1 -eveaz.com, 1 +eveaz.com, 0 eveco-mebel.ga, 1 evedanjailbreak.com, 1 eveetcie.com, 1 @@ -44140,6 +44117,7 @@ eviadc.com, 1 eviamv.com, 1 eviction.cf, 1 evidecor.com.br, 1 +evidencebased.net, 1 evidenceusa.com.br, 1 evidenciamidiasdigitais.com.br, 1 evidencija.ba, 1 @@ -44928,7 +44906,6 @@ f88vip895.com, 1 f88vip9.com, 1 f88yule111.com, 1 f88yule122.com, 1 -f88yule3.com, 1 f88yule5.com, 1 f88yule6.com, 1 f88yule7.com, 1 @@ -45171,6 +45148,7 @@ fahrenwalde.de, 1 fahrschule-laux.de, 1 fahrwerk.io, 1 fahrzeug-talk.de, 1 +fai.gov, 1 faidanoi.it, 1 faidatefacile.it, 1 faieurope.it, 1 @@ -45457,6 +45435,7 @@ fanschic.com, 1 fanshenzhiyi.com, 1 fansided.com, 1 fansta.jp, 1 +fanstuff.ru, 1 fantacast.it, 1 fantasea.pl, 1 fantasiapainter.com, 1 @@ -45793,7 +45772,6 @@ fatalsunrise.com, 1 fatcat.tk, 1 fatecdevday.com.br, 1 fateitalia.it, 1 -fatemehyavari.com, 1 fates.online, 1 fatetx.gov, 1 fatfueled.com, 1 @@ -46460,7 +46438,6 @@ ffprofile.com, 1 ffrev.de, 1 ffsbgateway.com, 1 ffsociety.nl, 1 -ffta.eu, 1 ffty2.com, 1 ffw-zeven.de, 1 ffwd.fm, 1 @@ -46581,6 +46558,7 @@ fiftyshadesofgreyfullmovie.ga, 1 fiftyshadesofluca.ml, 1 fiftytalk.com, 1 fig.ms, 1 +figaroparrucchiere.it, 1 figbert.com, 1 fighribali.tk, 1 fightape.cf, 1 @@ -47001,7 +46979,6 @@ fireshellsecurity.team, 1 firesofdestruction.nl, 1 firesofheaven.org, 1 firesprite.com, 1 -firesquare.ru, 1 firestart.tk, 1 firestarter.fi, 1 firestuff.org, 1 @@ -47177,7 +47154,7 @@ fitkram.cz, 1 fitleads.nl, 1 fitmeat.at, 1 fitmommyinheels.com, 1 -fitmybike.eu, 0 +fitmybike.eu, 1 fitness-challenge.co.uk, 1 fitness-world.ga, 1 fitness.gov, 1 @@ -47628,6 +47605,7 @@ floralin.se, 1 floralworkshopsers.ga, 1 florasite.tk, 1 florausa.net, 0 +floravan.com, 1 floravino.de, 1 floreg.com, 1 florencecountywi.gov, 1 @@ -49219,7 +49197,6 @@ freehotline.ru, 1 freehqporno.com, 1 freeinet.cf, 1 freeinet.tk, 1 -freeinfos.fr, 1 freeinoutboard.com, 1 freejidi.com, 1 freekdevries.nl, 1 @@ -49238,6 +49215,7 @@ freelanceunleashed.com, 0 freelancewebprogrammer.com, 1 freelansir.com, 1 freeliferp.de, 1 +freelyplaygames.com, 1 freemagi.ga, 1 freeman-online.tk, 1 freeman-toyota.com, 1 @@ -49955,8 +49933,6 @@ fundpress.org, 0 funds.ddns.net, 1 fundstuecke.de, 1 funenhobby.nl, 1 -funeraire-365.com, 1 -funeral-365.com, 1 funeral-doom.tk, 1 funeralforafriend.tk, 1 funeralshowers.ga, 1 @@ -50874,7 +50850,6 @@ gamivo.com, 1 gammabrossfrance.fr, 1 gammaknife.com, 1 gammaphibeta.tk, 1 -gamonacci.com, 1 gamster.tv, 1 gan.wtf, 1 ganardinerillo.tk, 1 @@ -50913,6 +50888,7 @@ gaojianli.tk, 1 gaon.network, 1 gaos.org, 1 gaozj.com, 1 +gapalmoil.com.ng, 1 gapdirect.com, 1 gapfa.org, 0 gapfa.ro, 1 @@ -51276,6 +51252,7 @@ gechr.io, 1 geckler-ee.de, 0 geckogamers.com, 1 geckos-geocaching.de, 1 +geckosurfschool.com, 1 gecosan.com, 1 gedachtekaarsje.nl, 1 gedankenworks.com, 0 @@ -51579,7 +51556,6 @@ genious.world, 1 genioyfigura.tk, 1 geniusclan.tk, 1 geniuses.gq, 1 -geniusmarka.com, 1 geniusteacher.in, 1 geniuszone.biz, 1 genkihub.com, 1 @@ -52369,6 +52345,7 @@ gigiscloud.servebeer.com, 1 giglink.club, 1 gigloog.tk, 1 gigpam.com, 1 +gigs.com, 1 gigseekr.com, 1 gijonshiro.tk, 1 gikovatelojavirtual.com.br, 1 @@ -52634,7 +52611,6 @@ gladiatorboost.com, 0 gladiators-clan.tk, 1 gladiatorshop.nl, 1 gladiium.store, 1 -gladstein.org, 1 gladwellentertainments.co.uk, 1 gladwork.tk, 1 gladysstrickland.com, 1 @@ -53122,7 +53098,6 @@ goedekers.com, 1 goedekortingscodes.be, 1 goedekortingscodes.nl, 1 goedkoopstecartridges.nl, 1 -goedkope-bestelautoverzekeringen.nl, 1 goedkope-scooterverzekeringen.nl, 1 goedkopecartridgeskopen.nl, 1 goedkopeonesies.nl, 1 @@ -53864,7 +53839,6 @@ grand-knighki.gq, 1 grand-sity.ru, 1 grandbelgian.be, 1 grandcafeatpark.nl, 1 -grandcafetwist.nl, 1 grandcanyon.tk, 1 grandcanyonmore.com, 1 grandcanyonmoretours.com, 1 @@ -54008,7 +53982,6 @@ gravelshooters.net, 1 gravelshooters.org, 1 gravely.com, 1 gravensteengent.be, 1 -graver-art.ru, 1 gravescountyky.gov, 1 gravilink.com, 1 gravira.ru, 1 @@ -54951,7 +54924,6 @@ guru-naradi.cz, 1 guruakuntansi.co.id, 1 guruarchive.com, 1 gurucomi.com, 1 -gurueffect.com, 1 gurumobile.tk, 1 gurunanakdarvar.tk, 1 gurunpa.com, 1 @@ -54994,7 +54966,6 @@ gutscasino.ml, 1 gutschein-spezialist.de, 1 gutscheineplus.de, 1 gutscheingeiz.de, 1 -gutshaus-marketing.de, 1 gutstein.ch, 1 gutterbus.com, 1 gutterdogs.com, 1 @@ -55483,8 +55454,8 @@ hakkasannightclub.com, 1 hakon.lol, 1 haku.farm, 1 haku.vn, 1 -hakufarm.vn, 1 hakugin.me, 1 +hakuna.live, 1 hal-9th.space, 1 hal52.nl, 1 halacs.hu, 1 @@ -55694,7 +55665,7 @@ hanfverband-erfurt.de, 1 hang333.moe, 1 hangar4.es, 1 hangarbox.de, 1 -hangardasaves.com.br, 0 +hangardasaves.com.br, 1 hangargeek.ml, 1 hangcapnach.com, 1 hangout, 1 @@ -56241,7 +56212,6 @@ hayai.space, 1 hayashi-rin.net, 1 hayatmurat.tk, 1 hayden.co.uk, 1 -hayden.ru, 1 haydenbleasel.com, 0 haydenfranklin.com, 1 haydenjames.io, 1 @@ -56381,7 +56351,6 @@ hdtvboarders.ga, 1 hdtvboardest.ga, 1 hdv.paris, 1 hdv12.horse, 1 -hdvburs.nl, 1 hdview.co.uk, 1 hdwallpapers.net, 1 hdxxxpics.net, 1 @@ -56909,7 +56878,6 @@ heiaheia.com, 1 heibel.tk, 1 heic.nz, 1 heid.ws, 1 -heidarilawgroup.com, 1 heidegg.ch, 1 heidelbergengineering.com, 1 heiden-wir-helfen.de, 1 @@ -57360,6 +57328,7 @@ heroxin.com, 1 herpes-no.com, 1 herr-webdesign.de, 1 herrald-skeeleren.tk, 1 +herramientasbazarot.com, 1 herrderzeit.de, 1 herrenblut.tk, 1 herrenmuehle-wein.de, 1 @@ -58002,7 +57971,6 @@ hjbw-sterken.nl, 1 hjdiaz.com, 1 hjelmqvist-it.se, 1 hjelpemiddeldatabasen.no, 1 -hjertingfysioterapi.dk, 1 hjes.com.ve, 1 hjkbm.cn, 1 hjmag.com, 1 @@ -58031,6 +57999,7 @@ hkmap.co, 1 hkmap.com, 1 hkmap.net, 1 hkno.it, 1 +hkoreatv.gq, 1 hkp-usa.com, 1 hkr.at, 1 hks-projekt.at, 1 @@ -58138,6 +58107,7 @@ hocgiai.com, 0 hochhaus.us, 1 hochimins.org, 1 hochoukikikiraku.com, 1 +hochuvrotik.cf, 1 hochyi.com, 1 hochzeit-ap.de, 1 hochzeit-dana-laurens.de, 1 @@ -58181,6 +58151,7 @@ hoewler.ch, 0 hof-dreisprung.de, 1 hof-imbiss-lieske.de, 1 hof-mulin.ch, 1 +hofapp.de, 1 hoffmancorporation.com, 1 hoffmannresearch.ca, 1 hoffmanns-ballonshop.de, 1 @@ -58239,7 +58210,7 @@ holadinero.es, 0 holadinero.mx, 0 holainternet.tk, 1 holbrookaz.gov, 1 -holdengreene.com, 0 +holdengreene.com, 1 holderbekebvba.be, 1 holdiers.tk, 1 holdingcelebrations.tk, 1 @@ -58255,6 +58226,7 @@ holgerlehner.com, 1 holgr.com, 1 holi-coresdaindia.com.br, 1 holidayacademy.co.uk, 1 +holidayclub.tk, 1 holidayincotswolds.co.uk, 1 holidayland.gent, 1 holidaylocal.ga, 1 @@ -58266,6 +58238,7 @@ holidaytours.tk, 1 holine.studio, 1 holini.com, 0 holisticacupuncture.com.au, 1 +holisticdevelopmentagency.ml, 1 holistichealer.in, 1 holisticon.de, 1 holiy.jp, 1 @@ -58337,7 +58310,6 @@ holytransaction.com, 1 holyubofficial.net, 1 holywhite.com, 1 holywr.it, 1 -holz.nu, 1 holzed.com, 1 holzschutz-holzbearbeitung.de, 1 holzspielzeug-shop.ch, 1 @@ -58497,8 +58469,11 @@ homedesigntucson.tk, 1 homedesigntulsa.tk, 1 homedesignventura.tk, 1 homedesignwashington.tk, 1 +homedev.cf, 1 homedeveloper.cf, 1 homedeveloper.ga, 1 +homedeveloper.gq, 1 +homedeveloper.ml, 1 homedeveloper.tk, 1 homedirectory.ml, 1 homedollar.ga, 1 @@ -58586,6 +58561,7 @@ homeover.ga, 1 homeownersinsurancenv.com, 1 homepage.shiga.jp, 1 homepal.cf, 1 +homepal.ga, 1 homepal.gq, 1 homepassport.ga, 1 homepatch.ga, 1 @@ -58607,6 +58583,7 @@ homerequest.ga, 1 homerex.ga, 1 homero.tk, 1 homesbyayres.com, 1 +homeschoolinkorea.tk, 1 homeseguridad.com, 1 homeseller.com, 1 homeserver-kp.de, 1 @@ -58649,12 +58626,14 @@ homewinner.ga, 1 homewish.ga, 1 homewood.com, 1 homeworkacers.com, 1 +homeworld.ga, 1 homeyou.com, 1 homeyx.cf, 1 homezlog.com, 1 homitov.tk, 1 hommeatoutfaire.be, 0 homnest.fr, 0 +homo.ga, 1 homofo.tk, 1 homoglyph.net, 1 homointerneticus.tk, 1 @@ -58803,7 +58782,6 @@ horeco.com, 1 horgenberg.com, 1 horikawa-cement.co.jp, 1 horionimoveis.com.br, 1 -horizech.com, 1 horizon.ne.jp, 1 horizonlawncare.tk, 1 horizonmail.ga, 1 @@ -58977,6 +58955,7 @@ hostprior.ro, 1 hostreputation.com, 1 hosts.cf, 0 hostux.network, 1 +hostvn.net, 1 hostwinds.com, 1 hosuronline.com, 1 hosuto.nl, 1 @@ -59240,7 +59219,7 @@ howardplastics.co.uk, 1 howardscholars.org, 1 howardsgrovewi.gov, 1 howardshaw.com, 1 -howarh.com, 1 +howarh.com, 0 howbehealthy.com, 1 howdo.nl, 1 howdoesmycode.work, 1 @@ -59288,6 +59267,7 @@ howtomovetheneedle.com, 1 howtopreventvulnerabilities.com, 1 howtorunfasterandlonger.com, 1 howtoslapsomeonethroughtheinternet.com, 1 +howtostopsnoring.tk, 1 howtoteachviolin.com, 1 howtotech.com, 1 howtotech.de, 1 @@ -59509,6 +59489,7 @@ http3-hosting.de, 1 http3.ch, 1 http3.pro, 1 http418.org, 1 +httpd.gq, 1 httpheaders.info, 1 https-rulesets.org, 1 https.com.tw, 1 @@ -59599,6 +59580,7 @@ huchet.me, 0 hucklebucks.com, 1 huckletree.com, 0 hudebnibazarmixer.cz, 1 +hudeem-vmeste.ml, 1 hudhaifahgoga.co.za, 1 hudhomestore.gov, 1 hudobniny.net, 1 @@ -59613,6 +59595,7 @@ huelgajusticiaextremadura.tk, 1 huelvatrabaja.com, 1 huemeyraophelia.com, 1 huemul.studio, 1 +huertoydesamparados.tk, 1 hues-in-lee.de, 1 huesers.de, 1 huesitos.tk, 1 @@ -59697,6 +59680,7 @@ humanafterall.studio, 1 humanamente.tk, 1 humanbeing.tk, 1 humanenrich.com, 1 +humanesdemadrid.tk, 1 humanewolf.com, 1 humanexperiments.com, 1 humanhairgo.tk, 1 @@ -59749,9 +59733,11 @@ humer-it.com, 1 humexe.com, 1 humeydi.tk, 1 humio.com, 1 +hummel.tk, 1 hummy.tk, 1 hummy.tv, 1 humor-life.tk, 1 +humor-web.tk, 1 humor.cf, 1 humor.ga, 1 humorbest.tk, 1 @@ -59780,6 +59766,8 @@ hundlee.tk, 1 hundter.com, 1 hundur.tk, 1 hunedoara.tk, 1 +hungarian-united-church.tk, 1 +hungaryz.ml, 1 hungnm.me, 1 hungphatlaptop.com, 1 hungryas.tk, 1 @@ -59798,6 +59786,7 @@ hunterjohnson.io, 1 hunterkehoe.com, 1 huntersandprops.tk, 1 hunterscreekapartments.net, 1 +hunterscrolls.tk, 1 huntexpired.com, 0 hunting.ml, 1 huntingdonlifesciences.com, 1 @@ -59884,6 +59873,7 @@ hvh.no, 1 hvhdct.gov, 1 hvhercules.tk, 1 hvllucinvtion.tk, 1 +hvorschool.tk, 1 hvrint.de, 1 hvt.com.au, 1 hvtuananh.com, 1 @@ -59912,7 +59902,6 @@ hy1.com, 1 hyatt.com, 1 hyb7.com, 1 hybrid-crescent.tk, 1 -hybrid-hippie.com, 1 hybriden.cf, 1 hybriden.tk, 1 hybridiyhdistys.fi, 1 @@ -59946,6 +59935,7 @@ hydrogel.tk, 1 hydrogenplatform.com, 1 hydrographicsocietybenelux.eu, 1 hydroid.tk, 1 +hydrolyze.tk, 1 hydrometrixtechnologies.com, 1 hydronicheatingaustralia.com.au, 1 hydronium.cf, 1 @@ -59987,7 +59977,6 @@ hyperautomotive.com.au, 1 hyperblast-universe.tk, 1 hyperbolic-mayonnaise-interceptor.ovh, 1 hypercdn.de, 1 -hypercompetitions.com, 1 hypercritical.co, 1 hyperd.sh, 1 hyperhidrose.tk, 1 @@ -60009,6 +59998,7 @@ hyperthymia.com, 1 hyperv-backup.co.za, 1 hypetrix.com, 1 hypevents.net, 1 +hypexstore.tk, 1 hyphen.co.za, 1 hyphenpda.co.za, 1 hypixelstudios.com, 1 @@ -60320,7 +60310,6 @@ icarlos.net, 1 icas-nsn.gov, 1 icasture.top, 1 icbemp.gov, 0 -icc.kharkov.ua, 1 icci.info, 0 iccorporateinteriors.com.au, 1 iccupplatoon.tk, 1 @@ -60342,7 +60331,7 @@ icecreamandclara.co.uk, 1 icecreamika.tk, 1 icecutethings.com, 1 icedox.ga, 1 -icedream.tech, 1 +icedream.tech, 0 icedterminal.com, 1 icedterminal.me, 1 icedude.tk, 1 @@ -60566,6 +60555,7 @@ idegrafico.com, 0 idehvector.com, 1 ideiasefinancas.com.br, 1 ideice.gob.do, 1 +ideloving.com, 1 idemo.in, 1 iden-tt.com, 1 iden-tt.net, 1 @@ -61211,6 +61201,7 @@ imaginationpathway.com, 1 imagine-programming.com, 1 imaginelab.club, 1 imaginescape.tk, 1 +imaginethatevent.com, 1 imaginethefloor.tk, 1 imaginetricks.com, 1 imagingstudio.co.uk, 1 @@ -61587,6 +61578,7 @@ incident.dk, 1 incidentresponsesolution.com, 1 incidentresponsesystem.com, 1 incigma.com, 0 +inclassnow.com, 1 includesubdomains.preloaded.test, 1 includesubdomains2.preloaded.test, 1 inclusion.tn, 1 @@ -61749,7 +61741,6 @@ indonesiatrip.tk, 1 indoor-kletterwald.de, 1 indopress.tk, 1 indorepack.com, 1 -indorsie.com, 1 indospot.ml, 1 indospot.tk, 1 indotravels.tk, 1 @@ -61994,7 +61985,6 @@ informat.ga, 1 informaticapremium.com, 0 informaticien.tk, 1 informaticmousset.tk, 1 -informatico.pt, 1 informaticoalicante.tk, 1 informaticolamancha.tk, 1 informatiger.net, 1 @@ -62225,6 +62215,7 @@ inkeliz.com, 1 inker.in, 1 inkerotic.com, 1 inkerz.com.br, 1 +inkforall.com, 1 inkhor.se, 1 inkhub.com.au, 1 inkjets-inks.tk, 1 @@ -62457,6 +62448,7 @@ insomniac.pl, 1 insomniac.ro, 1 insomniachelp.com, 1 insomniasec.com, 1 +insono.no, 1 insotech.eu, 1 insouciant.org, 1 inspektre.com, 1 @@ -62634,7 +62626,6 @@ intelalumni.org, 1 intelghost.com, 1 intelhost.com.br, 1 intelhost.net, 1 -intelics.com.au, 1 intelius.cf, 1 intellar.com, 1 intelldynamics.com, 1 @@ -63001,7 +62992,6 @@ investinweed.com, 0 investion.cf, 1 investir.ch, 0 investirdanslancien.fr, 1 -investire.biz, 1 investirenisrael.fr, 1 investirfazbem.com.br, 1 investirsolidaire.fr, 1 @@ -64885,7 +64875,6 @@ jasch.tk, 1 jaschaa.de, 1 jaseng.ga, 1 jashinchan.cn, 1 -jashvaidya.com, 1 jasik.xyz, 1 jasl.works, 1 jasminedirectory.com, 1 @@ -65057,7 +65046,6 @@ jcadg.com, 1 jcaicedo.com, 1 jcaicedo.tk, 1 jcb.com, 1 -jcbgolfandcountryclub.com, 1 jccars-occasions.be, 1 jccrew.org, 1 jcdenast.tk, 1 @@ -65477,7 +65465,7 @@ jetmusic.tk, 1 jetpack.com.ar, 1 jetsadabetchoke77.com, 1 jetsieswerda.nl, 1 -jetsome.co, 1 +jetsome.co, 0 jetson.tk, 1 jetstudio.ch, 0 jetswhiteout.com, 1 @@ -65788,6 +65776,7 @@ jmk.hu, 1 jmlegrand.com, 1 jmlp.fr, 1 jmmanadobitung.co.id, 0 +jmn.pl, 1 jmonagas-portfolio.ml, 1 jmorahan.net, 1 jmp.chat, 1 @@ -65851,6 +65840,7 @@ job.biz.tr, 1 job2day.com.ua, 1 jobalicious.nl, 1 jobbkk.com, 1 +jobbnorge.no, 1 jobbsafari.no, 1 jobbsafari.se, 1 jobcenter.tk, 1 @@ -65986,7 +65976,7 @@ jogorama.com.br, 0 jogosdeanimais.org, 1 jogosecodes.com, 0 jogosfutebolhoje.pt, 1 -jogoshoje.io, 1 +jogoshoje.io, 0 jogwitz.de, 1 johan-koffeman.tk, 1 johand.io, 1 @@ -66001,6 +65991,7 @@ johannes-sprink.de, 0 johannes-zinke.de, 1 johannes.io, 1 johannes.wtf, 1 +johannesen.tv, 1 johannfritsche.de, 1 johanpeeters.com, 1 johansf.tech, 1 @@ -66041,6 +66032,7 @@ johnkraal.com, 1 johnload.tk, 1 johnmac.cn, 1 johnmalloneemd.com, 0 +johnmasserini.com, 1 johnmcc.net, 1 johnmcintosh.pro, 1 johnmellison.com, 1 @@ -66094,7 +66086,6 @@ joinpeertube.org, 1 jointheunseen.com, 1 jointotem.com, 1 jointsache.com, 1 -jointworks.com.au, 1 joinus-outfits.nl, 1 jojo-kiss.com, 1 jojo-pieism.tk, 1 @@ -66240,7 +66231,7 @@ joostbovee.nl, 1 joostmaglev.nl, 1 joostvanderlaan.nl, 1 jootshop.ga, 1 -jopestkil.com, 1 +jopestkil.com, 0 jophson.tk, 1 joppies.com, 1 joqi4.gq, 1 @@ -66273,7 +66264,6 @@ jordioller.com, 1 jordjord.com, 1 jorexenterprise.com, 1 jorgelopezorquesta.tk, 1 -jorgemarquez.es, 1 jorgenegrete.tk, 1 jorgenson-peninsula.com, 1 jorgvandeven.nl, 1 @@ -66357,7 +66347,6 @@ joshua-kuepper.de, 1 joshuadiamant.com, 1 joshuajohnson.ca, 1 joshuamessick.com, 1 -joshuaschmitt.us, 1 joshygeo.tk, 1 josiemccoy.co.uk, 1 josien.fr, 1 @@ -66601,6 +66590,7 @@ ju-edu.tk, 1 ju-rex.eu, 1 juabcounty.gov, 1 jualkambing.tk, 1 +jualssh.com, 0 juan23.edu.uy, 1 juancarlosflores.tk, 1 juancarlosgalvez.tk, 1 @@ -66655,7 +66645,6 @@ judosaintdenis.fr, 1 judybai.me, 1 judykatura.pl, 1 juef.net, 1 -juef.space, 1 juegosalcubo.es, 1 juegosycodigos.mx, 1 juejin.com, 1 @@ -66940,7 +66929,6 @@ justinmanders.nl, 1 justinsinkula.com, 1 justinstago.com, 1 justinstandring.com, 1 -justjavajobs.co.za, 1 justkidsdental.com, 1 justknigi.gq, 1 justknit.shop, 1 @@ -67025,7 +67013,6 @@ jwjwjw.com, 1 jwmmarketing.com, 1 jwod.gov, 1 jwolt-lx.com, 1 -jwompa.com, 1 jwplay.ml, 1 jwpoore.com, 1 jwr.me, 1 @@ -67073,7 +67060,6 @@ k-sails.com, 1 k-scr.me, 1 k-system.de, 1 k-tube.com, 0 -k-unity.co.ke, 1 k-will.tk, 1 k.tt, 1 k0.gg, 1 @@ -67307,7 +67293,7 @@ kadet.net.ru, 1 kadett-c-club-limburg.tk, 1 kadhal-kirukkan.tk, 1 kadhambam.in, 1 -kadidak.com, 1 +kadidak.com, 0 kadifeli.com, 1 kadima.co.il, 1 kadinhaber.tk, 1 @@ -67600,6 +67586,7 @@ kandianshang.com, 1 kandofu.com, 1 kandra.com.br, 1 kandrahechiceravudu.com, 1 +kandwliquor.com, 1 kanecastles.com, 1 kanecountyil.gov, 1 kanehisa.xyz, 1 @@ -67683,7 +67670,6 @@ kappharn.com, 1 kappit.dk, 1 kappow.co.uk, 1 kapri.dn.ua, 1 -kapsalondigo.nl, 1 kapsalonlinds.nl, 1 kapseli.net, 1 kapsouro-ksimeromata.eu, 1 @@ -67836,7 +67822,6 @@ karta-paliwowa.pl, 1 kartacha.com, 1 kartalvincisletmeciligi.com, 1 kartar.net, 0 -kartbird.com, 1 kartec.com, 1 kartenmarie.de, 1 kartenplanet.ch, 1 @@ -67885,8 +67870,11 @@ kasparovru.tk, 1 kasper-team.tk, 1 kasperstad.dk, 1 kass-media.com, 1 +kassa.at, 1 kassa.com, 1 kassa.expert, 1 +kasse.at, 1 +kasse.pro, 1 kassemmal.at, 1 kassola.tk, 1 kastamonuhaberleri.tk, 1 @@ -68392,7 +68380,6 @@ kendu.si, 0 kenedytx.gov, 1 kenedytxedc.gov, 1 kenforeman.com, 1 -kenhgiamgia.net, 1 keniasfamilychildcare.com, 1 keniff.gq, 1 kenkoelectric.com, 0 @@ -68401,7 +68388,6 @@ kenmartin.ru, 1 kennebec.gov, 1 kennedy.cf, 1 kennedy.ie, 1 -kennedy.is, 1 kennedyinsurancesolutions.com, 1 kenners.org, 0 kennethaasan.no, 1 @@ -69133,7 +69119,6 @@ kinoshki.ga, 1 kinovam.tk, 1 kinovsem.ml, 1 kinowork.tk, 1 -kinozal-me.appspot.com, 1 kinozone.tk, 1 kinschots.eu, 1 kinsei.jp, 1 @@ -69569,6 +69554,7 @@ klub.tk, 1 klubcajovna.cz, 1 kluberphoto.hu, 1 klubfitness.pl, 1 +klubgerlach.sk, 1 klubwsl.tk, 1 kluck.me, 1 kludge.eu, 1 @@ -70152,7 +70138,6 @@ korstanjetimmerwerken.nl, 1 kortarsmagyarfesto.tk, 1 kortgebyr.dk, 1 korund.tk, 1 -korusautos.com, 1 koryfi.com, 1 kos4all.com, 1 kos9078.com, 1 @@ -70426,7 +70411,6 @@ kreno.tech, 1 krenstetter.at, 1 kreolis.net, 1 kresimir-blazevic.tk, 1 -krestanskydarek.cz, 1 kretaforum.dk, 1 kretschmann.consulting, 1 kreuzbergflieger.de, 1 @@ -70910,7 +70894,6 @@ kunstenkracht1919.tk, 1 kunsthandel-augustus-rex.de, 1 kunstundkulturradioschoepfwerk.tk, 1 kunstundunrat.de, 1 -kunvarji.com, 1 kunze-medien.de, 0 kuon.me, 1 kuoruan.com, 1 @@ -71004,6 +70987,7 @@ kuschku.de, 1 kuscu.de, 1 kushner-cpa.co.il, 1 kushwanthreddy.com, 1 +kushwanthreddy.in, 1 kuslink.tk, 1 kusmuhendisi.com, 1 kusochi.eu, 1 @@ -71076,7 +71060,6 @@ kvsrot.cz, 1 kvt.berlin, 0 kw.gt, 1 kwadraadtevredenheid.nl, 1 -kwakkelglas.nl, 1 kwalifikacje.gov.pl, 1 kwcolville.com, 1 kweb.ml, 1 @@ -71754,7 +71737,7 @@ landlordy.com, 1 landofelves.net, 0 landofmerlin.tk, 1 landofoz.dynu.net, 1 -landoftherisingson.com, 1 +landoftherisingson.com, 0 landolakeswi.gov, 1 landoncreekapartments.com, 1 landonkhull.ddns.net, 1 @@ -72078,6 +72061,7 @@ lasseleegaard.com, 1 lasseleegaard.dk, 1 lasseleegaard.net, 1 lasseleegaard.org, 1 +lassencanyonnursery.com, 1 lassesworld.com, 1 lassesworld.se, 1 lassovideos.com, 1 @@ -73070,7 +73054,6 @@ leiloonart.com, 1 leiming.co, 1 leipzig.photo, 1 leipziger-triathlon.de, 1 -leiriportti.fi, 1 leism.com, 1 leism.de, 1 leism.eu, 1 @@ -73308,7 +73291,7 @@ lequerceagriturismo.com, 1 lequest.dk, 1 lequocthai.com, 1 ler3.com, 1 -lereporter.ma, 0 +lereporter.ma, 1 leretour.ch, 0 lerika.tk, 1 lerku.com, 1 @@ -74260,7 +74243,6 @@ lineadmins.com, 1 lineaesse5.it, 1 lineageos.org, 1 lineamortal.tk, 1 -linearb.io, 1 linearmap.com, 1 linebooks.cf, 1 linedance.tk, 1 @@ -75044,7 +75026,6 @@ localethereum.com, 1 localexpert.realestate, 1 localfloridanews.com, 1 localhorst.duckdns.org, 1 -localhost.cat, 1 localized.tk, 1 localizejs.com, 1 localizestaging.com, 1 @@ -75186,7 +75167,6 @@ lodni.site, 1 lodongxu.com, 1 lodosswar.tk, 1 lodus.io, 1 -loe.lviv.ua, 1 loekkoopmans.tk, 1 loeklommers.nl, 1 loenshotel.de, 1 @@ -75324,6 +75304,7 @@ lojafazendoarte.com.br, 1 lojaflordelaranjeira.com.br, 1 lojagravataria.com.br, 1 lojahaus.com.br, 1 +lojahbk.com.br, 1 lojahunamarcenaria.com.br, 1 lojak2.com.br, 1 lojal19.com.br, 1 @@ -75997,6 +75978,7 @@ lrssystems.com, 1 lrumeq.com, 1 lrv-grobbendonk.tk, 1 ls-alarm.de, 1 +ls-rp.es, 1 lsal.fr, 1 lsal.me, 1 lsbricks.com, 1 @@ -77311,7 +77293,6 @@ mailexx.gq, 1 mailexx.ml, 1 mailfence.com, 1 mailflank.com, 0 -mailgun.com, 1 mailhardener.com, 1 mailinabox.email, 1 mailinabox.ml, 1 @@ -78397,7 +78378,6 @@ markridgwell.co.uk, 1 markridgwell.com, 1 markrobin.de, 1 markrussellwebservice.com, 1 -marksass.de, 1 markshroyer.com, 1 marksm.it, 1 marksmanhomes.com, 1 @@ -78480,7 +78460,6 @@ marrakech-camel-trips.com, 1 marriage-shrine.jp, 1 marriageinchrist.com, 1 marrickvilleapartments.com.au, 1 -marron-dietrecipe.com, 1 marronniergate.com, 1 marropax.com, 1 marry-fox.com, 1 @@ -79151,7 +79130,6 @@ max-moeglich.de, 1 max-went.pl, 1 max.gov, 1 max00365.com, 1 -max0365.com, 0 max11365.com, 0 max1365.com, 0 max22365.com, 0 @@ -79274,10 +79252,10 @@ mayamaibach.org, 1 mayamushrooms.co.uk, 1 mayanet.tk, 1 mayarocabletv.com, 1 +mayaroconstituency.org, 1 mayashoefke.tk, 1 mayavi.co.in, 1 maybeonline.de, 1 -maybeshewill.org, 1 maybeshewill.xyz, 1 maybeul.com, 1 mayblossom.net, 1 @@ -79603,6 +79581,7 @@ meamod.com, 0 meandb.net, 1 meanevo.com, 1 meaningfulaction.org, 1 +meanit.ie, 1 meany.xyz, 1 meapbot.com, 1 meapbot.net, 1 @@ -79622,7 +79601,6 @@ mebelconcept.tk, 1 mebelipalitra.ru, 0 mebelisk.com.br, 1 mebelnik.pro, 1 -mebeloffice.com.ua, 1 mebelshik.tk, 1 mec010.com, 1 mec020.com, 1 @@ -80145,7 +80123,7 @@ medinetz-halle.de, 1 mediniti.com, 1 medino.com, 1 medinorte.es, 1 -medinside.ch, 1 +medinside.ch, 0 medinside.li, 0 medinsider.ch, 0 medinsider.li, 0 @@ -80332,7 +80310,6 @@ megatyumen.ru, 0 megauction.tk, 1 megavasoc.com.ar, 1 megaviews.tk, 1 -megawarez.org, 1 megawebsite.tk, 1 megawhat.energy, 1 megaxchange.cash, 1 @@ -80750,7 +80727,7 @@ mercadolibre.com.uy, 1 mercadolibre.com.ve, 1 mercadolibrefz.tk, 1 mercadolivre.com.br, 1 -mercadopago.cl, 1 +mercadopago.cl, 0 mercadopago.com, 1 mercadopago.com.ar, 1 mercadopago.com.br, 1 @@ -81135,7 +81112,6 @@ mezinfo.tk, 1 mezquetillas.tk, 1 mezzanine.net, 1 mf-fischer.de, 1 -mf-natuurfotografie.nl, 1 mfamonitor.com, 1 mfanalyzer.com, 1 mfatravaux.fr, 1 @@ -81165,7 +81141,6 @@ mg-productions.net, 1 mgae.com, 1 mgatreeservices.com, 1 mgclercoh.gov, 1 -mgcraft.net, 1 mgdigitalmarketing.com.au, 1 mgfashion.ae, 1 mgfashion.store, 1 @@ -81661,7 +81636,7 @@ mikemcgeephotography.com, 1 mikemooresales.com, 1 mikeowens.us, 1 mikeprocopio.com, 1 -mikerichards.email, 1 +mikerichards.email, 0 mikerichards.gallery, 1 mikerichards.photography, 1 mikerichards.photos, 1 @@ -82030,7 +82005,6 @@ minicampingshalom.nl, 1 minican.net, 1 miniclip.com, 1 minics.tk, 1 -minidesign.se, 1 minigames.com, 1 minigermanauto.com, 1 minigolf-reisinger.com, 1 @@ -82105,6 +82079,7 @@ minotauro.com.ar, 1 minoxbahia.com.br, 1 minpingvin.dk, 1 minpolit.com, 1 +minquipo.nl, 1 minsk-city.tk, 1 minsk-cops.tk, 1 minsk-music.tk, 1 @@ -82583,7 +82558,6 @@ mkt.com, 1 mkt7.de, 1 mktemp.org, 1 mkultraclean.com.au, 1 -mkvcinehd.com, 1 mkw.st, 1 mkws.sh, 1 ml.tax, 1 @@ -82831,7 +82805,6 @@ mobilki.tk, 1 mobilni.site, 1 mobiltune.tk, 1 mobilux.lv, 1 -mobilyaka.com, 1 mobimsua.com, 1 mobincube.com, 1 mobincube.es, 1 @@ -83307,7 +83280,6 @@ monidenum.fr, 1 monific.com, 1 monika.tk, 1 moninformaticien.ovh, 0 -moninformaticien.shop, 0 monique.io, 1 moniquedekermadec.com, 1 moniquevanhoutum.nl, 1 @@ -83433,7 +83405,6 @@ montgomeryvotesal.gov, 1 monti.fi, 1 monticelloky.gov, 1 montillafarm.com, 1 -montoan.com, 1 montoneros.tk, 1 montop.tk, 1 montourcountypa.gov, 1 @@ -84338,7 +84309,6 @@ mtltransport.com, 1 mtludlow.co.uk, 1 mtmedia.org, 1 mtn-media.de, 1 -mtnc.nl, 1 mtoma.tk, 1 mtouch.facebook.com, 0 mtp-services.fr, 1 @@ -85841,7 +85811,6 @@ mz-mz.net, 1 mza.com, 1 mzademiryolu.com, 1 mzcsgo.top, 1 -mzh.io, 0 mzitu.com, 1 mziulu.me, 0 mzlive.eu, 1 @@ -86571,7 +86540,6 @@ nautiboat.it, 1 nauticlink.com, 1 nauticlux.com, 1 nautika.tk, 1 -nautiljon.com, 1 nautsch.de, 1 nauz-art.com, 1 nav.no, 1 @@ -86765,8 +86733,6 @@ ncuc.gov, 1 ndaal.eu, 1 ndarville.com, 1 ndbt.com, 1 -ndcancercoalition.com, 1 -ndcancercoalition.org, 1 ndcpolipak.com, 1 ndev.tk, 1 ndhlink.com, 1 @@ -87443,7 +87409,6 @@ netzklad.de, 1 netzona.org, 1 netzspielplatz.de, 0 netzsv.website, 1 -netztest.at, 1 netzvieh.de, 1 netzwerk-lq.com, 1 netzwerk-sozialliberal.de, 1 @@ -87524,6 +87489,7 @@ nevim-co-varit.cz, 1 nevivur.net, 1 nevkurse.tk, 1 nevntech.com, 1 +nevocloud.com, 1 nevolution.me, 1 nevoxo.com, 0 nevrodiversitet.no, 1 @@ -87633,7 +87599,6 @@ newglarusvillagewi.gov, 1 newgle.xyz, 1 newgrowbook.com, 1 newguidance.ch, 0 -newhamyoungbloods.co.uk, 1 newholland.tk, 1 newhomedesign.tk, 1 newhopeplacement.com, 1 @@ -88008,6 +87973,7 @@ niagaraschoice.org, 1 niallator.com, 1 nianubo.net, 1 niawier-wetsens.tk, 1 +nibadesign.nl, 1 nibblehole.com, 1 nibbler.ai, 1 nibert.fr, 1 @@ -88083,7 +88049,7 @@ nicheosala.xyz, 1 nicher.tk, 1 nichesite.gq, 1 nichetest.tk, 1 -nichevideogalore.com, 0 +nichevideogalore.com, 1 nichi.co, 1 nichijou.com, 1 nichijou.org, 1 @@ -89068,7 +89034,6 @@ northpublicidade.com.br, 1 northrose.net, 1 northsegment.com, 1 northshoremums.com.au, 1 -northstate.net, 1 northtek.tk, 1 northteksystems.com, 1 northtexaspiano.org, 1 @@ -89226,6 +89191,7 @@ notora.tech, 1 notoriousdev.com, 1 notos.co, 1 notre-planete.info, 0 +notrecinema.com, 1 notrefuse.tk, 1 notrero13.com, 1 notresiteduvercors.tk, 1 @@ -89460,6 +89426,7 @@ nsepapa.com, 1 nsfw-story.com, 1 nshepp-dct-development.azurewebsites.net, 0 nshipster.cn, 1 +nshipster.co.kr, 1 nshipster.com, 1 nshipster.es, 1 nsics.co.jp, 1 @@ -90324,7 +90291,6 @@ odinpl.com, 1 odinraz.ga, 1 odinseye.net, 1 odinson.tk, 1 -odiris.lk, 1 odishainfo.tk, 1 odishatv.in, 1 odisseo.io, 1 @@ -90386,7 +90352,7 @@ oesterbaron.nl, 1 oetzies-quiz.com, 1 oevkg.at, 1 of-sound-mind.com, 1 -of2106.dnsalias.org, 0 +of2106.dnsalias.org, 1 of2m.fr, 1 ofaas.jp, 1 ofallonil.gov, 1 @@ -90456,7 +90422,6 @@ officialdubaidev.com, 1 officialgaiasabbour.com, 1 officialhazalturesan.tk, 1 officialilmonte.com, 1 -officialmountainview.com, 1 officialniledevelopments.com, 1 officialpyramids.com, 1 officialreedygroup.com, 1 @@ -90663,7 +90628,6 @@ oklahomaworkstogether.gov, 1 okmaybe.ca, 1 okmirror.net, 1 okmulgeecounty.gov, 1 -okmx.cloud, 1 okmx.de, 1 okna-tm.kz, 1 okna-vek.com.ua, 1 @@ -90756,6 +90720,7 @@ oldrun.is, 1 oldrup.dk, 1 oldrup.net, 1 oldscans.tk, 1 +oldschool-criminal.com, 1 oldschool.wiki, 1 oldshara.tk, 1 oldskoolreviews.tk, 1 @@ -91074,7 +91039,6 @@ onderwijscentrumgent.be, 1 ondevamosjantar.com, 1 ondiet.biz, 1 ondoorgrond.tk, 1 -ondrei.one, 1 ondrej.org, 1 ondrejbudin.cz, 0 ondrejhoralek.cz, 1 @@ -91355,7 +91319,6 @@ onlinetextil.cz, 1 onlineth.com, 1 onlinetrainer.co.za, 1 onlinetravelmoney.co.uk, 1 -onlineunionbankph.info, 1 onlineunitedcountry.com, 1 onlinevardenafil.gq, 1 onlineverdienen.tk, 1 @@ -91418,7 +91381,7 @@ onpointinsights.us, 0 onpointplugins.com, 1 onpopup.ga, 1 onporn.fun, 1 -onrealt.ru, 1 +onrealt.ru, 0 onsemediagroup.ml, 1 onsenlaichelesdoigts.be, 1 onsetupdates.com, 1 @@ -91550,7 +91513,7 @@ open-sauce-recipes.co.uk, 1 open-source.gr, 1 open-to-repair.fr, 0 open-trip.id, 1 -open.film, 0 +open.film, 1 open.my.id, 1 open.ru, 1 openacte.ch, 0 @@ -91590,7 +91553,6 @@ opendata.cz, 1 opendataincubator.eu, 1 opendecide.com, 1 opendolls.com, 1 -opendoorcounselingpa.com, 1 openevic.info, 1 openfir.st, 0 openfitapi-falke.azurewebsites.net, 1 @@ -91899,6 +91861,7 @@ orbita.zp.ua, 1 orbitabaja.com, 1 orbitaclub.cf, 1 orbital3.com, 1 +orbitalcommerce.com.br, 0 orbitcleaning.com.au, 1 orbitdefence.co.uk, 1 orbitfoods.ca, 1 @@ -91965,7 +91928,6 @@ orefice.roma.it, 1 oregon2020census.gov, 1 oregonenergysaver.com, 1 oregonmenshealth.com, 1 -oreka.one, 1 oreka.online, 1 orel-city.ml, 1 orel-sait.tk, 1 @@ -92345,6 +92307,7 @@ othrys.net, 1 oticasvisao.net.br, 1 otimismoemrede.tk, 1 otinane.eu, 1 +otiumtech.com, 1 otixz.com, 1 otkm-stuttgart.tk, 1 otmns.net, 1 @@ -92473,7 +92436,6 @@ outbreak.games, 1 outcasts-guild.eu, 1 outdoorfurniture.ie, 1 outdoorgearlab.com, 1 -outdoorhaber.com, 0 outdoorimagingportal.com, 1 outdoorlearningmap.com, 1 outdoorlightingagoura.com, 1 @@ -93268,6 +93230,7 @@ panda-lang.net, 1 panda-life.tk, 1 panda.tf, 1 pandacbd.com, 1 +pandadoc.com, 1 pandahut.net, 1 pandakid.tk, 1 pandaltd.nl, 0 @@ -93332,6 +93295,7 @@ panoramica.tk, 1 panoramique.tk, 1 panoramiquesorganya.tk, 1 panoramixbycallens.eu, 1 +panoramo.mx, 1 panoti.com, 0 panpa.ca, 1 panpsychism.com, 1 @@ -93368,6 +93332,7 @@ panzerscreen.dk, 1 panzerwarmodsru.tk, 1 pao.moe, 1 paocaibang.net, 1 +paocloud.co.th, 1 paofu.cat, 0 paolodemichele.it, 0 paolomargari.tk, 1 @@ -93419,7 +93384,6 @@ papierniak.net, 1 papierniczy.eu, 0 papillon-events.be, 1 papkinadochka.ru, 1 -papodegalo.com.br, 1 papotage.net, 1 papouille.ml, 1 pappacoda.it, 1 @@ -93639,6 +93603,7 @@ parque-batlle.tk, 1 parquebatlle.tk, 1 parquettista.milano.it, 1 parquettista.roma.it, 1 +parratennis.com.au, 1 parrocchiadimeana.tk, 1 parrocchiamontevecchia.it, 1 parroquiacorazondemaria.tk, 1 @@ -93647,6 +93612,7 @@ parroquiadesanlesmes.tk, 1 parrotbook.cf, 1 parry.org, 1 pars.work, 1 +parsahosseinpour.com, 1 parsdev.com, 0 parsec.app, 1 parsemail.org, 1 @@ -94258,7 +94224,6 @@ pcbuildinggr.com, 1 pccartel.com, 1 pccc.co.za, 1 pcccthicongcungcap.com, 1 -pccds-ln.org, 1 pccegoa.org, 1 pcchin.com, 1 pccomc.tk, 1 @@ -94676,6 +94641,7 @@ pentaqu.in, 1 pentaquin.com, 1 pentaquin.net, 1 pentatonik.tk, 1 +pentekdograma.com, 1 pentest.blog, 1 pentesterlab.com, 1 pentestit.com, 1 @@ -95251,7 +95217,6 @@ pfonks.com, 1 pfp.works, 1 pfr.email, 1 pfr.moe, 1 -pfrost.me, 1 pfsandbox.com, 1 pfsquad.nu, 1 pfssales.com, 1 @@ -95471,7 +95436,6 @@ phive.eu, 1 phixer.com, 1 phligence.com, 1 phobos.tk, 1 -phoenixbelgianvegg.com, 1 phoenixboard.tk, 1 phoenixcourt.gov, 1 phoenixdepositionservices.com, 1 @@ -95593,7 +95557,6 @@ photosight.ru, 1 photosight.tk, 1 photosoftware.nl, 1 phototechnique.tk, 1 -phototravel.uk, 1 phototrio.com, 1 photoutils.com, 1 photowall.tk, 1 @@ -95744,6 +95707,7 @@ piccolinokids.gr, 1 piccolo-parties.co.uk, 1 picdefacer.com, 1 pichainlabs.com, 1 +pichlerei.at, 1 pick.aw, 1 pick150.hu, 1 picka.gift, 1 @@ -96074,7 +96038,6 @@ pipabella.com, 1 pipeclub.tk, 1 pipenav.gq, 1 pipenny.net, 1 -piperswe.me, 1 pipestonecounty.gov, 1 pipfrosch.com, 0 pippenainteasy.com, 1 @@ -96156,7 +96119,6 @@ pit-stop-sto.tk, 1 pitaiatrade.com, 1 pitbooks.ga, 1 pitbullclub.tk, 1 -pitbullinu.io, 1 pitbullsecuritysolutions.ca, 1 pitch.com, 1 pitchforkunion.tk, 1 @@ -96165,7 +96127,6 @@ pitchupp.com, 0 pitctestdomain.gov, 1 piter-print.tk, 1 piter178.tk, 1 -piterfish.ru, 1 pitergolds.ru, 1 pitfire.io, 1 pitius.tk, 1 @@ -96196,7 +96157,6 @@ pivnica.ga, 1 pivnica.gq, 1 pivnica.tk, 1 pivniraj.com, 1 -pivotalshift.co.uk, 1 pivotaltracker.com, 1 pivotanimation.org, 1 pivotanimation.tk, 1 @@ -96365,6 +96325,7 @@ plaintextpledge.net, 1 plaintextpledge.org, 1 plaintray.com, 1 plaisirdumouvement.com, 1 +plaisiretsens.com, 1 plaisirs-coquins.com, 1 plakakodlari.com, 1 plakbak.nl, 1 @@ -96609,7 +96570,6 @@ playlisten.radio.br, 1 playmat.com, 1 playmei.com, 1 playmytime.com, 1 -playnation.io, 1 playnow.com, 1 playnuganug.com, 1 playocean.net, 1 @@ -96623,6 +96583,7 @@ playsnake.org, 1 playsoftware.tk, 1 playsprout.industries, 1 playstation-network.ga, 1 +playstationplus.es, 1 playstationtrophies.org, 1 playtictactoe.org, 1 playtoearn.net, 1 @@ -97047,7 +97008,6 @@ podqueue.fm, 1 podroof.com, 0 podroof.com.au, 0 podshrink.de, 1 -podsvojostreho.net, 1 podvenec.tk, 1 podycust.co.uk, 1 poed.com.au, 1 @@ -97082,6 +97042,7 @@ pogljad-brest.tk, 1 pogodavolgograd.tk, 1 pogodok.tk, 1 pogomate.com, 1 +pogoswine.com, 1 pogotowie-komputerowe.tk, 1 pogotowiekomputeroweolsztyn.pl, 1 pogrebisky.net, 1 @@ -97312,6 +97273,7 @@ pollock.tk, 1 pollpodium.nl, 1 polly-tix.uk, 1 polly.spdns.org, 1 +pollyundpaule.de, 1 polmods.com, 1 polnischestoffe.eu, 1 polog.tk, 1 @@ -97370,7 +97332,6 @@ pomost.ga, 1 pomozmruczkom.pl, 1 pompefunebrilariviera.it, 0 pompeii.tickets, 1 -pompoco.info, 1 pomsinoz.com, 1 pomtom.co.nz, 1 ponca-nsn.gov, 1 @@ -98213,7 +98174,6 @@ preciousdad.com, 1 preciouspebble.co.uk, 1 preciscx.com, 1 preciseassemblies.com, 1 -precision-tops.com, 1 precision.st, 1 precisionclan.com, 1 precisioncoolingco.com, 1 @@ -98549,7 +98509,6 @@ princelishan.com.tw, 1 princemathew.tk, 1 princemolak.ga, 1 princes-st.org.nz, 1 -princesparktouch.com, 1 princess-vip-escort.com, 1 princess.software, 1 princessbackpack.de, 1 @@ -99231,7 +99190,8 @@ propseller.com, 1 propshub.com, 1 propulse.xyz, 1 proquotient.com, 1 -proris.com, 0 +proregiotram.de, 1 +proris.com, 1 prosafilosofica.com.br, 0 proschlaf.at, 1 proscost.com, 1 @@ -101049,6 +101009,7 @@ radiocusco.tk, 1 radiodance.tk, 1 radiodarkwolf.tk, 1 radiodeluxe.ml, 1 +radiodetali-gold.ru, 1 radiodeutsch.com, 1 radiodevrijheid.tk, 1 radiodiagonal.tk, 1 @@ -102038,7 +101999,6 @@ really-simple-ssl.com, 1 reallyangryaboutchipshops.com, 1 reallybadidea.tk, 1 reallycooljobs.ga, 1 -reallygoodwebsites.co.uk, 1 reallytrusted.com, 1 reallywild.tk, 1 realm-of-shade.com, 1 @@ -102856,6 +102816,7 @@ remoteutilities.com, 1 remoteworkertech.asia, 1 remoteworkingpal.com, 1 remotewx.com, 1 +remotish.com, 1 remotley.com, 1 removalcellulite.com, 1 removallaser.com, 1 @@ -103062,6 +103023,7 @@ reputatiedesigners.nl, 1 reputationweaver.com, 1 request.cf, 1 requesthymn.com, 1 +requestr.co.uk, 1 requeue.ga, 1 requin.tk, 1 requirements.ga, 1 @@ -103357,6 +103319,7 @@ revers.tk, 1 reverse1999.wiki, 1 reverseaustralia.com, 1 reversecanada.com, 1 +reversecrucifixkm.altervista.org, 1 reversedns.tk, 1 reverseloansolutions.com, 1 reverselookupphone.us, 1 @@ -103734,7 +103697,6 @@ ridvan-vllasaliu.tk, 1 riechsteiner.tech, 1 riecht-besser.de, 1 riederle.com, 1 -riedl-shk.de, 1 riemzac.com, 1 riesenweber.id.au, 1 riesheating.com, 1 @@ -103886,7 +103848,6 @@ rise.global, 1 riseandrank.com, 1 risecomedy.com, 1 risecstate.gov, 1 -riselab.com.ua, 1 riseofmiddle-earth.tk, 1 riseofthewildwoman.com, 1 riseshost.ml, 1 @@ -103957,7 +103918,6 @@ rivennero.com, 1 river-rest.com, 1 river.gq, 1 riverbednetflowsupport.com, 1 -riverbendroofingnd.com, 1 rivercitybni.com, 1 riverford.co.uk, 1 riverhoa.org, 1 @@ -104122,6 +104082,7 @@ robert-reisemobil.de, 1 robert-victor.co.uk, 1 robert-wiek-transporte.de, 1 robertaltizer.com, 1 +robertamend.de, 1 robertattfield.com, 1 robertayamashita.com, 1 robertayamashita.com.br, 1 @@ -104580,7 +104541,6 @@ rook-playz.net, 1 rookiehpc.com, 1 rookiemamabear.com, 1 roolife.xyz, 0 -roolnews.id, 0 room-checkin24.de, 1 room-composite.com, 1 room.to, 0 @@ -105042,7 +105002,6 @@ rs-maschinenverleih.de, 1 rs-piscines.fr, 1 rs.wiki, 1 rs200.org, 1 -rsa-erp.com, 1 rsa-homeinsurance.co.uk, 1 rsanahuano.com, 1 rsap.ca, 1 @@ -105536,7 +105495,6 @@ ruyana.tk, 1 ruyatabirleri.com, 1 ruzaevka.tk, 1 rv-jpshop.com, 1 -rva-asbestgroep.nl, 1 rva.gov, 1 rvaneijk.io, 1 rvantwembeke.tk, 1 @@ -105578,7 +105536,6 @@ rxguide.nl, 1 rxo.com, 1 rxtx.pt, 1 rxxx.ml, 1 -ry88url.com, 1 ryabinushka.tk, 1 ryan-13.tk, 1 ryan-design.com, 1 @@ -106095,7 +106052,6 @@ sairus.fr, 1 saisandesh.org, 1 saisecure.net, 1 saisons-fruits-legumes.fr, 1 -saisyuusyou-ikebukuro.com, 1 saisyuusyou-omiya.com, 1 saisyuusyou-takasaki.com, 1 saisyuusyou-utsunomiya.com, 1 @@ -106918,6 +106874,7 @@ saturne.tk, 1 saturnjump.com, 1 saturuang.id, 0 satyamshivamsundaram.in, 1 +sauber.dk, 1 saubooks.tk, 1 saucelabs.com, 1 saucy.io, 1 @@ -107374,6 +107331,7 @@ schnuckenhof-wesseloh.de, 1 schnyder-werbung.ch, 0 schody-rozycki.pl, 1 schoenstatt-fathers.link, 1 +schoenstatt-fathers.us, 1 schoenstatt.link, 1 schoepski.de, 1 schoffelcountry.com, 1 @@ -107544,6 +107502,7 @@ schwertkriege.de, 1 schwienbacher-karl.it, 1 schwifty.cloud, 1 schwimmschule-kleine-fische.de, 1 +schwimmschulen.de, 1 schwinabart.com, 1 schwingen.net, 0 schwinger.me, 1 @@ -107735,7 +107694,7 @@ scrapcars.net.au, 1 scraperhireaustralia.com.au, 1 scrapfly.io, 1 scrapmartine.tk, 1 -scrapmycarperth.com.au, 1 +scrapmycarperth.com.au, 0 scratch-ppp.jp, 1 scratchbot.tk, 1 scratchzeeland.nl, 1 @@ -107757,6 +107716,7 @@ screeningxchange.com, 1 screenmachine.com, 1 screenpublisher.com, 1 screensizemap.com, 1 +screenstotaalshop.nl, 1 screenwalker.de, 1 screenwriter.tk, 1 screenzy.io, 1 @@ -108081,7 +108041,6 @@ secretmolodosti.ml, 1 secretmolodosti.tk, 1 secretofanah.com, 1 secretosbolivia.tk, 1 -secretpanties.com, 1 secrets-marketing.tk, 1 secretsdujeu.com, 1 secretserveronline.com, 1 @@ -108540,6 +108499,7 @@ sendaiouji.com, 1 sendbird.com, 1 sendbox.cz, 1 sender.party, 1 +sender.services, 1 senderismoinfantil.tk, 1 sendigperu.com, 1 sendingbee.com, 1 @@ -108735,7 +108695,6 @@ seosmart.gq, 1 seosof.com, 1 seosos.gq, 1 seosos.ml, 1 -seospecialist.ma, 0 seosprint.gq, 1 seostrit.cf, 1 seostrit.tk, 1 @@ -110009,7 +109968,6 @@ shoppingcharm.ga, 1 shoppingcharte.ga, 1 shoppingcheaper.ga, 1 shoppingcheapest.ga, 1 -shoppingchina.com.py, 1 shoppingcircus.ga, 1 shoppingclearance.ga, 1 shoppingcollections.ga, 1 @@ -110242,7 +110200,7 @@ shpilevsky.name, 1 shpiliak.com, 1 shpiliak.ru, 1 shpori.tk, 1 -shrapnel.com, 1 +shrapnel.com, 0 shrapnel.ga, 1 shraymonks.com, 1 shred.ch, 0 @@ -110664,7 +110622,6 @@ silvergoldbull.ge, 1 silvergoldbull.gl, 1 silvergoldbull.gr, 1 silvergoldbull.gt, 1 -silvergoldbull.hk, 1 silvergoldbull.hn, 1 silvergoldbull.hr, 1 silvergoldbull.hu, 1 @@ -110925,7 +110882,7 @@ simsnieuws.nl, 1 simstarstyle.tk, 1 simstime.net, 1 simulfund.com, 0 -simulhost.com, 1 +simulhost.com, 0 simulise.cloud, 1 simulise.com, 1 simulise.help, 1 @@ -112283,7 +112240,6 @@ snapaffiliate.net, 1 snapappointments.com, 1 snapappts.com, 1 snapbuzz.tk, 1 -snapchat.com, 1 snapfinance.com, 1 snapintegrations.net, 1 snapkit.com, 1 @@ -115799,7 +115755,6 @@ stripe.com, 1 stripe.network, 1 stripecdn.com, 1 striped.horse, 1 -stripehype.com, 1 striperite.com, 1 stripped-anarchy.xyz, 1 striptizer.tk, 1 @@ -115993,6 +115948,7 @@ studiomarcella.com, 1 studiomenfis.com, 1 studiomko.com, 1 studionowystyl.pl, 1 +studiopanamaitalia.com, 1 studiopirrate.com, 1 studioproapp.com, 1 studioriehl.com, 1 @@ -116098,7 +116054,6 @@ stuvus.uni-stuttgart.de, 1 stuyvesantoutdoor.com, 1 stview.me, 1 stwcforum.tk, 1 -stwola.eu, 1 stworzwirusa.tk, 1 stx.ie, 1 stygium.net, 0 @@ -117249,6 +117204,7 @@ sx8.ovh, 1 sxcvid.com, 1 sxistolithos.gr, 1 sxmd99.com, 1 +sxmnm.com, 1 sxtik.com, 1 sy-anduril.de, 1 sy24.ru, 1 @@ -117842,7 +117798,6 @@ taiwaniacapital.tw, 1 taiwanteama.com.tw, 1 taiwantechtrek.tk, 1 taiwantour.info, 0 -taiyouko-hatuden.net, 1 taizegroep.nl, 1 taj-portal.tk, 1 tajbrighton.tk, 1 @@ -118003,7 +117958,6 @@ tamamo.cat, 1 tamarac.gov, 1 tamareverson.tk, 1 tamarind.by, 1 -tamayahousing.com, 1 tambayology.com, 1 tambo.es, 1 tamboa.com, 1 @@ -118848,7 +118802,6 @@ techitalk.ga, 1 techitsol.tk, 1 techiwant.com, 1 techjobplaybook.nyc, 1 -techjoe.co, 1 techkeep.tk, 1 techkentucky.tk, 1 techkilla.tk, 1 @@ -119085,7 +119038,6 @@ tedroche.com, 1 tedsdivingsystem.com, 1 tedxyalesecondaryschool.com, 1 tedyst.ro, 1 -teebyhuman.com, 1 teecketing.com, 1 teehaus-shila.de, 1 teekaymedia.tk, 1 @@ -119345,7 +119297,6 @@ template-help.fr, 1 templated.ga, 1 templeandalucia.tk, 1 templete.tk, 1 -tempmail.ninja, 1 tempo.co, 1 tempocams.com, 1 tempocams.net, 1 @@ -119514,7 +119465,6 @@ termoidraulico.milano.it, 1 termoidraulico.roma.it, 1 termopares.tk, 1 termux.com, 1 -ternakbisnis.id, 1 ternex.ru, 1 ternitoday.it, 1 teronia.net, 1 @@ -119701,6 +119651,7 @@ tetrimus.com, 1 tetrisponse.io, 1 tetsua.com, 1 tetsudo.jp.net, 1 +tetsufan.com, 1 tetweb.ir, 1 teu-fel.com, 1 teufel-cloud.ddns.net, 1 @@ -120627,7 +120578,6 @@ themeridianway.com, 1 themesurgeons.net, 1 themetropreneur.com, 1 themexicos.tk, 1 -themexx.at, 1 themiddle.co, 1 themigraineinstitute.com, 1 themilanlife.com, 1 @@ -121635,6 +121585,7 @@ tiendafetichista.com, 1 tiendagamer.co, 1 tiendamacoco.com.ar, 1 tiendamaspatchwork.com, 1 +tiendamultimarca.com, 0 tiendatecnologica.net, 1 tiener-herentals.be, 1 tienerdienst-johanneskapel.tk, 1 @@ -121879,7 +121830,6 @@ timsayedmd.com, 1 timscheuermann.ddns.net, 1 timseverien.com, 1 timstoffel.net, 0 -timstruction.com, 1 timtaubert.de, 1 timtelfer.com, 1 timtj.ca, 1 @@ -121980,6 +121930,7 @@ tips4gamers.com, 1 tips4india.tk, 1 tipsavvy.ca, 1 tipsfinal.tk, 1 +tipsfitness.net, 1 tipsforgamers.com, 1 tipskanalen.cf, 1 tipslifetimefitness.ga, 1 @@ -122157,6 +122108,7 @@ tmcreationweb.com, 1 tmdb.biz, 1 tmeoworld.tk, 1 tmf.ru, 1 +tmf22.ru, 1 tmhanoi.com, 1 tmheatingcooling.com, 1 tmhr.moe, 1 @@ -122260,6 +122212,7 @@ tobiaswiese.net, 1 tobiaswiese.org, 1 tobiaswiese.work, 1 tobiefornerod.ch, 1 +tobiichi3227.ddns.net, 1 tobis-rundfluege.de, 1 tobis.cloud, 1 tobischo.de, 1 @@ -122766,7 +122719,6 @@ topanimecharacters.com, 1 topanlage.de, 1 toparkinfo.hu, 1 topas.tk, 1 -topask.ru, 1 topaxi.codes, 0 topbestsellerproduct.com, 1 topbloc.com, 1 @@ -123142,7 +123094,9 @@ touhidur.ru.com, 1 touhidur.sa.com, 1 touhidur.tech, 1 touhidur.tk, 1 +touhidur.xyz, 1 touhidur.za.com, 1 +touhidurrr.me, 1 touhou.ac.cn, 0 touhou.cc, 1 touhou.tw, 1 @@ -124436,7 +124390,6 @@ truedarkness.tk, 1 trueduality.net, 1 truegunvalue.com, 1 truehealth.tk, 1 -truehealthreport.com, 0 truekey.com, 1 truelovesakuya.info, 1 truemedieval.cz, 1 @@ -124610,6 +124563,7 @@ tryfrontline.cloud, 1 tryfunky.com, 1 tryhard.cz, 1 tryhexadecimal.com, 1 +tryin.cz, 1 tryingtotakeoversweden.tk, 1 tryingtotakeovertheworld.tk, 1 tryitonline.net, 1 @@ -125508,7 +125462,7 @@ u-watch.it, 1 u-zoloto.ru, 1 u.nu, 1 u.sb, 1 -u00228.com, 0 +u00228.com, 1 u0060.com, 0 u0070.com, 1 u0080.com, 0 @@ -125538,6 +125492,7 @@ u32i64.cf, 1 u36533.com, 1 u4.re, 1 u4mh-dev-accesscontroller.azurewebsites.net, 1 +u4mh-dev-portal.azurewebsites.net, 1 u5.re, 1 u51365.com, 1 u5197.co, 1 @@ -125598,7 +125553,6 @@ uberi.fi, 1 ubermail.me, 1 uberpromocodes.us, 1 ubersmith.com, 1 -uberstrategist.com, 1 ubertt.org, 1 uberwald.ws, 1 ubezpieczeniaonline.pl, 1 @@ -125693,7 +125647,6 @@ udigital.nl, 1 udik.tk, 1 udilicitana.com, 1 udinetoday.it, 1 -udiutv.no, 1 udla.edu.ec, 1 udmarbella.tk, 1 udmddn.ru, 1 @@ -126251,7 +126204,6 @@ united.com, 0 unitedadmins.com, 1 unitedarmyofentropia.tk, 1 unitedbaby.fr, 1 -unitedbeautysupply.com, 1 unitedbusinessbank.com, 1 unitedcarremoval.com.au, 1 unitedcyberdevelopment.com, 1 @@ -126945,7 +126897,6 @@ usportsgo.com, 1 uspreventiveservicestaskforce.org, 1 usr.nz, 0 usrspace.at, 1 -uss-atlas.de, 1 ussemiquincentennial.gov, 1 ussm.gov, 1 ussm.tk, 1 @@ -127036,7 +126987,6 @@ utural.tk, 1 utvbloggen.se, 1 utw.me, 1 utwente.io, 1 -utwf.org, 1 utzon.net, 1 uu5197.co, 1 uu6729.co, 1 @@ -128208,7 +128158,6 @@ veseleruska.sk, 1 veselka.tk, 1 veselyjpovar.gq, 1 vesen.tk, 1 -vesinhcongnghiepttchome.com, 1 vesmail.biz, 1 vesmail.email, 1 vesna2011.tk, 1 @@ -128506,6 +128455,7 @@ videozv.tk, 1 videt-son.cf, 1 videt-son.ml, 1 videt-son.tk, 1 +vidimte.eu, 1 vidiobokep.xyz, 1 vidiproject.com, 1 vidister.de, 0 @@ -128914,16 +128864,16 @@ vip-soski.tk, 1 vip-ssl.com, 1 vip-transfer.by, 1 vip.de, 1 -vip00228.com, 0 -vip11018.com, 0 +vip00228.com, 1 +vip11018.com, 1 vip2132.com, 1 -vip22884.com, 0 +vip22884.com, 1 vip4553.com, 1 vip45bet365.com, 0 vip5132.com, 1 vip5414.com, 1 vip6132.com, 1 -vip77018.com, 0 +vip77018.com, 1 vip8522.com, 1 vipdirektolog.ru, 0 vipenvia.com.br, 1 @@ -129194,7 +129144,6 @@ vitaalcheck.nl, 1 vitaalfitcoaching.nl, 1 vitacare.com.au, 1 vitacellbiologics.com, 1 -vitahaute.com, 0 vitahook.pw, 1 vitahost.ml, 1 vitakov.tk, 1 @@ -129228,7 +129177,6 @@ vitaminka.tk, 1 vitaminmovie.ga, 1 vitaminoutlet.net, 1 vitamixromania.ro, 1 -vitanayura.es, 1 vitapingu.de, 1 vitario.eu, 1 vitastic.nl, 1 @@ -129327,10 +129275,9 @@ viviennevandenbos.nl, 1 vivirenelmundo.com, 1 vivirenelpoblado.com, 1 vivo.cam, 1 -vivo.vn, 1 +vivo.vn, 0 vivoitaliankitchen.com, 1 vivoldi.com, 1 -vivoregularizafacil.com.br, 1 vivoseg.com, 0 vivre-en-allemagne.com, 1 vivreenisrael.com, 1 @@ -129531,7 +129478,6 @@ voctto.com.br, 1 vocus.aero, 1 vocustest.aero, 1 vod.uk.com, 0 -voda.org.ru, 1 vodachile.cl, 1 vodadombay.cf, 1 vodafone.com.gh, 1 @@ -130242,7 +130188,6 @@ w82365.com, 1 w84.it, 1 w8605.com, 1 w8628.com, 1 -w8659.com, 1 w888022.com, 0 w888033.com, 0 w888044.com, 0 @@ -130805,7 +130750,6 @@ wausharacountywi.gov, 1 wauwatosa.gov, 1 wauzaji.com, 1 wav-productions.com, 1 -wav.tv, 1 wave-inc.co.jp, 1 wave.is, 1 wave.red, 1 @@ -131055,7 +130999,6 @@ webachtal.com, 1 webadiccion.net, 1 webadicta.net, 1 webadicto.net, 1 -webaeon.org, 1 webagentur-flake.de, 1 webaholic.co.in, 1 webais.ru, 1 @@ -131837,7 +131780,6 @@ westcountrystalking.com, 1 westcreekna.org, 1 westendwifi.net, 1 westerdraai.tk, 1 -westernfrontierins.com, 1 westernpadermatologist.com, 1 westernparts.com, 0 westernstairlifts.com, 1 @@ -132069,6 +132011,7 @@ whereveryougo.space, 1 whexit.nl, 1 whey-protein.ch, 1 wheyteck.com, 1 +whichdoctor.com, 1 whichgender.today, 1 whichphish.com, 1 whiff-of-grape.ca, 1 @@ -132188,7 +132131,6 @@ whocalld.com, 1 whocalled.us, 1 whocalledme.xyz, 1 whocrushonme.com, 1 -whodatdish.com, 1 whodiduexpect.com, 1 whoiscuter.ml, 1 whoiscutest.ml, 1 @@ -132353,6 +132295,7 @@ wiki-iknownaught.ddns.net, 1 wiki-pedia.org, 1 wiki-play.ru, 1 wiki.berlin, 1 +wiki.python.org, 1 wiki.voyage, 1 wiki24.ru, 1 wikiboard.tk, 1 @@ -132504,7 +132447,6 @@ wild-reels.com, 1 wild-turtles.com, 1 wild.at, 1 wildanalysis.ga, 1 -wildandisle.com, 1 wildandwonderfulbodycare.com, 1 wildandwonderfulketo.com, 1 wildanfauzy.com, 0 @@ -132962,7 +132904,6 @@ withyoutube.com, 1 witneywaterpolo.org.uk, 1 witrey.com, 1 witsvideo.com, 1 -witt-international.co.uk, 1 wittamer.com, 0 wittebrug.nl, 1 wittepapaver.nl, 1 @@ -133783,7 +133724,6 @@ wrmea.org, 1 wrmh343.org, 1 wrn.sh, 1 wrnck.cloud, 1 -wrnmb.xyz, 1 wroclawguide.com, 1 wrong.wang, 0 wrozbyonline.pl, 1 @@ -134034,11 +133974,11 @@ www.vino.com, 0 www.wepay.com, 1 www.wordpress.com, 0 www.zdnet.com, 1 -www00228a.com, 0 -www00228b.com, 0 -www00228c.com, 0 -www00228d.com, 0 -www00228e.com, 0 +www00228a.com, 1 +www00228b.com, 1 +www00228c.com, 1 +www00228d.com, 1 +www00228e.com, 1 www68277.com, 1 wwwbox.nl, 1 wwwclan.tk, 1 @@ -134047,7 +133987,7 @@ wwwebtime.com, 1 wwwhackeronecom.com, 1 wwwindows.co.uk, 1 wwwithcarrie.com, 1 -wwwn888.com, 0 +wwwn888.com, 1 wwww.nz, 1 wwwwnews.tk, 1 wwx.duckdns.org, 1 @@ -134125,7 +134065,6 @@ x-iweb.ru, 1 x-lan.be, 1 x-net24.pl, 1 x-one.co.jp, 1 -x-orbit.dk, 1 x-team.co.il, 1 x-way.org, 1 x.io, 1 @@ -135586,26 +135525,26 @@ y5bet.com, 1 y6180.com, 1 y6729.co, 1 y6729.com, 1 -y68cc.com, 0 -y68ee.com, 0 -y68ff.com, 0 -y68gg.com, 0 +y68cc.com, 1 +y68ee.com, 1 +y68ff.com, 1 +y68gg.com, 1 y68gl.com, 1 -y68hh.com, 0 -y68ii.com, 0 -y68jj.com, 0 +y68hh.com, 1 +y68ii.com, 1 +y68jj.com, 1 y68jn.com, 1 -y68ll.com, 0 +y68ll.com, 1 y68oo.com, 1 -y68pp.com, 0 -y68qq.com, 0 -y68rr.com, 0 +y68pp.com, 1 +y68qq.com, 1 +y68rr.com, 1 y68sc.com, 1 y68sz.com, 1 -y68tt.com, 0 -y68uu.com, 0 -y68yy.com, 0 -y68zz.com, 0 +y68tt.com, 1 +y68uu.com, 1 +y68yy.com, 1 +y68zz.com, 1 y6957.co, 1 y6bet.com, 1 y70102.com, 1 @@ -135932,7 +135871,6 @@ yawnbox.com, 0 yaws.cf, 1 yaxim.org, 1 yay-btcl.work, 1 -yay.cam, 1 yayart.club, 1 yayl888.com, 1 yaymaker.com, 1 @@ -136470,7 +136408,6 @@ yourantiquarian.com, 1 youraudiobooks.xyz, 1 yourazbraces.com, 1 yourberksbucksoxon.wedding, 1 -yourbind.com, 1 yourbittorrent.com, 1 yourbittorrent2.com, 1 yourblazeguard.com, 1 @@ -137258,7 +137195,6 @@ zarabotoklaif.tk, 1 zarabotokvnet.tk, 1 zarabotokvseti.tk, 1 zaracraft.tk, 1 -zaraheating.co.uk, 1 zaramendez.net, 1 zaratan.fr, 0 zaratime.com, 1 @@ -137454,7 +137390,6 @@ zeekajakvaren.tk, 1 zeekspace.com, 1 zeel.com, 1 zeelandbrug.tk, 1 -zeeshan.website, 1 zeet.tk, 1 zeetoppers.nl, 1 zefort.com, 1 @@ -138316,7 +138251,6 @@ zumberak.tk, 1 zummoricambi.com, 1 zumtaedanceschool.co.za, 1 zumturm.org, 1 -zumub.com, 1 zumwildenaffen.com, 1 zund-app.com, 1 zundapp.one, 1 @@ -138341,7 +138275,6 @@ zusterjansen.nl, 1 zuu.fi, 1 zuviel.space, 1 zuyzi.com, 1 -zuzannastrycharska.pl, 0 zuzumba.es, 1 zvejonys.lt, 1 zverskij-site.tk, 1 diff --git a/services/settings/dumps/blocklists/addons-bloomfilters.json b/services/settings/dumps/blocklists/addons-bloomfilters.json index 9dedd001782bf..309e3a43f47f5 100644 --- a/services/settings/dumps/blocklists/addons-bloomfilters.json +++ b/services/settings/dumps/blocklists/addons-bloomfilters.json @@ -1,5 +1,44 @@ { "data": [ + { + "stash": { + "blocked": [ + "{dc24b3ff-d733-4a80-bdcf-0f1ed010843b}:1.0", + "{5cbb3f62-6753-465b-a695-33be1c67d5b7}:1.2", + "{781ed80b-9ba6-4e89-a38e-fe84252450b3}:1.27", + "{ab1c21a8-01ad-4d9a-9464-88740a475515}:1.2", + "{f742746d-0667-4ab5-b940-f692e97bc097}:1.0", + "{97de2de4-b685-4ef7-be85-359b9998606d}:1.4", + "{7cbef835-d296-40f9-9e09-3da904936d20}:1.41", + "{02957e64-fff1-4961-9e78-5db3874720fa}:1.22", + "{ab1c21a8-01ad-4d9a-9464-88740a475515}:1.1", + "{798dc53b-15ff-4e8e-9595-f69a90f88d31}:1.3", + "{ab1c21a8-01ad-4d9a-9464-88740a475515}:1.0", + "{781ed80b-9ba6-4e89-a38e-fe84252450b3}:1.2", + "{5424532a-560d-4f70-9ea4-41191ff98289}:1.2" + ], + "unblocked": [] + }, + "schema": 1662381443833, + "key_format": "{guid}:{version}", + "stash_time": 1662554107130, + "id": "b9550b1a-c988-44d9-8ac8-880068aa545c", + "last_modified": 1662554243287 + }, + { + "stash": { + "blocked": [ + "{107379af-9887-4d18-9e13-bec28fa9a0bd}:1.6.9", + "{107379af-9887-4d18-9e13-bec28fa9a0bd}:1.6.8" + ], + "unblocked": [] + }, + "schema": 1662143842577, + "key_format": "{guid}:{version}", + "stash_time": 1662381307751, + "id": "f8daa3a0-67fa-4328-bac5-3ce080557bd7", + "last_modified": 1662381443719 + }, { "stash": { "blocked": [ @@ -2029,5 +2068,5 @@ "last_modified": 1656333551168 } ], - "timestamp": 1662143842464 + "timestamp": 1662554243287 } diff --git a/services/settings/dumps/security-state/intermediates.json b/services/settings/dumps/security-state/intermediates.json index 3f61ed415550c..52abde5a74c58 100644 --- a/services/settings/dumps/security-state/intermediates.json +++ b/services/settings/dumps/security-state/intermediates.json @@ -1,5 +1,59 @@ { "data": [ + { + "schema": 1662515823574, + "derHash": "Yjq+xvhacCisoQ9b3F2BtWtjFN8odD/8yE7KMvNa6EY=", + "subject": "CN=MuaSSL.com TLS Issuing ECC CA R1,O=Hao Quang Viet Software Company Limited,C=VN", + "subjectDN": "MGoxCzAJBgNVBAYTAlZOMTAwLgYDVQQKDCdIYW8gUXVhbmcgVmlldCBTb2Z0d2FyZSBDb21wYW55IExpbWl0ZWQxKTAnBgNVBAMMIE11YVNTTC5jb20gVExTIElzc3VpbmcgRUNDIENBIFIx", + "whitelist": false, + "attachment": { + "hash": "4bc297912beeadd2623b4a9a35eb5f3a3edd6b8122f64073f6c3feedbb3f3e56", + "size": 1894, + "filename": "aWadCp7kMcffucdctgN2uR7OBZm-XJI09tOLxjLbhv8=.pem", + "location": "security-state-staging/intermediates/cb2c8fd9-e390-4ea9-8d08-c689e5d173f2.pem", + "mimetype": "application/x-pem-file" + }, + "pubKeyHash": "aWadCp7kMcffucdctgN2uR7OBZm+XJI09tOLxjLbhv8=", + "crlite_enrolled": false, + "id": "9e0c4d64-984d-43a7-bce2-36a26101fe95", + "last_modified": 1662620223051 + }, + { + "schema": 1662469023493, + "derHash": "aZGdgg7fWCrbz44JKpKE2QF3LuK0Geqd4fWHLHkfxvo=", + "subject": "CN=Thawte EV RSA CN CA G2,O=DigiCert Inc,C=US", + "subjectDN": "MEUxCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxHzAdBgNVBAMTFlRoYXd0ZSBFViBSU0EgQ04gQ0EgRzI=", + "whitelist": false, + "attachment": { + "hash": "ce1818d94d078e469bacac8ce640901ec6f9ef4e08ee8ed1295da929ca3f4723", + "size": 1626, + "filename": "5jGxIiaHNj15fBcUBvvAsMfKNtiK_podXNf0YoRUoeI=.pem", + "location": "security-state-staging/intermediates/f5157a19-89e9-4513-9b51-b540e430b34c.pem", + "mimetype": "application/x-pem-file" + }, + "pubKeyHash": "5jGxIiaHNj15fBcUBvvAsMfKNtiK/podXNf0YoRUoeI=", + "crlite_enrolled": false, + "id": "e05d537c-e98a-4c16-8476-344896c66748", + "last_modified": 1662515823091 + }, + { + "schema": 1662043010551, + "derHash": "fAkS5d6EeLuG6OpGulrmXcOHC878vC9GeV7uz2SM++c=", + "subject": "CN=DigiCert Extended Validation CA G3,OU=www.digicert.com,O=DigiCert Inc,C=US", + "subjectDN": "MGwxCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xKzApBgNVBAMTIkRpZ2lDZXJ0IEV4dGVuZGVkIFZhbGlkYXRpb24gQ0EgRzM=", + "whitelist": false, + "attachment": { + "hash": "a9b8d926d5c6840a9c7cfbb16d22ea65f23628c6fdb4af615cb30e7d3ceaa1f1", + "size": 1158, + "filename": "26Ut6iLcm-3yJllopC51FzYrG4EvCSFIv9j5aRSvwvk=.pem", + "location": "security-state-staging/intermediates/d9eb8ff7-9305-49b0-b4e6-9b4a86ebd7f6.pem", + "mimetype": "application/x-pem-file" + }, + "pubKeyHash": "26Ut6iLcm+3yJllopC51FzYrG4EvCSFIv9j5aRSvwvk=", + "crlite_enrolled": false, + "id": "afc3f6a7-6865-4035-9978-68f1eaa2e5dc", + "last_modified": 1662469023022 + }, { "schema": 1662015423618, "derHash": "lzpBJ2/9AeAnoqrUnjTDeEbT6Xb/amILZxLjODIEGqY=", @@ -2520,24 +2574,6 @@ "id": "ca4bf929-8439-479e-b4c1-488d61f0e0c2", "last_modified": 1657328223438 }, - { - "schema": 1657327852035, - "derHash": "Yjq+xvhacCisoQ9b3F2BtWtjFN8odD/8yE7KMvNa6EY=", - "subject": "CN=MuaSSL.com TLS Issuing ECC CA R1,O=Hao Quang Viet Software Company Limited,C=VN", - "subjectDN": "MGoxCzAJBgNVBAYTAlZOMTAwLgYDVQQKDCdIYW8gUXVhbmcgVmlldCBTb2Z0d2FyZSBDb21wYW55IExpbWl0ZWQxKTAnBgNVBAMMIE11YVNTTC5jb20gVExTIElzc3VpbmcgRUNDIENBIFIx", - "whitelist": false, - "attachment": { - "hash": "4bc297912beeadd2623b4a9a35eb5f3a3edd6b8122f64073f6c3feedbb3f3e56", - "size": 1894, - "filename": "aWadCp7kMcffucdctgN2uR7OBZm-XJI09tOLxjLbhv8=.pem", - "location": "security-state-staging/intermediates/cb2c8fd9-e390-4ea9-8d08-c689e5d173f2.pem", - "mimetype": "application/x-pem-file" - }, - "pubKeyHash": "aWadCp7kMcffucdctgN2uR7OBZm+XJI09tOLxjLbhv8=", - "crlite_enrolled": true, - "id": "9e0c4d64-984d-43a7-bce2-36a26101fe95", - "last_modified": 1657328223426 - }, { "schema": 1657327852573, "derHash": "mI1rLYe69DghxNMEvisOjzJdwXt6Ig6TT1xbe63/jhw=", @@ -13644,24 +13680,6 @@ "id": "9c0eb9aa-b6ce-452b-9c28-80f98e51306b", "last_modified": 1641481037689 }, - { - "schema": 1641477708451, - "derHash": "aZGdgg7fWCrbz44JKpKE2QF3LuK0Geqd4fWHLHkfxvo=", - "subject": "CN=Thawte EV RSA CN CA G2,O=DigiCert Inc,C=US", - "subjectDN": "MEUxCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxHzAdBgNVBAMTFlRoYXd0ZSBFViBSU0EgQ04gQ0EgRzI=", - "whitelist": false, - "attachment": { - "hash": "ce1818d94d078e469bacac8ce640901ec6f9ef4e08ee8ed1295da929ca3f4723", - "size": 1626, - "filename": "5jGxIiaHNj15fBcUBvvAsMfKNtiK_podXNf0YoRUoeI=.pem", - "location": "security-state-staging/intermediates/f5157a19-89e9-4513-9b51-b540e430b34c.pem", - "mimetype": "application/x-pem-file" - }, - "pubKeyHash": "5jGxIiaHNj15fBcUBvvAsMfKNtiK/podXNf0YoRUoeI=", - "crlite_enrolled": true, - "id": "e05d537c-e98a-4c16-8476-344896c66748", - "last_modified": 1641481037679 - }, { "schema": 1641477727214, "derHash": "TjD4AEwY09eY7Fp3NDRrWl6+jVRCPOmCV/xXc1pvc40=", @@ -14166,24 +14184,6 @@ "id": "ec135dce-52fb-4ab9-b488-075172498a7c", "last_modified": 1641481037065 }, - { - "schema": 1641477714475, - "derHash": "fAkS5d6EeLuG6OpGulrmXcOHC878vC9GeV7uz2SM++c=", - "subject": "CN=DigiCert Extended Validation CA G3,OU=www.digicert.com,O=DigiCert Inc,C=US", - "subjectDN": "MGwxCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xKzApBgNVBAMTIkRpZ2lDZXJ0IEV4dGVuZGVkIFZhbGlkYXRpb24gQ0EgRzM=", - "whitelist": false, - "attachment": { - "hash": "a9b8d926d5c6840a9c7cfbb16d22ea65f23628c6fdb4af615cb30e7d3ceaa1f1", - "size": 1158, - "filename": "26Ut6iLcm-3yJllopC51FzYrG4EvCSFIv9j5aRSvwvk=.pem", - "location": "security-state-staging/intermediates/d9eb8ff7-9305-49b0-b4e6-9b4a86ebd7f6.pem", - "mimetype": "application/x-pem-file" - }, - "pubKeyHash": "26Ut6iLcm+3yJllopC51FzYrG4EvCSFIv9j5aRSvwvk=", - "crlite_enrolled": true, - "id": "afc3f6a7-6865-4035-9978-68f1eaa2e5dc", - "last_modified": 1641481037045 - }, { "schema": 1641477725083, "derHash": "+WkIgIGfBs3MCy8iSyB/KvYAP7VzObhnmhYPqVII1i0=", @@ -26317,5 +26317,5 @@ "last_modified": 1559865863642 } ], - "timestamp": 1662037023056 + "timestamp": 1662620223051 }
This is an automated email from the git hooks/post-receive script.
richard pushed a commit to branch geckoview-102.3.0esr-12.0-1 in repository tor-browser.
commit 7a4366e13b36f3012b90eef6b871a0eb393ef05b Author: Olli Pettay Olli.Pettay@helsinki.fi AuthorDate: Tue Sep 6 22:04:25 2022 +0000
Bug 1777574, automate CC zone handling, r=mccr8 a=RyanVM
Differential Revision: https://phabricator.services.mozilla.com/D156605 --- accessible/aom/AccessibleNode.h | 2 +- devtools/shared/heapsnapshot/DominatorTree.h | 2 +- devtools/shared/heapsnapshot/HeapSnapshot.h | 2 +- docshell/base/BrowsingContextGroup.h | 2 +- docshell/base/WindowContext.cpp | 4 +- docshell/base/WindowContext.h | 2 +- docshell/shistory/ChildSHistory.cpp | 4 +- docshell/shistory/ChildSHistory.h | 2 +- dom/animation/AnimationEffect.cpp | 4 +- dom/animation/AnimationEffect.h | 2 +- dom/animation/AnimationTimeline.cpp | 4 +- dom/animation/AnimationTimeline.h | 2 +- dom/animation/CSSPseudoElement.h | 2 +- dom/base/AbstractRange.cpp | 4 +- dom/base/AbstractRange.h | 2 +- dom/base/Attr.cpp | 4 +- dom/base/Attr.h | 2 +- dom/base/BarProps.h | 2 +- dom/base/CharacterData.cpp | 6 +- dom/base/CharacterData.h | 4 +- dom/base/Crypto.h | 2 +- dom/base/CustomElementRegistry.cpp | 2 +- dom/base/DOMImplementation.h | 2 +- dom/base/DOMIntersectionObserver.h | 2 +- dom/base/DOMMatrix.h | 2 +- dom/base/DOMParser.h | 2 +- dom/base/DOMPoint.h | 2 +- dom/base/DOMQuad.h | 2 +- dom/base/DOMRect.h | 4 +- dom/base/DOMStringList.h | 2 +- dom/base/External.h | 2 +- dom/base/FormData.cpp | 4 +- dom/base/FormData.h | 2 +- dom/base/FragmentOrElement.cpp | 6 +- dom/base/FragmentOrElement.h | 2 +- dom/base/IdleDeadline.h | 2 +- dom/base/IntlUtils.h | 2 +- dom/base/Location.h | 2 +- dom/base/Navigator.cpp | 4 +- dom/base/Navigator.h | 2 +- dom/base/PlacesWeakCallbackWrapper.h | 2 +- dom/base/ResizeObserver.cpp | 4 +- dom/base/ResizeObserver.h | 6 +- dom/base/ScreenLuminance.h | 2 +- dom/base/Selection.cpp | 3 +- dom/base/Selection.h | 2 +- dom/base/StructuredCloneTester.h | 2 +- dom/base/StyleSheetList.h | 2 +- dom/base/SubtleCrypto.h | 2 +- dom/base/TimeoutHandler.cpp | 2 +- dom/base/nsChildContentList.h | 2 +- dom/base/nsContentList.cpp | 3 +- dom/base/nsContentList.h | 2 +- dom/base/nsDOMAttributeMap.cpp | 4 +- dom/base/nsDOMAttributeMap.h | 2 +- dom/base/nsDOMCaretPosition.h | 2 +- dom/base/nsDOMMutationObserver.h | 2 +- dom/base/nsDOMTokenList.h | 2 +- dom/base/nsFrameLoader.h | 2 +- dom/base/nsHistory.h | 2 +- dom/base/nsJSEnvironment.cpp | 2 +- dom/base/nsMimeTypeArray.h | 4 +- dom/base/nsPluginArray.h | 4 +- dom/base/nsWindowRoot.cpp | 4 +- dom/base/nsWindowRoot.h | 2 +- dom/base/nsWrapperCache.h | 186 ++++++++++++++++++--- dom/bindings/CallbackObject.cpp | 2 +- dom/bindings/Codegen.py | 5 +- dom/bindings/SimpleGlobalObject.cpp | 4 +- dom/bindings/SimpleGlobalObject.h | 3 +- dom/bindings/nsScriptErrorWithStack.cpp | 2 +- dom/bindings/test/TestInterfaceIterableDouble.h | 2 +- .../test/TestInterfaceIterableDoubleUnion.h | 2 +- dom/bindings/test/TestInterfaceIterableSingle.h | 2 +- dom/bindings/test/TestInterfaceMaplike.h | 2 +- dom/bindings/test/TestInterfaceMaplikeJSObject.h | 2 +- dom/bindings/test/TestInterfaceMaplikeObject.h | 2 +- dom/bindings/test/TestInterfaceObservableArray.h | 2 +- dom/bindings/test/TestInterfaceSetlike.h | 2 +- dom/bindings/test/TestInterfaceSetlikeNode.h | 2 +- dom/bindings/test/TestTrialInterface.h | 2 +- .../test/WrapperCachedNonISupportsTestInterface.h | 2 +- dom/cache/Cache.h | 2 +- dom/cache/CacheStorage.h | 2 +- dom/canvas/CanvasGradient.h | 2 +- dom/canvas/CanvasPath.h | 2 +- dom/canvas/CanvasPattern.h | 2 +- dom/canvas/CanvasRenderingContext2D.cpp | 4 +- dom/canvas/CanvasRenderingContext2D.h | 2 +- dom/canvas/ClientWebGLContext.h | 26 +-- dom/canvas/ClientWebGLExtensions.h | 2 +- dom/canvas/ImageBitmap.h | 2 +- dom/canvas/ImageBitmapRenderingContext.h | 2 +- dom/canvas/OffscreenCanvasRenderingContext2D.cpp | 11 +- dom/canvas/XRWebGLLayer.h | 2 +- dom/clients/api/Client.h | 2 +- dom/clients/api/Clients.h | 2 +- dom/console/Console.cpp | 2 +- dom/console/ConsoleInstance.h | 2 +- dom/credentialmanagement/Credential.h | 2 +- dom/credentialmanagement/CredentialsContainer.h | 2 +- dom/crypto/CryptoKey.h | 2 +- dom/debugger/DebuggerNotification.h | 2 +- dom/debugger/DebuggerNotificationObserver.h | 2 +- dom/events/ClipboardItem.h | 2 +- dom/events/CustomEvent.cpp | 2 +- dom/events/DOMEventTargetHelper.cpp | 6 +- dom/events/DOMEventTargetHelper.h | 2 +- dom/events/DataTransfer.cpp | 3 +- dom/events/DataTransfer.h | 2 +- dom/events/DataTransferItem.h | 2 +- dom/events/DataTransferItemList.h | 2 +- dom/events/DeviceMotionEvent.h | 4 +- dom/events/Event.cpp | 6 +- dom/events/Event.h | 2 +- dom/events/ImageCaptureError.h | 2 +- dom/events/MessageEvent.cpp | 2 +- dom/events/PaintRequest.h | 4 +- dom/events/TextClause.h | 2 +- dom/events/Touch.h | 2 +- dom/events/TouchEvent.h | 2 +- dom/fetch/Headers.h | 2 +- dom/fetch/Request.cpp | 7 +- dom/fetch/Request.h | 4 +- dom/file/FileList.h | 2 +- dom/filesystem/Directory.cpp | 4 +- dom/filesystem/Directory.h | 2 +- dom/filesystem/compat/FileSystem.h | 2 +- dom/filesystem/compat/FileSystemDirectoryReader.h | 2 +- dom/filesystem/compat/FileSystemEntry.h | 2 +- dom/flex/Flex.h | 2 +- dom/flex/FlexItemValues.h | 2 +- dom/flex/FlexLineValues.h | 2 +- dom/fs/FileSystemDirectoryIterator.h | 2 +- dom/fs/FileSystemHandle.h | 2 +- dom/fs/FileSystemSyncAccessHandle.h | 2 +- dom/gamepad/Gamepad.h | 2 +- dom/gamepad/GamepadButton.h | 2 +- dom/gamepad/GamepadHapticActuator.h | 2 +- dom/gamepad/GamepadLightIndicator.h | 2 +- dom/geolocation/Geolocation.h | 2 +- dom/geolocation/GeolocationCoordinates.h | 2 +- dom/geolocation/GeolocationPosition.h | 2 +- dom/geolocation/GeolocationPositionError.h | 2 +- dom/grid/Grid.h | 2 +- dom/grid/GridArea.h | 2 +- dom/grid/GridDimension.h | 2 +- dom/grid/GridLine.h | 2 +- dom/grid/GridLines.h | 2 +- dom/grid/GridTrack.h | 2 +- dom/grid/GridTracks.h | 2 +- dom/html/ElementInternals.cpp | 4 +- dom/html/ElementInternals.h | 4 +- dom/html/HTMLAllCollection.h | 2 +- dom/html/HTMLCanvasElement.h | 2 +- dom/html/HTMLOptionsCollection.h | 4 +- dom/html/HTMLTableElement.cpp | 4 +- dom/html/MediaError.h | 2 +- dom/html/TimeRanges.h | 2 +- dom/html/ValidityState.h | 2 +- dom/html/nsDOMStringMap.cpp | 4 +- dom/html/nsDOMStringMap.h | 2 +- dom/indexedDB/IDBCursor.cpp | 4 +- dom/indexedDB/IDBIndex.cpp | 2 +- dom/indexedDB/IDBKeyRange.cpp | 2 +- dom/indexedDB/IDBObjectStore.cpp | 2 +- dom/indexedDB/IDBRequest.cpp | 2 +- dom/ipc/WindowGlobalChild.h | 2 +- dom/ipc/jsactor/JSActor.cpp | 4 +- dom/ipc/jsactor/JSActor.h | 2 +- dom/ipc/jsactor/JSProcessActorChild.cpp | 3 - dom/ipc/jsactor/JSProcessActorChild.h | 3 +- dom/ipc/jsactor/JSProcessActorParent.cpp | 3 - dom/ipc/jsactor/JSProcessActorParent.h | 3 +- dom/ipc/jsactor/JSWindowActorChild.cpp | 3 - dom/ipc/jsactor/JSWindowActorChild.h | 3 +- dom/ipc/jsactor/JSWindowActorParent.cpp | 3 - dom/ipc/jsactor/JSWindowActorParent.h | 3 +- dom/locks/Lock.h | 2 +- dom/locks/LockManager.h | 2 +- dom/media/GetUserMediaRequest.h | 2 +- dom/media/MediaDeviceInfo.h | 2 +- dom/media/MediaStreamError.h | 2 +- dom/media/VideoPlaybackQuality.h | 2 +- dom/media/eme/MediaKeyStatusMap.h | 2 +- dom/media/eme/MediaKeySystemAccess.h | 2 +- dom/media/eme/MediaKeys.cpp | 3 +- dom/media/eme/MediaKeys.h | 2 +- dom/media/mediacapabilities/MediaCapabilities.h | 2 +- dom/media/mediasession/MediaMetadata.h | 2 +- dom/media/mediasession/MediaSession.cpp | 3 +- dom/media/mediasession/MediaSession.h | 2 +- dom/media/webaudio/AudioListener.h | 2 +- dom/media/webaudio/AudioParam.cpp | 4 +- dom/media/webaudio/AudioParam.h | 2 +- dom/media/webaudio/AudioParamMap.h | 2 +- dom/media/webaudio/AudioWorkletProcessor.h | 2 +- dom/media/webaudio/PeriodicWave.h | 2 +- dom/media/webrtc/RTCCertificate.h | 2 +- dom/media/webrtc/RTCIdentityProviderRegistrar.h | 2 +- dom/media/webrtc/jsapi/PeerConnectionImpl.cpp | 3 +- dom/media/webrtc/jsapi/PeerConnectionImpl.h | 2 +- dom/media/webrtc/jsapi/RTCRtpReceiver.h | 2 +- dom/media/webrtc/jsapi/RTCRtpSender.h | 2 +- dom/media/webrtc/jsapi/RTCRtpTransceiver.cpp | 3 +- dom/media/webrtc/jsapi/RTCRtpTransceiver.h | 2 +- dom/media/webrtc/jsapi/RTCStatsReport.h | 2 +- dom/media/webspeech/recognition/SpeechGrammar.h | 2 +- .../webspeech/recognition/SpeechGrammarList.h | 2 +- .../recognition/SpeechRecognitionAlternative.h | 2 +- .../recognition/SpeechRecognitionResult.h | 2 +- .../recognition/SpeechRecognitionResultList.h | 2 +- dom/media/webspeech/synth/SpeechSynthesisVoice.h | 2 +- dom/media/webvtt/TextTrackCueList.h | 2 +- dom/media/webvtt/TextTrackRegion.h | 2 +- dom/messagechannel/MessageChannel.h | 2 +- dom/midi/MIDIInputMap.h | 2 +- dom/midi/MIDIOutputMap.h | 2 +- dom/payments/PaymentAddress.h | 2 +- dom/performance/EventCounts.h | 2 +- dom/performance/PerformanceEntry.h | 2 +- dom/performance/PerformanceNavigation.h | 2 +- dom/performance/PerformanceObserver.cpp | 3 +- dom/performance/PerformanceObserver.h | 2 +- dom/performance/PerformanceObserverEntryList.h | 2 +- dom/performance/PerformanceServerTiming.h | 2 +- dom/performance/PerformanceTiming.h | 2 +- dom/permission/Permissions.h | 2 +- dom/promise/Promise.cpp | 4 +- dom/push/PushManager.h | 2 +- dom/push/PushSubscription.h | 2 +- dom/quota/StorageManager.h | 2 +- dom/reporting/Report.h | 2 +- dom/reporting/ReportBody.h | 2 +- dom/reporting/ReportingObserver.cpp | 3 +- dom/reporting/ReportingObserver.h | 2 +- dom/reporting/TestingDeprecatedInterface.h | 2 +- dom/security/featurepolicy/FeaturePolicy.h | 2 +- dom/security/sanitizer/Sanitizer.h | 2 +- dom/serviceworkers/NavigationPreloadManager.h | 2 +- dom/serviceworkers/ServiceWorkerEvents.cpp | 2 +- dom/serviceworkers/ServiceWorkerEvents.h | 2 +- dom/storage/Storage.h | 2 +- dom/streams/ByteLengthQueuingStrategy.h | 2 +- dom/streams/CountQueuingStrategy.h | 4 +- dom/streams/ReadableStreamBYOBReader.h | 2 +- dom/streams/ReadableStreamDefaultReader.h | 2 +- dom/streams/TransformStream.h | 2 +- dom/streams/TransformStreamDefaultController.h | 2 +- dom/svg/SVGMatrix.h | 2 +- dom/system/IOUtils.h | 2 +- dom/u2f/U2F.cpp | 3 +- dom/u2f/U2F.h | 4 +- dom/url/URL.h | 2 +- dom/url/URLSearchParams.h | 2 +- dom/vr/VRDisplay.h | 4 +- dom/vr/XRFrame.h | 2 +- dom/vr/XRInputSource.h | 2 +- dom/vr/XRInputSourceArray.h | 2 +- dom/vr/XRPose.h | 2 +- dom/vr/XRRenderState.h | 2 +- dom/vr/XRViewport.h | 2 +- dom/webgpu/Buffer.h | 3 +- dom/webgpu/CanvasContext.h | 2 +- dom/webgpu/ObjectModel.h | 14 +- dom/webscheduling/WebTaskScheduler.h | 2 +- dom/workers/WorkerLocation.h | 2 +- dom/workers/WorkerNavigator.h | 2 +- dom/worklet/Worklet.cpp | 4 +- dom/worklet/Worklet.h | 2 +- dom/worklet/WorkletGlobalScope.cpp | 4 +- dom/worklet/WorkletGlobalScope.h | 3 +- dom/xhr/XMLHttpRequestMainThread.cpp | 2 +- dom/xslt/xpath/XPathResult.cpp | 3 +- dom/xslt/xpath/XPathResult.h | 2 +- dom/xslt/xslt/txMozillaXSLTProcessor.h | 4 +- gfx/layers/apz/util/CheckerboardReportService.h | 2 +- intl/l10n/FileSource.h | 2 +- intl/l10n/FluentBundle.h | 4 +- intl/l10n/FluentResource.h | 2 +- intl/l10n/L10nRegistry.h | 6 +- intl/l10n/Localization.h | 4 +- js/loader/ModuleLoadRequest.cpp | 2 +- js/xpconnect/loader/PrecompiledScript.h | 2 +- js/xpconnect/src/Sandbox.cpp | 4 +- js/xpconnect/src/SandboxPrivate.h | 4 +- layout/style/CSSKeyframeRule.cpp | 4 +- layout/style/CSSRuleList.h | 2 +- layout/style/MediaList.h | 2 +- layout/style/Rule.h | 2 +- layout/style/StyleSheet.cpp | 4 +- layout/style/StyleSheet.h | 2 +- layout/style/nsComputedDOMStyle.cpp | 4 +- layout/style/nsComputedDOMStyle.h | 2 +- layout/style/nsDOMCSSAttrDeclaration.h | 2 +- layout/xul/tree/nsTreeColumns.cpp | 3 +- layout/xul/tree/nsTreeColumns.h | 4 +- layout/xul/tree/nsTreeContentView.h | 4 +- storage/mozStorageAsyncStatementParams.h | 2 +- storage/mozStorageStatementParams.h | 2 +- storage/mozStorageStatementRow.h | 2 +- toolkit/components/extensions/DocumentObserver.h | 2 +- toolkit/components/extensions/MatchPattern.h | 4 +- .../extensions/WebExtensionContentScript.h | 2 +- toolkit/components/extensions/WebExtensionPolicy.h | 2 +- .../extensions/webidl-api/ExtensionAlarms.h | 2 +- .../extensions/webidl-api/ExtensionMockAPI.h | 2 +- .../extensions/webidl-api/ExtensionPort.cpp | 4 +- .../extensions/webidl-api/ExtensionPort.h | 2 +- .../extensions/webidl-api/ExtensionRuntime.h | 2 +- .../extensions/webidl-api/ExtensionTest.h | 2 +- .../extensions/webrequest/ChannelWrapper.cpp | 4 - .../extensions/webrequest/ChannelWrapper.h | 3 +- toolkit/components/glean/bindings/Category.h | 2 +- toolkit/components/glean/bindings/Glean.h | 2 +- toolkit/components/glean/bindings/GleanPings.h | 2 +- .../components/glean/bindings/private/Labeled.h | 2 +- .../components/sessionstore/SessionStoreFormData.h | 2 +- .../sessionstore/SessionStoreScrollData.h | 2 +- xpcom/base/CycleCollectedJSRuntime.cpp | 14 +- xpcom/base/nsCycleCollectionParticipant.h | 64 ++++--- xpcom/base/nsCycleCollector.cpp | 2 +- xpcom/tests/gtest/TestJSHolderMap.cpp | 3 +- 323 files changed, 577 insertions(+), 525 deletions(-)
diff --git a/accessible/aom/AccessibleNode.h b/accessible/aom/AccessibleNode.h index aec918828079b..e9b328b13d54c 100644 --- a/accessible/aom/AccessibleNode.h +++ b/accessible/aom/AccessibleNode.h @@ -101,7 +101,7 @@ class AccessibleNode : public nsISupports, public nsWrapperCache { explicit AccessibleNode(nsINode* aNode);
NS_DECL_CYCLE_COLLECTING_ISUPPORTS; - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(AccessibleNode); + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(AccessibleNode);
JSObject* WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto) final; dom::ParentObject GetParentObject() const; diff --git a/devtools/shared/heapsnapshot/DominatorTree.h b/devtools/shared/heapsnapshot/DominatorTree.h index e8e06ee076a1e..fb3275cf23a22 100644 --- a/devtools/shared/heapsnapshot/DominatorTree.h +++ b/devtools/shared/heapsnapshot/DominatorTree.h @@ -38,7 +38,7 @@ class DominatorTree final : public nsISupports, public nsWrapperCache { };
NS_DECL_CYCLE_COLLECTING_ISUPPORTS; - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(DominatorTree); + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(DominatorTree);
nsISupports* GetParentObject() const { return mParent; }
diff --git a/devtools/shared/heapsnapshot/HeapSnapshot.h b/devtools/shared/heapsnapshot/HeapSnapshot.h index b4aa316f4cee0..d7bbc5455320f 100644 --- a/devtools/shared/heapsnapshot/HeapSnapshot.h +++ b/devtools/shared/heapsnapshot/HeapSnapshot.h @@ -119,7 +119,7 @@ class HeapSnapshot final : public nsISupports, public nsWrapperCache { nsAString& outSnapshotId);
NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(HeapSnapshot) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(HeapSnapshot) MOZ_DECLARE_REFCOUNTED_TYPENAME(HeapSnapshot)
nsISupports* GetParentObject() const { return mParent; } diff --git a/docshell/base/BrowsingContextGroup.h b/docshell/base/BrowsingContextGroup.h index 6e4dedaafc431..2ad92273f857b 100644 --- a/docshell/base/BrowsingContextGroup.h +++ b/docshell/base/BrowsingContextGroup.h @@ -38,7 +38,7 @@ class DocGroup; class BrowsingContextGroup final : public nsWrapperCache { public: NS_INLINE_DECL_CYCLE_COLLECTING_NATIVE_REFCOUNTING(BrowsingContextGroup) - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_NATIVE_CLASS(BrowsingContextGroup) + NS_DECL_CYCLE_COLLECTION_NATIVE_WRAPPERCACHE_CLASS(BrowsingContextGroup)
// Interact with the list of synced contexts. This controls the lifecycle of // the BrowsingContextGroup and contexts loaded within them. diff --git a/docshell/base/WindowContext.cpp b/docshell/base/WindowContext.cpp index 29eb2d32f3462..2c31c24fda04b 100644 --- a/docshell/base/WindowContext.cpp +++ b/docshell/base/WindowContext.cpp @@ -567,7 +567,7 @@ NS_INTERFACE_MAP_END NS_IMPL_CYCLE_COLLECTING_ADDREF(WindowContext) NS_IMPL_CYCLE_COLLECTING_RELEASE(WindowContext)
-NS_IMPL_CYCLE_COLLECTION_CLASS(WindowContext) +NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(WindowContext)
NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(WindowContext) if (gWindowContexts) { @@ -584,8 +584,6 @@ NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(WindowContext) NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mChildren) NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
-NS_IMPL_CYCLE_COLLECTION_TRACE_WRAPPERCACHE(WindowContext) - } // namespace dom
namespace ipc { diff --git a/docshell/base/WindowContext.h b/docshell/base/WindowContext.h index 469de6f4eb8ec..ebacffc2f7b5f 100644 --- a/docshell/base/WindowContext.h +++ b/docshell/base/WindowContext.h @@ -103,7 +103,7 @@ class WindowContext : public nsISupports, public nsWrapperCache { MOZ_DECL_SYNCED_CONTEXT(WindowContext, MOZ_EACH_WC_FIELD)
NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(WindowContext) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(WindowContext)
public: static already_AddRefed<WindowContext> GetById(uint64_t aInnerWindowId); diff --git a/docshell/shistory/ChildSHistory.cpp b/docshell/shistory/ChildSHistory.cpp index b42e57bb06324..d455305081b5f 100644 --- a/docshell/shistory/ChildSHistory.cpp +++ b/docshell/shistory/ChildSHistory.cpp @@ -264,7 +264,7 @@ NS_INTERFACE_MAP_END NS_IMPL_CYCLE_COLLECTING_ADDREF(ChildSHistory) NS_IMPL_CYCLE_COLLECTING_RELEASE(ChildSHistory)
-NS_IMPL_CYCLE_COLLECTION_CLASS(ChildSHistory) +NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(ChildSHistory)
NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(ChildSHistory) if (tmp->mHistory) { @@ -278,8 +278,6 @@ NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(ChildSHistory) NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mBrowsingContext, mHistory) NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
-NS_IMPL_CYCLE_COLLECTION_TRACE_WRAPPERCACHE(ChildSHistory) - JSObject* ChildSHistory::WrapObject(JSContext* cx, JS::Handle<JSObject*> aGivenProto) { return ChildSHistory_Binding::Wrap(cx, this, aGivenProto); diff --git a/docshell/shistory/ChildSHistory.h b/docshell/shistory/ChildSHistory.h index eed0871621d9c..031c91c7daf1c 100644 --- a/docshell/shistory/ChildSHistory.h +++ b/docshell/shistory/ChildSHistory.h @@ -37,7 +37,7 @@ class BrowsingContext; class ChildSHistory : public nsISupports, public nsWrapperCache { public: NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(ChildSHistory) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(ChildSHistory) nsISupports* GetParentObject() const; JSObject* WrapObject(JSContext* cx, JS::Handle<JSObject*> aGivenProto) override; diff --git a/dom/animation/AnimationEffect.cpp b/dom/animation/AnimationEffect.cpp index 3ed190121845d..5d2b7e057f30d 100644 --- a/dom/animation/AnimationEffect.cpp +++ b/dom/animation/AnimationEffect.cpp @@ -16,7 +16,7 @@
namespace mozilla::dom {
-NS_IMPL_CYCLE_COLLECTION_CLASS(AnimationEffect) +NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(AnimationEffect) NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(AnimationEffect) NS_IMPL_CYCLE_COLLECTION_UNLINK(mDocument, mAnimation) NS_IMPL_CYCLE_COLLECTION_UNLINK_PRESERVED_WRAPPER @@ -26,8 +26,6 @@ NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(AnimationEffect) NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mDocument, mAnimation) NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
-NS_IMPL_CYCLE_COLLECTION_TRACE_WRAPPERCACHE(AnimationEffect) - NS_IMPL_CYCLE_COLLECTING_ADDREF(AnimationEffect) NS_IMPL_CYCLE_COLLECTING_RELEASE(AnimationEffect)
diff --git a/dom/animation/AnimationEffect.h b/dom/animation/AnimationEffect.h index 0986650f11834..020f491a58fab 100644 --- a/dom/animation/AnimationEffect.h +++ b/dom/animation/AnimationEffect.h @@ -30,7 +30,7 @@ class Document; class AnimationEffect : public nsISupports, public nsWrapperCache { public: NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(AnimationEffect) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(AnimationEffect)
AnimationEffect(Document* aDocument, TimingParams&& aTiming);
diff --git a/dom/animation/AnimationTimeline.cpp b/dom/animation/AnimationTimeline.cpp index 4a95d7ec4d2b6..ec5129e0b2584 100644 --- a/dom/animation/AnimationTimeline.cpp +++ b/dom/animation/AnimationTimeline.cpp @@ -12,7 +12,7 @@ namespace mozilla::dom {
AnimationTimeline::~AnimationTimeline() { mAnimationOrder.clear(); }
-NS_IMPL_CYCLE_COLLECTION_CLASS(AnimationTimeline) +NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(AnimationTimeline)
NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(AnimationTimeline) tmp->mAnimationOrder.clear(); @@ -24,8 +24,6 @@ NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(AnimationTimeline) NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mWindow, mAnimations) NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
-NS_IMPL_CYCLE_COLLECTION_TRACE_WRAPPERCACHE(AnimationTimeline) - NS_IMPL_CYCLE_COLLECTING_ADDREF(AnimationTimeline) NS_IMPL_CYCLE_COLLECTING_RELEASE(AnimationTimeline)
diff --git a/dom/animation/AnimationTimeline.h b/dom/animation/AnimationTimeline.h index f2af12ca93300..f0c6cc67cf4b3 100644 --- a/dom/animation/AnimationTimeline.h +++ b/dom/animation/AnimationTimeline.h @@ -38,7 +38,7 @@ class AnimationTimeline : public nsISupports, public nsWrapperCache {
public: NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(AnimationTimeline) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(AnimationTimeline)
nsIGlobalObject* GetParentObject() const { return mWindow; }
diff --git a/dom/animation/CSSPseudoElement.h b/dom/animation/CSSPseudoElement.h index 1ba2d18a630e5..4b5fbc917c325 100644 --- a/dom/animation/CSSPseudoElement.h +++ b/dom/animation/CSSPseudoElement.h @@ -23,7 +23,7 @@ class UnrestrictedDoubleOrKeyframeAnimationOptions; class CSSPseudoElement final : public nsWrapperCache { public: NS_INLINE_DECL_CYCLE_COLLECTING_NATIVE_REFCOUNTING(CSSPseudoElement) - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_NATIVE_CLASS(CSSPseudoElement) + NS_DECL_CYCLE_COLLECTION_NATIVE_WRAPPERCACHE_CLASS(CSSPseudoElement)
protected: virtual ~CSSPseudoElement(); diff --git a/dom/base/AbstractRange.cpp b/dom/base/AbstractRange.cpp index fad2d73b51c9c..ca9e8274b5d91 100644 --- a/dom/base/AbstractRange.cpp +++ b/dom/base/AbstractRange.cpp @@ -58,7 +58,7 @@ NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(AbstractRange) NS_INTERFACE_MAP_ENTRY(nsISupports) NS_INTERFACE_MAP_END
-NS_IMPL_CYCLE_COLLECTION_CLASS(AbstractRange) +NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(AbstractRange)
NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(AbstractRange) NS_IMPL_CYCLE_COLLECTION_UNLINK(mOwner); @@ -73,8 +73,6 @@ NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(AbstractRange) NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mEnd) NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
-NS_IMPL_CYCLE_COLLECTION_TRACE_WRAPPERCACHE(AbstractRange) - // NOTE: If you need to change default value of members of AbstractRange, // update nsRange::Create(nsINode* aNode) and ClearForReuse() too. AbstractRange::AbstractRange(nsINode* aNode) diff --git a/dom/base/AbstractRange.h b/dom/base/AbstractRange.h index 8160b6ca1827b..146b8965cfef5 100644 --- a/dom/base/AbstractRange.h +++ b/dom/base/AbstractRange.h @@ -42,7 +42,7 @@ class AbstractRange : public nsISupports, public nsWrapperCache { static void Shutdown();
NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(AbstractRange) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(AbstractRange)
const RangeBoundary& StartRef() const { return mStart; } const RangeBoundary& EndRef() const { return mEnd; } diff --git a/dom/base/Attr.cpp b/dom/base/Attr.cpp index f8d2f52562eb1..a0ec3ec5b838c 100644 --- a/dom/base/Attr.cpp +++ b/dom/base/Attr.cpp @@ -43,7 +43,7 @@ Attr::Attr(nsDOMAttributeMap* aAttrMap, // to drop our reference when it goes away. }
-NS_IMPL_CYCLE_COLLECTION_CLASS(Attr) +NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(Attr)
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(Attr) if (!nsINode::Traverse(tmp, cb)) { @@ -52,8 +52,6 @@ NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(Attr) NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mAttrMap) NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
-NS_IMPL_CYCLE_COLLECTION_TRACE_WRAPPERCACHE(Attr) - NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(Attr) nsINode::Unlink(tmp); NS_IMPL_CYCLE_COLLECTION_UNLINK(mAttrMap) diff --git a/dom/base/Attr.h b/dom/base/Attr.h index dfac0c727a4d5..fa4347d8fbba8 100644 --- a/dom/base/Attr.h +++ b/dom/base/Attr.h @@ -74,7 +74,7 @@ class Attr final : public nsINode { static void Initialize(); static void Shutdown();
- NS_DECL_CYCLE_COLLECTION_SKIPPABLE_SCRIPT_HOLDER_CLASS(Attr) + NS_DECL_CYCLE_COLLECTION_SKIPPABLE_WRAPPERCACHE_CLASS(Attr)
// WebIDL virtual JSObject* WrapNode(JSContext* aCx, diff --git a/dom/base/BarProps.h b/dom/base/BarProps.h index a788ca1c76fa2..f7c4c8b95a9ef 100644 --- a/dom/base/BarProps.h +++ b/dom/base/BarProps.h @@ -35,7 +35,7 @@ class BarProp : public nsISupports, public nsWrapperCache { explicit BarProp(nsGlobalWindowInner* aWindow);
NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(BarProp) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(BarProp)
nsPIDOMWindowInner* GetParentObject() const;
diff --git a/dom/base/CharacterData.cpp b/dom/base/CharacterData.cpp index 7f547fec9639b..29ff4f9761d10 100644 --- a/dom/base/CharacterData.cpp +++ b/dom/base/CharacterData.cpp @@ -66,9 +66,9 @@ Element* CharacterData::GetNameSpaceElement() { return Element::FromNodeOrNull(GetParentNode()); }
-NS_IMPL_CYCLE_COLLECTION_CLASS(CharacterData) - -NS_IMPL_CYCLE_COLLECTION_TRACE_WRAPPERCACHE(CharacterData) +// Note, _INHERITED macro isn't used here since nsINode implementations are +// rather special. +NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(CharacterData)
NS_IMPL_CYCLE_COLLECTION_CAN_SKIP_BEGIN(CharacterData) return Element::CanSkip(tmp, aRemovingAllowed); diff --git a/dom/base/CharacterData.h b/dom/base/CharacterData.h index 4b6c2d2c17bd4..4f125953ef366 100644 --- a/dom/base/CharacterData.h +++ b/dom/base/CharacterData.h @@ -190,8 +190,8 @@ class CharacterData : public nsIContent {
//----------------------------------------
- NS_DECL_CYCLE_COLLECTION_SKIPPABLE_SCRIPT_HOLDER_CLASS_INHERITED( - CharacterData, nsIContent) + NS_DECL_CYCLE_COLLECTION_SKIPPABLE_WRAPPERCACHE_CLASS_INHERITED(CharacterData, + nsIContent)
/** * Compare two CharacterData nodes for text equality. diff --git a/dom/base/Crypto.h b/dom/base/Crypto.h index bc0d65bb8bceb..02282324c0ac5 100644 --- a/dom/base/Crypto.h +++ b/dom/base/Crypto.h @@ -27,7 +27,7 @@ class Crypto final : public nsISupports, public nsWrapperCache { explicit Crypto(nsIGlobalObject* aParent);
NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(Crypto) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(Crypto)
void GetRandomValues(JSContext* aCx, const ArrayBufferView& aArray, JS::MutableHandle<JSObject*> aRetval, ErrorResult& aRv); diff --git a/dom/base/CustomElementRegistry.cpp b/dom/base/CustomElementRegistry.cpp index e29f792d75d16..bdfd6df907644 100644 --- a/dom/base/CustomElementRegistry.cpp +++ b/dom/base/CustomElementRegistry.cpp @@ -389,7 +389,7 @@ class MOZ_RAII AutoConstructionStackEntry final {
} // namespace
-NS_IMPL_CYCLE_COLLECTION_MULTI_ZONE_JSHOLDER_CLASS(CustomElementRegistry) +NS_IMPL_CYCLE_COLLECTION_CLASS(CustomElementRegistry)
NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(CustomElementRegistry) tmp->mConstructors.clear(); diff --git a/dom/base/DOMImplementation.h b/dom/base/DOMImplementation.h index d33f54b829609..b42538741bdf1 100644 --- a/dom/base/DOMImplementation.h +++ b/dom/base/DOMImplementation.h @@ -34,7 +34,7 @@ class DOMImplementation final : public nsISupports, public nsWrapperCache { nsIURI* aDocumentURI, nsIURI* aBaseURI);
NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(DOMImplementation) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(DOMImplementation)
Document* GetParentObject() const { return mOwner; }
diff --git a/dom/base/DOMIntersectionObserver.h b/dom/base/DOMIntersectionObserver.h index 0e4fb985b0ae1..4b16a7e3a2da6 100644 --- a/dom/base/DOMIntersectionObserver.h +++ b/dom/base/DOMIntersectionObserver.h @@ -39,7 +39,7 @@ class DOMIntersectionObserverEntry final : public nsISupports, mTarget(aTarget), mIntersectionRatio(aIntersectionRatio) {} NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(DOMIntersectionObserverEntry) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(DOMIntersectionObserverEntry)
nsISupports* GetParentObject() const { return mOwner; }
diff --git a/dom/base/DOMMatrix.h b/dom/base/DOMMatrix.h index 9138999326840..19eb6f8ae4297 100644 --- a/dom/base/DOMMatrix.h +++ b/dom/base/DOMMatrix.h @@ -67,7 +67,7 @@ class DOMMatrixReadOnly : public nsWrapperCache { }
NS_INLINE_DECL_CYCLE_COLLECTING_NATIVE_REFCOUNTING(DOMMatrixReadOnly) - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_NATIVE_CLASS(DOMMatrixReadOnly) + NS_DECL_CYCLE_COLLECTION_NATIVE_WRAPPERCACHE_CLASS(DOMMatrixReadOnly)
nsISupports* GetParentObject() const { return mParent; } virtual JSObject* WrapObject(JSContext* cx, diff --git a/dom/base/DOMParser.h b/dom/base/DOMParser.h index cd59b4c4b39ca..efb4270ac83a5 100644 --- a/dom/base/DOMParser.h +++ b/dom/base/DOMParser.h @@ -28,7 +28,7 @@ class DOMParser final : public nsISupports, public nsWrapperCache {
public: NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(DOMParser) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(DOMParser)
// WebIDL API static already_AddRefed<DOMParser> Constructor(const GlobalObject& aOwner, diff --git a/dom/base/DOMPoint.h b/dom/base/DOMPoint.h index 7107a1e0d0485..d49c8fd441561 100644 --- a/dom/base/DOMPoint.h +++ b/dom/base/DOMPoint.h @@ -43,7 +43,7 @@ class DOMPointReadOnly : public nsWrapperCache { const GlobalObject& aGlobal, double aX, double aY, double aZ, double aW);
NS_INLINE_DECL_CYCLE_COLLECTING_NATIVE_REFCOUNTING(DOMPointReadOnly) - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_NATIVE_CLASS(DOMPointReadOnly) + NS_DECL_CYCLE_COLLECTION_NATIVE_WRAPPERCACHE_CLASS(DOMPointReadOnly)
double X() const { return mX; } double Y() const { return mY; } diff --git a/dom/base/DOMQuad.h b/dom/base/DOMQuad.h index fb0245b1096b7..f6ca36f602ca9 100644 --- a/dom/base/DOMQuad.h +++ b/dom/base/DOMQuad.h @@ -41,7 +41,7 @@ class DOMQuad final : public nsWrapperCache { explicit DOMQuad(nsISupports* aParent);
NS_INLINE_DECL_CYCLE_COLLECTING_NATIVE_REFCOUNTING(DOMQuad) - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_NATIVE_CLASS(DOMQuad) + NS_DECL_CYCLE_COLLECTION_NATIVE_WRAPPERCACHE_CLASS(DOMQuad)
nsISupports* GetParentObject() const { return mParent; } virtual JSObject* WrapObject(JSContext* aCx, diff --git a/dom/base/DOMRect.h b/dom/base/DOMRect.h index 2af66eff28a47..8cacd9a1dce8f 100644 --- a/dom/base/DOMRect.h +++ b/dom/base/DOMRect.h @@ -40,7 +40,7 @@ class DOMRectReadOnly : public nsISupports, public nsWrapperCache {
public: NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(DOMRectReadOnly) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(DOMRectReadOnly)
explicit DOMRectReadOnly(nsISupports* aParent, double aX = 0, double aY = 0, double aWidth = 0, double aHeight = 0) @@ -150,7 +150,7 @@ class DOMRectList final : public nsISupports, public nsWrapperCache { explicit DOMRectList(nsISupports* aParent) : mParent(aParent) {}
NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(DOMRectList) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(DOMRectList)
virtual JSObject* WrapObject(JSContext* cx, JS::Handle<JSObject*> aGivenProto) override; diff --git a/dom/base/DOMStringList.h b/dom/base/DOMStringList.h index 1c3bf8f684e1d..89bb9fc418cce 100644 --- a/dom/base/DOMStringList.h +++ b/dom/base/DOMStringList.h @@ -20,7 +20,7 @@ class DOMStringList : public nsISupports, public nsWrapperCache {
public: NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(DOMStringList) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(DOMStringList)
virtual JSObject* WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto) override; diff --git a/dom/base/External.h b/dom/base/External.h index 256ea40faf92a..9ddda47785d81 100644 --- a/dom/base/External.h +++ b/dom/base/External.h @@ -17,7 +17,7 @@ namespace mozilla::dom { class External : public nsWrapperCache { public: NS_INLINE_DECL_CYCLE_COLLECTING_NATIVE_REFCOUNTING(External) - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_NATIVE_CLASS(External) + NS_DECL_CYCLE_COLLECTION_NATIVE_WRAPPERCACHE_CLASS(External)
explicit External(nsISupports* aParent) : mParent(aParent) {}
diff --git a/dom/base/FormData.cpp b/dom/base/FormData.cpp index d980bee7feb11..44e6f62b0ee2d 100644 --- a/dom/base/FormData.cpp +++ b/dom/base/FormData.cpp @@ -69,7 +69,7 @@ already_AddRefed<File> GetBlobForFormDataStorage( // ------------------------------------------------------------------------- // nsISupports
-NS_IMPL_CYCLE_COLLECTION_CLASS(FormData) +NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(FormData)
NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(FormData) NS_IMPL_CYCLE_COLLECTION_UNLINK(mOwner) @@ -93,8 +93,6 @@ NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(FormData)
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
-NS_IMPL_CYCLE_COLLECTION_TRACE_WRAPPERCACHE(FormData) - NS_IMPL_CYCLE_COLLECTING_ADDREF(FormData) NS_IMPL_CYCLE_COLLECTING_RELEASE(FormData)
diff --git a/dom/base/FormData.h b/dom/base/FormData.h index 25841cfceb091..8ce21095b04d3 100644 --- a/dom/base/FormData.h +++ b/dom/base/FormData.h @@ -57,7 +57,7 @@ class FormData final : public nsISupports, already_AddRefed<FormData> Clone();
NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(FormData) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(FormData)
// nsWrapperCache virtual JSObject* WrapObject(JSContext* aCx, diff --git a/dom/base/FragmentOrElement.cpp b/dom/base/FragmentOrElement.cpp index d2a156c725508..868fa97b97aa3 100644 --- a/dom/base/FragmentOrElement.cpp +++ b/dom/base/FragmentOrElement.cpp @@ -1252,7 +1252,9 @@ ContentUnbinder* ContentUnbinder::sContentUnbinder = nullptr;
void FragmentOrElement::ClearContentUnbinder() { ContentUnbinder::UnbindAll(); }
-NS_IMPL_CYCLE_COLLECTION_CLASS(FragmentOrElement) +// Note, _INHERITED macro isn't used here since nsINode implementations are +// rather special. +NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(FragmentOrElement)
// We purposefully don't UNLINK_BEGIN_INHERITED here. NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(FragmentOrElement) @@ -1310,8 +1312,6 @@ NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(FragmentOrElement)
NS_IMPL_CYCLE_COLLECTION_UNLINK_END
-NS_IMPL_CYCLE_COLLECTION_TRACE_WRAPPERCACHE(FragmentOrElement) - void FragmentOrElement::MarkNodeChildren(nsINode* aNode) { JSObject* o = GetJSObjectChild(aNode); if (o) { diff --git a/dom/base/FragmentOrElement.h b/dom/base/FragmentOrElement.h index 512e7022826e3..9ad84ae7d3eb1 100644 --- a/dom/base/FragmentOrElement.h +++ b/dom/base/FragmentOrElement.h @@ -116,7 +116,7 @@ class FragmentOrElement : public nsIContent { static void FireNodeInserted(Document* aDoc, nsINode* aParent, nsTArray<nsCOMPtr<nsIContent> >& aNodes);
- NS_DECL_CYCLE_COLLECTION_SKIPPABLE_SCRIPT_HOLDER_CLASS_INHERITED( + NS_DECL_CYCLE_COLLECTION_SKIPPABLE_WRAPPERCACHE_CLASS_INHERITED( FragmentOrElement, nsIContent)
/** diff --git a/dom/base/IdleDeadline.h b/dom/base/IdleDeadline.h index 3fd66791720ce..2ce06e489d55d 100644 --- a/dom/base/IdleDeadline.h +++ b/dom/base/IdleDeadline.h @@ -38,7 +38,7 @@ class IdleDeadline final : public nsISupports, public nsWrapperCache { bool DidTimeout() const;
NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(IdleDeadline) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(IdleDeadline)
private: ~IdleDeadline(); diff --git a/dom/base/IntlUtils.h b/dom/base/IntlUtils.h index ee51667b1e14e..51531e614041b 100644 --- a/dom/base/IntlUtils.h +++ b/dom/base/IntlUtils.h @@ -23,7 +23,7 @@ class IntlUtils final : public nsISupports, public nsWrapperCache { explicit IntlUtils(nsPIDOMWindowInner* aWindow);
NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(IntlUtils) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(IntlUtils)
nsPIDOMWindowInner* GetParentObject() const { return mWindow; }
diff --git a/dom/base/Location.h b/dom/base/Location.h index ee6a8f3c73470..5fb92beb04171 100644 --- a/dom/base/Location.h +++ b/dom/base/Location.h @@ -35,7 +35,7 @@ class Location final : public nsISupports, Location(nsPIDOMWindowInner* aWindow, BrowsingContext* aBrowsingContext);
NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(Location) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(Location)
// WebIDL API: void Assign(const nsAString& aUrl, nsIPrincipal& aSubjectPrincipal, diff --git a/dom/base/Navigator.cpp b/dom/base/Navigator.cpp index b7da9e6a03bd5..a604ea30b8bad 100644 --- a/dom/base/Navigator.cpp +++ b/dom/base/Navigator.cpp @@ -131,7 +131,7 @@ NS_INTERFACE_MAP_END NS_IMPL_CYCLE_COLLECTING_ADDREF(Navigator) NS_IMPL_CYCLE_COLLECTING_RELEASE(Navigator)
-NS_IMPL_CYCLE_COLLECTION_CLASS(Navigator) +NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(Navigator)
NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(Navigator) tmp->Invalidate(); @@ -166,8 +166,6 @@ NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(Navigator) NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mXRSystem) NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
-NS_IMPL_CYCLE_COLLECTION_TRACE_WRAPPERCACHE(Navigator) - void Navigator::Invalidate() { // Don't clear mWindow here so we know we've got a non-null mWindow // until we're unlinked. diff --git a/dom/base/Navigator.h b/dom/base/Navigator.h index 2a16e5e184279..36367443440e8 100644 --- a/dom/base/Navigator.h +++ b/dom/base/Navigator.h @@ -91,7 +91,7 @@ class Navigator final : public nsISupports, public nsWrapperCache { explicit Navigator(nsPIDOMWindowInner* aInnerWindow);
NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(Navigator) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(Navigator)
void Invalidate(); nsPIDOMWindowInner* GetWindow() const { return mWindow; } diff --git a/dom/base/PlacesWeakCallbackWrapper.h b/dom/base/PlacesWeakCallbackWrapper.h index 2bb5ae82668c6..0b20276fc4516 100644 --- a/dom/base/PlacesWeakCallbackWrapper.h +++ b/dom/base/PlacesWeakCallbackWrapper.h @@ -18,7 +18,7 @@ class PlacesWeakCallbackWrapper final : public nsWrapperCache, public SupportsWeakPtr { public: NS_INLINE_DECL_CYCLE_COLLECTING_NATIVE_REFCOUNTING(PlacesWeakCallbackWrapper) - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_NATIVE_CLASS(PlacesWeakCallbackWrapper) + NS_DECL_CYCLE_COLLECTION_NATIVE_WRAPPERCACHE_CLASS(PlacesWeakCallbackWrapper)
explicit PlacesWeakCallbackWrapper(nsISupports* aParent, PlacesEventCallback& aCallback); diff --git a/dom/base/ResizeObserver.cpp b/dom/base/ResizeObserver.cpp index 72c08b1d72a96..542d77fab3059 100644 --- a/dom/base/ResizeObserver.cpp +++ b/dom/base/ResizeObserver.cpp @@ -183,9 +183,7 @@ void ResizeObservation::UpdateLastReportedSize(const gfx::Size& aSize) { }
// Only needed for refcounted objects. -NS_IMPL_CYCLE_COLLECTION_CLASS(ResizeObserver) - -NS_IMPL_CYCLE_COLLECTION_TRACE_WRAPPERCACHE(ResizeObserver) +NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(ResizeObserver)
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(ResizeObserver) NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mOwner, mDocument, mCallback, diff --git a/dom/base/ResizeObserver.h b/dom/base/ResizeObserver.h index a4f3e0ab8f151..12923f11a1f08 100644 --- a/dom/base/ResizeObserver.h +++ b/dom/base/ResizeObserver.h @@ -117,7 +117,7 @@ class ResizeObservation final : public LinkedListElement<ResizeObservation> { class ResizeObserver final : public nsISupports, public nsWrapperCache { public: NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(ResizeObserver) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(ResizeObserver)
ResizeObserver(nsCOMPtr<nsPIDOMWindowInner>&& aOwner, Document* aDocument, ResizeObserverCallback& aCb) @@ -208,7 +208,7 @@ class ResizeObserver final : public nsISupports, public nsWrapperCache { class ResizeObserverEntry final : public nsISupports, public nsWrapperCache { public: NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(ResizeObserverEntry) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(ResizeObserverEntry)
ResizeObserverEntry(nsISupports* aOwner, Element& aTarget, const gfx::Size& aBorderBoxSize, @@ -269,7 +269,7 @@ class ResizeObserverEntry final : public nsISupports, public nsWrapperCache { class ResizeObserverSize final : public nsISupports, public nsWrapperCache { public: NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(ResizeObserverSize) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(ResizeObserverSize)
ResizeObserverSize(nsISupports* aOwner, const gfx::Size& aSize, const WritingMode aWM) diff --git a/dom/base/ScreenLuminance.h b/dom/base/ScreenLuminance.h index b4ec422a69911..5595fd734bead 100644 --- a/dom/base/ScreenLuminance.h +++ b/dom/base/ScreenLuminance.h @@ -19,7 +19,7 @@ class ScreenLuminance final : public nsWrapperCache { public: // Ref counting and cycle collection NS_INLINE_DECL_CYCLE_COLLECTING_NATIVE_REFCOUNTING(ScreenLuminance) - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_NATIVE_CLASS(ScreenLuminance) + NS_DECL_CYCLE_COLLECTION_NATIVE_WRAPPERCACHE_CLASS(ScreenLuminance)
// WebIDL methods double Min() const { return mMin; } diff --git a/dom/base/Selection.cpp b/dom/base/Selection.cpp index 1ac576944cd74..eb95ffdb22fab 100644 --- a/dom/base/Selection.cpp +++ b/dom/base/Selection.cpp @@ -612,7 +612,7 @@ DocGroup* Selection::GetDocGroup() const { return doc ? doc->GetDocGroup() : nullptr; }
-NS_IMPL_CYCLE_COLLECTION_CLASS(Selection) +NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(Selection)
MOZ_CAN_RUN_SCRIPT_BOUNDARY NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(Selection) @@ -643,7 +643,6 @@ NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(Selection) NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mSelectionChangeEventDispatcher) NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mSelectionListeners) NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END -NS_IMPL_CYCLE_COLLECTION_TRACE_WRAPPERCACHE(Selection)
// QueryInterface implementation for Selection NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(Selection) diff --git a/dom/base/Selection.h b/dom/base/Selection.h index ec558be4634f7..f2eec06da060b 100644 --- a/dom/base/Selection.h +++ b/dom/base/Selection.h @@ -72,7 +72,7 @@ class Selection final : public nsSupportsWeakReference, nsFrameSelection* aFrameSelection);
NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(Selection) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(Selection)
/** * Match this up with EndbatchChanges. will stop ui updates while multiple diff --git a/dom/base/StructuredCloneTester.h b/dom/base/StructuredCloneTester.h index b939296971d30..d85371d86ce2b 100644 --- a/dom/base/StructuredCloneTester.h +++ b/dom/base/StructuredCloneTester.h @@ -27,7 +27,7 @@ class GlobalObject; class StructuredCloneTester final : public nsISupports, public nsWrapperCache { public: NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(StructuredCloneTester) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(StructuredCloneTester)
static already_AddRefed<StructuredCloneTester> Constructor( const GlobalObject& aGlobal, const bool aSerializable, diff --git a/dom/base/StyleSheetList.h b/dom/base/StyleSheetList.h index 0db025da31e77..7b097599b1dbf 100644 --- a/dom/base/StyleSheetList.h +++ b/dom/base/StyleSheetList.h @@ -23,7 +23,7 @@ class StyleSheetList final : public nsStubMutationObserver, public nsWrapperCache { public: NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(StyleSheetList) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(StyleSheetList)
NS_DECL_NSIMUTATIONOBSERVER_NODEWILLBEDESTROYED
diff --git a/dom/base/SubtleCrypto.h b/dom/base/SubtleCrypto.h index 3bb36d48dc5f1..a4d93420c8405 100644 --- a/dom/base/SubtleCrypto.h +++ b/dom/base/SubtleCrypto.h @@ -25,7 +25,7 @@ class SubtleCrypto final : public nsISupports, public nsWrapperCache {
public: NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(SubtleCrypto) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(SubtleCrypto)
public: explicit SubtleCrypto(nsIGlobalObject* aParent); diff --git a/dom/base/TimeoutHandler.cpp b/dom/base/TimeoutHandler.cpp index 5430feeb89a9d..ddf2b6abd7a10 100644 --- a/dom/base/TimeoutHandler.cpp +++ b/dom/base/TimeoutHandler.cpp @@ -103,7 +103,7 @@ CallbackTimeoutHandler::CallbackTimeoutHandler( mArgs = std::move(aArguments); }
-NS_IMPL_CYCLE_COLLECTION_MULTI_ZONE_JSHOLDER_CLASS(CallbackTimeoutHandler) +NS_IMPL_CYCLE_COLLECTION_CLASS(CallbackTimeoutHandler)
NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(CallbackTimeoutHandler) NS_IMPL_CYCLE_COLLECTION_UNLINK(mGlobal) diff --git a/dom/base/nsChildContentList.h b/dom/base/nsChildContentList.h index 52b4c7721ee8c..af43253cbf546 100644 --- a/dom/base/nsChildContentList.h +++ b/dom/base/nsChildContentList.h @@ -26,7 +26,7 @@ class nsAttrChildContentList : public nsINodeList { explicit nsAttrChildContentList(nsINode* aNode) : mNode(aNode) {}
NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SKIPPABLE_SCRIPT_HOLDER_CLASS(nsAttrChildContentList) + NS_DECL_CYCLE_COLLECTION_SKIPPABLE_WRAPPERCACHE_CLASS(nsAttrChildContentList)
// nsWrapperCache virtual JSObject* WrapObject(JSContext* cx, diff --git a/dom/base/nsContentList.cpp b/dom/base/nsContentList.cpp index d453db41b1ff6..689aeeb2b8c1a 100644 --- a/dom/base/nsContentList.cpp +++ b/dom/base/nsContentList.cpp @@ -41,7 +41,7 @@ using namespace mozilla::dom;
nsBaseContentList::~nsBaseContentList() = default;
-NS_IMPL_CYCLE_COLLECTION_CLASS(nsBaseContentList) +NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(nsBaseContentList) NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(nsBaseContentList) NS_IMPL_CYCLE_COLLECTION_UNLINK(mElements) NS_IMPL_CYCLE_COLLECTION_UNLINK_PRESERVED_WRAPPER @@ -50,7 +50,6 @@ NS_IMPL_CYCLE_COLLECTION_UNLINK_END NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(nsBaseContentList) NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mElements) NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END -NS_IMPL_CYCLE_COLLECTION_TRACE_WRAPPERCACHE(nsBaseContentList)
NS_IMPL_CYCLE_COLLECTION_CAN_SKIP_BEGIN(nsBaseContentList) if (nsCCUncollectableMarker::sGeneration && tmp->HasKnownLiveWrapper()) { diff --git a/dom/base/nsContentList.h b/dom/base/nsContentList.h index 6c5c5f6b313b4..208996b546931 100644 --- a/dom/base/nsContentList.h +++ b/dom/base/nsContentList.h @@ -47,7 +47,7 @@ class nsBaseContentList : public nsINodeList {
uint32_t Length() override { return mElements.Length(); }
- NS_DECL_CYCLE_COLLECTION_SKIPPABLE_SCRIPT_HOLDER_CLASS(nsBaseContentList) + NS_DECL_CYCLE_COLLECTION_SKIPPABLE_WRAPPERCACHE_CLASS(nsBaseContentList)
void AppendElement(nsIContent* aContent) { MOZ_ASSERT(aContent); diff --git a/dom/base/nsDOMAttributeMap.cpp b/dom/base/nsDOMAttributeMap.cpp index d84cd8dd053a9..5eba4c981d390 100644 --- a/dom/base/nsDOMAttributeMap.cpp +++ b/dom/base/nsDOMAttributeMap.cpp @@ -45,7 +45,7 @@ void nsDOMAttributeMap::DropReference() { mContent = nullptr; }
-NS_IMPL_CYCLE_COLLECTION_CLASS(nsDOMAttributeMap) +NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(nsDOMAttributeMap)
NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(nsDOMAttributeMap) tmp->DropReference(); @@ -60,8 +60,6 @@ NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(nsDOMAttributeMap) NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mContent) NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
-NS_IMPL_CYCLE_COLLECTION_TRACE_WRAPPERCACHE(nsDOMAttributeMap) - NS_IMPL_CYCLE_COLLECTION_CAN_SKIP_BEGIN(nsDOMAttributeMap) if (tmp->HasKnownLiveWrapper()) { if (tmp->mContent) { diff --git a/dom/base/nsDOMAttributeMap.h b/dom/base/nsDOMAttributeMap.h index 04d2857034e86..5ed1e96544ab7 100644 --- a/dom/base/nsDOMAttributeMap.h +++ b/dom/base/nsDOMAttributeMap.h @@ -97,7 +97,7 @@ class nsDOMAttributeMap final : public nsISupports, public nsWrapperCache { explicit nsDOMAttributeMap(Element* aContent);
NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SKIPPABLE_SCRIPT_HOLDER_CLASS(nsDOMAttributeMap) + NS_DECL_CYCLE_COLLECTION_SKIPPABLE_WRAPPERCACHE_CLASS(nsDOMAttributeMap)
void DropReference();
diff --git a/dom/base/nsDOMCaretPosition.h b/dom/base/nsDOMCaretPosition.h index 36a2f28d4007b..8ede967edda6f 100644 --- a/dom/base/nsDOMCaretPosition.h +++ b/dom/base/nsDOMCaretPosition.h @@ -29,7 +29,7 @@ class nsDOMCaretPosition : public nsISupports, public nsWrapperCache {
public: NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(nsDOMCaretPosition) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(nsDOMCaretPosition)
nsDOMCaretPosition(nsINode* aNode, uint32_t aOffset);
diff --git a/dom/base/nsDOMMutationObserver.h b/dom/base/nsDOMMutationObserver.h index e41e19e77b54c..a8e8b155510a8 100644 --- a/dom/base/nsDOMMutationObserver.h +++ b/dom/base/nsDOMMutationObserver.h @@ -57,7 +57,7 @@ class nsDOMMutationRecord final : public nsISupports, public nsWrapperCache { }
NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(nsDOMMutationRecord) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(nsDOMMutationRecord)
void GetType(mozilla::dom::DOMString& aRetVal) const { aRetVal.SetKnownLiveAtom(mType, mozilla::dom::DOMString::eNullNotExpected); diff --git a/dom/base/nsDOMTokenList.h b/dom/base/nsDOMTokenList.h index 37687125535ad..cd768ba0e781e 100644 --- a/dom/base/nsDOMTokenList.h +++ b/dom/base/nsDOMTokenList.h @@ -41,7 +41,7 @@ class nsDOMTokenList : public nsISupports, public nsWrapperCache {
public: NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(nsDOMTokenList) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(nsDOMTokenList)
nsDOMTokenList(Element* aElement, nsAtom* aAttrAtom, const mozilla::dom::DOMTokenListSupportedTokenArray = nullptr); diff --git a/dom/base/nsFrameLoader.h b/dom/base/nsFrameLoader.h index 244699c1618a7..042f77d214d51 100644 --- a/dom/base/nsFrameLoader.h +++ b/dom/base/nsFrameLoader.h @@ -129,7 +129,7 @@ class nsFrameLoader final : public nsStubMutationObserver, NS_DECLARE_STATIC_IID_ACCESSOR(NS_FRAMELOADER_IID)
NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(nsFrameLoader) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(nsFrameLoader)
NS_DECL_NSIMUTATIONOBSERVER_ATTRIBUTECHANGED nsresult CheckForRecursiveLoad(nsIURI* aURI); diff --git a/dom/base/nsHistory.h b/dom/base/nsHistory.h index 80bac869f3614..157052fe44cef 100644 --- a/dom/base/nsHistory.h +++ b/dom/base/nsHistory.h @@ -29,7 +29,7 @@ class ErrorResult; class nsHistory final : public nsISupports, public nsWrapperCache { public: NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(nsHistory) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(nsHistory)
public: explicit nsHistory(nsPIDOMWindowInner* aInnerWindow); diff --git a/dom/base/nsJSEnvironment.cpp b/dom/base/nsJSEnvironment.cpp index cefdbb67a3319..fe0b660b113c7 100644 --- a/dom/base/nsJSEnvironment.cpp +++ b/dom/base/nsJSEnvironment.cpp @@ -2247,7 +2247,7 @@ void nsJSArgArray::ReleaseJSObjects() { }
// QueryInterface implementation for nsJSArgArray -NS_IMPL_CYCLE_COLLECTION_MULTI_ZONE_JSHOLDER_CLASS(nsJSArgArray) +NS_IMPL_CYCLE_COLLECTION_CLASS(nsJSArgArray)
NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(nsJSArgArray) tmp->ReleaseJSObjects(); diff --git a/dom/base/nsMimeTypeArray.h b/dom/base/nsMimeTypeArray.h index cdd587db35eac..aaeedba3ae262 100644 --- a/dom/base/nsMimeTypeArray.h +++ b/dom/base/nsMimeTypeArray.h @@ -28,7 +28,7 @@ class nsMimeTypeArray final : public nsISupports, public nsWrapperCache { const mozilla::Array<RefPtr<nsMimeType>, 2>& aMimeTypes);
NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(nsMimeTypeArray) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(nsMimeTypeArray)
nsPIDOMWindowInner* GetParentObject() const; virtual JSObject* WrapObject(JSContext* aCx, @@ -69,7 +69,7 @@ class nsMimeTypeArray final : public nsISupports, public nsWrapperCache { class nsMimeType final : public nsWrapperCache { public: NS_INLINE_DECL_CYCLE_COLLECTING_NATIVE_REFCOUNTING(nsMimeType) - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_NATIVE_CLASS(nsMimeType) + NS_DECL_CYCLE_COLLECTION_NATIVE_WRAPPERCACHE_CLASS(nsMimeType)
nsMimeType(nsPluginElement* aPluginElement, const nsAString& aName);
diff --git a/dom/base/nsPluginArray.h b/dom/base/nsPluginArray.h index a029bb2b99878..1a9e12b787e86 100644 --- a/dom/base/nsPluginArray.h +++ b/dom/base/nsPluginArray.h @@ -28,7 +28,7 @@ class nsPluginArray final : public nsSupportsWeakReference, public nsWrapperCache { public: NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(nsPluginArray) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(nsPluginArray)
explicit nsPluginArray(nsPIDOMWindowInner* aWindow); nsPIDOMWindowInner* GetParentObject() const; @@ -75,7 +75,7 @@ class nsPluginArray final : public nsSupportsWeakReference, class nsPluginElement final : public nsISupports, public nsWrapperCache { public: NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(nsPluginElement) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(nsPluginElement)
explicit nsPluginElement(nsPluginArray* aPluginArray, nsPIDOMWindowInner* aWindow, const nsAString& aName); diff --git a/dom/base/nsWindowRoot.cpp b/dom/base/nsWindowRoot.cpp index 3914d33c8fcb1..177dd10e1ddb7 100644 --- a/dom/base/nsWindowRoot.cpp +++ b/dom/base/nsWindowRoot.cpp @@ -52,7 +52,7 @@ nsWindowRoot::~nsWindowRoot() { JSActorService::UnregisterChromeEventTarget(this); }
-NS_IMPL_CYCLE_COLLECTION_CLASS(nsWindowRoot) +NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(nsWindowRoot)
NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(nsWindowRoot) JSActorService::UnregisterChromeEventTarget(tmp); @@ -69,8 +69,6 @@ NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(nsWindowRoot) NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mParent) NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
-NS_IMPL_CYCLE_COLLECTION_TRACE_WRAPPERCACHE(nsWindowRoot) - NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(nsWindowRoot) NS_WRAPPERCACHE_INTERFACE_MAP_ENTRY NS_INTERFACE_MAP_ENTRY(nsISupports) diff --git a/dom/base/nsWindowRoot.h b/dom/base/nsWindowRoot.h index b412834bfadd4..1fe9c8fb9bc00 100644 --- a/dom/base/nsWindowRoot.h +++ b/dom/base/nsWindowRoot.h @@ -64,7 +64,7 @@ class nsWindowRoot final : public nsPIWindowRoot {
JSObject* WrapObject(JSContext*, JS::Handle<JSObject*> aGivenProto) override;
- NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(nsWindowRoot) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(nsWindowRoot)
void AddBrowser(nsIRemoteTab* aBrowser) override; void RemoveBrowser(nsIRemoteTab* aBrowser) override; diff --git a/dom/base/nsWrapperCache.h b/dom/base/nsWrapperCache.h index fd27230294c75..d7232470d9580 100644 --- a/dom/base/nsWrapperCache.h +++ b/dom/base/nsWrapperCache.h @@ -16,6 +16,7 @@ #include "js/TypeDecls.h" #include "nsISupports.h" #include "nsISupportsUtils.h" +#include <type_traits>
namespace mozilla::dom { class ContentProcessMessageManager; @@ -422,6 +423,123 @@ NS_DEFINE_STATIC_IID_ACCESSOR(nsWrapperCache, NS_WRAPPERCACHE_IID) else
// Cycle collector macros for wrapper caches. +// +// The NS_DECL_*WRAPPERCACHE_* macros make it easier to mark classes as holding +// just a single pointer to a JS value. That information is then used for +// certain GC optimizations. + +#define NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS_AMBIGUOUS(_class, _base) \ + class NS_CYCLE_COLLECTION_INNERCLASS \ + : public nsXPCOMCycleCollectionParticipant { \ + public: \ + constexpr explicit NS_CYCLE_COLLECTION_INNERCLASS(Flags aFlags = 0) \ + : nsXPCOMCycleCollectionParticipant(aFlags | \ + FlagMaybeSingleZoneJSHolder) {} \ + \ + private: \ + NS_DECL_CYCLE_COLLECTION_CLASS_BODY(_class, _base) \ + NS_IMETHOD_(void) \ + Trace(void* p, const TraceCallbacks& cb, void* closure) override; \ + NS_IMETHOD_(void) \ + TraceWrapper(void* aPtr, const TraceCallbacks& aCb, void* aClosure) final; \ + NS_IMPL_GET_XPCOM_CYCLE_COLLECTION_PARTICIPANT(_class) \ + }; \ + NS_CHECK_FOR_RIGHT_PARTICIPANT_IMPL(_class) \ + static NS_CYCLE_COLLECTION_INNERCLASS NS_CYCLE_COLLECTION_INNERNAME; \ + NOT_INHERITED_CANT_OVERRIDE + +#define NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(_class) \ + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS_AMBIGUOUS(_class, _class) + +#define NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS_INHERITED(_class, \ + _base_class) \ + class NS_CYCLE_COLLECTION_INNERCLASS \ + : public NS_CYCLE_COLLECTION_CLASSNAME(_base_class) { \ + public: \ + constexpr explicit NS_CYCLE_COLLECTION_INNERCLASS(Flags aFlags) \ + : NS_CYCLE_COLLECTION_CLASSNAME(_base_class)( \ + aFlags | FlagMaybeSingleZoneJSHolder) {} \ + \ + private: \ + NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED_BODY(_class, _base_class) \ + NS_IMETHOD_(void) \ + Trace(void* p, const TraceCallbacks& cb, void* closure) override; \ + NS_IMETHOD_(void) \ + TraceWrapper(void* aPtr, const TraceCallbacks& aCb, void* aClosure) final; \ + NS_IMPL_GET_XPCOM_CYCLE_COLLECTION_PARTICIPANT(_class) \ + }; \ + NS_CHECK_FOR_RIGHT_PARTICIPANT_IMPL_INHERITED(_class) \ + static NS_CYCLE_COLLECTION_INNERCLASS NS_CYCLE_COLLECTION_INNERNAME; + +#define NS_DECL_CYCLE_COLLECTION_SKIPPABLE_WRAPPERCACHE_CLASS_AMBIGUOUS( \ + _class, _base) \ + class NS_CYCLE_COLLECTION_INNERCLASS \ + : public nsXPCOMCycleCollectionParticipant { \ + public: \ + constexpr explicit NS_CYCLE_COLLECTION_INNERCLASS(Flags aFlags) \ + : nsXPCOMCycleCollectionParticipant(aFlags | FlagMightSkip | \ + FlagMaybeSingleZoneJSHolder) {} \ + \ + private: \ + NS_DECL_CYCLE_COLLECTION_CLASS_BODY(_class, _base) \ + NS_IMETHOD_(void) \ + Trace(void* p, const TraceCallbacks& cb, void* closure) override; \ + NS_IMETHOD_(void) \ + TraceWrapper(void* aPtr, const TraceCallbacks& aCb, void* aClosure) final; \ + NS_IMETHOD_(bool) CanSkipReal(void* p, bool aRemovingAllowed) override; \ + NS_IMETHOD_(bool) CanSkipInCCReal(void* p) override; \ + NS_IMETHOD_(bool) CanSkipThisReal(void* p) override; \ + NS_IMPL_GET_XPCOM_CYCLE_COLLECTION_PARTICIPANT(_class) \ + }; \ + NS_CHECK_FOR_RIGHT_PARTICIPANT_IMPL(_class) \ + static NS_CYCLE_COLLECTION_INNERCLASS NS_CYCLE_COLLECTION_INNERNAME; \ + NOT_INHERITED_CANT_OVERRIDE + +#define NS_DECL_CYCLE_COLLECTION_SKIPPABLE_WRAPPERCACHE_CLASS(_class) \ + NS_DECL_CYCLE_COLLECTION_SKIPPABLE_WRAPPERCACHE_CLASS_AMBIGUOUS(_class, \ + _class) + +#define NS_DECL_CYCLE_COLLECTION_SKIPPABLE_WRAPPERCACHE_CLASS_INHERITED( \ + _class, _base_class) \ + class NS_CYCLE_COLLECTION_INNERCLASS \ + : public NS_CYCLE_COLLECTION_CLASSNAME(_base_class) { \ + public: \ + constexpr explicit NS_CYCLE_COLLECTION_INNERCLASS(Flags aFlags = 0) \ + : NS_CYCLE_COLLECTION_CLASSNAME(_base_class)( \ + aFlags | FlagMightSkip | FlagMaybeSingleZoneJSHolder) {} \ + \ + private: \ + NS_DECL_CYCLE_COLLECTION_CLASS_BODY(_class, _base_class) \ + NS_IMETHOD_(void) \ + Trace(void* p, const TraceCallbacks& cb, void* closure) override; \ + NS_IMETHOD_(void) \ + TraceWrapper(void* aPtr, const TraceCallbacks& aCb, void* aClosure) final; \ + NS_IMETHOD_(bool) CanSkipReal(void* p, bool aRemovingAllowed) override; \ + NS_IMETHOD_(bool) CanSkipInCCReal(void* p) override; \ + NS_IMETHOD_(bool) CanSkipThisReal(void* p) override; \ + NS_IMPL_GET_XPCOM_CYCLE_COLLECTION_PARTICIPANT(_class) \ + }; \ + NS_CHECK_FOR_RIGHT_PARTICIPANT_IMPL_INHERITED(_class) \ + static NS_CYCLE_COLLECTION_INNERCLASS NS_CYCLE_COLLECTION_INNERNAME; + +#define NS_DECL_CYCLE_COLLECTION_NATIVE_WRAPPERCACHE_CLASS(_class) \ + void DeleteCycleCollectable(void) { delete this; } \ + class NS_CYCLE_COLLECTION_INNERCLASS : public nsScriptObjectTracer { \ + public: \ + constexpr explicit NS_CYCLE_COLLECTION_INNERCLASS(Flags aFlags = 0) \ + : nsScriptObjectTracer(aFlags | FlagMaybeSingleZoneJSHolder) {} \ + \ + private: \ + NS_DECL_CYCLE_COLLECTION_NATIVE_CLASS_BODY(_class) \ + NS_IMETHOD_(void) \ + Trace(void* p, const TraceCallbacks& cb, void* closure) override; \ + NS_IMETHOD_(void) \ + TraceWrapper(void* aPtr, const TraceCallbacks& aCb, void* aClosure) final; \ + static constexpr nsScriptObjectTracer* GetParticipant() { \ + return &_class::NS_CYCLE_COLLECTION_INNERNAME; \ + } \ + }; \ + static NS_CYCLE_COLLECTION_INNERCLASS NS_CYCLE_COLLECTION_INNERNAME;
#define NS_IMPL_CYCLE_COLLECTION_TRACE_PRESERVED_WRAPPER \ tmp->TraceWrapper(aCallbacks, aClosure); @@ -429,33 +547,39 @@ NS_DEFINE_STATIC_IID_ACCESSOR(nsWrapperCache, NS_WRAPPERCACHE_IID) #define NS_IMPL_CYCLE_COLLECTION_UNLINK_PRESERVED_WRAPPER \ tmp->ReleaseWrapper(p);
-#define NS_IMPL_CYCLE_COLLECTION_TRACE_WRAPPERCACHE(_class) \ - NS_IMPL_CYCLE_COLLECTION_TRACE_BEGIN(_class) \ - NS_IMPL_CYCLE_COLLECTION_TRACE_PRESERVED_WRAPPER \ - NS_IMPL_CYCLE_COLLECTION_TRACE_END +#define NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(_class) \ + static_assert(std::is_base_of<nsWrapperCache, _class>::value, \ + "Class should inherit nsWrapperCache"); \ + NS_IMPL_CYCLE_COLLECTION_SINGLE_ZONE_SCRIPT_HOLDER_CLASS(_class) \ + NS_IMPL_CYCLE_COLLECTION_TRACE_BEGIN(_class) \ + TraceWrapper(p, aCallbacks, aClosure); \ + NS_IMPL_CYCLE_COLLECTION_TRACE_END \ + void NS_CYCLE_COLLECTION_CLASSNAME(_class)::TraceWrapper( \ + void* p, const TraceCallbacks& aCallbacks, void* aClosure) { \ + _class* tmp = DowncastCCParticipant<_class>(p); \ + NS_IMPL_CYCLE_COLLECTION_TRACE_PRESERVED_WRAPPER \ + }
#define NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_0(_class) \ - NS_IMPL_CYCLE_COLLECTION_CLASS(_class) \ + NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(_class) \ NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(_class) \ NS_IMPL_CYCLE_COLLECTION_UNLINK_PRESERVED_WRAPPER \ NS_IMPL_CYCLE_COLLECTION_UNLINK_END \ NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(_class) \ - NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END \ - NS_IMPL_CYCLE_COLLECTION_TRACE_WRAPPERCACHE(_class) + NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
#define NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(_class, ...) \ - NS_IMPL_CYCLE_COLLECTION_CLASS(_class) \ + NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(_class) \ NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(_class) \ NS_IMPL_CYCLE_COLLECTION_UNLINK(__VA_ARGS__) \ NS_IMPL_CYCLE_COLLECTION_UNLINK_PRESERVED_WRAPPER \ NS_IMPL_CYCLE_COLLECTION_UNLINK_END \ NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(_class) \ NS_IMPL_CYCLE_COLLECTION_TRAVERSE(__VA_ARGS__) \ - NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END \ - NS_IMPL_CYCLE_COLLECTION_TRACE_WRAPPERCACHE(_class) + NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
#define NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_WEAK(_class, ...) \ - NS_IMPL_CYCLE_COLLECTION_CLASS(_class) \ + NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(_class) \ NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(_class) \ NS_IMPL_CYCLE_COLLECTION_UNLINK(__VA_ARGS__) \ NS_IMPL_CYCLE_COLLECTION_UNLINK_PRESERVED_WRAPPER \ @@ -463,11 +587,10 @@ NS_DEFINE_STATIC_IID_ACCESSOR(nsWrapperCache, NS_WRAPPERCACHE_IID) NS_IMPL_CYCLE_COLLECTION_UNLINK_END \ NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(_class) \ NS_IMPL_CYCLE_COLLECTION_TRAVERSE(__VA_ARGS__) \ - NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END \ - NS_IMPL_CYCLE_COLLECTION_TRACE_WRAPPERCACHE(_class) + NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
#define NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_WEAK_PTR(_class, ...) \ - NS_IMPL_CYCLE_COLLECTION_CLASS(_class) \ + NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(_class) \ NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(_class) \ NS_IMPL_CYCLE_COLLECTION_UNLINK(__VA_ARGS__) \ NS_IMPL_CYCLE_COLLECTION_UNLINK_PRESERVED_WRAPPER \ @@ -475,24 +598,33 @@ NS_DEFINE_STATIC_IID_ACCESSOR(nsWrapperCache, NS_WRAPPERCACHE_IID) NS_IMPL_CYCLE_COLLECTION_UNLINK_END \ NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(_class) \ NS_IMPL_CYCLE_COLLECTION_TRAVERSE(__VA_ARGS__) \ - NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END \ - NS_IMPL_CYCLE_COLLECTION_TRACE_WRAPPERCACHE(_class) + NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
// This is used for wrapper cached classes that inherit from cycle // collected non-wrapper cached classes. -#define NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_INHERITED(_class, _base, ...) \ - NS_IMPL_CYCLE_COLLECTION_CLASS(_class) \ - NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN_INHERITED(_class, _base) \ - NS_IMPL_CYCLE_COLLECTION_UNLINK(__VA_ARGS__) \ - NS_IMPL_CYCLE_COLLECTION_UNLINK_PRESERVED_WRAPPER \ - NS_IMPL_CYCLE_COLLECTION_UNLINK_END \ - NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN_INHERITED(_class, _base) \ - NS_IMPL_CYCLE_COLLECTION_TRAVERSE(__VA_ARGS__) \ - NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END \ - NS_IMPL_CYCLE_COLLECTION_TRACE_WRAPPERCACHE(_class) - +#define NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_INHERITED(_class, _base, ...) \ + static_assert(!std::is_base_of<nsWrapperCache, _base>::value, \ + "Base class should not inherit nsWrapperCache"); \ + NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(_class) \ + NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN_INHERITED(_class, _base) \ + NS_IMPL_CYCLE_COLLECTION_UNLINK(__VA_ARGS__) \ + NS_IMPL_CYCLE_COLLECTION_UNLINK_PRESERVED_WRAPPER \ + NS_IMPL_CYCLE_COLLECTION_UNLINK_END \ + NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN_INHERITED(_class, _base) \ + /* Assert somewhere, in this case in the traverse method, that the */ \ + /* parent isn't a single zone holder*/ \ + MOZ_ASSERT(!_base::NS_CYCLE_COLLECTION_INNERNAME.IsSingleZoneJSHolder()); \ + NS_IMPL_CYCLE_COLLECTION_TRAVERSE(__VA_ARGS__) \ + NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END + +// if NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_WITH_JS_MEMBERS is used to implement +// a wrappercache class, one needs to use +// NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS and its variants in the class +// declaration. #define NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_WITH_JS_MEMBERS( \ class_, native_members_, js_members_) \ + static_assert(std::is_base_of<nsWrapperCache, class_>::value, \ + "Class should inherit nsWrapperCache"); \ NS_IMPL_CYCLE_COLLECTION_CLASS(class_) \ NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(class_) \ using ::ImplCycleCollectionUnlink; \ diff --git a/dom/bindings/CallbackObject.cpp b/dom/bindings/CallbackObject.cpp index c42da1c995500..dfd798ba230a5 100644 --- a/dom/bindings/CallbackObject.cpp +++ b/dom/bindings/CallbackObject.cpp @@ -31,7 +31,7 @@ NS_INTERFACE_MAP_END NS_IMPL_CYCLE_COLLECTING_ADDREF(CallbackObject) NS_IMPL_CYCLE_COLLECTING_RELEASE(CallbackObject)
-NS_IMPL_CYCLE_COLLECTION_MULTI_ZONE_JSHOLDER_CLASS(CallbackObject) +NS_IMPL_CYCLE_COLLECTION_CLASS(CallbackObject)
NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(CallbackObject) tmp->ClearJSReferences(); diff --git a/dom/bindings/Codegen.py b/dom/bindings/Codegen.py index 5e99e08ba41a2..e6c3bee7d8f91 100644 --- a/dom/bindings/Codegen.py +++ b/dom/bindings/Codegen.py @@ -19897,11 +19897,11 @@ class CGJSImplClass(CGBindingImplClass): ] isupportsDecl = "NS_DECL_CYCLE_COLLECTING_ISUPPORTS\n" ccDecl = ( - "NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(%s)\n" % descriptor.name + "NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(%s)\n" % descriptor.name ) extradefinitions = fill( """ - NS_IMPL_CYCLE_COLLECTION_CLASS(${ifaceName}) + NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(${ifaceName}) NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(${ifaceName}) NS_IMPL_CYCLE_COLLECTION_UNLINK(mImpl) NS_IMPL_CYCLE_COLLECTION_UNLINK(mParent) @@ -19912,7 +19912,6 @@ class CGJSImplClass(CGBindingImplClass): NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mImpl) NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mParent) NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END - NS_IMPL_CYCLE_COLLECTION_TRACE_WRAPPERCACHE(${ifaceName}) NS_IMPL_CYCLE_COLLECTING_ADDREF(${ifaceName}) NS_IMPL_CYCLE_COLLECTING_RELEASE(${ifaceName}) NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(${ifaceName}) diff --git a/dom/bindings/SimpleGlobalObject.cpp b/dom/bindings/SimpleGlobalObject.cpp index 6115f90f802e8..798efc94c14b6 100644 --- a/dom/bindings/SimpleGlobalObject.cpp +++ b/dom/bindings/SimpleGlobalObject.cpp @@ -21,7 +21,7 @@
namespace mozilla::dom {
-NS_IMPL_CYCLE_COLLECTION_CLASS(SimpleGlobalObject) +NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(SimpleGlobalObject)
NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(SimpleGlobalObject) NS_IMPL_CYCLE_COLLECTION_UNLINK_PRESERVED_WRAPPER @@ -32,8 +32,6 @@ NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(SimpleGlobalObject) tmp->TraverseObjectsInGlobal(cb); NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
-NS_IMPL_CYCLE_COLLECTION_TRACE_WRAPPERCACHE(SimpleGlobalObject) - NS_IMPL_CYCLE_COLLECTING_ADDREF(SimpleGlobalObject) NS_IMPL_CYCLE_COLLECTING_RELEASE(SimpleGlobalObject) NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(SimpleGlobalObject) diff --git a/dom/bindings/SimpleGlobalObject.h b/dom/bindings/SimpleGlobalObject.h index 6f58747e9ae45..45abd651ebf2a 100644 --- a/dom/bindings/SimpleGlobalObject.h +++ b/dom/bindings/SimpleGlobalObject.h @@ -50,8 +50,7 @@ class SimpleGlobalObject : public nsIGlobalObject, public nsWrapperCache { JS::UndefinedHandleValue);
NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS_AMBIGUOUS(SimpleGlobalObject, - nsIGlobalObject) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(SimpleGlobalObject)
// Gets the GlobalType of this SimpleGlobalObject. GlobalType Type() const { return mType; } diff --git a/dom/bindings/nsScriptErrorWithStack.cpp b/dom/bindings/nsScriptErrorWithStack.cpp index d466d2a86a2ed..8b5f0bda9fd05 100644 --- a/dom/bindings/nsScriptErrorWithStack.cpp +++ b/dom/bindings/nsScriptErrorWithStack.cpp @@ -39,7 +39,7 @@ static nsCString FormatStackString(JSContext* cx, JSPrincipals* aPrincipals,
} // namespace
-NS_IMPL_CYCLE_COLLECTION_MULTI_ZONE_JSHOLDER_CLASS(nsScriptErrorWithStack) +NS_IMPL_CYCLE_COLLECTION_CLASS(nsScriptErrorWithStack)
NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(nsScriptErrorWithStack) tmp->mException.setUndefined(); diff --git a/dom/bindings/test/TestInterfaceIterableDouble.h b/dom/bindings/test/TestInterfaceIterableDouble.h index ec81105a522c3..ba38b47e89ce5 100644 --- a/dom/bindings/test/TestInterfaceIterableDouble.h +++ b/dom/bindings/test/TestInterfaceIterableDouble.h @@ -28,7 +28,7 @@ class TestInterfaceIterableDouble final : public nsISupports, public nsWrapperCache { public: NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(TestInterfaceIterableDouble) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(TestInterfaceIterableDouble)
explicit TestInterfaceIterableDouble(nsPIDOMWindowInner* aParent); nsPIDOMWindowInner* GetParentObject() const; diff --git a/dom/bindings/test/TestInterfaceIterableDoubleUnion.h b/dom/bindings/test/TestInterfaceIterableDoubleUnion.h index b30973e8d4e08..d35744922e2ba 100644 --- a/dom/bindings/test/TestInterfaceIterableDoubleUnion.h +++ b/dom/bindings/test/TestInterfaceIterableDoubleUnion.h @@ -27,7 +27,7 @@ class TestInterfaceIterableDoubleUnion final : public nsISupports, public nsWrapperCache { public: NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(TestInterfaceIterableDoubleUnion) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(TestInterfaceIterableDoubleUnion)
explicit TestInterfaceIterableDoubleUnion(nsPIDOMWindowInner* aParent); nsPIDOMWindowInner* GetParentObject() const; diff --git a/dom/bindings/test/TestInterfaceIterableSingle.h b/dom/bindings/test/TestInterfaceIterableSingle.h index f6fbd4a98ec7a..68104d1d154ec 100644 --- a/dom/bindings/test/TestInterfaceIterableSingle.h +++ b/dom/bindings/test/TestInterfaceIterableSingle.h @@ -27,7 +27,7 @@ class TestInterfaceIterableSingle final : public nsISupports, public nsWrapperCache { public: NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(TestInterfaceIterableSingle) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(TestInterfaceIterableSingle)
explicit TestInterfaceIterableSingle(nsPIDOMWindowInner* aParent); nsPIDOMWindowInner* GetParentObject() const; diff --git a/dom/bindings/test/TestInterfaceMaplike.h b/dom/bindings/test/TestInterfaceMaplike.h index 10da72e933ed7..e82f290d17b33 100644 --- a/dom/bindings/test/TestInterfaceMaplike.h +++ b/dom/bindings/test/TestInterfaceMaplike.h @@ -25,7 +25,7 @@ class GlobalObject; class TestInterfaceMaplike final : public nsISupports, public nsWrapperCache { public: NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(TestInterfaceMaplike) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(TestInterfaceMaplike)
explicit TestInterfaceMaplike(nsPIDOMWindowInner* aParent); nsPIDOMWindowInner* GetParentObject() const; diff --git a/dom/bindings/test/TestInterfaceMaplikeJSObject.h b/dom/bindings/test/TestInterfaceMaplikeJSObject.h index 53daf58cb7525..00feda779635a 100644 --- a/dom/bindings/test/TestInterfaceMaplikeJSObject.h +++ b/dom/bindings/test/TestInterfaceMaplikeJSObject.h @@ -26,7 +26,7 @@ class TestInterfaceMaplikeJSObject final : public nsISupports, public nsWrapperCache { public: NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(TestInterfaceMaplikeJSObject) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(TestInterfaceMaplikeJSObject)
explicit TestInterfaceMaplikeJSObject(nsPIDOMWindowInner* aParent); nsPIDOMWindowInner* GetParentObject() const; diff --git a/dom/bindings/test/TestInterfaceMaplikeObject.h b/dom/bindings/test/TestInterfaceMaplikeObject.h index 01c40762b63bc..894447cc4157c 100644 --- a/dom/bindings/test/TestInterfaceMaplikeObject.h +++ b/dom/bindings/test/TestInterfaceMaplikeObject.h @@ -27,7 +27,7 @@ class TestInterfaceMaplikeObject final : public nsISupports, public nsWrapperCache { public: NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(TestInterfaceMaplikeObject) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(TestInterfaceMaplikeObject)
explicit TestInterfaceMaplikeObject(nsPIDOMWindowInner* aParent); nsPIDOMWindowInner* GetParentObject() const; diff --git a/dom/bindings/test/TestInterfaceObservableArray.h b/dom/bindings/test/TestInterfaceObservableArray.h index 810eeb08021b1..3329663ac66b8 100644 --- a/dom/bindings/test/TestInterfaceObservableArray.h +++ b/dom/bindings/test/TestInterfaceObservableArray.h @@ -31,7 +31,7 @@ class TestInterfaceObservableArray final : public nsISupports, public nsWrapperCache { public: NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(TestInterfaceObservableArray) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(TestInterfaceObservableArray)
nsPIDOMWindowInner* GetParentObject() const; virtual JSObject* WrapObject(JSContext* aCx, diff --git a/dom/bindings/test/TestInterfaceSetlike.h b/dom/bindings/test/TestInterfaceSetlike.h index 4af0932adecbb..c99a0240ea863 100644 --- a/dom/bindings/test/TestInterfaceSetlike.h +++ b/dom/bindings/test/TestInterfaceSetlike.h @@ -25,7 +25,7 @@ class GlobalObject; class TestInterfaceSetlike final : public nsISupports, public nsWrapperCache { public: NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(TestInterfaceSetlike) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(TestInterfaceSetlike) explicit TestInterfaceSetlike(JSContext* aCx, nsPIDOMWindowInner* aParent); nsPIDOMWindowInner* GetParentObject() const; virtual JSObject* WrapObject(JSContext* aCx, diff --git a/dom/bindings/test/TestInterfaceSetlikeNode.h b/dom/bindings/test/TestInterfaceSetlikeNode.h index 83dfd19802bbe..c4efdeab19a57 100644 --- a/dom/bindings/test/TestInterfaceSetlikeNode.h +++ b/dom/bindings/test/TestInterfaceSetlikeNode.h @@ -26,7 +26,7 @@ class TestInterfaceSetlikeNode final : public nsISupports, public nsWrapperCache { public: NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(TestInterfaceSetlikeNode) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(TestInterfaceSetlikeNode) explicit TestInterfaceSetlikeNode(JSContext* aCx, nsPIDOMWindowInner* aParent); nsPIDOMWindowInner* GetParentObject() const; diff --git a/dom/bindings/test/TestTrialInterface.h b/dom/bindings/test/TestTrialInterface.h index 29c73bacc17ad..1fa746b09a5ac 100644 --- a/dom/bindings/test/TestTrialInterface.h +++ b/dom/bindings/test/TestTrialInterface.h @@ -18,7 +18,7 @@ namespace mozilla::dom { class TestTrialInterface final : public nsWrapperCache { public: NS_INLINE_DECL_CYCLE_COLLECTING_NATIVE_REFCOUNTING(TestTrialInterface) - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_NATIVE_CLASS(TestTrialInterface) + NS_DECL_CYCLE_COLLECTION_NATIVE_WRAPPERCACHE_CLASS(TestTrialInterface)
public: TestTrialInterface() = default; diff --git a/dom/bindings/test/WrapperCachedNonISupportsTestInterface.h b/dom/bindings/test/WrapperCachedNonISupportsTestInterface.h index 0b986325b2a30..c226d03456754 100644 --- a/dom/bindings/test/WrapperCachedNonISupportsTestInterface.h +++ b/dom/bindings/test/WrapperCachedNonISupportsTestInterface.h @@ -20,7 +20,7 @@ class WrapperCachedNonISupportsTestInterface final : public nsWrapperCache { public: NS_INLINE_DECL_CYCLE_COLLECTING_NATIVE_REFCOUNTING( WrapperCachedNonISupportsTestInterface) - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_NATIVE_CLASS( + NS_DECL_CYCLE_COLLECTION_NATIVE_WRAPPERCACHE_CLASS( WrapperCachedNonISupportsTestInterface)
public: diff --git a/dom/cache/Cache.h b/dom/cache/Cache.h index d2d8b0b5adf79..02ccb557f716e 100644 --- a/dom/cache/Cache.h +++ b/dom/cache/Cache.h @@ -114,7 +114,7 @@ class Cache final : public nsISupports,
public: NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(Cache) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(Cache) };
} // namespace cache diff --git a/dom/cache/CacheStorage.h b/dom/cache/CacheStorage.h index 2d66da89ec2b9..a210a4b4c2b2d 100644 --- a/dom/cache/CacheStorage.h +++ b/dom/cache/CacheStorage.h @@ -108,7 +108,7 @@ class CacheStorage final : public nsISupports,
public: NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(CacheStorage) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(CacheStorage) };
} // namespace cache diff --git a/dom/canvas/CanvasGradient.h b/dom/canvas/CanvasGradient.h index b2e3f04914228..9455f7b14b36c 100644 --- a/dom/canvas/CanvasGradient.h +++ b/dom/canvas/CanvasGradient.h @@ -19,7 +19,7 @@ class CanvasRenderingContext2D; class CanvasGradient : public nsWrapperCache { public: NS_INLINE_DECL_CYCLE_COLLECTING_NATIVE_REFCOUNTING(CanvasGradient) - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_NATIVE_CLASS(CanvasGradient) + NS_DECL_CYCLE_COLLECTION_NATIVE_WRAPPERCACHE_CLASS(CanvasGradient)
enum class Type : uint8_t { LINEAR = 0, RADIAL, CONIC };
diff --git a/dom/canvas/CanvasPath.h b/dom/canvas/CanvasPath.h index 7e109a96b5051..141f86fee0f45 100644 --- a/dom/canvas/CanvasPath.h +++ b/dom/canvas/CanvasPath.h @@ -22,7 +22,7 @@ struct DOMMatrix2DInit; class CanvasPath final : public nsWrapperCache { public: NS_INLINE_DECL_CYCLE_COLLECTING_NATIVE_REFCOUNTING(CanvasPath) - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_NATIVE_CLASS(CanvasPath) + NS_DECL_CYCLE_COLLECTION_NATIVE_WRAPPERCACHE_CLASS(CanvasPath)
nsCOMPtr<nsISupports> GetParentObject() { return mParent; }
diff --git a/dom/canvas/CanvasPattern.h b/dom/canvas/CanvasPattern.h index 0aa9f4655c514..7ec392b0c31aa 100644 --- a/dom/canvas/CanvasPattern.h +++ b/dom/canvas/CanvasPattern.h @@ -26,7 +26,7 @@ class CanvasPattern final : public nsWrapperCache {
public: NS_INLINE_DECL_CYCLE_COLLECTING_NATIVE_REFCOUNTING(CanvasPattern) - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_NATIVE_CLASS(CanvasPattern) + NS_DECL_CYCLE_COLLECTION_NATIVE_WRAPPERCACHE_CLASS(CanvasPattern)
enum class RepeatMode : uint8_t { REPEAT, REPEATX, REPEATY, NOREPEAT };
diff --git a/dom/canvas/CanvasRenderingContext2D.cpp b/dom/canvas/CanvasRenderingContext2D.cpp index ac199cf96f721..e01116e939970 100644 --- a/dom/canvas/CanvasRenderingContext2D.cpp +++ b/dom/canvas/CanvasRenderingContext2D.cpp @@ -903,7 +903,7 @@ CanvasShutdownObserver::Observe(nsISupports* aSubject, const char* aTopic, NS_IMPL_CYCLE_COLLECTING_ADDREF(CanvasRenderingContext2D) NS_IMPL_CYCLE_COLLECTING_RELEASE(CanvasRenderingContext2D)
-NS_IMPL_CYCLE_COLLECTION_CLASS(CanvasRenderingContext2D) +NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(CanvasRenderingContext2D)
NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(CanvasRenderingContext2D) // Make sure we remove ourselves from the list of demotable contexts (raw @@ -965,8 +965,6 @@ NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(CanvasRenderingContext2D) } NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
-NS_IMPL_CYCLE_COLLECTION_TRACE_WRAPPERCACHE(CanvasRenderingContext2D) - NS_IMPL_CYCLE_COLLECTION_CAN_SKIP_BEGIN(CanvasRenderingContext2D) if (nsCCUncollectableMarker::sGeneration && tmp->HasKnownLiveWrapper()) { dom::Element* canvasElement = tmp->mCanvasElement; diff --git a/dom/canvas/CanvasRenderingContext2D.h b/dom/canvas/CanvasRenderingContext2D.h index 48c49a69cdc1b..3f2088ee61bc7 100644 --- a/dom/canvas/CanvasRenderingContext2D.h +++ b/dom/canvas/CanvasRenderingContext2D.h @@ -482,7 +482,7 @@ class CanvasRenderingContext2D : public nsICanvasRenderingContextInternal, // nsISupports interface + CC NS_DECL_CYCLE_COLLECTING_ISUPPORTS
- NS_DECL_CYCLE_COLLECTION_SKIPPABLE_SCRIPT_HOLDER_CLASS( + NS_DECL_CYCLE_COLLECTION_SKIPPABLE_WRAPPERCACHE_CLASS( CanvasRenderingContext2D)
enum class CanvasMultiGetterType : uint8_t { diff --git a/dom/canvas/ClientWebGLContext.h b/dom/canvas/ClientWebGLContext.h index 9a1b46743a439..22140dfadb00c 100644 --- a/dom/canvas/ClientWebGLContext.h +++ b/dom/canvas/ClientWebGLContext.h @@ -269,7 +269,7 @@ class WebGLBufferJS final : public nsWrapperCache, public webgl::ObjectJS {
public: NS_INLINE_DECL_CYCLE_COLLECTING_NATIVE_REFCOUNTING(WebGLBufferJS) - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_NATIVE_CLASS(WebGLBufferJS) + NS_DECL_CYCLE_COLLECTION_NATIVE_WRAPPERCACHE_CLASS(WebGLBufferJS)
explicit WebGLBufferJS(const ClientWebGLContext& webgl) : webgl::ObjectJS(webgl) {} @@ -298,7 +298,7 @@ class WebGLFramebufferJS final : public nsWrapperCache, public webgl::ObjectJS {
public: NS_INLINE_DECL_CYCLE_COLLECTING_NATIVE_REFCOUNTING(WebGLFramebufferJS) - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_NATIVE_CLASS(WebGLFramebufferJS) + NS_DECL_CYCLE_COLLECTION_NATIVE_WRAPPERCACHE_CLASS(WebGLFramebufferJS)
explicit WebGLFramebufferJS(const ClientWebGLContext&, bool opaque = false);
@@ -330,7 +330,7 @@ class WebGLProgramJS final : public nsWrapperCache, public webgl::ObjectJS {
public: NS_INLINE_DECL_CYCLE_COLLECTING_NATIVE_REFCOUNTING(WebGLProgramJS) - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_NATIVE_CLASS(WebGLProgramJS) + NS_DECL_CYCLE_COLLECTION_NATIVE_WRAPPERCACHE_CLASS(WebGLProgramJS) // Must come first! // If the REFCOUNTING macro isn't declared first, the AddRef at // mInnerRef->js will panic when REFCOUNTING's "owning thread" var is still @@ -392,7 +392,7 @@ class WebGLQueryJS final : public nsWrapperCache,
public: NS_INLINE_DECL_CYCLE_COLLECTING_NATIVE_REFCOUNTING(WebGLQueryJS) - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_NATIVE_CLASS(WebGLQueryJS) + NS_DECL_CYCLE_COLLECTION_NATIVE_WRAPPERCACHE_CLASS(WebGLQueryJS)
explicit WebGLQueryJS(const ClientWebGLContext& webgl) : webgl::ObjectJS(webgl) {} @@ -412,7 +412,7 @@ class WebGLRenderbufferJS final : public nsWrapperCache,
public: NS_INLINE_DECL_CYCLE_COLLECTING_NATIVE_REFCOUNTING(WebGLRenderbufferJS) - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_NATIVE_CLASS(WebGLRenderbufferJS) + NS_DECL_CYCLE_COLLECTION_NATIVE_WRAPPERCACHE_CLASS(WebGLRenderbufferJS)
private: bool mHasBeenBound = false; // !IsRenderbuffer until Bind @@ -431,7 +431,7 @@ class WebGLSamplerJS final : public nsWrapperCache, public webgl::ObjectJS { // IsSampler without Bind public: NS_INLINE_DECL_CYCLE_COLLECTING_NATIVE_REFCOUNTING(WebGLSamplerJS) - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_NATIVE_CLASS(WebGLSamplerJS) + NS_DECL_CYCLE_COLLECTION_NATIVE_WRAPPERCACHE_CLASS(WebGLSamplerJS)
explicit WebGLSamplerJS(const ClientWebGLContext& webgl) : webgl::ObjectJS(webgl) {} @@ -450,7 +450,7 @@ class WebGLShaderJS final : public nsWrapperCache, public webgl::ObjectJS {
public: NS_INLINE_DECL_CYCLE_COLLECTING_NATIVE_REFCOUNTING(WebGLShaderJS) - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_NATIVE_CLASS(WebGLShaderJS) + NS_DECL_CYCLE_COLLECTION_NATIVE_WRAPPERCACHE_CLASS(WebGLShaderJS)
private: const GLenum mType; @@ -492,7 +492,7 @@ class WebGLSyncJS final : public nsWrapperCache,
public: NS_INLINE_DECL_CYCLE_COLLECTING_NATIVE_REFCOUNTING(WebGLSyncJS) - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_NATIVE_CLASS(WebGLSyncJS) + NS_DECL_CYCLE_COLLECTION_NATIVE_WRAPPERCACHE_CLASS(WebGLSyncJS)
explicit WebGLSyncJS(const ClientWebGLContext& webgl) : webgl::ObjectJS(webgl) {} @@ -513,7 +513,7 @@ class WebGLTextureJS final : public nsWrapperCache, public webgl::ObjectJS {
public: NS_INLINE_DECL_CYCLE_COLLECTING_NATIVE_REFCOUNTING(WebGLTextureJS) - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_NATIVE_CLASS(WebGLTextureJS) + NS_DECL_CYCLE_COLLECTION_NATIVE_WRAPPERCACHE_CLASS(WebGLTextureJS)
explicit WebGLTextureJS(const ClientWebGLContext& webgl) : webgl::ObjectJS(webgl) {} @@ -539,7 +539,7 @@ class WebGLTransformFeedbackJS final : public nsWrapperCache,
public: NS_INLINE_DECL_CYCLE_COLLECTING_NATIVE_REFCOUNTING(WebGLTransformFeedbackJS) - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_NATIVE_CLASS(WebGLTransformFeedbackJS) + NS_DECL_CYCLE_COLLECTION_NATIVE_WRAPPERCACHE_CLASS(WebGLTransformFeedbackJS)
explicit WebGLTransformFeedbackJS(const ClientWebGLContext&);
@@ -564,7 +564,7 @@ class WebGLUniformLocationJS final : public nsWrapperCache,
public: NS_INLINE_DECL_CYCLE_COLLECTING_NATIVE_REFCOUNTING(WebGLUniformLocationJS) - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_NATIVE_CLASS(WebGLUniformLocationJS) + NS_DECL_CYCLE_COLLECTION_NATIVE_WRAPPERCACHE_CLASS(WebGLUniformLocationJS)
WebGLUniformLocationJS(const ClientWebGLContext& webgl, std::weak_ptrwebgl::LinkResult parent, uint32_t loc, @@ -592,7 +592,7 @@ class WebGLVertexArrayJS final : public nsWrapperCache, public webgl::ObjectJS {
public: NS_INLINE_DECL_CYCLE_COLLECTING_NATIVE_REFCOUNTING(WebGLVertexArrayJS) - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_NATIVE_CLASS(WebGLVertexArrayJS) + NS_DECL_CYCLE_COLLECTION_NATIVE_WRAPPERCACHE_CLASS(WebGLVertexArrayJS)
explicit WebGLVertexArrayJS(const ClientWebGLContext&);
@@ -710,7 +710,7 @@ class ClientWebGLContext final : public nsICanvasRenderingContextInternal, // ----------------------------- Lifetime and DOM --------------------------- public: NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(ClientWebGLContext) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(ClientWebGLContext)
JSObject* WrapObject(JSContext* cx, JS::Handle<JSObject*> givenProto) override { diff --git a/dom/canvas/ClientWebGLExtensions.h b/dom/canvas/ClientWebGLExtensions.h index d2d8ba9815800..cf1a80756b84f 100644 --- a/dom/canvas/ClientWebGLExtensions.h +++ b/dom/canvas/ClientWebGLExtensions.h @@ -19,7 +19,7 @@ class ClientWebGLExtensionBase : public nsWrapperCache {
public: NS_INLINE_DECL_CYCLE_COLLECTING_NATIVE_REFCOUNTING(ClientWebGLExtensionBase) - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_NATIVE_CLASS(ClientWebGLExtensionBase) + NS_DECL_CYCLE_COLLECTION_NATIVE_WRAPPERCACHE_CLASS(ClientWebGLExtensionBase)
protected: explicit ClientWebGLExtensionBase(ClientWebGLContext& context) diff --git a/dom/canvas/ImageBitmap.h b/dom/canvas/ImageBitmap.h index 6188a0fa7c7ec..282a743e2025f 100644 --- a/dom/canvas/ImageBitmap.h +++ b/dom/canvas/ImageBitmap.h @@ -79,7 +79,7 @@ struct ImageBitmapCloneData final { class ImageBitmap final : public nsISupports, public nsWrapperCache { public: NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(ImageBitmap) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(ImageBitmap)
nsCOMPtr<nsIGlobalObject> GetParentObject() const { return mParent; }
diff --git a/dom/canvas/ImageBitmapRenderingContext.h b/dom/canvas/ImageBitmapRenderingContext.h index 4233448dc315b..52437bc405f41 100644 --- a/dom/canvas/ImageBitmapRenderingContext.h +++ b/dom/canvas/ImageBitmapRenderingContext.h @@ -52,7 +52,7 @@ class ImageBitmapRenderingContext final // nsISupports interface + CC NS_DECL_CYCLE_COLLECTING_ISUPPORTS
- NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(ImageBitmapRenderingContext) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(ImageBitmapRenderingContext)
void GetCanvas( Nullable<OwningHTMLCanvasElementOrOffscreenCanvas>& retval) const; diff --git a/dom/canvas/OffscreenCanvasRenderingContext2D.cpp b/dom/canvas/OffscreenCanvasRenderingContext2D.cpp index 9eece4a5e3fdd..b43a0566152ff 100644 --- a/dom/canvas/OffscreenCanvasRenderingContext2D.cpp +++ b/dom/canvas/OffscreenCanvasRenderingContext2D.cpp @@ -41,13 +41,20 @@ class OffscreenCanvasShutdownObserver final { OffscreenCanvasRenderingContext2D* mOwner; };
-NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_INHERITED( - OffscreenCanvasRenderingContext2D, CanvasRenderingContext2D) +NS_IMPL_CYCLE_COLLECTION_INHERITED(OffscreenCanvasRenderingContext2D, + CanvasRenderingContext2D)
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(OffscreenCanvasRenderingContext2D) NS_WRAPPERCACHE_INTERFACE_MAP_ENTRY NS_INTERFACE_MAP_END_INHERITING(CanvasRenderingContext2D)
+// Need to use NS_DECL_CYCLE_COLLECTION_SKIPPABLE_SCRIPT_HOLDER_CLASS_INHERITED +// and dummy trace since we're missing some _SKIPPABLE_ macros without +// SCRIPT_HOLDER. +NS_IMPL_CYCLE_COLLECTION_TRACE_BEGIN_INHERITED( + OffscreenCanvasRenderingContext2D, CanvasRenderingContext2D) +NS_IMPL_CYCLE_COLLECTION_TRACE_END + NS_IMPL_CYCLE_COLLECTION_CAN_SKIP_BEGIN(OffscreenCanvasRenderingContext2D) return tmp->HasKnownLiveWrapper(); NS_IMPL_CYCLE_COLLECTION_CAN_SKIP_END diff --git a/dom/canvas/XRWebGLLayer.h b/dom/canvas/XRWebGLLayer.h index 01dab2f80e1ee..49d4c7e770106 100644 --- a/dom/canvas/XRWebGLLayer.h +++ b/dom/canvas/XRWebGLLayer.h @@ -27,7 +27,7 @@ struct XRWebGLLayerInit; class XRWebGLLayer final : public nsWrapperCache { public: NS_INLINE_DECL_CYCLE_COLLECTING_NATIVE_REFCOUNTING(XRWebGLLayer) - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_NATIVE_CLASS(XRWebGLLayer) + NS_DECL_CYCLE_COLLECTION_NATIVE_WRAPPERCACHE_CLASS(XRWebGLLayer)
explicit XRWebGLLayer( nsISupports* aParent, XRSession& aSession, bool aIgnoreDepthValues, diff --git a/dom/clients/api/Client.h b/dom/clients/api/Client.h index 303c8be6382e7..cd47ccd93bad7 100644 --- a/dom/clients/api/Client.h +++ b/dom/clients/api/Client.h @@ -80,7 +80,7 @@ class Client final : public nsISupports, public nsWrapperCache { ErrorResult& aRv);
NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(mozilla::dom::Client) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(mozilla::dom::Client) };
} // namespace dom diff --git a/dom/clients/api/Clients.h b/dom/clients/api/Clients.h index dd5448c4a1ebb..481b066655f11 100644 --- a/dom/clients/api/Clients.h +++ b/dom/clients/api/Clients.h @@ -46,7 +46,7 @@ class Clients final : public nsISupports, public nsWrapperCache { already_AddRefed<Promise> Claim(ErrorResult& aRv);
NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(Clients) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(Clients) };
} // namespace dom diff --git a/dom/console/Console.cpp b/dom/console/Console.cpp index 56b260f7f0d50..da66993586d5c 100644 --- a/dom/console/Console.cpp +++ b/dom/console/Console.cpp @@ -793,7 +793,7 @@ class ConsoleProfileWorkerRunnable final : public ConsoleWorkerRunnable { nsString mAction; };
-NS_IMPL_CYCLE_COLLECTION_MULTI_ZONE_JSHOLDER_CLASS(Console) +NS_IMPL_CYCLE_COLLECTION_CLASS(Console)
NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(Console) NS_IMPL_CYCLE_COLLECTION_UNLINK(mGlobal) diff --git a/dom/console/ConsoleInstance.h b/dom/console/ConsoleInstance.h index cb0ee5489f1c4..6afed56b57908 100644 --- a/dom/console/ConsoleInstance.h +++ b/dom/console/ConsoleInstance.h @@ -14,7 +14,7 @@ namespace mozilla::dom { class ConsoleInstance final : public nsISupports, public nsWrapperCache { public: NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(ConsoleInstance) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(ConsoleInstance)
explicit ConsoleInstance(JSContext* aCx, const ConsoleInstanceOptions& aOptions); diff --git a/dom/credentialmanagement/Credential.h b/dom/credentialmanagement/Credential.h index a29bf28f1fc36..bb5fbd9539b0e 100644 --- a/dom/credentialmanagement/Credential.h +++ b/dom/credentialmanagement/Credential.h @@ -17,7 +17,7 @@ namespace mozilla::dom { class Credential : public nsISupports, public nsWrapperCache { public: NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(Credential) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(Credential)
public: explicit Credential(nsPIDOMWindowInner* aParent); diff --git a/dom/credentialmanagement/CredentialsContainer.h b/dom/credentialmanagement/CredentialsContainer.h index 2d2d25af79aea..0a9bc9dfb7da7 100644 --- a/dom/credentialmanagement/CredentialsContainer.h +++ b/dom/credentialmanagement/CredentialsContainer.h @@ -16,7 +16,7 @@ class WebAuthnManager; class CredentialsContainer final : public nsISupports, public nsWrapperCache { public: NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(CredentialsContainer) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(CredentialsContainer)
explicit CredentialsContainer(nsPIDOMWindowInner* aParent);
diff --git a/dom/crypto/CryptoKey.h b/dom/crypto/CryptoKey.h index 6619f1a5cda5e..d09d2cd66ceec 100644 --- a/dom/crypto/CryptoKey.h +++ b/dom/crypto/CryptoKey.h @@ -73,7 +73,7 @@ struct JsonWebKey; class CryptoKey final : public nsISupports, public nsWrapperCache { public: NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(CryptoKey) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(CryptoKey)
static const uint32_t CLEAR_EXTRACTABLE = 0xFFFFFFE; static const uint32_t EXTRACTABLE = 0x00000001; diff --git a/dom/debugger/DebuggerNotification.h b/dom/debugger/DebuggerNotification.h index 35dc5c45677c6..a0d443c27c9ca 100644 --- a/dom/debugger/DebuggerNotification.h +++ b/dom/debugger/DebuggerNotification.h @@ -18,7 +18,7 @@ namespace mozilla::dom { class DebuggerNotification : public nsISupports, public nsWrapperCache { public: NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(DebuggerNotification) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(DebuggerNotification)
DebuggerNotification(nsIGlobalObject* aDebuggeeGlobal, DebuggerNotificationType aType, diff --git a/dom/debugger/DebuggerNotificationObserver.h b/dom/debugger/DebuggerNotificationObserver.h index 7ba176f605358..743268f2a7faf 100644 --- a/dom/debugger/DebuggerNotificationObserver.h +++ b/dom/debugger/DebuggerNotificationObserver.h @@ -23,7 +23,7 @@ class DebuggerNotificationObserver final : public nsISupports, public nsWrapperCache { public: NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(DebuggerNotificationObserver) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(DebuggerNotificationObserver)
static already_AddRefed<DebuggerNotificationObserver> Constructor( GlobalObject& aGlobal, ErrorResult& aRv); diff --git a/dom/events/ClipboardItem.h b/dom/events/ClipboardItem.h index fb043aa20119a..496ce2c0cefab 100644 --- a/dom/events/ClipboardItem.h +++ b/dom/events/ClipboardItem.h @@ -27,7 +27,7 @@ class ClipboardItem final : public nsWrapperCache { };
NS_INLINE_DECL_CYCLE_COLLECTING_NATIVE_REFCOUNTING(ClipboardItem) - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_NATIVE_CLASS(ClipboardItem) + NS_DECL_CYCLE_COLLECTION_NATIVE_WRAPPERCACHE_CLASS(ClipboardItem)
ClipboardItem(nsISupports* aOwner, dom::PresentationStyle aPresentationStyle, nsTArray<ItemEntry>&& aItems); diff --git a/dom/events/CustomEvent.cpp b/dom/events/CustomEvent.cpp index 36eb76030b661..c4f1b30044298 100644 --- a/dom/events/CustomEvent.cpp +++ b/dom/events/CustomEvent.cpp @@ -23,7 +23,7 @@ CustomEvent::CustomEvent(mozilla::dom::EventTarget* aOwner,
CustomEvent::~CustomEvent() { mozilla::DropJSObjects(this); }
-NS_IMPL_CYCLE_COLLECTION_MULTI_ZONE_JSHOLDER_CLASS(CustomEvent) +NS_IMPL_CYCLE_COLLECTION_CLASS(CustomEvent) NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN_INHERITED(CustomEvent, Event) mozilla::DropJSObjects(tmp); NS_IMPL_CYCLE_COLLECTION_UNLINK_END diff --git a/dom/events/DOMEventTargetHelper.cpp b/dom/events/DOMEventTargetHelper.cpp index 6a502b64e8bee..7cbe8d5636730 100644 --- a/dom/events/DOMEventTargetHelper.cpp +++ b/dom/events/DOMEventTargetHelper.cpp @@ -18,11 +18,7 @@ namespace mozilla {
using namespace dom;
-NS_IMPL_CYCLE_COLLECTION_CLASS(DOMEventTargetHelper) - -NS_IMPL_CYCLE_COLLECTION_TRACE_BEGIN(DOMEventTargetHelper) - NS_IMPL_CYCLE_COLLECTION_TRACE_PRESERVED_WRAPPER -NS_IMPL_CYCLE_COLLECTION_TRACE_END +NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(DOMEventTargetHelper)
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN_INTERNAL(DOMEventTargetHelper) if (MOZ_UNLIKELY(cb.WantDebugInfo())) { diff --git a/dom/events/DOMEventTargetHelper.h b/dom/events/DOMEventTargetHelper.h index 594ae6aa3e88f..622f482a16773 100644 --- a/dom/events/DOMEventTargetHelper.h +++ b/dom/events/DOMEventTargetHelper.h @@ -56,7 +56,7 @@ class DOMEventTargetHelper : public dom::EventTarget, explicit DOMEventTargetHelper(DOMEventTargetHelper* aOther);
NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SKIPPABLE_SCRIPT_HOLDER_CLASS(DOMEventTargetHelper) + NS_DECL_CYCLE_COLLECTION_SKIPPABLE_WRAPPERCACHE_CLASS(DOMEventTargetHelper)
virtual EventListenerManager* GetExistingListenerManager() const override; virtual EventListenerManager* GetOrCreateListenerManager() override; diff --git a/dom/events/DataTransfer.cpp b/dom/events/DataTransfer.cpp index 85dab302b6fcf..e932b67c296a5 100644 --- a/dom/events/DataTransfer.cpp +++ b/dom/events/DataTransfer.cpp @@ -49,7 +49,7 @@
namespace mozilla::dom {
-NS_IMPL_CYCLE_COLLECTION_CLASS(DataTransfer) +NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(DataTransfer)
NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(DataTransfer) NS_IMPL_CYCLE_COLLECTION_UNLINK(mParent) @@ -64,7 +64,6 @@ NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(DataTransfer) NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mDragTarget) NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mDragImage) NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END -NS_IMPL_CYCLE_COLLECTION_TRACE_WRAPPERCACHE(DataTransfer)
NS_IMPL_CYCLE_COLLECTING_ADDREF(DataTransfer) NS_IMPL_CYCLE_COLLECTING_RELEASE(DataTransfer) diff --git a/dom/events/DataTransfer.h b/dom/events/DataTransfer.h index b0d01e119ec0e..e9fed94a6771a 100644 --- a/dom/events/DataTransfer.h +++ b/dom/events/DataTransfer.h @@ -59,7 +59,7 @@ class DataTransfer final : public nsISupports, public nsWrapperCache {
NS_DECL_CYCLE_COLLECTING_ISUPPORTS
- NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(DataTransfer) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(DataTransfer)
friend class mozilla::EventStateManager;
diff --git a/dom/events/DataTransferItem.h b/dom/events/DataTransferItem.h index ce97322defefd..171173852257f 100644 --- a/dom/events/DataTransferItem.h +++ b/dom/events/DataTransferItem.h @@ -23,7 +23,7 @@ class FunctionStringCallback; class DataTransferItem final : public nsISupports, public nsWrapperCache { public: NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(DataTransferItem); + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(DataTransferItem);
public: // The spec only talks about the "file" and "string" kinds. Due to the Moz* diff --git a/dom/events/DataTransferItemList.h b/dom/events/DataTransferItemList.h index b2d7f8e963c76..82977999db86f 100644 --- a/dom/events/DataTransferItemList.h +++ b/dom/events/DataTransferItemList.h @@ -21,7 +21,7 @@ class DataTransferItem; class DataTransferItemList final : public nsISupports, public nsWrapperCache { public: NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(DataTransferItemList); + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(DataTransferItemList);
explicit DataTransferItemList(DataTransfer* aDataTransfer) : mDataTransfer(aDataTransfer) { diff --git a/dom/events/DeviceMotionEvent.h b/dom/events/DeviceMotionEvent.h index 9d5922c24bcc1..3e0debba88db6 100644 --- a/dom/events/DeviceMotionEvent.h +++ b/dom/events/DeviceMotionEvent.h @@ -16,7 +16,7 @@ namespace mozilla::dom { class DeviceRotationRate final : public nsWrapperCache { public: NS_INLINE_DECL_CYCLE_COLLECTING_NATIVE_REFCOUNTING(DeviceRotationRate) - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_NATIVE_CLASS(DeviceRotationRate) + NS_DECL_CYCLE_COLLECTION_NATIVE_WRAPPERCACHE_CLASS(DeviceRotationRate)
DeviceRotationRate(DeviceMotionEvent* aOwner, const Nullable<double>& aAlpha, const Nullable<double>& aBeta, @@ -44,7 +44,7 @@ class DeviceRotationRate final : public nsWrapperCache { class DeviceAcceleration final : public nsWrapperCache { public: NS_INLINE_DECL_CYCLE_COLLECTING_NATIVE_REFCOUNTING(DeviceAcceleration) - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_NATIVE_CLASS(DeviceAcceleration) + NS_DECL_CYCLE_COLLECTION_NATIVE_WRAPPERCACHE_CLASS(DeviceAcceleration)
DeviceAcceleration(DeviceMotionEvent* aOwner, const Nullable<double>& aX, const Nullable<double>& aY, const Nullable<double>& aZ); diff --git a/dom/events/Event.cpp b/dom/events/Event.cpp index b2040b2d09c57..5f00c4c98153c 100644 --- a/dom/events/Event.cpp +++ b/dom/events/Event.cpp @@ -129,11 +129,7 @@ NS_INTERFACE_MAP_END NS_IMPL_CYCLE_COLLECTING_ADDREF(Event) NS_IMPL_CYCLE_COLLECTING_RELEASE(Event)
-NS_IMPL_CYCLE_COLLECTION_CLASS(Event) - -NS_IMPL_CYCLE_COLLECTION_TRACE_BEGIN(Event) - NS_IMPL_CYCLE_COLLECTION_TRACE_PRESERVED_WRAPPER -NS_IMPL_CYCLE_COLLECTION_TRACE_END +NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(Event)
NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(Event) if (tmp->mEventIsInternal) { diff --git a/dom/events/Event.h b/dom/events/Event.h index 7759034cec57b..3984b021f0f10 100644 --- a/dom/events/Event.h +++ b/dom/events/Event.h @@ -86,7 +86,7 @@ class Event : public nsISupports, public nsWrapperCache {
public: NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(Event) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(Event)
nsIGlobalObject* GetParentObject() { return mOwner; }
diff --git a/dom/events/ImageCaptureError.h b/dom/events/ImageCaptureError.h index 404af08b5846c..9c56c3f004da9 100644 --- a/dom/events/ImageCaptureError.h +++ b/dom/events/ImageCaptureError.h @@ -22,7 +22,7 @@ namespace mozilla::dom { class ImageCaptureError final : public nsISupports, public nsWrapperCache { public: NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(ImageCaptureError) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(ImageCaptureError)
ImageCaptureError(nsISupports* aParent, uint16_t aCode, const nsAString& aMessage); diff --git a/dom/events/MessageEvent.cpp b/dom/events/MessageEvent.cpp index 5b16fa4eb14e4..92e59a6348f77 100644 --- a/dom/events/MessageEvent.cpp +++ b/dom/events/MessageEvent.cpp @@ -16,7 +16,7 @@
namespace mozilla::dom {
-NS_IMPL_CYCLE_COLLECTION_MULTI_ZONE_JSHOLDER_CLASS(MessageEvent) +NS_IMPL_CYCLE_COLLECTION_CLASS(MessageEvent)
NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN_INHERITED(MessageEvent, Event) tmp->mData.setUndefined(); diff --git a/dom/events/PaintRequest.h b/dom/events/PaintRequest.h index 0cc6362fc8d1c..72a1e69283066 100644 --- a/dom/events/PaintRequest.h +++ b/dom/events/PaintRequest.h @@ -22,7 +22,7 @@ class PaintRequest final : public nsISupports, public nsWrapperCache { explicit PaintRequest(Event* aParent) : mParent(aParent) {}
NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(PaintRequest) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(PaintRequest)
virtual JSObject* WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto) override; @@ -46,7 +46,7 @@ class PaintRequestList final : public nsISupports, public nsWrapperCache { explicit PaintRequestList(Event* aParent) : mParent(aParent) {}
NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(PaintRequestList) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(PaintRequestList)
virtual JSObject* WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto) override; diff --git a/dom/events/TextClause.h b/dom/events/TextClause.h index 54ce97b727866..18a3c8939227f 100644 --- a/dom/events/TextClause.h +++ b/dom/events/TextClause.h @@ -19,7 +19,7 @@ namespace mozilla::dom { class TextClause final : public nsISupports, public nsWrapperCache { public: NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(TextClause) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(TextClause)
nsPIDOMWindowInner* GetParentObject() const { return mOwner; }
diff --git a/dom/events/Touch.h b/dom/events/Touch.h index 815d6a1b05d72..74924b34a2e09 100644 --- a/dom/events/Touch.h +++ b/dom/events/Touch.h @@ -39,7 +39,7 @@ class Touch final : public nsISupports, Touch(const Touch& aOther);
NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(Touch) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(Touch)
void InitializePoints(nsPresContext* aPresContext, WidgetEvent* aEvent);
diff --git a/dom/events/TouchEvent.h b/dom/events/TouchEvent.h index c175463442c89..eb88aa5868b96 100644 --- a/dom/events/TouchEvent.h +++ b/dom/events/TouchEvent.h @@ -21,7 +21,7 @@ namespace mozilla::dom { class TouchList final : public nsISupports, public nsWrapperCache { public: NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(TouchList) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(TouchList)
explicit TouchList(nsISupports* aParent) : mParent(aParent) { nsJSContext::LikelyShortLivingObjectCreated(); diff --git a/dom/fetch/Headers.h b/dom/fetch/Headers.h index fdccb1540619d..db3be8e75f6b4 100644 --- a/dom/fetch/Headers.h +++ b/dom/fetch/Headers.h @@ -34,7 +34,7 @@ class OwningByteStringSequenceSequenceOrByteStringByteStringRecord; */ class Headers final : public nsISupports, public nsWrapperCache { NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(Headers) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(Headers)
friend class Request; friend class Response; diff --git a/dom/fetch/Request.cpp b/dom/fetch/Request.cpp index 3cb5f47751100..794b9489807eb 100644 --- a/dom/fetch/Request.cpp +++ b/dom/fetch/Request.cpp @@ -30,7 +30,8 @@ namespace mozilla::dom { NS_IMPL_ADDREF_INHERITED(Request, FetchBody<Request>) NS_IMPL_RELEASE_INHERITED(Request, FetchBody<Request>)
-NS_IMPL_CYCLE_COLLECTION_CLASS(Request) +// Can't use _INHERITED macro here because FetchBody<Request> is abstract. +NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(Request)
NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN_INHERITED(Request, FetchBody<Request>) NS_IMPL_CYCLE_COLLECTION_UNLINK(mReadableStreamBody) @@ -49,10 +50,6 @@ NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN_INHERITED(Request, FetchBody<Request>) NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mSignal) NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
-NS_IMPL_CYCLE_COLLECTION_TRACE_BEGIN_INHERITED(Request, FetchBody<Request>) - NS_IMPL_CYCLE_COLLECTION_TRACE_PRESERVED_WRAPPER -NS_IMPL_CYCLE_COLLECTION_TRACE_END - NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(Request) NS_WRAPPERCACHE_INTERFACE_MAP_ENTRY NS_INTERFACE_MAP_END_INHERITING(FetchBody<Request>) diff --git a/dom/fetch/Request.h b/dom/fetch/Request.h index 72a58d73cdd85..0086e076de973 100644 --- a/dom/fetch/Request.h +++ b/dom/fetch/Request.h @@ -25,8 +25,8 @@ class RequestOrUSVString;
class Request final : public FetchBody<Request>, public nsWrapperCache { NS_DECL_ISUPPORTS_INHERITED - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS_INHERITED(Request, - FetchBody<Request>) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS_INHERITED(Request, + FetchBody<Request>)
public: Request(nsIGlobalObject* aOwner, SafeRefPtr<InternalRequest> aRequest, diff --git a/dom/file/FileList.h b/dom/file/FileList.h index f0537f264048d..f36b25ba07905 100644 --- a/dom/file/FileList.h +++ b/dom/file/FileList.h @@ -32,7 +32,7 @@ class Sequence; class FileList final : public nsISupports, public nsWrapperCache { public: NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(FileList) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(FileList)
explicit FileList(nsISupports* aParent);
diff --git a/dom/filesystem/Directory.cpp b/dom/filesystem/Directory.cpp index cb0e69a03451c..da5d6e551564e 100644 --- a/dom/filesystem/Directory.cpp +++ b/dom/filesystem/Directory.cpp @@ -20,7 +20,7 @@
namespace mozilla::dom {
-NS_IMPL_CYCLE_COLLECTION_CLASS(Directory) +NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(Directory)
NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(Directory) if (tmp->mFileSystem) { @@ -38,8 +38,6 @@ NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(Directory) NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mGlobal) NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
-NS_IMPL_CYCLE_COLLECTION_TRACE_WRAPPERCACHE(Directory) - NS_IMPL_CYCLE_COLLECTING_ADDREF(Directory) NS_IMPL_CYCLE_COLLECTING_RELEASE(Directory) NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(Directory) diff --git a/dom/filesystem/Directory.h b/dom/filesystem/Directory.h index 11f1132cdaf2a..b8ee0e68e1f6a 100644 --- a/dom/filesystem/Directory.h +++ b/dom/filesystem/Directory.h @@ -25,7 +25,7 @@ class StringOrFileOrDirectory; class Directory final : public nsISupports, public nsWrapperCache { public: NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(Directory) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(Directory)
static already_AddRefed<Directory> Constructor(const GlobalObject& aGlobal, const nsAString& aRealPath, diff --git a/dom/filesystem/compat/FileSystem.h b/dom/filesystem/compat/FileSystem.h index b8fa01d759c3b..92cb563ef4d48 100644 --- a/dom/filesystem/compat/FileSystem.h +++ b/dom/filesystem/compat/FileSystem.h @@ -23,7 +23,7 @@ class OwningFileOrDirectory; class FileSystem final : public nsISupports, public nsWrapperCache { public: NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(FileSystem) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(FileSystem)
static already_AddRefed<FileSystem> Create(nsIGlobalObject* aGlobalObject);
diff --git a/dom/filesystem/compat/FileSystemDirectoryReader.h b/dom/filesystem/compat/FileSystemDirectoryReader.h index 5aa9dce79fdf5..90274943b4bea 100644 --- a/dom/filesystem/compat/FileSystemDirectoryReader.h +++ b/dom/filesystem/compat/FileSystemDirectoryReader.h @@ -25,7 +25,7 @@ class FileSystemEntriesCallback; class FileSystemDirectoryReader : public nsISupports, public nsWrapperCache { public: NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(FileSystemDirectoryReader) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(FileSystemDirectoryReader)
explicit FileSystemDirectoryReader(FileSystemDirectoryEntry* aDirectoryEntry, FileSystem* aFileSystem, diff --git a/dom/filesystem/compat/FileSystemEntry.h b/dom/filesystem/compat/FileSystemEntry.h index ffdafc0a2cce8..2275c600a9bcc 100644 --- a/dom/filesystem/compat/FileSystemEntry.h +++ b/dom/filesystem/compat/FileSystemEntry.h @@ -25,7 +25,7 @@ class OwningFileOrDirectory; class FileSystemEntry : public nsISupports, public nsWrapperCache { public: NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(FileSystemEntry) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(FileSystemEntry)
static already_AddRefed<FileSystemEntry> Create( nsIGlobalObject* aGlobalObject, diff --git a/dom/flex/Flex.h b/dom/flex/Flex.h index 25d54c5069853..7476585a3cbcf 100644 --- a/dom/flex/Flex.h +++ b/dom/flex/Flex.h @@ -27,7 +27,7 @@ class Flex : public nsISupports, public nsWrapperCache {
public: NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(Flex) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(Flex)
virtual JSObject* WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto) override; diff --git a/dom/flex/FlexItemValues.h b/dom/flex/FlexItemValues.h index 91ba7a981aab1..2853a922bbc46 100644 --- a/dom/flex/FlexItemValues.h +++ b/dom/flex/FlexItemValues.h @@ -31,7 +31,7 @@ class FlexItemValues : public nsISupports, public nsWrapperCache {
public: NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(FlexItemValues) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(FlexItemValues)
virtual JSObject* WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto) override; diff --git a/dom/flex/FlexLineValues.h b/dom/flex/FlexLineValues.h index 09bb22cc7497a..340af2e7e5bd9 100644 --- a/dom/flex/FlexLineValues.h +++ b/dom/flex/FlexLineValues.h @@ -27,7 +27,7 @@ class FlexLineValues : public nsISupports, public nsWrapperCache {
public: NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(FlexLineValues) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(FlexLineValues)
virtual JSObject* WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto) override; diff --git a/dom/fs/FileSystemDirectoryIterator.h b/dom/fs/FileSystemDirectoryIterator.h index e07980c618551..30c7f3451187b 100644 --- a/dom/fs/FileSystemDirectoryIterator.h +++ b/dom/fs/FileSystemDirectoryIterator.h @@ -26,7 +26,7 @@ class FileSystemDirectoryIterator : public nsISupports, public nsWrapperCache { explicit FileSystemDirectoryIterator(nsIGlobalObject* aGlobal);
NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(FileSystemDirectoryIterator) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(FileSystemDirectoryIterator)
// WebIDL Boilerplate nsIGlobalObject* GetParentObject() const; diff --git a/dom/fs/FileSystemHandle.h b/dom/fs/FileSystemHandle.h index e2cb323fc11b8..21c9a9268f25f 100644 --- a/dom/fs/FileSystemHandle.h +++ b/dom/fs/FileSystemHandle.h @@ -26,7 +26,7 @@ class Promise; class FileSystemHandle : public nsISupports, public nsWrapperCache { public: NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(FileSystemHandle) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(FileSystemHandle)
// WebIDL Boilerplate nsIGlobalObject* GetParentObject() const; diff --git a/dom/fs/FileSystemSyncAccessHandle.h b/dom/fs/FileSystemSyncAccessHandle.h index a19737dfe4ecb..fcb07925ef58c 100644 --- a/dom/fs/FileSystemSyncAccessHandle.h +++ b/dom/fs/FileSystemSyncAccessHandle.h @@ -27,7 +27,7 @@ class FileSystemSyncAccessHandle final : public nsISupports, public nsWrapperCache { public: NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(FileSystemSyncAccessHandle) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(FileSystemSyncAccessHandle)
// WebIDL Boilerplate nsIGlobalObject* GetParentObject() const; diff --git a/dom/gamepad/Gamepad.h b/dom/gamepad/Gamepad.h index 8e667d0f4cbb1..689ea7f6d2a45 100644 --- a/dom/gamepad/Gamepad.h +++ b/dom/gamepad/Gamepad.h @@ -48,7 +48,7 @@ class Gamepad final : public nsISupports, public nsWrapperCache { uint32_t aNumTouchEvents);
NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(Gamepad) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(Gamepad)
void SetConnected(bool aConnected); void SetButton(uint32_t aButton, bool aPressed, bool aTouched, double aValue); diff --git a/dom/gamepad/GamepadButton.h b/dom/gamepad/GamepadButton.h index 9d2363979b84f..74bde07fcf33a 100644 --- a/dom/gamepad/GamepadButton.h +++ b/dom/gamepad/GamepadButton.h @@ -19,7 +19,7 @@ class GamepadButton : public nsISupports, public nsWrapperCache { : mParent(aParent), mValue(0), mPressed(false), mTouched(false) {}
NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(GamepadButton) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(GamepadButton)
nsISupports* GetParentObject() const { return mParent; }
diff --git a/dom/gamepad/GamepadHapticActuator.h b/dom/gamepad/GamepadHapticActuator.h index fe2b0266e8041..18b659137b881 100644 --- a/dom/gamepad/GamepadHapticActuator.h +++ b/dom/gamepad/GamepadHapticActuator.h @@ -22,7 +22,7 @@ class GamepadHapticActuator : public nsISupports, public nsWrapperCache { uint32_t aIndex);
NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(GamepadHapticActuator) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(GamepadHapticActuator)
nsISupports* GetParentObject() const;
diff --git a/dom/gamepad/GamepadLightIndicator.h b/dom/gamepad/GamepadLightIndicator.h index 7f21164da4f91..80c6f9c13b051 100644 --- a/dom/gamepad/GamepadLightIndicator.h +++ b/dom/gamepad/GamepadLightIndicator.h @@ -19,7 +19,7 @@ class GamepadLightIndicator final : public nsISupports, public nsWrapperCache { uint32_t aIndex);
NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(GamepadLightIndicator) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(GamepadLightIndicator)
static GamepadLightIndicatorType DefaultType() { return GamepadLightIndicatorType::Rgb; diff --git a/dom/geolocation/Geolocation.h b/dom/geolocation/Geolocation.h index 5c0d2f96a22c6..7e1af00d05fba 100644 --- a/dom/geolocation/Geolocation.h +++ b/dom/geolocation/Geolocation.h @@ -116,7 +116,7 @@ namespace mozilla::dom { class Geolocation final : public nsIGeolocationUpdate, public nsWrapperCache { public: NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(Geolocation) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(Geolocation)
NS_DECL_NSIGEOLOCATIONUPDATE
diff --git a/dom/geolocation/GeolocationCoordinates.h b/dom/geolocation/GeolocationCoordinates.h index de90a7f35d21f..28fb30b970681 100644 --- a/dom/geolocation/GeolocationCoordinates.h +++ b/dom/geolocation/GeolocationCoordinates.h @@ -21,7 +21,7 @@ class GeolocationCoordinates final : public nsISupports, public nsWrapperCache {
public: NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(GeolocationCoordinates) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(GeolocationCoordinates)
public: GeolocationCoordinates(GeolocationPosition* aPosition, diff --git a/dom/geolocation/GeolocationPosition.h b/dom/geolocation/GeolocationPosition.h index 67a074578bfd2..5920c8d2bd1cd 100644 --- a/dom/geolocation/GeolocationPosition.h +++ b/dom/geolocation/GeolocationPosition.h @@ -71,7 +71,7 @@ class GeolocationPosition final : public nsISupports, public nsWrapperCache {
public: NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(GeolocationPosition) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(GeolocationPosition)
public: GeolocationPosition(nsISupports* aParent, nsIDOMGeoPosition* aGeoPosition); diff --git a/dom/geolocation/GeolocationPositionError.h b/dom/geolocation/GeolocationPositionError.h index 814fe3079aa27..c379149791ea7 100644 --- a/dom/geolocation/GeolocationPositionError.h +++ b/dom/geolocation/GeolocationPositionError.h @@ -24,7 +24,7 @@ typedef CallbackObjectHolder<PositionErrorCallback, class GeolocationPositionError final : public nsWrapperCache { public: NS_INLINE_DECL_CYCLE_COLLECTING_NATIVE_REFCOUNTING(GeolocationPositionError) - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_NATIVE_CLASS(GeolocationPositionError) + NS_DECL_CYCLE_COLLECTION_NATIVE_WRAPPERCACHE_CLASS(GeolocationPositionError)
GeolocationPositionError(Geolocation* aParent, int16_t aCode);
diff --git a/dom/grid/Grid.h b/dom/grid/Grid.h index 52cbcbed9d61d..57f13e4044367 100644 --- a/dom/grid/Grid.h +++ b/dom/grid/Grid.h @@ -26,7 +26,7 @@ class Grid : public nsISupports, public nsWrapperCache {
public: NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(Grid) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(Grid)
virtual JSObject* WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto) override; diff --git a/dom/grid/GridArea.h b/dom/grid/GridArea.h index 9e209215bd532..64734f7d9185b 100644 --- a/dom/grid/GridArea.h +++ b/dom/grid/GridArea.h @@ -27,7 +27,7 @@ class GridArea : public nsISupports, public nsWrapperCache {
public: NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(GridArea) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(GridArea)
virtual JSObject* WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto) override; diff --git a/dom/grid/GridDimension.h b/dom/grid/GridDimension.h index 8173497de1925..9d3b6174c7375 100644 --- a/dom/grid/GridDimension.h +++ b/dom/grid/GridDimension.h @@ -31,7 +31,7 @@ class GridDimension : public nsISupports, public nsWrapperCache {
public: NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(GridDimension) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(GridDimension)
virtual JSObject* WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto) override; diff --git a/dom/grid/GridLine.h b/dom/grid/GridLine.h index 3a3207f7c9a2b..bcc332558394d 100644 --- a/dom/grid/GridLine.h +++ b/dom/grid/GridLine.h @@ -27,7 +27,7 @@ class GridLine : public nsISupports, public nsWrapperCache {
public: NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(GridLine) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(GridLine)
void GetNames(nsTArray<nsString>& aNames) const; const nsTArray<RefPtr<nsAtom>>& Names() const { return mNames; } diff --git a/dom/grid/GridLines.h b/dom/grid/GridLines.h index 9b5b975e0b34d..f95993dc6dc30 100644 --- a/dom/grid/GridLines.h +++ b/dom/grid/GridLines.h @@ -33,7 +33,7 @@ class GridLines : public nsISupports, public nsWrapperCache {
public: NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(GridLines) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(GridLines)
virtual JSObject* WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto) override; diff --git a/dom/grid/GridTrack.h b/dom/grid/GridTrack.h index 18b365f0e6bbd..fa78c2d5d0182 100644 --- a/dom/grid/GridTrack.h +++ b/dom/grid/GridTrack.h @@ -23,7 +23,7 @@ class GridTrack : public nsISupports, public nsWrapperCache {
public: NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(GridTrack) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(GridTrack)
virtual JSObject* WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto) override; diff --git a/dom/grid/GridTracks.h b/dom/grid/GridTracks.h index ce11dca4d0553..d20da5e12bcc0 100644 --- a/dom/grid/GridTracks.h +++ b/dom/grid/GridTracks.h @@ -28,7 +28,7 @@ class GridTracks : public nsISupports, public nsWrapperCache {
public: NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(GridTracks) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(GridTracks)
virtual JSObject* WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto) override; diff --git a/dom/html/ElementInternals.cpp b/dom/html/ElementInternals.cpp index 6aa6e72009eef..7e2c635b6d004 100644 --- a/dom/html/ElementInternals.cpp +++ b/dom/html/ElementInternals.cpp @@ -19,7 +19,7 @@
namespace mozilla::dom {
-NS_IMPL_CYCLE_COLLECTION_CLASS(ElementInternals) +NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(ElementInternals)
NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(ElementInternals) tmp->Unlink(); @@ -33,8 +33,6 @@ NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(ElementInternals) mValidity, mValidationAnchor); NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
-NS_IMPL_CYCLE_COLLECTION_TRACE_WRAPPERCACHE(ElementInternals) - NS_IMPL_CYCLE_COLLECTING_ADDREF(ElementInternals) NS_IMPL_CYCLE_COLLECTING_RELEASE(ElementInternals) NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(ElementInternals) diff --git a/dom/html/ElementInternals.h b/dom/html/ElementInternals.h index ac238c71d5297..ea60ea82b0aea 100644 --- a/dom/html/ElementInternals.h +++ b/dom/html/ElementInternals.h @@ -34,8 +34,8 @@ class ElementInternals final : public nsIFormControl, public nsWrapperCache { public: NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS_AMBIGUOUS(ElementInternals, - nsIFormControl) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS_AMBIGUOUS(ElementInternals, + nsIFormControl)
explicit ElementInternals(HTMLElement* aTarget);
diff --git a/dom/html/HTMLAllCollection.h b/dom/html/HTMLAllCollection.h index 1a0bfb1839177..6179951175e62 100644 --- a/dom/html/HTMLAllCollection.h +++ b/dom/html/HTMLAllCollection.h @@ -35,7 +35,7 @@ class HTMLAllCollection final : public nsISupports, public nsWrapperCache { explicit HTMLAllCollection(mozilla::dom::Document* aDocument);
NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(HTMLAllCollection) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(HTMLAllCollection)
virtual JSObject* WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto) override; diff --git a/dom/html/HTMLCanvasElement.h b/dom/html/HTMLCanvasElement.h index 3b1c399f40459..bcce0da188468 100644 --- a/dom/html/HTMLCanvasElement.h +++ b/dom/html/HTMLCanvasElement.h @@ -412,7 +412,7 @@ class HTMLCanvasPrintState final : public nsWrapperCache { bool mIsDone;
NS_INLINE_DECL_CYCLE_COLLECTING_NATIVE_REFCOUNTING(HTMLCanvasPrintState) - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_NATIVE_CLASS(HTMLCanvasPrintState) + NS_DECL_CYCLE_COLLECTION_NATIVE_WRAPPERCACHE_CLASS(HTMLCanvasPrintState)
virtual JSObject* WrapObject(JSContext* cx, JS::Handle<JSObject*> aGivenProto) override; diff --git a/dom/html/HTMLOptionsCollection.h b/dom/html/HTMLOptionsCollection.h index 97fd7ccd0732b..e4300c876d532 100644 --- a/dom/html/HTMLOptionsCollection.h +++ b/dom/html/HTMLOptionsCollection.h @@ -63,8 +63,8 @@ class HTMLOptionsCollection final : public nsIHTMLCollection, virtual nsINode* GetParentObject() override; DocGroup* GetDocGroup() const;
- NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS_AMBIGUOUS(HTMLOptionsCollection, - nsIHTMLCollection) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS_AMBIGUOUS(HTMLOptionsCollection, + nsIHTMLCollection)
// Helpers for HTMLSelectElement /** diff --git a/dom/html/HTMLTableElement.cpp b/dom/html/HTMLTableElement.cpp index d680fe2b4e9b1..24a4097445c2c 100644 --- a/dom/html/HTMLTableElement.cpp +++ b/dom/html/HTMLTableElement.cpp @@ -48,8 +48,8 @@ class TableRowsCollection final : public nsIHTMLCollection,
NS_IMETHOD ParentDestroyed();
- NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS_AMBIGUOUS(TableRowsCollection, - nsIHTMLCollection) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS_AMBIGUOUS(TableRowsCollection, + nsIHTMLCollection)
// nsWrapperCache using nsWrapperCache::GetWrapperPreserveColor; diff --git a/dom/html/MediaError.h b/dom/html/MediaError.h index faf4f856875cd..aac1df118dc4a 100644 --- a/dom/html/MediaError.h +++ b/dom/html/MediaError.h @@ -23,7 +23,7 @@ class MediaError final : public nsISupports, public nsWrapperCache {
// nsISupports NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(MediaError) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(MediaError)
HTMLMediaElement* GetParentObject() const { return mParent; }
diff --git a/dom/html/TimeRanges.h b/dom/html/TimeRanges.h index 302d3070e7adb..2aac5308170ab 100644 --- a/dom/html/TimeRanges.h +++ b/dom/html/TimeRanges.h @@ -27,7 +27,7 @@ namespace dom { class TimeRanges final : public nsISupports, public nsWrapperCache { public: NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(TimeRanges) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(TimeRanges)
TimeRanges(); explicit TimeRanges(nsISupports* aParent); diff --git a/dom/html/ValidityState.h b/dom/html/ValidityState.h index 0ef9d2332d8ab..b9cf7cf4644cd 100644 --- a/dom/html/ValidityState.h +++ b/dom/html/ValidityState.h @@ -19,7 +19,7 @@ class ValidityState final : public nsISupports, public nsWrapperCache {
public: NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(ValidityState) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(ValidityState)
friend class ::nsIConstraintValidation;
diff --git a/dom/html/nsDOMStringMap.cpp b/dom/html/nsDOMStringMap.cpp index f9670ecb32d54..0f2171ed79fbe 100644 --- a/dom/html/nsDOMStringMap.cpp +++ b/dom/html/nsDOMStringMap.cpp @@ -16,7 +16,7 @@ using namespace mozilla; using namespace mozilla::dom;
-NS_IMPL_CYCLE_COLLECTION_CLASS(nsDOMStringMap) +NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(nsDOMStringMap)
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(nsDOMStringMap) NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mElement) @@ -34,8 +34,6 @@ NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(nsDOMStringMap) tmp->mExpandoAndGeneration.OwnerUnlinked(); NS_IMPL_CYCLE_COLLECTION_UNLINK_END
-NS_IMPL_CYCLE_COLLECTION_TRACE_WRAPPERCACHE(nsDOMStringMap) - NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(nsDOMStringMap) NS_WRAPPERCACHE_INTERFACE_MAP_ENTRY NS_INTERFACE_MAP_ENTRY(nsIMutationObserver) diff --git a/dom/html/nsDOMStringMap.h b/dom/html/nsDOMStringMap.h index 284627dfa80be..a5b3a2083264d 100644 --- a/dom/html/nsDOMStringMap.h +++ b/dom/html/nsDOMStringMap.h @@ -29,7 +29,7 @@ class DocGroup; class nsDOMStringMap : public nsStubMutationObserver, public nsWrapperCache { public: NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(nsDOMStringMap) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(nsDOMStringMap)
NS_DECL_NSIMUTATIONOBSERVER_ATTRIBUTECHANGED
diff --git a/dom/indexedDB/IDBCursor.cpp b/dom/indexedDB/IDBCursor.cpp index e1c97d8449dcb..3934bc93d8d72 100644 --- a/dom/indexedDB/IDBCursor.cpp +++ b/dom/indexedDB/IDBCursor.cpp @@ -827,8 +827,8 @@ NS_IMPL_CYCLE_COLLECTION_UNLINK_END NS_IMPL_ADDREF_INHERITED(_subclassName, IDBCursor) \ NS_IMPL_RELEASE_INHERITED(_subclassName, IDBCursor)
-#define NS_IMPL_CYCLE_COLLECTION_IDBCURSOR_SUBCLASS(_subclassName) \ - NS_IMPL_CYCLE_COLLECTION_MULTI_ZONE_JSHOLDER_CLASS(_subclassName) \ +#define NS_IMPL_CYCLE_COLLECTION_IDBCURSOR_SUBCLASS(_subclassName) \ + NS_IMPL_CYCLE_COLLECTION_CLASS(_subclassName) \ NS_IMPL_CYCLE_COLLECTION_IDBCURSOR_SUBCLASS_METHODS(_subclassName)
NS_IMPL_CYCLE_COLLECTION_IDBCURSOR_SUBCLASS(IDBObjectStoreCursor) diff --git a/dom/indexedDB/IDBIndex.cpp b/dom/indexedDB/IDBIndex.cpp index 95b27973494d9..2f77a1518c3bf 100644 --- a/dom/indexedDB/IDBIndex.cpp +++ b/dom/indexedDB/IDBIndex.cpp @@ -605,7 +605,7 @@ NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(IDBIndex) NS_INTERFACE_MAP_ENTRY(nsISupports) NS_INTERFACE_MAP_END
-NS_IMPL_CYCLE_COLLECTION_MULTI_ZONE_JSHOLDER_CLASS(IDBIndex) +NS_IMPL_CYCLE_COLLECTION_CLASS(IDBIndex)
NS_IMPL_CYCLE_COLLECTION_TRACE_BEGIN(IDBIndex) NS_IMPL_CYCLE_COLLECTION_TRACE_PRESERVED_WRAPPER diff --git a/dom/indexedDB/IDBKeyRange.cpp b/dom/indexedDB/IDBKeyRange.cpp index af31cf64905f0..9719dd468513f 100644 --- a/dom/indexedDB/IDBKeyRange.cpp +++ b/dom/indexedDB/IDBKeyRange.cpp @@ -115,7 +115,7 @@ void IDBKeyRange::ToSerialized(SerializedKeyRange& aKeyRange) const { } }
-NS_IMPL_CYCLE_COLLECTION_MULTI_ZONE_JSHOLDER_CLASS(IDBKeyRange) +NS_IMPL_CYCLE_COLLECTION_CLASS(IDBKeyRange)
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(IDBKeyRange) NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mGlobal) diff --git a/dom/indexedDB/IDBObjectStore.cpp b/dom/indexedDB/IDBObjectStore.cpp index 3e685a379c960..021a66a086f36 100644 --- a/dom/indexedDB/IDBObjectStore.cpp +++ b/dom/indexedDB/IDBObjectStore.cpp @@ -1174,7 +1174,7 @@ RefPtr<IDBIndex> IDBObjectStore::Index(const nsAString& aName, return index; }
-NS_IMPL_CYCLE_COLLECTION_MULTI_ZONE_JSHOLDER_CLASS(IDBObjectStore) +NS_IMPL_CYCLE_COLLECTION_CLASS(IDBObjectStore)
NS_IMPL_CYCLE_COLLECTION_TRACE_BEGIN(IDBObjectStore) NS_IMPL_CYCLE_COLLECTION_TRACE_PRESERVED_WRAPPER diff --git a/dom/indexedDB/IDBRequest.cpp b/dom/indexedDB/IDBRequest.cpp index cab5d4766963f..9862f7818e8e9 100644 --- a/dom/indexedDB/IDBRequest.cpp +++ b/dom/indexedDB/IDBRequest.cpp @@ -268,7 +268,7 @@ DOMException* IDBRequest::GetError(ErrorResult& aRv) { return mError; }
-NS_IMPL_CYCLE_COLLECTION_MULTI_ZONE_JSHOLDER_CLASS(IDBRequest) +NS_IMPL_CYCLE_COLLECTION_CLASS(IDBRequest)
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN_INHERITED(IDBRequest, DOMEventTargetHelper) diff --git a/dom/ipc/WindowGlobalChild.h b/dom/ipc/WindowGlobalChild.h index 951769edc1321..89e456d84d2c6 100644 --- a/dom/ipc/WindowGlobalChild.h +++ b/dom/ipc/WindowGlobalChild.h @@ -40,7 +40,7 @@ class WindowGlobalChild final : public WindowGlobalActor,
public: NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(WindowGlobalChild) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(WindowGlobalChild)
static already_AddRefed<WindowGlobalChild> GetByInnerWindowId( uint64_t aInnerWindowId); diff --git a/dom/ipc/jsactor/JSActor.cpp b/dom/ipc/jsactor/JSActor.cpp index 6a3ddeea47d1c..c409d6a1bb2f7 100644 --- a/dom/ipc/jsactor/JSActor.cpp +++ b/dom/ipc/jsactor/JSActor.cpp @@ -36,7 +36,7 @@ NS_INTERFACE_MAP_END NS_IMPL_CYCLE_COLLECTING_ADDREF(JSActor) NS_IMPL_CYCLE_COLLECTING_RELEASE(JSActor)
-NS_IMPL_CYCLE_COLLECTION_CLASS(JSActor) +NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(JSActor)
NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(JSActor) NS_IMPL_CYCLE_COLLECTION_UNLINK(mGlobal) @@ -53,8 +53,6 @@ NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(JSActor) } NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
-NS_IMPL_CYCLE_COLLECTION_TRACE_WRAPPERCACHE(JSActor) - JSActor::JSActor(nsISupports* aGlobal) { mGlobal = do_QueryInterface(aGlobal); if (!mGlobal) { diff --git a/dom/ipc/jsactor/JSActor.h b/dom/ipc/jsactor/JSActor.h index d7b0e1563bce3..b4bd1e421daa4 100644 --- a/dom/ipc/jsactor/JSActor.h +++ b/dom/ipc/jsactor/JSActor.h @@ -43,7 +43,7 @@ enum class JSActorMessageKind { class JSActor : public nsISupports, public nsWrapperCache { public: NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(JSActor) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(JSActor)
explicit JSActor(nsISupports* aGlobal = nullptr);
diff --git a/dom/ipc/jsactor/JSProcessActorChild.cpp b/dom/ipc/jsactor/JSProcessActorChild.cpp index be0d49743c019..6e5337a0d2235 100644 --- a/dom/ipc/jsactor/JSProcessActorChild.cpp +++ b/dom/ipc/jsactor/JSProcessActorChild.cpp @@ -14,9 +14,6 @@ namespace mozilla::dom {
NS_IMPL_CYCLE_COLLECTION_INHERITED(JSProcessActorChild, JSActor, mManager)
-NS_IMPL_CYCLE_COLLECTION_TRACE_BEGIN_INHERITED(JSProcessActorChild, JSActor) -NS_IMPL_CYCLE_COLLECTION_TRACE_END - NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(JSProcessActorChild) NS_INTERFACE_MAP_END_INHERITING(JSActor)
diff --git a/dom/ipc/jsactor/JSProcessActorChild.h b/dom/ipc/jsactor/JSProcessActorChild.h index f9ae841c7e881..a8be65211cd02 100644 --- a/dom/ipc/jsactor/JSProcessActorChild.h +++ b/dom/ipc/jsactor/JSProcessActorChild.h @@ -16,8 +16,7 @@ namespace mozilla::dom { class JSProcessActorChild final : public JSActor { public: NS_DECL_ISUPPORTS_INHERITED - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS_INHERITED(JSProcessActorChild, - JSActor) + NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(JSProcessActorChild, JSActor)
explicit JSProcessActorChild(nsISupports* aGlobal = nullptr) : JSActor(aGlobal) {} diff --git a/dom/ipc/jsactor/JSProcessActorParent.cpp b/dom/ipc/jsactor/JSProcessActorParent.cpp index 4b7cc1710525a..a9ed9b773f9da 100644 --- a/dom/ipc/jsactor/JSProcessActorParent.cpp +++ b/dom/ipc/jsactor/JSProcessActorParent.cpp @@ -13,9 +13,6 @@ namespace mozilla::dom {
NS_IMPL_CYCLE_COLLECTION_INHERITED(JSProcessActorParent, JSActor, mManager)
-NS_IMPL_CYCLE_COLLECTION_TRACE_BEGIN_INHERITED(JSProcessActorParent, JSActor) -NS_IMPL_CYCLE_COLLECTION_TRACE_END - NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(JSProcessActorParent) NS_INTERFACE_MAP_END_INHERITING(JSActor)
diff --git a/dom/ipc/jsactor/JSProcessActorParent.h b/dom/ipc/jsactor/JSProcessActorParent.h index 239efbeb594db..7b2a1535f90f3 100644 --- a/dom/ipc/jsactor/JSProcessActorParent.h +++ b/dom/ipc/jsactor/JSProcessActorParent.h @@ -24,8 +24,7 @@ namespace dom { class JSProcessActorParent final : public JSActor { public: NS_DECL_ISUPPORTS_INHERITED - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS_INHERITED(JSProcessActorParent, - JSActor) + NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(JSProcessActorParent, JSActor)
explicit JSProcessActorParent(nsISupports* aGlobal = nullptr) : JSActor(aGlobal) {} diff --git a/dom/ipc/jsactor/JSWindowActorChild.cpp b/dom/ipc/jsactor/JSWindowActorChild.cpp index 350b547dce292..e1e453cdaf607 100644 --- a/dom/ipc/jsactor/JSWindowActorChild.cpp +++ b/dom/ipc/jsactor/JSWindowActorChild.cpp @@ -147,9 +147,6 @@ void JSWindowActorChild::ClearManager() { mManager = nullptr; }
NS_IMPL_CYCLE_COLLECTION_INHERITED(JSWindowActorChild, JSActor, mManager)
-NS_IMPL_CYCLE_COLLECTION_TRACE_BEGIN_INHERITED(JSWindowActorChild, JSActor) -NS_IMPL_CYCLE_COLLECTION_TRACE_END - NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(JSWindowActorChild) NS_INTERFACE_MAP_END_INHERITING(JSActor)
diff --git a/dom/ipc/jsactor/JSWindowActorChild.h b/dom/ipc/jsactor/JSWindowActorChild.h index a793c102733dc..8e43d6a6c760b 100644 --- a/dom/ipc/jsactor/JSWindowActorChild.h +++ b/dom/ipc/jsactor/JSWindowActorChild.h @@ -41,8 +41,7 @@ namespace mozilla::dom { class JSWindowActorChild final : public JSActor { public: NS_DECL_ISUPPORTS_INHERITED - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS_INHERITED(JSWindowActorChild, - JSActor) + NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(JSWindowActorChild, JSActor)
explicit JSWindowActorChild(nsISupports* aGlobal = nullptr) : JSActor(aGlobal) {} diff --git a/dom/ipc/jsactor/JSWindowActorParent.cpp b/dom/ipc/jsactor/JSWindowActorParent.cpp index ecf68f84cf39e..4e67602c5d35b 100644 --- a/dom/ipc/jsactor/JSWindowActorParent.cpp +++ b/dom/ipc/jsactor/JSWindowActorParent.cpp @@ -113,9 +113,6 @@ void JSWindowActorParent::ClearManager() { mManager = nullptr; }
NS_IMPL_CYCLE_COLLECTION_INHERITED(JSWindowActorParent, JSActor, mManager)
-NS_IMPL_CYCLE_COLLECTION_TRACE_BEGIN_INHERITED(JSWindowActorParent, JSActor) -NS_IMPL_CYCLE_COLLECTION_TRACE_END - NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(JSWindowActorParent) NS_INTERFACE_MAP_END_INHERITING(JSActor)
diff --git a/dom/ipc/jsactor/JSWindowActorParent.h b/dom/ipc/jsactor/JSWindowActorParent.h index 113d07c4bceb8..05fb88f8ac1b2 100644 --- a/dom/ipc/jsactor/JSWindowActorParent.h +++ b/dom/ipc/jsactor/JSWindowActorParent.h @@ -30,8 +30,7 @@ namespace mozilla::dom { class JSWindowActorParent final : public JSActor { public: NS_DECL_ISUPPORTS_INHERITED - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS_INHERITED(JSWindowActorParent, - JSActor) + NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(JSWindowActorParent, JSActor)
explicit JSWindowActorParent(nsISupports* aGlobal = nullptr) : JSActor(aGlobal) {} diff --git a/dom/locks/Lock.h b/dom/locks/Lock.h index 87ceaf550fca1..ced0fc3785962 100644 --- a/dom/locks/Lock.h +++ b/dom/locks/Lock.h @@ -29,7 +29,7 @@ class Lock final : public PromiseNativeHandler, public nsWrapperCache {
public: NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(Lock) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(Lock)
Lock(nsIGlobalObject* aGlobal, const WeakPtrlocks::LockRequestChild& aLockRequestChild, diff --git a/dom/locks/LockManager.h b/dom/locks/LockManager.h index a750150ad6f08..7ceeadd35a020 100644 --- a/dom/locks/LockManager.h +++ b/dom/locks/LockManager.h @@ -34,7 +34,7 @@ class LockManagerChild; class LockManager final : public nsISupports, public nsWrapperCache { public: NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(LockManager) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(LockManager)
explicit LockManager(nsIGlobalObject* aGlobal);
diff --git a/dom/media/GetUserMediaRequest.h b/dom/media/GetUserMediaRequest.h index abe97199a6e31..a2b69bf1d646a 100644 --- a/dom/media/GetUserMediaRequest.h +++ b/dom/media/GetUserMediaRequest.h @@ -54,7 +54,7 @@ class GetUserMediaRequest : public nsISupports, public nsWrapperCache { const nsAString& aMediaSource, bool aIsHandlingUserInput);
NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(GetUserMediaRequest) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(GetUserMediaRequest)
JSObject* WrapObject(JSContext* cx, JS::Handle<JSObject*> aGivenProto) override; diff --git a/dom/media/MediaDeviceInfo.h b/dom/media/MediaDeviceInfo.h index bfbb205c46283..e68ffba9dce07 100644 --- a/dom/media/MediaDeviceInfo.h +++ b/dom/media/MediaDeviceInfo.h @@ -29,7 +29,7 @@ class MediaDeviceInfo final : public nsISupports, public nsWrapperCache { const nsAString& aLabel, const nsAString& aGroupId);
NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(MediaDeviceInfo) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(MediaDeviceInfo) NS_DECLARE_STATIC_IID_ACCESSOR(MOZILLA_DOM_MEDIADEVICEINFO_IMPLEMENTATION_IID)
JSObject* WrapObject(JSContext* cx, diff --git a/dom/media/MediaStreamError.h b/dom/media/MediaStreamError.h index 5ac0bf7f4b5eb..3e84cf67909a7 100644 --- a/dom/media/MediaStreamError.h +++ b/dom/media/MediaStreamError.h @@ -87,7 +87,7 @@ class MediaStreamError final : public nsISupports, mParent(aParent) {}
NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(MediaStreamError) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(MediaStreamError) NS_DECLARE_STATIC_IID_ACCESSOR( MOZILLA_DOM_MEDIASTREAMERROR_IMPLEMENTATION_IID)
diff --git a/dom/media/VideoPlaybackQuality.h b/dom/media/VideoPlaybackQuality.h index 977b9e5ba5f39..76ca38de7b305 100644 --- a/dom/media/VideoPlaybackQuality.h +++ b/dom/media/VideoPlaybackQuality.h @@ -17,7 +17,7 @@ namespace mozilla::dom { class VideoPlaybackQuality final : public nsWrapperCache { public: NS_INLINE_DECL_CYCLE_COLLECTING_NATIVE_REFCOUNTING(VideoPlaybackQuality) - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_NATIVE_CLASS(VideoPlaybackQuality) + NS_DECL_CYCLE_COLLECTION_NATIVE_WRAPPERCACHE_CLASS(VideoPlaybackQuality)
VideoPlaybackQuality(HTMLMediaElement* aElement, DOMHighResTimeStamp aCreationTime, uint32_t aTotalFrames, diff --git a/dom/media/eme/MediaKeyStatusMap.h b/dom/media/eme/MediaKeyStatusMap.h index 653e95093acfb..bd03f7812fb84 100644 --- a/dom/media/eme/MediaKeyStatusMap.h +++ b/dom/media/eme/MediaKeyStatusMap.h @@ -30,7 +30,7 @@ class ArrayBufferViewOrArrayBuffer; class MediaKeyStatusMap final : public nsISupports, public nsWrapperCache { public: NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(MediaKeyStatusMap) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(MediaKeyStatusMap)
public: explicit MediaKeyStatusMap(nsPIDOMWindowInner* aParent); diff --git a/dom/media/eme/MediaKeySystemAccess.h b/dom/media/eme/MediaKeySystemAccess.h index 50b36b081ef85..40ce2aab2d2a4 100644 --- a/dom/media/eme/MediaKeySystemAccess.h +++ b/dom/media/eme/MediaKeySystemAccess.h @@ -27,7 +27,7 @@ namespace dom { class MediaKeySystemAccess final : public nsISupports, public nsWrapperCache { public: NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(MediaKeySystemAccess) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(MediaKeySystemAccess)
public: explicit MediaKeySystemAccess(nsPIDOMWindowInner* aParent, diff --git a/dom/media/eme/MediaKeys.cpp b/dom/media/eme/MediaKeys.cpp index 176995c8c03d8..6e0faaab8736a 100644 --- a/dom/media/eme/MediaKeys.cpp +++ b/dom/media/eme/MediaKeys.cpp @@ -42,7 +42,7 @@ namespace mozilla::dom { // We don't use NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE because we need to // disconnect our MediaKeys instances from the inner window (mparent) before // we unlink it. -NS_IMPL_CYCLE_COLLECTION_CLASS(MediaKeys) +NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(MediaKeys) NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(MediaKeys) NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mElement) NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mParent) @@ -50,7 +50,6 @@ NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(MediaKeys) NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mPromises) NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mPendingSessions) NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END -NS_IMPL_CYCLE_COLLECTION_TRACE_WRAPPERCACHE(MediaKeys)
NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(MediaKeys) NS_IMPL_CYCLE_COLLECTION_UNLINK(mElement) diff --git a/dom/media/eme/MediaKeys.h b/dom/media/eme/MediaKeys.h index 7d88e6458099c..5a44b3c227369 100644 --- a/dom/media/eme/MediaKeys.h +++ b/dom/media/eme/MediaKeys.h @@ -56,7 +56,7 @@ class MediaKeys final : public nsIObserver,
public: NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(MediaKeys) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(MediaKeys)
NS_DECL_NSIOBSERVER
diff --git a/dom/media/mediacapabilities/MediaCapabilities.h b/dom/media/mediacapabilities/MediaCapabilities.h index dd7b4127703cd..b31e12e8ab5dc 100644 --- a/dom/media/mediacapabilities/MediaCapabilities.h +++ b/dom/media/mediacapabilities/MediaCapabilities.h @@ -45,7 +45,7 @@ class MediaCapabilities final : public nsISupports, public nsWrapperCache { public: // Ref counting and cycle collection NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(MediaCapabilities) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(MediaCapabilities)
// WebIDL Methods already_AddRefed<Promise> DecodingInfo( diff --git a/dom/media/mediasession/MediaMetadata.h b/dom/media/mediasession/MediaMetadata.h index 63fae8f776411..6c552e646577d 100644 --- a/dom/media/mediasession/MediaMetadata.h +++ b/dom/media/mediasession/MediaMetadata.h @@ -42,7 +42,7 @@ class MediaMetadata final : public nsISupports, public: // Ref counting and cycle collection NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(MediaMetadata) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(MediaMetadata)
// WebIDL methods nsIGlobalObject* GetParentObject() const; diff --git a/dom/media/mediasession/MediaSession.cpp b/dom/media/mediasession/MediaSession.cpp index 718695fa0322e..e55fa28d96e15 100644 --- a/dom/media/mediasession/MediaSession.cpp +++ b/dom/media/mediasession/MediaSession.cpp @@ -22,14 +22,13 @@ namespace mozilla::dom {
// We don't use NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE because we need to // unregister MediaSession from document's activity listeners. -NS_IMPL_CYCLE_COLLECTION_CLASS(MediaSession) +NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(MediaSession) NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(MediaSession) NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mParent) NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mMediaMetadata) NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mActionHandlers) NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mDoc) NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END -NS_IMPL_CYCLE_COLLECTION_TRACE_WRAPPERCACHE(MediaSession)
NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(MediaSession) tmp->Shutdown(); diff --git a/dom/media/mediasession/MediaSession.h b/dom/media/mediasession/MediaSession.h index 4408f262a3b52..db6864c842c6a 100644 --- a/dom/media/mediasession/MediaSession.h +++ b/dom/media/mediasession/MediaSession.h @@ -42,7 +42,7 @@ class MediaSession final : public nsIDocumentActivity, public nsWrapperCache { public: // Ref counting and cycle collection NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(MediaSession) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(MediaSession) NS_DECL_NSIDOCUMENTACTIVITY
explicit MediaSession(nsPIDOMWindowInner* aParent); diff --git a/dom/media/webaudio/AudioListener.h b/dom/media/webaudio/AudioListener.h index 640191d50b0b3..7d7fad3bfb54b 100644 --- a/dom/media/webaudio/AudioListener.h +++ b/dom/media/webaudio/AudioListener.h @@ -50,7 +50,7 @@ class AudioListener final : public nsWrapperCache { explicit AudioListener(AudioContext* aContext);
NS_INLINE_DECL_CYCLE_COLLECTING_NATIVE_REFCOUNTING(AudioListener) - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_NATIVE_CLASS(AudioListener) + NS_DECL_CYCLE_COLLECTION_NATIVE_WRAPPERCACHE_CLASS(AudioListener)
size_t SizeOfIncludingThis(mozilla::MallocSizeOf aMallocSizeOf) const;
diff --git a/dom/media/webaudio/AudioParam.cpp b/dom/media/webaudio/AudioParam.cpp index fd07f844fd3e2..2bd169e263152 100644 --- a/dom/media/webaudio/AudioParam.cpp +++ b/dom/media/webaudio/AudioParam.cpp @@ -12,7 +12,7 @@
namespace mozilla::dom {
-NS_IMPL_CYCLE_COLLECTION_CLASS(AudioParam) +NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(AudioParam)
NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(AudioParam) tmp->DisconnectFromGraphAndDestroyTrack(); @@ -23,8 +23,6 @@ NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(AudioParam) NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mNode) NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
-NS_IMPL_CYCLE_COLLECTION_TRACE_WRAPPERCACHE(AudioParam) - NS_IMPL_CYCLE_COLLECTING_NATIVE_ADDREF(AudioParam) NS_IMPL_CYCLE_COLLECTING_NATIVE_RELEASE(AudioParam)
diff --git a/dom/media/webaudio/AudioParam.h b/dom/media/webaudio/AudioParam.h index 2a1a3eae26f20..397b078248c76 100644 --- a/dom/media/webaudio/AudioParam.h +++ b/dom/media/webaudio/AudioParam.h @@ -28,7 +28,7 @@ class AudioParam final : public nsWrapperCache, public AudioParamTimeline {
NS_IMETHOD_(MozExternalRefCountType) AddRef(void); NS_IMETHOD_(MozExternalRefCountType) Release(void); - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_NATIVE_CLASS(AudioParam) + NS_DECL_CYCLE_COLLECTION_NATIVE_WRAPPERCACHE_CLASS(AudioParam)
AudioContext* GetParentObject() const { return mNode->Context(); }
diff --git a/dom/media/webaudio/AudioParamMap.h b/dom/media/webaudio/AudioParamMap.h index f960219593732..c7bb0bdbea6d7 100644 --- a/dom/media/webaudio/AudioParamMap.h +++ b/dom/media/webaudio/AudioParamMap.h @@ -15,7 +15,7 @@ namespace mozilla::dom { class AudioParamMap final : public nsWrapperCache { public: NS_INLINE_DECL_CYCLE_COLLECTING_NATIVE_REFCOUNTING(AudioParamMap) - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_NATIVE_CLASS(AudioParamMap) + NS_DECL_CYCLE_COLLECTION_NATIVE_WRAPPERCACHE_CLASS(AudioParamMap)
explicit AudioParamMap(AudioWorkletNode* aParent);
diff --git a/dom/media/webaudio/AudioWorkletProcessor.h b/dom/media/webaudio/AudioWorkletProcessor.h index 13f913fd5f1c9..3d37d61498035 100644 --- a/dom/media/webaudio/AudioWorkletProcessor.h +++ b/dom/media/webaudio/AudioWorkletProcessor.h @@ -25,7 +25,7 @@ class MessagePort; class AudioWorkletProcessor final : public nsWrapperCache { public: NS_INLINE_DECL_CYCLE_COLLECTING_NATIVE_REFCOUNTING(AudioWorkletProcessor) - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_NATIVE_CLASS(AudioWorkletProcessor) + NS_DECL_CYCLE_COLLECTION_NATIVE_WRAPPERCACHE_CLASS(AudioWorkletProcessor)
static already_AddRefed<AudioWorkletProcessor> Constructor( const GlobalObject& aGlobal, ErrorResult& aRv); diff --git a/dom/media/webaudio/PeriodicWave.h b/dom/media/webaudio/PeriodicWave.h index d4c281df335da..18408789a93f7 100644 --- a/dom/media/webaudio/PeriodicWave.h +++ b/dom/media/webaudio/PeriodicWave.h @@ -26,7 +26,7 @@ class PeriodicWave final : public nsWrapperCache { ErrorResult& aRv);
NS_INLINE_DECL_CYCLE_COLLECTING_NATIVE_REFCOUNTING(PeriodicWave) - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_NATIVE_CLASS(PeriodicWave) + NS_DECL_CYCLE_COLLECTION_NATIVE_WRAPPERCACHE_CLASS(PeriodicWave)
static already_AddRefed<PeriodicWave> Constructor( const GlobalObject& aGlobal, AudioContext& aAudioContext, diff --git a/dom/media/webrtc/RTCCertificate.h b/dom/media/webrtc/RTCCertificate.h index e28d3a48b5983..a5cc6bde32121 100644 --- a/dom/media/webrtc/RTCCertificate.h +++ b/dom/media/webrtc/RTCCertificate.h @@ -44,7 +44,7 @@ class Promise; class RTCCertificate final : public nsISupports, public nsWrapperCache { public: NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(RTCCertificate) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(RTCCertificate)
// WebIDL method that implements RTCPeerConnection.generateCertificate. static already_AddRefed<Promise> GenerateCertificate( diff --git a/dom/media/webrtc/RTCIdentityProviderRegistrar.h b/dom/media/webrtc/RTCIdentityProviderRegistrar.h index 0cab9087ec512..0510471f170f3 100644 --- a/dom/media/webrtc/RTCIdentityProviderRegistrar.h +++ b/dom/media/webrtc/RTCIdentityProviderRegistrar.h @@ -24,7 +24,7 @@ class RTCIdentityProviderRegistrar final : public nsISupports, public nsWrapperCache { public: NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(RTCIdentityProviderRegistrar) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(RTCIdentityProviderRegistrar)
explicit RTCIdentityProviderRegistrar(nsIGlobalObject* aGlobal);
diff --git a/dom/media/webrtc/jsapi/PeerConnectionImpl.cpp b/dom/media/webrtc/jsapi/PeerConnectionImpl.cpp index 2789066f57900..ea455416dffa0 100644 --- a/dom/media/webrtc/jsapi/PeerConnectionImpl.cpp +++ b/dom/media/webrtc/jsapi/PeerConnectionImpl.cpp @@ -244,7 +244,7 @@ void PeerConnectionAutoTimer::UnregisterConnection(bool aContainedAV) {
bool PeerConnectionAutoTimer::IsStopped() { return mRefCnt == 0; }
-NS_IMPL_CYCLE_COLLECTION_CLASS(PeerConnectionImpl) +NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(PeerConnectionImpl) NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(PeerConnectionImpl) tmp->Close(); NS_IMPL_CYCLE_COLLECTION_UNLINK(mPCObserver, mWindow, mCertificate, @@ -257,7 +257,6 @@ NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(PeerConnectionImpl) mSTSThread, mReceiveStreams, mOperations, mTransceivers, mKungFuDeathGrip) NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END -NS_IMPL_CYCLE_COLLECTION_TRACE_WRAPPERCACHE(PeerConnectionImpl)
NS_IMPL_CYCLE_COLLECTING_ADDREF(PeerConnectionImpl) NS_IMPL_CYCLE_COLLECTING_RELEASE(PeerConnectionImpl) diff --git a/dom/media/webrtc/jsapi/PeerConnectionImpl.h b/dom/media/webrtc/jsapi/PeerConnectionImpl.h index 95c668c87830b..3b7010e105b1a 100644 --- a/dom/media/webrtc/jsapi/PeerConnectionImpl.h +++ b/dom/media/webrtc/jsapi/PeerConnectionImpl.h @@ -174,7 +174,7 @@ class PeerConnectionImpl final const mozilla::dom::GlobalObject* aGlobal = nullptr);
NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(PeerConnectionImpl) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(PeerConnectionImpl)
JSObject* WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto) override; diff --git a/dom/media/webrtc/jsapi/RTCRtpReceiver.h b/dom/media/webrtc/jsapi/RTCRtpReceiver.h index 1660b58698de3..a71a23b2062af 100644 --- a/dom/media/webrtc/jsapi/RTCRtpReceiver.h +++ b/dom/media/webrtc/jsapi/RTCRtpReceiver.h @@ -47,7 +47,7 @@ class RTCRtpReceiver : public nsISupports, public nsWrapperCache {
// nsISupports NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(RTCRtpReceiver) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(RTCRtpReceiver)
JSObject* WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto) override; diff --git a/dom/media/webrtc/jsapi/RTCRtpSender.h b/dom/media/webrtc/jsapi/RTCRtpSender.h index ae2969525be54..61f99694bd37a 100644 --- a/dom/media/webrtc/jsapi/RTCRtpSender.h +++ b/dom/media/webrtc/jsapi/RTCRtpSender.h @@ -45,7 +45,7 @@ class RTCRtpSender : public nsISupports, public nsWrapperCache {
// nsISupports NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(RTCRtpSender) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(RTCRtpSender)
JSObject* WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto) override; diff --git a/dom/media/webrtc/jsapi/RTCRtpTransceiver.cpp b/dom/media/webrtc/jsapi/RTCRtpTransceiver.cpp index 025f517955f0c..72ce4c86533b6 100644 --- a/dom/media/webrtc/jsapi/RTCRtpTransceiver.cpp +++ b/dom/media/webrtc/jsapi/RTCRtpTransceiver.cpp @@ -128,7 +128,7 @@ struct ConduitControlState : public AudioConduitControlInterface,
MOZ_MTLOG_MODULE("RTCRtpTransceiver")
-NS_IMPL_CYCLE_COLLECTION_CLASS(RTCRtpTransceiver) +NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(RTCRtpTransceiver) NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(RTCRtpTransceiver) // We do not unlink mPc from here; PeerConnectionImpl invokes the necessary // teardown code itself during unlink. @@ -141,7 +141,6 @@ NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(RTCRtpTransceiver) mSender, mDtlsTransport, mLastStableDtlsTransport) NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END -NS_IMPL_CYCLE_COLLECTION_TRACE_WRAPPERCACHE(RTCRtpTransceiver)
NS_IMPL_CYCLE_COLLECTING_ADDREF(RTCRtpTransceiver) NS_IMPL_CYCLE_COLLECTING_RELEASE(RTCRtpTransceiver) diff --git a/dom/media/webrtc/jsapi/RTCRtpTransceiver.h b/dom/media/webrtc/jsapi/RTCRtpTransceiver.h index 780184634976b..d4ab9b9aed20a 100644 --- a/dom/media/webrtc/jsapi/RTCRtpTransceiver.h +++ b/dom/media/webrtc/jsapi/RTCRtpTransceiver.h @@ -147,7 +147,7 @@ class RTCRtpTransceiver : public nsISupports,
// nsISupports NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(RTCRtpTransceiver) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(RTCRtpTransceiver)
static void NegotiatedDetailsToAudioCodecConfigs( const JsepTrackNegotiatedDetails& aDetails, diff --git a/dom/media/webrtc/jsapi/RTCStatsReport.h b/dom/media/webrtc/jsapi/RTCStatsReport.h index 3ae0c24a38208..98f868b298461 100644 --- a/dom/media/webrtc/jsapi/RTCStatsReport.h +++ b/dom/media/webrtc/jsapi/RTCStatsReport.h @@ -79,7 +79,7 @@ typedef MozPromise<UniquePtr<RTCStatsReportInternal>, nsresult, true> class RTCStatsReport final : public nsWrapperCache { public: NS_INLINE_DECL_CYCLE_COLLECTING_NATIVE_REFCOUNTING(RTCStatsReport) - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_NATIVE_CLASS(RTCStatsReport) + NS_DECL_CYCLE_COLLECTION_NATIVE_WRAPPERCACHE_CLASS(RTCStatsReport)
explicit RTCStatsReport(nsPIDOMWindowInner* aParent);
diff --git a/dom/media/webspeech/recognition/SpeechGrammar.h b/dom/media/webspeech/recognition/SpeechGrammar.h index ea4a6bab8ec7e..0dee1e9792540 100644 --- a/dom/media/webspeech/recognition/SpeechGrammar.h +++ b/dom/media/webspeech/recognition/SpeechGrammar.h @@ -27,7 +27,7 @@ class SpeechGrammar final : public nsISupports, public nsWrapperCache { explicit SpeechGrammar(nsISupports* aParent);
NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(SpeechGrammar) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(SpeechGrammar)
nsISupports* GetParentObject() const;
diff --git a/dom/media/webspeech/recognition/SpeechGrammarList.h b/dom/media/webspeech/recognition/SpeechGrammarList.h index a8c628421ac02..7f1e09cd9e0b7 100644 --- a/dom/media/webspeech/recognition/SpeechGrammarList.h +++ b/dom/media/webspeech/recognition/SpeechGrammarList.h @@ -31,7 +31,7 @@ class SpeechGrammarList final : public nsISupports, public nsWrapperCache { explicit SpeechGrammarList(nsISupports* aParent);
NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(SpeechGrammarList) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(SpeechGrammarList)
static already_AddRefed<SpeechGrammarList> Constructor( const GlobalObject& aGlobal); diff --git a/dom/media/webspeech/recognition/SpeechRecognitionAlternative.h b/dom/media/webspeech/recognition/SpeechRecognitionAlternative.h index bd15c38beb8f5..017d8699433fc 100644 --- a/dom/media/webspeech/recognition/SpeechRecognitionAlternative.h +++ b/dom/media/webspeech/recognition/SpeechRecognitionAlternative.h @@ -24,7 +24,7 @@ class SpeechRecognitionAlternative final : public nsISupports, explicit SpeechRecognitionAlternative(SpeechRecognition* aParent);
NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(SpeechRecognitionAlternative) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(SpeechRecognitionAlternative)
nsISupports* GetParentObject() const;
diff --git a/dom/media/webspeech/recognition/SpeechRecognitionResult.h b/dom/media/webspeech/recognition/SpeechRecognitionResult.h index 8afeb6247c41c..fc9e8fd660266 100644 --- a/dom/media/webspeech/recognition/SpeechRecognitionResult.h +++ b/dom/media/webspeech/recognition/SpeechRecognitionResult.h @@ -25,7 +25,7 @@ class SpeechRecognitionResult final : public nsISupports, explicit SpeechRecognitionResult(SpeechRecognition* aParent);
NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(SpeechRecognitionResult) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(SpeechRecognitionResult)
nsISupports* GetParentObject() const;
diff --git a/dom/media/webspeech/recognition/SpeechRecognitionResultList.h b/dom/media/webspeech/recognition/SpeechRecognitionResultList.h index 2337d06aca15d..b45659564b12e 100644 --- a/dom/media/webspeech/recognition/SpeechRecognitionResultList.h +++ b/dom/media/webspeech/recognition/SpeechRecognitionResultList.h @@ -26,7 +26,7 @@ class SpeechRecognitionResultList final : public nsISupports, explicit SpeechRecognitionResultList(SpeechRecognition* aParent);
NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(SpeechRecognitionResultList) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(SpeechRecognitionResultList)
nsISupports* GetParentObject() const;
diff --git a/dom/media/webspeech/synth/SpeechSynthesisVoice.h b/dom/media/webspeech/synth/SpeechSynthesisVoice.h index 9c4ae7fb74314..079e5f49eaf5e 100644 --- a/dom/media/webspeech/synth/SpeechSynthesisVoice.h +++ b/dom/media/webspeech/synth/SpeechSynthesisVoice.h @@ -25,7 +25,7 @@ class SpeechSynthesisVoice final : public nsISupports, public nsWrapperCache { SpeechSynthesisVoice(nsISupports* aParent, const nsAString& aUri);
NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(SpeechSynthesisVoice) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(SpeechSynthesisVoice)
nsISupports* GetParentObject() const;
diff --git a/dom/media/webvtt/TextTrackCueList.h b/dom/media/webvtt/TextTrackCueList.h index 5669fe12ce498..f590f94d8cca0 100644 --- a/dom/media/webvtt/TextTrackCueList.h +++ b/dom/media/webvtt/TextTrackCueList.h @@ -22,7 +22,7 @@ class TextTrackCue; class TextTrackCueList final : public nsISupports, public nsWrapperCache { public: NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(TextTrackCueList) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(TextTrackCueList)
// TextTrackCueList WebIDL explicit TextTrackCueList(nsISupports* aParent); diff --git a/dom/media/webvtt/TextTrackRegion.h b/dom/media/webvtt/TextTrackRegion.h index a04422a0c2a06..d316d7a30c46d 100644 --- a/dom/media/webvtt/TextTrackRegion.h +++ b/dom/media/webvtt/TextTrackRegion.h @@ -23,7 +23,7 @@ class TextTrack; class TextTrackRegion final : public nsISupports, public nsWrapperCache { public: NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(TextTrackRegion) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(TextTrackRegion)
JSObject* WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto) override; diff --git a/dom/messagechannel/MessageChannel.h b/dom/messagechannel/MessageChannel.h index 861cd31229910..a618bd4abd0c8 100644 --- a/dom/messagechannel/MessageChannel.h +++ b/dom/messagechannel/MessageChannel.h @@ -25,7 +25,7 @@ class MessagePort; class MessageChannel final : public nsISupports, public nsWrapperCache { public: NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(MessageChannel) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(MessageChannel)
nsIGlobalObject* GetParentObject() const { return mGlobal; }
diff --git a/dom/midi/MIDIInputMap.h b/dom/midi/MIDIInputMap.h index 9a146871f1d7a..5826290dbc813 100644 --- a/dom/midi/MIDIInputMap.h +++ b/dom/midi/MIDIInputMap.h @@ -23,7 +23,7 @@ namespace mozilla::dom { class MIDIInputMap final : public nsISupports, public nsWrapperCache { public: NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(MIDIInputMap) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(MIDIInputMap) nsPIDOMWindowInner* GetParentObject() const { return mParent; }
explicit MIDIInputMap(nsPIDOMWindowInner* aParent); diff --git a/dom/midi/MIDIOutputMap.h b/dom/midi/MIDIOutputMap.h index 280cf97713c2a..2e33e8b2a7208 100644 --- a/dom/midi/MIDIOutputMap.h +++ b/dom/midi/MIDIOutputMap.h @@ -24,7 +24,7 @@ namespace mozilla::dom { class MIDIOutputMap final : public nsISupports, public nsWrapperCache { public: NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(MIDIOutputMap) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(MIDIOutputMap)
explicit MIDIOutputMap(nsPIDOMWindowInner* aParent);
diff --git a/dom/payments/PaymentAddress.h b/dom/payments/PaymentAddress.h index d713c0b904391..f57e89f54f2a9 100644 --- a/dom/payments/PaymentAddress.h +++ b/dom/payments/PaymentAddress.h @@ -15,7 +15,7 @@ namespace mozilla::dom { class PaymentAddress final : public nsISupports, public nsWrapperCache { public: NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(PaymentAddress) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(PaymentAddress)
PaymentAddress(nsPIDOMWindowInner* aWindow, const nsAString& aCountry, const nsTArray<nsString>& aAddressLine, diff --git a/dom/performance/EventCounts.h b/dom/performance/EventCounts.h index 7e782c710b8c6..59d9c140fc9fc 100644 --- a/dom/performance/EventCounts.h +++ b/dom/performance/EventCounts.h @@ -14,7 +14,7 @@ namespace mozilla::dom { class EventCounts final : public nsWrapperCache { public: NS_INLINE_DECL_CYCLE_COLLECTING_NATIVE_REFCOUNTING(EventCounts) - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_NATIVE_CLASS(EventCounts) + NS_DECL_CYCLE_COLLECTION_NATIVE_WRAPPERCACHE_CLASS(EventCounts)
explicit EventCounts(nsISupports* aParent);
diff --git a/dom/performance/PerformanceEntry.h b/dom/performance/PerformanceEntry.h index e5675c6c1c276..8ee54248bf646 100644 --- a/dom/performance/PerformanceEntry.h +++ b/dom/performance/PerformanceEntry.h @@ -28,7 +28,7 @@ class PerformanceEntry : public nsISupports, public nsWrapperCache { const nsAString& aEntryType);
NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(PerformanceEntry) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(PerformanceEntry)
nsISupports* GetParentObject() const { return mParent; }
diff --git a/dom/performance/PerformanceNavigation.h b/dom/performance/PerformanceNavigation.h index b152e329ef020..2f6e21fe65b17 100644 --- a/dom/performance/PerformanceNavigation.h +++ b/dom/performance/PerformanceNavigation.h @@ -20,7 +20,7 @@ class PerformanceNavigation final : public nsWrapperCache { explicit PerformanceNavigation(Performance* aPerformance);
NS_INLINE_DECL_CYCLE_COLLECTING_NATIVE_REFCOUNTING(PerformanceNavigation) - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_NATIVE_CLASS(PerformanceNavigation) + NS_DECL_CYCLE_COLLECTION_NATIVE_WRAPPERCACHE_CLASS(PerformanceNavigation)
nsDOMNavigationTiming* GetDOMTiming() const { return mPerformance->GetDOMTiming(); diff --git a/dom/performance/PerformanceObserver.cpp b/dom/performance/PerformanceObserver.cpp index 4f6516f350a26..e132b70860c2f 100644 --- a/dom/performance/PerformanceObserver.cpp +++ b/dom/performance/PerformanceObserver.cpp @@ -22,7 +22,7 @@ using namespace mozilla; using namespace mozilla::dom;
-NS_IMPL_CYCLE_COLLECTION_CLASS(PerformanceObserver) +NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(PerformanceObserver) NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(PerformanceObserver) tmp->Disconnect(); NS_IMPL_CYCLE_COLLECTION_UNLINK(mCallback) @@ -37,7 +37,6 @@ NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(PerformanceObserver) NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mOwner) NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mQueuedEntries) NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END -NS_IMPL_CYCLE_COLLECTION_TRACE_WRAPPERCACHE(PerformanceObserver)
NS_IMPL_CYCLE_COLLECTING_ADDREF(PerformanceObserver) NS_IMPL_CYCLE_COLLECTING_RELEASE(PerformanceObserver) diff --git a/dom/performance/PerformanceObserver.h b/dom/performance/PerformanceObserver.h index 664ae6c121814..7b50eb8b60966 100644 --- a/dom/performance/PerformanceObserver.h +++ b/dom/performance/PerformanceObserver.h @@ -32,7 +32,7 @@ class WorkerPrivate; class PerformanceObserver final : public nsISupports, public nsWrapperCache { public: NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(PerformanceObserver) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(PerformanceObserver)
static already_AddRefed<PerformanceObserver> Constructor( const GlobalObject& aGlobal, PerformanceObserverCallback& aCb, diff --git a/dom/performance/PerformanceObserverEntryList.h b/dom/performance/PerformanceObserverEntryList.h index e20a5594cbf5a..3a353060daf52 100644 --- a/dom/performance/PerformanceObserverEntryList.h +++ b/dom/performance/PerformanceObserverEntryList.h @@ -35,7 +35,7 @@ class PerformanceObserverEntryList final : public nsISupports, JS::Handle<JSObject*> aGivenProto) override;
NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(PerformanceObserverEntryList) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(PerformanceObserverEntryList)
void GetEntries(const PerformanceEntryFilterOptions& aFilter, nsTArray<RefPtr<PerformanceEntry>>& aRetval); diff --git a/dom/performance/PerformanceServerTiming.h b/dom/performance/PerformanceServerTiming.h index cd015a479140d..27b85d29fd427 100644 --- a/dom/performance/PerformanceServerTiming.h +++ b/dom/performance/PerformanceServerTiming.h @@ -27,7 +27,7 @@ class PerformanceServerTiming final : public nsISupports, }
NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(PerformanceServerTiming) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(PerformanceServerTiming)
JSObject* WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto) override; diff --git a/dom/performance/PerformanceTiming.h b/dom/performance/PerformanceTiming.h index 1bac8812aaf4c..080b3ddf5f4d5 100644 --- a/dom/performance/PerformanceTiming.h +++ b/dom/performance/PerformanceTiming.h @@ -244,7 +244,7 @@ class PerformanceTiming final : public nsWrapperCache { nsIHttpChannel* aHttpChannel, DOMHighResTimeStamp aZeroTime); NS_INLINE_DECL_CYCLE_COLLECTING_NATIVE_REFCOUNTING(PerformanceTiming) - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_NATIVE_CLASS(PerformanceTiming) + NS_DECL_CYCLE_COLLECTION_NATIVE_WRAPPERCACHE_CLASS(PerformanceTiming)
nsDOMNavigationTiming* GetDOMTiming() const { return mPerformance->GetDOMTiming(); diff --git a/dom/permission/Permissions.h b/dom/permission/Permissions.h index 7642f6c0f5338..f974fa49a9152 100644 --- a/dom/permission/Permissions.h +++ b/dom/permission/Permissions.h @@ -22,7 +22,7 @@ class Promise; class Permissions final : public nsISupports, public nsWrapperCache { public: NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(Permissions) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(Permissions)
explicit Permissions(nsPIDOMWindowInner* aWindow);
diff --git a/dom/promise/Promise.cpp b/dom/promise/Promise.cpp index b8a6b9313284d..66bb1bb4ae965 100644 --- a/dom/promise/Promise.cpp +++ b/dom/promise/Promise.cpp @@ -56,7 +56,7 @@ namespace mozilla::dom {
// Promise
-NS_IMPL_CYCLE_COLLECTION_CLASS(Promise) +NS_IMPL_CYCLE_COLLECTION_SINGLE_ZONE_SCRIPT_HOLDER_CLASS(Promise)
NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(Promise) NS_IMPL_CYCLE_COLLECTION_UNLINK(mGlobal) @@ -69,6 +69,8 @@ NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(Promise) NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
NS_IMPL_CYCLE_COLLECTION_TRACE_BEGIN(Promise) + // If you add new JS member variables, you may need to stop using + // NS_IMPL_CYCLE_COLLECTION_SINGLE_ZONE_SCRIPT_HOLDER_CLASS. NS_IMPL_CYCLE_COLLECTION_TRACE_JS_MEMBER_CALLBACK(mPromiseObj); NS_IMPL_CYCLE_COLLECTION_TRACE_END
diff --git a/dom/push/PushManager.h b/dom/push/PushManager.h index fd2aa38e7dd08..515fddc24b237 100644 --- a/dom/push/PushManager.h +++ b/dom/push/PushManager.h @@ -52,7 +52,7 @@ class WorkerPrivate; class PushManager final : public nsISupports, public nsWrapperCache { public: NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(PushManager) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(PushManager)
enum SubscriptionAction { SubscribeAction, diff --git a/dom/push/PushSubscription.h b/dom/push/PushSubscription.h index 74c5921a6c212..ea2bed5ad7e02 100644 --- a/dom/push/PushSubscription.h +++ b/dom/push/PushSubscription.h @@ -32,7 +32,7 @@ class Promise; class PushSubscription final : public nsISupports, public nsWrapperCache { public: NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(PushSubscription) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(PushSubscription)
PushSubscription(nsIGlobalObject* aGlobal, const nsAString& aEndpoint, const nsAString& aScope, diff --git a/dom/quota/StorageManager.h b/dom/quota/StorageManager.h index f733036344c72..0b3376aec1dad 100644 --- a/dom/quota/StorageManager.h +++ b/dom/quota/StorageManager.h @@ -45,7 +45,7 @@ class StorageManager final : public nsISupports, public nsWrapperCache { already_AddRefed<Promise> GetDirectory(ErrorResult& aRv);
NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(StorageManager) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(StorageManager)
// nsWrapperCache virtual JSObject* WrapObject(JSContext* aCx, diff --git a/dom/reporting/Report.h b/dom/reporting/Report.h index e645142203148..e139e27858c4a 100644 --- a/dom/reporting/Report.h +++ b/dom/reporting/Report.h @@ -26,7 +26,7 @@ class ReportBody; class Report final : public nsISupports, public nsWrapperCache { public: NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(Report) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(Report)
Report(nsIGlobalObject* aGlobal, const nsAString& aType, const nsAString& aURL, ReportBody* aBody); diff --git a/dom/reporting/ReportBody.h b/dom/reporting/ReportBody.h index 6a458795d7a0b..9043dba16d1dd 100644 --- a/dom/reporting/ReportBody.h +++ b/dom/reporting/ReportBody.h @@ -24,7 +24,7 @@ namespace dom { class ReportBody : public nsISupports, public nsWrapperCache { public: NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(ReportBody) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(ReportBody)
explicit ReportBody(nsIGlobalObject* aGlobal);
diff --git a/dom/reporting/ReportingObserver.cpp b/dom/reporting/ReportingObserver.cpp index a9ab0bfd46bd6..2eac520dfef2c 100644 --- a/dom/reporting/ReportingObserver.cpp +++ b/dom/reporting/ReportingObserver.cpp @@ -13,7 +13,7 @@
namespace mozilla::dom {
-NS_IMPL_CYCLE_COLLECTION_CLASS(ReportingObserver) +NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(ReportingObserver) NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(ReportingObserver) tmp->Disconnect(); NS_IMPL_CYCLE_COLLECTION_UNLINK(mReports) @@ -27,7 +27,6 @@ NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(ReportingObserver) NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mGlobal) NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mCallback) NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END -NS_IMPL_CYCLE_COLLECTION_TRACE_WRAPPERCACHE(ReportingObserver)
NS_IMPL_CYCLE_COLLECTION_ROOT_NATIVE(ReportingObserver, AddRef) NS_IMPL_CYCLE_COLLECTION_UNROOT_NATIVE(ReportingObserver, Release) diff --git a/dom/reporting/ReportingObserver.h b/dom/reporting/ReportingObserver.h index 3a9ba1e96f005..b89ee33adf9c4 100644 --- a/dom/reporting/ReportingObserver.h +++ b/dom/reporting/ReportingObserver.h @@ -33,7 +33,7 @@ struct ReportingObserverOptions; class ReportingObserver final : public nsWrapperCache { public: NS_INLINE_DECL_CYCLE_COLLECTING_NATIVE_REFCOUNTING(ReportingObserver) - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_NATIVE_CLASS(ReportingObserver) + NS_DECL_CYCLE_COLLECTION_NATIVE_WRAPPERCACHE_CLASS(ReportingObserver)
static already_AddRefed<ReportingObserver> Constructor( const GlobalObject& aGlobal, ReportingObserverCallback& aCallback, diff --git a/dom/reporting/TestingDeprecatedInterface.h b/dom/reporting/TestingDeprecatedInterface.h index 016da79fa4785..7056a91ed7af1 100644 --- a/dom/reporting/TestingDeprecatedInterface.h +++ b/dom/reporting/TestingDeprecatedInterface.h @@ -24,7 +24,7 @@ class TestingDeprecatedInterface final : public nsISupports, public nsWrapperCache { public: NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(TestingDeprecatedInterface) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(TestingDeprecatedInterface)
static already_AddRefed<TestingDeprecatedInterface> Constructor( const GlobalObject& aGlobal); diff --git a/dom/security/featurepolicy/FeaturePolicy.h b/dom/security/featurepolicy/FeaturePolicy.h index 1d4d23fbfda81..65f525974902f 100644 --- a/dom/security/featurepolicy/FeaturePolicy.h +++ b/dom/security/featurepolicy/FeaturePolicy.h @@ -67,7 +67,7 @@ class FeaturePolicy final : public nsISupports, public nsWrapperCache {
public: NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(FeaturePolicy) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(FeaturePolicy)
explicit FeaturePolicy(nsINode* aNode);
diff --git a/dom/security/sanitizer/Sanitizer.h b/dom/security/sanitizer/Sanitizer.h index eb30b70f33c95..b4e5a0db30c49 100644 --- a/dom/security/sanitizer/Sanitizer.h +++ b/dom/security/sanitizer/Sanitizer.h @@ -32,7 +32,7 @@ class GlobalObject; class Sanitizer final : public nsISupports, public nsWrapperCache { public: NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(Sanitizer); + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(Sanitizer);
explicit Sanitizer(nsIGlobalObject* aGlobal, const SanitizerConfig& aOptions) : mGlobal(aGlobal), mTreeSanitizer(nsIParserUtils::SanitizerAllowStyle) { diff --git a/dom/serviceworkers/NavigationPreloadManager.h b/dom/serviceworkers/NavigationPreloadManager.h index 53a8d2b2adb07..e925e27e90461 100644 --- a/dom/serviceworkers/NavigationPreloadManager.h +++ b/dom/serviceworkers/NavigationPreloadManager.h @@ -24,7 +24,7 @@ class NavigationPreloadManager final : public nsISupports, public nsWrapperCache { public: NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(NavigationPreloadManager) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(NavigationPreloadManager)
static bool IsValidHeader(const nsACString& aHeader);
diff --git a/dom/serviceworkers/ServiceWorkerEvents.cpp b/dom/serviceworkers/ServiceWorkerEvents.cpp index 95eb52a95cca0..85c29dcc86068 100644 --- a/dom/serviceworkers/ServiceWorkerEvents.cpp +++ b/dom/serviceworkers/ServiceWorkerEvents.cpp @@ -1248,7 +1248,7 @@ void ExtendableMessageEvent::GetPorts(nsTArray<RefPtr<MessagePort>>& aPorts) { aPorts = mPorts.Clone(); }
-NS_IMPL_CYCLE_COLLECTION_MULTI_ZONE_JSHOLDER_CLASS(ExtendableMessageEvent) +NS_IMPL_CYCLE_COLLECTION_CLASS(ExtendableMessageEvent)
NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN_INHERITED(ExtendableMessageEvent, Event) tmp->mData.setUndefined(); diff --git a/dom/serviceworkers/ServiceWorkerEvents.h b/dom/serviceworkers/ServiceWorkerEvents.h index 7cbb6d9bcd43a..2003c8afe98e5 100644 --- a/dom/serviceworkers/ServiceWorkerEvents.h +++ b/dom/serviceworkers/ServiceWorkerEvents.h @@ -202,7 +202,7 @@ class FetchEvent final : public ExtendableEvent { class PushMessageData final : public nsISupports, public nsWrapperCache { public: NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(PushMessageData) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(PushMessageData)
virtual JSObject* WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto) override; diff --git a/dom/storage/Storage.h b/dom/storage/Storage.h index bea115e9d948a..81546a0b0e603 100644 --- a/dom/storage/Storage.h +++ b/dom/storage/Storage.h @@ -25,7 +25,7 @@ namespace mozilla::dom { class Storage : public nsISupports, public nsWrapperCache { public: NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(Storage) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(Storage)
Storage(nsPIDOMWindowInner* aWindow, nsIPrincipal* aPrincipal, nsIPrincipal* aStoragePrincipal); diff --git a/dom/streams/ByteLengthQueuingStrategy.h b/dom/streams/ByteLengthQueuingStrategy.h index cd70cbd71a140..64fe3e4528749 100644 --- a/dom/streams/ByteLengthQueuingStrategy.h +++ b/dom/streams/ByteLengthQueuingStrategy.h @@ -23,7 +23,7 @@ class ByteLengthQueuingStrategy final : public BaseQueuingStrategy, public nsWrapperCache { public: NS_DECL_ISUPPORTS_INHERITED - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS_INHERITED( + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS_INHERITED( ByteLengthQueuingStrategy, BaseQueuingStrategy)
public: diff --git a/dom/streams/CountQueuingStrategy.h b/dom/streams/CountQueuingStrategy.h index b939173c1e246..bbf109efbc911 100644 --- a/dom/streams/CountQueuingStrategy.h +++ b/dom/streams/CountQueuingStrategy.h @@ -23,8 +23,8 @@ class CountQueuingStrategy final : public BaseQueuingStrategy, public nsWrapperCache { public: NS_DECL_ISUPPORTS_INHERITED - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS_INHERITED(CountQueuingStrategy, - BaseQueuingStrategy) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS_INHERITED(CountQueuingStrategy, + BaseQueuingStrategy)
public: explicit CountQueuingStrategy(nsISupports* aGlobal, double aHighWaterMark) diff --git a/dom/streams/ReadableStreamBYOBReader.h b/dom/streams/ReadableStreamBYOBReader.h index 90c8646b6c2b9..16c00930324f0 100644 --- a/dom/streams/ReadableStreamBYOBReader.h +++ b/dom/streams/ReadableStreamBYOBReader.h @@ -31,7 +31,7 @@ class ReadableStreamBYOBReader final : public ReadableStreamGenericReader, public nsWrapperCache { public: NS_DECL_ISUPPORTS_INHERITED - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS_INHERITED( + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS_INHERITED( ReadableStreamBYOBReader, ReadableStreamGenericReader)
public: diff --git a/dom/streams/ReadableStreamDefaultReader.h b/dom/streams/ReadableStreamDefaultReader.h index 5a7ab60418f9d..632ff2291125f 100644 --- a/dom/streams/ReadableStreamDefaultReader.h +++ b/dom/streams/ReadableStreamDefaultReader.h @@ -51,7 +51,7 @@ class ReadableStreamDefaultReader final : public ReadableStreamGenericReader, { public: NS_DECL_ISUPPORTS_INHERITED - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS_INHERITED( + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS_INHERITED( ReadableStreamDefaultReader, ReadableStreamGenericReader)
public: diff --git a/dom/streams/TransformStream.h b/dom/streams/TransformStream.h index 795c1f8a31410..b22065da2482a 100644 --- a/dom/streams/TransformStream.h +++ b/dom/streams/TransformStream.h @@ -25,7 +25,7 @@ class MessagePort; class TransformStream final : public nsISupports, public nsWrapperCache { public: NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(TransformStream) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(TransformStream)
TransformStream(nsIGlobalObject* aGlobal, ReadableStream* aReadable, WritableStream* aWritable); diff --git a/dom/streams/TransformStreamDefaultController.h b/dom/streams/TransformStreamDefaultController.h index 9dd1756bea152..97399aed5b29b 100644 --- a/dom/streams/TransformStreamDefaultController.h +++ b/dom/streams/TransformStreamDefaultController.h @@ -25,7 +25,7 @@ class TransformStreamDefaultController final : public nsISupports, public nsWrapperCache { public: NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(TransformStreamDefaultController) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(TransformStreamDefaultController)
MOZ_KNOWN_LIVE TransformStream* Stream(); void SetStream(TransformStream& aStream); diff --git a/dom/svg/SVGMatrix.h b/dom/svg/SVGMatrix.h index 5b88b9b723613..c7666bc096d00 100644 --- a/dom/svg/SVGMatrix.h +++ b/dom/svg/SVGMatrix.h @@ -51,7 +51,7 @@ namespace mozilla::dom { class SVGMatrix final : public nsWrapperCache { public: NS_INLINE_DECL_CYCLE_COLLECTING_NATIVE_REFCOUNTING(SVGMatrix) - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_NATIVE_CLASS(SVGMatrix) + NS_DECL_CYCLE_COLLECTION_NATIVE_WRAPPERCACHE_CLASS(SVGMatrix)
/** * Ctor for SVGMatrix objects that belong to a DOMSVGTransform. diff --git a/dom/system/IOUtils.h b/dom/system/IOUtils.h index 570d4fc87d5bd..3ce290b4b2dc2 100644 --- a/dom/system/IOUtils.h +++ b/dom/system/IOUtils.h @@ -815,7 +815,7 @@ class SyncReadFile : public nsISupports, public nsWrapperCache { int64_t aSize);
NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(SyncReadFile) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(SyncReadFile)
nsISupports* GetParentObject() const { return mParent; }
diff --git a/dom/u2f/U2F.cpp b/dom/u2f/U2F.cpp index 528e82c7e34b4..c5ee8c41c59a9 100644 --- a/dom/u2f/U2F.cpp +++ b/dom/u2f/U2F.cpp @@ -43,7 +43,7 @@ NS_INTERFACE_MAP_END_INHERITING(WebAuthnManagerBase) NS_IMPL_ADDREF_INHERITED(U2F, WebAuthnManagerBase) NS_IMPL_RELEASE_INHERITED(U2F, WebAuthnManagerBase)
-NS_IMPL_CYCLE_COLLECTION_CLASS(U2F) +NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(U2F) NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN_INHERITED(U2F, WebAuthnManagerBase) NS_IMPL_CYCLE_COLLECTION_UNLINK(mTransaction) NS_IMPL_CYCLE_COLLECTION_UNLINK_PRESERVED_WRAPPER @@ -52,7 +52,6 @@ NS_IMPL_CYCLE_COLLECTION_UNLINK_END NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN_INHERITED(U2F, WebAuthnManagerBase) NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mTransaction) NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END -NS_IMPL_CYCLE_COLLECTION_TRACE_WRAPPERCACHE(U2F)
/*********************************************************************** * Utility Functions diff --git a/dom/u2f/U2F.h b/dom/u2f/U2F.h index 1e57e4bb22a64..103650e4bcfd1 100644 --- a/dom/u2f/U2F.h +++ b/dom/u2f/U2F.h @@ -90,8 +90,8 @@ class U2FTransaction { class U2F final : public WebAuthnManagerBase, public nsWrapperCache { public: NS_DECL_ISUPPORTS_INHERITED - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS_INHERITED(U2F, - WebAuthnManagerBase) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS_INHERITED(U2F, + WebAuthnManagerBase)
explicit U2F(nsPIDOMWindowInner* aParent) : WebAuthnManagerBase(aParent) {}
diff --git a/dom/url/URL.h b/dom/url/URL.h index 9d3d811861637..5674b3d8bfbd1 100644 --- a/dom/url/URL.h +++ b/dom/url/URL.h @@ -30,7 +30,7 @@ class Optional; class URL final : public URLSearchParamsObserver, public nsWrapperCache { public: NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(URL) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(URL)
explicit URL(nsISupports* aParent) : mParent(aParent) {}
diff --git a/dom/url/URLSearchParams.h b/dom/url/URLSearchParams.h index 3f779f12ab18a..c6a63a6f7f69c 100644 --- a/dom/url/URLSearchParams.h +++ b/dom/url/URLSearchParams.h @@ -51,7 +51,7 @@ class URLSearchParams final : public nsISupports, public nsWrapperCache {
public: NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(URLSearchParams) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(URLSearchParams)
explicit URLSearchParams(nsISupports* aParent, URLSearchParamsObserver* aObserver = nullptr); diff --git a/dom/vr/VRDisplay.h b/dom/vr/VRDisplay.h index 1f4de0ee0cf00..866edc9846169 100644 --- a/dom/vr/VRDisplay.h +++ b/dom/vr/VRDisplay.h @@ -43,7 +43,7 @@ class VRFieldOfView final : public nsWrapperCache { VRFieldOfView(nsISupports* aParent, const gfx::VRFieldOfView& aSrc);
NS_INLINE_DECL_CYCLE_COLLECTING_NATIVE_REFCOUNTING(VRFieldOfView) - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_NATIVE_CLASS(VRFieldOfView) + NS_DECL_CYCLE_COLLECTION_NATIVE_WRAPPERCACHE_CLASS(VRFieldOfView)
double UpDegrees() const { return mUpDegrees; } double RightDegrees() const { return mRightDegrees; } @@ -72,7 +72,7 @@ class VRDisplayCapabilities final : public nsWrapperCache { : mParent(aParent), mFlags(aFlags) {}
NS_INLINE_DECL_CYCLE_COLLECTING_NATIVE_REFCOUNTING(VRDisplayCapabilities) - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_NATIVE_CLASS(VRDisplayCapabilities) + NS_DECL_CYCLE_COLLECTION_NATIVE_WRAPPERCACHE_CLASS(VRDisplayCapabilities)
nsISupports* GetParentObject() const { return mParent; }
diff --git a/dom/vr/XRFrame.h b/dom/vr/XRFrame.h index 588d222381f82..26bd601f3a7ea 100644 --- a/dom/vr/XRFrame.h +++ b/dom/vr/XRFrame.h @@ -26,7 +26,7 @@ class XRViewerPose; class XRFrame final : public nsWrapperCache { public: NS_INLINE_DECL_CYCLE_COLLECTING_NATIVE_REFCOUNTING(XRFrame) - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_NATIVE_CLASS(XRFrame) + NS_DECL_CYCLE_COLLECTION_NATIVE_WRAPPERCACHE_CLASS(XRFrame)
explicit XRFrame(nsISupports* aParent, XRSession* aXRSession);
diff --git a/dom/vr/XRInputSource.h b/dom/vr/XRInputSource.h index a44d1aa70d801..2f9405c18e164 100644 --- a/dom/vr/XRInputSource.h +++ b/dom/vr/XRInputSource.h @@ -27,7 +27,7 @@ enum class XRTargetRayMode : uint8_t; class XRInputSource final : public nsWrapperCache { public: NS_INLINE_DECL_CYCLE_COLLECTING_NATIVE_REFCOUNTING(XRInputSource) - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_NATIVE_CLASS(XRInputSource) + NS_DECL_CYCLE_COLLECTION_NATIVE_WRAPPERCACHE_CLASS(XRInputSource)
explicit XRInputSource(nsISupports* aParent);
diff --git a/dom/vr/XRInputSourceArray.h b/dom/vr/XRInputSourceArray.h index cbd70af688a7e..424e0062959c5 100644 --- a/dom/vr/XRInputSourceArray.h +++ b/dom/vr/XRInputSourceArray.h @@ -22,7 +22,7 @@ class XRInputSource; class XRInputSourceArray final : public nsISupports, public nsWrapperCache { public: NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(XRInputSourceArray) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(XRInputSourceArray)
explicit XRInputSourceArray(nsISupports* aParent);
diff --git a/dom/vr/XRPose.h b/dom/vr/XRPose.h index cc197c1c88ef7..560581a2579cc 100644 --- a/dom/vr/XRPose.h +++ b/dom/vr/XRPose.h @@ -21,7 +21,7 @@ class XRView; class XRPose : public nsISupports, public nsWrapperCache { public: NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(XRPose) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(XRPose)
explicit XRPose(nsISupports* aParent, XRRigidTransform* aTransform, bool aEmulatedPosition); diff --git a/dom/vr/XRRenderState.h b/dom/vr/XRRenderState.h index d707e3fc678dc..6004949500514 100644 --- a/dom/vr/XRRenderState.h +++ b/dom/vr/XRRenderState.h @@ -18,7 +18,7 @@ class XRWebGLLayer; class XRRenderState final : public nsWrapperCache { public: NS_INLINE_DECL_CYCLE_COLLECTING_NATIVE_REFCOUNTING(XRRenderState) - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_NATIVE_CLASS(XRRenderState) + NS_DECL_CYCLE_COLLECTION_NATIVE_WRAPPERCACHE_CLASS(XRRenderState)
explicit XRRenderState(nsISupports* aParent, XRSession* aSession); explicit XRRenderState(const XRRenderState& aOther); diff --git a/dom/vr/XRViewport.h b/dom/vr/XRViewport.h index 851a8835acc42..5b36a0e8ed515 100644 --- a/dom/vr/XRViewport.h +++ b/dom/vr/XRViewport.h @@ -18,7 +18,7 @@ namespace mozilla::dom { class XRViewport final : public nsWrapperCache { public: NS_INLINE_DECL_CYCLE_COLLECTING_NATIVE_REFCOUNTING(XRViewport) - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_NATIVE_CLASS(XRViewport) + NS_DECL_CYCLE_COLLECTION_NATIVE_WRAPPERCACHE_CLASS(XRViewport)
explicit XRViewport(nsISupports* aParent, const gfx::IntRect& aRect);
diff --git a/dom/webgpu/Buffer.h b/dom/webgpu/Buffer.h index 4f84249ceeab0..b9c72b290a049 100644 --- a/dom/webgpu/Buffer.h +++ b/dom/webgpu/Buffer.h @@ -42,7 +42,8 @@ struct MappedInfo {
class Buffer final : public ObjectBase, public ChildOf<Device> { public: - GPU_DECL_CYCLE_COLLECTION(Buffer) + NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_NATIVE_CLASS(Buffer) + NS_INLINE_DECL_CYCLE_COLLECTING_NATIVE_REFCOUNTING(Buffer) GPU_DECL_JS_WRAP(Buffer)
Buffer(Device* const aParent, RawId aId, BufferAddress aSize, bool aMappable); diff --git a/dom/webgpu/CanvasContext.h b/dom/webgpu/CanvasContext.h index 10ef4d9f22532..010ada83ad75e 100644 --- a/dom/webgpu/CanvasContext.h +++ b/dom/webgpu/CanvasContext.h @@ -31,7 +31,7 @@ class CanvasContext final : public nsICanvasRenderingContextInternal, public: // nsISupports interface + CC NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(CanvasContext) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(CanvasContext)
CanvasContext();
diff --git a/dom/webgpu/ObjectModel.h b/dom/webgpu/ObjectModel.h index 62da6647171fd..7dd0c2d96f2da 100644 --- a/dom/webgpu/ObjectModel.h +++ b/dom/webgpu/ObjectModel.h @@ -61,8 +61,8 @@ class ObjectBase : public nsWrapperCache { JSObject* WrapObject(JSContext* cx, JS::Handle<JSObject*> givenProto) \ override;
-#define GPU_DECL_CYCLE_COLLECTION(T) \ - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_NATIVE_CLASS(T) \ +#define GPU_DECL_CYCLE_COLLECTION(T) \ + NS_DECL_CYCLE_COLLECTION_NATIVE_WRAPPERCACHE_CLASS(T) \ NS_INLINE_DECL_CYCLE_COLLECTING_NATIVE_REFCOUNTING(T)
#define GPU_IMPL_JS_WRAP(T) \ @@ -73,7 +73,7 @@ class ObjectBase : public nsWrapperCache { // Note: we don't use `NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE` directly // because there is a custom action we need to always do. #define GPU_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(T, ...) \ - NS_IMPL_CYCLE_COLLECTION_CLASS(T) \ + NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(T) \ NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(T) \ tmp->Cleanup(); \ NS_IMPL_CYCLE_COLLECTION_UNLINK(__VA_ARGS__) \ @@ -81,11 +81,10 @@ class ObjectBase : public nsWrapperCache { NS_IMPL_CYCLE_COLLECTION_UNLINK_END \ NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(T) \ NS_IMPL_CYCLE_COLLECTION_TRAVERSE(__VA_ARGS__) \ - NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END \ - NS_IMPL_CYCLE_COLLECTION_TRACE_WRAPPERCACHE(T) + NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
#define GPU_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_WEAK_PTR(T, ...) \ - NS_IMPL_CYCLE_COLLECTION_CLASS(T) \ + NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(T) \ NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(T) \ tmp->Cleanup(); \ NS_IMPL_CYCLE_COLLECTION_UNLINK(__VA_ARGS__) \ @@ -94,8 +93,7 @@ class ObjectBase : public nsWrapperCache { NS_IMPL_CYCLE_COLLECTION_UNLINK_END \ NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(T) \ NS_IMPL_CYCLE_COLLECTION_TRAVERSE(__VA_ARGS__) \ - NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END \ - NS_IMPL_CYCLE_COLLECTION_TRACE_WRAPPERCACHE(T) + NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
#define GPU_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_INHERITED(T, P, ...) \ NS_IMPL_CYCLE_COLLECTION_CLASS(T) \ diff --git a/dom/webscheduling/WebTaskScheduler.h b/dom/webscheduling/WebTaskScheduler.h index 543b73a8393d2..fcddd09d365bb 100644 --- a/dom/webscheduling/WebTaskScheduler.h +++ b/dom/webscheduling/WebTaskScheduler.h @@ -93,7 +93,7 @@ class WebTaskScheduler : public nsWrapperCache, public SupportsWeakPtr {
public: NS_INLINE_DECL_CYCLE_COLLECTING_NATIVE_REFCOUNTING(WebTaskScheduler) - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_NATIVE_CLASS(WebTaskScheduler) + NS_DECL_CYCLE_COLLECTION_NATIVE_WRAPPERCACHE_CLASS(WebTaskScheduler)
static already_AddRefed<WebTaskSchedulerMainThread> CreateForMainThread( nsGlobalWindowInner* aWindow); diff --git a/dom/workers/WorkerLocation.h b/dom/workers/WorkerLocation.h index 83dd10f52d43b..d51e73cde5098 100644 --- a/dom/workers/WorkerLocation.h +++ b/dom/workers/WorkerLocation.h @@ -45,7 +45,7 @@ class WorkerLocation final : public nsWrapperCache {
public: NS_INLINE_DECL_CYCLE_COLLECTING_NATIVE_REFCOUNTING(WorkerLocation) - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_NATIVE_CLASS(WorkerLocation) + NS_DECL_CYCLE_COLLECTION_NATIVE_WRAPPERCACHE_CLASS(WorkerLocation)
static already_AddRefed<WorkerLocation> Create( WorkerPrivate::LocationInfo& aInfo); diff --git a/dom/workers/WorkerNavigator.h b/dom/workers/WorkerNavigator.h index b0c24b8f1f59a..dce3120519685 100644 --- a/dom/workers/WorkerNavigator.h +++ b/dom/workers/WorkerNavigator.h @@ -52,7 +52,7 @@ class WorkerNavigator final : public nsWrapperCache {
public: NS_INLINE_DECL_CYCLE_COLLECTING_NATIVE_REFCOUNTING(WorkerNavigator) - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_NATIVE_CLASS(WorkerNavigator) + NS_DECL_CYCLE_COLLECTION_NATIVE_WRAPPERCACHE_CLASS(WorkerNavigator)
static already_AddRefed<WorkerNavigator> Create(bool aOnLine);
diff --git a/dom/worklet/Worklet.cpp b/dom/worklet/Worklet.cpp index 474915dae13ac..b42b472163a58 100644 --- a/dom/worklet/Worklet.cpp +++ b/dom/worklet/Worklet.cpp @@ -449,7 +449,7 @@ void ExecutionRunnable::RunOnMainThread() { // --------------------------------------------------------------------------- // Worklet
-NS_IMPL_CYCLE_COLLECTION_CLASS(Worklet) +NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(Worklet)
NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(Worklet) NS_IMPL_CYCLE_COLLECTION_UNLINK(mWindow) @@ -463,8 +463,6 @@ NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(Worklet) NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mOwnedObject) NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
-NS_IMPL_CYCLE_COLLECTION_TRACE_WRAPPERCACHE(Worklet) - NS_IMPL_CYCLE_COLLECTING_ADDREF(Worklet) NS_IMPL_CYCLE_COLLECTING_RELEASE(Worklet)
diff --git a/dom/worklet/Worklet.h b/dom/worklet/Worklet.h index 5d7627428f43b..8d980a96117e7 100644 --- a/dom/worklet/Worklet.h +++ b/dom/worklet/Worklet.h @@ -29,7 +29,7 @@ enum class CallerType : uint32_t; class Worklet final : public nsISupports, public nsWrapperCache { public: NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(Worklet) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(Worklet)
// |aOwnedObject| may be provided by the WorkletImpl as a parent thread // object to keep alive and traverse for CC as long as the Worklet has diff --git a/dom/worklet/WorkletGlobalScope.cpp b/dom/worklet/WorkletGlobalScope.cpp index 221cced44280b..501fb2b1dd1e7 100644 --- a/dom/worklet/WorkletGlobalScope.cpp +++ b/dom/worklet/WorkletGlobalScope.cpp @@ -14,7 +14,7 @@
namespace mozilla::dom {
-NS_IMPL_CYCLE_COLLECTION_CLASS(WorkletGlobalScope) +NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(WorkletGlobalScope)
NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(WorkletGlobalScope) NS_IMPL_CYCLE_COLLECTION_UNLINK_PRESERVED_WRAPPER @@ -27,8 +27,6 @@ NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(WorkletGlobalScope) tmp->TraverseObjectsInGlobal(cb); NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
-NS_IMPL_CYCLE_COLLECTION_TRACE_WRAPPERCACHE(WorkletGlobalScope) - NS_IMPL_CYCLE_COLLECTING_ADDREF(WorkletGlobalScope) NS_IMPL_CYCLE_COLLECTING_RELEASE(WorkletGlobalScope) NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(WorkletGlobalScope) diff --git a/dom/worklet/WorkletGlobalScope.h b/dom/worklet/WorkletGlobalScope.h index 1e63f2c6707ed..0ff6271596403 100644 --- a/dom/worklet/WorkletGlobalScope.h +++ b/dom/worklet/WorkletGlobalScope.h @@ -36,7 +36,7 @@ class WorkletGlobalScope : public nsIGlobalObject, public nsWrapperCache { NS_DECLARE_STATIC_IID_ACCESSOR(WORKLET_IID)
NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(WorkletGlobalScope) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(WorkletGlobalScope)
WorkletGlobalScope(WorkletImpl*);
@@ -73,6 +73,7 @@ class WorkletGlobalScope : public nsIGlobalObject, public nsWrapperCache { ~WorkletGlobalScope();
const RefPtr<WorkletImpl> mImpl; + private: TimeStamp mCreationTimeStamp; RefPtr<Console> mConsole; diff --git a/dom/xhr/XMLHttpRequestMainThread.cpp b/dom/xhr/XMLHttpRequestMainThread.cpp index 625ab05d3f808..3e68ab9e7783c 100644 --- a/dom/xhr/XMLHttpRequestMainThread.cpp +++ b/dom/xhr/XMLHttpRequestMainThread.cpp @@ -334,7 +334,7 @@ void XMLHttpRequestMainThread::SetRequestObserver( mRequestObserver = aObserver; }
-NS_IMPL_CYCLE_COLLECTION_MULTI_ZONE_JSHOLDER_CLASS(XMLHttpRequestMainThread) +NS_IMPL_CYCLE_COLLECTION_CLASS(XMLHttpRequestMainThread)
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN_INHERITED(XMLHttpRequestMainThread, XMLHttpRequestEventTarget) diff --git a/dom/xslt/xpath/XPathResult.cpp b/dom/xslt/xpath/XPathResult.cpp index f4beff48e7361..f6ffd6d05d490 100644 --- a/dom/xslt/xpath/XPathResult.cpp +++ b/dom/xslt/xpath/XPathResult.cpp @@ -44,9 +44,8 @@ XPathResult::XPathResult(const XPathResult& aResult)
XPathResult::~XPathResult() { RemoveObserver(); }
-NS_IMPL_CYCLE_COLLECTION_CLASS(XPathResult) +NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(XPathResult)
-NS_IMPL_CYCLE_COLLECTION_TRACE_WRAPPERCACHE(XPathResult) NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(XPathResult) NS_IMPL_CYCLE_COLLECTION_UNLINK_PRESERVED_WRAPPER NS_IMPL_CYCLE_COLLECTION_UNLINK(mParent) { tmp->RemoveObserver(); } diff --git a/dom/xslt/xpath/XPathResult.h b/dom/xslt/xpath/XPathResult.h index b5d20ee8a34c9..e073666a847f6 100644 --- a/dom/xslt/xpath/XPathResult.h +++ b/dom/xslt/xpath/XPathResult.h @@ -46,7 +46,7 @@ class XPathResult final : public nsStubMutationObserver, public nsWrapperCache {
// nsISupports interface NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(XPathResult) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(XPathResult)
virtual JSObject* WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto) override; diff --git a/dom/xslt/xslt/txMozillaXSLTProcessor.h b/dom/xslt/xslt/txMozillaXSLTProcessor.h index 897bc418533be..3dcc41f6616a6 100644 --- a/dom/xslt/xslt/txMozillaXSLTProcessor.h +++ b/dom/xslt/xslt/txMozillaXSLTProcessor.h @@ -59,8 +59,8 @@ class txMozillaXSLTProcessor final : public nsIDocumentTransformer,
// nsISupports interface NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS_AMBIGUOUS(txMozillaXSLTProcessor, - nsIDocumentTransformer) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS_AMBIGUOUS(txMozillaXSLTProcessor, + nsIDocumentTransformer)
// nsIDocumentTransformer interface NS_IMETHOD SetTransformObserver(nsITransformObserver* aObserver) override; diff --git a/gfx/layers/apz/util/CheckerboardReportService.h b/gfx/layers/apz/util/CheckerboardReportService.h index 3062255f95bc1..d9b37509c5819 100644 --- a/gfx/layers/apz/util/CheckerboardReportService.h +++ b/gfx/layers/apz/util/CheckerboardReportService.h @@ -115,7 +115,7 @@ class CheckerboardReportService : public nsWrapperCache { nsISupports* GetParentObject();
NS_INLINE_DECL_CYCLE_COLLECTING_NATIVE_REFCOUNTING(CheckerboardReportService) - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_NATIVE_CLASS(CheckerboardReportService) + NS_DECL_CYCLE_COLLECTION_NATIVE_WRAPPERCACHE_CLASS(CheckerboardReportService)
public: /* diff --git a/intl/l10n/FileSource.h b/intl/l10n/FileSource.h index d75c996bda744..e719dff74fe57 100644 --- a/intl/l10n/FileSource.h +++ b/intl/l10n/FileSource.h @@ -20,7 +20,7 @@ namespace mozilla::intl { class L10nFileSource : public nsWrapperCache { public: NS_INLINE_DECL_CYCLE_COLLECTING_NATIVE_REFCOUNTING(L10nFileSource) - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_NATIVE_CLASS(L10nFileSource) + NS_DECL_CYCLE_COLLECTION_NATIVE_WRAPPERCACHE_CLASS(L10nFileSource)
explicit L10nFileSource(RefPtr<const ffi::FileSource> aRaw, nsIGlobalObject* aGlobal = nullptr); diff --git a/intl/l10n/FluentBundle.h b/intl/l10n/FluentBundle.h index 907c8ce99184a..db4087c70b649 100644 --- a/intl/l10n/FluentBundle.h +++ b/intl/l10n/FluentBundle.h @@ -37,7 +37,7 @@ using L10nArgs = class FluentPattern : public nsWrapperCache { public: NS_INLINE_DECL_CYCLE_COLLECTING_NATIVE_REFCOUNTING(FluentPattern) - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_NATIVE_CLASS(FluentPattern) + NS_DECL_CYCLE_COLLECTION_NATIVE_WRAPPERCACHE_CLASS(FluentPattern)
FluentPattern(nsISupports* aParent, const nsACString& aId); FluentPattern(nsISupports* aParent, const nsACString& aId, @@ -58,7 +58,7 @@ class FluentPattern : public nsWrapperCache { class FluentBundle final : public nsWrapperCache { public: NS_INLINE_DECL_CYCLE_COLLECTING_NATIVE_REFCOUNTING(FluentBundle) - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_NATIVE_CLASS(FluentBundle) + NS_DECL_CYCLE_COLLECTION_NATIVE_WRAPPERCACHE_CLASS(FluentBundle)
FluentBundle(nsISupports* aParent, UniquePtrffi::FluentBundleRc aRaw);
diff --git a/intl/l10n/FluentResource.h b/intl/l10n/FluentResource.h index 815d74abf02c5..56e7f8198bbdc 100644 --- a/intl/l10n/FluentResource.h +++ b/intl/l10n/FluentResource.h @@ -19,7 +19,7 @@ namespace intl { class FluentResource : public nsWrapperCache { public: NS_INLINE_DECL_CYCLE_COLLECTING_NATIVE_REFCOUNTING(FluentResource) - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_NATIVE_CLASS(FluentResource) + NS_DECL_CYCLE_COLLECTION_NATIVE_WRAPPERCACHE_CLASS(FluentResource)
FluentResource(nsISupports* aParent, const ffi::FluentResource* aRaw); FluentResource(nsISupports* aParent, const nsACString& aSource); diff --git a/intl/l10n/L10nRegistry.h b/intl/l10n/L10nRegistry.h index c152009f2d994..91047ec99c91e 100644 --- a/intl/l10n/L10nRegistry.h +++ b/intl/l10n/L10nRegistry.h @@ -26,7 +26,7 @@ namespace mozilla::intl { class FluentBundleAsyncIterator final : public nsWrapperCache { public: NS_INLINE_DECL_CYCLE_COLLECTING_NATIVE_REFCOUNTING(FluentBundleAsyncIterator) - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_NATIVE_CLASS(FluentBundleAsyncIterator) + NS_DECL_CYCLE_COLLECTION_NATIVE_WRAPPERCACHE_CLASS(FluentBundleAsyncIterator)
FluentBundleAsyncIterator( nsIGlobalObject* aGlobal, @@ -49,7 +49,7 @@ class FluentBundleAsyncIterator final : public nsWrapperCache { class FluentBundleIterator final : public nsWrapperCache { public: NS_INLINE_DECL_CYCLE_COLLECTING_NATIVE_REFCOUNTING(FluentBundleIterator) - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_NATIVE_CLASS(FluentBundleIterator) + NS_DECL_CYCLE_COLLECTION_NATIVE_WRAPPERCACHE_CLASS(FluentBundleIterator)
FluentBundleIterator(nsIGlobalObject* aGlobal, UniquePtrffi::GeckoFluentBundleIterator aRaw); @@ -71,7 +71,7 @@ class FluentBundleIterator final : public nsWrapperCache { class L10nRegistry final : public nsWrapperCache { public: NS_INLINE_DECL_CYCLE_COLLECTING_NATIVE_REFCOUNTING(L10nRegistry) - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_NATIVE_CLASS(L10nRegistry) + NS_DECL_CYCLE_COLLECTION_NATIVE_WRAPPERCACHE_CLASS(L10nRegistry)
L10nRegistry(nsIGlobalObject* aGlobal, bool aUseIsolating);
diff --git a/intl/l10n/Localization.h b/intl/l10n/Localization.h index dc05bff07b5b2..54c78f68dbe77 100644 --- a/intl/l10n/Localization.h +++ b/intl/l10n/Localization.h @@ -80,8 +80,8 @@ class Localization : public nsIObserver,
public: NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS_AMBIGUOUS(Localization, - nsIObserver) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS_AMBIGUOUS(Localization, + nsIObserver) NS_DECL_NSIOBSERVER
static already_AddRefed<Localization> Constructor( diff --git a/js/loader/ModuleLoadRequest.cpp b/js/loader/ModuleLoadRequest.cpp index 92aca5048aa00..126f02f39240d 100644 --- a/js/loader/ModuleLoadRequest.cpp +++ b/js/loader/ModuleLoadRequest.cpp @@ -23,7 +23,7 @@ namespace JS::loader { NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(ModuleLoadRequest) NS_INTERFACE_MAP_END_INHERITING(ScriptLoadRequest)
-NS_IMPL_CYCLE_COLLECTION_MULTI_ZONE_JSHOLDER_CLASS(ModuleLoadRequest) +NS_IMPL_CYCLE_COLLECTION_CLASS(ModuleLoadRequest)
NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN_INHERITED(ModuleLoadRequest, ScriptLoadRequest) diff --git a/js/xpconnect/loader/PrecompiledScript.h b/js/xpconnect/loader/PrecompiledScript.h index c9073711eba28..f9d3d6e2d24b0 100644 --- a/js/xpconnect/loader/PrecompiledScript.h +++ b/js/xpconnect/loader/PrecompiledScript.h @@ -26,7 +26,7 @@ namespace mozilla { namespace dom { class PrecompiledScript : public nsISupports, public nsWrapperCache { NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SKIPPABLE_SCRIPT_HOLDER_CLASS(PrecompiledScript) + NS_DECL_CYCLE_COLLECTION_SKIPPABLE_WRAPPERCACHE_CLASS(PrecompiledScript)
explicit PrecompiledScript(nsISupports* aParent, RefPtrJS::Stencil aStencil, JS::ReadOnlyCompileOptions& aOptions); diff --git a/js/xpconnect/src/Sandbox.cpp b/js/xpconnect/src/Sandbox.cpp index a1b79335fe064..52f1e9b5e6c2e 100644 --- a/js/xpconnect/src/Sandbox.cpp +++ b/js/xpconnect/src/Sandbox.cpp @@ -105,7 +105,7 @@ using namespace xpc; using mozilla::dom::DestroyProtoAndIfaceCache; using mozilla::dom::IndexedDatabaseManager;
-NS_IMPL_CYCLE_COLLECTION_CLASS(SandboxPrivate) +NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(SandboxPrivate)
NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(SandboxPrivate) NS_IMPL_CYCLE_COLLECTION_UNLINK_PRESERVED_WRAPPER @@ -120,8 +120,6 @@ NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(SandboxPrivate) tmp->TraverseObjectsInGlobal(cb); NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
-NS_IMPL_CYCLE_COLLECTION_TRACE_WRAPPERCACHE(SandboxPrivate) - NS_IMPL_CYCLE_COLLECTING_ADDREF(SandboxPrivate) NS_IMPL_CYCLE_COLLECTING_RELEASE(SandboxPrivate) NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(SandboxPrivate) diff --git a/js/xpconnect/src/SandboxPrivate.h b/js/xpconnect/src/SandboxPrivate.h index b685df6882f5d..be5119d70d4ca 100644 --- a/js/xpconnect/src/SandboxPrivate.h +++ b/js/xpconnect/src/SandboxPrivate.h @@ -30,8 +30,8 @@ class SandboxPrivate : public nsIGlobalObject, public nsWrapperCache { public: NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS_AMBIGUOUS(SandboxPrivate, - nsIGlobalObject) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS_AMBIGUOUS(SandboxPrivate, + nsIGlobalObject)
static void Create(nsIPrincipal* principal, JS::Handle<JSObject*> global) { RefPtr<SandboxPrivate> sbp = new SandboxPrivate(principal); diff --git a/layout/style/CSSKeyframeRule.cpp b/layout/style/CSSKeyframeRule.cpp index 67348c343d66e..ac9087e1c5a28 100644 --- a/layout/style/CSSKeyframeRule.cpp +++ b/layout/style/CSSKeyframeRule.cpp @@ -25,8 +25,8 @@ class CSSKeyframeDeclaration : public nsDOMCSSDeclaration { }
NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS_AMBIGUOUS(CSSKeyframeDeclaration, - nsICSSDeclaration) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS_AMBIGUOUS(CSSKeyframeDeclaration, + nsICSSDeclaration)
css::Rule* GetParentRule() final { return mRule; }
diff --git a/layout/style/CSSRuleList.h b/layout/style/CSSRuleList.h index ebf5bec90d2d9..b3802233d03da 100644 --- a/layout/style/CSSRuleList.h +++ b/layout/style/CSSRuleList.h @@ -16,7 +16,7 @@ namespace mozilla::dom { class CSSRuleList : public nsISupports, public nsWrapperCache { public: NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(CSSRuleList) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(CSSRuleList)
virtual StyleSheet* GetParentObject() = 0; JSObject* WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto) final; diff --git a/layout/style/MediaList.h b/layout/style/MediaList.h index 674d17485d5d0..046b0b1502fe5 100644 --- a/layout/style/MediaList.h +++ b/layout/style/MediaList.h @@ -28,7 +28,7 @@ class Document; class MediaList final : public nsISupports, public nsWrapperCache { public: NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(MediaList) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(MediaList)
// Needed for CSSOM, but please don't use it outside of that :) explicit MediaList(already_AddRefed<RawServoMediaList> aRawList) diff --git a/layout/style/Rule.h b/layout/style/Rule.h index 4bc84121d55f9..fb24a5eaae9d9 100644 --- a/layout/style/Rule.h +++ b/layout/style/Rule.h @@ -55,7 +55,7 @@ class Rule : public nsISupports, public nsWrapperCache {
public: NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SKIPPABLE_SCRIPT_HOLDER_CLASS(Rule) + NS_DECL_CYCLE_COLLECTION_SKIPPABLE_WRAPPERCACHE_CLASS(Rule) // Return true if this rule is known to be a cycle collection leaf, in the // sense that it doesn't have any outgoing owning edges. virtual bool IsCCLeaf() const MOZ_MUST_OVERRIDE; diff --git a/layout/style/StyleSheet.cpp b/layout/style/StyleSheet.cpp index 7e62ec6c1bd60..df4d81dc08217 100644 --- a/layout/style/StyleSheet.cpp +++ b/layout/style/StyleSheet.cpp @@ -248,7 +248,7 @@ NS_IMPL_CYCLE_COLLECTING_ADDREF(StyleSheet) // away. This situation arises easily with sheet preloading. NS_IMPL_CYCLE_COLLECTING_RELEASE_WITH_LAST_RELEASE(StyleSheet, LastRelease())
-NS_IMPL_CYCLE_COLLECTION_CLASS(StyleSheet) +NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(StyleSheet)
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(StyleSheet) NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mMedia) @@ -269,8 +269,6 @@ NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(StyleSheet) NS_IMPL_CYCLE_COLLECTION_UNLINK_PRESERVED_WRAPPER NS_IMPL_CYCLE_COLLECTION_UNLINK_END
-NS_IMPL_CYCLE_COLLECTION_TRACE_WRAPPERCACHE(StyleSheet) - dom::CSSStyleSheetParsingMode StyleSheet::ParsingModeDOM() { #define CHECK_MODE(X, Y) \ static_assert( \ diff --git a/layout/style/StyleSheet.h b/layout/style/StyleSheet.h index d68f1a0cac336..312238d0899ff 100644 --- a/layout/style/StyleSheet.h +++ b/layout/style/StyleSheet.h @@ -102,7 +102,7 @@ class StyleSheet final : public nsICSSLoaderObserver, public nsWrapperCache { ErrorResult&);
NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(StyleSheet) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(StyleSheet)
already_AddRefed<StyleSheet> CreateEmptyChildSheet( already_AddRefeddom::MediaList aMediaList) const; diff --git a/layout/style/nsComputedDOMStyle.cpp b/layout/style/nsComputedDOMStyle.cpp index ecc09f54eacd5..6e2bdcf92238b 100644 --- a/layout/style/nsComputedDOMStyle.cpp +++ b/layout/style/nsComputedDOMStyle.cpp @@ -364,7 +364,7 @@ nsComputedDOMStyle::~nsComputedDOMStyle() { "Should have called ClearComputedStyle() during last release."); }
-NS_IMPL_CYCLE_COLLECTION_CLASS(nsComputedDOMStyle) +NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(nsComputedDOMStyle)
NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(nsComputedDOMStyle) tmp->ClearComputedStyle(); // remove observer before clearing mElement @@ -376,8 +376,6 @@ NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(nsComputedDOMStyle) NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mElement) NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
-NS_IMPL_CYCLE_COLLECTION_TRACE_WRAPPERCACHE(nsComputedDOMStyle) - NS_IMPL_CYCLE_COLLECTION_CAN_SKIP_BEGIN(nsComputedDOMStyle) return tmp->HasKnownLiveWrapper(); NS_IMPL_CYCLE_COLLECTION_CAN_SKIP_END diff --git a/layout/style/nsComputedDOMStyle.h b/layout/style/nsComputedDOMStyle.h index 492326129cbaf..16fe0729c49a0 100644 --- a/layout/style/nsComputedDOMStyle.h +++ b/layout/style/nsComputedDOMStyle.h @@ -66,7 +66,7 @@ class nsComputedDOMStyle final : public nsDOMCSSDeclaration,
public: NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SKIPPABLE_SCRIPT_HOLDER_CLASS_AMBIGUOUS( + NS_DECL_CYCLE_COLLECTION_SKIPPABLE_WRAPPERCACHE_CLASS_AMBIGUOUS( nsComputedDOMStyle, nsICSSDeclaration)
NS_DECL_NSIDOMCSSSTYLEDECLARATION_HELPER diff --git a/layout/style/nsDOMCSSAttrDeclaration.h b/layout/style/nsDOMCSSAttrDeclaration.h index 1db4e019376ff..15a963342b4dd 100644 --- a/layout/style/nsDOMCSSAttrDeclaration.h +++ b/layout/style/nsDOMCSSAttrDeclaration.h @@ -36,7 +36,7 @@ class nsDOMCSSAttributeDeclaration final : public nsDOMCSSDeclaration { nsDOMCSSAttributeDeclaration(Element* aContent, bool aIsSMILOverride);
NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SKIPPABLE_SCRIPT_HOLDER_CLASS_AMBIGUOUS( + NS_DECL_CYCLE_COLLECTION_SKIPPABLE_WRAPPERCACHE_CLASS_AMBIGUOUS( nsDOMCSSAttributeDeclaration, nsICSSDeclaration)
mozilla::DeclarationBlock* GetOrCreateCSSDeclaration( diff --git a/layout/xul/tree/nsTreeColumns.cpp b/layout/xul/tree/nsTreeColumns.cpp index baf711c9aa82a..77f63f0394194 100644 --- a/layout/xul/tree/nsTreeColumns.cpp +++ b/layout/xul/tree/nsTreeColumns.cpp @@ -36,7 +36,7 @@ nsTreeColumn::~nsTreeColumn() { } }
-NS_IMPL_CYCLE_COLLECTION_CLASS(nsTreeColumn) +NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(nsTreeColumn)
NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(nsTreeColumn) NS_IMPL_CYCLE_COLLECTION_UNLINK_PRESERVED_WRAPPER @@ -50,7 +50,6 @@ NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(nsTreeColumn) NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mContent) NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mNext) NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END -NS_IMPL_CYCLE_COLLECTION_TRACE_WRAPPERCACHE(nsTreeColumn)
NS_IMPL_CYCLE_COLLECTING_ADDREF(nsTreeColumn) NS_IMPL_CYCLE_COLLECTING_RELEASE(nsTreeColumn) diff --git a/layout/xul/tree/nsTreeColumns.h b/layout/xul/tree/nsTreeColumns.h index 2c86fd0428779..9f2d7989db437 100644 --- a/layout/xul/tree/nsTreeColumns.h +++ b/layout/xul/tree/nsTreeColumns.h @@ -48,7 +48,7 @@ class nsTreeColumn final : public nsISupports, public nsWrapperCache { NS_DECLARE_STATIC_IID_ACCESSOR(NS_TREECOLUMN_IMPL_CID)
NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(nsTreeColumn) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(nsTreeColumn)
// WebIDL nsIContent* GetParentObject() const; @@ -158,7 +158,7 @@ class nsTreeColumns final : public nsISupports, public nsWrapperCache { explicit nsTreeColumns(nsTreeBodyFrame* aTree);
NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(nsTreeColumns) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(nsTreeColumns)
nsIContent* GetParentObject() const; virtual JSObject* WrapObject(JSContext* aCx, diff --git a/layout/xul/tree/nsTreeContentView.h b/layout/xul/tree/nsTreeContentView.h index 30716e6922f3c..8138ab44fc32d 100644 --- a/layout/xul/tree/nsTreeContentView.h +++ b/layout/xul/tree/nsTreeContentView.h @@ -42,8 +42,8 @@ class nsTreeContentView final : public nsITreeView, nsTreeContentView(void);
NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS_AMBIGUOUS(nsTreeContentView, - nsITreeView) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS_AMBIGUOUS(nsTreeContentView, + nsITreeView)
virtual JSObject* WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto) override; diff --git a/storage/mozStorageAsyncStatementParams.h b/storage/mozStorageAsyncStatementParams.h index 4c6f97052c87a..c72afc2bc3be5 100644 --- a/storage/mozStorageAsyncStatementParams.h +++ b/storage/mozStorageAsyncStatementParams.h @@ -21,7 +21,7 @@ class AsyncStatement; class AsyncStatementParams final : public nsISupports, public nsWrapperCache { public: NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(AsyncStatementParams) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(AsyncStatementParams)
explicit AsyncStatementParams(nsPIDOMWindowInner* aWindow, AsyncStatement* aStatement); diff --git a/storage/mozStorageStatementParams.h b/storage/mozStorageStatementParams.h index 647e111b42ec5..6164f9854e7ed 100644 --- a/storage/mozStorageStatementParams.h +++ b/storage/mozStorageStatementParams.h @@ -21,7 +21,7 @@ class Statement; class StatementParams final : public nsISupports, public nsWrapperCache { public: NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(StatementParams) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(StatementParams)
explicit StatementParams(nsPIDOMWindowInner* aWindow, Statement* aStatement);
diff --git a/storage/mozStorageStatementRow.h b/storage/mozStorageStatementRow.h index 02c43749c630d..319645638d658 100644 --- a/storage/mozStorageStatementRow.h +++ b/storage/mozStorageStatementRow.h @@ -21,7 +21,7 @@ class Statement; class StatementRow final : public nsISupports, public nsWrapperCache { public: NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(StatementRow) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(StatementRow)
explicit StatementRow(nsPIDOMWindowInner* aWindow, Statement* aStatement);
diff --git a/toolkit/components/extensions/DocumentObserver.h b/toolkit/components/extensions/DocumentObserver.h index 3ed2b5c203c73..b9b0dc6f78342 100644 --- a/toolkit/components/extensions/DocumentObserver.h +++ b/toolkit/components/extensions/DocumentObserver.h @@ -19,7 +19,7 @@ namespace extensions {
class DocumentObserver final : public nsISupports, public nsWrapperCache { NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(DocumentObserver) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(DocumentObserver)
static already_AddRefed<DocumentObserver> Constructor( dom::GlobalObject& aGlobal, dom::MozDocumentCallback& aCallbacks); diff --git a/toolkit/components/extensions/MatchPattern.h b/toolkit/components/extensions/MatchPattern.h index 1aa28242df826..f0ba13b141e04 100644 --- a/toolkit/components/extensions/MatchPattern.h +++ b/toolkit/components/extensions/MatchPattern.h @@ -191,7 +191,7 @@ class MOZ_STACK_CLASS CookieInfo final {
class MatchPattern final : public nsISupports, public nsWrapperCache { NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(MatchPattern) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(MatchPattern)
static already_AddRefed<MatchPattern> Constructor( dom::GlobalObject& aGlobal, const nsAString& aPattern, @@ -265,7 +265,7 @@ class MatchPattern final : public nsISupports, public nsWrapperCache {
class MatchPatternSet final : public nsISupports, public nsWrapperCache { NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(MatchPatternSet) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(MatchPatternSet)
using ArrayType = nsTArray<RefPtr<MatchPattern>>;
diff --git a/toolkit/components/extensions/WebExtensionContentScript.h b/toolkit/components/extensions/WebExtensionContentScript.h index 046d141020e6b..3205be1292bd3 100644 --- a/toolkit/components/extensions/WebExtensionContentScript.h +++ b/toolkit/components/extensions/WebExtensionContentScript.h @@ -104,7 +104,7 @@ class MOZ_STACK_CLASS DocInfo final {
class MozDocumentMatcher : public nsISupports, public nsWrapperCache { NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(MozDocumentMatcher) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(MozDocumentMatcher)
using MatchGlobArray = nsTArray<RefPtr<MatchGlob>>;
diff --git a/toolkit/components/extensions/WebExtensionPolicy.h b/toolkit/components/extensions/WebExtensionPolicy.h index bb34d048614be..07cbd0d03c380 100644 --- a/toolkit/components/extensions/WebExtensionPolicy.h +++ b/toolkit/components/extensions/WebExtensionPolicy.h @@ -67,7 +67,7 @@ class WebExtensionPolicy final : public nsISupports, public SupportsWeakPtr { public: NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(WebExtensionPolicy) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(WebExtensionPolicy)
using ScriptArray = nsTArray<RefPtr<WebExtensionContentScript>>;
diff --git a/toolkit/components/extensions/webidl-api/ExtensionAlarms.h b/toolkit/components/extensions/webidl-api/ExtensionAlarms.h index f0efd734417ed..19681a5706312 100644 --- a/toolkit/components/extensions/webidl-api/ExtensionAlarms.h +++ b/toolkit/components/extensions/webidl-api/ExtensionAlarms.h @@ -60,7 +60,7 @@ class ExtensionAlarms final : public nsISupports, ExtensionEventManager* OnAlarm();
NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(ExtensionAlarms) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(ExtensionAlarms) };
} // namespace extensions diff --git a/toolkit/components/extensions/webidl-api/ExtensionMockAPI.h b/toolkit/components/extensions/webidl-api/ExtensionMockAPI.h index cb138ffe40cd6..c203c2755a1a1 100644 --- a/toolkit/components/extensions/webidl-api/ExtensionMockAPI.h +++ b/toolkit/components/extensions/webidl-api/ExtensionMockAPI.h @@ -68,7 +68,7 @@ class ExtensionMockAPI final : public nsISupports, ExtensionEventManager* OnTestEvent();
NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(ExtensionMockAPI) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(ExtensionMockAPI) };
} // namespace extensions diff --git a/toolkit/components/extensions/webidl-api/ExtensionPort.cpp b/toolkit/components/extensions/webidl-api/ExtensionPort.cpp index ebefd5fc77a34..481e15387c0ef 100644 --- a/toolkit/components/extensions/webidl-api/ExtensionPort.cpp +++ b/toolkit/components/extensions/webidl-api/ExtensionPort.cpp @@ -17,7 +17,7 @@ namespace extensions { NS_IMPL_CYCLE_COLLECTING_ADDREF(ExtensionPort); NS_IMPL_CYCLE_COLLECTING_RELEASE(ExtensionPort)
-NS_IMPL_CYCLE_COLLECTION_CLASS(ExtensionPort) +NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(ExtensionPort)
NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(ExtensionPort) // Clean the entry for this instance from the ports lookup map @@ -34,8 +34,6 @@ NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(ExtensionPort) mOnMessageEventMgr) NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
-NS_IMPL_CYCLE_COLLECTION_TRACE_WRAPPERCACHE(ExtensionPort) - NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(ExtensionPort) NS_WRAPPERCACHE_INTERFACE_MAP_ENTRY NS_INTERFACE_MAP_ENTRY(nsISupports) diff --git a/toolkit/components/extensions/webidl-api/ExtensionPort.h b/toolkit/components/extensions/webidl-api/ExtensionPort.h index d50ad6a8b1f10..251c4b9aaabd3 100644 --- a/toolkit/components/extensions/webidl-api/ExtensionPort.h +++ b/toolkit/components/extensions/webidl-api/ExtensionPort.h @@ -84,7 +84,7 @@ class ExtensionPort final : public nsISupports, };
NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(ExtensionPort) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(ExtensionPort) };
} // namespace extensions diff --git a/toolkit/components/extensions/webidl-api/ExtensionRuntime.h b/toolkit/components/extensions/webidl-api/ExtensionRuntime.h index ef668c5ea3e11..b38947317bb3c 100644 --- a/toolkit/components/extensions/webidl-api/ExtensionRuntime.h +++ b/toolkit/components/extensions/webidl-api/ExtensionRuntime.h @@ -75,7 +75,7 @@ class ExtensionRuntime final : public nsISupports, void GetId(DOMString& aRetval);
NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(ExtensionRuntime) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(ExtensionRuntime) };
} // namespace extensions diff --git a/toolkit/components/extensions/webidl-api/ExtensionTest.h b/toolkit/components/extensions/webidl-api/ExtensionTest.h index aed0d6ff0a6bf..917ed2603be14 100644 --- a/toolkit/components/extensions/webidl-api/ExtensionTest.h +++ b/toolkit/components/extensions/webidl-api/ExtensionTest.h @@ -92,7 +92,7 @@ class ExtensionTest final : public nsISupports, ExtensionEventManager* OnMessage();
NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(ExtensionTest) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(ExtensionTest) };
} // namespace extensions diff --git a/toolkit/components/extensions/webrequest/ChannelWrapper.cpp b/toolkit/components/extensions/webrequest/ChannelWrapper.cpp index 2bddf9eea521f..61d795ada0cba 100644 --- a/toolkit/components/extensions/webrequest/ChannelWrapper.cpp +++ b/toolkit/components/extensions/webrequest/ChannelWrapper.cpp @@ -1240,10 +1240,6 @@ NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN_INHERITED(ChannelWrapper, NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mStub) NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
-NS_IMPL_CYCLE_COLLECTION_TRACE_BEGIN_INHERITED(ChannelWrapper, - DOMEventTargetHelper) -NS_IMPL_CYCLE_COLLECTION_TRACE_END - NS_IMPL_ADDREF_INHERITED(ChannelWrapper, DOMEventTargetHelper) NS_IMPL_RELEASE_INHERITED(ChannelWrapper, DOMEventTargetHelper)
diff --git a/toolkit/components/extensions/webrequest/ChannelWrapper.h b/toolkit/components/extensions/webrequest/ChannelWrapper.h index c39dc076f3656..235ee54d64495 100644 --- a/toolkit/components/extensions/webrequest/ChannelWrapper.h +++ b/toolkit/components/extensions/webrequest/ChannelWrapper.h @@ -116,8 +116,7 @@ class ChannelWrapper final : public DOMEventTargetHelper, private detail::ChannelHolder { public: NS_DECL_ISUPPORTS_INHERITED - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS_INHERITED(ChannelWrapper, - DOMEventTargetHelper) + NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(ChannelWrapper, DOMEventTargetHelper)
NS_DECLARE_STATIC_IID_ACCESSOR(NS_CHANNELWRAPPER_IID)
diff --git a/toolkit/components/glean/bindings/Category.h b/toolkit/components/glean/bindings/Category.h index 55c7e2d30be2b..47cdef4a1a9d0 100644 --- a/toolkit/components/glean/bindings/Category.h +++ b/toolkit/components/glean/bindings/Category.h @@ -17,7 +17,7 @@ namespace mozilla::glean { class Category final : public nsISupports, public nsWrapperCache { public: NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(Category) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(Category)
JSObject* WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto) override; diff --git a/toolkit/components/glean/bindings/Glean.h b/toolkit/components/glean/bindings/Glean.h index 83e0fa9edac15..54d300d682f35 100644 --- a/toolkit/components/glean/bindings/Glean.h +++ b/toolkit/components/glean/bindings/Glean.h @@ -19,7 +19,7 @@ class Category; class Glean final : public nsISupports, public nsWrapperCache { public: NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(Glean) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(Glean)
JSObject* WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto) override; diff --git a/toolkit/components/glean/bindings/GleanPings.h b/toolkit/components/glean/bindings/GleanPings.h index 55eb1c4c9b860..2dd1ff4b83c32 100644 --- a/toolkit/components/glean/bindings/GleanPings.h +++ b/toolkit/components/glean/bindings/GleanPings.h @@ -17,7 +17,7 @@ namespace mozilla::glean { class GleanPings final : public nsISupports, public nsWrapperCache { public: NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(GleanPings) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(GleanPings)
JSObject* WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto) override; diff --git a/toolkit/components/glean/bindings/private/Labeled.h b/toolkit/components/glean/bindings/private/Labeled.h index 474c9978a21e7..be46b3b56eab0 100644 --- a/toolkit/components/glean/bindings/private/Labeled.h +++ b/toolkit/components/glean/bindings/private/Labeled.h @@ -49,7 +49,7 @@ class Labeled { class GleanLabeled final : public nsISupports, public nsWrapperCache { public: NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(GleanLabeled) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(GleanLabeled)
JSObject* WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto) override; diff --git a/toolkit/components/sessionstore/SessionStoreFormData.h b/toolkit/components/sessionstore/SessionStoreFormData.h index 029130a999fd6..fd9f925fcc8db 100644 --- a/toolkit/components/sessionstore/SessionStoreFormData.h +++ b/toolkit/components/sessionstore/SessionStoreFormData.h @@ -36,7 +36,7 @@ class SessionStoreFormData final : public nsISupports, using ChildrenArray = nsTArray<RefPtr<SessionStoreFormData>>;
NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(SessionStoreFormData) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(SessionStoreFormData) nsISupports* GetParentObject() const; JSObject* WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto) override; diff --git a/toolkit/components/sessionstore/SessionStoreScrollData.h b/toolkit/components/sessionstore/SessionStoreScrollData.h index fbdf82954d665..22dd7e19e5aad 100644 --- a/toolkit/components/sessionstore/SessionStoreScrollData.h +++ b/toolkit/components/sessionstore/SessionStoreScrollData.h @@ -28,7 +28,7 @@ class SessionStoreScrollData final : public nsISupports, using ChildrenArray = nsTArray<RefPtr<SessionStoreScrollData>>;
NS_DECL_CYCLE_COLLECTING_ISUPPORTS - NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(SessionStoreScrollData) + NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(SessionStoreScrollData) nsISupports* GetParentObject() const; JSObject* WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto) override; diff --git a/xpcom/base/CycleCollectedJSRuntime.cpp b/xpcom/base/CycleCollectedJSRuntime.cpp index 5f9318fbd082b..d21fd2152429b 100644 --- a/xpcom/base/CycleCollectedJSRuntime.cpp +++ b/xpcom/base/CycleCollectedJSRuntime.cpp @@ -604,7 +604,7 @@ void JSHolderMap::Put(void* aHolder, nsScriptObjectTracer* aTracer, MOZ_ASSERT(aTracer);
// Don't associate multi-zone holders with a zone, even if one is supplied. - if (aTracer->IsMultiZoneJSHolder()) { + if (!aTracer->IsSingleZoneJSHolder()) { aZone = nullptr; }
@@ -1317,14 +1317,8 @@ struct CheckZoneTracer : public TraceCallbacks { // Additionally, pointers from any holder into the atoms zone are allowed // since all holders are traced when we collect the atoms zone. // - // If you added a holder that has pointers into multiple zones please try to - // remedy this. Some options are: - // - // - wrap all JS GC things into the same compartment - // - split GC thing pointers between separate cycle collected objects - // - // If all else fails, flag the class as containing pointers into multiple - // zones by using NS_IMPL_CYCLE_COLLECTION_MULTI_ZONE_JSHOLDER_CLASS. + // If you added a holder that has pointers into multiple zones do not + // use NS_IMPL_CYCLE_COLLECTION_SINGLE_ZONE_SCRIPT_HOLDER_CLASS. MOZ_CRASH_UNSAFE_PRINTF( "JS holder %s contains pointers to GC things in more than one zone (" "found in %s)\n", @@ -1453,7 +1447,7 @@ bool CycleCollectedJSRuntime::TraceJSHolders(JSTracer* aTracer, nsScriptObjectTracer* tracer = aIter->mTracer;
#ifdef CHECK_SINGLE_ZONE_JS_HOLDERS - if (checkSingleZoneHolders && !tracer->IsMultiZoneJSHolder()) { + if (checkSingleZoneHolders && tracer->IsSingleZoneJSHolder()) { CheckHolderIsSingleZone(holder, tracer, aIter.Zone()); } #else diff --git a/xpcom/base/nsCycleCollectionParticipant.h b/xpcom/base/nsCycleCollectionParticipant.h index fc813e5fcd2cd..1dcafb470de33 100644 --- a/xpcom/base/nsCycleCollectionParticipant.h +++ b/xpcom/base/nsCycleCollectionParticipant.h @@ -206,9 +206,14 @@ class NS_NO_VTABLE nsCycleCollectionParticipant { using Flags = uint8_t; static constexpr Flags FlagMightSkip = 1u << 0; static constexpr Flags FlagTraverseShouldTrace = 1u << 1; - static constexpr Flags FlagMultiZoneJSHolder = 1u << 2; - static constexpr Flags AllFlags = - FlagMightSkip | FlagTraverseShouldTrace | FlagMultiZoneJSHolder; + // The object is a single zone js holder if FlagMaybeSingleZoneJSHolder is set + // and FlagMultiZoneJSHolder isn't set. This setup is needed so that + // inheriting classes can unset single zone behavior. + static constexpr Flags FlagMaybeSingleZoneJSHolder = 1u << 2; + static constexpr Flags FlagMultiZoneJSHolder = 1u << 3; + static constexpr Flags AllFlags = FlagMightSkip | FlagTraverseShouldTrace | + FlagMaybeSingleZoneJSHolder | + FlagMultiZoneJSHolder;
constexpr explicit nsCycleCollectionParticipant(Flags aFlags) : mFlags(aFlags) { @@ -309,7 +314,10 @@ class NS_NO_VTABLE nsCycleCollectionParticipant {
NS_IMETHOD_(void) DeleteCycleCollectable(void* aPtr) = 0;
- bool IsMultiZoneJSHolder() const { return mFlags & FlagMultiZoneJSHolder; } + bool IsSingleZoneJSHolder() const { + return (mFlags & FlagMaybeSingleZoneJSHolder) && + !(mFlags & FlagMultiZoneJSHolder); + }
protected: NS_IMETHOD_(bool) CanSkipReal(void* aPtr, bool aRemovingAllowed) { @@ -782,7 +790,8 @@ T* DowncastCCParticipant(void* aPtr) { : public NS_CYCLE_COLLECTION_CLASSNAME(_base_class) { \ public: \ constexpr explicit NS_CYCLE_COLLECTION_INNERCLASS( \ - Flags aFlags = FlagMightSkip) /* We always want skippability. */ \ + Flags aFlags = FlagMightSkip | /* We always want skippability. */ \ + FlagMultiZoneJSHolder) \ : NS_CYCLE_COLLECTION_CLASSNAME(_base_class)(aFlags | FlagMightSkip) { \ } \ \ @@ -826,21 +835,22 @@ T* DowncastCCParticipant(void* aPtr) { NS_CHECK_FOR_RIGHT_PARTICIPANT_IMPL_INHERITED(_class) \ static NS_CYCLE_COLLECTION_INNERCLASS NS_CYCLE_COLLECTION_INNERNAME;
-#define NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS_INHERITED(_class, \ - _base_class) \ - class NS_CYCLE_COLLECTION_INNERCLASS \ - : public NS_CYCLE_COLLECTION_CLASSNAME(_base_class) { \ - public: \ - constexpr explicit NS_CYCLE_COLLECTION_INNERCLASS(Flags aFlags = 0) \ - : NS_CYCLE_COLLECTION_CLASSNAME(_base_class)(aFlags) {} \ - \ - private: \ - NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED_BODY(_class, _base_class) \ - NS_IMETHOD_(void) \ - Trace(void* p, const TraceCallbacks& cb, void* closure) override; \ - NS_IMPL_GET_XPCOM_CYCLE_COLLECTION_PARTICIPANT(_class) \ - }; \ - NS_CHECK_FOR_RIGHT_PARTICIPANT_IMPL_INHERITED(_class) \ +#define NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS_INHERITED(_class, \ + _base_class) \ + class NS_CYCLE_COLLECTION_INNERCLASS \ + : public NS_CYCLE_COLLECTION_CLASSNAME(_base_class) { \ + public: \ + constexpr explicit NS_CYCLE_COLLECTION_INNERCLASS(Flags aFlags = 0) \ + : NS_CYCLE_COLLECTION_CLASSNAME(_base_class)(aFlags | \ + FlagMultiZoneJSHolder) {} \ + \ + private: \ + NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED_BODY(_class, _base_class) \ + NS_IMETHOD_(void) \ + Trace(void* p, const TraceCallbacks& cb, void* closure) override; \ + NS_IMPL_GET_XPCOM_CYCLE_COLLECTION_PARTICIPANT(_class) \ + }; \ + NS_CHECK_FOR_RIGHT_PARTICIPANT_IMPL_INHERITED(_class) \ static NS_CYCLE_COLLECTION_INNERCLASS NS_CYCLE_COLLECTION_INNERNAME;
// Cycle collector participant declarations. @@ -947,13 +957,12 @@ T* DowncastCCParticipant(void* aPtr) { #define NS_IMPL_CYCLE_COLLECTION_CLASS(_class) \ _class::NS_CYCLE_COLLECTION_INNERCLASS _class::NS_CYCLE_COLLECTION_INNERNAME;
-// Most JS holder classes should only contain pointers to JS GC things in a -// single JS zone (excluding pointers into the atoms zone), but there are some -// exceptions. Such classes should use this macro to tell the system about this. -#define NS_IMPL_CYCLE_COLLECTION_MULTI_ZONE_JSHOLDER_CLASS(_class) \ - _class::NS_CYCLE_COLLECTION_INNERCLASS \ - _class::NS_CYCLE_COLLECTION_INNERNAME( \ - nsCycleCollectionParticipant::FlagMultiZoneJSHolder); +// By default JS holders are treated as if they may store pointers to multiple +// zones, but one may optimize GC handling by using single zone holders. +#define NS_IMPL_CYCLE_COLLECTION_SINGLE_ZONE_SCRIPT_HOLDER_CLASS(_class) \ + _class::NS_CYCLE_COLLECTION_INNERCLASS \ + _class::NS_CYCLE_COLLECTION_INNERNAME( \ + nsCycleCollectionParticipant::FlagMaybeSingleZoneJSHolder);
// NB: This is not something you usually want to use. It is here to allow // adding things to the CC graph to help debugging via CC logs, but it does not @@ -1048,6 +1057,7 @@ inline void ImplCycleCollectionUnlink(JS::Heap<T*>& aField) { }
#define NS_IMPL_CYCLE_COLLECTION_TRACE_JS_MEMBERS(...) \ + MOZ_ASSERT(!IsSingleZoneJSHolder()); \ MOZ_FOR_EACH(NS_IMPL_CYCLE_COLLECTION_TRACE_JS_MEMBER_CALLBACK, (), \ (__VA_ARGS__))
diff --git a/xpcom/base/nsCycleCollector.cpp b/xpcom/base/nsCycleCollector.cpp index 980b7d42addc5..b79e93cb4b892 100644 --- a/xpcom/base/nsCycleCollector.cpp +++ b/xpcom/base/nsCycleCollector.cpp @@ -2350,7 +2350,7 @@ class JSPurpleBuffer { SegmentedVector<JSObject*, kSegmentSize, InfallibleAllocPolicy> mObjects; };
-NS_IMPL_CYCLE_COLLECTION_MULTI_ZONE_JSHOLDER_CLASS(JSPurpleBuffer) +NS_IMPL_CYCLE_COLLECTION_CLASS(JSPurpleBuffer)
NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(JSPurpleBuffer) tmp->Destroy(); diff --git a/xpcom/tests/gtest/TestJSHolderMap.cpp b/xpcom/tests/gtest/TestJSHolderMap.cpp index 247a63d3b700d..20e99b05eeaf2 100644 --- a/xpcom/tests/gtest/TestJSHolderMap.cpp +++ b/xpcom/tests/gtest/TestJSHolderMap.cpp @@ -43,7 +43,8 @@ class MyHolder final : public nsScriptObjectTracer {
private: Flags FlagsForKind(HolderKind kind) { - return kind == MultiZone ? FlagMultiZoneJSHolder : 0; + return kind == MultiZone ? FlagMultiZoneJSHolder + : FlagMaybeSingleZoneJSHolder; } };
This is an automated email from the git hooks/post-receive script.
richard pushed a commit to branch geckoview-102.3.0esr-12.0-1 in repository tor-browser.
commit 5fbf64d96f02c248af50ad5ac56ea957bb763fcf Author: Valentin Gosu valentin.gosu@gmail.com AuthorDate: Wed Sep 7 19:04:22 2022 +0000
Bug 1779993 - Reject cookies with no name and a __Secure- or __Host- prefix r=necko-reviewers,kershaw a=RyanVM
Differential Revision: https://phabricator.services.mozilla.com/D156554 --- netwerk/cookie/CookieService.cpp | 33 ++++++++++++++++++++++++++++++++- netwerk/cookie/CookieService.h | 1 + netwerk/test/gtest/TestCookie.cpp | 26 ++++++++++++++++++++++++++ 3 files changed, 59 insertions(+), 1 deletion(-)
diff --git a/netwerk/cookie/CookieService.cpp b/netwerk/cookie/CookieService.cpp index b3fbe1c327cf9..9947a87ad89db 100644 --- a/netwerk/cookie/CookieService.cpp +++ b/netwerk/cookie/CookieService.cpp @@ -1207,6 +1207,18 @@ bool CookieService::CanSetCookie( return newCookie; }
+ if (!CheckHiddenPrefix(aCookieData)) { + COOKIE_LOGFAILURE(SET_COOKIE, aHostURI, savedCookieHeader, + "failed the CheckHiddenPrefix tests"); + CookieLogging::LogMessageToConsole( + aCRC, aHostURI, nsIScriptError::warningFlag, CONSOLE_REJECTION_CATEGORY, + "CookieRejectedInvalidPrefix"_ns, + AutoTArray<nsString, 1>{ + NS_ConvertUTF8toUTF16(aCookieData.name()), + }); + return newCookie; + } + // magic prefix checks. MUST be run after CheckDomain() and CheckPath() if (!CheckPrefixes(aCookieData, potentiallyTurstworthy)) { COOKIE_LOGFAILURE(SET_COOKIE, aHostURI, savedCookieHeader, @@ -1837,6 +1849,25 @@ bool CookieService::CheckDomain(CookieStruct& aCookieData, nsIURI* aHostURI, return true; }
+// static +bool CookieService::CheckHiddenPrefix(CookieStruct& aCookieData) { + // If a cookie is nameless, then its value must not start with + // `__Host-` or `__Secure-` + if (!aCookieData.name().IsEmpty()) { + return true; + } + + if (StringBeginsWith(aCookieData.value(), "__Host-"_ns)) { + return false; + } + + if (StringBeginsWith(aCookieData.value(), "__Secure-"_ns)) { + return false; + } + + return true; +} + namespace { nsAutoCString GetPathFromURI(nsIURI* aHostURI) { // strip down everything after the last slash to get the path, @@ -1913,7 +1944,7 @@ bool CookieService::CheckPath(CookieStruct& aCookieData, // CheckPrefixes // // Reject cookies whose name starts with the magic prefixes from -// https://tools.ietf.org/html/draft-ietf-httpbis-cookie-prefixes-00 +// https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-rfc6265bis // if they do not meet the criteria required by the prefix. // // Must not be called until after CheckDomain() and CheckPath() have diff --git a/netwerk/cookie/CookieService.h b/netwerk/cookie/CookieService.h index caec5b785bef2..beab14b13b0c2 100644 --- a/netwerk/cookie/CookieService.h +++ b/netwerk/cookie/CookieService.h @@ -121,6 +121,7 @@ class CookieService final : public nsICookieService, static bool CheckDomain(CookieStruct& aCookieData, nsIURI* aHostURI, const nsACString& aBaseDomain, bool aRequireHostMatch); + static bool CheckHiddenPrefix(CookieStruct& aCookieData); static bool CheckPath(CookieStruct& aCookieData, nsIConsoleReportCollector* aCRC, nsIURI* aHostURI); static bool CheckPrefixes(CookieStruct& aCookieData, bool aSecureRequest); diff --git a/netwerk/test/gtest/TestCookie.cpp b/netwerk/test/gtest/TestCookie.cpp index f65dc6ef92124..f3e1617b3c175 100644 --- a/netwerk/test/gtest/TestCookie.cpp +++ b/netwerk/test/gtest/TestCookie.cpp @@ -1057,3 +1057,29 @@ TEST(TestCookie, OnionSite) GetACookieNoHttp(cookieService, "http://123456789abcdef.onion/", cookie); EXPECT_TRUE(CheckResult(cookie.get(), MUST_EQUAL, "test=onion-security4")); } + +TEST(TestCookie, HiddenPrefix) +{ + nsresult rv; + nsCString cookie; + + nsCOMPtr<nsICookieService> cookieService = + do_GetService(kCookieServiceCID, &rv); + ASSERT_TRUE(NS_SUCCEEDED(rv)); + + SetACookie(cookieService, "http://hiddenprefix.test/", "=__Host-test=a"); + GetACookie(cookieService, "http://hiddenprefix.test/", cookie); + EXPECT_TRUE(CheckResult(cookie.get(), MUST_BE_NULL)); + + SetACookie(cookieService, "http://hiddenprefix.test/", "=__Secure-test=a"); + GetACookie(cookieService, "http://hiddenprefix.test/", cookie); + EXPECT_TRUE(CheckResult(cookie.get(), MUST_BE_NULL)); + + SetACookie(cookieService, "http://hiddenprefix.test/", "=__Host-check"); + GetACookie(cookieService, "http://hiddenprefix.test/", cookie); + EXPECT_TRUE(CheckResult(cookie.get(), MUST_BE_NULL)); + + SetACookie(cookieService, "http://hiddenprefix.test/", "=__Secure-check"); + GetACookie(cookieService, "http://hiddenprefix.test/", cookie); + EXPECT_TRUE(CheckResult(cookie.get(), MUST_BE_NULL)); +}
This is an automated email from the git hooks/post-receive script.
richard pushed a commit to branch geckoview-102.3.0esr-12.0-1 in repository tor-browser.
commit b4f40f882543efcf26ed5696512ea83eb0d5ded5 Author: Nika Layzell nika@thelayzells.com AuthorDate: Wed Sep 7 23:38:45 2022 +0000
Bug 1789440 - Track reply message IDs for MessageChannel async replies, r=ipc-reviewers,mccr8 a=RyanVM
Differential Revision: https://phabricator.services.mozilla.com/D156569 --- ipc/glue/MessageChannel.cpp | 7 ++++--- ipc/glue/MessageChannel.h | 39 ++++++++++++++++++++------------------- ipc/glue/ProtocolUtils.cpp | 6 ++++-- ipc/glue/ProtocolUtils.h | 5 +++-- ipc/ipdl/ipdl/lower.py | 3 ++- 5 files changed, 33 insertions(+), 27 deletions(-)
diff --git a/ipc/glue/MessageChannel.cpp b/ipc/glue/MessageChannel.cpp index df3688dbe449b..cd61a9e54a5ee 100644 --- a/ipc/glue/MessageChannel.cpp +++ b/ipc/glue/MessageChannel.cpp @@ -811,9 +811,10 @@ void MessageChannel::StopPostponingSends() { }
UniquePtrMessageChannel::UntypedCallbackHolder MessageChannel::PopCallback( - const Message& aMsg) { + const Message& aMsg, int32_t aActorId) { auto iter = mPendingResponses.find(aMsg.seqno()); - if (iter != mPendingResponses.end()) { + if (iter != mPendingResponses.end() && iter->second->mActorId == aActorId && + iter->second->mReplyMsgId == aMsg.type()) { UniquePtrMessageChannel::UntypedCallbackHolder ret = std::move(iter->second); mPendingResponses.erase(iter); @@ -823,7 +824,7 @@ UniquePtrMessageChannel::UntypedCallbackHolder MessageChannel::PopCallback( return nullptr; }
-void MessageChannel::RejectPendingResponsesForActor(ActorIdType aActorId) { +void MessageChannel::RejectPendingResponsesForActor(int32_t aActorId) { auto itr = mPendingResponses.begin(); while (itr != mPendingResponses.end()) { if (itr->second.get()->mActorId != aActorId) { diff --git a/ipc/glue/MessageChannel.h b/ipc/glue/MessageChannel.h index c94f36d5a0466..db00573b12070 100644 --- a/ipc/glue/MessageChannel.h +++ b/ipc/glue/MessageChannel.h @@ -115,29 +115,30 @@ class MessageChannel : HasResultCodes {
typedef mozilla::Monitor Monitor;
- // We could templatize the actor type but it would unnecessarily - // expand the code size. Using the actor address as the - // identifier is already good enough. - typedef void* ActorIdType; - public: + using Message = IPC::Message; + struct UntypedCallbackHolder { - UntypedCallbackHolder(ActorIdType aActorId, RejectCallback&& aReject) - : mActorId(aActorId), mReject(std::move(aReject)) {} + UntypedCallbackHolder(int32_t aActorId, Message::msgid_t aReplyMsgId, + RejectCallback&& aReject) + : mActorId(aActorId), + mReplyMsgId(aReplyMsgId), + mReject(std::move(aReject)) {}
virtual ~UntypedCallbackHolder() = default;
void Reject(ResponseRejectReason&& aReason) { mReject(std::move(aReason)); }
- ActorIdType mActorId; + int32_t mActorId; + Message::msgid_t mReplyMsgId; RejectCallback mReject; };
template <typename Value> struct CallbackHolder : public UntypedCallbackHolder { - CallbackHolder(ActorIdType aActorId, ResolveCallback<Value>&& aResolve, - RejectCallback&& aReject) - : UntypedCallbackHolder(aActorId, std::move(aReject)), + CallbackHolder(int32_t aActorId, Message::msgid_t aReplyMsgId, + ResolveCallback<Value>&& aResolve, RejectCallback&& aReject) + : UntypedCallbackHolder(aActorId, aReplyMsgId, std::move(aReject)), mResolve(std::move(aResolve)) {}
void Resolve(Value&& aReason) { mResolve(std::move(aReason)); } @@ -152,7 +153,6 @@ class MessageChannel : HasResultCodes { public: static constexpr int32_t kNoTimeout = INT32_MIN;
- typedef IPC::Message Message; using ScopedPort = mozilla::ipc::ScopedPort;
explicit MessageChannel(const char* aName, IToplevelProtocol* aListener); @@ -242,9 +242,9 @@ class MessageChannel : HasResultCodes { // Asynchronously send a message to the other side of the channel // and wait for asynchronous reply. template <typename Value> - void Send(UniquePtr<Message> aMsg, ActorIdType aActorId, - ResolveCallback<Value>&& aResolve, RejectCallback&& aReject) - EXCLUDES(*mMonitor) { + void Send(UniquePtr<Message> aMsg, int32_t aActorId, + Message::msgid_t aReplyMsgId, ResolveCallback<Value>&& aResolve, + RejectCallback&& aReject) EXCLUDES(*mMonitor) { int32_t seqno = NextSeqno(); aMsg->set_seqno(seqno); if (!Send(std::move(aMsg))) { @@ -253,8 +253,8 @@ class MessageChannel : HasResultCodes { }
UniquePtr<UntypedCallbackHolder> callback = - MakeUnique<CallbackHolder<Value>>(aActorId, std::move(aResolve), - std::move(aReject)); + MakeUnique<CallbackHolder<Value>>( + aActorId, aReplyMsgId, std::move(aResolve), std::move(aReject)); mPendingResponses.insert(std::make_pair(seqno, std::move(callback))); gUnresolvedResponses++; } @@ -272,11 +272,12 @@ class MessageChannel : HasResultCodes { bool CanSend() const EXCLUDES(*mMonitor);
// Remove and return a callback that needs reply - UniquePtr<UntypedCallbackHolder> PopCallback(const Message& aMsg); + UniquePtr<UntypedCallbackHolder> PopCallback(const Message& aMsg, + int32_t aActorId);
// Used to reject and remove pending responses owned by the given // actor when it's about to be destroyed. - void RejectPendingResponsesForActor(ActorIdType aActorId); + void RejectPendingResponsesForActor(int32_t aActorId);
// If sending a sync message returns an error, this function gives a more // descriptive error message. diff --git a/ipc/glue/ProtocolUtils.cpp b/ipc/glue/ProtocolUtils.cpp index f1757951d8bac..4d25a22b910e7 100644 --- a/ipc/glue/ProtocolUtils.cpp +++ b/ipc/glue/ProtocolUtils.cpp @@ -551,9 +551,11 @@ void IProtocol::DestroySubtree(ActorDestroyReason aWhy) { MOZ_ASSERT(CanRecv(), "destroying non-connected actor"); MOZ_ASSERT(mLifecycleProxy, "destroying zombie actor");
+ int32_t id = Id(); + // If we're a managed actor, unregister from our manager if (Manager()) { - Unregister(Id()); + Unregister(id); }
// Destroy subtree @@ -580,7 +582,7 @@ void IProtocol::DestroySubtree(ActorDestroyReason aWhy) { // The actor is being destroyed, reject any pending responses, invoke // `ActorDestroy` to destroy it, and then clear our status to // `LinkStatus::Destroyed`. - GetIPCChannel()->RejectPendingResponsesForActor(this); + GetIPCChannel()->RejectPendingResponsesForActor(id); ActorDestroy(aWhy); mLinkStatus = LinkStatus::Destroyed; } diff --git a/ipc/glue/ProtocolUtils.h b/ipc/glue/ProtocolUtils.h index 1fa9972430cd4..340c402abe75c 100644 --- a/ipc/glue/ProtocolUtils.h +++ b/ipc/glue/ProtocolUtils.h @@ -279,11 +279,12 @@ class IProtocol : public HasResultCodes { UniquePtrIPC::Message* aReply); template <typename Value> void ChannelSend(UniquePtrIPC::Message aMsg, + IPC::Message::msgid_t aReplyMsgId, ResolveCallback<Value>&& aResolve, RejectCallback&& aReject) { if (CanSend()) { - GetIPCChannel()->Send(std::move(aMsg), this, std::move(aResolve), - std::move(aReject)); + GetIPCChannel()->Send(std::move(aMsg), Id(), aReplyMsgId, + std::move(aResolve), std::move(aReject)); } else { WarnMessageDiscarded(aMsg.get()); aReject(ResponseRejectReason::SendError); diff --git a/ipc/ipdl/ipdl/lower.py b/ipc/ipdl/ipdl/lower.py index 5327cf62d0f62..3d297c4b254e3 100644 --- a/ipc/ipdl/ipdl/lower.py +++ b/ipc/ipdl/ipdl/lower.py @@ -4906,7 +4906,7 @@ class _GenerateProtocolActorCode(ipdl.ast.Visitor): $*{prologue}
UniquePtrMessageChannel::UntypedCallbackHolder untypedCallback = - GetIPCChannel()->PopCallback(${msgvar}); + GetIPCChannel()->PopCallback(${msgvar}, Id());
typedef MessageChannel::CallbackHolder<${resolvetype}> CallbackHolder; auto* callback = static_cast<CallbackHolder*>(untypedCallback.get()); @@ -5454,6 +5454,7 @@ class _GenerateProtocolActorCode(ipdl.ast.Visitor): send, args=[ ExprMove(msgexpr), + ExprVar(md.pqReplyId()), ExprMove(resolvefn), ExprMove(rejectfn), ],
This is an automated email from the git hooks/post-receive script.
richard pushed a commit to branch geckoview-102.3.0esr-12.0-1 in repository tor-browser.
commit 70baea49bd1cf6e4740a1d6408a7e1fd11e8c42a Author: ffxbld ffxbld@mozilla.com AuthorDate: Mon Sep 12 11:18:02 2022 +0000
No Bug, mozilla-esr102 repo-update HSTS HPKP remote-settings - a=repo-update r=RyanVM
Differential Revision: https://phabricator.services.mozilla.com/D157107 --- security/manager/ssl/StaticHPKPins.h | 2 +- security/manager/ssl/nsSTSPreloadList.inc | 308 ++++------- .../dumps/blocklists/addons-bloomfilters.json | 26 +- .../main/devtools-compatibility-browsers.json | 593 ++++++++++++++------- .../dumps/security-state/intermediates.json | 38 +- 5 files changed, 547 insertions(+), 420 deletions(-)
diff --git a/security/manager/ssl/StaticHPKPins.h b/security/manager/ssl/StaticHPKPins.h index 78fa6b67a9542..a79975070f73e 100644 --- a/security/manager/ssl/StaticHPKPins.h +++ b/security/manager/ssl/StaticHPKPins.h @@ -1125,4 +1125,4 @@ static const TransportSecurityPreload kPublicKeyPinningPreloadList[] = {
static const int32_t kUnknownId = -1;
-static const PRTime kPreloadPKPinsExpirationTime = INT64_C(1671102568343000); +static const PRTime kPreloadPKPinsExpirationTime = INT64_C(1671448268944000); diff --git a/security/manager/ssl/nsSTSPreloadList.inc b/security/manager/ssl/nsSTSPreloadList.inc index 26acc230748c2..bbc3379e494e8 100644 --- a/security/manager/ssl/nsSTSPreloadList.inc +++ b/security/manager/ssl/nsSTSPreloadList.inc @@ -8,7 +8,7 @@ /*****************************************************************************/
#include <stdint.h> -const PRTime gPreloadListExpirationTime = INT64_C(1673521764602000); +const PRTime gPreloadListExpirationTime = INT64_C(1673867462026000); %% 0--1.de, 1 0-0.io, 1 @@ -883,6 +883,7 @@ const PRTime gPreloadListExpirationTime = INT64_C(1673521764602000); 13th-dover.uk, 1 13u15.com, 1 14000.cz, 1 +141145.com, 0 14159.gb.net, 1 142552.com, 0 143533.com, 1 @@ -2079,6 +2080,7 @@ const PRTime gPreloadListExpirationTime = INT64_C(1673521764602000); 32bet365.com, 1 32h.de, 1 32kk.edu.ee, 1 +32y.ru, 1 33-couvreur.fr, 1 33-elagage.fr, 1 33-km.ru, 1 @@ -3970,6 +3972,7 @@ const PRTime gPreloadListExpirationTime = INT64_C(1673521764602000); 714633.com, 1 715433.com, 1 716176.com, 0 +716331.com, 0 7177bet.com, 1 717966833.xyz, 1 718113.com, 0 @@ -4731,7 +4734,6 @@ const PRTime gPreloadListExpirationTime = INT64_C(1673521764602000); 91d85.com, 0 91fldz.com, 1 91imh.com, 1 -91milk.net, 1 91news.tk, 1 91tianmi.com, 0 91tvg.com, 1 @@ -5067,6 +5069,7 @@ const PRTime gPreloadListExpirationTime = INT64_C(1673521764602000); 9800.cc, 1 980709.xyz, 1 9822.am, 1 +9822.bz, 0 9822am.com, 1 9822cn.com, 1 9822hk.com, 1 @@ -6159,6 +6162,7 @@ ackadia.com, 1 ackermann.ch, 1 acklandstainless.com.au, 1 acl.gov, 1 +aclandia.fr, 1 aclhire.com, 1 aclipt.com, 1 acloud.one, 1 @@ -6477,6 +6481,7 @@ adarsvidler.me, 1 adasbench.com, 1 adata.kz, 1 adativos.com.br, 1 +adauge.com, 1 adawolfa.cz, 1 adbexcavation.ca, 1 adblockextreme.com, 1 @@ -7158,6 +7163,7 @@ affilia.tk, 1 affiliatebeeers.ga, 1 affiliatebeest.ga, 1 affiliatebitz.com, 1 +affiliatedphysicians.com, 1 affiliatep.com, 1 affiliateprogram.ga, 1 affiliateprograms.cf, 1 @@ -7740,6 +7746,7 @@ agworkers.com, 1 agzlapp.com, 1 ahanet.tk, 1 ahansen.is, 0 +ahbap.org, 1 ahc.fyi, 1 ahccorleone.tk, 1 ahcpb.com, 1 @@ -7749,6 +7756,7 @@ ahealthyjourney.ca, 1 ahegaoroulette.com, 1 ahelos.tk, 1 ahenkerp.com, 1 +ahero4all.org, 1 ahg-offices.fr, 1 ahhcomfortshoes.com, 1 ahidta.gov, 1 @@ -8362,7 +8370,6 @@ akagiauto.net, 1 akalashnikov.ru, 1 akamon.ac.jp, 1 akaoma.com, 1 -akapumkin.com, 1 akaratasker.com, 1 akarisoftware.com, 1 akaritakai.net, 1 @@ -8723,7 +8730,6 @@ alcor.tk, 1 alcorncountyms.gov, 1 alcove.cf, 1 alcovidvaccine.gov, 1 -alctel.com.br, 1 alcubillas.tk, 1 aldarcake.com, 1 aldastv.tk, 1 @@ -9106,7 +9112,6 @@ alitec.it, 1 alitpedia.ga, 1 aliud.be, 1 aliv.biz, 1 -alivecast.co.jp, 1 alix-board.de, 1 aliyasin.org, 1 alizah.id, 1 @@ -11640,7 +11645,6 @@ apercloud.es, 1 aperioadvice.ga, 1 aperiomoney.ga, 1 aperiotaxation.ga, 1 -apert.be, 1 aperta.ro, 1 aperta.shop, 1 apertis.org, 0 @@ -12505,7 +12509,6 @@ arizonatech.tk, 1 arjan.nl, 1 arjandejong.eu, 1 arjanenthijs.nl, 1 -arjanhofmann.nl, 1 arjansteevels.nl, 1 arjanvaartjes.net, 1 arjen-robben.tk, 1 @@ -13175,6 +13178,7 @@ ashtonwealth.com, 1 ashtronaut.space, 1 ashutoshmishra.org, 1 ashutov.rocks, 0 +ashwainfo.in, 1 ashwaubenon.gov, 1 asia-gazette.com, 1 asia-global-risk.com, 1 @@ -14593,7 +14597,6 @@ avalondevelopment.tk, 1 avalontechsv.com, 1 avalyuan.com, 1 avamax.cz, 1 -avamax.eu, 1 avamix.com, 1 avanad.biz, 1 avanad.com, 1 @@ -15797,6 +15800,7 @@ bahaiprayers.io, 1 bahana.net, 1 baharmusic24.tk, 1 bahiastudios.com, 1 +bahisbonus.work, 1 bahislokal6.com, 1 bahnenimbild.de, 1 bahnenimbild.eu, 1 @@ -16184,7 +16188,6 @@ banktool.com, 1 bankvanbreda.be, 1 banland.net, 1 banlinhdanong.com, 0 -banlitang.com, 1 banned-bitches.tk, 1 banner-design.tk, 1 banner.ga, 1 @@ -17380,7 +17383,6 @@ bella.network, 1 bellaaroma.com.tw, 1 belladeluxxe.net, 1 bellafashion.tk, 1 -bellaflor.net, 1 bellamodeling.com, 1 bellamy.cloud, 1 bellanews.tk, 1 @@ -17811,7 +17813,6 @@ besiktasmtsk.com, 1 besnard.me, 1 besnik.de, 0 besnik.tk, 1 -besola.de, 1 besole.ch, 1 besolov.tk, 1 besox.be, 1 @@ -18698,7 +18699,6 @@ biblico.tk, 1 bibliobaldur.tk, 1 biblioblog.fr, 1 bibliobus.ch, 1 -bibliogram.art, 1 bibliomarkt.ch, 1 biblionaut.net, 1 biblionix.com, 1 @@ -19693,7 +19693,6 @@ bkentertainments.co.uk, 1 bkgatl.com, 1 bkhonnun.is, 1 bkhpilates.co.uk, 1 -bkkf.at, 1 bkkposn.com, 1 bkl-ca-qa-employeeapp.azurewebsites.net, 1 bklaindia.com, 1 @@ -19717,7 +19716,6 @@ bl4ckb0x.org, 1 blaa-arme.tk, 1 blaarmeersen.be, 1 blaasmuziek-laarbeek.nl, 1 -blaauwgeers.pro, 1 blaauwgeers.wiki, 1 blabber.im, 1 blabla.rocks, 0 @@ -20068,7 +20066,6 @@ blizko.tk, 1 blizora.com, 1 blk-booking.com, 1 blk-lunch.com, 1 -blk.me, 1 blkbx.eu, 1 blkj.com, 1 bllb.ru, 0 @@ -20224,6 +20221,7 @@ bloomingwoods.tk, 1 bloomnail.net, 1 bloomppm.com, 1 bloomscape.com, 1 +bloomspace.com.au, 1 blopezabogado.es, 1 blorbo.link, 1 blossom.so, 1 @@ -20303,7 +20301,6 @@ bluemosh.com, 1 bluemoundtexas.gov, 1 bluemountain-ms.gov, 1 bluemtnrentalmanagement.ca, 1 -bluenailsstudio.nl, 1 bluenet-26.com, 1 blueneuron.tk, 1 blueoakart.com, 1 @@ -20312,7 +20309,6 @@ blueparrotpainting.com, 1 bluepearl.tk, 1 blueperil.de, 1 bluepostbox.de, 1 -blueprintma.com, 1 blueprintrealtytn.com, 1 bluepromocode.com, 1 bluerange.io, 1 @@ -20629,6 +20625,7 @@ bokhylle.eu, 1 bokkeriders.com, 1 bokkun.jp, 1 bokov.gq, 1 +boksburgplumber24-7.co.za, 1 boksburgplumbing.co.za, 1 boksburgrubbleremovals.co.za, 1 bokutake.com, 1 @@ -20880,7 +20877,6 @@ booldamm.llc, 1 boombangcreditos.tk, 1 boomboomboat.com, 1 boomerangworkouts.com, 1 -boomersclub.com.au, 1 boomersurf.com, 1 boomfestival.org, 1 boomgamer.ru, 1 @@ -20922,7 +20918,6 @@ boostport.com, 1 boostport.com.au, 1 boostrpro.pl, 1 boostsafety.com, 1 -boostup.ai, 1 booths.cyou, 1 bootlesshacker.com, 1 bootmint.com, 1 @@ -21009,7 +21004,7 @@ borraxeiros.tk, 1 borriquillacuenca.tk, 1 borsodsakk.hu, 1 bortebest.no, 1 -bortox.it, 1 +bortox.it, 0 borysek.net, 1 borysenko.se, 1 borza.blog, 0 @@ -21078,7 +21073,6 @@ botnam.com, 1 botoes-primor.pt, 1 botoks.tk, 1 botox.bz, 1 -botoxclinic.gr, 1 botschaften-an-das-volk-gottes.de, 0 botserver.de, 1 botsindiscord.me, 1 @@ -21588,6 +21582,15 @@ bravica.tk, 1 bravo.bi, 1 bravoasociados.com, 1 bravobet.et, 1 +bravodeal.com, 1 +bravodescuento.es, 1 +bravogutschein.at, 1 +bravogutschein.de, 1 +bravokupony.pl, 1 +bravopromo.be, 1 +bravopromo.fr, 1 +bravosconto.it, 1 +bravovoucher.co.uk, 1 bravurasolutions.com, 1 brawin.cf, 1 brawlstarsitalia.com, 1 @@ -21912,7 +21915,6 @@ brisbanerecordbar.com.au, 1 brisbine.cloud, 1 brisceremony.com, 1 brisignshop.com.au, 1 -briskbase.com, 1 bristebein.com, 1 bristolandwestonsuperbounce.com, 1 brit-thoracic.org.uk, 1 @@ -22249,6 +22251,7 @@ bsquared.org, 1 bsrueti.ch, 1 bss-systems.net, 1 bss.com.ph, 1 +bss.net.ph, 1 bss.solutions, 1 bss.systems, 1 bss01.de, 1 @@ -22536,6 +22539,7 @@ bukkenfan.jp, 1 bukowski.se, 1 bukowski.tk, 1 bukpcszerviz.hu, 1 +buksu.edu.ph, 1 bukularis.ga, 1 bul3seas.eu, 1 bulario.com, 1 @@ -22555,6 +22559,7 @@ bulgakov.ml, 1 bulgakov.tk, 1 bulgariablog.tk, 1 bulgarianhouse.tk, 1 +bulgarianwine.com, 1 bulgariya.cf, 1 bulhost.com, 1 bulindir.tk, 1 @@ -22665,7 +22670,7 @@ burbaguena.tk, 1 burbankdental.com, 1 burberry-outlet.cf, 1 burcevo.info, 1 -burchfabrics.com, 1 +burchfabrics.com, 0 burdurhaber.tk, 1 burdursondakika.tk, 1 bureau86.be, 1 @@ -24476,6 +24481,7 @@ captainjanks.tk, 1 captainpassword.com, 1 captainratnesh.tk, 1 captainscarlet.tk, 1 +captainsinn.com, 1 captainsonic.com, 1 captainsunshine.tk, 1 captalize.com, 1 @@ -24577,7 +24583,6 @@ cardcaptorsakura.jp, 1 carddelivery.com, 1 cardexaminerers.ga, 1 cardexaminerest.ga, 1 -cardexchangesolutions.com, 0 cardiaccane.com, 1 cardiagnose.nl, 1 cardiagnostics.tk, 1 @@ -24787,7 +24792,6 @@ caroinstitute.cf, 1 carol-lambert.com, 1 carolcappelletti.com, 1 carolcestas.com, 1 -caroleblouin.ca, 1 caroletolila.com, 1 caroli.biz, 1 caroli.com, 1 @@ -25617,7 +25621,6 @@ ccr.ovh, 1 ccrun.tk, 1 ccsaposs.com, 1 ccshire.ga, 1 -ccsistema.com, 1 ccsk.training, 1 ccskills.org.uk, 1 ccsource.org, 1 @@ -26990,7 +26993,6 @@ chintaparthi.tk, 1 chintaparthihome.tk, 1 chinwag.im, 1 chip.icu, 1 -chip.pl, 0 chipcore.com, 0 chipdig.com, 1 chipollinko.com.ua, 1 @@ -28114,7 +28116,6 @@ claudiney.eti.br, 1 claudiney.id, 1 claudiney.info, 1 claudiohdz.com, 1 -claumarservice.com, 1 claus-bahr.de, 1 claus-cremer.tk, 1 clauseriksen.net, 1 @@ -28425,7 +28426,6 @@ cliqz.com, 1 clive.io, 1 cliveptr.cc, 1 clixa.com, 1 -clixz.nl, 1 clmbr.ch, 0 clmde.de, 1 clmz.nl, 1 @@ -28547,7 +28547,6 @@ cloudfudge.com, 1 cloudia.org, 1 cloudily.com, 1 cloudimproved.com, 1 -cloudimprovedtest.com, 1 cloudindex.io, 1 cloudinfinit.com, 1 cloudix.cf, 1 @@ -28883,7 +28882,6 @@ coaching-impulse.ch, 0 coachingforleaders.com, 1 coachingsantcugat.cat, 1 coachjehond.nl, 1 -coachjelevennu.be, 1 coachment.dk, 1 coachrobcampos.com, 1 coactive.com, 1 @@ -29189,7 +29187,7 @@ cohassetma.gov, 1 cohassetpolicema.gov, 1 cohenandcohen.net, 1 cohere.io, 1 -coiam.net, 0 +coiam.net, 1 coiffbot.fr, 1 coiffeurschnittstelle.ch, 1 coignieresentransition.fr, 1 @@ -29415,7 +29413,6 @@ colonialbeachva.gov, 1 colonialfilings.com, 0 colonialfurniturestripping.com, 1 colonize.africa, 1 -coloppe.com, 1 color-mixer.tk, 1 color01.net, 1 colorado-locksmith.com, 1 @@ -29475,7 +29472,6 @@ columbushydroxide.net, 1 columbushydroxide.org, 1 columbusks.gov, 1 columbusunderground.com, 1 -columbuswines.com, 1 colwichks.gov, 1 colyakoomusic.com, 1 com-b.vn, 1 @@ -30387,7 +30383,6 @@ coolprylar.se, 1 coolsculptingmanhattanbeach.com, 1 coolshirt.tk, 1 coolsoftware.tk, 1 -coolspeak.com, 1 cooltang.ooo, 1 coolvox.com, 1 coolweirdfacts.ga, 1 @@ -30840,7 +30835,6 @@ couriersrs.com, 1 couriertrackers.com, 1 coursables.com, 1 coursdejaponais.com, 1 -course-net.com, 1 courseconfidence.com, 1 coursehero.com, 1 coursehunter.net, 1 @@ -31247,7 +31241,6 @@ creativenz.govt.nz, 1 creativephysics.ml, 1 creativescorpio.tk, 1 creativesectors.tk, 1 -creativesmm.com.ua, 1 creativestories.me, 1 creativetechsolution.in, 1 creativeweb.biz, 1 @@ -31308,7 +31301,6 @@ crem.in, 0 cremalleradenuria.tk, 1 crematory.tk, 1 cremedigital.com, 1 -cremepassion.de, 1 cremicro.com, 1 crena.ch, 1 crepa.ch, 0 @@ -31407,6 +31399,7 @@ criptomoneylite.tk, 1 criptozoologia.tk, 1 cris2006.com, 1 crisantacademy.com, 1 +criscond.co.uk, 1 crisisactual.com, 1 crisisclubers.ga, 1 crisisdelos40.tk, 1 @@ -31671,7 +31664,6 @@ cryptofan.org, 1 cryptofibers.ml, 1 cryptofomo.capital, 1 cryptofomocapital.com, 1 -cryptoforo.com, 1 cryptofox.nl, 1 cryptography.ch, 1 cryptography.io, 1 @@ -31840,7 +31832,6 @@ cshive-img.com, 1 cshive-static.com, 1 cshm-schm.ca, 1 cshostorg.tk, 1 -cshub.nl, 1 csilies.de, 1 csimarket.com, 1 csirt.ee, 1 @@ -31856,6 +31847,7 @@ csnet.live, 1 csodaorszagovoda.hu, 1 csokolade.hu, 1 csokolozos-jatekok.tk, 1 +csosa.gov, 1 csowt.gq, 1 csp-tohoku.co.jp, 1 csp.ch, 0 @@ -31999,6 +31991,7 @@ cuchichi.es, 1 cuckold-secrets.tk, 1 cuckoo.ee, 1 cuddlecat.io, 1 +cuddlecomfort.com, 1 cuddlingyaks.com, 1 cuddlybeardaycare.com.au, 1 cudesa.gq, 1 @@ -32773,6 +32766,7 @@ dachdeckermeister-moeller.de, 1 dachengquan.ca, 1 dachshundsaspets.com, 1 dachshundtalk.com, 1 +daciaforum.nl, 1 daciamodellen.nl, 1 daconsult.uk, 1 dacooninternational.com, 1 @@ -33047,7 +33041,6 @@ danceordienet.tk, 1 danceproducciones.com, 1 dancerzone.tk, 1 danceworld.tk, 1 -danchen.org, 1 danchestertonphoto.co.uk, 1 dancingangels.tk, 1 dancingcubs.co.uk, 1 @@ -33543,7 +33536,6 @@ datahaus.construction, 1 datahive360.com, 1 datahoarder.xyz, 1 datahove.no, 1 -datainvest.pl, 1 datakick.org, 1 datakl.com, 1 datalich.com, 1 @@ -33602,7 +33594,6 @@ datenreiter.gq, 1 datenreiter.org, 1 datenretter.tk, 1 datensalat.info, 1 -datenschutz-consult.de, 1 datenschutz-gruenwald.de, 1 datenschutz-individuell.de, 1 datenschutz-isny.de, 1 @@ -33825,7 +33816,6 @@ dawsonmt.gov, 1 dax.do, 1 dax.guide, 1 daxenexpress.com, 1 -daxici.com.tr, 1 daxos.tk, 1 daxpatterns.com, 1 daxperience.eu, 1 @@ -34298,6 +34288,7 @@ deep-chess.com, 0 deep-core.tk, 1 deep-labs.com, 1 deep-wave-hair-extensions.tk, 1 +deep.club, 1 deep6.ai, 1 deepaero.com, 1 deeparamaraj.com, 1 @@ -34665,7 +34656,6 @@ democracyineurope.eu, 1 democratie.tk, 1 democraziaineuropa.eu, 1 demodata.eu, 1 -demodoka.ddns.net, 1 demografia.tk, 1 demokisisel.tk, 1 demokrasi.tk, 1 @@ -34814,7 +34804,6 @@ dentistquezoncity.com, 1 dentistree.in.ua, 1 dentistsgainesvillega.com, 1 dentistslilburnga.com, 1 -dentmate.id, 1 dentoncounty.gov, 1 dentrassi.de, 1 dentsimplant.com, 1 @@ -35123,6 +35112,7 @@ desplainesil.gov, 1 desplats.com.ar, 1 despoina-vandi.tk, 1 despondentrock.tk, 1 +despora.de, 1 desportvriendenoverijse.tk, 1 despotika.de, 1 desserteagleselvenar.tk, 1 @@ -35359,7 +35349,6 @@ devs-from.asia, 1 devs.men, 1 devs4.com, 1 devsectools.com, 1 -devsjournal.com, 1 devskyport.com, 1 devslash.net, 1 devsrvr.ru, 1 @@ -35409,6 +35398,7 @@ dextermarket.com, 1 dexterseries.ru, 1 dextra.tk, 1 deyaar-sl.com, 1 +deyanadeco.com, 1 deyute.com, 1 dezea.net, 1 dezeregio.nl, 1 @@ -35893,7 +35883,6 @@ digital-insurance-platform.de, 1 digital-insure.fr, 1 digital-liberal.ch, 1 digital-mu.tk, 1 -digital-nut.com, 1 digital-rainbow-dolls.tk, 1 digital-sculpture.org, 1 digital-techs.com, 1 @@ -36070,6 +36059,7 @@ dihmedical.net, 1 dihmedical.org, 1 diipoo.com, 1 diis.plus, 1 +dijibot.com, 1 dijispin.com, 1 dijitaller.com, 1 dijitalzade.com, 1 @@ -36201,7 +36191,6 @@ direc-tory.tk, 1 direct-sel.com, 1 direct.cz, 0 direct365.es, 1 -directelectricalltd.co.uk, 1 directfinance.cz, 1 directfitnesssolutions.com, 1 directholidaysme.com, 1 @@ -36477,7 +36466,6 @@ disrupters.ch, 0 disruption.tk, 1 dissectix.io, 1 dissertationhelp.com, 1 -dissidence.ovh, 1 dissident.host, 1 dissieux.com, 1 dissolution-sci.com, 1 @@ -37253,7 +37241,6 @@ dogecoinnews.net, 1 dogecoinnews.org, 1 dogespeed.gq, 1 dogespeed.ml, 1 -dogfencehamptonroads.com, 1 dogfights.tk, 1 dogforum.de, 1 dogfriendly.co.uk, 1 @@ -37314,7 +37301,6 @@ dojocasts.com, 1 dojodigital.co.uk, 1 dojozendebourges.fr, 1 dokanline.com, 1 -dokasen.com, 1 dokcar.com.br, 1 dokee.cn, 1 dokelio-idf.fr, 1 @@ -37448,8 +37434,6 @@ domaxpoker.com, 1 domaza.gq, 1 domaza.ml, 1 domeconseil.fr, 1 -domein-direct.com, 1 -domein-direct.nl, 1 domeindns.nl, 1 domekklimkowka.com, 1 domen-reg.ru, 1 @@ -37595,7 +37579,6 @@ donghua-europe.com, 1 dongjian.com, 1 dongngu.com, 1 dongor.tk, 1 -dongxuwang.com, 1 donhoward.org, 0 donia-almla3b.com, 1 doniramdoni.tk, 1 @@ -39821,7 +39804,6 @@ eajglobal.org, 1 ealadel.com, 1 ealekseyev.ml, 1 ealev.de, 1 -eamadit.com, 1 eames-clayton.us, 1 eamigo.com, 1 eamproperties.com, 1 @@ -40085,6 +40067,7 @@ ebjork.se, 1 ebki-nsn.gov, 1 eblan.gq, 1 eblog.cf, 1 +eblog.ink, 1 ebola-hosting.cz, 1 ebolacharts.ga, 1 ebolavirus.tk, 1 @@ -41099,7 +41082,6 @@ ekvastra.in, 1 ekwador.com, 1 ekyu.moe, 1 ekz-crosstour.ch, 1 -ekzarta.ru, 0 ekzcrosstour.ch, 1 ekzotika.tk, 1 el-cell.com, 1 @@ -41325,7 +41307,6 @@ electrotainment.com, 1 electroyclima.es, 1 electrum.org, 1 eled.io, 1 -elefantebrasil.com.br, 1 elefsisport.gr, 0 elegance-lingerie.com, 1 elegance-sm.com, 1 @@ -41348,6 +41329,7 @@ elekner.tk, 1 elektiriktasarruf.tk, 1 elektrikal.com, 1 elektriker-notdienst-zentrale.de, 1 +elektrikvesukesintileri.com, 1 elektrilevi.com, 1 elektrilevi.ee, 1 elektrilevi.eu, 1 @@ -41612,6 +41594,7 @@ elitexcomputing.com, 1 elitexxx.com, 1 elithub.com, 1 elithus.se, 1 +elitrahealth.com, 1 elitsa.gr, 1 elivenet.com, 1 elixi.re, 1 @@ -41903,6 +41886,7 @@ embracethedarkness.co.uk, 1 embracezine.tk, 1 embryologist.info, 1 embryooptions.com, 1 +emby.cloud, 1 emby.live, 1 emceemanic.tk, 1 emcentrix-com-site-mvc.azurewebsites.net, 1 @@ -42133,6 +42117,7 @@ empregosrj.com, 1 empreinte.ca, 1 emprendecausa.com, 1 emprendeconchrisfx.com, 1 +emprendedoresdesevilla.es, 1 emprendepedia.com, 1 emprendeperuano.com, 1 emprendimientoweb.co, 1 @@ -42248,6 +42233,7 @@ encuestaspagadas.com.mx, 1 encuestaspagadas.org, 1 encurta.ml, 1 encycarpedia.com, 1 +encyclopedia-titanica.org, 1 endangeredwatch.com, 1 endavantstap9b.tk, 1 endbegins.tk, 1 @@ -43423,7 +43409,6 @@ esrinfo.com, 1 esrs.gov, 1 essaandmore.com.au, 1 essay-writing-topics-fce.tk, 1 -essayace.co.uk, 1 essaybrand.com, 1 essaychecker.com, 1 essaydirectory.com, 0 @@ -43515,7 +43500,6 @@ estonia.ee, 0 estonia.net, 1 estoniananonymous.tk, 1 estoniantrade.ee, 1 -estonoentraenelexamen.com, 1 estopero.tk, 1 estradiolbestellen.gq, 1 estreetshuffle.com, 1 @@ -43533,8 +43517,7 @@ estudiemosvirtualmente.com, 1 estudio21pattern.com, 0 estudiogarcia-rada.com, 1 estudiomantis.tk, 1 -estudionale.com, 1 -estudionale.com.ar, 1 +estudionale.com, 0 estudios-biblicos.tk, 1 estudiosalmogavares.tk, 1 estudiosmart.com, 1 @@ -44117,7 +44100,6 @@ eviadc.com, 1 eviamv.com, 1 eviction.cf, 1 evidecor.com.br, 1 -evidencebased.net, 1 evidenceusa.com.br, 1 evidenciamidiasdigitais.com.br, 1 evidencija.ba, 1 @@ -44953,7 +44935,6 @@ fabian-kluge.de, 1 fabian-zoske.de, 1 fabian.gq, 1 fabianackle.ch, 1 -fabianasantiago.com, 1 fabianbeiner.com, 0 fabianbeiner.de, 0 fabianegli.ch, 1 @@ -46448,7 +46429,6 @@ fgeiger.dnshome.de, 1 fggpay.com, 1 fgidu.com, 1 fgsv-kongress.de, 1 -fgtsolutions.com, 1 fgui.de, 1 fh-x.de, 1 fh14.com, 1 @@ -49197,6 +49177,7 @@ freehotline.ru, 1 freehqporno.com, 1 freeinet.cf, 1 freeinet.tk, 1 +freeinfos.fr, 1 freeinoutboard.com, 1 freejidi.com, 1 freekdevries.nl, 1 @@ -50552,6 +50533,7 @@ galaxus.fr, 1 galaxy.edu.pe, 1 galaxyeuropemusic.com, 1 galaxymedia.tk, 1 +galaxymusicpromo.com, 1 galaxyplex.tk, 1 galaxyscientific.com, 1 galaxystaking.space, 1 @@ -50887,7 +50869,7 @@ gaojianli.me, 1 gaojianli.tk, 1 gaon.network, 1 gaos.org, 1 -gaozj.com, 1 +gaozj.com, 0 gapalmoil.com.ng, 1 gapdirect.com, 1 gapfa.org, 0 @@ -51972,7 +51954,6 @@ getgeek.pl, 1 getgeek.se, 1 gethdporn.com, 1 gethere.gq, 1 -gethome.ru, 1 gethost.co.zw, 1 gethttpsforfree.com, 1 gethyas.com, 1 @@ -53434,7 +53415,6 @@ goontu.be, 1 gooodnews.ga, 1 goooo.info, 1 gooseberries.ch, 1 -goosementor.com, 1 goosip.tk, 1 gootax.pro, 0 gooty.ru, 1 @@ -53915,6 +53895,7 @@ grapheneos.org, 1 grapheneos.ovh, 1 graphic-schools.com, 1 graphic-shot.com, 1 +graphicbuffet.co.th, 1 graphicdesignresources.net, 1 graphicdream.tk, 1 graphicnab.com, 0 @@ -54257,7 +54238,6 @@ gresak.io, 0 gresik.info, 1 gresrewop.ca, 1 gresrewop.com, 1 -gressnet.id, 0 greta-birkner.de, 1 gretaraccontastorie.com, 1 gretathemes.com, 1 @@ -54574,7 +54554,6 @@ grupomonti.com.ar, 1 grupomultiservicio.com, 1 grupoparco.com, 1 grupoproabienesraices.com.mx, 1 -grupoprodec.com.mx, 1 grupos.cf, 1 gruposanjose.tk, 1 gruposiit.com.mx, 1 @@ -54772,7 +54751,6 @@ guhei.net, 1 guhenry3.tk, 1 guiabroker.com, 1 guiacg.com, 0 -guiadamassagem.site, 1 guiadev.com, 1 guiaextra.com, 1 guiaminhasaude.net, 1 @@ -54966,6 +54944,7 @@ gutscasino.ml, 1 gutschein-spezialist.de, 1 gutscheineplus.de, 1 gutscheingeiz.de, 1 +gutshaus-marketing.de, 1 gutstein.ch, 1 gutterbus.com, 1 gutterdogs.com, 1 @@ -55252,7 +55231,6 @@ hackendoz.com, 1 hackengine.ga, 1 hackenkunjeleren.nl, 1 hackenturet.dk, 1 -hacker.deals, 1 hacker.holiday, 1 hacker.im, 1 hacker.one, 1 @@ -55408,6 +55386,7 @@ hairhumanextensions.tk, 1 hairlissage.be, 1 hairloss.com, 1 hairlossadvice.tk, 1 +hairmitage.pl, 0 hairphoto.tk, 1 hairpins.tk, 1 hairs.london, 1 @@ -55455,7 +55434,6 @@ hakon.lol, 1 haku.farm, 1 haku.vn, 1 hakugin.me, 1 -hakuna.live, 1 hal-9th.space, 1 hal52.nl, 1 halacs.hu, 1 @@ -55482,7 +55460,6 @@ halfhosting.de, 1 halfords.com, 1 halfords.ie, 1 halfreal.tk, 1 -halfwaythere.eu, 1 halgap.ga, 1 haliava.tk, 1 halic.tk, 1 @@ -55919,6 +55896,7 @@ harfordvotes.gov, 1 hargaindo.com, 1 hargamobilmu.com, 0 hari-katha.tk, 1 +harianaceh.co.id, 1 haribilalic.com, 1 harigovind.org, 1 hariharnagar.tk, 1 @@ -57483,7 +57461,6 @@ hfsctx.gov, 1 hfsg-habicht.at, 1 hfx405.de, 1 hg.gg, 1 -hg.python.org, 1 hg0086.la, 0 hg661.cc, 1 hg71839.com, 1 @@ -57786,7 +57763,6 @@ hiphopall.tk, 1 hiphopbolivia.tk, 1 hiphopfashion.tk, 1 hipnos.net, 1 -hipnosisypsicoterapia.com, 1 hipnotista.tk, 1 hipo.pt, 1 hipocampo.org, 1 @@ -57840,7 +57816,6 @@ hirotaka.org, 1 hirsch-lawyer.tk, 1 hirschbergertal.de, 1 hirschl.eu, 1 -hirte-digital.de, 0 hirtz.pm, 1 hirtzfr.eu, 1 hirunet.ml, 1 @@ -58668,7 +58643,6 @@ honeycombcreative.com, 1 honeycome-recruit.com, 0 honeycreeper.com, 1 honeygirl.tk, 1 -honeypot.net, 1 honeyspot.de, 1 honeytracks.com, 1 honeyuniversity.net, 1 @@ -59152,6 +59126,7 @@ household-appliances.tk, 1 householdheroes.com.au, 1 householdjournalers.ga, 1 householdjournalest.ga, 1 +householdofmercy.org, 1 houseinfonews.tk, 1 housekeeperlondon.co.uk, 1 houselocal.co.uk, 1 @@ -59220,7 +59195,6 @@ howardscholars.org, 1 howardsgrovewi.gov, 1 howardshaw.com, 1 howarh.com, 0 -howbehealthy.com, 1 howdo.nl, 1 howdoesmycode.work, 1 howdoyousaythis.com, 1 @@ -60146,7 +60120,6 @@ iacono.com.br, 0 iactu.info, 1 iadore.tk, 1 iadttaveras.com, 1 -iaeste.no, 1 iaeste.or.jp, 1 iaf.gov, 1 iafd.com, 1 @@ -60331,7 +60304,7 @@ icecreamandclara.co.uk, 1 icecreamika.tk, 1 icecutethings.com, 1 icedox.ga, 1 -icedream.tech, 0 +icedream.tech, 1 icedterminal.com, 1 icedterminal.me, 1 icedude.tk, 1 @@ -60457,7 +60430,6 @@ icustomboxes.com, 1 icy.aq, 1 icyapril.com, 1 icycanada.com, 1 -icynet.eu, 1 icyrock.com, 1 iczc.cz, 1 icze4r.co, 1 @@ -60508,7 +60480,6 @@ ideagenpentana.com, 1 ideagenqpulse.com, 1 ideahub.tk, 1 ideahubnepal.org, 1 -ideaktiv.com, 1 ideal-reality.com, 1 ideal-social.com, 1 ideal.shop, 1 @@ -61080,6 +61051,7 @@ illorenese.fr, 1 illsley.org, 1 illu.ee, 1 illubel.com, 1 +illumed.net, 1 illumepgh.com, 1 illuminatelife.tk, 1 illuminaten.tk, 1 @@ -61931,7 +61903,6 @@ infodesk.at, 1 infodis.com, 1 infoduv.fr, 1 infoeccos.com, 1 -infofamouspeople.com, 1 infofp.tk, 1 infogai.tk, 1 infogamesports.tk, 1 @@ -62141,7 +62112,6 @@ ingenieriaclinica.org, 1 ingenious-development.tk, 1 ingenium.si, 1 ingeniumsociety.tk, 1 -ingenius.ws, 1 ingerhy.com, 1 ingermany.ml, 1 ingeseratlantica.es, 1 @@ -62626,6 +62596,7 @@ intelalumni.org, 1 intelghost.com, 1 intelhost.com.br, 1 intelhost.net, 1 +intelics.com.au, 1 intelius.cf, 1 intellar.com, 1 intelldynamics.com, 1 @@ -63102,7 +63073,6 @@ ionize.cloud, 1 ionlabs.kr, 1 ionline.ml, 1 ionovia.de, 1 -ionspin.com, 0 ionstudio.pe, 1 ionutnechita.ro, 1 ionutnica.ro, 1 @@ -63452,6 +63422,7 @@ ironraven.ch, 1 ironraven.ml, 1 ironridgewi.gov, 1 ironscales.com, 0 +ironsidelubricants.com, 1 ironstar.tk, 1 irontigers.ga, 1 irontigers.gq, 1 @@ -63843,7 +63814,6 @@ it-zt.at, 1 it.com.eg, 0 it.search.yahoo.com, 0 it1b.com, 1 -it4sure.nl, 1 it76.tk, 1 it82.com, 1 it9.bar, 1 @@ -64087,6 +64057,7 @@ itsstefan.eu, 1 itstartswithme.ca, 1 itstatic.tech, 1 itsuka-world.com, 1 +itsundef.in, 0 itsupport24.tk, 1 itsupportguys.com, 1 itsynergy.co.uk, 1 @@ -64112,7 +64083,6 @@ itworks.nyc, 1 itwozi.cc, 0 itwozi.com, 1 itxartu.tk, 1 -itxlatam.com, 1 itxn.cn, 0 itzahammer.tk, 1 itzamnaxelahomestay.tk, 1 @@ -65046,6 +65016,7 @@ jcadg.com, 1 jcaicedo.com, 1 jcaicedo.tk, 1 jcb.com, 1 +jcbgolfandcountryclub.com, 1 jccars-occasions.be, 1 jccrew.org, 1 jcdenast.tk, 1 @@ -65707,7 +65678,7 @@ jk-entertainment.biz, 1 jk-forensics.de, 1 jk-rjevka.gq, 1 jkarteaga.tk, 1 -jkbfabrics.com, 1 +jkbfabrics.com, 0 jkbizsolutions.org, 1 jkdhn.me, 1 jkessen.de, 1 @@ -65828,7 +65799,6 @@ joansoy.com, 1 joaobautista.com, 0 joaojunior.com, 1 joaoorvalho.com, 1 -joaopinto.pt, 1 joaosampaio.com, 1 joaosampaio.com.br, 1 job-acasa.tk, 1 @@ -65840,7 +65810,6 @@ job.biz.tr, 1 job2day.com.ua, 1 jobalicious.nl, 1 jobbkk.com, 1 -jobbnorge.no, 1 jobbsafari.no, 1 jobbsafari.se, 1 jobcenter.tk, 1 @@ -66093,7 +66062,6 @@ jojosplaycentreandcafeteria.co.uk, 1 jokateszunk.hu, 1 jokedalderup.nl, 1 jokerme.com, 1 -jokerscloud.de, 1 jokersro.tk, 1 jokertv.ovh, 1 jokesbykids.com, 1 @@ -66231,7 +66199,7 @@ joostbovee.nl, 1 joostmaglev.nl, 1 joostvanderlaan.nl, 1 jootshop.ga, 1 -jopestkil.com, 0 +jopestkil.com, 1 jophson.tk, 1 joppies.com, 1 joqi4.gq, 1 @@ -66264,6 +66232,7 @@ jordioller.com, 1 jordjord.com, 1 jorexenterprise.com, 1 jorgelopezorquesta.tk, 1 +jorgemarquez.es, 1 jorgenegrete.tk, 1 jorgenson-peninsula.com, 1 jorgvandeven.nl, 1 @@ -66399,7 +66368,6 @@ jouwsongteksten.tk, 1 jouwzorgjob.be, 1 jovanmarkovic.ga, 1 jovenescontraelaburrimiento.tk, 1 -joviam.com, 1 jovic.hamburg, 1 jovisa.com.tw, 1 joworld.net, 0 @@ -67645,7 +67613,6 @@ kanz.jp, 1 kanzashi.com, 1 kanzlei-hhh.de, 1 kanzlei-oehler.com, 1 -kanzlei-sixt.de, 1 kanzshop.com, 1 kaohongshu.blog, 1 kaosintesta.tk, 1 @@ -67870,11 +67837,8 @@ kasparovru.tk, 1 kasper-team.tk, 1 kasperstad.dk, 1 kass-media.com, 1 -kassa.at, 1 kassa.com, 1 kassa.expert, 1 -kasse.at, 1 -kasse.pro, 1 kassemmal.at, 1 kassola.tk, 1 kastamonuhaberleri.tk, 1 @@ -68159,7 +68123,6 @@ kdw.cloud, 1 kdyby.org, 0 ke.fo, 1 ke8gtp-vf.herokuapp.com, 1 -keakon.net, 1 keane.space, 1 keaneokelley.com, 1 kearney.io, 1 @@ -68230,6 +68193,7 @@ keevault.pm, 1 keeweb.info, 1 keez.cf, 1 keezin.ga, 1 +kefaloniatoday.com, 1 kefucha.de, 1 kegan.lol, 1 keganthorrez.com, 1 @@ -68564,7 +68528,6 @@ kevinloganelectrical.co.nz, 1 kevinmathiesen.tk, 1 kevinmeijer.nl, 1 kevinmo.com, 0 -kevinmoreland.com, 1 kevinn.nl, 1 kevinpirnie.com, 1 kevinrandles.com, 0 @@ -68648,6 +68611,7 @@ kfgleasing.pl, 1 kfgsa.pl, 1 kfirba.me, 1 kfispiff.com, 1 +kfm.ink, 0 kfmhf.ca, 1 kforesund.se, 1 kfoundation.org, 1 @@ -69426,7 +69390,6 @@ klassika.cf, 1 klassika.tk, 1 klatschreime.de, 1 klaudialeszczynska.pl, 1 -klauke-enterprises.com, 1 klausbrinch.dk, 0 klausen.dk, 1 klausfoerster.tk, 1 @@ -70016,7 +69979,6 @@ kontenido.net, 1 kontikifinance.com, 1 kontikiindustries.tk, 1 kontist.com, 1 -kontorhaus-schlachte.de, 1 kontorhaus-stralsund.de, 1 kontracovid.ph, 1 kontracrew.tk, 1 @@ -70211,6 +70173,7 @@ kotonoha.cafe, 1 kotonozaka.xyz, 1 kotoopros.tk, 1 kotori.love, 1 +kotori.style, 1 kotorimusic.ga, 1 kottbulle.net, 1 kotthaus-bs.de, 1 @@ -70411,6 +70374,7 @@ kreno.tech, 1 krenstetter.at, 1 kreolis.net, 1 kresimir-blazevic.tk, 1 +krestanskydarek.cz, 1 kretaforum.dk, 1 kretschmann.consulting, 1 kreuzbergflieger.de, 1 @@ -70484,6 +70448,7 @@ kriyayoga.fr, 1 kriyayoga.mx, 1 krizevci.info, 1 krizialim.tk, 1 +krk-gaming.de, 1 krmela.com, 1 krmeni.cz, 0 kroczynski.net, 1 @@ -70569,7 +70534,6 @@ kryshodel.ml, 1 krystal-framework.ml, 1 krytykawszystkiego.com, 1 krytykawszystkiego.pl, 1 -kryx.de, 1 krzeslaonline.pl, 1 ks-19.com, 1 ks-39.com, 1 @@ -71480,7 +71444,6 @@ lag-fan.tk, 1 lag-gbr.gq, 1 lagaleria-ag.com, 1 lagavach.com, 1 -lagazzettadigitale.it, 1 lagendijk.org, 1 lagerauftrag.info, 1 lagier.xyz, 1 @@ -71608,7 +71571,7 @@ lalibella.co.uk, 1 lalokura.tk, 1 lalucepulsata.it, 1 lalucha.tk, 1 -lalucioledigitale.com, 0 +lalucioledigitale.com, 1 lalunedangkor.com, 0 lalyre-corcelles.ch, 0 lamafioso.com, 1 @@ -71983,7 +71946,6 @@ larry.buzz, 1 larryklug.com, 1 larryli.cn, 1 larrysalibra.com, 1 -lars-kusch.de, 1 lars-mense.de, 1 lars-mielke.de, 1 lars.cloud, 1 @@ -73434,7 +73396,6 @@ letsdoeit.com, 1 letsdothatagain.gq, 1 letsdothatagain.ml, 1 letsdothatagain.tk, 1 -letsearnit.com, 1 letselhulpservice.nl, 1 letsencrypt-for-cpanel.com, 1 letsfame.com, 1 @@ -74209,7 +74170,6 @@ lindbladcruises.com, 1 lindeal.com, 1 lindemann-gartenanlagen.de, 1 linden-nj.gov, 1 -linden.co, 1 linden.me, 0 linden.tk, 1 lindenlibrary-nj.gov, 1 @@ -74243,6 +74203,7 @@ lineadmins.com, 1 lineaesse5.it, 1 lineageos.org, 1 lineamortal.tk, 1 +linearb.io, 1 linearmap.com, 1 linebooks.cf, 1 linedance.tk, 1 @@ -75315,6 +75276,7 @@ lojamultplick.com.br, 1 lojaodo9.com.br, 1 lojaprojetoagua.com.br, 1 lojaskd.com.br, 1 +lojasmary.com.br, 1 lojasoulstyle.com.br, 1 lojasportmixonline.com.br, 1 lojastec.com.br, 1 @@ -75544,11 +75506,6 @@ look.co.il, 1 lookae.com, 0 lookagain.co.uk, 1 lookasik.eu, 1 -lookastic.com, 1 -lookastic.de, 1 -lookastic.es, 1 -lookastic.fr, 1 -lookastic.ru, 1 lookatmysco.re, 1 lookbetweenthelines.com, 0 looker.wang, 0 @@ -75978,7 +75935,6 @@ lrssystems.com, 1 lrumeq.com, 1 lrv-grobbendonk.tk, 1 ls-alarm.de, 1 -ls-rp.es, 1 lsal.fr, 1 lsal.me, 1 lsbricks.com, 1 @@ -76171,7 +76127,6 @@ ludum-polus.xyz, 1 ludum.pl, 1 ludunwayoo.com, 1 ludwig.im, 1 -ludwiggrill.de, 1 ludwigjohnson.se, 1 ludwigpro.net, 1 luedeke-bremen.eu, 1 @@ -77103,7 +77058,6 @@ magicorange.com, 1 magicpill.com.au, 1 magicsms.pl, 1 magicspaceninjapirates.de, 1 -magicstay.com, 1 magictable.com, 1 magictallguy.tk, 1 magicthecreation.tk, 1 @@ -77933,6 +77887,7 @@ manyproservices.com, 1 manytubes.ga, 1 manyzero.ml, 1 manzanita-nsn.gov, 1 +manzoorahmed.com, 1 manzunadh.com, 1 maomihz.com, 1 maone.net, 1 @@ -78192,7 +78147,6 @@ mariereichl.cz, 1 mariescountymo.gov, 1 marieskyler.net, 1 marietrap.ch, 1 -marijnfidder.nl, 1 marijuanajobscannabiscareers.com, 1 marijuanamed420.com, 1 marikafranke.de, 1 @@ -78436,7 +78390,6 @@ marocmail.ma, 1 marocnews.tk, 1 marocweb.tk, 1 maroebeni.tk, 1 -marokkaansearganolie.nl, 1 marolu.one, 1 maroochydorecentre.com, 1 maroochydorecitycenter.com, 1 @@ -79564,7 +79517,7 @@ me-groups.com, 1 me-news.tk, 1 me-soft.nl, 1 me.com.br, 1 -me.net.nz, 1 +me.net.nz, 0 me.tc, 1 me.vu, 1 me7878.com, 1 @@ -79601,6 +79554,7 @@ mebelconcept.tk, 1 mebelipalitra.ru, 0 mebelisk.com.br, 1 mebelnik.pro, 1 +mebeloffice.com.ua, 1 mebelshik.tk, 1 mec010.com, 1 mec020.com, 1 @@ -80310,6 +80264,7 @@ megatyumen.ru, 0 megauction.tk, 1 megavasoc.com.ar, 1 megaviews.tk, 1 +megawarez.org, 1 megawebsite.tk, 1 megawhat.energy, 1 megaxchange.cash, 1 @@ -80358,7 +80313,6 @@ meier-stracke.de, 1 meierhofer.net, 1 meiersmarkus.de, 1 meigetsuen1980.com, 1 -meijburg.com, 1 meijwebdesign.nl, 1 meikampf.de, 1 meikan.moe, 1 @@ -81099,7 +81053,6 @@ mexicom.org, 1 mexicosrit.tk, 1 mexior.nl, 1 meyafloors.com, 1 -meyateks.com, 1 meydan.tv, 1 meyer-horn.de, 1 meyeraviation.com, 1 @@ -81624,7 +81577,6 @@ mikecapson.com, 1 mikecb.org, 1 mikechasejr.tk, 1 mikeflux.com, 1 -mikegao.net, 0 mikegao.org, 1 mikegerwitz.com, 1 mikeguy.co.uk, 1 @@ -82725,7 +82677,6 @@ moabit.de, 1 moabpapier.de, 1 moabygg.se, 1 moahmo.com, 0 -moas.design, 1 moas.photos, 1 mob2con.com.br, 1 moba-automation.com, 1 @@ -84576,7 +84527,6 @@ munialajuela.go.cr, 1 munibilling.com, 1 munich-eventlocations.de, 1 munihei.de, 1 -munkavedelemaruhaz.hu, 0 munki.org, 1 munkibuilds.org, 1 munnasleepwear.com, 1 @@ -85136,6 +85086,7 @@ mycrowdstack.com, 1 mycrypnet.io, 1 mycustomwriting.com, 1 mycutebee.com, 1 +mycyberspace.tech, 1 mydabb.com, 1 mydais.org, 1 mydarkness.cf, 1 @@ -85156,7 +85107,6 @@ mydestiny.tk, 1 mydevolo.com, 1 mydevolo.de, 1 mydigicard.biz, 1 -mydigicard.host, 1 mydigitalnation.com, 1 mydirtysexstories.com, 1 mydisabilitymatters.com, 1 @@ -85965,6 +85915,7 @@ nadsandgams.com, 1 naduvilathu.tk, 1 nadyaolcer.fr, 1 naehkurshamburg.de, 1 +naehtalente.de, 1 naemnuk.tk, 1 nafhomes.com, 1 nafhroaviano.com, 1 @@ -86540,6 +86491,7 @@ nautiboat.it, 1 nauticlink.com, 1 nauticlux.com, 1 nautika.tk, 1 +nautiljon.com, 1 nautsch.de, 1 nauz-art.com, 1 nav.no, 1 @@ -87409,6 +87361,7 @@ netzklad.de, 1 netzona.org, 1 netzspielplatz.de, 0 netzsv.website, 1 +netztest.at, 1 netzvieh.de, 1 netzwerk-lq.com, 1 netzwerk-sozialliberal.de, 1 @@ -87489,7 +87442,6 @@ nevim-co-varit.cz, 1 nevivur.net, 1 nevkurse.tk, 1 nevntech.com, 1 -nevocloud.com, 1 nevolution.me, 1 nevoxo.com, 0 nevrodiversitet.no, 1 @@ -87599,6 +87551,7 @@ newglarusvillagewi.gov, 1 newgle.xyz, 1 newgrowbook.com, 1 newguidance.ch, 0 +newhamyoungbloods.co.uk, 1 newholland.tk, 1 newhomedesign.tk, 1 newhopeplacement.com, 1 @@ -88671,7 +88624,6 @@ nobounce.me, 0 noboxo.ch, 1 nobreaks.ca, 1 nobs.no, 1 -nobschannel.tk, 1 nobsmc.com, 1 nobz.com.br, 0 noc.wang, 1 @@ -89191,7 +89143,6 @@ notora.tech, 1 notoriousdev.com, 1 notos.co, 1 notre-planete.info, 0 -notrecinema.com, 1 notrefuse.tk, 1 notrero13.com, 1 notresiteduvercors.tk, 1 @@ -89653,7 +89604,6 @@ nus.edu.ws, 1 nusaceningan.io, 1 nusantaraku.tk, 1 nusatrip-api.com, 1 -nussadoclub.org, 1 nussschale.eu, 1 nut-dev.com, 1 nut.services, 1 @@ -89902,6 +89852,7 @@ o2ss.com, 1 o3-staging.herokuapp.com, 1 o3.wf, 1 o36533.com, 1 +o3c.com.br, 1 o3ptitschats.fr, 1 o3swap.com, 1 o3wallet.com, 1 @@ -90291,6 +90242,7 @@ odinpl.com, 1 odinraz.ga, 1 odinseye.net, 1 odinson.tk, 1 +odiris.lk, 1 odishainfo.tk, 1 odishatv.in, 1 odisseo.io, 1 @@ -90353,7 +90305,6 @@ oetzies-quiz.com, 1 oevkg.at, 1 of-sound-mind.com, 1 of2106.dnsalias.org, 1 -of2m.fr, 1 ofaas.jp, 1 ofallonil.gov, 1 ofaqim.city, 1 @@ -90422,6 +90373,7 @@ officialdubaidev.com, 1 officialgaiasabbour.com, 1 officialhazalturesan.tk, 1 officialilmonte.com, 1 +officialmountainview.com, 1 officialniledevelopments.com, 1 officialpyramids.com, 1 officialreedygroup.com, 1 @@ -90628,6 +90580,7 @@ oklahomaworkstogether.gov, 1 okmaybe.ca, 1 okmirror.net, 1 okmulgeecounty.gov, 1 +okmx.cloud, 1 okmx.de, 1 okna-tm.kz, 1 okna-vek.com.ua, 1 @@ -94355,7 +94308,6 @@ peachesandchampagne.com, 1 peacock.onl, 1 peak-careers.com, 1 peakd.com, 1 -peakersoperations.com, 1 peakhillre.ga, 1 peakhomeloan.com, 1 peakmktg.co, 1 @@ -94475,7 +94427,6 @@ peerigon.com, 0 peername.com, 1 peernode.net, 1 peerpressurecreative.com, 1 -peers.cloud, 1 peers.gq, 1 peers.tk, 1 peersquaders.ga, 1 @@ -95217,6 +95168,7 @@ pfonks.com, 1 pfp.works, 1 pfr.email, 1 pfr.moe, 1 +pfrost.me, 1 pfsandbox.com, 1 pfsquad.nu, 1 pfssales.com, 1 @@ -96555,7 +96507,6 @@ playdaysparties.co.uk, 1 playdlawosp.pl, 1 playdrop.ml, 1 playelephant.com, 1 -player.me, 1 player701.ru, 1 playerdb.co, 1 playface.ml, 1 @@ -97042,7 +96993,6 @@ pogljad-brest.tk, 1 pogodavolgograd.tk, 1 pogodok.tk, 1 pogomate.com, 1 -pogoswine.com, 1 pogotowie-komputerowe.tk, 1 pogotowiekomputeroweolsztyn.pl, 1 pogrebisky.net, 1 @@ -97308,6 +97258,7 @@ polypane.rocks, 1 polypharma90.com, 1 polyr.xyz, 1 polyring.ch, 1 +polytarian.com, 1 polytechecosystem.vc, 1 polytekniskforening.dk, 1 pomadgw.xyz, 1 @@ -98399,6 +98350,7 @@ prettycloud.org, 1 prettycobs.com, 1 prettygirlcheats.com, 1 prettykeira.tk, 1 +prettymama.co.uk, 1 prettynode.com, 0 prettytunesapp.com, 1 pretzelhands.com, 0 @@ -98682,6 +98634,7 @@ privu.me, 1 privw.com, 1 privy-staging.com, 1 privy.com, 1 +prixpictet.com, 1 priyan.tk, 1 prizehometickets.com.au, 1 prizelink.com.au, 1 @@ -98970,7 +98923,6 @@ progressportaal.nl, 1 progressverkiezingen.nl, 1 progresswww.nl, 1 progresszivnyomda.hu, 1 -progrillcleaning.com, 1 progtime.net, 1 prohashing.com, 1 prohelpers.tk, 1 @@ -99108,7 +99060,6 @@ promohulp.nl, 1 promohunt.ru, 0 promokodi.tk, 1 promolover.com, 1 -promopony.com, 1 promorder.ru, 1 promoscuola.net, 1 promosjungle.com, 1 @@ -99454,7 +99405,6 @@ psdsfn.com, 1 psdsuc.com, 1 pseac.org, 1 pseek.com, 1 -pself.net, 1 pservicer.com.mx, 1 pseta.ru, 1 psevdonim.ga, 1 @@ -99467,7 +99417,6 @@ pshweb.tk, 1 psi-tv.tk, 1 psicanalista.milano.it, 1 psici.eu, 1 -psico-gabrielagalindo.com, 1 psicoblog.tk, 1 psicoexpansao.com.br, 1 psicologajanainapresotto.com.br, 1 @@ -99964,7 +99913,6 @@ puur.gent, 1 puurgent.be, 1 puxlit.net, 1 puyallupnissanparts.com, 1 -puyblanc.info, 1 puzi.nl, 1 puzz.gg, 1 puzzlage.com, 1 @@ -101385,7 +101333,6 @@ ramydent.no, 1 ramynetwork.tk, 1 ran-drunken.tk, 1 ran-sama.ddns.net, 1 -rana.realestate, 1 rana.shop, 1 ranalawassociates.com, 1 ranasinha.com, 1 @@ -101402,7 +101349,6 @@ randolphcountyal.gov, 1 randolphcountyil.gov, 1 random-project.com, 1 random-samplings.org, 1 -random-stat.work, 1 random.org, 1 randomactsofkindness.org, 1 randomadversary.com, 1 @@ -101739,7 +101685,6 @@ rbknarkers.tk, 1 rbltracker.com, 1 rbmafrica.co.za, 1 rbmland.com, 1 -rbn.is, 1 rbnet.xyz, 1 rbs.co.uk, 1 rbs.com, 1 @@ -101883,7 +101828,6 @@ reades.co.uk, 1 reades.uk, 1 readify.net, 1 readifycloud.com, 1 -reading-assist.com, 1 readingea.com, 1 readingrats.de, 1 readlater.de, 1 @@ -102636,8 +102580,6 @@ reisenbauer.at, 0 reiseversicherung-werner-hahn.de, 1 reiseziel-hiddensee.de, 0 reiseziele.tk, 1 -reishihealthcare.com, 1 -reishoku.net, 0 reishunger.de, 1 reispower.nl, 1 reisslittle.com, 1 @@ -102777,6 +102719,7 @@ reminisceaudio.com, 1 remirampin.com, 1 remissan.com, 1 remissionclinic.com, 1 +remitano.com, 1 remitatm.com, 0 remiz.org, 1 remkond.ru, 1 @@ -102816,7 +102759,6 @@ remoteutilities.com, 1 remoteworkertech.asia, 1 remoteworkingpal.com, 1 remotewx.com, 1 -remotish.com, 1 remotley.com, 1 removalcellulite.com, 1 removallaser.com, 1 @@ -102914,7 +102856,6 @@ rentacaramerica.com, 1 rentalboatsafety.com, 1 rentamosandamios.com.mx, 1 rentandamiosycasetas.com, 1 -rentandgo.it, 1 rentaplant.hr, 1 rentasweb.gob.ar, 1 rentbrowser.com, 1 @@ -103058,7 +102999,6 @@ resepimok.com, 0 resepsimbok.com, 1 reservabiosferavalledelcabriel.com, 1 reservadecitasonline.com, 1 -reserveandreceive.com, 1 reservetonshift.com, 1 reservilaisliitto.fi, 1 resfriatech.com.br, 1 @@ -103319,7 +103259,6 @@ revers.tk, 1 reverse1999.wiki, 1 reverseaustralia.com, 1 reversecanada.com, 1 -reversecrucifixkm.altervista.org, 1 reversedns.tk, 1 reverseloansolutions.com, 1 reverselookupphone.us, 1 @@ -103697,6 +103636,7 @@ ridvan-vllasaliu.tk, 1 riechsteiner.tech, 1 riecht-besser.de, 1 riederle.com, 1 +riedl-shk.de, 1 riemzac.com, 1 riesenweber.id.au, 1 riesheating.com, 1 @@ -104112,7 +104052,6 @@ robertsoncountytn.gov, 1 robeschinoises.fr, 1 robgorman.ie, 1 robhorstmanshof.nl, 1 -robi-aesch.ch, 1 robi-net.it, 1 robicue.com, 0 robimgood.com.ua, 1 @@ -104203,7 +104142,6 @@ rock-zottegem.be, 1 rock4life.be, 1 rocka.me, 1 rockabilly-sinners.tk, 1 -rockagogo.com, 1 rockandroll.tk, 1 rockbankland.com.au, 1 rockbridge.tk, 1 @@ -105474,6 +105412,7 @@ ruthbarrettmusic.com, 1 ruthbellgrahammemorial.org, 1 ruthil.co.il, 1 ruthil.com, 1 +ruthlavidente.com, 1 ruthmontenegro.com, 1 ruthschoenmaekers.com, 1 rutiger.com, 1 @@ -105842,7 +105781,6 @@ safebits.fr, 1 safebits.it, 1 safeboard.ml, 1 safebus.io, 1 -safebuyerscheme.co.uk, 1 safecar.gov, 1 safecso.cf, 1 safedrivepod.com, 1 @@ -105894,7 +105832,6 @@ safetables.ga, 1 safetext.me, 1 safethishome.com, 1 safetrax.in, 1 -safetum.fi, 1 safety-in-construction.tk, 1 safetycloud.me, 1 safetydrivessuccess.com, 1 @@ -105916,7 +105853,6 @@ safiosolutions.com, 1 safirakbar.tk, 1 safire.ac.za, 1 safkgroup.com, 1 -safnah.com, 0 safungerar.se, 1 sagacioussuricata.com, 1 sagagardencentre.co.uk, 1 @@ -106052,6 +105988,7 @@ sairus.fr, 1 saisandesh.org, 1 saisecure.net, 1 saisons-fruits-legumes.fr, 1 +saisyuusyou-ikebukuro.com, 1 saisyuusyou-omiya.com, 1 saisyuusyou-takasaki.com, 1 saisyuusyou-utsunomiya.com, 1 @@ -106092,7 +106029,6 @@ saksonski-szlak-parowozow.pl, 1 sakura-paris.org, 1 sakuracdn.com, 1 sakuradata.com, 1 -sakuramarketingdigital.com.br, 1 sakurapalace.tk, 1 sakustar.com, 1 salaamgateway.com, 1 @@ -106457,8 +106393,6 @@ sandbox.mydigipass.com, 0 sandelduggal.com, 1 sander.sh, 1 sanderdesign.tk, 1 -sanderkoenders.eu, 1 -sanderkoenders.nl, 1 sanderpoppe.com, 1 sanderstech.solutions, 1 sandervanderstap.nl, 1 @@ -106825,6 +106759,7 @@ satat.cf, 1 satat.tk, 1 sataturf.com, 1 sateahafreedi.com, 1 +satealliasdomain.net, 1 satelital.tk, 1 satellights.tk, 1 satellite-equipment.tk, 1 @@ -107331,7 +107266,6 @@ schnuckenhof-wesseloh.de, 1 schnyder-werbung.ch, 0 schody-rozycki.pl, 1 schoenstatt-fathers.link, 1 -schoenstatt-fathers.us, 1 schoenstatt.link, 1 schoepski.de, 1 schoffelcountry.com, 1 @@ -107386,7 +107320,6 @@ schoolbag.gq, 1 schoolbag.ml, 1 schoolbag.tk, 1 schoolbuddy.ch, 1 -schoolbus.at, 0 schoolbytes.com.au, 1 schoolbytes.education, 1 schoolcafe.com, 1 @@ -107502,7 +107435,6 @@ schwertkriege.de, 1 schwienbacher-karl.it, 1 schwifty.cloud, 1 schwimmschule-kleine-fische.de, 1 -schwimmschulen.de, 1 schwinabart.com, 1 schwingen.net, 0 schwinger.me, 1 @@ -107882,7 +107814,6 @@ search.yahoo.com, 0 searchable.ml, 1 searchbar.co.za, 1 searchbyai.com, 1 -searchcandy.nl, 1 searchcandy.uk, 1 searchdatalogy.com, 1 searchenginelinks.co.uk, 1 @@ -107924,7 +107855,6 @@ seasonsof.berlin, 1 seaspineortho.com, 1 seatbeltpledge.com, 1 seatinglane2u.com, 1 -seatsurfing.de, 1 seattle-life.net, 1 seattlebasementwaterproofers.com, 1 seattlecornerstonedental.com, 1 @@ -108086,6 +108016,7 @@ secure-computing.net, 1 secure-consult.com, 1 secure-graphic.de, 1 secure-gw.de, 1 +secure-it-is.nl, 1 secure-server-hosting.com, 0 secure.advancepayroll.com.au, 1 secure.facebook.com, 0 @@ -108592,6 +108523,7 @@ sentry.io, 1 sentry.nu, 1 sentrybay.com, 1 sentworks.com, 1 +senu.pro, 1 senzaparole.de, 1 senzei.tk, 1 seo-analyse.com, 1 @@ -109023,7 +108955,6 @@ seteampty.net, 1 setenforce.one, 1 setesat.com.br, 1 setevik.tk, 1 -sethcaplan.com, 1 sethcorker.com, 1 sethcurry.ga, 1 sethforprivacy.com, 1 @@ -109301,7 +109232,7 @@ shadowvolt.net, 1 shadwe.com, 1 shadynook.net, 1 shadypark.tk, 1 -shaftofdarkness.club, 1 +shaftofdarkness.club, 0 shag-shag.ru, 1 shahar.cc, 0 shaharyaranjum.com, 1 @@ -109494,6 +109425,7 @@ shawanocountywi.gov, 1 shawarmapressfranchise.com, 1 shawcentral.ca, 0 shawclan.id.au, 1 +shawfactor.com, 1 shawfamily.id.au, 1 shawiah.tk, 1 shawnaleighdesigns.com, 1 @@ -110622,6 +110554,7 @@ silvergoldbull.ge, 1 silvergoldbull.gl, 1 silvergoldbull.gr, 1 silvergoldbull.gt, 1 +silvergoldbull.hk, 1 silvergoldbull.hn, 1 silvergoldbull.hr, 1 silvergoldbull.hu, 1 @@ -111958,7 +111891,6 @@ smartfit.cz, 1 smartfitkitchen.bg, 1 smartfixmarburg.de, 1 smartfons.tk, 1 -smartfooding.com, 1 smartftp.com, 1 smartgirledits.com, 1 smartgirls.tk, 1 @@ -112119,7 +112051,6 @@ smithteresa.tk, 1 smits.com, 1 smits.frl, 1 smitsmail.net, 1 -smkbpj.edu.my, 1 smkmusaga.sch.id, 0 smkn5smg.sch.id, 1 smkw.com, 0 @@ -112240,6 +112171,7 @@ snapaffiliate.net, 1 snapappointments.com, 1 snapappts.com, 1 snapbuzz.tk, 1 +snapchat.com, 1 snapfinance.com, 1 snapintegrations.net, 1 snapkit.com, 1 @@ -112380,7 +112312,6 @@ snrd.de, 1 snrd.eu, 1 snroth.de, 1 snrub.co, 1 -sns-tg.pl, 1 sns.hu, 1 snsdomain.com, 1 snsirius.cf, 1 @@ -112663,6 +112594,7 @@ sogaro-realestate.de, 1 sogeek.me, 1 sogesel.es, 1 sogo.com.my, 0 +sogola.com, 1 sogravatas.com.br, 1 sogravatas.net.br, 1 sogudo.com, 0 @@ -112864,7 +112796,6 @@ solvaybank.com, 1 solved.tips, 1 solvedapp.io, 1 solvemethod.com, 1 -solvewebmedia.com, 1 solviejo.tk, 1 solvin.com, 1 solviq.com, 1 @@ -112955,7 +112886,6 @@ sondercare.com, 1 sonderfloral.com, 1 sondergaard.de, 1 sonderkomission.ch, 1 -sondersobk.dk, 1 sondoro.tk, 1 sondriotoday.it, 1 sonerezh.bzh, 1 @@ -113090,7 +113020,6 @@ sorincocorada.ro, 1 sorn.service.gov.uk, 1 sornyaki.tk, 1 sorocabacopos.com.br, 1 -sorpresashop.nl, 0 sorridi.xyz, 1 sorrowfulunfounded.com, 1 sort.land, 1 @@ -114909,7 +114838,6 @@ stefanovski.io, 1 stefanrusie.ro, 1 stefanvd.net, 1 stefany.cloud, 1 -stefany.eu, 1 stefchapman.tk, 1 stefcraps.tk, 1 steffenmeister.com, 1 @@ -114935,7 +114863,6 @@ steinibox.de, 1 steinmassl.org, 1 steinmetz.cloud, 1 stekelenburg.me, 1 -steklein.de, 1 stekosouthamerica.com, 1 stelfox.net, 1 stelga.ca, 1 @@ -115152,6 +115079,7 @@ stichtingsticky.nl, 0 stichtingwwtoegankelijk.nl, 1 stick2bike.de, 1 stickandpoketattookit.com, 1 +stickeramoi.com, 1 stickerparadise.me, 1 stickers-garage.com, 1 stickertrade.me, 1 @@ -115235,6 +115163,7 @@ stisidores.org, 1 stitch.money, 1 stitchfiddle.com, 1 stitchinprogress.com, 1 +stivesbouncycastlehire.co.uk, 1 stjh.org.sg, 1 stjohncamden.com, 1 stjohnin.com, 1 @@ -115642,7 +115571,6 @@ stratuscloudconsulting.net, 1 stratussc.com, 1 straubis.org, 1 straubs.eu, 1 -strauser.com, 1 strauss.eu.com, 1 strauss.tirol, 1 stravato.com, 1 @@ -116927,7 +116855,6 @@ sverdlovsk.tk, 1 sverlo.cf, 1 svet.tk, 1 svetandroida.cz, 1 -svetapublic.com, 1 svetila.com, 1 svetlanamamedova.tk, 1 svetlayarus.tk, 1 @@ -117234,7 +117161,6 @@ sydsray.xyz, 1 syedmuhdadasgardezi.tk, 1 syenar.net, 1 syezd.com.au, 1 -sygnalista-24.pl, 1 syhost.at, 1 syhost.ch, 1 syhost.de, 1 @@ -117764,7 +117690,6 @@ taiga-aikidojo.tk, 1 taigalaloca.net, 1 taihesy.tk, 1 taijul.tk, 1 -taikhoanfree.com, 1 taikodom.tk, 1 tail.id.lv, 1 tail.lv, 1 @@ -118678,7 +118603,6 @@ teatrarium.com, 1 teatroutopia.tk, 1 teazer.tk, 1 teb-akademia.pl, 1 -tebebo.com, 1 tebian.tk, 1 tebieer.com, 1 tebis-consulting.my-router.de, 1 @@ -119693,7 +119617,6 @@ texby.com, 1 texcolors.com.co, 1 texel.es, 1 texel.tk, 1 -texhnolyze.net, 1 texican.nl, 1 texicopolicenm.gov, 1 texier.mx, 1 @@ -119864,7 +119787,6 @@ thaserv.de, 1 thassos-world-web.tk, 1 thassos.tk, 1 that.host, 1 -thatdaria.com, 1 thatdarkplace.com, 1 thatdirtyd.com, 1 thatguy.rocks, 1 @@ -120578,6 +120500,7 @@ themeridianway.com, 1 themesurgeons.net, 1 themetropreneur.com, 1 themexicos.tk, 1 +themexx.at, 1 themiddle.co, 1 themigraineinstitute.com, 1 themilanlife.com, 1 @@ -120992,7 +120915,6 @@ thetravelinstitute.com, 1 thetravelstylist.nl, 1 thetrendspotter.net, 1 thetropics.tk, 1 -thetrove.is, 1 thetrulycharming.com, 1 thetuxkeeper.de, 0 thetvtraveler.com, 1 @@ -121888,7 +121810,6 @@ tinturanaturale.it, 1 tiny-house.ro, 1 tiny-img.com, 1 tiny-tattoos.tk, 1 -tiny777.com, 1 tinychen.com, 1 tinycrm.pl, 1 tinydogs.ga, 1 @@ -122578,6 +122499,7 @@ tonermonster.de, 1 toners.ro, 1 tonex.de, 1 tonex.nl, 1 +tongjistudents.org, 1 tongli.eu.org, 1 tonguetechnology.com, 1 toni-dis.ch, 0 @@ -123715,7 +123637,6 @@ trasatsatelital.com.ar, 1 trash2treasurecreations.co.za, 1 trashcanheroes.tk, 1 trashcraft.tk, 1 -trashexpert.ru, 1 trashnothing.com, 1 trashpanda.website, 1 trashwagon.club, 1 @@ -124811,7 +124732,6 @@ tujunfang.com, 1 tukdesigns.com, 1 tukebab.com, 1 tuketicidergisi.com, 1 -tuketicihaklari.net, 1 tukiart.tk, 1 tula-city.tk, 1 tula-news.ga, 1 @@ -125066,7 +124986,6 @@ tutorialinux.com, 1 tutorialitmalaysia.tk, 1 tutorialphotoshop.tk, 1 tutorials.vg, 1 -tutorialseo.com.br, 1 tutoringindustry.tk, 1 tutorio.ga, 1 tutorme.com, 1 @@ -125168,7 +125087,7 @@ tvtorcedor.com.br, 1 tvvlconnect.nl, 1 tvzahist.com.ua, 1 tvzr.com, 1 -tw-louis.com, 1 +tw-louis.com, 0 tw.search.yahoo.com, 0 twa.travel, 1 twaddler.cf, 1 @@ -125735,6 +125654,7 @@ uinst.tk, 1 uinvest.ml, 1 uinvest.tk, 1 uiop.link, 1 +uirysa.pl, 1 uitdeoudekoektrommel.com, 1 uiterwijk.org, 1 uitgeverij-deviant.nl, 1 @@ -126116,7 +126036,6 @@ uniex.ch, 1 uniex.pw, 1 unifashion.ro, 1 unifestal.com, 1 -unified.show, 1 unifiednetwork.me, 1 uniforcele.com, 1 uniformebateriasheliar.com.br, 1 @@ -126551,7 +126470,7 @@ upsocial.pp.ua, 1 upstairs.one, 1 upstart.com, 1 uptech.biz.id, 1 -uptech.vn, 1 +uptech.vn, 0 uptechbrasil.com.br, 1 uptimed.com, 1 uptimesonar.com, 1 @@ -126897,6 +126816,7 @@ usportsgo.com, 1 uspreventiveservicestaskforce.org, 1 usr.nz, 0 usrspace.at, 1 +uss-atlas.de, 1 ussemiquincentennial.gov, 1 ussm.gov, 1 ussm.tk, 1 @@ -127696,7 +127616,6 @@ vchelyabinske.tk, 1 vcloudways.com, 1 vcm.ru, 1 vcmi.download, 1 -vcmuae.ae, 1 vconcept.ch, 1 vconcept.me, 1 vconstruct.com, 1 @@ -127740,7 +127659,6 @@ ve.search.yahoo.com, 0 ve3oat.ca, 1 ve3zsh.ca, 1 veadoscomfome.tk, 1 -veast.network, 1 vebbankir-zajm-onlajn.gq, 1 vebdengi.tk, 1 veber.bg, 1 @@ -128246,7 +128164,6 @@ vgchat.us, 1 vgcheat.com, 1 vgerak.com, 1 vglist.co, 1 -vgolos.zt.ua, 1 vgopilot.azurewebsites.net, 1 vgorcum.com, 1 vgpu.vladimir.ru, 1 @@ -128832,7 +128749,6 @@ vintagetoydepot.tk, 1 vintagetrailerbuyers.com, 1 vintagewedding.tk, 1 vintazh.net, 1 -vinticom.ch, 0 vintizen.com, 1 vintom.com, 1 vintonia.gov, 1 @@ -130750,6 +130666,7 @@ wausharacountywi.gov, 1 wauwatosa.gov, 1 wauzaji.com, 1 wav-productions.com, 1 +wav.tv, 1 wave-inc.co.jp, 1 wave.is, 1 wave.red, 1 @@ -131475,6 +131392,7 @@ weegshop.nl, 1 weekdone.com, 1 weekendbus.pl, 1 weekendcandy.com, 1 +weekendgolf.co, 1 weekendinitaly.com, 1 weekendplayers.tk, 1 weekendstartup.ml, 1 @@ -131599,7 +131517,6 @@ wellness-bonbon.de, 1 wellness-gutschein.de, 1 wellness-spa-suedtirol.com, 1 wellnesscheck.net, 1 -wellnessever.com, 1 wellnesshotel-weimar.de, 1 wellnessmassage-eitorf.de, 1 wellsolveit.com, 0 @@ -131901,7 +131818,6 @@ wgrfoods.co.uk, 1 wgrlc.vic.gov.au, 1 wgrstudio.com, 1 wgsh.de, 1 -wgsmartsavings.com, 1 wgsuyi.cf, 1 wgtrm.com, 1 wgyt.tk, 1 @@ -132931,7 +132847,6 @@ wizardkami.tk, 1 wizardmeow.xin, 1 wizardofhomes.com, 1 wizardschool.tk, 1 -wizardwiz.com, 1 wizathon.com, 1 wizdomonwheels.com, 1 wizzair.com, 1 @@ -133362,7 +133277,6 @@ workwelltoday.net, 1 workwithgo.com, 0 workwithusaid.gov, 1 worky.ph, 1 -world-avto.fun, 1 world-citizen-report.com, 1 world-documentary.ml, 1 world-education-association.org, 1 @@ -134380,7 +134294,6 @@ xentho.net, 1 xentox.com, 1 xeonlab.com, 1 xeonlab.de, 1 -xeoxaz.net, 1 xerbisworks.com, 1 xerbo.net, 0 xerdeso.tk, 1 @@ -137387,9 +137300,9 @@ zeedroom.be, 1 zeegers.family, 1 zeeheldenwijk-urk.nl, 1 zeekajakvaren.tk, 1 -zeekspace.com, 1 zeel.com, 1 zeelandbrug.tk, 1 +zeeshan.website, 0 zeet.tk, 1 zeetoppers.nl, 1 zefort.com, 1 @@ -138251,6 +138164,7 @@ zumberak.tk, 1 zummoricambi.com, 1 zumtaedanceschool.co.za, 1 zumturm.org, 1 +zumub.com, 1 zumwildenaffen.com, 1 zund-app.com, 1 zundapp.one, 1 diff --git a/services/settings/dumps/blocklists/addons-bloomfilters.json b/services/settings/dumps/blocklists/addons-bloomfilters.json index 309e3a43f47f5..dd829446ad746 100644 --- a/services/settings/dumps/blocklists/addons-bloomfilters.json +++ b/services/settings/dumps/blocklists/addons-bloomfilters.json @@ -1,5 +1,29 @@ { "data": [ + { + "stash": { + "blocked": [ + "{da6554a8-470c-4d6a-a6ca-904740683553}:1.135.1" + ], + "unblocked": [] + }, + "schema": 1662662238246, + "key_format": "{guid}:{version}", + "stash_time": 1662683708176, + "id": "300d05ca-d73b-4c4a-9042-aa7f4ac12a87", + "last_modified": 1662683838451 + }, + { + "stash": { + "blocked": [], + "unblocked": [] + }, + "schema": 1662639897803, + "key_format": "{guid}:{version}", + "stash_time": 1662662108159, + "id": "8019964d-9827-440a-8103-9f64fd24dc5d", + "last_modified": 1662662238132 + }, { "stash": { "blocked": [ @@ -2068,5 +2092,5 @@ "last_modified": 1656333551168 } ], - "timestamp": 1662554243287 + "timestamp": 1662683838451 } diff --git a/services/settings/dumps/main/devtools-compatibility-browsers.json b/services/settings/dumps/main/devtools-compatibility-browsers.json index fd78bcc571f4a..2281eb00ab196 100644 --- a/services/settings/dumps/main/devtools-compatibility-browsers.json +++ b/services/settings/dumps/main/devtools-compatibility-browsers.json @@ -1,13 +1,400 @@ { "data": [ { - "name": "Chrome", - "schema": 1661424896547, + "name": "Edge", + "schema": 1662643475899, + "status": "nightly", + "version": "107", + "browserid": "edge", + "id": "df33b83f-c87d-4f66-8468-f0e5f065aa1c", + "last_modified": 1662648201700 + }, + { + "name": "Firefox", + "schema": 1662643476112, + "status": "planned", + "version": "109", + "browserid": "firefox", + "id": "b2ae0bee-3514-49b3-b67c-759aef7d6439", + "last_modified": 1662648201698 + }, + { + "name": "Firefox", + "schema": 1662643476150, + "status": "planned", + "version": "110", + "browserid": "firefox", + "id": "b652c866-d130-4b72-b36c-4e16d0a7ea0b", + "last_modified": 1662648201695 + }, + { + "name": "Firefox", + "schema": 1662643476190, + "status": "planned", + "version": "111", + "browserid": "firefox", + "id": "81afa5f4-c81a-48f4-99e1-2df1d3122a8a", + "last_modified": 1662648201693 + }, + { + "name": "Firefox", + "schema": 1662643476228, + "status": "planned", + "version": "112", + "browserid": "firefox", + "id": "69ca36df-86aa-43f1-a35c-89940b11bebe", + "last_modified": 1662648201690 + }, + { + "name": "Firefox", + "schema": 1662643476267, + "status": "planned", + "version": "113", + "browserid": "firefox", + "id": "36d33cd8-6e3a-4ab8-ad9c-ece003bcb1d0", + "last_modified": 1662648201687 + }, + { + "name": "Firefox", + "schema": 1662643476308, + "status": "planned", + "version": "114", + "browserid": "firefox", + "id": "bf12a70d-f1da-46a1-abe1-b873feb2895a", + "last_modified": 1662648201685 + }, + { + "name": "Firefox", + "schema": 1662643476348, + "status": "planned", + "version": "115", + "browserid": "firefox", + "id": "f8bed161-4be5-435b-9b42-7a7eafd672b7", + "last_modified": 1662648201682 + }, + { + "name": "Firefox", + "schema": 1662643476387, + "status": "planned", + "version": "116", + "browserid": "firefox", + "id": "0486c6bc-210b-48ea-aeb8-2b9712bae1d7", + "last_modified": 1662648201680 + }, + { + "name": "Firefox", + "schema": 1662643476427, + "status": "planned", + "version": "117", + "browserid": "firefox", + "id": "52767e7f-9d5f-4c85-a37f-a384bd816f07", + "last_modified": 1662648201677 + }, + { + "name": "Firefox", + "schema": 1662643476470, + "status": "planned", + "version": "118", + "browserid": "firefox", + "id": "e99e2604-f5e8-4509-ae9e-a6335540a0b5", + "last_modified": 1662648201674 + }, + { + "name": "Firefox", + "schema": 1662643476509, + "status": "planned", + "version": "119", + "browserid": "firefox", + "id": "d475c40b-3ba8-4a2b-b750-7977cad2e95d", + "last_modified": 1662648201672 + }, + { + "name": "Firefox", + "schema": 1662643476548, + "status": "planned", + "version": "120", + "browserid": "firefox", + "id": "8abd289c-120a-47ed-a194-d3a7b6bad31b", + "last_modified": 1662648201669 + }, + { + "name": "Firefox", + "schema": 1662643476587, + "status": "planned", + "version": "121", + "browserid": "firefox", + "id": "6fa4f808-5e0b-4f2a-a108-600e52ea90f9", + "last_modified": 1662648201666 + }, + { + "name": "Firefox for Android", + "schema": 1662643476789, + "status": "planned", + "version": "109", + "browserid": "firefox_android", + "id": "478a9431-ab5e-4446-b87a-31b319a5b3e5", + "last_modified": 1662648201664 + }, + { + "name": "Firefox for Android", + "schema": 1662643476828, + "status": "planned", + "version": "110", + "browserid": "firefox_android", + "id": "6eb8f3ec-9018-4f1d-8c92-02f0ae248681", + "last_modified": 1662648201661 + }, + { + "name": "Firefox for Android", + "schema": 1662643476866, + "status": "planned", + "version": "111", + "browserid": "firefox_android", + "id": "c84628f5-fd4c-433f-932b-c719ac7db848", + "last_modified": 1662648201658 + }, + { + "name": "Firefox for Android", + "schema": 1662643476905, + "status": "planned", + "version": "112", + "browserid": "firefox_android", + "id": "e69efd93-530d-4466-8506-b76cd88a0fd7", + "last_modified": 1662648201656 + }, + { + "name": "Firefox for Android", + "schema": 1662643476944, + "status": "planned", + "version": "113", + "browserid": "firefox_android", + "id": "0b7b7a9b-c2e0-4daa-be5a-1f8e3b333e14", + "last_modified": 1662648201653 + }, + { + "name": "Firefox for Android", + "schema": 1662643476982, + "status": "planned", + "version": "114", + "browserid": "firefox_android", + "id": "aaf25914-81ab-472e-b17f-fe2b9dee7383", + "last_modified": 1662648201651 + }, + { + "name": "Firefox for Android", + "schema": 1662643477021, + "status": "planned", + "version": "115", + "browserid": "firefox_android", + "id": "a657def5-a3f2-41ce-9536-9e3562381701", + "last_modified": 1662648201648 + }, + { + "name": "Firefox for Android", + "schema": 1662643477060, + "status": "planned", + "version": "116", + "browserid": "firefox_android", + "id": "1eb86483-655c-4a82-9c00-66feedaeea18", + "last_modified": 1662648201645 + }, + { + "name": "Firefox for Android", + "schema": 1662643477100, + "status": "planned", + "version": "117", + "browserid": "firefox_android", + "id": "4a14a019-c00f-4fb0-ba03-f78098859593", + "last_modified": 1662648201643 + }, + { + "name": "Firefox for Android", + "schema": 1662643477139, + "status": "planned", + "version": "118", + "browserid": "firefox_android", + "id": "3e23675d-e6be-45c3-b412-ccde0b34d390", + "last_modified": 1662648201640 + }, + { + "name": "Firefox for Android", + "schema": 1662643477179, + "status": "planned", + "version": "119", + "browserid": "firefox_android", + "id": "53acec8b-f665-4eee-8ff2-620b46a46445", + "last_modified": 1662648201638 + }, + { + "name": "Firefox for Android", + "schema": 1662643477220, "status": "planned", + "version": "120", + "browserid": "firefox_android", + "id": "34ccbda4-8e0a-46a0-b6c1-5d877aa0a1a9", + "last_modified": 1662648201635 + }, + { + "name": "Firefox for Android", + "schema": 1662643477258, + "status": "planned", + "version": "121", + "browserid": "firefox_android", + "id": "23a8ddf5-b9a1-40c9-b72b-27fefb20f9b9", + "last_modified": 1662648201632 + }, + { + "name": "Firefox", + "schema": 1662643475989, + "status": "current", + "version": "104", + "browserid": "firefox", + "id": "d04af615-530c-4da3-8c55-e1330d022c94", + "last_modified": 1662648201629 + }, + { + "name": "Firefox for Android", + "schema": 1662643476668, + "status": "current", + "version": "104", + "browserid": "firefox_android", + "id": "3a03a711-cd19-4829-92b2-d950189fbc9d", + "last_modified": 1662648201627 + }, + { + "name": "Chrome", + "schema": 1662643475471, + "status": "current", + "version": "105", + "browserid": "chrome", + "id": "095b32ff-2291-4bd7-a017-ca6c4d822933", + "last_modified": 1662648201621 + }, + { + "name": "Chrome", + "schema": 1662643475523, + "status": "beta", + "version": "106", + "browserid": "chrome", + "id": "535ddd57-1cfa-440f-9a48-e3121cefd26b", + "last_modified": 1662648201619 + }, + { + "name": "Chrome Android", + "schema": 1662643475649, + "status": "current", + "version": "105", + "browserid": "chrome_android", + "id": "c853a996-9eb9-410e-acc2-41a3a3c12bd4", + "last_modified": 1662648201617 + }, + { + "name": "Chrome Android", + "schema": 1662643475690, + "status": "beta", + "version": "106", + "browserid": "chrome_android", + "id": "46287ce1-5b74-4f14-ab44-a0c7651b5fd0", + "last_modified": 1662648201615 + }, + { + "name": "Edge", + "schema": 1662643475818, + "status": "current", + "version": "105", + "browserid": "edge", + "id": "942f3f7b-2c9d-40bb-b895-c2c1f82ab9f6", + "last_modified": 1662648201612 + }, + { + "name": "WebView Android", + "schema": 1662643477342, + "status": "current", + "version": "105", + "browserid": "webview_android", + "id": "1f245984-40e3-4f70-a30c-dc70d348b16a", + "last_modified": 1662648201609 + }, + { + "name": "WebView Android", + "schema": 1662643477382, + "status": "beta", + "version": "106", + "browserid": "webview_android", + "id": "2e3d08f8-2a09-4e92-b49a-a70045e8209b", + "last_modified": 1662648201607 + }, + { + "name": "WebView Android", + "schema": 1662643477422, + "status": "nightly", + "version": "107", + "browserid": "webview_android", + "id": "040c8600-5853-4a9f-8dc2-a428c1305985", + "last_modified": 1662648201597 + }, + { + "name": "Firefox for Android", + "schema": 1662643476748, + "status": "nightly", + "version": "106", + "browserid": "firefox_android", + "id": "294851c1-58c0-4bba-bd6f-41bccb1a993a", + "last_modified": 1662648201595 + }, + { + "name": "Firefox for Android", + "schema": 1662643476708, + "status": "beta", + "version": "105", + "browserid": "firefox_android", + "id": "7ce3c750-d7f4-42d2-9d09-2c19859ee325", + "last_modified": 1662648201593 + }, + { + "name": "Firefox", + "schema": 1662643476071, + "status": "nightly", + "version": "106", + "browserid": "firefox", + "id": "395a946b-38df-4bb6-b6bc-8a982deb7f91", + "last_modified": 1662648201591 + }, + { + "name": "Firefox", + "schema": 1662643476031, + "status": "beta", + "version": "105", + "browserid": "firefox", + "id": "d049e9d9-8818-4b85-8b7f-4f3d782e022e", + "last_modified": 1662648201589 + }, + { + "name": "Edge", + "schema": 1662643475858, + "status": "beta", + "version": "106", + "browserid": "edge", + "id": "1ffcd339-878f-4869-b982-b21aa22552b6", + "last_modified": 1662648201586 + }, + { + "name": "Chrome Android", + "schema": 1662643475729, + "status": "nightly", + "version": "107", + "browserid": "chrome_android", + "id": "79610bbe-aba5-47ad-be55-0f4a3b3f1e43", + "last_modified": 1662648201584 + }, + { + "name": "Chrome", + "schema": 1662643475566, + "status": "nightly", "version": "107", "browserid": "chrome", "id": "9d2108d1-9159-4687-b424-e690f1b73dfa", - "last_modified": 1661426998189 + "last_modified": 1662648201582 }, { "name": "Chrome", @@ -36,15 +423,6 @@ "id": "51a62bb5-f0d0-46d5-a791-c91f9337778f", "last_modified": 1661426998182 }, - { - "name": "Chrome Android", - "schema": 1661424902767, - "status": "planned", - "version": "107", - "browserid": "chrome_android", - "id": "79610bbe-aba5-47ad-be55-0f4a3b3f1e43", - "last_modified": 1661426998179 - }, { "name": "Chrome Android", "schema": 1661424903615, @@ -81,33 +459,6 @@ "id": "0395aba6-1101-4115-bc9e-64e7c8404e1e", "last_modified": 1661426998169 }, - { - "name": "Edge", - "schema": 1661424909430, - "status": "nightly", - "version": "106", - "browserid": "edge", - "id": "1ffcd339-878f-4869-b982-b21aa22552b6", - "last_modified": 1661426998167 - }, - { - "name": "Firefox", - "schema": 1661424912463, - "status": "nightly", - "version": "105", - "browserid": "firefox", - "id": "d049e9d9-8818-4b85-8b7f-4f3d782e022e", - "last_modified": 1661426998164 - }, - { - "name": "Firefox", - "schema": 1661424913341, - "status": "planned", - "version": "106", - "browserid": "firefox", - "id": "395a946b-38df-4bb6-b6bc-8a982deb7f91", - "last_modified": 1661426998162 - }, { "name": "Firefox", "schema": 1661424914168, @@ -126,24 +477,6 @@ "id": "ef065d2e-9c33-4431-9c2c-e87f8c06d59c", "last_modified": 1661426998157 }, - { - "name": "Firefox for Android", - "schema": 1661424918058, - "status": "nightly", - "version": "105", - "browserid": "firefox_android", - "id": "7ce3c750-d7f4-42d2-9d09-2c19859ee325", - "last_modified": 1661426998154 - }, - { - "name": "Firefox for Android", - "schema": 1661424918976, - "status": "planned", - "version": "106", - "browserid": "firefox_android", - "id": "294851c1-58c0-4bba-bd6f-41bccb1a993a", - "last_modified": 1661426998152 - }, { "name": "Firefox for Android", "schema": 1661424919798, @@ -216,15 +549,6 @@ "id": "36d4b20e-19d0-422b-898f-c5b522f65b14", "last_modified": 1661426998131 }, - { - "name": "WebView Android", - "schema": 1661424935537, - "status": "planned", - "version": "107", - "browserid": "webview_android", - "id": "040c8600-5853-4a9f-8dc2-a428c1305985", - "last_modified": 1661426998129 - }, { "name": "WebView Android", "schema": 1661424936282, @@ -252,123 +576,6 @@ "id": "a34cab01-b617-4ded-a09a-7dcfb4c1dd1d", "last_modified": 1661426998121 }, - { - "name": "Chrome", - "schema": 1661424893983, - "status": "current", - "version": "104", - "browserid": "chrome", - "id": "8444e15e-d3b2-4f23-8d6f-0c28e373519e", - "last_modified": 1661426998117 - }, - { - "name": "Chrome Android", - "schema": 1661424900442, - "status": "current", - "version": "104", - "browserid": "chrome_android", - "id": "38279b6e-1e18-4b12-a647-efd4fec6b433", - "last_modified": 1661426998115 - }, - { - "name": "Edge", - "schema": 1661424907983, - "status": "current", - "version": "104", - "browserid": "edge", - "id": "05f600cd-62ff-4390-9653-7a23da28649b", - "last_modified": 1661426998113 - }, - { - "name": "WebView Android", - "schema": 1661424933096, - "status": "current", - "version": "104", - "browserid": "webview_android", - "id": "11641e40-94f8-49db-925b-8e3a294bd277", - "last_modified": 1661426998111 - }, - { - "name": "WebView Android", - "schema": 1661424934849, - "status": "nightly", - "version": "106", - "browserid": "webview_android", - "id": "2e3d08f8-2a09-4e92-b49a-a70045e8209b", - "last_modified": 1661426998095 - }, - { - "name": "WebView Android", - "schema": 1661424933930, - "status": "beta", - "version": "105", - "browserid": "webview_android", - "id": "1f245984-40e3-4f70-a30c-dc70d348b16a", - "last_modified": 1661426998093 - }, - { - "name": "Edge", - "schema": 1661424908744, - "status": "beta", - "version": "105", - "browserid": "edge", - "id": "942f3f7b-2c9d-40bb-b895-c2c1f82ab9f6", - "last_modified": 1661426998091 - }, - { - "name": "Chrome Android", - "schema": 1661424902043, - "status": "nightly", - "version": "106", - "browserid": "chrome_android", - "id": "46287ce1-5b74-4f14-ab44-a0c7651b5fd0", - "last_modified": 1661426998087 - }, - { - "name": "Chrome Android", - "schema": 1661424901364, - "status": "beta", - "version": "105", - "browserid": "chrome_android", - "id": "c853a996-9eb9-410e-acc2-41a3a3c12bd4", - "last_modified": 1661426998085 - }, - { - "name": "Chrome", - "schema": 1661424895636, - "status": "nightly", - "version": "106", - "browserid": "chrome", - "id": "535ddd57-1cfa-440f-9a48-e3121cefd26b", - "last_modified": 1661426998083 - }, - { - "name": "Chrome", - "schema": 1661424894811, - "status": "beta", - "version": "105", - "browserid": "chrome", - "id": "095b32ff-2291-4bd7-a017-ca6c4d822933", - "last_modified": 1661426998081 - }, - { - "name": "Firefox", - "schema": 1661424911103, - "status": "current", - "version": "103", - "browserid": "firefox", - "id": "a953b744-0b2e-4410-b3f3-e06106ce55c1", - "last_modified": 1661426998078 - }, - { - "name": "Firefox for Android", - "schema": 1661424916419, - "status": "current", - "version": "103", - "browserid": "firefox_android", - "id": "881ecc40-fca1-4352-8ee1-b21fb0478e17", - "last_modified": 1661426998076 - }, { "name": "Opera", "schema": 1661424925328, @@ -387,24 +594,6 @@ "id": "09a83dac-0707-4e07-938a-7fabfebce5df", "last_modified": 1661426998066 }, - { - "name": "Firefox for Android", - "schema": 1661424917337, - "status": "beta", - "version": "104", - "browserid": "firefox_android", - "id": "3a03a711-cd19-4829-92b2-d950189fbc9d", - "last_modified": 1661426998062 - }, - { - "name": "Firefox", - "schema": 1661424911790, - "status": "beta", - "version": "104", - "browserid": "firefox", - "id": "d04af615-530c-4da3-8c55-e1330d022c94", - "last_modified": 1661426998060 - }, { "name": "Opera Android", "schema": 1658310296174, @@ -469,5 +658,5 @@ "last_modified": 1645448267500 } ], - "timestamp": 1661426998189 + "timestamp": 1662648201700 } diff --git a/services/settings/dumps/security-state/intermediates.json b/services/settings/dumps/security-state/intermediates.json index 52abde5a74c58..1537081cd85ea 100644 --- a/services/settings/dumps/security-state/intermediates.json +++ b/services/settings/dumps/security-state/intermediates.json @@ -1,5 +1,23 @@ { "data": [ + { + "schema": 1662639897392, + "derHash": "As4WI1qIuX1hp8Fv9RRuT3ulgIga3CJlADNpi0kSyTk=", + "subject": "CN=cnTrus EV SSL CA,O=Zhejiang Huluwa Digital Certification Co.\, Ltd.,C=CN", + "subjectDN": "MGIxCzAJBgNVBAYTAkNOMTgwNgYDVQQKEy9aaGVqaWFuZyBIdWx1d2EgRGlnaXRhbCBDZXJ0aWZpY2F0aW9uIENvLiwgTHRkLjEZMBcGA1UEAxMQY25UcnVzIEVWIFNTTCBDQQ==", + "whitelist": false, + "attachment": { + "hash": "8a2c62796de49738c6648befe89ee8f338658faaa444411e7f508ede4a3c145f", + "size": 2268, + "filename": "_Fk4GOAtmSo-xJLXixnH1A1pzonFgo4IAGSrf3wfR1k=.pem", + "location": "security-state-staging/intermediates/b20d43ab-f8ba-4334-9fe7-9761a8c8df5b.pem", + "mimetype": "application/x-pem-file" + }, + "pubKeyHash": "/Fk4GOAtmSo+xJLXixnH1A1pzonFgo4IAGSrf3wfR1k=", + "crlite_enrolled": true, + "id": "3b273f22-4f3a-4737-979e-0157ed65f0b3", + "last_modified": 1662857823152 + }, { "schema": 1662515823574, "derHash": "Yjq+xvhacCisoQ9b3F2BtWtjFN8odD/8yE7KMvNa6EY=", @@ -432,24 +450,6 @@ "id": "b79706c1-d86c-4666-b8de-81f9823acc9c", "last_modified": 1661885823291 }, - { - "schema": 1661885333293, - "derHash": "As4WI1qIuX1hp8Fv9RRuT3ulgIga3CJlADNpi0kSyTk=", - "subject": "CN=cnTrus EV SSL CA,O=Zhejiang Huluwa Digital Certification Co.\, Ltd.,C=CN", - "subjectDN": "MGIxCzAJBgNVBAYTAkNOMTgwNgYDVQQKEy9aaGVqaWFuZyBIdWx1d2EgRGlnaXRhbCBDZXJ0aWZpY2F0aW9uIENvLiwgTHRkLjEZMBcGA1UEAxMQY25UcnVzIEVWIFNTTCBDQQ==", - "whitelist": false, - "attachment": { - "hash": "8a2c62796de49738c6648befe89ee8f338658faaa444411e7f508ede4a3c145f", - "size": 2268, - "filename": "_Fk4GOAtmSo-xJLXixnH1A1pzonFgo4IAGSrf3wfR1k=.pem", - "location": "security-state-staging/intermediates/b20d43ab-f8ba-4334-9fe7-9761a8c8df5b.pem", - "mimetype": "application/x-pem-file" - }, - "pubKeyHash": "/Fk4GOAtmSo+xJLXixnH1A1pzonFgo4IAGSrf3wfR1k=", - "crlite_enrolled": false, - "id": "3b273f22-4f3a-4737-979e-0157ed65f0b3", - "last_modified": 1661885823283 - }, { "schema": 1661885334134, "derHash": "mSTm/A5VqfD/qZgpjzAQDBorOAFM5LE3fQjELuQkN2M=", @@ -26317,5 +26317,5 @@ "last_modified": 1559865863642 } ], - "timestamp": 1662620223051 + "timestamp": 1662857823152 }
This is an automated email from the git hooks/post-receive script.
richard pushed a commit to branch geckoview-102.3.0esr-12.0-1 in repository tor-browser.
commit 4f063b3751b72be73b7b37d078b67a1658037fc9 Author: Johan Lorenzo jlorenzo@mozilla.com AuthorDate: Mon Sep 12 08:34:16 2022 +0000
Bug 1786292 - part 1: Make esr102 not next-esr anymore. r=jcristau, a=release
Differential Revision: https://phabricator.services.mozilla.com/D156971 --- taskcluster/ci/release-bouncer-aliases/kind.yml | 7 ++++--- taskcluster/ci/release-update-verify-config/kind.yml | 2 +- 2 files changed, 5 insertions(+), 4 deletions(-)
diff --git a/taskcluster/ci/release-bouncer-aliases/kind.yml b/taskcluster/ci/release-bouncer-aliases/kind.yml index d4a7bd058a2ea..cb006003a3085 100644 --- a/taskcluster/ci/release-bouncer-aliases/kind.yml +++ b/taskcluster/ci/release-bouncer-aliases/kind.yml @@ -61,16 +61,17 @@ jobs: firefox-msi-latest-ssl: msi firefox-msix-latest-ssl: msix firefox-pkg-latest-ssl: pkg - mozilla-esr91: + mozilla-esr102: # when there is one ESR branch both sets of aliases work # when there are two ESR branches ... # ... these always point to the older branch firefox-esr-latest-ssl: installer-ssl firefox-esr-latest: installer firefox-esr-msi-latest-ssl: msi - # firefox-esr-msix-latest-ssl: msix # uncomment when esr102 replaces esr91 + firefox-esr-msix-latest-ssl: msix firefox-esr-pkg-latest-ssl: pkg - mozilla-esr102: + # yamllint disable-line rule:comments-indentation + # mozilla-esrXX: XXX - to uncomment when we branch next ESR # ... these point to the newer branch firefox-esr-next-latest-ssl: installer-ssl firefox-esr-next-latest: installer diff --git a/taskcluster/ci/release-update-verify-config/kind.yml b/taskcluster/ci/release-update-verify-config/kind.yml index 6bc7a0fbeb5d8..e3236bd60a4ff 100644 --- a/taskcluster/ci/release-update-verify-config/kind.yml +++ b/taskcluster/ci/release-update-verify-config/kind.yml @@ -54,7 +54,7 @@ job-defaults: beta: "72.0" release(-rc)?: "72.0.2" esr91: "68.0esr" - esr102: "102.0esr" + esr102: "68.0esr" default: "default"
jobs:
This is an automated email from the git hooks/post-receive script.
richard pushed a commit to branch geckoview-102.3.0esr-12.0-1 in repository tor-browser.
commit da912d341963b466a1f48cd687b85ae2f1650261 Author: Nika Layzell nika@thelayzells.com AuthorDate: Wed Sep 7 23:40:30 2022 +0000
Bug 1785940 - Fix buggy error path in IPCBlobUtils::Serialize, r=asuth a=RyanVM
Differential Revision: https://phabricator.services.mozilla.com/D156723 --- dom/file/ipc/IPCBlobUtils.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/dom/file/ipc/IPCBlobUtils.cpp b/dom/file/ipc/IPCBlobUtils.cpp index 00a4537b74164..f4956a42c98eb 100644 --- a/dom/file/ipc/IPCBlobUtils.cpp +++ b/dom/file/ipc/IPCBlobUtils.cpp @@ -129,7 +129,7 @@ nsresult SerializeInternal(BlobImpl* aBlobImpl, M* aManager, RefPtr<RemoteLazyInputStream> stream = RemoteLazyInputStream::WrapStream(inputStream); if (NS_WARN_IF(!stream)) { - return rv.StealNSResult(); + return NS_ERROR_FAILURE; }
aIPCBlob.inputStream() = stream;
This is an automated email from the git hooks/post-receive script.
richard pushed a commit to branch geckoview-102.3.0esr-12.0-1 in repository tor-browser.
commit f76d47caa23284f4a2bc35550bf88a0f2ef6ffac Author: Ryan VanderMeulen ryanvm@gmail.com AuthorDate: Mon Sep 12 09:16:11 2022 -0400
Bug 1789487 - Update l10n-changesets.json on ESR102 to match Fx105 release. r=flod, a=me
Differential Revision: https://phabricator.services.mozilla.com/D157117 --- browser/locales/l10n-changesets.json | 196 +++++++++++++++++------------------ 1 file changed, 98 insertions(+), 98 deletions(-)
diff --git a/browser/locales/l10n-changesets.json b/browser/locales/l10n-changesets.json index 7f99bb8e59b27..4bfdc19022792 100644 --- a/browser/locales/l10n-changesets.json +++ b/browser/locales/l10n-changesets.json @@ -15,7 +15,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "67077e72adbb0f032c27841262df1f0d43a5fb54" + "revision": "a6940ae1a02f0d874e7db5bc911e6f0fdc996bc7" }, "af": { "pin": false, @@ -33,7 +33,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "965d59dfc8d5cf6e7c98b259ffd4b0b2b45cf0bc" + "revision": "21d83e917ea17f729372095dd1cc83b71a06ab73" }, "an": { "pin": false, @@ -51,7 +51,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "d9604d2d3db8b9a16fd43d1d884702c0365d3b72" + "revision": "82120a83cb139060b04ce486b60775de86b3aaf0" }, "ar": { "pin": false, @@ -69,7 +69,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "358230ceed1649f60cfa89d09d8ce53715c5e1d1" + "revision": "90ae328eba18c2f481b15698d82b3fb92371ff01" }, "ast": { "pin": false, @@ -87,7 +87,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "571b61a0a87a7b1de1fc072749797552eb4af71d" + "revision": "7ff54286ea3c43902992aacfa2e7f70389cb766b" }, "az": { "pin": false, @@ -105,7 +105,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "67331530fbf0b32435cc9011efa811d524d63f84" + "revision": "a62a85b2ed2f3a10d33b4f3abe7ba7413c8d4f5b" }, "be": { "pin": false, @@ -123,7 +123,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "ab457d20536cdad54f18c6f6e6cebfee7f5b4a6a" + "revision": "84a4b9498c82388fefa01b95065bb119346593a2" }, "bg": { "pin": false, @@ -141,7 +141,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "0cc51e8b5d5f71e385b76167f91a286098199825" + "revision": "cb8fd025f9b6200ef1e9bd580df03890eaff1a3e" }, "bn": { "pin": false, @@ -159,7 +159,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "a78888d7274a3ac02329104e5cac5b7a48d26454" + "revision": "f8e3bcb8b593e12985b70026d766242f0c9a8523" }, "br": { "pin": false, @@ -177,7 +177,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "4cb5ab289cc37542167744eafc9d10c0ee6025b3" + "revision": "81c676c850b8e24b6f53628fd140d3cf40261197" }, "bs": { "pin": false, @@ -195,7 +195,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "85d99a5a6324588b24ff5cd0ff7454df446fc61c" + "revision": "fef1300082a792d3b326f0127a14f8445f93f451" }, "ca": { "pin": false, @@ -213,7 +213,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "80c806ff7a50f5f7cfd596fae0da28a399a0793b" + "revision": "6f18b4a2a881ead599817ff145787a1f3174447e" }, "ca-valencia": { "pin": false, @@ -231,7 +231,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "2889c3d8cca1919f4784e3f32381095ee5e8e692" + "revision": "d3ebd94a799181d0663209f8466760778211a92a" }, "cak": { "pin": false, @@ -249,7 +249,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "025c5063e4069f06be4e2e2cdff175e35bb30b58" + "revision": "b1f360b9c90805a0f37e4d66359be7d35c1772e0" }, "cs": { "pin": false, @@ -267,7 +267,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "e53e5925268c9c195ffdad7a5083b02a29083c02" + "revision": "c7cb3d3112ed86cf11211354b0cc28b87707a4a4" }, "cy": { "pin": false, @@ -285,7 +285,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "e6ad0bb34909df609371096dbbc0fb7fd9fc81b1" + "revision": "607a6239334a8a074a432aef59e54651d22f516a" }, "da": { "pin": false, @@ -303,7 +303,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "005e2efa2141f9b6dad72140a52937676c509dba" + "revision": "56439c79aa66460ea0cc64d1af80300cd1b240be" }, "de": { "pin": false, @@ -321,7 +321,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "5254c6983528355bee70d3f2a770aaa22b0a44b3" + "revision": "a8e3ae189670ec79bc25580440a672fd0666f83b" }, "dsb": { "pin": false, @@ -339,7 +339,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "892f4d188a22c6e8698790cbb151a9b43db60e6f" + "revision": "ae813cd77dfe4c14c2a5840afd8c633872761036" }, "el": { "pin": false, @@ -357,7 +357,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "c82f4aeaaebf6d0e189b511f5843a3afd8c85591" + "revision": "7890b569a5b14f8497abdb0f7e48e30eac05ec5a" }, "en-CA": { "pin": false, @@ -375,7 +375,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "2b4588216f0c36f752694298a03ba303857264fc" + "revision": "56ed562cfa54d281456a55f8c5b09c7c7b33beba" }, "en-GB": { "pin": false, @@ -393,7 +393,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "be0f991d50e3b17fd17dcde70cd9f00dc9c5bb82" + "revision": "70c06c5ec5a1987690ac1c37ca432c0723e3dccb" }, "eo": { "pin": false, @@ -411,7 +411,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "bb27864950c776e16b70e23c5dba62e22d52be52" + "revision": "5fcb6da3fcce42adead4b8a21818cc980fb1b98b" }, "es-AR": { "pin": false, @@ -429,7 +429,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "40b5590086e9b32742f2fa3db7c80437139e6eb0" + "revision": "3db454123eff5c4ec7787da0a1ca010d7c98d571" }, "es-CL": { "pin": false, @@ -447,7 +447,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "5a45bd7004118b473e9dc6710d805ec60134c9f3" + "revision": "92fccae1899519af97dee08fb5b7debf46ef2568" }, "es-ES": { "pin": false, @@ -465,7 +465,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "c170204cf9a342c892622a057e4480f1f078b929" + "revision": "c600d4c652acec5eabf2313afd0e89888e7570e6" }, "es-MX": { "pin": false, @@ -483,7 +483,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "d474cafda35e3918b23d74ee7cef1a554f54afde" + "revision": "a30b84414ce7fbdf84c4bccba2b6678046ea8778" }, "et": { "pin": false, @@ -501,7 +501,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "630b1408b4ce33ce667bb851bbd506dbd92442f7" + "revision": "20267fc0fd3784dfe10860506341bd6b5bb1c8ea" }, "eu": { "pin": false, @@ -519,7 +519,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "b4af6f1dc45bbeef0163296b935f62d61335e818" + "revision": "284584aff4f78aa5a74b1c2fb30579a41c6c7f45" }, "fa": { "pin": false, @@ -537,7 +537,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "4450ed5cf9a2f6cb59efaca74249e46fd8a3ca15" + "revision": "4fab4604aced8395dbf72e6fd0645bfbb00661b4" }, "ff": { "pin": false, @@ -555,7 +555,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "d1b11b6833761b14027e32d0385022f75670b21f" + "revision": "4c7b4f55676e31a941c729fa1a205e195831d480" }, "fi": { "pin": false, @@ -573,7 +573,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "fac1fc64782721400311383622d49bc84600a7c4" + "revision": "81269d3d53e242a26089a5e75aaced5ff22af1da" }, "fr": { "pin": false, @@ -591,7 +591,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "739d235548164ab87d4cce8c971b7b674f08fc84" + "revision": "8721c6404ee864316e2a12048c3c16e0aac514a7" }, "fy-NL": { "pin": false, @@ -609,7 +609,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "e3b53c4c7a7d49418d6b12d40128aae0b513410a" + "revision": "e9fcfd9336798351d0605733683c6349d33ed0d5" }, "ga-IE": { "pin": false, @@ -627,7 +627,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "34c4d96bfa6302358a71597f4dd8407d0276517e" + "revision": "fced032fddf9a89fa43b15b31f0fcce0320a5dde" }, "gd": { "pin": false, @@ -645,7 +645,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "aa15289b6855ba2386a92ad276bffa539a999b3c" + "revision": "c4e01bf1f5ae7a533b470a0d1ad002679b0eb7fc" }, "gl": { "pin": false, @@ -663,7 +663,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "74482758407d771b17cded6ad4ecd0c086438c72" + "revision": "76f43889a86c128b3dca57a845ec3d1b36c089bb" }, "gn": { "pin": false, @@ -681,7 +681,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "a90ef5689e5c5ef3fe77c17c29ec1d646e07f581" + "revision": "68e961610864ab5dd0a2fd236b4ed8878824f93e" }, "gu-IN": { "pin": false, @@ -699,7 +699,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "ff79dfcddf2a11e05a777a94144a897693a59238" + "revision": "9eb8b567a1949c0f9eb6d6cd8351d436b5afb900" }, "he": { "pin": false, @@ -717,7 +717,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "4fe5d09b25e2239d01f5b6979c17313036b298b0" + "revision": "cdd74afb2fe887c66a8691da267ae0ff6966d42e" }, "hi-IN": { "pin": false, @@ -735,7 +735,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "e1f24b9d22ea008cf22feaa6b7257537409154fa" + "revision": "72c4fe620e20aef077a9a874ddca2a0d043531cb" }, "hr": { "pin": false, @@ -753,7 +753,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "bd90e7e8ec75dfcc6f9bafcd7d8abc66d8954f29" + "revision": "dce6c8b9d319e938ad2d12015300bb7e4a2b711f" }, "hsb": { "pin": false, @@ -771,7 +771,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "d8353becf5b9e0c4fad151ff44ca60f3ae2075c6" + "revision": "d1240a3e1fc3e966c52b497065bfefe961d00a78" }, "hu": { "pin": false, @@ -789,7 +789,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "9746ad65058a59aceeab97559b66ba3e52e89690" + "revision": "f3f2965ba8c91b29161f00be6daccd78ea61f306" }, "hy-AM": { "pin": false, @@ -807,7 +807,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "f89c977f264bf4129a8c08e26281f131d6d947eb" + "revision": "69b66bef1581fece20a68348a9aa426395c5946e" }, "ia": { "pin": false, @@ -825,7 +825,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "f19edf7731abe7b16178e3c9fceef7d4fe5892ed" + "revision": "109c554216c326834fb7fd5b2dfc34cb9d8bb2ae" }, "id": { "pin": false, @@ -843,7 +843,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "5e037a8b0a59ebc213d34b361f3571f9d4b7f7e9" + "revision": "b0f787b8433bc7fbd5b666f8bc7f8ccfa1e85ac3" }, "is": { "pin": false, @@ -861,7 +861,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "af7a2e89ef8f98d33b9212aa59dc3acc53f9728c" + "revision": "99e16427ed53cbb1e89614f2c0402dab96be05c6" }, "it": { "pin": false, @@ -879,7 +879,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "f24c6544b272b4131cdaaab6caefdf3921020136" + "revision": "8458164c774242c617ad58d3b9a4eb34de598183" }, "ja": { "pin": false, @@ -895,7 +895,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "a393cc63e494f30a4c212c729e178a4ab7356a0e" + "revision": "bfa54ce51968b8b0b5df9ae2e2a36c0e64639553" }, "ja-JP-mac": { "pin": false, @@ -903,7 +903,7 @@ "macosx64", "macosx64-devedition" ], - "revision": "16f40bb8f3d731746b39157a30a4b40c73ce1227" + "revision": "10f52910bc3d63f25e270012e3d57f41e0a878f8" }, "ka": { "pin": false, @@ -921,7 +921,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "2cea74990aa1b26e53b620818f7a0ff20afb0f50" + "revision": "07577532e25230ab03be285cde0fccf4512d894e" }, "kab": { "pin": false, @@ -939,7 +939,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "eac5ce957a57921565446237cfb6db7989b05caa" + "revision": "d90a85fdad41db1a0132ea30827ac2b5e2d18348" }, "kk": { "pin": false, @@ -957,7 +957,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "d8858f1bc7528b0daa7ecc63164c899c669b5c31" + "revision": "b374722c1e148950ae74b60519aeb069201b4e81" }, "km": { "pin": false, @@ -975,7 +975,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "6de8999e084759d649d04f5e13d5785e4d755f78" + "revision": "e708c6c1a916cbbbecbe8f2a89d3a52a9d29d5ba" }, "kn": { "pin": false, @@ -993,7 +993,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "3bb8578dea3ffca44ec54854ce1ee2c2434c797a" + "revision": "42f9bf5cd83c1171e863aa12d09c936fc05491cb" }, "ko": { "pin": false, @@ -1011,7 +1011,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "7a6fdaa3812fb7fd1b7865eb5443c53dde177d77" + "revision": "741bdd87a7c86818b7629a1440bed20df593b03f" }, "lij": { "pin": false, @@ -1029,7 +1029,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "39052998dd6f4d4871ea3d5819ec6a0640558fe8" + "revision": "21a18aaa5ab6656d7e3709ca73d869ca3803d18d" }, "lt": { "pin": false, @@ -1047,7 +1047,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "05c204bbc49fb955c0d3792b797f2ecad9d327ae" + "revision": "4a418a95686c94ac691131e3a5c9d7b9134068b1" }, "lv": { "pin": false, @@ -1065,7 +1065,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "17457b836cbce7b0ab670dfd9252ef487454a70d" + "revision": "bdf7fc22532bf20296297d67a3dd75c194992187" }, "mk": { "pin": false, @@ -1083,7 +1083,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "cebf57040c92193a3c0a9823726d30db61382c49" + "revision": "6e11244f79bf6eb74af62c5cb81f46b4f66c9879" }, "mr": { "pin": false, @@ -1101,7 +1101,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "f9ebad7ded4cf994d52d8ee399d76490c8f023e7" + "revision": "398188f48d19b853a8d6f7c577771b417fb68ed1" }, "ms": { "pin": false, @@ -1119,7 +1119,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "ffde17468a12124400b67e78aa4d21537f924c54" + "revision": "6804f932653248ee517adbfeb267860ebc4d1031" }, "my": { "pin": false, @@ -1137,7 +1137,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "b656b72a6762b20e5cfad8bf5a4da633a9fbbf3b" + "revision": "3002b83dc7954a1889b97992a38ad76d22df8a26" }, "nb-NO": { "pin": false, @@ -1155,7 +1155,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "1797998306064e2afe88fe5b21a6b7c83a489793" + "revision": "0f6b51fdaa4a46a1bb11be07d81ffbba233c4684" }, "ne-NP": { "pin": false, @@ -1173,7 +1173,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "e88add0191913802baf7c412fcb782b0e527ece1" + "revision": "261999a7c35345cb0bf2cb1496c1b5d7fae1b6ef" }, "nl": { "pin": false, @@ -1191,7 +1191,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "3b192f4edb5213e325d004453a6f28eabc16c576" + "revision": "af82469a6f21fe2a6dd249a566dfe4a5b85343c8" }, "nn-NO": { "pin": false, @@ -1209,7 +1209,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "28bdd662868540209fdad943df879806528b1693" + "revision": "d4ce011c216e74d187e1c3cf7bc991dbb136f232" }, "oc": { "pin": false, @@ -1227,7 +1227,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "fcef596602cc933df1ba8233d2485adb678b4421" + "revision": "80c38cc27296ef70fd4ec798c124e5cf4bebecbe" }, "pa-IN": { "pin": false, @@ -1245,7 +1245,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "798afc28472d0aa623b7d6ee1d35dccb42f4d1b1" + "revision": "11f46415c28c95919b8c181111e13929f2dd9ca7" }, "pl": { "pin": false, @@ -1263,7 +1263,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "36007fca7dee43f4930c7d4bcc67af3edbd4d377" + "revision": "e4f7253eab5e124ced4ce462a8c08ced3800ea8e" }, "pt-BR": { "pin": false, @@ -1281,7 +1281,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "0d4ca05301c9013e32d7f299b84fbe2dd33d4836" + "revision": "4593068c5be4601b5d7f9ae927edd87e54c97e87" }, "pt-PT": { "pin": false, @@ -1299,7 +1299,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "6c0a2f5dda9f7c139650c268d8ea3a7c58287484" + "revision": "b4c03202e28b5ddb730f9e84877b80fac18dae30" }, "rm": { "pin": false, @@ -1317,7 +1317,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "6d8f461b7463a53c42a77db85b6c152e03995754" + "revision": "cab6395df91a7ab791a53747ba117d3cb27f4679" }, "ro": { "pin": false, @@ -1335,7 +1335,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "010264acd46f11cbc14c51f66bb590d7e4bf657c" + "revision": "02481dde8cf536834a01f7ff23d36835bc33a450" }, "ru": { "pin": false, @@ -1353,7 +1353,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "98740fe9495dc7c7dcdf77f1cbfcd9ee02c07fe9" + "revision": "faba85e6a6c6b339d4bc5d17c8f34e37d5176b50" }, "sco": { "pin": false, @@ -1371,7 +1371,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "f950c4f3697b79f3007f5e2258f08549d6b89868" + "revision": "5d2f70079bc7d2deb0fff24cdb3b7dcb4c88abb2" }, "si": { "pin": false, @@ -1389,7 +1389,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "c7cc2c593899b65931f7a1b234a1487eb8f23769" + "revision": "8d57995e869115c8a08044e8d1a7b504fa4e2e47" }, "sk": { "pin": false, @@ -1407,7 +1407,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "36881c5d0700ae64795efd0530fc971db9735806" + "revision": "ab29b708db33703117b470dfd306de8e8279f329" }, "sl": { "pin": false, @@ -1425,7 +1425,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "a60ba38789291bb9206601efa756510322025549" + "revision": "fdecfc7536bc4fda222b056f0efa9902dabdad11" }, "son": { "pin": false, @@ -1443,7 +1443,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "5d49bcb0255fa5f44c2416c11d97d38117e9c760" + "revision": "ab9b25c8d1a6266c6d768d17c4bde390b4ab5cf8" }, "sq": { "pin": false, @@ -1461,7 +1461,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "77fab9e442fd46c939d0cc4eb5b68f257e7b018e" + "revision": "92fda6fe6ca1794b6e26ce3056cd8ff70926b623" }, "sr": { "pin": false, @@ -1479,7 +1479,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "90973fd9f124f8f1b2e7320f5ce626e92c479df0" + "revision": "35feae7686eafcc427c12c34c49aa302092df2df" }, "sv-SE": { "pin": false, @@ -1497,7 +1497,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "5b80c2ae0a7acbc6fc93228979e582624e4ec78a" + "revision": "3c5541913ff30165e5281fcd2d350fcbd2b12127" }, "szl": { "pin": false, @@ -1515,7 +1515,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "cef7e070dac3c109bf4d3d4a927dfff5cc2c30ea" + "revision": "e17800d468bb165b0ff819699b122f3acdc1fab1" }, "ta": { "pin": false, @@ -1533,7 +1533,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "fc958d33d35d7928f72771a8000b12f4e003f7b1" + "revision": "127c02e4bb2dc3d79085930217f7be21028d5ed0" }, "te": { "pin": false, @@ -1551,7 +1551,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "2b70768c6bb88a7a81abbfeb6cd32042c1d53a7c" + "revision": "a63239d1369770ce6f29733e008f2a8b400e3f6f" }, "th": { "pin": false, @@ -1569,7 +1569,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "4d19b047cf19ac1af16d9cf2c53e9c5976c5c039" + "revision": "cc49f72cde8e6b66596f55cf121dba9bfb50d5b3" }, "tl": { "pin": false, @@ -1587,7 +1587,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "11c52d8c62012ea90c35eb65b26899463e71d750" + "revision": "8debd5640a8e5bfe307063d79ccad37a5b2177a5" }, "tr": { "pin": false, @@ -1605,7 +1605,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "acfcc1ead9c1a6e216a7208fa6052c0573a1b334" + "revision": "07863ceeb2b869997b62fba457173e153061727c" }, "trs": { "pin": false, @@ -1623,7 +1623,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "05c82f620c2d1dc3c6218c1a503bd0ab705bc870" + "revision": "5727cc99ce13afe8e4cd1662a8164796bd23b572" }, "uk": { "pin": false, @@ -1641,7 +1641,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "523eef823549df8bc48d969e0ede7682c64ead48" + "revision": "d6669ef6a9bc612f818f8db3d984eaadea1aac1c" }, "ur": { "pin": false, @@ -1659,7 +1659,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "b2d0d9f13adb353589fd87a0240726c8d3debe27" + "revision": "1e04f785210c24912483f637f6572674717f52b0" }, "uz": { "pin": false, @@ -1677,7 +1677,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "a8a73897ada62b8799c435998aab4e283558bcc3" + "revision": "27d09eaf9f46660f6467ea4b86ad1f45b2c34f5e" }, "vi": { "pin": false, @@ -1695,7 +1695,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "c6494671b2949aff6c1b8161343d3c72019f9cdd" + "revision": "290d3590a501667e1e7b68d500c87a1f5988788c" }, "xh": { "pin": false, @@ -1713,7 +1713,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "8e3b5561c5f38bacc61d43a7bc33ba2f2e91a3f9" + "revision": "46d246772c92232ddaa14336ab4437faf6a12989" }, "zh-CN": { "pin": false, @@ -1731,7 +1731,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "ccdf7081c85960340e57b23c5bf31bc057f64cf3" + "revision": "ca6479c9017ef4dfa93f9d9722ebd76ad82479c1" }, "zh-TW": { "pin": false, @@ -1749,6 +1749,6 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "abfd9ef125c20b4ca955da9f6433ce1d0b1c202c" + "revision": "16481ed130bf69faca245f9c31c939ec1f7855e4" } } \ No newline at end of file
tbb-commits@lists.torproject.org