diff options
author | Mark H Weaver <mhw@netris.org> | 2025-06-18 22:14:49 -0400 |
---|---|---|
committer | Mark H Weaver <mhw@netris.org> | 2025-06-23 22:20:16 -0400 |
commit | b0e189f6449787fb823e8a58e5d5e74b96acd8f1 (patch) | |
tree | 21e39c6271c4846e0a963faaea6559675b9ec7eb | |
parent | b1da0f01591182b43e179451ce2484d0fee88dd8 (diff) |
Update the JShelter extension to 0.21.
41 files changed, 3871 insertions, 898 deletions
diff --git a/data/extensions/jsr@javascriptrestrictor/META-INF/manifest.mf b/data/extensions/jsr@javascriptrestrictor/META-INF/manifest.mf index 2520195..94d12b4 100644 --- a/data/extensions/jsr@javascriptrestrictor/META-INF/manifest.mf +++ b/data/extensions/jsr@javascriptrestrictor/META-INF/manifest.mf @@ -1,429 +1,419 @@ Manifest-Version: 1.0 -Name: alea.js +Name: wrappingS-MCS.js Digest-Algorithms: SHA1 SHA256 -SHA1-Digest: 5O2DZ0bvydRHS9mNry4GicStzOw= -SHA256-Digest: kU+HKcdrshA3zzIH1wFWtkw1lw/2O6El8UCFSOvLxEc= +SHA1-Digest: qqA53JjE+TYeho+MP5s1P/s0PKo= +SHA256-Digest: 2fOx8vYIjLr42nErRd8LyPfjaALGEBGdHL9738YKzi0= -Name: background.js +Name: fp_code_builders.js Digest-Algorithms: SHA1 SHA256 -SHA1-Digest: W6usKK5pgMqOpl0Cj6gJMPG6D3Y= -SHA256-Digest: zfz+yKJkk7ZEfGt+O91zcEije3FT0C/KgLvwGqKbD4g= +SHA1-Digest: enOVevpar0rVgtxwBjPRrx4t0ok= +SHA256-Digest: liUul2BopfhiRjfQU8SU7bNUBtwTVvtoap2NeuGRr9g= -Name: code_builders.js +Name: wrappingS-PT2.js Digest-Algorithms: SHA1 SHA256 -SHA1-Digest: uYa+WQFbLHS+3h19Ty+h03NyVFQ= -SHA256-Digest: u7e5tud9K0MKf6V0XnpZyQP5eUTy18waNxCx7yyvbwQ= +SHA1-Digest: zISgD0AYwd3aQMpnKaw5dDeWa10= +SHA256-Digest: Hm3Se1IsUlyi1wGkFsQIJVLLiTPJ33wMUU8+RrAFOaw= -Name: common.css +Name: wrappingS-ECMA-DATE.js Digest-Algorithms: SHA1 SHA256 -SHA1-Digest: X2BJxnuzK4qnsh5jeb0rl815wHY= -SHA256-Digest: 5FQHSZB9KXF9x+eWyJoasFv3ebq9rm5Rw+euQLd7Z9w= +SHA1-Digest: yEo+CcmF0tI1jKmw1ib+qUWsYkY= +SHA256-Digest: 5BEsEiE0H7RDC+JzKO3aqKq7Ygi9ThIn9BWdFTu9tA0= -Name: crc16.js +Name: wrappingS-TEMPORAL.js Digest-Algorithms: SHA1 SHA256 -SHA1-Digest: T97r2grez4dAiyuKv/vLo6Yd0yk= -SHA256-Digest: a0IfR18X0joyJvCPY2UKRvvBgdbg7e+VENaaiAix4Vg= +SHA1-Digest: pNXlvnu7Ir151PAJ+znc6+hetac= +SHA256-Digest: BAd9Kble0VNtiBQtyJw4QZ+kvhIyvrEUUeYYiOkDYlE= -Name: document_start.js +Name: wrappingL-CANVAS.js Digest-Algorithms: SHA1 SHA256 -SHA1-Digest: 0LaNMGzdZUuhgVjiSu4Z3IX2lEQ= -SHA256-Digest: g3I+Dj9hx4wmcE16S1acMsV15F+kQ2t4LmjiYonY+Fs= +SHA1-Digest: EeTovI1VAdeK69fBvcykyvssE+Q= +SHA256-Digest: H/AxcTOkk/Sx5iFaqFohnEfLtRerTMV74RazfLTDngo= -Name: farble.wasm +Name: i18n_translate_dom.js Digest-Algorithms: SHA1 SHA256 -SHA1-Digest: y2cmMLiaieIsO/iZcAYNJzPhHTw= -SHA256-Digest: vkhiYJKN6KQYc52l4Y6XhmyiltXE3htOrsGljPSFUq4= +SHA1-Digest: bLeppNH/YlEym1IR2nJUY8iQ/uo= +SHA256-Digest: LMDyVtBpfyoTemLr9Ide2KTzWaHFiYsGMkuLznPZQXc= -Name: fp_code_builders.js +Name: wrappingS-COOP-SCHEDULING.js +Digest-Algorithms: SHA1 SHA256 +SHA1-Digest: /lr28OFTteOeVUgFY/AIngpy+vk= +SHA256-Digest: 8KK3JjPRAnLm3GhP1pWwonvcgWH62rrhQsNZOG0M9+c= + +Name: levels_browser.js Digest-Algorithms: SHA1 SHA256 -SHA1-Digest: IGMqvg7CwEf5NdwIbDemz1gkfvs= -SHA256-Digest: pxEOJVEsaq02jZ+JL5cUbait5+qpy+BWQZw2g7uQ6Oc= +SHA1-Digest: 72sdCbsIHyw9EZnYfkZQTR8QCaw= +SHA256-Digest: eTo5q2caJLdrRu6zyrI+sf1nowugn1kMo3ogEckCYiE= + +Name: options.html +Digest-Algorithms: SHA1 SHA256 +SHA1-Digest: xbtGs63Urks/exht4foiBxDxLiE= +SHA256-Digest: /RZkI2DC/1jW8dymS/IgpZqRPuE88eqjsyw3kfZ7TTw= + +Name: session_hash.js +Digest-Algorithms: SHA1 SHA256 +SHA1-Digest: WlhKWiWJSerRhkZEN7NoBaxGjeg= +SHA256-Digest: UqgvwO4SIXGucNMzAuZ1we5bFSgmPECQpNBeE+9MWvI= Name: fp_detect_background.js Digest-Algorithms: SHA1 SHA256 -SHA1-Digest: SbgNZ+IeKqBZPCi83I9knG3MtAA= -SHA256-Digest: n5wULi22Cu4BqSc5IYI3hoyPyRDrgm72CMOi76HI6IQ= +SHA1-Digest: XWh1ta9+Qw7Na2TS7iwcAx4yqYA= +SHA256-Digest: m1696pp2fNTHjkuVqEAf5MRlxXz5P/weYEvgJeXqh1Q= -Name: fp_levels.js +Name: update.js Digest-Algorithms: SHA1 SHA256 -SHA1-Digest: v5gN5dTR5QSLIcOPnBspRjucX08= -SHA256-Digest: 78gX+7f+hPsJD+axfZdCS7VwIz9sSxDqqMooO2AUZuc= +SHA1-Digest: ixU/edeai2hi6I9wNKA4XHE2jmE= +SHA256-Digest: IG1iUU+a4g4c39IABujlw9f6fpfgXYreMH8szf9o8JY= Name: fp_report.css Digest-Algorithms: SHA1 SHA256 SHA1-Digest: pk+urFu6JhMTYXR37S4YLVtJ2Mk= SHA256-Digest: B9KyS2dub6HCNwuYTd5Vt8Q5qwx8ZQ8iFasCQN4+x+s= -Name: fp_report.html -Digest-Algorithms: SHA1 SHA256 -SHA1-Digest: r8NMaD77xe69NlcQI39r1CQikqM= -SHA256-Digest: yGrhz8hxTg19ct+Z1HlTIz6wTd870eU61UIq6Up2Bcs= - -Name: fp_report.js +Name: wrappingS-XR.js Digest-Algorithms: SHA1 SHA256 -SHA1-Digest: yV1eqpF2rDCc/LKgFcCMph7TMyI= -SHA256-Digest: Spc0x25P0YvgcvTr9NTs0XcfFfbkxgKTWW+vCfqb7SE= +SHA1-Digest: 1mKa5M2Z0abxRSgMnKkCIhtJBkQ= +SHA256-Digest: kww1BVH+ddLJT+sBq5+uemc+na9usBSUZklx6OSUlac= -Name: helpers.js +Name: wrappingS-DM.js Digest-Algorithms: SHA1 SHA256 -SHA1-Digest: xDt35vq5v9wRcAiKsJj3M10a1Gw= -SHA256-Digest: TZ7sgaBPd//Bc4SueVhwqQmhmj8H74xsL8ySqMXxPeo= +SHA1-Digest: FmTTYvT4UeQBCCmNP4SN2tDN22c= +SHA256-Digest: FVl5WZ5QSGt2FFlB0+5EpU1GiCHzWW3KhFjmuylcNqs= -Name: http_shield_common.js +Name: wrappingS-SENSOR-LIGHT.js Digest-Algorithms: SHA1 SHA256 -SHA1-Digest: kNZPvYvIu8/q73uhpv5i/624hsU= -SHA256-Digest: Z66jza7VW2NytbRsq6kkXe5duIvmb5hml8ZPS/I5UYY= +SHA1-Digest: LIEwX8Tzp3OJtIPsFeyosTMtVGw= +SHA256-Digest: O+nnsHDh80kA9a2aEjqJhicOlZNK/kAY8BfSlGkDmXU= -Name: http_shield_firefox.js +Name: wrappingS-HTML.js Digest-Algorithms: SHA1 SHA256 -SHA1-Digest: 6lb3fXUX+vYdv/Xj7E3Gh3J3OAc= -SHA256-Digest: azcLJExqs0Z+OTIEk+2C5UdOqQtkQdAJG+pp7D7Dlp8= +SHA1-Digest: Ncx2kus7h/iQyTVSjhpJsoTsO4w= +SHA256-Digest: Wj+Mt70ZbFenafzJRZfQL6RX7u+mh8qulalynS6yzuk= Name: ipv4.dat Digest-Algorithms: SHA1 SHA256 SHA1-Digest: waUG/WsI8tduxf5mrxPmnPqMzUE= SHA256-Digest: NYsxbG0WecF0+BO7hFlgmAACtDfL8P5PB556Z8iarms= -Name: ipv6.dat -Digest-Algorithms: SHA1 SHA256 -SHA1-Digest: SRhTZIQ2nTeX0GIF/B8e/IuUKpQ= -SHA256-Digest: 9ImunHzGKDZACTknDe86EwUHZv2DS1g9U+ofDC3Pa20= - -Name: i18n_translate_dom.js -Digest-Algorithms: SHA1 SHA256 -SHA1-Digest: bLeppNH/YlEym1IR2nJUY8iQ/uo= -SHA256-Digest: LMDyVtBpfyoTemLr9Ide2KTzWaHFiYsGMkuLznPZQXc= - -Name: level_cache.js +Name: popup.css Digest-Algorithms: SHA1 SHA256 -SHA1-Digest: oRN2sB7nUAfmMIZv9DZbpeM4Uh8= -SHA256-Digest: SHAOHBF5zjMs2gOUhzi9gRlfYPznKpR3tib2pvcLXnE= +SHA1-Digest: NEHwa2mxPudXCR1cGQOPxKh6eSw= +SHA256-Digest: eEvnjRyVpSq05xZVb/ljOTQBOYT3VrfoTbceVDDqcTc= -Name: levels_browser.js +Name: url.js Digest-Algorithms: SHA1 SHA256 -SHA1-Digest: 72sdCbsIHyw9EZnYfkZQTR8QCaw= -SHA256-Digest: eTo5q2caJLdrRu6zyrI+sf1nowugn1kMo3ogEckCYiE= +SHA1-Digest: PfWAOB21Z4zd0bN8QayDBCJvbA4= +SHA256-Digest: F+N+oZfxthJpTNjz7tPVnBPPoTLzH9vjHfi8KIZUryQ= -Name: levels.js +Name: farble.wasm Digest-Algorithms: SHA1 SHA256 -SHA1-Digest: 2jwu2BK8dEMqaQ0EY4sqxq1ppTI= -SHA256-Digest: 8mefv9z/GN7bQvQpI3X+jmaeaerFysR4gT/O647qAxk= +SHA1-Digest: y2cmMLiaieIsO/iZcAYNJzPhHTw= +SHA256-Digest: vkhiYJKN6KQYc52l4Y6XhmyiltXE3htOrsGljPSFUq4= -Name: manifest.json +Name: settings_tweaks.js Digest-Algorithms: SHA1 SHA256 -SHA1-Digest: fGePTx+yxF2d624nZfE4/sG989w= -SHA256-Digest: gg2rIwcAvWwzfGxYjgMODwNx/GoG8sJ+o7e7v+3BTq0= +SHA1-Digest: dgc+bH56IVAiMNN0Uz7GpdZCd48= +SHA256-Digest: D7cZ14qDJEJ+zupkHerDd4VoOh3iUpQwnQXSV1uusXc= -Name: options_advanced.html +Name: code_builders.js Digest-Algorithms: SHA1 SHA256 -SHA1-Digest: BAtmM2uaPsAxfgYwnpfjxNMZ8aQ= -SHA256-Digest: 7ry3J/BfxQss5w1O/da9jVMpZQB9/Izz35nzqobfdQM= +SHA1-Digest: D6fVI/5ycx4mazhB5N/SVi4ngJo= +SHA256-Digest: FcxQDJIE1/QSR2DHyzJQguhU333lj3SBofjq+Lfyw7A= Name: options_advanced.js Digest-Algorithms: SHA1 SHA256 SHA1-Digest: 5e913Elv7D0ZuJDcsBMBH9f/BIQ= SHA256-Digest: NW5oCuRrwM15d5W+ovQbv9kpt6Hn3tVzfAcNSNazRno= -Name: options.css +Name: wrappingS-HTML-LS.js Digest-Algorithms: SHA1 SHA256 -SHA1-Digest: /oKuSHP/fiuvd5Ue70wNOu4CmrU= -SHA256-Digest: njL2GVBrLnclpdMUSCcQ1lj5LMGgXEnIFCAPQALPRy4= +SHA1-Digest: uuGnjjKXlhd3UCDmQZ0o7zl6ajk= +SHA256-Digest: WYkyPHeu7lV7piS5kcZTBOI7hSE4y27oT3W+Jtq8IM0= -Name: options_domains.html +Name: ipv6.dat Digest-Algorithms: SHA1 SHA256 -SHA1-Digest: tfMnBf9B40KLpMCoCfsB3PS4qJY= -SHA256-Digest: Cs6IADD2nqzzQ439pRMBOTDiEWosVaAwO/aIr1A0mlw= +SHA1-Digest: SRhTZIQ2nTeX0GIF/B8e/IuUKpQ= +SHA256-Digest: 9ImunHzGKDZACTknDe86EwUHZv2DS1g9U+ofDC3Pa20= -Name: options_domains.js +Name: fp_report.js Digest-Algorithms: SHA1 SHA256 -SHA1-Digest: rt3zMuBXLMcgJDwR66J+U33XvLQ= -SHA256-Digest: sIEEO9iCXMLPUvJ31XO++cfCKMmVjKWmygNeFXyzyaQ= +SHA1-Digest: yV1eqpF2rDCc/LKgFcCMph7TMyI= +SHA256-Digest: Spc0x25P0YvgcvTr9NTs0XcfFfbkxgKTWW+vCfqb7SE= -Name: options.html +Name: wrappingS-GP.js +Digest-Algorithms: SHA1 SHA256 +SHA1-Digest: NK97KmTET4u7wUF4XQU67w1Jk7U= +SHA256-Digest: qQ+yXy2jnNvKBzthsLmhy+C14YVkqsHmn7e8IMuv88I= + +Name: wrappingS-DOM.js Digest-Algorithms: SHA1 SHA256 -SHA1-Digest: l3WW789AASlDSQuqFvrreqsbOwc= -SHA256-Digest: YWarsXu9DTfsHccai9spl+bzLVcNVQfOH+SMh6CxCIs= +SHA1-Digest: nJIBZPRY3w8sJUiuRHg62r/8VN0= +SHA256-Digest: VVmEwaVhsNJ6sWW3jSdEY1ibpd5FpZKMlnsJn0QmSLI= Name: options_init.js Digest-Algorithms: SHA1 SHA256 SHA1-Digest: tV+QFUmbo81Z7jB1IGEnl+cO5ZE= SHA256-Digest: fyTvllNuszakdtR+gLB1hbwX0RpakoMk1A6JWIMacEs= -Name: options.js -Digest-Algorithms: SHA1 SHA256 -SHA1-Digest: ZmVXI+04j43I67Tks5qqmA7iV2Y= -SHA256-Digest: Mqc7QBRBNcQDK5aHUcjehzYpeha53KxX/ZA9/nW2I78= - -Name: options_nbs.js -Digest-Algorithms: SHA1 SHA256 -SHA1-Digest: h3P/IZQ4cvzytOYh2Smz4XFHE3Y= -SHA256-Digest: +nuxi7EKQMGCwuViCJHydualO/at8yiwR3qA5dQ6h78= - -Name: popup.css -Digest-Algorithms: SHA1 SHA256 -SHA1-Digest: NEHwa2mxPudXCR1cGQOPxKh6eSw= -SHA256-Digest: eEvnjRyVpSq05xZVb/ljOTQBOYT3VrfoTbceVDDqcTc= - -Name: popup.html -Digest-Algorithms: SHA1 SHA256 -SHA1-Digest: xZkfHjSDtpE2GdA9ZkyAbRbuewA= -SHA256-Digest: 4cmbi2cV4qATiE0ZrhqfESUcx2YtWhdY18oriaGi7zo= - -Name: popup.js -Digest-Algorithms: SHA1 SHA256 -SHA1-Digest: tYi2/ma/twEYXR9jzDdY7DCbUa0= -SHA256-Digest: Ih7jia4AmHnGQzIbT7ifsIpnh2rcus3tOyIj6moKNfw= - -Name: session_hash.js -Digest-Algorithms: SHA1 SHA256 -SHA1-Digest: WMV28szxRkiH11fWOtOAKG5Gbxo= -SHA256-Digest: vfS4+xGX33J1hff3LE3jwozkHXJPi71FgK+PbIzPwxM= - -Name: settings_tweaks.js +Name: wrappingS-SENSOR-GYRO.js Digest-Algorithms: SHA1 SHA256 -SHA1-Digest: dSYHh221rF3NhBQ3KeMUorGvMpI= -SHA256-Digest: R1V+pQ2V1pdUFSj3cTA+FMnp95hFhylhIFu+eX13Enk= +SHA1-Digest: vL5HoORoJh94qB4uL8pqkbQoDss= +SHA256-Digest: QGliCFp/N1qLT8cQgtk7F/VGLC7QfcV6WUz7/TyX7sA= Name: tweaks_gui.js Digest-Algorithms: SHA1 SHA256 SHA1-Digest: ZfuO6OyqMhbMdyZhhwsmNVeqMEs= SHA256-Digest: SR8tPdfgZkBoDtXkpR71ZxfaZb1dAOHOF7neWYeKUr8= -Name: update.js +Name: wrappingS-H-C.js Digest-Algorithms: SHA1 SHA256 -SHA1-Digest: ixU/edeai2hi6I9wNKA4XHE2jmE= -SHA256-Digest: IG1iUU+a4g4c39IABujlw9f6fpfgXYreMH8szf9o8JY= +SHA1-Digest: 2v6H5AJ1s72J5brdOYApMQ8EJCY= +SHA256-Digest: FsFNzSNMiS8gkjpUZmwoKOvHE4mGroVMol/jgY+ks+M= -Name: url.js +Name: wrappingS-VR.js Digest-Algorithms: SHA1 SHA256 -SHA1-Digest: PfWAOB21Z4zd0bN8QayDBCJvbA4= -SHA256-Digest: F+N+oZfxthJpTNjz7tPVnBPPoTLzH9vjHfi8KIZUryQ= +SHA1-Digest: v4hsrgzpijh9Yt5vhaObXYYTf94= +SHA256-Digest: 6rCIUQbouuzjt7vTy1F9QA+bgR+eC44llkvotIlBDyQ= -Name: wrapping.js +Name: wrappingS-WEBGL.js Digest-Algorithms: SHA1 SHA256 -SHA1-Digest: YeJwkdkwCoGuT/ZnC3jsIKDMwdg= -SHA256-Digest: 9pb9WqrsILSwvxmZlZHnYbIjladVhTtyg5AAs4hyN4M= +SHA1-Digest: R2RCVUAMhmlZwsqUTWZJnAm1yA4= +SHA256-Digest: xlvbfsr8seDN0H/92fwnjEWJX0lwyLSjLVXFs5Bz6CU= -Name: wrappingL-CANVAS.js +Name: wrappingS-EME.js Digest-Algorithms: SHA1 SHA256 -SHA1-Digest: EeTovI1VAdeK69fBvcykyvssE+Q= -SHA256-Digest: H/AxcTOkk/Sx5iFaqFohnEfLtRerTMV74RazfLTDngo= +SHA1-Digest: pbiv/FUmMdAN4e0KhGJ38gD/Wx0= +SHA256-Digest: xHARra6k01hIuGv/jxao1EjEbWZ8Oz4PR1KmgNiZI0c= -Name: wrappingL-SENSOR.js +Name: manifest.json Digest-Algorithms: SHA1 SHA256 -SHA1-Digest: vYJq0a3K9xaICF1z/wWK5FdQBRs= -SHA256-Digest: CStPywwRq2VS4fTjQX6Ed9RpMfkHgLegs0hzvjqukzA= +SHA1-Digest: uvlYv12p24P53NYJjv/9nrQx3kU= +SHA256-Digest: cBjmC2tOu3mekzwSC9+O4jjRvqDVj/nN1T/vHjRX+8k= -Name: wrappingS-AJAX.js +Name: wrappingS-NET.js Digest-Algorithms: SHA1 SHA256 -SHA1-Digest: 1W/XsBl537cHjDGZrrQrc99Xhv0= -SHA256-Digest: RHPSC8EA/zuyvq7wYzkyWjA9CuHhh/5oL5k13qfMH5U= +SHA1-Digest: Uxrdfzl6CMJdUvVOztLx7fFSEj4= +SHA256-Digest: gD5IFirVoRX1gkUjPTRyUwBQr4rfBwL3WPBN1IxLfNM= -Name: wrappingS-BATTERY-CR.js +Name: options_advanced.html Digest-Algorithms: SHA1 SHA256 -SHA1-Digest: QGDEWVL+YpIt+1MgZfD6PFogKac= -SHA256-Digest: IMddUyyCdrp1T8Z+fqDMD65CgzAGbUVZnX7igl+cez4= +SHA1-Digest: BAtmM2uaPsAxfgYwnpfjxNMZ8aQ= +SHA256-Digest: 7ry3J/BfxQss5w1O/da9jVMpZQB9/Izz35nzqobfdQM= Name: wrappingS-BE.js Digest-Algorithms: SHA1 SHA256 SHA1-Digest: 7uYDTTpUaaAf9C1SwpW3pj9O0LI= SHA256-Digest: DV1R7+O7n6yBAMmfmOs9ZJVGNSWNIc2b3/R6HOVjUec= -Name: wrappingS-COOP-SCHEDULING.js +Name: options.css Digest-Algorithms: SHA1 SHA256 -SHA1-Digest: /lr28OFTteOeVUgFY/AIngpy+vk= -SHA256-Digest: 8KK3JjPRAnLm3GhP1pWwonvcgWH62rrhQsNZOG0M9+c= +SHA1-Digest: /oKuSHP/fiuvd5Ue70wNOu4CmrU= +SHA256-Digest: njL2GVBrLnclpdMUSCcQ1lj5LMGgXEnIFCAPQALPRy4= -Name: wrappingS-DM.js +Name: level_cache.js Digest-Algorithms: SHA1 SHA256 -SHA1-Digest: FmTTYvT4UeQBCCmNP4SN2tDN22c= -SHA256-Digest: FVl5WZ5QSGt2FFlB0+5EpU1GiCHzWW3KhFjmuylcNqs= +SHA1-Digest: fYGvZBThvPTsAc+JG+s7x2ti/GM= +SHA256-Digest: Tq6LhU1KtwW3hKpByBEyWc/Za9+YXwh0oTLPFH5PBlw= -Name: wrappingS-DOM.js +Name: background.js Digest-Algorithms: SHA1 SHA256 -SHA1-Digest: nJIBZPRY3w8sJUiuRHg62r/8VN0= -SHA256-Digest: VVmEwaVhsNJ6sWW3jSdEY1ibpd5FpZKMlnsJn0QmSLI= +SHA1-Digest: wbttq2l8eV6/PDqrlIcm5bhjuUk= +SHA256-Digest: 95VInAN+d3aWqy+9+StLSRP+7UBZeX57a2OQ01tM2gU= -Name: wrappingS-ECMA-ARRAY.js +Name: wrappingS-HTML5.js Digest-Algorithms: SHA1 SHA256 -SHA1-Digest: jtEO9liQLV6kPM4wRndhMeaw40E= -SHA256-Digest: TnT9yzyMlsarwjULoUXLOPZbKaYzvSU+v7i/4yq5lcA= +SHA1-Digest: yztXzw5G3Bo9TwjcEn46P8fG0as= +SHA256-Digest: 1iwQ0YJX4XhPpS1iYQ3UOmocthk6uHVg1MOF0YG1Iqw= -Name: wrappingS-ECMA-DATE.js +Name: wrappingS-NP.js Digest-Algorithms: SHA1 SHA256 -SHA1-Digest: yEo+CcmF0tI1jKmw1ib+qUWsYkY= -SHA256-Digest: 5BEsEiE0H7RDC+JzKO3aqKq7Ygi9ThIn9BWdFTu9tA0= +SHA1-Digest: hJ/LXoVaOy4EZDDOWjoYLEuZ5XY= +SHA256-Digest: evVoVl5uK1B5qI5Ns7Hqsb+NkFKOBlgPgMO4sQKX30k= -Name: wrappingS-ECMA-SHARED.js +Name: fp_report.html Digest-Algorithms: SHA1 SHA256 -SHA1-Digest: ojT9vwkjOPnrQvSONZ2Lbk+T+sM= -SHA256-Digest: miT/l8cjdvq0XW3EoSMybEGpZ/rQ34XzYrZOkMVa1B0= +SHA1-Digest: r8NMaD77xe69NlcQI39r1CQikqM= +SHA256-Digest: yGrhz8hxTg19ct+Z1HlTIz6wTd870eU61UIq6Up2Bcs= -Name: wrappingS-EME.js +Name: wrappingS-WEBA.js Digest-Algorithms: SHA1 SHA256 -SHA1-Digest: pbiv/FUmMdAN4e0KhGJ38gD/Wx0= -SHA256-Digest: xHARra6k01hIuGv/jxao1EjEbWZ8Oz4PR1KmgNiZI0c= +SHA1-Digest: mCqLG7sAMseBZfrTxT6K0E7JDto= +SHA256-Digest: M06g1kH18JuULaIe5L/MI1EOHJ5TgcLQiFGraO+L3uE= -Name: wrappingS-GEO.js +Name: wrappingS-ECMA-ARRAY.js Digest-Algorithms: SHA1 SHA256 -SHA1-Digest: XQONgEBYJMmXIC1tG7KweYzgB7s= -SHA256-Digest: 8Cl+DoQUK/Jwa1pN57tNEiJJgUbTneJkGK0xzGH5aRY= +SHA1-Digest: jtEO9liQLV6kPM4wRndhMeaw40E= +SHA256-Digest: TnT9yzyMlsarwjULoUXLOPZbKaYzvSU+v7i/4yq5lcA= -Name: wrappingS-GP.js +Name: wrappingS-IDLE.js Digest-Algorithms: SHA1 SHA256 -SHA1-Digest: NK97KmTET4u7wUF4XQU67w1Jk7U= -SHA256-Digest: qQ+yXy2jnNvKBzthsLmhy+C14YVkqsHmn7e8IMuv88I= +SHA1-Digest: l/El60UR6r+bDygEE5EejDK8dPU= +SHA256-Digest: Y5DI2oTaBtvSuY0KlIchsWmOCtT0r92fRLoqn5do5ts= -Name: wrappingS-H-C.js +Name: http_shield_common.js Digest-Algorithms: SHA1 SHA256 -SHA1-Digest: 2v6H5AJ1s72J5brdOYApMQ8EJCY= -SHA256-Digest: FsFNzSNMiS8gkjpUZmwoKOvHE4mGroVMol/jgY+ks+M= +SHA1-Digest: kNZPvYvIu8/q73uhpv5i/624hsU= +SHA256-Digest: Z66jza7VW2NytbRsq6kkXe5duIvmb5hml8ZPS/I5UYY= Name: wrappingS-HRT.js Digest-Algorithms: SHA1 SHA256 SHA1-Digest: qr12WhfyOQ1th499AXJAwwnHbSU= SHA256-Digest: taVFbL4rKgxaCCyd2lE4dqKz0uKEpQPKjHR/lhB0yfE= -Name: wrappingS-HTML.js +Name: popup.html Digest-Algorithms: SHA1 SHA256 -SHA1-Digest: Ncx2kus7h/iQyTVSjhpJsoTsO4w= -SHA256-Digest: Wj+Mt70ZbFenafzJRZfQL6RX7u+mh8qulalynS6yzuk= +SHA1-Digest: n8Hhi6u4c4yUZLlNm39GKgYwsmA= +SHA256-Digest: rAH3KyTOyRCsB29mYXnOhyqMWPfoVXm2HGLcw4iU3sE= -Name: wrappingS-HTML-LS.js +Name: wrappingS-SENSOR-MAGNET.js Digest-Algorithms: SHA1 SHA256 -SHA1-Digest: uuGnjjKXlhd3UCDmQZ0o7zl6ajk= -SHA256-Digest: WYkyPHeu7lV7piS5kcZTBOI7hSE4y27oT3W+Jtq8IM0= +SHA1-Digest: jEncy21tXs/Dw8IftLOcXx5Gnd8= +SHA256-Digest: JOG1OoUuXUUcmcV17NsLMaPQnuCPw3/7a+RKtV5n6nQ= -Name: wrappingS-HTML5.js +Name: levels.js Digest-Algorithms: SHA1 SHA256 -SHA1-Digest: yztXzw5G3Bo9TwjcEn46P8fG0as= -SHA256-Digest: 1iwQ0YJX4XhPpS1iYQ3UOmocthk6uHVg1MOF0YG1Iqw= +SHA1-Digest: YkJ1DosAEkuWAz33CUfRQCO/Lm0= +SHA256-Digest: b/GliwyApuaAt7ew1YZUuvWCt6i5X8wGxAqJgl6YHVQ= -Name: wrappingS-IDLE.js +Name: wrappingS-MEDIA-CAPABILITIES.js Digest-Algorithms: SHA1 SHA256 -SHA1-Digest: l/El60UR6r+bDygEE5EejDK8dPU= -SHA256-Digest: Y5DI2oTaBtvSuY0KlIchsWmOCtT0r92fRLoqn5do5ts= +SHA1-Digest: 7JVRWoX9fvE4NotwPrs5YJYGIKg= +SHA256-Digest: VX/1I5t0+GEEsAYdYASMQ0VupRF9Kqdow8HlVzjlrNE= -Name: wrappingS-MCS.js +Name: options_nbs.js Digest-Algorithms: SHA1 SHA256 -SHA1-Digest: qqA53JjE+TYeho+MP5s1P/s0PKo= -SHA256-Digest: 2fOx8vYIjLr42nErRd8LyPfjaALGEBGdHL9738YKzi0= +SHA1-Digest: h3P/IZQ4cvzytOYh2Smz4XFHE3Y= +SHA256-Digest: +nuxi7EKQMGCwuViCJHydualO/at8yiwR3qA5dQ6h78= -Name: wrappingS-MEDIA-CAPABILITIES.js +Name: common.css Digest-Algorithms: SHA1 SHA256 -SHA1-Digest: 7JVRWoX9fvE4NotwPrs5YJYGIKg= -SHA256-Digest: VX/1I5t0+GEEsAYdYASMQ0VupRF9Kqdow8HlVzjlrNE= +SHA1-Digest: tsJdSEfI36fh9oUoVdK6/Qdwa6U= +SHA256-Digest: rcYP9iT2tHm7PgxGQv2ZcMfuoONRlHM/QCifNdNMJ2A= -Name: wrappingS-NET.js +Name: options.js Digest-Algorithms: SHA1 SHA256 -SHA1-Digest: Uxrdfzl6CMJdUvVOztLx7fFSEj4= -SHA256-Digest: gD5IFirVoRX1gkUjPTRyUwBQr4rfBwL3WPBN1IxLfNM= +SHA1-Digest: ZmVXI+04j43I67Tks5qqmA7iV2Y= +SHA256-Digest: Mqc7QBRBNcQDK5aHUcjehzYpeha53KxX/ZA9/nW2I78= -Name: wrappingS-NFC.js +Name: wrappingS-ECMA-SHARED.js Digest-Algorithms: SHA1 SHA256 -SHA1-Digest: KbdOKYQNqXEWbISUVdHnvfhYyKc= -SHA256-Digest: xHWrw+WAmLKW4I9z/0JKEUz6DN65KgfmSvp4bODNvpw= +SHA1-Digest: ojT9vwkjOPnrQvSONZ2Lbk+T+sM= +SHA256-Digest: miT/l8cjdvq0XW3EoSMybEGpZ/rQ34XzYrZOkMVa1B0= -Name: wrappingS-NP.js +Name: crc16.js Digest-Algorithms: SHA1 SHA256 -SHA1-Digest: hJ/LXoVaOy4EZDDOWjoYLEuZ5XY= -SHA256-Digest: evVoVl5uK1B5qI5Ns7Hqsb+NkFKOBlgPgMO4sQKX30k= +SHA1-Digest: T97r2grez4dAiyuKv/vLo6Yd0yk= +SHA256-Digest: a0IfR18X0joyJvCPY2UKRvvBgdbg7e+VENaaiAix4Vg= -Name: wrappingS-PT2.js +Name: alea.js Digest-Algorithms: SHA1 SHA256 -SHA1-Digest: zISgD0AYwd3aQMpnKaw5dDeWa10= -SHA256-Digest: Hm3Se1IsUlyi1wGkFsQIJVLLiTPJ33wMUU8+RrAFOaw= +SHA1-Digest: 5O2DZ0bvydRHS9mNry4GicStzOw= +SHA256-Digest: kU+HKcdrshA3zzIH1wFWtkw1lw/2O6El8UCFSOvLxEc= -Name: wrappingS-SENSOR-ACCEL.js +Name: fp_levels.js Digest-Algorithms: SHA1 SHA256 -SHA1-Digest: LzcVqb+rbXhEw+ncVRAhWqxBhcc= -SHA256-Digest: sLCl5v5TFB6WJgkS2i80W5SaPijM5XtQ60ufq3mKvds= +SHA1-Digest: ab0GNDLJWyq/GOdtKprjMaBurg0= +SHA256-Digest: 0KoPeNXhguHjT7W7MX4wCgFu9y+szxxnw00BQERv9AA= -Name: wrappingS-SENSOR-GYRO.js +Name: options_domains.html Digest-Algorithms: SHA1 SHA256 -SHA1-Digest: vL5HoORoJh94qB4uL8pqkbQoDss= -SHA256-Digest: QGliCFp/N1qLT8cQgtk7F/VGLC7QfcV6WUz7/TyX7sA= +SHA1-Digest: tfMnBf9B40KLpMCoCfsB3PS4qJY= +SHA256-Digest: Cs6IADD2nqzzQ439pRMBOTDiEWosVaAwO/aIr1A0mlw= Name: wrappingS-SENSOR.js Digest-Algorithms: SHA1 SHA256 SHA1-Digest: Q6VYuBsZC8melxGIMOKL855B2Tk= SHA256-Digest: z2Ws0UPu+eOGD7zUg/HrrZdPJqNd+tA8a+O+xXfHk+s= -Name: wrappingS-SENSOR-LIGHT.js +Name: http_shield_firefox.js Digest-Algorithms: SHA1 SHA256 -SHA1-Digest: LIEwX8Tzp3OJtIPsFeyosTMtVGw= -SHA256-Digest: O+nnsHDh80kA9a2aEjqJhicOlZNK/kAY8BfSlGkDmXU= +SHA1-Digest: 6lb3fXUX+vYdv/Xj7E3Gh3J3OAc= +SHA256-Digest: azcLJExqs0Z+OTIEk+2C5UdOqQtkQdAJG+pp7D7Dlp8= -Name: wrappingS-SENSOR-MAGNET.js +Name: wrappingS-GEO.js Digest-Algorithms: SHA1 SHA256 -SHA1-Digest: jEncy21tXs/Dw8IftLOcXx5Gnd8= -SHA256-Digest: JOG1OoUuXUUcmcV17NsLMaPQnuCPw3/7a+RKtV5n6nQ= +SHA1-Digest: XQONgEBYJMmXIC1tG7KweYzgB7s= +SHA256-Digest: 8Cl+DoQUK/Jwa1pN57tNEiJJgUbTneJkGK0xzGH5aRY= + +Name: document_start.js +Digest-Algorithms: SHA1 SHA256 +SHA1-Digest: wRuY5bCWKLee/hpzbpg4nAhaXKY= +SHA256-Digest: +xBQLcJ+YBE9lbT7uYnZZzWBiy3tSiRFahLjCZU10/A= + +Name: options_domains.js +Digest-Algorithms: SHA1 SHA256 +SHA1-Digest: rt3zMuBXLMcgJDwR66J+U33XvLQ= +SHA256-Digest: sIEEO9iCXMLPUvJ31XO++cfCKMmVjKWmygNeFXyzyaQ= + +Name: wrappingS-BATTERY-CR.js +Digest-Algorithms: SHA1 SHA256 +SHA1-Digest: QGDEWVL+YpIt+1MgZfD6PFogKac= +SHA256-Digest: IMddUyyCdrp1T8Z+fqDMD65CgzAGbUVZnX7igl+cez4= Name: wrappingS-SENSOR-ORIENT.js Digest-Algorithms: SHA1 SHA256 SHA1-Digest: 5deLl6e4r0RRTVn3xaSoVYjG8eI= SHA256-Digest: sRGEaTas+cBbo5T5veBwAd8LYyHvg+S8Gq/+Y6DT1aY= -Name: wrappingS-VR.js +Name: helpers.js Digest-Algorithms: SHA1 SHA256 -SHA1-Digest: v4hsrgzpijh9Yt5vhaObXYYTf94= -SHA256-Digest: 6rCIUQbouuzjt7vTy1F9QA+bgR+eC44llkvotIlBDyQ= +SHA1-Digest: lhUkzuVBLgx/ygDLjqJdbZM5UIk= +SHA256-Digest: mc3tNDv6msWf5/b0Hzs66vG78Vyd1r5TN3P277V8NO8= -Name: wrappingS-WEBA.js +Name: wrappingL-SENSOR.js Digest-Algorithms: SHA1 SHA256 -SHA1-Digest: mCqLG7sAMseBZfrTxT6K0E7JDto= -SHA256-Digest: M06g1kH18JuULaIe5L/MI1EOHJ5TgcLQiFGraO+L3uE= +SHA1-Digest: vYJq0a3K9xaICF1z/wWK5FdQBRs= +SHA256-Digest: CStPywwRq2VS4fTjQX6Ed9RpMfkHgLegs0hzvjqukzA= -Name: wrappingS-WEBGL.js +Name: popup.js Digest-Algorithms: SHA1 SHA256 -SHA1-Digest: R2RCVUAMhmlZwsqUTWZJnAm1yA4= -SHA256-Digest: xlvbfsr8seDN0H/92fwnjEWJX0lwyLSjLVXFs5Bz6CU= +SHA1-Digest: k/euU58Xyw+LpovE7AiiDBIKxf4= +SHA256-Digest: 289n2AXInS/MZh3h0PKTPlLrcxjiOQw+nmQmTP1ZWVM= -Name: wrappingS-XR.js +Name: wrappingS-SENSOR-ACCEL.js Digest-Algorithms: SHA1 SHA256 -SHA1-Digest: 1mKa5M2Z0abxRSgMnKkCIhtJBkQ= -SHA256-Digest: kww1BVH+ddLJT+sBq5+uemc+na9usBSUZklx6OSUlac= +SHA1-Digest: LzcVqb+rbXhEw+ncVRAhWqxBhcc= +SHA256-Digest: sLCl5v5TFB6WJgkS2i80W5SaPijM5XtQ60ufq3mKvds= -Name: fp_config/wrappers-lvl_0_1.json +Name: wrappingS-NFC.js Digest-Algorithms: SHA1 SHA256 -SHA1-Digest: Pgolf0CBR/pJJapNrVwY4Z1+nus= -SHA256-Digest: SeynVsnuZtz3mWJnErfRkWb/vQ1Ur4g1J43vK69So5s= +SHA1-Digest: KbdOKYQNqXEWbISUVdHnvfhYyKc= +SHA256-Digest: xHWrw+WAmLKW4I9z/0JKEUz6DN65KgfmSvp4bODNvpw= -Name: fp_config/groups-lvl_0.json +Name: wrappingS-AJAX.js Digest-Algorithms: SHA1 SHA256 -SHA1-Digest: tM7YSIGu2lT7KPlQTzIv/olpuJQ= -SHA256-Digest: PRWuiq+beNrdL7ZvGhZKV4ys/YaXWGt+AL2gcxP9Fb0= +SHA1-Digest: 1W/XsBl537cHjDGZrrQrc99Xhv0= +SHA256-Digest: RHPSC8EA/zuyvq7wYzkyWjA9CuHhh/5oL5k13qfMH5U= -Name: fp_config/groups-lvl_1.json +Name: wrapping.js Digest-Algorithms: SHA1 SHA256 -SHA1-Digest: 9l5nDa6C5LH3m7x0TeR/VAb9qIE= -SHA256-Digest: kideCOUQOvNn2lFfQ2qX+N0Ei9uSeZiiX/tli9sVPAc= +SHA1-Digest: R2RJB7gjqH1S9EBlaD9QiQscc04= +SHA256-Digest: 8vTPjlp92h2Jy/DaOIAfTumDU72O1LQClH/oKJDRm80= -Name: fp_config/schema/groups-schema.json +Name: img/icon-512.png Digest-Algorithms: SHA1 SHA256 -SHA1-Digest: cRyyq4R4rb0S9acniPSio9N9IVc= -SHA256-Digest: Pppil6fKHlXc6ODUeqacNR6ECGrFnLt7zPZ2aAzdmR8= +SHA1-Digest: 8A+OqREyU5uPYaOlNzniGauDst4= +SHA256-Digest: kltvUYdQoDVZjVBuzjyvPOqWQHILeGS/YRpCCmaHvdo= -Name: fp_config/schema/wrappers-schema.json +Name: img/icon-16.png Digest-Algorithms: SHA1 SHA256 -SHA1-Digest: sT48AMsi88DRPJXIN+KMG5G9B7o= -SHA256-Digest: s5Znx+0YIoLeF6kaZUiIKx3ULTsIsnyO4yjGQHxDZos= +SHA1-Digest: KJr3cioJVlOZeFN8MmKuZeXPLDo= +SHA256-Digest: va7y6fe656lxphwmphFlO6IZARzUUbZywAs3nDu7vJ8= -Name: img/icon-96.png +Name: img/icon-64.png Digest-Algorithms: SHA1 SHA256 -SHA1-Digest: 3sGba/XswnppYsaIvfTwz53/kG8= -SHA256-Digest: jUEMyBE/uHZNePtPcexlRJJG3t/GK+iliO2DG6Yl/mA= +SHA1-Digest: eyK7DY2xw58Th8+nNZbzdwqLbuc= +SHA256-Digest: Yxel5v3nXBt7QpQRuNiZvuwVv13ssvs6S1aZUPWbLfw= -Name: img/icon-256.png +Name: img/icon-48.png Digest-Algorithms: SHA1 SHA256 -SHA1-Digest: QfitxJlPICDa47LOLx7tpsFRjnE= -SHA256-Digest: rxW8kBZmzU598uulbmt0/+8nqQ5QJLvcD0qinUFRm4I= +SHA1-Digest: cbZYEa/OHHuAFkk6xXU14gXfuW0= +SHA256-Digest: 0NBsv3Z8kb1K0hUKJ0Uz4aEjuIWM2i5N+KjD0fGCK40= -Name: img/icon-512.png +Name: img/icon-38.png Digest-Algorithms: SHA1 SHA256 -SHA1-Digest: 8A+OqREyU5uPYaOlNzniGauDst4= -SHA256-Digest: kltvUYdQoDVZjVBuzjyvPOqWQHILeGS/YRpCCmaHvdo= +SHA1-Digest: kxG2j1Os8WGFMdblvCQqFcXOOFQ= +SHA256-Digest: fvFyI+G0hOVKjzbOAieqlfEdojX07upx0SZ+UzzSEv0= Name: img/logo.svg Digest-Algorithms: SHA1 SHA256 @@ -435,10 +425,10 @@ Digest-Algorithms: SHA1 SHA256 SHA1-Digest: 8B8R+b7j9d/jTOWLr9Vd5ad7Kms= SHA256-Digest: wlWmfIkqnj1AmEIN/aOf4S7D4t7VXTxKpHzjLvpLlgQ= -Name: img/icon-16.png +Name: img/icon-256.png Digest-Algorithms: SHA1 SHA256 -SHA1-Digest: KJr3cioJVlOZeFN8MmKuZeXPLDo= -SHA256-Digest: va7y6fe656lxphwmphFlO6IZARzUUbZywAs3nDu7vJ8= +SHA1-Digest: QfitxJlPICDa47LOLx7tpsFRjnE= +SHA256-Digest: rxW8kBZmzU598uulbmt0/+8nqQ5QJLvcD0qinUFRm4I= Name: img/icon-19.png Digest-Algorithms: SHA1 SHA256 @@ -450,138 +440,183 @@ Digest-Algorithms: SHA1 SHA256 SHA1-Digest: G0is2ZkT2onAEVptZg+CGgb7hMk= SHA256-Digest: 1/kyBDDIZpOKVZ0Z4pRVa38ssnCT1ABJIwbOHCdrI70= -Name: img/icon-38.png -Digest-Algorithms: SHA1 SHA256 -SHA1-Digest: kxG2j1Os8WGFMdblvCQqFcXOOFQ= -SHA256-Digest: fvFyI+G0hOVKjzbOAieqlfEdojX07upx0SZ+UzzSEv0= - -Name: img/icon-48.png -Digest-Algorithms: SHA1 SHA256 -SHA1-Digest: cbZYEa/OHHuAFkk6xXU14gXfuW0= -SHA256-Digest: 0NBsv3Z8kb1K0hUKJ0Uz4aEjuIWM2i5N+KjD0fGCK40= - -Name: img/icon-64.png +Name: img/icon-96.png Digest-Algorithms: SHA1 SHA256 -SHA1-Digest: eyK7DY2xw58Th8+nNZbzdwqLbuc= -SHA256-Digest: Yxel5v3nXBt7QpQRuNiZvuwVv13ssvs6S1aZUPWbLfw= +SHA1-Digest: 3sGba/XswnppYsaIvfTwz53/kG8= +SHA256-Digest: jUEMyBE/uHZNePtPcexlRJJG3t/GK+iliO2DG6Yl/mA= Name: lib/sha256.js Digest-Algorithms: SHA1 SHA256 SHA1-Digest: gD41L2w5Df8fUa/G7hFq54BXjaw= SHA256-Digest: ENvJL72y7Tk5wW6pxybHZT9ex9/bAQyZBEBCaMtCSgg= -Name: LICENSES/CC-BY-ND-4.0.txt +Name: fp_config/groups-lvl_0.json Digest-Algorithms: SHA1 SHA256 -SHA1-Digest: qubAfBNgLC6jZ29X/XVKrC8laqg= -SHA256-Digest: Sp1GXpga5r3n8Rerv7DiTyzBgg6ZpH775YWT+lxD+ik= +SHA1-Digest: tM7YSIGu2lT7KPlQTzIv/olpuJQ= +SHA256-Digest: PRWuiq+beNrdL7ZvGhZKV4ys/YaXWGt+AL2gcxP9Fb0= -Name: LICENSES/MPL-2.0.txt +Name: fp_config/wrappers-lvl_0_1.json Digest-Algorithms: SHA1 SHA256 -SHA1-Digest: 1+PtWsFJrB4tLg9Nr/CBwdr+8cA= -SHA256-Digest: Pz2eACSxkhsGfW9/iN60pgy+enjnbGTj8df8O3ebnQQ= +SHA1-Digest: Pgolf0CBR/pJJapNrVwY4Z1+nus= +SHA256-Digest: SeynVsnuZtz3mWJnErfRkWb/vQ1Ur4g1J43vK69So5s= -Name: LICENSES/CC0-1.0.txt +Name: fp_config/groups-lvl_1.json Digest-Algorithms: SHA1 SHA256 -SHA1-Digest: gtpHL20A3F8KZR8z67Mgqpx7CNA= -SHA256-Digest: ogEPNDSH0/dhiv/lT3ifVIdgIzHAqNA/SemnxUfPBJk= +SHA1-Digest: 9l5nDa6C5LH3m7x0TeR/VAb9qIE= +SHA256-Digest: kideCOUQOvNn2lFfQ2qX+N0Ei9uSeZiiX/tli9sVPAc= -Name: LICENSES/MIT.txt +Name: fp_config/schema/groups-schema.json Digest-Algorithms: SHA1 SHA256 -SHA1-Digest: wJVbU1Gx3K/dC5uy1+hP4OPXMco= -SHA256-Digest: y1rtspbFJG0fIukJn5JaZRRvnw1rTuu6l/0nps27qy0= +SHA1-Digest: cRyyq4R4rb0S9acniPSio9N9IVc= +SHA256-Digest: Pppil6fKHlXc6ODUeqacNR6ECGrFnLt7zPZ2aAzdmR8= -Name: LICENSES/CC-BY-4.0.txt +Name: fp_config/schema/wrappers-schema.json Digest-Algorithms: SHA1 SHA256 -SHA1-Digest: QtZJTVExeCZ4ncIGTGRA8NREg3Y= -SHA256-Digest: 1VdTnfaOdxzB7tzJHRP3D8qTDlCNEe7cr6SxXbSeN0Q= +SHA1-Digest: sT48AMsi88DRPJXIN+KMG5G9B7o= +SHA256-Digest: s5Znx+0YIoLeF6kaZUiIKx3ULTsIsnyO4yjGQHxDZos= -Name: LICENSES/GFDL-1.3-no-invariants-or-later.txt +Name: _locales/en/messages.json Digest-Algorithms: SHA1 SHA256 -SHA1-Digest: n0tOh7YGx5Xi/xJlIv7CVUb7M18= -SHA256-Digest: 0CSWLx9JZsECtA2f2cyDSj8LPBOXtBREt815JWQNySk= +SHA1-Digest: eqI/z1pljoBYwj+K85yUwQ3haE0= +SHA256-Digest: 3FegKBCH6v567F6UQGMvI12POS9KZPsh60KABPmarfE= -Name: LICENSES/GPL-3.0-or-later.txt +Name: _locales/pt_BR/messages.json Digest-Algorithms: SHA1 SHA256 -SHA1-Digest: MaPUYLs8fZiEUYfHFqMNuBxEthU= -SHA256-Digest: OXLcl0T2SZ8Pmy2/dmlvKuetivmyPd5m1q+Gyd+zaYY= +SHA1-Digest: zHILGsJQ8c2OD4WtF2MDbpHe5w4= +SHA256-Digest: 5IgvFyxQQ/Y4VENI4zlpwYn7zsTBpMYjUaNOJPSXUWY= + +Name: _locales/fr/messages.json +Digest-Algorithms: SHA1 SHA256 +SHA1-Digest: FLMqd0ViUyp1nei/LDAtDZdFDk8= +SHA256-Digest: dwGtlxxiw2k1RQV+tWBqDjWKIbRmEZs7UvX9w1SeK3Y= Name: _locales/cs/messages.json Digest-Algorithms: SHA1 SHA256 -SHA1-Digest: AyqZE3w++g18Mp9F27Yv/X5n61k= -SHA256-Digest: FIxc3sULO9lj2lzY55L3yPUDWBHXaCUwDjgjTdG1FAg= +SHA1-Digest: gPmRzVPX4sUpJVNUBxRthptQuIU= +SHA256-Digest: cYzSTVVKX2NRGeCGSPzlvYy/IGYvy9SSQZHyKTc9j7U= -Name: _locales/en/messages.json.orig +Name: _locales/ru/messages.json Digest-Algorithms: SHA1 SHA256 -SHA1-Digest: 4GExDPS23y1B9M6Ji5p6iBCHNVI= -SHA256-Digest: E6bnyhTtjMElZUthi14jPRdw1yAT/5iJqgCIYlGXwkc= +SHA1-Digest: fuoMpYQ7p1TlmdvAkVIpRuBusCg= +SHA256-Digest: eISVQf1mW8BCr01+97mpnFU5IDZbpFJj+koRA0C/sfA= -Name: _locales/en/messages.json +Name: _locales/pl/messages.json Digest-Algorithms: SHA1 SHA256 -SHA1-Digest: QMrr7eW6idQBrOYSMZEinsq0GxI= -SHA256-Digest: X8r7kNxmWcS+XFqgHoIj/MGw93Qw4CLmEeAO2TL2fPY= +SHA1-Digest: iQohMk3v0v9Kz0uE/YTWC40QukM= +SHA256-Digest: US4aQ5Kx4clO+4JVLrN8TD90lh/WODZNm76qFWKqiDI= -Name: _locales/ru/messages.json +Name: _locales/fi/messages.json Digest-Algorithms: SHA1 SHA256 -SHA1-Digest: 3mPddvE1svUKtmcOqf4WA46ywps= -SHA256-Digest: mfbjm9n+t17TGBGpSie+n7BzD1iku+HrzdMbmvONltM= +SHA1-Digest: B4ZRnJ/aDP1uRwsEcuGmim5PhQc= +SHA256-Digest: /t84+mxYSVUlbPsgNQi5bNNifXo4/8bXZHGI9xBp7iI= -Name: nscl/lib/browser-polyfill.js +Name: nscl/common/CachedStorage.js +Digest-Algorithms: SHA1 SHA256 +SHA1-Digest: PyKWB74AhdYufTt5ycFH5oxNwG4= +SHA256-Digest: hzV03Ki6oMod8uqM0YTbZuUmxbG/SU4uGxQtWGR6f4E= + +Name: nscl/common/sha256.js Digest-Algorithms: SHA1 SHA256 -SHA1-Digest: gPWs1xqvohruHLnXqhyzQyAvg24= -SHA256-Digest: VEmOeKUOaZ0Zo2iiAxvFWOUrl8K5EImAdAGQpoC/bXw= +SHA1-Digest: Mc6KpU114RI0vBf8fgeOpvd4NQs= +SHA256-Digest: P+mIm+OaI9QNrtKR0hUC/tuHcGzs3NmuAxVmk2yafGQ= + +Name: nscl/common/log.js +Digest-Algorithms: SHA1 SHA256 +SHA1-Digest: MTDbdNJVuKNYF3U+zHB3o4Mk4Ek= +SHA256-Digest: htnNTrimeTxwO+cudrIpbiTY66WV5MMWVJ8fTdBh5tY= + +Name: nscl/common/SyncMessage.js +Digest-Algorithms: SHA1 SHA256 +SHA1-Digest: mYlOq9QU3Yb49a2wiRdgn1rqlmc= +SHA256-Digest: m8fTTGTOSfadn+llZfXiyKB94oDKe4dQQZ3RFtNAtvQ= + +Name: nscl/common/tld.js +Digest-Algorithms: SHA1 SHA256 +SHA1-Digest: FKnzjnnzBtIDYwx8AynXGvXV3e0= +SHA256-Digest: qhNoQKpsCIxxM7axO1AFU5LLuTbpJsBDGoigUCng+J0= + +Name: nscl/common/uuid.js +Digest-Algorithms: SHA1 SHA256 +SHA1-Digest: EotG41puoKWqhp2Ph4mL5WSJ37w= +SHA256-Digest: jeVLN3a6Rk9X1gabGoRfZS/Nu81YXrnQP6Po5NeCtOI= + +Name: nscl/common/SyncMessage/request.json +Digest-Algorithms: SHA1 SHA256 +SHA1-Digest: +YUS2vR4q7BmdNVG7CJU8fm5ApU= +SHA256-Digest: yKfL7lJsE09cOIGGpA1peFWFMT29NrOuvF4KhDqV3jU= + +Name: nscl/common/SyncMessage/response.json +Digest-Algorithms: SHA1 SHA256 +SHA1-Digest: w9zbLomHb3KI23r5hYrPiEqsKu4= +SHA256-Digest: QrSvFDgPxoWZjYq0w4ZgWS2/FR1cRwry2F2XP47TOYM= Name: nscl/content/patchWindow.js Digest-Algorithms: SHA1 SHA256 -SHA1-Digest: KnWXEDAsK0gT/Lbm+hVpZG31dzc= -SHA256-Digest: j9nOCk+rDV2oGA9wx/3dGh/T4+ASjR0alQg92QqmsU8= +SHA1-Digest: t94zb3UniPQu9E7ofb8oZc099mM= +SHA256-Digest: Vk8P92hGntF0hhog4I206McLd++Ezzk9ZvAFvpQwtpw= + +Name: nscl/lib/browser-polyfill.js +Digest-Algorithms: SHA1 SHA256 +SHA1-Digest: zfSg4LFfyXjg9QtA5oEt4rX1+GQ= +SHA256-Digest: kKI8ay2xqAigQmfqwvQg6QVN7FWzDy4x6kdEsIo1T3g= Name: nscl/service/TabCache.js Digest-Algorithms: SHA1 SHA256 -SHA1-Digest: JtBhoAqkmlvTh5Aw6U5r9FR+KFg= -SHA256-Digest: MZ8twBoQTr7T1cEM1Bj1FcTtwIU6i8NSFt8XnQaP1cM= +SHA1-Digest: FVNJpilxvd/8A+bhZCn4x9y2muM= +SHA256-Digest: SGE86goASUOVlUhp+hMzj8iddsdSnFLleQ3SqKD0USk= + +Name: nscl/service/DocStartInjection.js +Digest-Algorithms: SHA1 SHA256 +SHA1-Digest: //Lw2v3Kp4QNQ6YeO/DStD5UAxg= +SHA256-Digest: +8bxKKUlAiJtdnHec3V5vBXvzWQ25RQf2UUFj96bK4c= Name: nscl/service/NavCache.js Digest-Algorithms: SHA1 SHA256 -SHA1-Digest: OfR7FXA/hwGI+OO8KAuCbI/fVlY= -SHA256-Digest: fa+mjXlWEkGVEhA8rV2sNhaFGMf0ZWImlWliwv/q2g8= +SHA1-Digest: YXNaV4J+JCgBLI/Ivvypi8p6a6w= +SHA256-Digest: Wam1X7hpjMAmxnwEZXWypa2qz4QiHMXwc/Zkec6U3Ec= -Name: nscl/service/DocStartInjection.js +Name: LICENSES/CC-BY-4.0.txt Digest-Algorithms: SHA1 SHA256 -SHA1-Digest: HP5OH9pLtF/RsTaeg0pGUhdoaYI= -SHA256-Digest: icPil/yxMbonPgK9YRb/H/nKX+JPg4QOfBrewe96O2Y= +SHA1-Digest: QtZJTVExeCZ4ncIGTGRA8NREg3Y= +SHA256-Digest: 1VdTnfaOdxzB7tzJHRP3D8qTDlCNEe7cr6SxXbSeN0Q= -Name: nscl/common/SyncMessage.js +Name: LICENSES/MPL-2.0.txt Digest-Algorithms: SHA1 SHA256 -SHA1-Digest: UITULazzRhuYeYaaQdJokqTn3m0= -SHA256-Digest: LFbpi3YajTjh0D5cK5zUI1LXBM4glu5lFgy6EIi5GRg= +SHA1-Digest: 1+PtWsFJrB4tLg9Nr/CBwdr+8cA= +SHA256-Digest: Pz2eACSxkhsGfW9/iN60pgy+enjnbGTj8df8O3ebnQQ= -Name: nscl/common/log.js +Name: LICENSES/CC0-1.0.txt Digest-Algorithms: SHA1 SHA256 -SHA1-Digest: D6WyYmDlHZJ5HtwvPjLmLvXKcUY= -SHA256-Digest: FrwKTjORt5vnRGS6xNi23iMo74ilmDTSsEhev/LTfys= +SHA1-Digest: gtpHL20A3F8KZR8z67Mgqpx7CNA= +SHA256-Digest: ogEPNDSH0/dhiv/lT3ifVIdgIzHAqNA/SemnxUfPBJk= -Name: nscl/common/sha256.js +Name: LICENSES/GFDL-1.3-no-invariants-or-later.txt Digest-Algorithms: SHA1 SHA256 -SHA1-Digest: oopweeRH4mcoo2oeUIHrklNFClg= -SHA256-Digest: yoQJd/4X8OR+6Tod9zGoeS6QobcjrFZOVKB+iBFSWGs= +SHA1-Digest: n0tOh7YGx5Xi/xJlIv7CVUb7M18= +SHA256-Digest: 0CSWLx9JZsECtA2f2cyDSj8LPBOXtBREt815JWQNySk= -Name: nscl/common/tld.js +Name: LICENSES/GPL-3.0-or-later.txt Digest-Algorithms: SHA1 SHA256 -SHA1-Digest: T3FaiCmtCaHHWaTsF+cdVvw0w9k= -SHA256-Digest: fVcxBzBcXM7kuLdKLbh30ezwRPPvuyBHD0YUxZrR0sc= +SHA1-Digest: MaPUYLs8fZiEUYfHFqMNuBxEthU= +SHA256-Digest: OXLcl0T2SZ8Pmy2/dmlvKuetivmyPd5m1q+Gyd+zaYY= -Name: nscl/common/uuid.js +Name: LICENSES/CC-BY-ND-4.0.txt +Digest-Algorithms: SHA1 SHA256 +SHA1-Digest: qubAfBNgLC6jZ29X/XVKrC8laqg= +SHA256-Digest: Sp1GXpga5r3n8Rerv7DiTyzBgg6ZpH775YWT+lxD+ik= + +Name: LICENSES/MIT.txt Digest-Algorithms: SHA1 SHA256 -SHA1-Digest: xCfJkXi5oNJtmym2RiiXKNaGJhs= -SHA256-Digest: vlK2vGRJoOGxrKrpfRa90v8E2qbEJqRWSOzdDcZYRNw= +SHA1-Digest: wJVbU1Gx3K/dC5uy1+hP4OPXMco= +SHA256-Digest: y1rtspbFJG0fIukJn5JaZRRvnw1rTuu6l/0nps27qy0= Name: META-INF/cose.manifest Digest-Algorithms: SHA1 SHA256 -SHA1-Digest: fkCsabpO3J99KI87wZSkQ0zrsbg= -SHA256-Digest: zvN1cqR+idk/mM2HXlYS1IL1dAeESPO0Lnmj8a3z83Q= +SHA1-Digest: +WihLUXUaQkfBO/uQigia67P4d0= +SHA256-Digest: Y9CWj7I7ME6qekQoNsPqdo85k/womSlOLRitEW05M/M= Name: META-INF/cose.sig Digest-Algorithms: SHA1 SHA256 -SHA1-Digest: /1RK2Wir8RvC2WuwIhOuXSjvP2Q= -SHA256-Digest: 3Ls4h3Oe+K6AHeqAFeWgSnnaCMWJnEO5ghfFh9FqVbA= +SHA1-Digest: M977i49TmTelSIEDfhvGuTG52aM= +SHA256-Digest: BW0NK3lZmos/PR0pYI1y1uTcWjklC+h+ww7zYVN2aWU= diff --git a/data/extensions/jsr@javascriptrestrictor/META-INF/mozilla.rsa b/data/extensions/jsr@javascriptrestrictor/META-INF/mozilla.rsa Binary files differindex ceb21ca..c4332cf 100644 --- a/data/extensions/jsr@javascriptrestrictor/META-INF/mozilla.rsa +++ b/data/extensions/jsr@javascriptrestrictor/META-INF/mozilla.rsa diff --git a/data/extensions/jsr@javascriptrestrictor/META-INF/mozilla.sf b/data/extensions/jsr@javascriptrestrictor/META-INF/mozilla.sf index 139b483..c613fc7 100644 --- a/data/extensions/jsr@javascriptrestrictor/META-INF/mozilla.sf +++ b/data/extensions/jsr@javascriptrestrictor/META-INF/mozilla.sf @@ -1,4 +1,4 @@ Signature-Version: 1.0 -SHA1-Digest-Manifest: 7cmAiM2Q5qTtV8F05wzmhVihONk= -SHA256-Digest-Manifest: zEeHAtzXJy5SljVWYpNHSRExgKwM4wlUCgLKBYcU4h4= +SHA1-Digest-Manifest: NjfJ3yXis+3Nqzofzq+uLs+2oUo= +SHA256-Digest-Manifest: l7ZLRFFf7TfzsPPsdOuyQfKvgqN3N+fddTLH+zEBw2U= diff --git a/data/extensions/jsr@javascriptrestrictor/_locales/cs/messages.json b/data/extensions/jsr@javascriptrestrictor/_locales/cs/messages.json index c22bd59..d43f800 100644 --- a/data/extensions/jsr@javascriptrestrictor/_locales/cs/messages.json +++ b/data/extensions/jsr@javascriptrestrictor/_locales/cs/messages.json @@ -73,7 +73,7 @@ "description": "Column headding in the popup detailed JSS shield" }, "FingerprintQualityLabel": { - "message": "⤷ Počet API zneužívaných pro tvorbu otisku prohlížeče volaných stránkou: ", + "message": "⤷ Počet API zneužitelných pro tvorbu otisku prohlížeče volaných stránkou: ", "description": "This text is displayed in the popup as additional information from FPD" }, "popupDefaultLevelHelpText": { @@ -1158,7 +1158,7 @@ "description": "Paragraph 1, please translate this text, keep the URLs or replace them to a translated version of the targets." }, "paragraph2": { - "content": "Obvykle byste měli nechat Štít pro ochranu hranice sítě vyhledávat podezřelé požadavky v celém provozu. Ale některé stránky vyžadují interakci mezi veřejným Internetem a lokální sítí, např. Štít pro ochranu hranice sítě může rozbít některé Intranetové informační systémy. Uživatelé JShelteru také nahlásili zvýšené množství falešných poplachů v kombinací s filtrovacími programy modifikujícími odpovědi DNS. Pokud takový program používáte, ujistěte se, že DNS vrací 0.0.0.0 pro blokované domény.", + "content": "Obvykle byste měli nechat Štít pro ochranu hranice sítě vyhledávat podezřelé požadavky v celém provozu. Ale některé stránky vyžadují interakci mezi veřejným Internetem a lokální sítí, např. Štít pro ochranu hranice sítě může rozbít některé Intranetové informační systémy. Uživatelé JShelteru také nahlásili zvýšené množství falešných poplachů v kombinací s filtrovacími programy modifikujícími odpovědi DNS. Pokud takový program používáte, ujistěte se, že DNS vrací 0.0.0.0 pro blokované domény.", "description": "Paragraph 2, please translate this text." }, "paragraph3": { @@ -1321,6 +1321,41 @@ } }, + "MV3DevmodeRequired": { + "message": "Kvůli omezením způsobených <a href=\"$MV3URL$\" target=\"_blank\">Googlím Manifestem V3</a> nemůže JShelter a další rozšíření prohlížeče pracovat správně v prohlížečích založených na Chromiu (včetně vašeho prohlížeče) než zapnete <em>režim pro vývojáře</em> na stránce <strong>chrome://extensions</strong> (<a href=\"$INFOURL$\" target=\"_blank\">více informací o tomto režimu na stránkách Google pro vývojáře</a>).", + "placeholders": { + "mv3url": { + "content": "https://jshelter.org/mv3/" + }, + "infourl": { + "content": "https://developer.chrome.com/docs/extensions/reference/api/userScripts#chrome_versions_prior_to_138_developer_mode_toggle" + } + }, + "description": "This message is displayed as an alert in popup and options when development mode is disabled. Make sure that you keep correct HTML markup" + }, + "MV3AllowUserScriptsRequired": { + "message": "Kvůli omezením způsobených <a href=\"$MV3URL$\" target=\"_blank\">Googlím Manifestem V3</a> nemůže JShelter a další rozšíření prohlížeče pracovat správně v prohlížečích založených na Chromiu (včetně vašeho prohlížeče) než zapnete <em>uživatelské skripty</em> na stránce JShelteru dostupné z <strong>chrome://extensions</strong> (<a href=\"$INFOURL$\" target=\"_blank\">více informací o tomto režimu na stránkách Google pro vývojáře</a>).", + "placeholders": { + "mv3url": { + "content": "https://jshelter.org/mv3/" + }, + "infourl": { + "content": "https://developer.chrome.com/docs/extensions/reference/api/userScripts#chrome_versions_138_and_newer_allow_user_scripts_toggle" + } + }, + "description": "This message is displayed as an alert in popup and options when development mode is disabled. Make sure that you keep correct HTML markup" + }, + + "MV3BrokenFeatures": { + "message": "Kvůli omezením způsobených <a href=\"$MV3URL$\" target=\"_blank\">Googlím Manifestem V3</a> nejsou dostupné některé části JShelteru (např. Štít pro ochranu hranice sítě a Detektor získávání otisku prohlížeče v blokujícím režimu) v nejnovějších prohlížečích založených na Chromiu (včetně vašeho), některé části JShelteru mohou pracovat s nižší spolehlivostí než dříve a než stále pracují ve Firefoxu.", + "placeholders": { + "mv3url": { + "content": "https://jshelter.org/mv3/" + } + }, + "description": "This message is displayed as an alert near features broken by Manifest V3. Make sure that you keep correct HTML markup" + }, + "FPDDescription": { "message": "<p>$PARAGRAPH1$</p><p>$PARAGRAPH2$</p><p>$PARAGRAPH3$</p>", "description": "This is the description of FPDBS shown in options. Please do not modify the template string in the message but translate the paragraphs in the placeholders section. If you find necessary, you can remove or add paragraphs.", @@ -1449,7 +1484,7 @@ "description": "Text shown in options during configuaration of the parameters of FPD" }, "FPDSeverityNone": { - "message": "Žádný", + "message": "Žádné nebo zanedbatelné", "description": "The level of the number of detected APIs misusable for fingerprinting" }, "FPDSeverityLow": { diff --git a/data/extensions/jsr@javascriptrestrictor/_locales/en/messages.json b/data/extensions/jsr@javascriptrestrictor/_locales/en/messages.json index a76af1a..f5e7922 100644 --- a/data/extensions/jsr@javascriptrestrictor/_locales/en/messages.json +++ b/data/extensions/jsr@javascriptrestrictor/_locales/en/messages.json @@ -73,7 +73,7 @@ "description": "Column headding in the popup detailed JSS shield" }, "FingerprintQualityLabel": { - "message": "⤷ The number of APIs misused for fingerprinting called by the page: ", + "message": "⤷ The number of APIs misusable for fingerprinting called by the page: ", "description": "This text is displayed in the popup as additional information from FPD" }, "popupDefaultLevelHelpText": { @@ -1324,6 +1324,41 @@ } }, + "MV3DevmodeRequired": { + "message": "Due to severe limitations imposed by <a href=\"$MV3URL$\" target=\"_blank\">Google's Manifest V3</a>, JShelter and other browser extensions cannot work anymore on Chromium-based browsers (including yours) unless you switch on the <em>Developer mode</em> in <strong>chrome://extensions</strong> (<a href=\"$INFOURL$\" target=\"_blank\">more information on Google's developers site</a>).", + "placeholders": { + "mv3url": { + "content": "https://jshelter.org/mv3/" + }, + "infourl": { + "content": "https://developer.chrome.com/docs/extensions/reference/api/userScripts#chrome_versions_prior_to_138_developer_mode_toggle" + } + }, + "description": "This message is displayed as an alert in popup and options when development mode is disabled. Make sure that you keep correct HTML markup" + }, + "MV3AllowUserScriptsRequired": { + "message": "Due to severe limitations imposed by <a href=\"$MV3URL$\" target=\"_blank\">Google's Manifest V3</a>, JShelter and other browser extensions cannot work anymore on Chromium-based browsers (including yours) unless you switch on the <em>Allow User Scripts</em> toggle on the JShelter page accessible from <strong>chrome://extensions</strong> (<a href=\"$INFOURL$\" target=\"_blank\">more information on Google's developers site</a>).", + "placeholders": { + "mv3url": { + "content": "https://jshelter.org/mv3/" + }, + "infourl": { + "content": "https://developer.chrome.com/docs/extensions/reference/api/userScripts#chrome_versions_138_and_newer_allow_user_scripts_toggle" + } + }, + "description": "This message is displayed as an alert in popup and options when development mode is disabled. Make sure that you keep correct HTML markup" + }, + + "MV3BrokenFeatures": { + "message": "Due to severe limitations imposed by <a href=\"$MV3URL$\" target=\"_blank\">Google's Manifest V3</a>, some JShelter features (e.g. Network Boundary Shield and Fingerprinting Detection in Blocking Mode) won't work on recent Chromium-based browsers (including yours), and other ones might be less reliable than they were in the past and still are on Firefox.", + "placeholders": { + "mv3url": { + "content": "https://jshelter.org/mv3/" + } + }, + "description": "This message is displayed as an alert near features broken by Manifest V3. Make sure that you keep correct HTML markup" + }, + "FPDDescription": { "message": "<p>$PARAGRAPH1$</p><p>$PARAGRAPH2$</p><p>$PARAGRAPH3$</p>", "description": "This is the description of FPD shown in options. Please do not modify the template string in the message but translate the paragraphs in the placeholders section. If you find necessary, you can remove or add paragraphs.", @@ -1452,7 +1487,7 @@ "description": "Text shown in options during configuaration of the parameters of FPD" }, "FPDSeverityNone": { - "message": "None", + "message": "None or negligible", "description": "The level of the number of detected APIs misusable for fingerprinting" }, "FPDSeverityLow": { diff --git a/data/extensions/jsr@javascriptrestrictor/_locales/fi/messages.json b/data/extensions/jsr@javascriptrestrictor/_locales/fi/messages.json new file mode 100644 index 0000000..0274a43 --- /dev/null +++ b/data/extensions/jsr@javascriptrestrictor/_locales/fi/messages.json @@ -0,0 +1,356 @@ +{ + "extensionName": { + "message": "JShelter", + "description": "Name of the extension. Please, do not translate unless properly justified." + }, + "extensionDescription": { + "message": "Laajennus käyttäjän turvallisuuden ja yksityisyyden tason lisäämiseksi.", + "description": "Description of the extension." + }, + "javascriptShield": { + "message": "JavaScript Shield -kilpi", + "description": "The name of the JavaScript Shield displayed at multiple places" + }, + "networkBoundaryShield": { + "message": "Verkkorajakilpi" + }, + "NBSgloballyOff": { + "message": "Verkkorajakilpi on laajamittaisesti poistettu käytöstä" + }, + "fingerprintDetector": { + "message": "Sormenjälkitunnistin" + }, + "FPDgloballyOff": { + "message": "Sormenjälkitunnistin on laajamittaisesti poistettu käytöstä" + }, + "JSSLexperimentalDescription": { + "message": "Tiukat suojaukset lisäkääreillä (mukaan lukien API:t, joiden tiedetään rikkovan säännöllisesti verkkosivuja, ja API:t, jotka eivät toimi täydellisesti). Käytä tätä tasoa, jos haluat kokeilla JShelteriä. Käytä Suositeltu- tai Tiukka-tasoa aktiivisen Sormenjälkitunnistimen kanssa säännöllisiin toimintoihisi." + }, + "NBSBlockedTitle": { + "message": "Verkkorajakilpi esti epäilyttävät pyynnöt!" + }, + "NBSDetectedTitle": { + "message": "Verkkorajakilpi havaitsi epäilyttäviä pyyntöjä!" + }, + "NBSBlockedHostTitle": { + "message": "Verkkorajakilpi esti isännän!" + }, + "NBSDetectedHostTitle": { + "message": "Verkkorajakilpi havaitsi epäilyttävän isännän!" + }, + "FPDReportTitle": { + "message": "Sormenjälkitunnistimen raportti" + }, + "FPDReportDescriptionPara1": { + "message": "Tämä raportti luettelee kaikki JavaScript API -päätepisteet, joihin verkkosivu on päässyt ja joita pidetään selaimen sormenjälkien määrittämisen kannalta olennaisina. Sormenjälkitunnistin käyttää näitä tietoja päättääkseen, kerääkö sivu selaimen sormenjälkeä." + }, + "NBSHttpProxyDNSAPINote": { + "message": "Jos käytät HTTP-välityspalvelinta, Verkkorajakilpi suojaa välityspalvelimen paikallista verkkoa verkkosi sijaan, koska välityspalvelin suorittaa HTTP-pyynnöt kohteisiin. Estääkseen tästä tietokoneesta aloitettujen kyselyjesi DNS-vuodot Verkkorajakilpi ei ratkaise DNS-alueita havaitakseen mahdollisia verkkojen välisiä rajoja koskevia pyyntöjä. Verkkorajakilpi kuitenkin suojaa välityspalvelimen paikallista verkkoa suoraan upotetuille IP-osoitteille. Näin ollen Verkkorajakilpi suojaa välityspalvelimen paikallista verkkoa vain osittain." + }, + "jssgroupXMLHttpRequestRequestsDescription2": { + "message": "Huomaa, että XHR-pyyntöjä käytetään laajalti hyvänlaatuisiin tarkoituksiin ja että $apis$ ei ole estetty. Kaikki tarjoavat samanlaisia ja jotkut jopa parempia viestintätapoja palvelimien kanssa. Käytännön käyttöä varten suosittelemme aktivoimaan Sormenjälkitunnistimen XHR-kääreiden sijaan. JShelter säilyttää kääreen, koska se on hyödyllinen joillekin käyttäjille lähinnä kokeellisissa toimissa.", + "placeholders": { + "apis": { + "content": "Fetch-, SSE-, WebRTC- ja WebSockets-sovellusliittymät" + } + } + }, + "JSSL3Description": { + "message": "Ota koko ei-kokeellinen suojaus käyttöön. Käärityt API:t palauttavat vääriä arvoja. Jotkut sovellusliittymät on estetty kokonaan, kun taas toiset tarjoavat merkityksellisiä mutta harvinaisia arvoja. Jotkut palauttavat merkityksettömiä arvoja. Tämä taso tekee sinusta sormenjäljen ottamisen altis koska API-kutsujen tuloksia muutetaan yleensä samalla tavalla kaikilla verkkosivustoilla ja jokaisessa istunnossa. Käytä tätä tasoa, jos haluat rajoittaa selaimesi tarjoamia tietoja. Jos olet huolissasi sormenjäljeistä, varmista, että Sormenjälkitunnistin on aktivoitu." + }, + "JSSL1Description": { + "message": "Käytä turvatoimia, jotka eivät todennäköisesti riko verkkosivuja, mutta eivät suojaa sormenjälkiä vastaan. Poista käytöstä API:t, joita ei käytetä yleisesti. Käytä tätä tasoa, jos Sormenjälkitunnistin ilmoittaa, että sivu kutsui vähän sovellusliittymiä, joita on käytetty väärin sormenjälkien ottamiseen, luotat vierailltuun palveluun ja/tai uskot, että suojaus hidastaa tai rikkoo sivua ja kiusaus käyttää palvelua on niin suuri, että et halua tulla suojatuksi." + }, + "globalSettings": { + "message": "Yleisesti pätevät asetukset" + }, + "settingsForDomain": { + "message": "Asetukset toimialueelle" + }, + "refreshPage": { + "message": "Virkistä sivu" + }, + "modifyJSSPopup": { + "message": "Muokkaa" + }, + "descriptionMore": { + "message": "(enemmän…)" + }, + "descriptionLess": { + "message": "(vähemmän…)" + }, + "wrappers": { + "message": "API-ryhmät" + }, + "levelOfDefense": { + "message": "Puolustustason" + }, + "numberOfCalls": { + "message": "Kutsuiden määrä" + }, + "FingerprintQualityLabel": { + "message": "⤷ Sivun kutsumien sormenjälkien ottamiseen väärin käytettyjen sovellusliittymien määrä: " + }, + "popupDefaultLevelHelpText": { + "message": "Aseta yleisesti pätevä oletustaso JavaScript Shield -tasoksi tälle sivulle." + }, + "defaultLevelSelection": { + "message": "Oletustaso ($levelName$)", + "description": "This text is displayed as the default level in the popup", + "placeholders": { + "levelName": { + "content": "$1" + } + } + }, + "ShieldOffSlider": { + "message": "Pois päältä" + }, + "ShieldOnSlider": { + "message": "Päälle" + }, + "jssgroupUnprotected": { + "message": "Suojaamaton" + }, + "jssgroupPoor": { + "message": "Heikko" + }, + "jssgroupLow": { + "message": "Matala" + }, + "jssgroupMedium": { + "message": "Keskitaso" + }, + "jssgroupHigh": { + "message": "Korkea" + }, + "jssgroupLittleLies": { + "message": "Pieniä valheita" + }, + "jssgroupStrict": { + "message": "Tiukka" + }, + "jssgroupConfuse": { + "message": "Sekava" + }, + "jssgroupAddFake": { + "message": "Lisää väärennös" + }, + "jssgroupAsk": { + "message": "Kysy" + }, + "jssgroupFake": { + "message": "Väärennetty" + }, + "jssgroupBlock": { + "message": "Estä" + }, + "jssgroupRemove": { + "message": "Poista" + }, + "jssgroupTimePrecision": { + "message": "Ajan tarkkuus" + }, + "jssgroupTimePrecisionDescription": { + "message": "Estä hyökkäykset ja sormenjälkien ottotekniikat tarkan ajanmittauksen avulla (tai vaikeuta niitä)." + }, + "jssgroupLocallyRenderedImagesLittleLiesDescription": { + "message": "Tee pieniä muutoksia kuvatietojen lukemiseen, jotta kuvat näyttävät samalta, mutta tarkat arvot vaihtelevat vieraillun verkkotunnuksen ja istuntojen mukaan. Tavoitteena on estää Canvas-sormenjälkien otto tai ainakin vaikeuttaa sitä." + }, + "nameDescriptionSeparator": { + "message": " — " + }, + "detailTweaksOfJSShieldForThisSite": { + "message": "JS-suojan yksityiskohtaiset säädöt tälle sivustolle" + }, + "jssgroupTimePrecisionDescription2": { + "message": "Rajoita korkearesoluutioisten aikaleimojen tarkkuutta $apis$. Geolocation API:n tarjoamat aikaleimat myös kääritään, jos otat \"$jssgroupPhysicalLocationGeolocation$\" -suojauksen käyttöön.", + "placeholders": { + "apis": { + "content": "(Päivämäärä, suorituskyky, tapahtumat, Gamepad API ja Web VR API)" + }, + "jssgroupPhysicalLocationGeolocation": { + "content": "$1", + "description": "Translated version of the jssgroupPhysicalLocationGeolocation string" + } + } + }, + "jssgroupTimePoorDescription": { + "message": "Pyöristysaika sekunnin sadasosaan (1,230)" + }, + "jssgroupTimeLowDescription": { + "message": "Pyöröaika sekunnin kymmenesosaan (1,200)" + }, + "jssgroupTimeHighDescription": { + "message": "Satunnaista desimaaliluvut kohinalla (1,451)" + }, + "jssgroupLocallyRenderedImages": { + "message": "Paikallisesti hahmonnetut kuvat" + }, + "jssgroupLocallyRenderedImagesDescription": { + "message": "Suojaa kankaan sormenjälkien ottamista tai näytönohjaimen hahmonnointi-kykyjen tietojen vuotamista vastaan." + }, + "jssgroupLocallyRenderedImagesDescription2": { + "message": "Funktiot $apis$ palauttavat muokattuja kuvatietoja.", + "placeholders": { + "apis": { + "content": "canvas.toDataURL(), canvas.toBlob(), CanvasRenderingContext2D.getImageData(), OffscreenCanvas.convertToBlob() ja WebGLRenderingContext.readPixels" + } + } + }, + "jssgroupLocallyRenderedImagesDescription3": { + "message": "$apis$ on muokattu valehtelemaan todennäköisyydellä.", + "placeholders": { + "apis": { + "content": "CanvasRenderingContext2D.isPointInStroke() ja CanvasRenderingContext2D.isPointInPath()" + } + } + }, + "jssgroupLocallyRenderedImagesStrictDescription": { + "message": "Lue valkoisia kuvia (WebGL-kankaalta lue tyhjä taulukko). Tämä vaihtoehto ei suojaa Canvas-sormenjälkien otolta." + }, + "jssgroupLocallyGeneratedAudio": { + "message": "Paikallisesti luotu ääni" + }, + "jssgroupLocallyGeneratedAudioDescription": { + "message": "Suojaa tietovuodosta vastaan äänikortin hahmonnointikyvyksistä, joita voidaan käyttää, esimerkiksi äänen sormenjälkien ottamiseen." + }, + "jssgroupLocallyGeneratedAudioDescription2": { + "message": "Funktiot $apis$ palauttavat muokattuja tietoja.", + "placeholders": { + "apis": { + "content": "AudioBuffer.getChannelData(), AudioBuffer.copyFromChannel(), AnalyserNode.getByteTimeDomainData(), AnalyserNode.getFloatTimeDomainData(), AnalyserNode.getByteFrequencyData() ja AnalyserNode.getFloat()FrequencyData" + } + } + }, + "jssgroupLocallyGeneratedAudioLittleLiesDescription": { + "message": "Lisää pieni amplitudikohina niin, että ääni on samanlainen kuin ihmisen alkuperäinen ääni. Tarkat arvot vaihtelevat vieraillun verkkotunnuksen ja istuntojen mukaan. Tavoitteena on estää äänen sormenjälkien otto tai ainakin vaikeuttaa sitä." + }, + "jssgroupLocallyGeneratedAudioStrictDescription": { + "message": "Äänitiedot korvataan valkoisella kohinalla, joka vaihtelee vieraillun verkkotunnuksen mukaan ja istuntojen välillä. Tavoitteena on rajoittaa äänilaitteiston vuotoja ja samalla tehdä äänen sormenjälkien ottamisesta vaikeampaa." + }, + "jssgroupGraphicCardInformation": { + "message": "Grafiikkakortin tiedot" + }, + "jssgroupGraphicCardInformationDescription": { + "message": "Huijaa näytönohjaimesi yksityistiedot, joita voidaan käyttää, esimerkiksi sormenjälkien ottamisen vaikeuttamiseksi." + }, + "jssgroupGraphicCardInformationDescription2": { + "message": "Funktio $api$ palauttaa tietyille parametreille muokattuja tai alimpia arvoja.", + "placeholders": { + "api": { + "content": "WebGLRenderingContext.getParameter()" + } + } + }, + "jssgroupGraphicCardInformationDescription3": { + "message": "$apis$ palauttaa muokattuja arvoja.", + "placeholders": { + "apis": { + "content": "WebGLRenderingContext-funktiot .getFramebufferAttachmentParameter(), .getActiveAttrib(), .getActiveUniform(), .getAttribLocation(), .getBufferParameter(), .getProgramParameter(), .getRenderbufferParameter(), .getRenderbufferParameter(), .getActiveAttrib(),PrecisionPargetShader. .getTexParameter(), .getUniformLocation(), .getVertexAttribOffset(), .getSupportedExtensions() ja .getExtension()" + } + } + }, + "jssgroupGraphicCardInformationLittleLiesDescription": { + "message": "Luo kohtuullisia lukuja tai satunnaisia merkkijonoja, jotka eroavat vieraillun verkkotunnuksen mukaan ja istuntojen välillä. Tavoitteena on rajoittaa näytönohjainten vuotoja ja samalla vaikeuttaa sormenjälkien ottamista." + }, + "jssgroupGraphicCardInformationStrictDescription": { + "message": "Palauttaa alimpia arvoja (nolla, tyhjät merkkijonot). Huomaa, että tämä asetus ei estä sormenjälkien ottoa." + }, + "jssgroupInstalledBrowserPlugins": { + "message": "Asennetut selain-liitännäiset" + }, + "jssgroupInstalledBrowserPluginsDescription": { + "message": "Suojaa liitännäissormenjälkien ottoa vastaan." + }, + "jssgroupInstalledBrowserPluginsDescription2": { + "message": "Suojausta ei sovelleta, jos selaimesi palauttaa tyhjän luettelon tai elävän HTML-standardin määrittämät viisi PDF-liitännäisten katseluohjelmaa. Siksi suojausta ei sovelleta nykyaikaisissa selaimissa." + }, + "jssgroupInstalledBrowserPluginsLittleLiesDescription": { + "message": "Muokkaa nykyisiä liitännäisiä ja lisää kaksi väärennettyä liitännäistä." + }, + "jssgroupInstalledBrowserPluginsFakeDescription": { + "message": "Palauta kaksi väärennettyä liitännäistä." + }, + "jssgroupInstalledBrowserPluginsStrictDescription": { + "message": "Piilota kaikki liitännäiset." + }, + "jssgroupConnectedCamerasAndMicrophones": { + "message": "Kytketyt kamerat ja mikrofonit" + }, + "jssgroupConnectedCamerasAndMicrophonesDescription": { + "message": "Estä sormenjälkien otto tietokoneeseen kytkettyjen multimedialaitteiden perusteella." + }, + "jssgroupConnectedCamerasAndMicrophonesDescription2": { + "message": "Funktiota $api$ on muokattu palauttamaan tyhjä tai muokattu tulos.", + "placeholders": { + "api": { + "content": "MediaDevices.enumerateDevices()", + "description": "Keep the names of the API" + } + } + }, + "jssgroupConnectedCamerasAndMicrophonesLittleLiesDescription": { + "message": "Satunnaistetaan laitteiden järjestys. Nykyiset laitteet eivät ole linkitettävissä eri verkkotunnuksissa ja istuntojen välillä." + }, + "jssgroupConnectedCamerasAndMicrophonesAddFakeDescription": { + "message": "Lisää 0–4 väärennettyä laittetta aseta niiden järjestys satunnaisesti. Nykyiset laitteet eivät ole linkitettävissä eri verkkotunnuksissa ja istuntojen välillä." + }, + "jssgroupConnectedCamerasAndMicrophonesStrictDescription": { + "message": "Palauta tyhjä laiteluettelo." + }, + "jssgroupHardware": { + "message": "Laitteen muisti ja keskusyksikkö" + }, + "jssgroupHardwareDescription": { + "message": "Huijaa laitteistotiedot RAM-muistin määrästä ja suorittimen lukumäärästä." + }, + "jssgroupHardwareDescription2": { + "message": "Getterit $apis$ palauttavat muokattuja arvoja.", + "placeholders": { + "apis": { + "content": "navigator.deviceMemory and navigator.hardwareConcurrency", + "description": "Keep the names of the APIs but translate the punctuation and conjunctions" + } + } + }, + "jssgroupHardwareLowDescription": { + "message": "Palauta satunnainen kelvollinen arvo vähimmäisarvon ja todellisen arvon välillä. Palautettu arvo vaihtelee vierailtujen verkkotunnusten mukaan ja istuntojen välillä." + }, + "jssgroupHardwareMediumDescription": { + "message": "Palauta satunnainen kelvollinen arvo vähimmäisarvon ja 8:n välillä. Palautettu arvo vaihtelee vierailtujen verkkotunnusten mukaan ja istuntojen välillä." + }, + "jssgroupHardwareHighDescription": { + "message": "Palauta \"4\" navigator.deviceMemory:lle ja \"2\" navigator.hardwareConcurrency:lle." + }, + "jssgroupNetworkConditions": { + "message": "Verkko-ehdot" + }, + "jssgroupNetworkConditionsDescription": { + "message": "Poista pääsy verkkotietoihin käytöstä rajoittaaksesi sormenjälkien ottoa ja poistaaksesi mahdollisuuden havainnoida kuvioita verkoissa, joihin on päästy, saadaksesi selville, onko käyttäjä kotona, töissä vai matkalla." + }, + "jssgroupNetworkConditionsRemoveDescription": { + "message": "Poista NetworkInformation API käytöstä" + }, + "jssgroupXMLHttpRequestRequests": { + "message": "XMLHttpRequest (XHR) -tiedonsiirrot" + }, + "jssgroupXMLHttpRequestRequestsDescription": { + "message": "Suodata luotettavat XHR-pyynnöt palvelimelle." + }, + "jssgroupXMLHttpRequestRequestsBlockDescription": { + "message": "Estä kaikki XHR-pyynnöt" + }, + "jssgroupArraysDescription": { + "message": "Suojaa ArrayBufferin hyödyntämistä vastaan, esimerkiksi estääksesi sivukanavahyökkäykset muistiasetteluun (tai vaikeuttavat niitä)." + }, + "jssgroupXMLHttpRequestRequestsAskDescription": { + "message": "Kysy ennen XHR-pyynnön suorittamista" + }, + "jssgroupSharedArraysBufferDescription": { + "message": "Suojaa SharedArrayBufferin hyödyntämistä vastaan, esimerkiksi estämään sivukanavahyökkäykset muistiasetteluun (tai vaikeuttamaan niitä)." + }, + "jssgroupWebWorkerDescription": { + "message": "Suojaa WebWorkerin hyödyntämistä vastaan" + } +} diff --git a/data/extensions/jsr@javascriptrestrictor/_locales/fr/messages.json b/data/extensions/jsr@javascriptrestrictor/_locales/fr/messages.json new file mode 100644 index 0000000..07821d6 --- /dev/null +++ b/data/extensions/jsr@javascriptrestrictor/_locales/fr/messages.json @@ -0,0 +1,403 @@ +{ + "extensionName": { + "message": "JShelter", + "description": "Name of the extension. Please, do not translate unless properly justified." + }, + "extensionDescription": { + "message": "Extension pour augmenter le niveau de sécurité et de confidentialité de l’utilisateur.", + "description": "Description of the extension." + }, + "descriptionMore": { + "message": "(plus...)", + "description": "Used for example in the popup in the description text of the currently applied level when JShelter gives user the option to get more information about the level." + }, + "jssgroupStrict": { + "message": "Strict", + "description": "Displayed during JSS level tweaking for several API groups" + }, + "jssgroupLow": { + "message": "Bas", + "description": "Displayed during JSS level tweaking for several API groups" + }, + "modifyJSSPopup": { + "message": "modifier", + "description": "The button in the popup that tweaks JSS" + }, + "jssgroupTimePrecision": { + "message": "Précision chronologique" + }, + "refreshPage": { + "message": "Actualiser la page", + "description": "The button in the popup that refreshes the currently displayed page" + }, + "jssgroupPoor": { + "message": "Pauvre", + "description": "Displayed during JSS level tweaking for several API groups" + }, + "networkBoundaryShield": { + "message": "Bouclier de limite de réseau", + "description": "The name of the Network Boundary Shield displayed at multiple places" + }, + "jssgroupMedium": { + "message": "Moyen", + "description": "Displayed during JSS level tweaking for several API groups" + }, + "fingerprintDetector": { + "message": "Détecteur de fingerprinting", + "description": "The name of the Fingerprint Detector displayed at multiple places" + }, + "globalSettings": { + "message": "Paramètres globaux", + "description": "The button in the popup that opens options page" + }, + "jssgroupAddFake": { + "message": "Ajouter un faux", + "description": "Displayed during JSS level tweaking for Connected cameras and microphones and possibly more (in the future)" + }, + "FPDgloballyOff": { + "message": "Détecteur de fingerprinting est globalement désactivé", + "description": "Informs the user that FPD is globally disabled, displayed e.g. in popup" + }, + "numberOfCalls": { + "message": "nombre d'appels", + "description": "Column headding in the popup detailed JSS shield" + }, + "jssgroupFake": { + "message": "Faux", + "description": "Displayed during JSS level tweaking for InstalledBrowserPlugins and possibly more (in the future)" + }, + "ShieldOnSlider": { + "message": "MARCHE", + "description": "Displayed in sliders that control activation of shields in popup and options, keep the text short to prevent overflow" + }, + "jssgroupBlock": { + "message": "Bloquer", + "description": "Displayed during JSS level tweaking for several API groups" + }, + "settingsForDomain": { + "message": "Paramètres du domaine", + "description": "The text in the popup that introduces the context of the information in the popup" + }, + "jssgroupUnprotected": { + "message": "Non protégé", + "description": "Displayed during JSS level tweaking in case the API group is completely disabled" + }, + "nameDescriptionSeparator": { + "message": " — ", + "description": "Used for example in the popup to separate the current JSS level from its description." + }, + "jssgroupRemove": { + "message": "Soustraire", + "description": "Displayed during JSS level tweaking for several API groups" + }, + "popupDefaultLevelHelpText": { + "message": "Définir le niveau global par défaut comme le niveau du JavaScript sur cette page.", + "description": "This text is displayed in the popup as a tooltip for the Default level button" + }, + "jssgroupTimePrecisionDescription": { + "message": "Préviens les attaques et techniques de fingerprinting dépendant d'un timing précis (ou les rends difficiles).", + "description": "Displayed at various places" + }, + "wrappers": { + "message": "Groupes d'APIs", + "description": "Column headding in the popup detailed JSS shield" + }, + "NBSgloballyOff": { + "message": "Bouclier de limite de réseau est globalement activé", + "description": "Informs the user that NBS is globally disabled, displayed e.g. in popup" + }, + "FingerprintQualityLabel": { + "message": "⤷Le nombre d'APIs a mauvaise utilisation pour le fingerprinting appelé par la page : ", + "description": "This text is displayed in the popup as additional information from FPD" + }, + "jssgroupHigh": { + "message": "Haut", + "description": "Displayed during JSS level tweaking for several API groups" + }, + "levelOfDefense": { + "message": "Niveau de défense", + "description": "Column headding in the popup detailed JSS shield" + }, + "jssgroupConfuse": { + "message": "Confondre", + "description": "Displayed during JSS level tweaking for several API groups" + }, + "detailTweaksOfJSShieldForThisSite": { + "message": "Détail des réglages du bouclier JS pour ce site", + "description": "Button in the popup that allows to tweak JSS." + }, + "defaultLevelSelection": { + "message": "Niveau par défaut ($levelName$)", + "description": "This text is displayed as the default level in the popup", + "placeholders": { + "levelName": { + "content": "$1", + "description": "Translated name of the default level used by the user", + "example": "Recommended, see the keys JSSL*Name like JSSL2Name" + } + } + }, + "ShieldOffSlider": { + "message": "ARRÊT", + "description": "Displayed in sliders that control activation of shields in popup and options, keep the text short to prevent overflow" + }, + "descriptionLess": { + "message": "(moins...)", + "description": "Used for example in the popup in the description text of the currently applied level when JShelter gives user the option to get less information about the level." + }, + "javascriptShield": { + "message": "Bouclier JavaScript", + "description": "The name of the JavaScript Shield displayed at multiple places" + }, + "jssgroupLittleLies": { + "message": "Petits mensonges", + "description": "Displayed during JSS level tweaking for several API groups" + }, + "jssgroupAsk": { + "message": "Demander", + "description": "Displayed during JSS level tweaking for XHR and possibly more (in the future)" + }, + "jssgroupGraphicCardInformationDescription2": { + "message": "Fonction $api$ retourne des values modifiées ou basses pour certain paramètres.", + "placeholders": { + "api": { + "content": "WebGLRenderingContext.getParameter()", + "description": "Keep the names of the API" + } + } + }, + "jssgroupGraphicCardInformationDescription3": { + "message": "$apis$ retourne des valeurs modifiées.", + "placeholders": { + "apis": { + "content": "WebGLRenderingContext functions .getFramebufferAttachmentParameter(), .getActiveAttrib(), .getActiveUniform(), .getAttribLocation(), .getBufferParameter(), .getProgramParameter(), .getRenderbufferParameter(), .getShaderParameter(), .getShaderPrecisionFormat(), .getTexParameter(), .getUniformLocation(), .getVertexAttribOffset(), .getSupportedExtensions(), et .getExtension()", + "description": "Keep the names of the API but translate the punctuation and conjunctions" + } + } + }, + "jssgroupLocallyRenderedImages": { + "message": "Images générées localement", + "description": "htmlcanvaselement group" + }, + "jssgroupTimePrecisionDescription2": { + "message": "Limite la précision d'horodatage haute résolution des $apis$. Horodatage produit par API de Géolocalisation sont enveloppés aussi si vous activés la protection \"$jssgroupPhysicalLocationGeolocation$\".", + "description": "Displayed at various places", + "placeholders": { + "jssgroupPhysicalLocationGeolocation": { + "content": "$1", + "description": "Translated version of the jssgroupPhysicalLocationGeolocation string" + }, + "apis": { + "content": "(Date, Performance, événements, Gamepad API, et Web VR API)", + "description": "Keep the names of the APIs but translate the punctuation and conjunctions" + } + } + }, + "jssgroupTimePoorDescription": { + "message": "Temps arrondis a la centième seconde (1.230)", + "description": "Explains the protection to the user" + }, + "jssgroupLocallyRenderedImagesLittleLiesDescription": { + "message": "Appliquez de petites modifications aux données d'image lue pour que ces images apparaisses similaires, mais que la value précise diffère en fonction du domaine visité et a travers sessions. Le but est de prévenir le fingerprinting de Canvas ou au moins le rendre plus difficile.", + "description": "Consider keeping reference to Canvas fingerprinting in English" + }, + "jssgroupTimeLowDescription": { + "message": "Temps arrondit au dixième de seconde (1.200)", + "description": "Explains the protection to the user" + }, + "jssgroupLocallyGeneratedAudioLittleLiesDescription": { + "message": "Ajouter un bruit de faible amplitude pour que le son soit similaire a l'original à un humain. La value précise diffère en fonction du domaine visité et a travers les sessions. Le but est de prévenir le fingerprinting audio ou au moins le rendre plus difficile.", + "description": "Consider keeping reference to Audio fingerprinting in English" + }, + "jssgroupGraphicCardInformation": { + "message": "Information de la carte graphique", + "description": "webgl group" + }, + "jssgroupLocallyGeneratedAudioStrictDescription": { + "message": "La data audio est remplacée par du bruit blanc qui varie en fonction du domaine visité et a travers les sessions. Le but est de limiter les fuites sur le hardware audio et en même temps rendre le fingerprinting audio plus difficile.", + "description": "Consider keeping reference to Audio fingerprinting in English" + }, + "jssgroupLocallyGeneratedAudioDescription": { + "message": "Protège contre la fuite d'information sur les capacités de la carte audio qui peuvent être utilisés, par exemple, en fingerprinting audio.", + "description": "Try to keep reference to audio fingerprinting" + }, + "jssgroupLocallyRenderedImagesDescription2": { + "message": "Fonctions $apis$ génères des données d'image modifié.", + "description": "Displayed at various places", + "placeholders": { + "apis": { + "content": "canvas.toDataURL(), canvas.toBlob(), CanvasRenderingContext2D.getImageData(), OffscreenCanvas.convertToBlob(), et WebGLRenderingContext.readPixels", + "description": "Keep the names of the APIs but translate the punctuation and conjunctions" + } + } + }, + "jssgroupLocallyRenderedImagesDescription": { + "message": "Protège contre le fingerprinting de canvas ou la fuite d'information sur les capacités d’interprétation de la carte graphique.", + "description": "Displayed at various places, try to keep canvas in English or make sure that the user can understand that the protection is about the Canvas API" + }, + "jssgroupLocallyRenderedImagesDescription3": { + "message": "Les $apis$ sont modifiées pour mentir avec probabilité.", + "description": "Displayed after jssgroupLocallyRenderedImagesDescription2", + "placeholders": { + "apis": { + "content": "CanvasRenderingContext2D.isPointInStroke() et CanvasRenderingContext2D.isPointInPath()", + "description": "Keep the names of the APIs but translate the punctuation and conjunctions" + } + } + }, + "jssgroupLocallyGeneratedAudio": { + "message": "Audio généré localement", + "description": "audiobuffer group" + }, + "jssgroupGraphicCardInformationDescription": { + "message": "Parodier les détails utiles de votre carte graphique, par exemple, pour rendre le fingerprinting plus difficile." + }, + "jssgroupLocallyRenderedImagesStrictDescription": { + "message": "Lire images blanches (à partir du canevas WebGL, lisez un tableau vide). Cette option ne protège pas contre le fingerprinting de Canevas.", + "description": "Consider keeping reference to Canvas fingerprinting in English" + }, + "jssgroupTimeHighDescription": { + "message": "Randomiser les chiffres décimaux avec du bruit (1.451)", + "description": "Explains the protection to the user" + }, + "jssgroupLocallyGeneratedAudioDescription2": { + "message": "Fonctions $apis$ produit la data modifiée.", + "placeholders": { + "apis": { + "content": "AudioBuffer.getChannelData(), AudioBuffer.copyFromChannel(), AnalyserNode.getByteTimeDomainData(), AnalyserNode.getFloatTimeDomainData(), AnalyserNode.getByteFrequencyData(), et AnalyserNode.getFloatFrequencyData()", + "description": "Keep the names of the APIs but translate the punctuation and conjunctions" + } + } + }, + "jssgroupGraphicCardInformationLittleLiesDescription": { + "message": "Générez des nombres raisonnable ou des chaînes aléatoires qui différent selon le domaine visité et entre sessions. L'objectif étant de limiter les fuites des cartes graphiques tout en même temp rendre le fingerprinting plus difficile." + }, + "jssgroupNetworkConditions": { + "message": "Conditions du réseau", + "description": "net group" + }, + "jssgroupInstalledBrowserPlugins": { + "message": "Plugins de navigateur installés", + "description": "plugins group" + }, + "jssgroupXMLHttpRequestRequests": { + "message": "XMLHttpRequest (XHR) transfère de data", + "description": "Keep the name of the API in English" + }, + "jssgroupHardwareMediumDescription": { + "message": "Randomiser une value valide entre le minimum et 8. La value générée diffère en fonction des domaines visité et a travers sessions." + }, + "jssgroupInstalledBrowserPluginsLittleLiesDescription": { + "message": "Éditez les plugins courant et ajouter deux faux plugins." + }, + "jssgroupConnectedCamerasAndMicrophonesLittleLiesDescription": { + "message": "Randomisez l'ordre des appareils. Les appareils existant ne peuvent pas être liés sur différent domaines et a travers les sessions." + }, + "jssgroupXMLHttpRequestRequestsBlockDescription": { + "message": "Bloquer toutes demandes XHR", + "description": "Keep the name of the API in English" + }, + "jssgroupHardware": { + "message": "Appareil mémoire et CPU", + "description": "hardware group" + }, + "jssgroupInstalledBrowserPluginsStrictDescription": { + "message": "Cacher tous les plugins." + }, + "jssgroupInstalledBrowserPluginsDescription": { + "message": "Protection contre le fingerprinting des plugin." + }, + "jssgroupInstalledBrowserPluginsDescription2": { + "message": "La protection n’est pas appliquée si votre navigateur génère une liste vide ou les cinq plugins PDF spécifiés par le standard HTML vivant. Ainsi, la protection n’est pas appliquée dans un navigateur moderne.", + "description": "The protection is not applied in modern browsers" + }, + "jssgroupConnectedCamerasAndMicrophonesStrictDescription": { + "message": "Générer une liste vide d'appareils." + }, + "jssgroupHardwareDescription": { + "message": "Parodier l'information hardware concernant la quantité de RAM et le nombre de CPU." + }, + "jssgroupHardwareDescription2": { + "message": "Les $apis$ Getters génères des values modifiées.", + "placeholders": { + "apis": { + "content": "navigator.deviceMemory et navigator.hardwareConcurrency", + "description": "Keep the names of the APIs but translate the punctuation and conjunctions" + } + } + }, + "jssgroupArrays": { + "message": "ArrayBuffer API", + "description": "arrays group" + }, + "jssgroupXMLHttpRequestRequestsAskDescription": { + "message": "Demander avant d’exécuter une demande XHR", + "description": "Keep the name of the API in English" + }, + "jssgroupInstalledBrowserPluginsFakeDescription": { + "message": "Générer deux faux plugins." + }, + "jssgroupXMLHttpRequestRequestsDescription": { + "message": "Filtrer les demandes XHR reliable au server." + }, + "jssgroupNetworkConditionsDescription": { + "message": "Désactiver l’accès a l'information du réseau pour limiter le fingerprinting et enlever la possibilité d'observer les motifs d’accès au réseau pour apprendre si l'usager est a la maison, au travail ou en voyage." + }, + "jssgroupHardwareHighDescription": { + "message": "Génère 4 pour navigator.deviceMemory et 2 pour navigator.hardwareConcurrency.", + "description": "Keep the names of the APIs in English" + }, + "jssgroupXMLHttpRequestRequestsDescription2": { + "message": "Notez que les demandes XHR sont largement utilisé a des fin bénin et que les $apis$ no sont pas bloqués. Tous on des moyen similaires et certains même mieux pour communique avec le serveur. On vous recommande d'activer le Détecteur de Fingerprinting a la place des wrappers XHR pour un usage pratique. JShelter garde le wrapper parce-qu'il est utile a certains usager pour des raison expérimentales.", + "placeholders": { + "apis": { + "content": "Fetch, SSE, WebRTC, et WebSockets APIs", + "description": "Keep the names of the APIs but translate the punctuation and conjunctions" + } + } + }, + "jssgroupNetworkConditionsRemoveDescription": { + "message": "Désactiver NetworkInformation API", + "description": "Keep the name of the API in English" + }, + "jssgroupConnectedCamerasAndMicrophonesDescription2": { + "message": "La fonction $api$ est modifiée pour générer un résulta vide ou modifié.", + "placeholders": { + "api": { + "content": "MediaDevices.enumerateDevices()", + "description": "Keep the names of the API" + } + } + }, + "jssgroupConnectedCamerasAndMicrophonesDescription": { + "message": "Préviens le fingerprinting basé sur les périphériques multimédia connectés a l'ordinateur." + }, + "jssgroupHardwareLowDescription": { + "message": "Randomiser une value valide entre le minimum et la vrai value. La value générée diffère en fonction des domaines visité et a travers sessions." + }, + "jssgroupConnectedCamerasAndMicrophones": { + "message": "Cameras et microphones connectées" + }, + "jssgroupConnectedCamerasAndMicrophonesAddFakeDescription": { + "message": "Ajouter 0-4 faux appareils et randomiser l'ordre. Les appareils existant ne peuvent plus être liés sur différent domaines et a travers sessions." + }, + "jssgroupSharedArraysBuffer": { + "message": "SharedArrayBuffer API", + "description": "shared_array group" + }, + "jssgroupArraysDescription": { + "message": "Protège contre les exploitation de type ArrayBuffer par exemple, pour prévenir des attaques secondaires sur la disposition de la mémoire (ou le rendre plus difficile)." + }, + "jssgroupArraysRandomize": { + "message": "Randomiser" + }, + "jssgroupArraysShift": { + "message": "Décaler" + }, + "jssgroupGraphicCardInformationStrictDescription": { + "message": "Retourne des valeurs minimales (chaînes nulles et vide). Noter que cette option n’empêche pas le fingerprinting." + }, + "jssgroupArraysShiftDescription": { + "message": "Décale les index pour rendre plus difficile la détection des limites de la page mémoire." + } +} diff --git a/data/extensions/jsr@javascriptrestrictor/_locales/pl/messages.json b/data/extensions/jsr@javascriptrestrictor/_locales/pl/messages.json new file mode 100644 index 0000000..3081d3e --- /dev/null +++ b/data/extensions/jsr@javascriptrestrictor/_locales/pl/messages.json @@ -0,0 +1,773 @@ +{ + "jssgroupGeolocationRegion": { + "message": "Region", + "description": "Displayed during level tweaks" + }, + "descriptionMore": { + "message": "(więcej…)", + "description": "Used for example in the popup in the description text of the currently applied level when JShelter gives user the option to get more information about the level." + }, + "jssgroupGeolocationTown": { + "message": "Miasto", + "description": "Displayed during level tweaks" + }, + "jssgroupStrict": { + "message": "Ścisłe", + "description": "Displayed during JSS level tweaking for several API groups" + }, + "jssgroupLow": { + "message": "Niskie", + "description": "Displayed during JSS level tweaking for several API groups" + }, + "modifyJSSPopup": { + "message": "Modyfikuj", + "description": "The button in the popup that tweaks JSS" + }, + "ButtonDisableForDomain": { + "message": "<strong>$DISABLE$</strong> $FORTHEDOMAIN$", + "description": "A button caption that can be used generically by JShelter, e.g. in the options; if necessary, edit the structure of the message but make sure to emhasize the disablement. Translate the placeholders.", + "placeholders": { + "disable": { + "content": "Wyłącz", + "description": "Please translate" + }, + "forTheDomain": { + "content": "dla domeny", + "description": "Please translate" + } + } + }, + "refreshPage": { + "message": "Odśwież stronę", + "description": "The button in the popup that refreshes the currently displayed page" + }, + "jssgroupPoor": { + "message": "Słaba", + "description": "Displayed during JSS level tweaking for several API groups" + }, + "JSSBuiltinExceptionsLevelsSeparator": { + "message": ", ", + "description": "Displayed in expert settings, separator for levels displayed" + }, + "jssgroupMedium": { + "message": "Średnie", + "description": "Displayed during JSS level tweaking for several API groups" + }, + "jssgroupGeolocationVillage": { + "message": "Wieś", + "description": "Displayed during level tweaks" + }, + "ExternalLinksSeparator": { + "message": " »", + "description": "Displayed in options in the navigation bar, for example after external links" + }, + "fingerprintDetector": { + "message": "Wykrywanie fingerprintingu", + "description": "The name of the Fingerprint Detector displayed at multiple places" + }, + "shieldNotifications": { + "message": "Powiadomienia", + "description": "Displayed as a text label during NBS and FPD configuration when the user can activate or deactivate notifications" + }, + "globalSettings": { + "message": "Globalne ustawienia", + "description": "The button in the popup that opens options page" + }, + "JSSBuiltinExceptionsDomain": { + "message": "Domena", + "description": "Displayed in expert settings, heading in the table of built-in tweaks" + }, + "extensionName": { + "message": "JShelter", + "description": "Name of the extension. Please, do not translate unless properly justified." + }, + "jssgroupWASMPassive": { + "message": "Pasywne" + }, + "fAQ": { + "message": "FAQ", + "description": "Displayed in options in the navigation bar" + }, + "permissions": { + "message": "Pozwolenia", + "description": "Displayed in options in the navigation bar" + }, + "FPDgloballyOff": { + "message": "Wykrywanie fingerprintingu jest wyłączone globalnie", + "description": "Informs the user that FPD is globally disabled, displayed e.g. in popup" + }, + "ButtonEnableForSelectedDomains": { + "message": "<strong>$ENABLE$</strong> $FORTHEDOMAIN$", + "description": "A button caption that can be used generically by JShelter, e.g. in the options; if necessary, edit the structure of the message but make sure to emhasize the enablement. Translate the placeholders.", + "placeholders": { + "enable": { + "content": "Włącz", + "description": "Please translate" + }, + "forTheDomain": { + "content": "dla wybranych domen", + "description": "Please translate" + } + } + }, + "fpdDetectionDefault": { + "message": "Domyślne", + "description": "Option shown in options during configuaration of the parameters of FPD" + }, + "numberOfCalls": { + "message": "Liczba wywołań", + "description": "Column headding in the popup detailed JSS shield" + }, + "JSSLexperimentalName": { + "message": "Eksperymentalny", + "description": "The name of JSS experimental level that is used at various places in the UI" + }, + "fpdBehaviorPassive": { + "message": "Pasywne", + "description": "A label shown in options during configuaration of the parameters of FPD" + }, + "ShieldOnSlider": { + "message": "WŁĄCZ", + "description": "Displayed in sliders that control activation of shields in popup and options, keep the text short to prevent overflow" + }, + "jssgroupBlock": { + "message": "Zablokuj", + "description": "Displayed during JSS level tweaking for several API groups" + }, + "settingsForDomain": { + "message": "Ustawienia dla domeny", + "description": "The text in the popup that introduces the context of the information in the popup" + }, + "fpdStrict": { + "message": "Ścisły", + "description": "Option shown in options during configuaration of the parameters of FPD" + }, + "FPDSeverityLow": { + "message": "Niski", + "description": "The level of the number of detected APIs misusable for fingerprinting" + }, + "jssgroupUnprotected": { + "message": "Niechronione", + "description": "Displayed during JSS level tweaking in case the API group is completely disabled" + }, + "nameDescriptionSeparator": { + "message": " — ", + "description": "Used for example in the popup to separate the current JSS level from its description." + }, + "jssgroupRemove": { + "message": "Usuń", + "description": "Displayed during JSS level tweaking for several API groups" + }, + "extensionDescription": { + "message": "Wtyczka poprawiająca poziom bezpieczeństwa i prywatności użytkownika.", + "description": "Description of the extension." + }, + "JSSBuiltinExceptionsLevels": { + "message": "Poziomy", + "description": "Displayed in expert settings, heading in the table of built-in tweaks" + }, + "wrappers": { + "message": "Grupy API", + "description": "Column headding in the popup detailed JSS shield" + }, + "jssgroupArraysRandomize": { + "message": "Losuj" + }, + "ButtonRestore": { + "message": "Przywróć", + "description": "A button caption that can be used generically by JShelter" + }, + "JSSL3Name": { + "message": "Ścisły", + "description": "The name of JSS L3 that is used at various places in the UI" + }, + "protectionConfigurationOptionActivatedOff": { + "message": "Wyłączone", + "description": "Displayed during NBS and FPD configuration when the option is deactivated (off)" + }, + "ButtonCancel": { + "message": "Anuluj", + "description": "A button caption that can be used generically by JShelter" + }, + "jssgroupHigh": { + "message": "Wysokie", + "description": "Displayed during JSS level tweaking for several API groups" + }, + "jssgroupWASMActive": { + "message": "Aktywne" + }, + "levelOfDefense": { + "message": "Poziom ochrony", + "description": "Column headding in the popup detailed JSS shield" + }, + "jssgroupArraysShift": { + "message": "Zmiana" + }, + "JSSL2Name": { + "message": "Zalecane", + "description": "The name of JSS L2 that is used at various places in the UI" + }, + "detailTweaksOfJSShieldForThisSite": { + "message": "Szczegółowe ustawienia ochrony JS dla tej strony", + "description": "Button in the popup that allows to tweak JSS." + }, + "protectionConfigurationOptionActivatedOn": { + "message": "Włączone", + "description": "Displayed during NBS and FPD configuration when the option is activated (on)" + }, + "ButtonEdit": { + "message": "Edytuj", + "description": "A button caption that can be used generically by JShelter" + }, + "ShieldOffSlider": { + "message": "WYŁĄCZ", + "description": "Displayed in sliders that control activation of shields in popup and options, keep the text short to prevent overflow" + }, + "ButtonSave": { + "message": "Zapisz", + "description": "A button caption that can be used generically by JShelter" + }, + "fpdBehavior": { + "message": "Zachowanie", + "description": "A label shown in options during configuaration of the parameters of FPD" + }, + "jssgroupGamepads": { + "message": "Kontrolery do gier", + "description": "gamepads group" + }, + "ButtonSignExpandOneCharacterDown": { + "message": "⤵", + "description": "A button caption that can be used generically by JShelter, it should contain a single character that intuitively tells the user that by clicking the button, more information will be shown" + }, + "jssgroupWASMDisabled": { + "message": "Wyłączono" + }, + "FPDSeverityModerate": { + "message": "Umiarkowany", + "description": "The level of the number of detected APIs misusable for fingerprinting" + }, + "descriptionLess": { + "message": "(mniej…)", + "description": "Used for example in the popup in the description text of the currently applied level when JShelter gives user the option to get less information about the level." + }, + "nbsBlocking": { + "message": "Blokowanie", + "description": "Displayed during NBS configuration, label for a configuration option" + }, + "JSSBuiltinExceptionsChanges": { + "message": "Zmiany", + "description": "Displayed in expert settings, heading in the table of built-in tweaks" + }, + "FPDSeverityNone": { + "message": "Brak", + "description": "The level of the number of detected APIs misusable for fingerprinting" + }, + "javascriptShield": { + "message": "Ochrona JavaScript", + "description": "The name of the JavaScript Shield displayed at multiple places" + }, + "ButtonRemove": { + "message": "Usuń", + "description": "A button caption that can be used generically by JShelter" + }, + "FPDSeverityHigh": { + "message": "Wysoki", + "description": "The level of the number of detected APIs misusable for fingerprinting" + }, + "jssgroupWASMEnabled": { + "message": "Włączono" + }, + "fpdDetection": { + "message": "Wykrywanie", + "description": "A label shown in options during configuaration of the parameters of FPD" + }, + "jssgroupAsk": { + "message": "Pytaj", + "description": "Displayed during JSS level tweaking for XHR and possibly more (in the future)" + }, + "formlabelDescription": { + "message": "Opis:", + "description": "Used in forms whenever a description should be enered (atm new level description)" + }, + "LevelAndDescription": { + "message": "$LEVELNAME$: $LEVELSHORTDESCRIPTION$", + "description": "Displayed in options pages in select elements to give the user an idea what level to apply by listing both its name and a short description", + "placeholders": { + "levelName": { + "content": "$1", + "example": "Name of the level" + }, + "levelShortDescription": { + "content": "$2", + "example": "Short description of the level" + } + } + }, + "formlabelName": { + "message": "Nazwa:", + "description": "Used in forms whenever a name should be enered (atm new level name)" + }, + "JSSBuiltinExceptionsReason": { + "message": "Powód", + "description": "Displayed in expert settings, heading in the table of built-in tweaks" + }, + "credits": { + "message": "Twórcy", + "description": "Displayed in options in the navigation bar" + }, + "ButtonAddNewLevel": { + "message": "Dodaj nowy poziom", + "description": "A button caption that can be used generically by JShelter" + }, + "jssgroupHardwareBatteryRemoveDescription": { + "message": "Usuń API" + }, + "jssgroupInstalledBrowserPlugins": { + "message": "Zainstalowane wtyczki do przeglądarki", + "description": "plugins group" + }, + "ButtonRestoreLevel": { + "message": "Przywróć poziom $LEVELNAME$", + "description": "A button caption that can be used generically by JShelter", + "placeholders": { + "levelName": { + "content": "$1", + "example": "Level name of the level to be restored, for example, Default" + } + } + }, + "jssgroupLocallyRenderedImages": { + "message": "Lokalnie renderowane obrazy", + "description": "htmlcanvaselement group" + }, + "JShelterOptionsAdvanced": { + "message": "Zaawansowane ustawienia JShelter", + "description": "Title of the expert options page" + }, + "jssgroupVirtualAndAugmentedRealityDevicesStrictDescription": { + "message": "Ukryj wszystkie urządzenia." + }, + "jssgroupPhysicalLocationGeolocation": { + "message": "Fizyczna lokalizacja (geolokalizacja)" + }, + "jssgroupSharedArraysBufferStrictDescription": { + "message": "Blokuj SharedArrayBuffer" + }, + "jssgroupGamepadsStrictDescription": { + "message": "Ukryj wszystkie kontrolery do gier." + }, + "jssgroupInstalledBrowserPluginsStrictDescription": { + "message": "Ukryj wszystkie wtyczki." + }, + "jssgroupUserIdleRemoveDescription": { + "message": "Usuń API." + }, + "fpdBehaviorFullBlocking": { + "message": "Pełne blokowanie", + "description": "A label shown in options during configuaration of the parameters of FPD" + }, + "saveAll": { + "message": "Zapisz wszystko", + "description": "A button caption that can be used generically by JShelter, atm it is displayed in JSS advanced options page" + }, + "jssgroupGraphicCardInformation": { + "message": "Informacje o karcie graficznej", + "description": "webgl group" + }, + "JShelterOptions": { + "message": "Główne ustawienia JShelter", + "description": "Title of the main options page" + }, + "issueTracker": { + "message": "Śledzenie zgłoszeń", + "description": "Displayed in options in the navigation bar" + }, + "externalLinks": { + "message": "Linki zewnętrzne", + "description": "Displayed in options in the navigation bar" + }, + "jssgroupLocallyRenderedImagesDescription2": { + "message": "Funkcje $apis$ zwracają zmodyfikowane dane obrazów.", + "description": "Displayed at various places", + "placeholders": { + "apis": { + "content": "canvas.toDataURL(), canvas.toBlob(), CanvasRenderingContext2D.getImageData(), OffscreenCanvas.convertToBlob() i WebGLRenderingContext.readPixels", + "description": "Keep the names of the APIs but translate the punctuation and conjunctions" + } + } + }, + "jssgroupGeolocationLongDistance": { + "message": "Duży dystans", + "description": "Displayed during level tweaks" + }, + "deleteAll": { + "message": "Usuń wszystko", + "description": "A button caption that can be used generically by JShelter, atm it is displayed in JSS advanced options page" + }, + "jssgroupLocallyGeneratedAudio": { + "message": "Lokalnie generowane audio", + "description": "audiobuffer group" + }, + "defaultLevelSelection": { + "message": "Domyślny poziom ($levelName$)", + "description": "This text is displayed as the default level in the popup", + "placeholders": { + "levelName": { + "content": "$1", + "description": "Translated name of the default level used by the user", + "example": "Recommended, see the keys JSSL*Name like JSSL2Name" + } + } + }, + "jssgroupUserIdleDetection": { + "message": "Wykrywanie bezczynności", + "description": "useridle group" + }, + "jSSShieldDetails": { + "message": "Szczegóły ochrony JS", + "description": "Displayed in options in the navigation bar, try to keep JS shield abbreviated to keep the text short" + }, + "jssgroupWebWorker": { + "message": "API WebWorker", + "description": "webworker group, keep the name of the API in English" + }, + "JSSaddLevelHeading": { + "message": "Dodaj nowy poziom", + "description": "Form heading during creation of a new level. You likely want to use the same or very similar value as ButtonAddNewLevel translation string." + }, + "testPage": { + "message": "Strona testowa", + "description": "Displayed in options in the navigation bar" + }, + "FPDReportShowDetails": { + "message": "Pokaż szczegóły", + "description": "Button caption" + }, + "FPDReportHideDetails": { + "message": "Ukryj szczegóły", + "description": "Button caption" + }, + "JSSeditLevelHeading": { + "message": "Edytuj poziom $LEVELNAME$", + "description": "Heading shown during JSS tweaking (edit level form)", + "placeholders": { + "levelName": { + "content": "$1", + "description": "The level name that is about to be overwritten, do not translate", + "example": "User provided value, any text" + } + } + }, + "advancedOptions": { + "message": "Ustawienia zaawansowane", + "description": "Displayed in options in the navigation bar" + }, + "sourceCode": { + "message": "Kod źródłowy", + "description": "Displayed in options in the navigation bar" + }, + "jssgroupNetworkConditionsRemoveDescription": { + "message": "Wyłącz API NetworkInformation", + "description": "Keep the name of the API in English" + }, + "addToList": { + "message": "Dodaj do listy", + "description": "A button caption that can be used generically by JShelter, atm it is displayed in JSS advanced options page" + }, + "jssgroupMultimediaPlayback": { + "message": "Odtwarzanie multimediów", + "description": "playback group" + }, + "ButtonSaveCustomLevel": { + "message": "Zapisz własny poziom", + "description": "A button caption that can be used generically by JShelter" + }, + "ExampleDomainsText": { + "message": "example.com lub en.example.com", + "description": "Displayed in text inputs that expect a domain" + }, + "FPDSeverityVeryHigh": { + "message": "Bardzo wysoki", + "description": "The level of the number of detected APIs misusable for fingerprinting" + }, + "jssgroupHardwareBattery": { + "message": "API stanu baterii", + "description": "battery group" + }, + "jssgroupNFCRemoveDescription": { + "message": "Usuń API" + }, + "FPDReportRefresh": { + "message": "Odśwież zgłoszenie", + "description": "Button caption" + }, + "mainSettings": { + "message": "Główne ustawienia", + "description": "Displayed in options in the navigation bar" + }, + "addCustomLevel": { + "message": "Dodaj własny poziom", + "description": "A button caption, the button creates a custom JSS level." + }, + "fpdBehaviorLimitedBlocking": { + "message": "Ograniczone blokowanie", + "description": "A label shown in options during configuaration of the parameters of FPD" + }, + "JSSL1Name": { + "message": "Wyłącz ochronę przed fingerprintingiem", + "description": "The name of JSS L1 that is used at various places in the UI" + }, + "ManageWhitelist": { + "message": "Zarządzaj listą wyjątków ⤵", + "description": "A button caption that can be used generically by JShelter, e.g. to fine-tune NBS and FPD; Please indicate that the list would appear below (the arrow at the end)." + }, + "jssgroupXMLHttpRequestRequests": { + "message": "Przesyłanie danych XMLHttpRequest (XHR)", + "description": "Keep the name of the API in English" + }, + "jssgroupMultimediaPlaybackStrictDescription": { + "message": "Zgłaszaj wszystkie kodeki i mechanizmy szyfrowania jako niewspierane." + }, + "jssgroupXMLHttpRequestRequestsBlockDescription": { + "message": "Blokuj wszystkie zapytania XHR", + "description": "Keep the name of the API in English" + }, + "NBSBlockedHost": { + "message": "Wszystkie przyszłe zapytania HTTP z $HOST$ zostaną zablokowane.", + "description": "The message shown in Chromium-based browsers when NBS starts blocking a host.", + "placeholders": { + "host": { + "content": "$1", + "description": "Domain name or IP address, do not translate", + "example": "domainname.example.com" + } + } + }, + "jssgroupSharedArraysBuffer": { + "message": "API SharedArrayBuffer", + "description": "shared_array group" + }, + "jssgroupWASMEnabledDescription": { + "message": "Twórz małe zakłócenia w WebAssembly." + }, + "nbsBlockingOnDescription": { + "message": "Włączono blokowanie zapytań.", + "description": "Displayed during NBS configuration, further explanation of the selected configuration level" + }, + "NBSNotificationsOffDescription": { + "message": "Wyłączono blokowanie powiadomień.", + "description": "Displayed in NBS options, notifications about blocked requests are globally disabled" + }, + "javaScriptShieldPerWebsiteConfiguration": { + "message": "Ustawienia ochrony JavaScript dla poszczególnych stron", + "description": "Displayed in JSS advanced options page" + }, + "jssgroupConnectedCamerasAndMicrophonesStrictDescription": { + "message": "Zwraca pustą listę urządzeń." + }, + "fpdNotificationsOffDescription": { + "message": "Wyłączono wykrywanie/blokowanie powiadomień.", + "description": "Text shown in options during configuaration of the parameters of FPD" + }, + "NBSDetectedHost": { + "message": "Aby zablokować żądania HTTP z $HOST$ włącz blokowanie.", + "description": "The message shown in Chromium-based browsers when NBS detects a suspicious host.", + "placeholders": { + "host": { + "content": "$1", + "description": "Domain name or IP address, do not translate", + "example": "domainname.example.com" + } + } + }, + "jssgroupArrays": { + "message": "API ArrayBuffer", + "description": "arrays group" + }, + "jssgroupXMLHttpRequestRequestsAskDescription": { + "message": "Zapytaj przed wykonaniem zapytania XHR", + "description": "Keep the name of the API in English" + }, + "ExpertUndoConfiguration": { + "message": "Cofnij (przywraca poprzednie ustawienia)", + "description": "Displayed in expert settings, button that restores the configuration to the previous (back button)" + }, + "jssgroupUnreliableTransfersToServerBeaconsDescription3": { + "message": "Zapobiegaj wysyłaniu danych przez API Beacon.", + "description": "Keep the name of the API" + }, + "setJavaScriptShieldForWebsite": { + "message": "Ustaw ochronę JavaScript dla strony:", + "description": "Displayed in JSS advanced options page" + }, + "NBSNotificationsOnDescription": { + "message": "Włączono blokowanie powiadomień.", + "description": "Displayed in NBS options, notifications about blocked requests are globally enabled" + }, + "HideWhitelist": { + "message": "Ukryj listę wyjątków ⤵", + "description": "A button caption that can be used generically by JShelter, e.g. to fine-tune NBS and FPD; Please indicate that the list is located below (the arrow at the end)." + }, + "fpdDetectionDefaultDescription": { + "message": "Zalecane ustawienia dla większości użytkowników.", + "description": "Text shown in options during configuaration of the parameters of FPD" + }, + "JSSL0Name": { + "message": "Wyłącz ochronę JavaScript", + "description": "The name of JSS L0 that is used at various places in the UI" + }, + "jssgroupVirtualAndAugmentedRealityDevices": { + "message": "Urządzenia wirtualnej i rozszerzonej rzeczywistości", + "description": "vr group (also includes XR API)" + }, + "jssgroupTimeHighDescription": { + "message": "Losuj cyfry dziesiętne z szumem (1.451)", + "description": "Explains the protection to the user" + }, + "JSSBuiltinExceptions": { + "message": "Wbudowane ustawienia ochrony JavaScript", + "description": "Displayed in expert settings, heading for the table of built-in tweaks" + }, + "ExpertLoadCurrentlyStoredConfiguration": { + "message": "Załaduj obecnie przechowywaną konfigurację", + "description": "Displayed in expert settings, button that loads current configuration to the textarea" + }, + "jssgroupLocallyGeneratedAudioDescription2": { + "message": "Funkcje $apis$ zwracają zmienione dane.", + "placeholders": { + "apis": { + "content": "AudioBuffer.getChannelData(), AudioBuffer.copyFromChannel(), AnalyserNode.getByteTimeDomainData(), AnalyserNode.getFloatTimeDomainData(), AnalyserNode.getByteFrequencyData(), and AnalyserNode.getFloatFrequencyData()", + "description": "Keep the names of the APIs but translate the punctuation and conjunctions" + } + } + }, + "fpdNotificationsOnDescription": { + "message": "Włączono wykrywanie/blokowanie powiadomień.", + "description": "Text shown in options during configuaration of the parameters of FPD" + }, + "jssgroupWebWorkerDescription": { + "message": "Ochrona przed wykorzystywaniem WebWorker", + "description": "Keep the name of the API in English" + }, + "fpdNotificationMessage": { + "message": "$MESSAGE$\n\nStrona: $PAGETITLE$\nHost: $DOMAIN$", + "description": "Constructs the full message for the notification when FPD detects suspicious activity", + "placeholders": { + "message": { + "content": "$1", + "description": "Translated fpdBlockingSubsequent or fpdClickNotificationDetails", + "example": "Blocking all subsequent requests." + }, + "pagetitle": { + "content": "$2", + "description": "The content of the title element of the fingerprinting page (in case it is long, only the start of the string)", + "example": "JShelter test page" + }, + "domain": { + "content": "$3", + "description": "The domain of the visited page or IP address (taken from the URL bar)", + "example": "example.com" + } + } + }, + "nbsBlockingOffDescription": { + "message": "Wyłączono blokowanie zapytań.", + "description": "Displayed during NBS configuration, further explanation of the selected configuration level" + }, + "networkBoundaryShield": { + "message": "Ochrona sieci", + "description": "The name of the Network Boundary Shield displayed at multiple places" + }, + "jssgroupLittleLies": { + "message": "Drobne podmiany", + "description": "Displayed during JSS level tweaking for several API groups" + }, + "jssgroupConfuse": { + "message": "Podmienianie", + "description": "Displayed during JSS level tweaking for several API groups" + }, + "jssgroupFake": { + "message": "Fałszowanie", + "description": "Displayed during JSS level tweaking for InstalledBrowserPlugins and possibly more (in the future)" + }, + "jssgroupGraphicCardInformationDescription3": { + "message": "$apis$ zwraca zmodyfikowane wartości.", + "placeholders": { + "apis": { + "content": "WebGLRenderingContext functions .getFramebufferAttachmentParameter(), .getActiveAttrib(), .getActiveUniform(), .getAttribLocation(), .getBufferParameter(), .getProgramParameter(), .getRenderbufferParameter(), .getShaderParameter(), .getShaderPrecisionFormat(), .getTexParameter(), .getUniformLocation(), .getVertexAttribOffset(), .getSupportedExtensions(), and .getExtension()", + "description": "Keep the names of the API but translate the punctuation and conjunctions" + } + } + }, + "jssgroupInstalledBrowserPluginsFakeDescription": { + "message": "Zwróć dwie fałszywe wtyczki." + }, + "jssgroupConnectedCamerasAndMicrophones": { + "message": "Podłączone kamery i mikrofony" + }, + "jssgroupHardware": { + "message": "Pamięć urządzenia i procesor", + "description": "hardware group" + }, + "jssgroupNetworkConditions": { + "message": "Warunek sieci", + "description": "net group" + }, + "jssgroupPhysicalEnvironmentSensors": { + "message": "Czujniki środowiska fizycznego", + "description": "physical_environment group" + }, + "jssgroupGeolocationRemoveDescription": { + "message": "Całkowicie usuń usługi geolokalizacji.", + "description": "Explains the protection to the user" + }, + "jssgroupNFC": { + "message": "Near Field Communication (NFC)", + "description": "nfc group" + }, + "jssgroupWASM": { + "message": "Przyspieszenie WebAssembly", + "description": "webassembly group" + }, + "fpdNotificationTitle": { + "message": "Wykryto próby fingerprintingu!", + "description": "Title of a notification" + }, + "jssgroupTimePrecision": { + "message": "Precyzja czasu" + }, + "threatModel": { + "message": "Model zagrożenia", + "description": "Displayed in options in the navigation bar" + }, + "FPDReportTitle": { + "message": "Raport o próbach fingerprintingu", + "description": "Title of a fingeprint report" + }, + "jssgroupGeolocationTownDescription": { + "message": "Użyj dokładności co do kilometrów.", + "description": "Explains the protection to the user" + }, + "jssgroupInstalledBrowserPluginsLittleLiesDescription": { + "message": "Edytuj aktualne wtyczki i dodaj dwie fałszywe wtyczki." + }, + "jssgroupCoopscheduleConfuseDescription": { + "message": "Modyfikuj dostępne informacje w celu zmylenia adwersarzy." + }, + "doNotModifyThisConfiguration": { + "message": "UWAGA! Nie modyfikuj tej konfiguracji chyba że ty wiesz co robisz.", + "description": "Displayed in expert settings" + }, + "JShelterFullConfiguration": { + "message": "Pełna konfiguracja JShelter w tekście", + "description": "Displayed in expert settings, label for the full extension configuration in textarea" + }, + "ExpertResetConfiguration": { + "message": "Zresetuj konfiguracje (skasuje wszystkie niestandardowe zmiany)", + "description": "Displayed in expert settings, button that reset to the configuration that we ship (factory reset)" + }, + "NBSDetectedTitle": { + "message": "Ochrona Sieci wykryto podejrzane żądania!", + "description": "Title of the notifications that is displayed when NBS detects a suspicious requests but does not block them because blocking is disabled" + } +} diff --git a/data/extensions/jsr@javascriptrestrictor/_locales/pt_BR/messages.json b/data/extensions/jsr@javascriptrestrictor/_locales/pt_BR/messages.json new file mode 100644 index 0000000..0882630 --- /dev/null +++ b/data/extensions/jsr@javascriptrestrictor/_locales/pt_BR/messages.json @@ -0,0 +1,278 @@ +{ + "descriptionLess": { + "message": "(menos...)", + "description": "Used for example in the popup in the description text of the currently applied level when JShelter gives user the option to get less information about the level." + }, + "extensionName": { + "message": "JShelter", + "description": "Name of the extension. Please, do not translate unless properly justified." + }, + "extensionDescription": { + "message": "Extensão para aumentar o nível de segurança e privacidade do usuário.", + "description": "Description of the extension." + }, + "refreshPage": { + "message": "Atualizar página", + "description": "The button in the popup that refreshes the currently displayed page" + }, + "modifyJSSPopup": { + "message": "Modificar", + "description": "The button in the popup that tweaks JSS" + }, + "descriptionMore": { + "message": "(mais...)", + "description": "Used for example in the popup in the description text of the currently applied level when JShelter gives user the option to get more information about the level." + }, + "levelOfDefense": { + "message": "Nível de defesa", + "description": "Column headding in the popup detailed JSS shield" + }, + "jssgroupUnprotected": { + "message": "Desprotegido", + "description": "Displayed during JSS level tweaking in case the API group is completely disabled" + }, + "jssgroupMedium": { + "message": "Médio", + "description": "Displayed during JSS level tweaking for several API groups" + }, + "jssgroupLow": { + "message": "Baixo", + "description": "Displayed during JSS level tweaking for several API groups" + }, + "jssgroupHigh": { + "message": "Alto", + "description": "Displayed during JSS level tweaking for several API groups" + }, + "settingsForDomain": { + "message": "Configurações do domínio", + "description": "The text in the popup that introduces the context of the information in the popup" + }, + "fingerprintDetector": { + "message": "Detector de impressão digital" + }, + "FPDgloballyOff": { + "message": "Detector de impressão digital está globalmente desativado" + }, + "globalSettings": { + "message": "Configurações gerais" + }, + "javascriptShield": { + "message": "Proteção JavaScript" + }, + "networkBoundaryShield": { + "message": "Barreira de Proteção de Rede" + }, + "NBSgloballyOff": { + "message": "Barreira de Proteção de Rede está globalmente desativada" + }, + "nameDescriptionSeparator": { + "message": " — " + }, + "detailTweaksOfJSShieldForThisSite": { + "message": "Ajustes detalhados do JS Shield para este site" + }, + "wrappers": { + "message": "Grupos de APIs" + }, + "numberOfCalls": { + "message": "Número de chamadas" + }, + "FingerprintQualityLabel": { + "message": "⤷ O número de APIs usadas indevidamente para impressão digital chamadas pela página: " + }, + "popupDefaultLevelHelpText": { + "message": "Defina o nível padrão global como o nível de proteção JavaScript para essa página." + }, + "defaultLevelSelection": { + "message": "Nível padrão ($levelName$)", + "placeholders": { + "levelName": { + "content": "$1" + } + } + }, + "ShieldOffSlider": { + "message": "DESLIGADO" + }, + "ShieldOnSlider": { + "message": "LIGADO" + }, + "jssgroupPoor": { + "message": "Fraco" + }, + "jssgroupLittleLies": { + "message": "Pequenas mensagens" + }, + "jssgroupStrict": { + "message": "Estrito" + }, + "jssgroupConfuse": { + "message": "Confuso" + }, + "jssgroupFake": { + "message": "Falso" + }, + "jssgroupAddFake": { + "message": "Adicionar falso" + }, + "jssgroupAsk": { + "message": "Perguntar" + }, + "jssgroupBlock": { + "message": "Bloquear" + }, + "jssgroupRemove": { + "message": "Remover" + }, + "jssgroupTimePrecision": { + "message": "Precisão de tempo" + }, + "jssgroupTimePrecisionDescription": { + "message": "Impedir ataques e técnicas de impressão digital que dependam da medição precisa de tempo (ou dificultá-los)." + }, + "jssgroupTimePrecisionDescription2": { + "message": "Limite a precisão dos marcadores de tempo com alta resolução $apis$. Os marcadores de data e hora fornecidos pela API de geolocalização também serão agrupados se você ativar a proteção “$jssgroupPhysicalLocationGeolocation$”.", + "placeholders": { + "apis": { + "content": "(Data, desempenho, eventos, API do Gamepad e API de VR da Web)" + }, + "jssgroupPhysicalLocationGeolocation": { + "content": "$1" + } + } + }, + "jssgroupLocallyRenderedImagesDescription": { + "message": "Protege contra o rastreamento de impressões digitais do \"canvas\" ou o vazamento de informações sobre as capacidades de renderização da placa de vídeo." + }, + "jssgroupLocallyRenderedImagesLittleLiesDescription": { + "message": "Aplica pequenas modificações na leitura de imagens de modo que a aparência delas se mantenha a mesma, mas seus valores precisos sejam diferentes com base no domínio visitado e entre sessões. O objetivo é prevenir o rastreamento de impressões digitais do \"Canvas\", ou pelo menos dificultá-lo." + }, + "jssgroupTimePoorDescription": { + "message": "Arredonda o tempo para centésimos de segundo (1.230)" + }, + "jssgroupTimeLowDescription": { + "message": "Arredonda o tempo para décimos de segundo (1.200)" + }, + "jssgroupTimeHighDescription": { + "message": "Randomiza dígitos decimais usando ruído (1.451)" + }, + "jssgroupLocallyRenderedImages": { + "message": "Imagens renderizadas localmente" + }, + "jssgroupLocallyRenderedImagesDescription2": { + "message": "Funções $apis$ retornam dados de imagem modificados.", + "placeholders": { + "apis": { + "content": "canvas.toDataURL(), canvas.toBlob(), CanvasRenderingContext2D.getImageData(), OffscreenCanvas.convertToBlob() e WebGLRenderingContext.readPixels" + } + } + }, + "jssgroupLocallyRenderedImagesDescription3": { + "message": "$apis$ são modificadas para mentir com probabilidade.", + "placeholders": { + "apis": { + "content": "CanvasRenderingContext2D.isPointInStroke() e CanvasRenderingContext2D.isPointInPath()" + } + } + }, + "jssgroupLocallyGeneratedAudioLittleLiesDescription": { + "message": "Adiciona um pequeno ruído de amplitude que altera o som mas o mantém similar ao original para o ouvido humano. Os valores precisos variam com base no domínio visitado e entre sessões. O objetivo é prevenir o rastreamento de impressões digitais de Áudio, ou pelo menos dificultá-lo." + }, + "jssgroupLocallyGeneratedAudio": { + "message": "Áudio gerado localmente" + }, + "jssgroupLocallyGeneratedAudioDescription": { + "message": "Protege contra o vazamento de informações sobre as capacidades de renderização da placa de áudio, que poderiam ser usadas, por exemplo, no rastreamento de impressões digitais por áudio." + }, + "jssgroupLocallyGeneratedAudioDescription2": { + "message": "Funções $apis$ retornam dados modificados.", + "placeholders": { + "apis": { + "content": "AudioBuffer.getChannelData(), AudioBuffer.copyFromChannel(), AnalyserNode.getByteTimeDomainData(), AnalyserNode.getFloatTimeDomainData(), AnalyserNode.getByteFrequencyData() e AnalyserNode.getFloatFrequencyData()" + } + } + }, + "jssgroupLocallyGeneratedAudioStrictDescription": { + "message": "Dados de som são substituídos por ruído branco que varia com base no domínio visitado e entre sessões. O objetivo é limitar o vazamento de informações sobre o hardware de áudio e, ao mesmo tempo, dificultar o rastreamento de impressões digitais de Áudio." + }, + "jssgroupGraphicCardInformation": { + "message": "Informações da placa de vídeo" + }, + "jssgroupGraphicCardInformationDescription2": { + "message": "Função $api$ retorna valores modificados ou vazios para certos parâmetros.", + "placeholders": { + "api": { + "content": "WebGLRenderingContext.getParameter()" + } + } + }, + "jssgroupGraphicCardInformationDescription3": { + "message": "$apis$ retornam valores modificados.", + "placeholders": { + "apis": { + "content": "Funções WebGLRenderingContext .getFramebufferAttachmentParameter(), .getActiveAttrib(), .getActiveUniform(), .getAttribLocation(), .getBufferParameter(), .getProgramParameter(), .getRenderbufferParameter(), .getShaderParameter(), .getShaderPrecisionFormat(), .getTexParameter(), .getUniformLocation(), .getVertexAttribOffset(), .getSupportedExtensions() e .getExtension()" + } + } + }, + "jssgroupConnectedCamerasAndMicrophonesAddFakeDescription": { + "message": "Adiciona de 0 a 4 dispositivos falsos e randomiza a ordem. Os dispositivos existentes não serão vinculáveis em diferentes domínios e entre sessões." + }, + "jssgroupInstalledBrowserPlugins": { + "message": "Plugins de navegador instalados" + }, + "jssgroupGraphicCardInformationStrictDescription": { + "message": "Retorna valores vazios (null, strings vazias). Note que essa opção não previne o rastreamento de impressões digitais." + }, + "jssgroupInstalledBrowserPluginsDescription": { + "message": "Protege contra o rastreamento de impressões digitais de plugin." + }, + "jssgroupInstalledBrowserPluginsLittleLiesDescription": { + "message": "Edita os plugins atuais e adiciona dois plugins falsos." + }, + "jssgroupInstalledBrowserPluginsFakeDescription": { + "message": "Retorna dois plugins falsos." + }, + "jssgroupInstalledBrowserPluginsStrictDescription": { + "message": "Esconde todos os plugins." + }, + "jssgroupConnectedCamerasAndMicrophones": { + "message": "Câmeras e microfones conectados" + }, + "jssgroupConnectedCamerasAndMicrophonesDescription": { + "message": "Previne o rastreamento de impressões digitais baseadas nos dispositivos multimídia conectados ao computador." + }, + "jssgroupConnectedCamerasAndMicrophonesDescription2": { + "message": "Função $api$ é modificada para retornar um resultado vazio ou modificado.", + "placeholders": { + "api": { + "content": "MediaDevices.enumerateDevices()" + } + } + }, + "jssgroupConnectedCamerasAndMicrophonesLittleLiesDescription": { + "message": "Randomiza a ordem dos dispositivos. Os dispositivos existentes não serão vinculáveis em diferentes domínios e entre sessões." + }, + "jssgroupConnectedCamerasAndMicrophonesStrictDescription": { + "message": "Retorna uma lista de dispositivos vazia." + }, + "jssgroupHardwareLowDescription": { + "message": "Retorna um valor válido aleatório entre o valor mínimo e o valor real. O valor retornado varia com base nos domínios visitados e entre sessões." + }, + "jssgroupHardware": { + "message": "Memória e CPU do dispositivo" + }, + "jssgroupHardwareDescription2": { + "message": "Getters $apis$ retornam valores modificados.", + "placeholders": { + "apis": { + "content": "navigator.deviceMemory e navigator.hardwareConcurrency" + } + } + }, + "jssgroupHardwareMediumDescription": { + "message": "Retorna um valor válido aleatório entre o mínimo e 8. O valor retornado varia com base nos domínios visitados e entre sessões." + }, + "jssgroupHardwareHighDescription": { + "message": "Retorna 4 para navigator.deviceMemory e 2 para navigator.hardwareConcurrency." + } +} diff --git a/data/extensions/jsr@javascriptrestrictor/_locales/ru/messages.json b/data/extensions/jsr@javascriptrestrictor/_locales/ru/messages.json index 854d38d..6969a38 100644 --- a/data/extensions/jsr@javascriptrestrictor/_locales/ru/messages.json +++ b/data/extensions/jsr@javascriptrestrictor/_locales/ru/messages.json @@ -72,7 +72,7 @@ "description": "Column headding in the popup detailed JSS shield" }, "FingerprintQualityLabel": { - "message": "⤷ Количество API, недобросовестно используемых для фингерпринтинга на странице: ", + "message": "⤷ Количество API, вызываемых страницей, которые можно использовать для отпечатков пальцев: ", "description": "This text is displayed in the popup as additional information from FPD" }, "popupDefaultLevelHelpText": { @@ -686,7 +686,7 @@ "message": "Выключено" }, "jssgroupWASMDisabledDescription": { - "message": "Выключить создание малой лжи с помощью WebAssembly." + "message": "Не создавайте маленькую ложь в WebAssembly, используйте более медленный JavaScript." }, "jssgroupWASMPassive": { "message": "Пассивно" @@ -1378,7 +1378,7 @@ "description": "Text shown in options during configuaration of the parameters of FPD" }, "FPDSeverityNone": { - "message": "Нет", + "message": "Отсутствует или незначительна", "description": "The level of the number of detected APIs misusable for fingerprinting" }, "FPDSeverityLow": { @@ -1481,5 +1481,76 @@ "FPDReportMissingData": { "message": "ОШИБКА: отсутствуют данные, невозможно создать отчет! Попробуйте перезагрузить страницу и открыть отчет заново.", "description": "Text shown if the windows cannot communicate with the internals of the extension" + }, + "JSSBuiltinExceptions": { + "message": "Предустановленные твики дляJavaScript Shield" + }, + "FPDReportTrackCallersFailed": { + "message": "Невозможно отслеживать вызывающие сценарии из-за ошибки. $errorFromBrowser$", + "placeholders": { + "errorFromBrowser": { + "content": "$1" + } + } + }, + "MV3BrokenFeatures": { + "message": "Из-за строгих ограничений, налагаемых <a href=\"$MV3URL$\" target=\"_blank\">Google's Manifest V3</a>, некоторые функции JShelter (например, сетевая защита и обнаружение отпечатков пальцев в режиме блокировки) не будут работать на последних браузерах основанных на Chromium (включая ваш), а другие могут быть менее надежными, чем были в прошлом и по-прежнему находятся на Firefox.", + "placeholders": { + "mv3url": { + "content": "https://jshelter.org/mv3/" + } + } + }, + "FPDReportTrackCallersRestart": { + "message": "Перезагрузка отслеживания вызова сценариев" + }, + "JSSBuiltinExceptionsDomain": { + "message": "Домен" + }, + "JSSBuiltinExceptionsLevels": { + "message": "Уровни" + }, + "JSSBuiltinExceptionsLevelsSeparator": { + "message": ", " + }, + "JSSBuiltinExceptionsChanges": { + "message": "Правки" + }, + "JSSBuiltinExceptionsReason": { + "message": "Причина" + }, + "FPDReportTrackCallersWaiting": { + "message": "Обнаружение вызова скрипта в процессе. Подождите, пожалуйста." + }, + "MV3DevmodeRequired": { + "message": "Из-за жестких ограничений, введенных <a href=\"$MV3URL$\" target=\"_blank\">Google's Manifest V3</a>, JShelter и другие расширения браузера не могут больше работать на Chromium-основанные браузеры (включая ваш) если вы не включите <em>Developer mode</em> в <strong>chrome://extensions</strong> (<a href=\"$INFOURL$\" target=\"_blank\">больше информации на сайте разработчиков Google</a>).", + "placeholders": { + "mv3url": { + "content": "https://jshelter.org/mv3/" + }, + "infourl": { + "content": "https://developer.chrome.com/docs/extensions/reference/api/userScripts#chrome_versions_prior_to_138_developer_mode_toggle" + } + } + }, + "FPDReportRefresh": { + "message": "Обновить отчет" + }, + "FPDReportTrackCallers": { + "message": "Отслеживание вызываемых сценариев" + }, + "FPDReportForgetTraces": { + "message": "Скрыть текущих абонентов" + }, + "MV3AllowUserScriptsRequired": { + "message": "Из-за строгих ограничений, налагаемых <a href=\"$MV3URL$\" target=\"_blank\">манифестом Google V3</a>, JShelter и другие расширения браузера больше не могут работать в браузерах на базе Chromium (включая ваш), если вы не включите переключатель <em>Разрешить пользовательские скрипты</em> на странице JShelter, доступной по адресу <strong>chrome://extensions</strong> (<a href=\"$INFOURL$\" target=\"_blank\">дополнительная информация на сайте разработчиков Google</a>).", + "placeholders": { + "mv3url": { + "content": "https://jshelter.org/mv3/" + }, + "infourl": { + "content": "https://developer.chrome.com/docs/extensions/reference/api/userScripts#chrome_versions_138_and_newer_allow_user_scripts_toggle" + } + } } } diff --git a/data/extensions/jsr@javascriptrestrictor/background.js b/data/extensions/jsr@javascriptrestrictor/background.js index 019b76c..12afcde 100644 --- a/data/extensions/jsr@javascriptrestrictor/background.js +++ b/data/extensions/jsr@javascriptrestrictor/background.js @@ -22,11 +22,15 @@ // along with this program. If not, see <https://www.gnu.org/licenses/>. // -var tab_status = {}; -var tab_urls = {}; +// depends on /nscl/common/CachedStorage.js + +CachedStorage.init({ + tab_status: {}, + tab_urls: {}, +}); function updateBadge(text, tabid) { - browser.browserAction.setBadgeText({text: text, tabId: tabid}); + actionApi.setBadgeText({text: text, tabId: tabid}); } // get active tab and pass it @@ -46,6 +50,7 @@ function tabUpdate(tabid, changeInfo) { } let current_level = getCurrentLevelJSON(url); tab_urls[tabid] = url; + CachedStorage.save(); return current_level; } // on tab reload or tab change, update metadata @@ -93,11 +98,17 @@ function cspRequestProcessor(details) { // page context, subject to the page's CSP. Code inserted as script tags isn't subject // to script-src origins, it is, however, subject to the 'unsafe' group of script evaluation rules. if (typeof browser_polyfill_used !== "undefined" && browser_polyfill_used) { - browser.webRequest.onHeadersReceived.addListener(cspRequestProcessor, - {urls: ["<all_urls>"], - types: ["main_frame", "sub_frame"]}, - ["blocking", "responseHeaders"] - ); + try { + browser.webRequest.onHeadersReceived.addListener(cspRequestProcessor, + {urls: ["<all_urls>"], + types: ["main_frame", "sub_frame"]}, + ["blocking", "responseHeaders"] + ); + } catch (e) { + console.error(e); + // mv3, can't block! + // TODO: check whether we can do something about this eiter with DNR or new scripting APIs + } } // Communication channels @@ -130,7 +141,7 @@ browser.runtime.onConnect.addListener(connected); /** * Listen to detected API calls and update badge accordingly */ -fpDb.add_observer({ +fpdObservable.add_observer({ notify: function(api, tabid, type, count) { let group_name = wrapping_groups.wrapper_map[api]; if (!group_name) { diff --git a/data/extensions/jsr@javascriptrestrictor/code_builders.js b/data/extensions/jsr@javascriptrestrictor/code_builders.js index 8378168..1d17849 100644 --- a/data/extensions/jsr@javascriptrestrictor/code_builders.js +++ b/data/extensions/jsr@javascriptrestrictor/code_builders.js @@ -44,13 +44,13 @@ function enclose_wrapping2(code, name, params, call_with_window) { /** * Create code containing call of API counting function. */ -function create_counter_call(wrapper, type, fpdTrackCallers) { +function create_counter_call(wrapper, type) { let {parent_object, parent_object_property} = wrapper; let resource = `${parent_object}.${parent_object_property}`; let args = wrapper.report_args ? "args.map(x => JSON.stringify(x))" : "[]" return `if (fp_enabled && fp_${type}_count < 1000) { var stack = undefined; - if (${fpdTrackCallers}) { + if (fpdTrackCallers) { try { throw new Error("FPDCallerTracker"); } catch (e) { @@ -66,7 +66,7 @@ function create_counter_call(wrapper, type, fpdTrackCallers) { * This function create code (as string) that creates code that can be used to inject (or overwrite) * a function in the page context. */ -function define_page_context_function(fpdTrackCallers, wrapper) { +function define_page_context_function(wrapper) { let {parent_object, parent_object_property, original_function, replace_original_function} = wrapper; if (replace_original_function) { let lastDot = original_function.lastIndexOf("."); @@ -79,7 +79,7 @@ function define_page_context_function(fpdTrackCallers, wrapper) { var fp_call_count = 0; let replacementF = function(${wrapper.wrapping_function_args}) { try { - ${create_counter_call(wrapper, "call", fpdTrackCallers)} + ${create_counter_call(wrapper, "call")} } catch (e) { /* No action: let the wrapper continue uninterupted. TODO: let the user decide? */ }` @@ -142,7 +142,7 @@ function generate_assign_function_code(code_spec_obj) { /** * This function wraps object properties using WrapHelper.defineProperties(). */ -function generate_object_properties(fpdTrackCallers, code_spec_obj, fpd_only) { +function generate_object_properties(code_spec_obj, fpd_only) { var code = ` if (!("${code_spec_obj.parent_object_property}" in ${code_spec_obj.parent_object})) { // Do not wrap an object that is not defined, e.g. because it is experimental feature. @@ -163,7 +163,7 @@ function generate_object_properties(fpdTrackCallers, code_spec_obj, fpd_only) { var counting_wrapper = ` function(...args) { - ${create_counter_call(code_spec_obj, wrap_spec.property_name, fpdTrackCallers)} + ${create_counter_call(code_spec_obj, wrap_spec.property_name)} // checks type of underlying wrapper/definition and returns it (no changes to semantics) if (typeof (${fpd_only ? original_property : wrap_spec.property_value}) === 'function') { @@ -223,11 +223,11 @@ function generate_assignement(code_spec_obj) { /** * This function builds the wrapping code. */ -var build_code = function(fpdTrackCallers, wrapper, ...args) { +var build_code = function(wrapper, ...args) { let post_wrapping_functions = { - function_define: define_page_context_function.bind(null, fpdTrackCallers), + function_define: define_page_context_function, function_export: generate_assign_function_code, - object_properties: generate_object_properties.bind(null, fpdTrackCallers), + object_properties: generate_object_properties, delete_properties: generate_delete_properties, assign: generate_assignement, }; @@ -272,7 +272,7 @@ var build_code = function(fpdTrackCallers, wrapper, ...args) { ${wrapper.helping_code || ''}`; if (wrapper.wrapping_function_body){ - code += `${define_page_context_function(fpdTrackCallers, wrapper)}`; + code += `${define_page_context_function(wrapper)}`; } let build_post_normal = () => { @@ -287,7 +287,7 @@ var build_code = function(fpdTrackCallers, wrapper, ...args) { } // if not wrapped because of apply_if condition in post wrapping object, still needs to be wrapped for FPD if (code_spec.apply_if !== undefined && code_spec.code_type == "object_properties") { - code += "else {" + generate_object_properties(fpdTrackCallers, code_spec, true) + "}"; + code += "else {" + generate_object_properties(code_spec, true) + "}"; } } } @@ -298,7 +298,7 @@ var build_code = function(fpdTrackCallers, wrapper, ...args) { for (code_spec of wrapper["post_wrapping_code"]) { // if not wrapped because of apply_if condition in post wrapping object, still needs to be wrapped for FPD if (code_spec.apply_if !== undefined && code_spec.code_type == "object_properties") { - code += generate_object_properties(fpdTrackCallers,code_spec, true); + code += generate_object_properties(code_spec, true); } } } @@ -336,14 +336,14 @@ var build_code = function(fpdTrackCallers, wrapper, ...args) { /** * Transform wrapping arrays into injectable code. */ -function wrap_code(wrappers, fpdTrackCallers) { +function wrap_code(wrappers) { if (wrappers.length === 0) { return; // Nothing to wrap } let build = (wrapper) => { try { - return build_code(fpdTrackCallers, build_wrapping_code[wrapper[0]], wrapper.slice(1)); + return build_code(build_wrapping_code[wrapper[0]], wrapper.slice(1)); } catch (e) { console.error(e); return ""; @@ -418,6 +418,7 @@ function insert_wasm_code(code) { try { wasm_memory.grow(Math.ceil((needed_bytes - memory_size) / 65536)); } catch (e) { + console.warn("Failed to grow WASM memory, falling back to JS implementation", e); return false; } } @@ -429,6 +430,7 @@ function insert_wasm_code(code) { } Object.freeze(wasm); }).catch(e => { + console.warn("Failed to instantiate WASM farbling module, falling back to JS implementation", e); }); }).toString().replace("/* WASM_URL */", browser.runtime.getURL("farble.wasm")); @@ -443,17 +445,6 @@ function generate_code(wrapped_code) { // cross-wrapper globals let xrayWindow = window; // the "privileged" xray window wrapper in Firefox - { - let {port} = env; - function updateCount(wrapperName, wrapperType, wrapperArgs, stack) { - port.postMessage({ - wrapperName, - wrapperType, - wrapperArgs, - stack - }); - } - } let WrapHelper; // xray boundary helper { const XRAY = (xrayWindow.top !== unwrappedWindow.top && typeof XPCNativeWrapper !== "undefined"); @@ -741,12 +732,23 @@ function generate_code(wrapped_code) { // add flag variable that determines whether messages should be sent let fp_enabled = false; - - try { - // WRAPPERS // - } finally { - // cleanup environment if necessary - } + + (function () { + let {port} = env; + function updateCount(wrapperName, wrapperType, wrapperArgs, stack) { + port.postMessage({ + wrapperName, + wrapperType, + wrapperArgs, + stack + }); + } + try { + // WRAPPERS // + } finally { + // cleanup environment if necessary + } + })(); // after injection code completed, allow messages (calls from wrappers won't be counted) fp_enabled = true; @@ -755,4 +757,3 @@ function generate_code(wrapped_code) { return `(${code})();`; } - diff --git a/data/extensions/jsr@javascriptrestrictor/common.css b/data/extensions/jsr@javascriptrestrictor/common.css index 32cfb74..8fcaa70 100644 --- a/data/extensions/jsr@javascriptrestrictor/common.css +++ b/data/extensions/jsr@javascriptrestrictor/common.css @@ -13,7 +13,7 @@ --light-logo-contrast: #333333; /* Very dark grey */ --dark-logo: #e76f51; /* Logo dark red */ --dark-logo-contrast: white; - --help-icon-color: white; + --help-icon-color: white; --help-icon-background: blue; --title-color: var(--dark-logo); --good-news: darkgreen; /* Combine with background color */ @@ -22,6 +22,7 @@ --button-text-color: black; --button-background-active-color: var(--light-logo); --button-text-active-color: black; + --button-text-disabled-color: #888; --button-background-hover-color: #c9c9c9; /* low dark grey */ --button-text-hover-color: black; --menu-color: blue; @@ -29,6 +30,7 @@ --attention-color: var(--dark-logo-contrast); --attention-background: var(--dark-logo); --slider-bg-color: white; + --slider-text-color: black; --slider-off-color: gray; --slider-on-color: var(--light-logo); --slider-text-color: black; @@ -39,7 +41,7 @@ --text-color: #e8e6e3; /* Almost white */ --background-color: #181a1b; /* Very very dark grey */ --background-color-input: var(--background-color); - --help-icon-color: blue; + --help-icon-color: blue; --help-icon-background: white; --title-color: var(--light-logo); --good-news: lightgreen; @@ -72,7 +74,11 @@ button { color: var(--button-text-color); } -button:hover { +button:disabled { + color: var(--button-text-disabled-color); +} + +button:hover:not(:disabled) { cursor: pointer; background-color: var(--button-background-hover-color); color: var(--button-text-hover-color); @@ -181,7 +187,7 @@ a:hover, a:active { background-color: var(--slider-bg-color); -webkit-transition: .4s; transition: .4s; - color: var(--off-color); + color: var(--slider-text-color); content:"__MSG_ShieldOffSlider__"; } @@ -224,3 +230,22 @@ input:checked + .slider:before { font-weight: bold; } +.alert a, .alert a:visited { + color: var(--help-icon-color); +} + +:root.mv3 .mv2 { + display: none !important; +} + +:root.mv2 .mv3 { + display: none !important; +} + +#mv3-devmode-required { + border: 2px solid red; +} + +:root.devmode #mv3-devmode-required { + display: none; +}
\ No newline at end of file diff --git a/data/extensions/jsr@javascriptrestrictor/document_start.js b/data/extensions/jsr@javascriptrestrictor/document_start.js index 22f201e..c78aa73 100644 --- a/data/extensions/jsr@javascriptrestrictor/document_start.js +++ b/data/extensions/jsr@javascriptrestrictor/document_start.js @@ -26,46 +26,30 @@ var wrappersPort; var pageConfiguration = null; -function configureInjection({currentLevel, fpdWrappers, fpdTrackCallers, domainHash}) { + +function wrapWindow(currentLevel, fpdWrappers, wrappersConf) { + const code = fp_assemble_injection(currentLevel, fpdWrappers, ` + init(${JSON.stringify(wrappersConf)}); + `); + return patchWindow(code); +} + +function configureInjection({currentLevel, fpdWrappers, fpdTrackCallers, domainHash, incognitoHash, portId}) { if (pageConfiguration) return; // one shot pageConfiguration = {currentLevel}; - if(browser.extension.inIncognitoContext){ - // Redefine the domainHash for incognito context: - // Compute the SHA256 hash of the original hash so that the incognito hash is: - // * significantly different to the original domainHash, - // * computationally difficult to revert, - // * the same for all incognito windows (for the same domain). - var hash = sha256.create(); - hash.update(JSON.stringify(domainHash)); - domainHash = hash.hex(); - } - // Append argument reporting setting to JSS wrapper definitions - fp_append_reporting_to_jss_wrappers(fpdWrappers); - // Generate wrapping code - var code = wrap_code(currentLevel.wrappers, fpdTrackCallers); - // Generate FPD wrapping code - if (fpdWrappers) { - if (!code) { - code = fp_generate_wrapping_code(fpdWrappers, fpdTrackCallers); - } - else { - code = fp_update_wrapping_code(code, currentLevel.wrappers, fpdWrappers, fpdTrackCallers); - } + if (browser.extension.inIncognitoContext) { + domainHash = incognitoHash; } - // Insert farbling WASM module into wrapped code if enabled, only when farbling is actually used - if (currentLevel.wasm && (currentLevel.audiobuffer === 1 || currentLevel.htmlcanvaselement === 1)) { - code = insert_wasm_code(code); - } - - var aleaCode = `(() => { - var domainHash = ${JSON.stringify(domainHash)}; - ${crc16} - ${alea} - var prng = alea(domainHash); // Do not use this in wrappers, create your own prng to generate repeatable sequences - ${code} - })()`; try { - wrappersPort = patchWindow(aleaCode); + const wrappersConf = { + fpdTrackCallers, + domainHash, + }; + wrappersPort = portId ? patchWindow({portId}) : wrapWindow(currentLevel, fpdWrappers, wrappersConf); + + // initialize in case the userScript API already injected + wrappersPort.postMessage(wrappersConf); + wrappersPort.onMessage = msg => { if (msg.wrapperName) { let {wrapperName, wrapperType, wrapperArgs, stack} = msg; @@ -78,10 +62,14 @@ function configureInjection({currentLevel, fpdWrappers, fpdTrackCallers, domainH stack: stack, }); } + if (msg.init) { + // initialize on late demand + return wrappersConf; + } } return true; } catch (e) { - console.error(e, `Trying to run\n${aleaCode}`) + console.error(e, "Trying to initialize wrappers."); } return false; } @@ -94,7 +82,7 @@ function configureInjection({currentLevel, fpdWrappers, fpdTrackCallers, domainH */ if ("configuration" in window) { configureInjection(configuration); -} else { +} else if ("sendSyncMessage" in browser.runtime) { // not in mv3 chrome /// Get current level configuration from the background script configureInjection(browser.runtime.sendSyncMessage({ message: "get wrapping for URL", diff --git a/data/extensions/jsr@javascriptrestrictor/fp_code_builders.js b/data/extensions/jsr@javascriptrestrictor/fp_code_builders.js index 0d98e9f..e906d46 100644 --- a/data/extensions/jsr@javascriptrestrictor/fp_code_builders.js +++ b/data/extensions/jsr@javascriptrestrictor/fp_code_builders.js @@ -109,7 +109,7 @@ var additional_wrappers = [ * * \returns Injectable code created from FPD wrappers. */ -function fp_generate_from_wrappers(fpd_wrappers, fpdTrackCallers) { +function fp_generate_from_wrappers(fpd_wrappers) { // define wrapper for each FPD endpoint (using default JSS definition of wrappers) let tmp_build_wrapping_code = {}; for (let wrap_item of fpd_wrappers) { @@ -134,7 +134,7 @@ function fp_generate_from_wrappers(fpd_wrappers, fpdTrackCallers) { let fp_wrapped_codes = {}; for (let build_item in tmp_build_wrapping_code) { try { - fp_wrapped_codes[build_item] = build_code(fpdTrackCallers, tmp_build_wrapping_code[build_item]); + fp_wrapped_codes[build_item] = build_code(tmp_build_wrapping_code[build_item]); } catch (e) { console.error(e); fp_wrapped_codes[build_item] = ""; @@ -152,10 +152,10 @@ function fp_generate_from_wrappers(fpd_wrappers, fpdTrackCallers) { * * \returns Modified injectable code that also contains FPD wrapping code. */ -function fp_update_wrapping_code(code, jss_wrappers, fpd_wrappers, fpdTrackCallers) { +function fp_update_wrapping_code(code, jss_wrappers, fpd_wrappers) { const jss_wrapper_resources = jss_wrappers.map(x => x[0]); const fpd_wrappers_filtered = fpd_wrappers.filter(w => !jss_wrapper_resources.includes(w[0])); - const fpd_wrapped_codes = fp_generate_from_wrappers(fpd_wrappers_filtered, fpdTrackCallers); + const fpd_wrapped_codes = fp_generate_from_wrappers(fpd_wrappers_filtered); const fpd_code = joinWrappingCode(Object.values(fpd_wrapped_codes)); return code.replace("// FPD_S\n", `// FPD_S\n${additional_wrappers_init_code} ${fpd_code}`); } @@ -167,8 +167,8 @@ function fp_update_wrapping_code(code, jss_wrappers, fpd_wrappers, fpdTrackCalle * * \returns Injectable code containing only FPD wrapping code. */ -function fp_generate_wrapping_code(fpd_wrappers, fpdTrackCallers) { - let fpd_wrapped_codes = fp_generate_from_wrappers(fpd_wrappers, fpdTrackCallers); +function fp_generate_wrapping_code(fpd_wrappers) { + let fpd_wrapped_codes = fp_generate_from_wrappers(fpd_wrappers); return generate_code("// FPD_S\n" + additional_wrappers_init_code + joinWrappingCode(Object.values(fpd_wrapped_codes)) + "\n// FPD_E"); } @@ -297,3 +297,45 @@ function fp_append_reporting_to_jss_wrappers(fpd_wrappers) { } } } + +function fp_assemble_injection(currentLevel, fpdWrappers, initializer = '') { + // Append argument reporting setting to JSS wrapper definitions + fp_append_reporting_to_jss_wrappers(fpdWrappers); + // Generate wrapping code + let code = wrap_code(currentLevel.wrappers); + // Generate FPD wrapping code + if (fpdWrappers) { + if (!code) { + code = fp_generate_wrapping_code(fpdWrappers); + } + else { + code = fp_update_wrapping_code(code, currentLevel.wrappers, fpdWrappers); + } + } + // Insert farbling WASM module into wrapped code if enabled, only when farbling is actually used + if (currentLevel.wasm && (currentLevel.audiobuffer === 1 || currentLevel.htmlcanvaselement === 1)) { + code = insert_wasm_code(code); + } + initializer ||= ` + { + env.port.onMessage = msg => { + return msg.domainHash && init(msg); + }; + let conf = env.port.postMessage({init: true}); + if (conf?.domainHash) init(conf); + } + `; + var injected_code = `(() => { + let inited = false; + const init = ({domainHash, fpdTrackCallers}) => { + if (inited) return; + inited = true; + ${crc16} + ${alea} + var prng = alea(domainHash); // Do not use this in wrappers, create your own prng to generate repeatable sequences + ${code} + }; + ${initializer} + })()`; + return injected_code; +} diff --git a/data/extensions/jsr@javascriptrestrictor/fp_detect_background.js b/data/extensions/jsr@javascriptrestrictor/fp_detect_background.js index a60c2fd..0e4e27d 100644 --- a/data/extensions/jsr@javascriptrestrictor/fp_detect_background.js +++ b/data/extensions/jsr@javascriptrestrictor/fp_detect_background.js @@ -49,21 +49,32 @@ * \ingroup FPD */ + +// START persistent configuration data + /** * FPD enable flag. Evaluate only when active. */ var fpDetectionOn; /** - * Associtive array of hosts, that are currently among trusted ones. + * Associative array of hosts, that are currently among trusted ones. */ var fpdWhitelist = {}; /** - * Associtive array of settings supported by this module. + * Associative array of settings supported by this module. */ var fpdSettings = {}; +// END persistent configuration data + + +/** + * Array containing names of unsupported wrappers that should be treated like supported ones during groups evaluation. + */ +const exceptionWrappers = ["CSSStyleDeclaration.prototype.fontFamily"]; + /** * API logs database of following structure: * "tabId" : { @@ -80,41 +91,49 @@ var fpdSettings = {}; * *values in quotations are substituted by concrete names * */ -var fpDb = new Observable(); +var fpdObservable = new Observable(); -/** - * Stores latest evaluation statistics for every examined tab. This statistics contains data about accessed groups and resources - * and their weights after evaluation. It can be used for debugging or as an informative statement in GUI. - * It also contains flag for every tab to limit number of notifications. - */ -var latestEvals = {}; +// depends on /nscl/common/CachedStorage.js +// session-bound globals +var fpdGlobals = CachedStorage.init({ + + fpDb: {}, /** - * Parsed groups object containing necessary group information needed for evaluation. - * Groups are indexed by level and name for easier and faster access. + * Contains information about tabs current state. */ -var fpGroups = {}; + availableTabs: {}, + + /** + * Store if the user was already notified about fingerprinting activity in the tab. + */ + stopNotifyFlag: {}, /** - * Object containing information about unsupported wrappers for given browser. + * A global variable shared with level_cache that controls the collection of calling scripts for FPD + * report. */ -var unsupportedWrappers = {}; + fpd_track_callers_tab: null, + +}); /** - * Array containing names of unsupported wrappers that should be treated like supported ones during groups evaluation. + * Stores latest evaluation statistics for every examined tab. This statistics contains data about accessed groups and resources + * and their weights after evaluation. It can be used for debugging or as an informative statement in GUI. + * It also contains flag for every tab to limit number of notifications. */ -var exceptionWrappers = ["CSSStyleDeclaration.prototype.fontFamily"]; +let latestEvals = {}; /** - * Contains information about tabs current state. + * Parsed groups object containing necessary group information needed for evaluation. + * Groups are indexed by level and name for easier and faster access. */ -var availableTabs = {}; +let fpGroups = {}; /** - * A global variable shared with level_cache that controls the collection of calling scripts for FPD - * report. + * Object containing information about unsupported wrappers for given browser. */ -var fpd_track_callers_tab = undefined; +let unsupportedWrappers = {}; /** * Definition of settings supported by this module. @@ -199,18 +218,20 @@ const FPD_DEF_SETTINGS = { } }; + +var actionApi = browser.browserAction || browser.action; // unify default color of popup badge background between different browsers -browser.browserAction.setBadgeBackgroundColor({color: "#6E7378"}); +actionApi.setBadgeBackgroundColor({color: "#6E7378"}); // unify default color of popup badge text between different browsers -if (typeof browser.browserAction.setBadgeTextColor === "function") { - browser.browserAction.setBadgeTextColor({color: "#FFFFFF"}); +if (typeof actionApi.setBadgeTextColor === "function") { + actionApi.setBadgeTextColor({color: "#FFFFFF"}); } /** * This function initializes FPD module, loads configuration from storage, and registers listeners needed for fingerprinting detection. */ -function initFpd() { +async function initFpd() { // fill up fpGroups object with necessary data for evaluation for (let groupsLevel in fp_levels.groups) { fpGroups[groupsLevel] = fpGroups[groupsLevel] || {}; @@ -222,8 +243,9 @@ function initFpd() { } } - // load configuration and settings from storage - fpdLoadConfiguration(); + // load configuration and settings from storage + await fpdLoadConfiguration(); + await fpdGlobals; // take care of unsupported resources for cross-browser behaviour uniformity balanceUnsupportedWrappers(); @@ -261,16 +283,26 @@ function initFpd() { browser.storage.sync.set({"fpdSettings": fpdSettings}); }); - // listen for requests through webRequest API and decide whether to block them - browser.webRequest.onBeforeRequest.addListener( - fpdRequestCancel, - {urls: ["<all_urls>"]}, - ["blocking"] - ); - + if (self.window) { + // Firefox, event page has window + // listen for requests through webRequest API and decide whether to block them + browser.webRequest.onBeforeRequest.addListener( + fpdRequestCancel, + {urls: ["<all_urls>"]}, + ["blocking"] + ); + } else { + // mv3: cannot block! + // hide behavior settings + // TODO: shame Google in the setting panels for the missing feature + delete FPD_DEF_SETTINGS["behavior"]; + // force passive behavior setting + fpdSettings.behavior = 0; + browser.storage.sync.set({"fpdSettings": fpdSettings}); + } // listen for navigation events to initiate storage clearing of fingerprinting web pages browser.webNavigation.onBeforeNavigate.addListener((details) => { - if (latestEvals[details.tabId] && latestEvals[details.tabId].stopNotifyFlag && fpdSettings.behavior > 0) { + if (latestEvals[details.tabId] && stopNotifyFlag[details.tabId] && fpdSettings.behavior > 0) { // clear storages (using content script) for every frame in this tab if (details.tabId >= 0) { browser.tabs.sendMessage(details.tabId, { @@ -285,7 +317,7 @@ function initFpd() { browser.tabs.query({}).then(function(results) { results.forEach(function(tab) { availableTabs[tab.id] = tab; - fpDb[tab.id] = {}; + fpDb[tab.id] ||= {}; periodicEvaluation(tab.id, 500); }); }); @@ -302,6 +334,7 @@ function initFpd() { * It checks which resources are unsupported for given browser and adjust criteria of loaded FPD configuration accordingly. */ function balanceUnsupportedWrappers() { + if (!self.window) return false; // mv3 service worker? // object containing groups effected by criteria adjustment and corresponding deleted subgroups var effectedGroups = {}; @@ -625,7 +658,7 @@ function evaluateGroupsCriteria(rootGroup, level, tabId) { * type (Type of resource - call/get/set) * accesses (Number of accesses to specified resource) */ -function evaluateResourcesCriteria(resource, groupName, level, tabId) { +function evaluateResourcesCriteria(resource, groupName, level, tabId) { // all result objects for given resource (set/get/call) var scores = []; @@ -633,7 +666,7 @@ function evaluateResourcesCriteria(resource, groupName, level, tabId) { var resourceObj = fp_levels.wrappers[level].filter((x) => (x.resource == resource))[0]; var groupsArray = resourceObj.groups.filter((x) => (x.group == groupName)); - // evaluate every retrieved group object + // evaluate every retrieved group object for (let groupObj of groupsArray) { // initialize new result object var res = {} @@ -737,8 +770,10 @@ function evaluateResourcesCriteria(resource, groupName, level, tabId) { * \param message Receives full message. * \param sender Sender of the message. */ -function fpdCommonMessageListener(record, sender) { - if (record) { +async function fpdCommonMessageListener(record, sender) { + if (!record) return; + await fpdGlobals; + try { switch (record.purpose) { case "fp-detection": // check objects existance => if do not exist, create new one @@ -758,7 +793,7 @@ function fpdCommonMessageListener(record, sender) { // increase counter for total accesses fpCounterObj["total"] = fpCounterObj["total"] || 0; fpCounterObj["total"] += 1; - fpDb.update(record.resource, sender.tab.id, record.type, fpCounterObj["total"]); + fpdObservable.update(record.resource, sender.tab.id, record.type, fpCounterObj["total"]); // Track callers fpCounterObj["callers"] = fpCounterObj["callers"] || {}; @@ -868,6 +903,11 @@ function fpdCommonMessageListener(record, sender) { fpd_track_callers_tab = undefined; } } + } catch (e) { + console.error(e, "Error processing", record); + throw e; + } finally { + CachedStorage.save(); } } @@ -898,12 +938,12 @@ function fpdRequestCancel(requestDetails) { /** * The function that loads module configuration from sync storage. */ -function fpdLoadConfiguration() { - browser.storage.sync.get(["fpDetectionOn", "fpdWhitelist", "fpdSettings"]).then(function(result) { - fpDetectionOn = result.fpDetectionOn ? true : false; - fpdWhitelist = result.fpdWhitelist ? result.fpdWhitelist : {}; - fpdSettings = result.fpdSettings ? result.fpdSettings : {}; - }); +async function fpdLoadConfiguration() { + ({fpDetectionOn, fpdWhitelist, fpdSettings} = await browser.storage.sync.get({ + fpDetectionOn: false, + fpdWhitelist: {}, + fpdSettings: {}, + })); } /** @@ -915,7 +955,7 @@ function fpdLoadConfiguration() { function processGroupsRecursive(input, groupsLevel) { fpGroups[groupsLevel][input.name] = {}; fpGroups[groupsLevel][input.name]["description"] = input["description"] || ""; - + // criteria missing => set implicit criteria fpGroups[groupsLevel][input.name]["criteria"] = input["criteria"] || [{value:1, weight:1}]; fpGroups[groupsLevel][input.name]["items"] = {}; @@ -1031,6 +1071,7 @@ function refreshDb(tabId) { if (availableTabs[tabId] && availableTabs[tabId].timerId) { clearTimeout(availableTabs[tabId].timerId); } + CachedStorage.save(); } /** @@ -1067,18 +1108,19 @@ function evaluateFingerprinting(tabId) { latestEvals[tabId].severity = evalResult.severity; } - // modify color of browserAction + // modify color of action icon if (evalResult.severity[2]) { - browser.browserAction.setBadgeBackgroundColor({color: evalResult.severity[2], tabId: tabId}); + actionApi.setBadgeBackgroundColor({color: evalResult.severity[2], tabId: tabId}); } // if actualWeight of root group is higher than 0 => reactive phase and applying measures if (evalResult.weight) { // create notification for user if behavior is "notification" or higher (only once for every tab load) - if (fpdSettings.notifications == 1 && !latestEvals[tabId].stopNotifyFlag) { - latestEvals[tabId].stopNotifyFlag = true; + if (fpdSettings.notifications == 1 && !stopNotifyFlag[tabId]) { notifyFingerprintBlocking(tabId); + stopNotifyFlag[tabId] = true; + CachedStorage.save(); } // block request and clear cache data only if "blocking" behavior is set diff --git a/data/extensions/jsr@javascriptrestrictor/fp_levels.js b/data/extensions/jsr@javascriptrestrictor/fp_levels.js index bfe7124..91f9aa9 100644 --- a/data/extensions/jsr@javascriptrestrictor/fp_levels.js +++ b/data/extensions/jsr@javascriptrestrictor/fp_levels.js @@ -104,6 +104,7 @@ var fp_levels = {}; var orig_levels_updated_callbacks = levels_updated_callbacks; levels_updated_callbacks = []; orig_levels_updated_callbacks.forEach((it) => it()); + await updateUserScripts(); } } loadFpdConfig(); diff --git a/data/extensions/jsr@javascriptrestrictor/helpers.js b/data/extensions/jsr@javascriptrestrictor/helpers.js index caf65a9..9e184f2 100644 --- a/data/extensions/jsr@javascriptrestrictor/helpers.js +++ b/data/extensions/jsr@javascriptrestrictor/helpers.js @@ -54,7 +54,7 @@ function byteToHex(byte) { */ function gen_random32() { var array = new Uint32Array(1); - window.crypto.getRandomValues(array); + self.crypto.getRandomValues(array); return array[0]; } @@ -63,7 +63,7 @@ function gen_random32() { */ function gen_random64() { var array = new Uint32Array(2); - window.crypto.getRandomValues(array); + self.crypto.getRandomValues(array); return BigInt("" + array[0] + array[1]); } @@ -72,7 +72,7 @@ function gen_random64() { */ function generateId(len = 32) { var arr = new Uint8Array(len / 2); - window.crypto.getRandomValues(arr); + self.crypto.getRandomValues(arr); return Array.from(arr, byteToHex).join(""); } @@ -286,3 +286,18 @@ function correctSettingsForRemovedPermissions(permissions, settings, definition) }); }); }; +{ + + // hide incompatible UI + if (browser.tabs && self.document) { + const mv = "executeScript" in browser.tabs ? 2 : 3; + document.documentElement.classList.add(`mv${mv}`); + let devmode = false; + try { + devmode = !!browser.userScripts; + } catch (e) { + } + document.documentElement.classList.toggle("devmode", devmode); + } + +}
\ No newline at end of file diff --git a/data/extensions/jsr@javascriptrestrictor/level_cache.js b/data/extensions/jsr@javascriptrestrictor/level_cache.js index 8be5129..c1fd292 100644 --- a/data/extensions/jsr@javascriptrestrictor/level_cache.js +++ b/data/extensions/jsr@javascriptrestrictor/level_cache.js @@ -30,7 +30,8 @@ */ function getContentConfiguration(url, frameId, tabId) { return new Promise(resolve => { - function resolve_promise() { + async function resolve_promise() { + await updateUserScripts(); let level = getCurrentLevelJSON(url); if (level.is_default && frameId !== 0) { /** @@ -58,14 +59,16 @@ function getContentConfiguration(url, frameId, tabId) { * gets the user-defined settings for domain B but the iframe from domain C * is set with the level of domain A. */ - level = getCurrentLevelJSON(TabCache.get(tabId).url); + level = getCurrentLevelJSON((await TabCache.async(tabId)).url); } - let {domainHash} = Hashes.getFor(url); + let {domainHash, incognitoHash} = await Hashes.getFor(url); resolve({ currentLevel: level, fpdWrappers: isFpdOn(tabId) ? fp_levels.page_wrappers[fpdSettings.detection] : [], fpdTrackCallers: fpd_track_callers_tab === tabId, - domainHash + domainHash, + incognitoHash, + portId: wrappersPortId, }); } if (levels_initialised && fp_levels_initialised) { @@ -85,12 +88,16 @@ function getContentConfiguration(url, frameId, tabId) { * Returns the promise with the message returned to the content script. */ function contentScriptLevelSetter(message, {frameId, tab}) { + if (!tab) { + // privileged source, bail out + return; + } switch (message.message) { case "get wrapping for URL": return getContentConfiguration(message.url, frameId, tab.id) } } -browser.runtime.onSyncMessage.addListener(contentScriptLevelSetter); +browser.runtime.onSyncMessage?.addListener(contentScriptLevelSetter); /** @@ -102,10 +109,19 @@ browser.runtime.onSyncMessage.addListener(contentScriptLevelSetter); DocStartInjection.register(async ({url, frameId, tabId}) => { let configuration = await getContentConfiguration(url, frameId, tabId); - return ` + if (browser.tabs.executeScript) { + // mv2 + return ` window.configuration = ${JSON.stringify(configuration)}; if (typeof configureInjection === "function") configureInjection(configuration); `; + } + + return { + callback: "configureInjection", + assign: "configuration", + data: configuration, + }; }); /** @@ -123,6 +139,17 @@ NavCache.onUrlChanged.addListener(({tabId, frameId, previousUrl, url}) => { (async () => { let configuration = await getContentConfiguration(url, frameId, tabId); if (configuration.currentLevel.windowname) { + if (!browser.tabs.executeScript && browser.scripting) { + browser.scripting.executeScript({ + func: () => { window.name = ""; }, + injectImmediately: true, + target: { + frameIds: [frameId], + tabId + } + }); + return; + } browser.tabs.executeScript(tabId, { code: `window.name = "";`, frameId, diff --git a/data/extensions/jsr@javascriptrestrictor/levels.js b/data/extensions/jsr@javascriptrestrictor/levels.js index 1786695..ac92528 100644 --- a/data/extensions/jsr@javascriptrestrictor/levels.js +++ b/data/extensions/jsr@javascriptrestrictor/levels.js @@ -58,17 +58,17 @@ var wrapping_groups = { { short: browser.i18n.getMessage("jssgroupPoor"), description: browser.i18n.getMessage("jssgroupTimePoorDescription"), - config: [2, false], + config: [10, false], }, { short: browser.i18n.getMessage("jssgroupLow"), description: browser.i18n.getMessage("jssgroupTimeLowDescription"), - config: [1, false], + config: [100, false], }, { short: browser.i18n.getMessage("jssgroupHigh"), description: browser.i18n.getMessage("jssgroupTimeHighDescription"), - config: [0, true], + config: [1000, true], }, ], wrappers: [ @@ -78,6 +78,8 @@ var wrapping_groups = { "PerformanceEntry.prototype", // ECMA "window.Date", + // TEMPORAL + "Temporal.Now.instant", // DOM "Event.prototype.timeStamp", // GP @@ -724,8 +726,9 @@ modify_wrapping_groups(); * @param String to the object which presence to check. */ function is_api_undefined(api) { + if (!self.window) return false; // mv3 service worker? let s = api.split("."); - let last = window; + let last = self; for (p of s) { try { if (last[p] === undefined) { @@ -912,7 +915,7 @@ let levels_initialised = false; // Initialized in updateLevels() let fp_levels_initialised = false; // Initialized in fp_levels.js/loadFpdConfig() let levels_updated_callbacks = []; var tweak_domains = tweak_domains || {}; -function updateLevels(res) { +async function updateLevels(res) { init_levels(); custom_levels = res["custom_levels"] || {}; for (let key in custom_levels) { @@ -963,11 +966,111 @@ function updateLevels(res) { var orig_levels_updated_callbacks = levels_updated_callbacks; levels_updated_callbacks = []; orig_levels_updated_callbacks.forEach((it) => it()); + await updateUserScripts(); } } browser.storage.sync.get(null).then(updateLevels); +var wrappersPortId = null; +var cachedSiteSettings = null; +async function updateUserScripts() { + if (browser.tabs.executeScript || !("userScripts" in browser) || self.window) { + return; + } + if (!cachedSiteSettings) { + ({wrappersPortId, cachedSiteSettings} = await + browser.storage.local.get(["wrappersPortId", "cachedSiteSettings"])); + } + siteSettings = JSON.stringify({domains, fpdWhitelist, fpdOn: fpDetectionOn && fpdSettings.detection}); + if (siteSettings == cachedSiteSettings) { + return; + } + cachedSiteSettings = siteSettings; + const confCache = new Map(); + const allGlobs = new Set(); + const entries = Object.entries(domains); + entries.push(["*", default_level]); + let count = 0; + for (const [domain, l] of entries) { + if (l.tweaks && !l.wrappers) { + l.wrappers = wrapping_groups.get_wrappers(l); + } + const fpdOn = fpDetectionOn && !isFpdWhitelisted(domain); + const confKey = JSON.stringify([l.wrappers, fpdOn]); + let conf = confCache.get(confKey); + const glob = `*.${domain}`; + if (!conf) { + const fpdWrappers = fpdOn ? fp_levels.page_wrappers[fpdSettings.detection] : []; + const injection = fp_assemble_injection(l, fpdWrappers); + conf = { + id: `L:${l.level_id}-FPD:${fpdOn}-C:${count++}`, + injection, + includeGlobs: [glob], + excludeGlobs: [], + }; + confCache.set(confKey, conf); + } else { + conf.includeGlobs.push(glob); + } + if (domain == '*') { // default level + conf.excludeGlobs = [... allGlobs].filter(g => !conf.includeGlobs.includes(g)); + conf.includeGlobs = []; + conf.matches = ["<all_urls>"]; + break; + } + allGlobs.add(glob); + const imply = `.${domain}`; + for (const otherConf of confCache.values()) { + if (otherConf === conf) continue; + const otherImplied = otherConf.includeGlobs.filter(g => g !== glob && g.endsWith(imply)); + for (const impliedGlob of otherImplied) { + conf.excludeGlobs.push(impliedGlob); + } + const otherImplies = otherConf.includeGlobs.filter(g => glob.endsWith(g.replace('*', ''))); + for (const implyingGlob of otherImplies) { + otherConf.excludeGlobs.push(implyingGlob); + } + } + } + + const usTemplate = { + runAt: "document_start", + allFrames: true, + world: "MAIN", + }; + const globs2matches = globs => [... new Set(globs)].map(g => `*://${g}/*`); + + const scripts = []; + for (const conf of confCache.values()) { + const {portId, code} = patchWindow({ + portId: wrappersPortId, + code: conf.injection, + }); + if (wrappersPortId !== portId) { + wrappersPortId = portId; + } + browser.storage.local.set({cachedSiteSettings, wrappersPortId}); + const {id, includeGlobs, excludeGlobs} = conf; + const opts = { + id, + matches: conf.matches || globs2matches(includeGlobs), + excludeMatches: globs2matches(excludeGlobs), + }; + const debugCode = `console.info("Injecting wrapper for " + document.URL + ": " + JSON.stringify(${JSON.stringify(opts)}) + ", ${portId}.");`; + opts.js = [{code: debugCode}, {code}]; + scripts.push( + Object.assign(opts, usTemplate) + ); + } + + await browser.userScripts.unregister(); + if (scripts.length) { + await browser.userScripts.register(scripts); + } +} + function changedLevels(changed, area) { + if (area !== "sync") return; browser.storage.sync.get(null).then(updateLevels); } browser.storage.onChanged.addListener(changedLevels); @@ -1033,7 +1136,7 @@ function getCurrentLevelJSON(url) { for (let domain of subDomains.reverse()) { if (domain in domains) { let l = domains[domain]; - if (l.tweaks) { + if (l.tweaks && !l.wrappers) { l.wrappers = wrapping_groups.get_wrappers(l); } return l; diff --git a/data/extensions/jsr@javascriptrestrictor/manifest.json b/data/extensions/jsr@javascriptrestrictor/manifest.json index ce1e7ff..34c1c5a 100644 --- a/data/extensions/jsr@javascriptrestrictor/manifest.json +++ b/data/extensions/jsr@javascriptrestrictor/manifest.json @@ -6,6 +6,7 @@ "nscl/service/TabCache.js", "nscl/service/NavCache.js", "nscl/service/DocStartInjection.js", + "nscl/common/CachedStorage.js", "nscl/common/log.js", "nscl/common/uuid.js", "nscl/common/SyncMessage.js", @@ -24,7 +25,8 @@ "level_cache.js", "http_shield_firefox.js", "http_shield_common.js" - ] + ], + "persistent": false }, "browser_action": { "browser_style": true, @@ -89,6 +91,7 @@ "wrappingS-SENSOR-LIGHT.js", "wrappingS-SENSOR-MAGNET.js", "wrappingS-SENSOR-ORIENT.js", + "wrappingS-TEMPORAL.js", "wrappingS-VR.js", "wrappingS-WEBA.js", "wrappingS-WEBGL.js", @@ -134,11 +137,11 @@ "browsingData" ], "short_name": "JShelter", - "version": "0.17", + "version": "0.21", "browser_specific_settings": { "gecko": { "id": "jsr@javascriptrestrictor", - "strict_min_version": "78.0a1" + "strict_min_version": "115.0" }, "gecko_android": {} } diff --git a/data/extensions/jsr@javascriptrestrictor/nscl/common/CachedStorage.js b/data/extensions/jsr@javascriptrestrictor/nscl/common/CachedStorage.js new file mode 100644 index 0000000..6b1a727 --- /dev/null +++ b/data/extensions/jsr@javascriptrestrictor/nscl/common/CachedStorage.js @@ -0,0 +1,143 @@ +/* + * NoScript Commons Library + * Reusable building blocks for cross-browser security/privacy WebExtensions. + * Copyright (C) 2020-2024 Giorgio Maone <https://maone.net> + * + * SPDX-License-Identifier: GPL-3.0-or-later + * + * This program is free software: you can redistribute it and/or modify it under + * the terms of the GNU General Public License as published by the Free Software + * Foundation, either version 3 of the License, or (at your option) any later + * version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along with + * this program. If not, see <https://www.gnu.org/licenses/>. + */ + +var CachedStorage = (() => { + const scopes = new WeakMap(); + + const DEFER_DELAY = 1000; + let deferredTasks = null; + const performTasks = async () => { + for (let t of deferredTasks) t(); + deferredTasks = null; + }; + const deferTasks = (...tasks) => { + if (!deferredTasks) { + deferredTasks = tasks; + setTimeout(performTasks, DEFER_DELAY); + } else { + deferredTasks.push(...tasks); + } + }; + + const addNameSpace = (nameSpace, properties, keys) => { + const prefix = nameSpace ? `${nameSpace}.` : ""; + const nameSpacedProps = {}; + for (const key of keys) { + nameSpacedProps[`${prefix}${key}`] = properties[key]; + } + return nameSpacedProps; + }; + const removeNameSpace = (nameSpace, properties) => { + if (!nameSpace) return properties; + const len = nameSpace.length + 1; + const props = {}; + for (const [key, val] of Object.entries(properties)) { + props[key.substring(len)] = val; + } + return props; + }; + + return { + async init( + properties = null, + nameSpace = "", + scope = null, + storageType = "session" + ) { + if (!properties) { + console.warn("CachedStorage.init(): no properties!"); + return null; + } + + scope ??= (nameSpace && globalThis[nameSpace]) || globalThis; + + for (let p in properties) { + if (p in scope) { + // already initialized + return scope; + } + break; + } + + if (!(storageType in browser.storage)) { + console.warn( + `CachedStorage.init(): no browser.storage.${storageType}, falling back to vanilla properties` + ); + return Object.assign(scope, properties); + } + + const keys = Object.keys(properties); + if (nameSpace) { + properties = addNameSpace(nameSpace, properties, keys); + } else { + nameSpace = ""; + } + + let metadata = scopes.get(scope); + if (!metadata) { + scopes.set(scope, (metadata = { storage: {} })); + } + + const ns = (metadata.storage[storageType] ??= new Map()).get(nameSpace); + if (ns) { + for (const key of keys) ns.add(key); + } else { + metadata.storage[storageType].set(nameSpace, new Set(keys)); + } + return Object.assign( + scope, + removeNameSpace( + nameSpace, + await browser.storage[storageType].get(properties) + ) + ); + }, + async save(scope = globalThis, defer = false) { + const metadata = scopes.get(scope); + if (!metadata) { + console.warn( + `CacheStorage.save(): metadata not found for scope ${scope}!` + ); + return false; + } + + if (metadata.deferredSave) return; + if ((defer ||= Date.now() - metadata.lastSaved < 20)) { + metadata.deferredSave = true; + return Promise.resolve( + deferTasks(() => { + metadata.deferredSave = false; + this.save(scope); + }) + ); + } + + const savingTasks = []; + for (const [storageType, ns] of Object.entries(metadata.storage)) { + for (const [nameSpace, keys] of ns.entries()) { + const properties = addNameSpace(nameSpace, scope, keys); + savingTasks.push(browser.storage[storageType].set(properties)); + } + } + metadata.lastSaved = Date.now(); + return await Promise.allSettled(savingTasks); + }, + }; +})(); diff --git a/data/extensions/jsr@javascriptrestrictor/nscl/common/SyncMessage.js b/data/extensions/jsr@javascriptrestrictor/nscl/common/SyncMessage.js index af83b76..db98d6f 100644 --- a/data/extensions/jsr@javascriptrestrictor/nscl/common/SyncMessage.js +++ b/data/extensions/jsr@javascriptrestrictor/nscl/common/SyncMessage.js @@ -1,7 +1,7 @@ /* * NoScript Commons Library * Reusable building blocks for cross-browser security/privacy WebExtensions. - * Copyright (C) 2020-2023 Giorgio Maone <https://maone.net> + * Copyright (C) 2020-2024 Giorgio Maone <https://maone.net> * * SPDX-License-Identifier: GPL-3.0-or-later * @@ -18,249 +18,598 @@ * this program. If not, see <https://www.gnu.org/licenses/>. */ +// depends on /nscl/common/uuid.js +// depends on /nscl/common/SyncMessage/request.json +// depends on /nscl/common/SyncMessage/response.json + "use strict"; -(() => { - let MOZILLA = "mozSystem" in XMLHttpRequest.prototype; - let ENDPOINT_ORIGIN = "https://[ff00::]"; - let ENDPOINT_PREFIX = `${ENDPOINT_ORIGIN}/nscl/${browser.runtime.getURL("syncMessage")}?`; +if (!["onSyncMessage", "sendSyncMessage"].some((m) => browser.runtime[m])) { + const MOZILLA = + self.XMLHttpRequest && "mozSystem" in self.XMLHttpRequest.prototype; + + const INTERNAL_PATH = "/nscl/common/SyncMessage/"; + + const MANIFEST = browser.runtime.getManifest(); + const USE_INTERNAL_URIS = MANIFEST.web_accessible_resources + ?.some(({ resources }) => + resources.includes(`${INTERNAL_PATH}*`) + ); + const IPV6_DUMMY_ENDPOINT = "https://[ff00::]"; + const BASE_PREFIX = browser.runtime.getURL(INTERNAL_PATH); + // We cannot use BASE_PREFIX w/ internal URIs for requests (yet?) because + // neither DNR nor webRequest nor ServiceWorker intercept our own extension URLs :( + const REQUEST_PREFIX = `${IPV6_DUMMY_ENDPOINT}/${BASE_PREFIX}request.json?`; + // But we can redirect to extension URLs on MV3 + const RESPONSE_PREFIX = USE_INTERNAL_URIS ? BASE_PREFIX + "response.json?" : "data:application/json,"; + + const msgUrl = (msgId) => `${REQUEST_PREFIX}id=${encodeURIComponent(msgId)}`; + + // https://github.com/w3c/webappsec-permissions-policy/blob/main/permissions-policy-explainer.md#appendix-big-changes-since-this-was-called-feature-policy + const allowSyncXhr = (policy) => + policy + .replace(/(?:[,;]\s*)?\b(?:sync-xhr\b[^;,]*)/gi, "") + .replace(/^\s*[;,]\s*/, ""); if (browser.webRequest) { - if (typeof browser.runtime.onSyncMessage !== "object") { - // Background Script side - - let pending = new Map(); - if (MOZILLA) { - // we don't care this is async, as long as it get called before the - // sync XHR (we are not interested in the response on the content side) - browser.runtime.onMessage.addListener((m, sender) => { - let wrapper = m.__syncMessage__; - if (!wrapper) return; - let {id} = wrapper; - pending.set(id, wrapper); - wrapper.result = Promise.resolve(notifyListeners(JSON.stringify(wrapper.payload), sender)); - return Promise.resolve(null); - }); + // Background script / event page / service worker + + const USE_SERVICE_WORKER = "onfetch" in self && REQUEST_PREFIX.startsWith(BASE_PREFIX); + + let anyMessageYet = false; + + const retries = new Set(); + + // we don't care this is async, as long as it get called before the + // sync XHR (we are not interested in the response on the content side) + browser.runtime.onMessage.addListener((m, sender) => { + let wrapper = m.__syncMessage__; + if (!wrapper) return; + if(wrapper.retry) { + const retryKey = `${sender.tab.id}:${sender.frameId}:${sender.origin}@${sender.url}`; + let retried = retries.has(retryKey); + if (retried) { + retries.delete(retryKey); + } else { + retries.add(retryKey); + } + return Promise.resolve(!retried); + } + if (wrapper.release) { + suspender.release(wrapper.id); + } else if ("payload" in wrapper) { + anyMessageYet = true; + wrapper.result = Promise.resolve( + notifyListeners(JSON.stringify(wrapper.payload), sender) + ); + suspender.hold(wrapper); } + return Promise.resolve(null); + }); - let tabUrlCache = new Map(); - let asyncResults = new Map(); - let tabRemovalListener = null; - let CANCEL = {cancel: true}; - let {TAB_ID_NONE} = browser.tabs; + const asyncResults = new Map(); + const ret = (r) => ({ + redirectUrl: `${ + RESPONSE_PREFIX + }${ + encodeURIComponent(JSON.stringify(r)) + }`, + }); + const res = (payload) => ({ payload }); + const err = (e) => ({ error: { message: e.message, stack: e.stack } }); - let onBeforeRequest = request => { try { - let {url, tabId} = request; - let params = new URLSearchParams(url.split("?")[1]); - let msgId = params.get("id"); - if (asyncResults.has(msgId)) { - return asyncRet(msgId); + const LOOP_RET = ret({ loop: 1 }); + + const asyncRet = (msgId) => { + let chunks = asyncResults.get(msgId); + let chunk = chunks.shift(); + let more = chunks.length; + if (more === 0) { + asyncResults.delete(msgId); + suspender.release(msgId); + } + return ret({ chunk, more }); + }; + + const CHUNK_SIZE = 500000; // Work around any browser-dependent URL limit + const storeAsyncRet = (msgId, r) => { + r = JSON.stringify(r); + const len = r === undefined ? 0 : r.length; + const chunksCount = Math.ceil(len / CHUNK_SIZE); + const chunks = []; + for (let j = 0; j < chunksCount; j++) { + chunks.push(r.substr(j * CHUNK_SIZE, CHUNK_SIZE)); + } + asyncResults.set(msgId, chunks); + }; + + const listeners = new Set(); + function notifyListeners(msg, sender) { + // Just like in the async runtime.sendMessage() API, + // we process the listeners in order until we find a not undefined + // result, then we return it (or undefined if none returns anything). + for (let l of listeners) { + try { + let result = l(JSON.parse(msg), sender); + if (result !== undefined) return result; + } catch (e) { + console.error("%o processing message %o from %o", e, msg, sender); } - let msg = params.get("msg"); - - if (MOZILLA || tabId === TAB_ID_NONE) { - // this shoud be a mozilla suspension request - if (pending.has(msgId)) { - let wrapper = pending.get(msgId); - pending.delete(msgId); - return (async () => { + } + } + + const url2MsgId = url => new URLSearchParams(url.split("?")[1])?.get("id"); + class Suspender { + #pending = new Map(); + constructor(init) { + init.apply(this); + } + async hold(wrapper) { + this.#pending.set(wrapper.id, wrapper); + } + release(id) { + this.#pending.delete(id); + } + get(id) { + return this.#pending.get(id); + } + } + + const suspender = + USE_SERVICE_WORKER + ? new Suspender(function() { + // MV3 with service worker + addEventListener("fetch", event => { + const msgId = url2MsgId(event.request.url); + if (!msgId) return; + const wrapper = this.get(msgId); + this.release(msgId); + event.respondWith((async () => new Response(await wrapper.result))()); + }); + }) + : browser.declarativeNetRequest && !MOZILLA + ? (() => { + // MV3 + const DNR_BASE_ID = 65535; + const DNR_BASE_PRIORITY = 1000; + let lastRuleId = DNR_BASE_ID; + const msg2redirector = new Map(); + const { redirectUrl } = LOOP_RET; + const resourceTypes = ["xmlhttprequest"]; + + const createRedirector = async ( + urlFilter, + redirectUrl, + options + ) => { + const DEFAULT_OPTIONS = { + ruleSet: "Session", + priority: DNR_BASE_PRIORITY + 10, + addRules: [], + removeRuleIds: [] + } + let { ruleSet, priority, addRules, removeRuleIds } = Object.assign( + {}, + DEFAULT_OPTIONS, + options + ); + + const rule = { + id: ++lastRuleId, + priority, + action: { + type: "redirect", + redirect: { url: redirectUrl }, + }, + condition: { + urlFilter, + resourceTypes, + }, + }; + + + addRules.push(rule); + const method = `update${ruleSet}Rules`; + await browser.declarativeNetRequest[method]({ + addRules, + removeRuleIds, + }); + + return lastRuleId; + }; + + const removeRedirector = (redirId) => { + browser.declarativeNetRequest.updateSessionRules({ + removeRuleIds: [redirId], + }); + }; + + (async () => { + const allowSyncXhrRules = [ + { + id: ++lastRuleId, + priority: DNR_BASE_PRIORITY, + action: { + type: "modifyHeaders", + // Note: notwithstanding poor documentation, looks like in modern browsers + // permissions-policy overrides (document|feature)-policy, & DNR appending + // to the header overrides the restrictive token despite inheritance rules, + // making the following hack work, quite surprisingly and nicely (i.e. + // other policies, if present, remain effective). + responseHeaders: [ + { + header: "permissions-policy", + operation: "append", + value: "sync-xhr=*", + }, + ], + }, + condition: { + resourceTypes: ["main_frame", "sub_frame"], + }, + }, + ]; + + for (const ruleSet of ["Dynamic", "Session"]) { + try { + const removeRuleIds = ( + await browser.declarativeNetRequest[`get${ruleSet}Rules`]() + ) + .map((r) => r.id) + .filter((id) => id >= DNR_BASE_ID); + const options = { + ruleSet, + priority: DNR_BASE_PRIORITY, + addRules: allowSyncXhrRules, + removeRuleIds, + }; + await createRedirector( + `|${REQUEST_PREFIX}*`, + redirectUrl, + options + ); + } catch (e) { + console.error(e, "Error initializing SyncMessage DNR responders."); + } + } + + })(); + + return { + async hold(wrapper) { + let result; + try { + result = ret(res(await wrapper.result)); + } catch (e) { + result = ret(err(e)); + } + const { id } = wrapper; + const urlFilter = `|${msgUrl(wrapper.id)}`; + const redirId = await createRedirector(urlFilter, result.redirectUrl); + msg2redirector.set(id, redirId); + }, + release(id) { + const redirId = msg2redirector.get(id); + if (!redirId) return; + msg2redirector.delete(id); + removeRedirector(redirId); + }, + }; + })() + : new Suspender(function() { + // MV2 + const CANCEL = { cancel: true }; + const onBeforeRequest = (request) => { try { - return ret({payload: (await wrapper.result)}); + const { url } = request; + const shortUrl = url.replace(REQUEST_PREFIX, ""); + const msgId = url2MsgId(url); + + const chromeRet = (resultReady) => { + const r = resultReady + ? asyncRet(msgId) // promise was already resolved + : LOOP_RET; + return r; + }; + + if (asyncResults.has(msgId)) { + return chromeRet(true); + } + + const wrapper = this.get(msgId); + + if (!wrapper) { + return anyMessageYet + ? CANCEL // cannot reconcile with any pending message, abort + : LOOP_RET; // never received any message yet, retry + } + + if (MOZILLA) { + // this should be a mozilla suspension request + return (async () => { + try { + return ret(res(await wrapper.result)); + } catch (e) { + return ret(err(e)); + } finally { + this.release(msgId); + } + })(); + } + + // CHROMIUM from now on + // On Chromium, if the promise is not resolved yet, + // we redirect the XHR to the same URL (hence same msgId) + // while the result get cached for asynchronous retrieval + wrapper.result.then( + (r) => storeAsyncRet(msgId, res(r)), + (e) => storeAsyncRet(msgId, err(e)) + ); + return chromeRet(asyncResults.has(msgId)); } catch (e) { - return ret({error: { message: e.message, stack: e.stack }}); + console.error(e); + return CANCEL; } - })() - } - return CANCEL; // otherwise, bail - } - // CHROME from now on - let documentUrl = request.initiator || params.get("url"); - let {frameAncestors, frameId} = request; - let isTop = frameId === 0 || !!params.get("top"); - let tabUrl = frameAncestors && frameAncestors.length - && frameAncestors[frameAncestors.length - 1].url; - - if (!tabUrl) { - if (isTop) { - tabUrlCache.set(tabId, tabUrl = documentUrl); - if (!tabRemovalListener) { - browser.tabs.onRemoved.addListener(tabRemovalListener = tab => { - tabUrlCache.delete(tab.id); - }); - } - } else { - tabUrl = tabUrlCache.get(tabId); - } - } - let sender = { - tab: { - id: tabId, - url: tabUrl - }, - frameId, - url: documentUrl, - timeStamp: Date.now() - }; - - if (!(msg !== null && sender)) { - return CANCEL; - } - let result = Promise.resolve(notifyListeners(msg, sender)); - // On Chromium, if the promise is not resolved yet, - // we redirect the XHR to the same URL (hence same msgId) - // while the result get cached for asynchronous retrieval - result.then(r => storeAsyncRet(msgId, r)); - return asyncResults.has(msgId) - ? asyncRet(msgId) // promise was already resolved - : {redirectUrl: url.replace( - /&redirects=(\d+)|$/, // redirects count to avoid loop detection - (all, count) => `&redirects=${parseInt(count) + 1 || 1}`)}; - } catch(e) { - console.error(e); - return CANCEL; - } }; - - let onHeaderReceived = request => { - let replaced = ""; - let {responseHeaders} = request; - let rxFP = /^feature-policy$/i; - for (let h of request.responseHeaders) { - if (rxFP.test(h.name)) { - h.value = h.value.replace(/\b(sync-xhr\s+)([^*][^;]*)/g, - (all, m1, m2) => replaced = - `${m1}${m2.replace(/'none'/, '')} 'self'` - ); - } - } - return replaced ? {responseHeaders} : null; - }; + }; - let ret = r => ({redirectUrl: `data:application/json,${encodeURIComponent(JSON.stringify(r))}`}); + const NOP = () => {}; + let bug1899786 = NOP; + if (browser.webRequest.filterResponseData) { + bug1899786 = (request) => { + // work-around for https://bugzilla.mozilla.org/show_bug.cgi?id=1899786 + let compressed = false, + xml = false; + for (const { name, value } of request.responseHeaders) { + switch (name.toLowerCase()) { + case "content-encoding": + if ( + compressed || + !(compressed = + /^(?:gzip|compress|deflate|br|zstd)$/i.test(value)) + ) { + continue; + } + break; + case "content-type": + if (xml || !(xml = /\bxml\b/i.test(value))) { + continue; + } + break; + default: + continue; + } + if (compressed && xml) { + console.log("Applying mozbug 1899786 work-around", request); + const filter = browser.webRequest.filterResponseData( + request.requestId + ); + filter.ondata = (e) => { + filter.write(e.data); + }; + filter.onstop = () => { + filter.close(); + }; + break; + } + } + }; + (async () => { + const version = parseInt( + (await browser.runtime.getBrowserInfo()).version + ); + if (version < 126) bug1899786 = NOP; + })(); + } - let asyncRet = msgId => { - let chunks = asyncResults.get(msgId); - let chunk = chunks.shift(); - let more = chunks.length; - if (more === 0) { - asyncResults.delete(msgId); - } - return ret({chunk, more}); - }; + const patchHeadersForXhr = MANIFEST.manifest_version < 3 + ? NOP // XHR don't need to bypass CSP in manifest V2 + : (request) => { + let replaced = false; + let replacedCSP = false; + const { responseHeaders } = request; + const CSP = "content-security-policy"; + const rxPolicy = /^(?:feature|permissions|document)-policy$/; + for (let h of responseHeaders) { + const name = h.name.toLowerCase(); + let value; + if (rxPolicy.test(name)) { + value = allowSyncXhr(h.value); + } else if (name == CSP) { + value = h.value.replace(/connect-src [^;]+/g, m => { + const tokens = new Set(m.split(/\s+/)); + tokens.delete("'none'"); + const msgSrc = new URL(REQUEST_PREFIX).origin; + tokens.has(msgSrc) || tokens.add(msgSrc); + return [...tokens].join(" "); + }); + replacedCSP = true; + } else { + continue; + } + if (value !== h.value) { + h.value = value; + replaced = true; + } + } + if (replaced) { + console.log("Patched responseHeaders", request.url, responseHeaders); // DEV_ONLY + if (replacedCSP) { + // We need to clear the header first, in order to avoid merging, see + // - https://searchfox.org/mozilla-central/source/toolkit/components/extensions/webrequest/WebRequest.sys.mjs#257 + // - https://bugzilla.mozilla.org/show_bug.cgi?id=1462989 + // This does NOT work (yet?) on MV3, see https://github.com/w3c/webextensions/issues/730 + responseHeaders.unshift({name: CSP, value: ""}); + } + return { responseHeaders }; + } + }; - const CHUNK_SIZE = 500000; // Work around any browser-dependent URL limit - let storeAsyncRet = (msgId, r) => { - r = JSON.stringify(r); - let len = r.length; - let chunksCount = Math.ceil(len / CHUNK_SIZE); - let chunks = []; - for (let j = 0; j < chunksCount; j++) { - chunks.push(r.substr(j * CHUNK_SIZE, CHUNK_SIZE)); - } - asyncResults.set(msgId, chunks); - }; + const onHeadersReceived = (request) => { + bug1899786(request); + return patchHeadersForXhr(request); + }; - let listeners = new Set(); - function notifyListeners(msg, sender) { - // Just like in the async runtime.sendMessage() API, - // we process the listeners in order until we find a not undefined - // result, then we return it (or undefined if none returns anything). - for (let l of listeners) { - try { - let result = l(JSON.parse(msg), sender); - if (result !== undefined) return result; - } catch (e) { - console.error("%o processing message %o from %o", e, msg, sender); - } - } - } - browser.runtime.onSyncMessage = Object.freeze({ - ENDPOINT_PREFIX, - addListener(l) { - listeners.add(l); - if (listeners.size === 1) { - browser.webRequest.onBeforeRequest.addListener(onBeforeRequest, + browser.webRequest.onBeforeRequest.addListener( + onBeforeRequest, { - urls: [`${ENDPOINT_PREFIX}*`], - types: ["xmlhttprequest"] + urls: [`${REQUEST_PREFIX}*`], + types: ["xmlhttprequest"], }, ["blocking"] ); - browser.webRequest.onHeadersReceived.addListener(onHeaderReceived, + browser.webRequest.onHeadersReceived.addListener( + onHeadersReceived, { urls: ["<all_urls>"], - types: ["main_frame", "sub_frame"] + types: ["main_frame", "sub_frame"], }, ["blocking", "responseHeaders"] ); + + + } + ); + + + browser.runtime.onSyncMessage = Object.freeze({ + BASE_PREFIX, + REQUEST_PREFIX, + RESPONSE_PREFIX, + addListener(l) { + listeners.add(l); + }, + removeListener(l) { + listeners.delete(l); + }, + hasListener(l) { + return listeners.has(l); + }, + isMessageRequest({type, url}) { + return ( + type === "xmlhttprequest" && + url.includes(INTERNAL_PATH) && + (url.includes(REQUEST_PREFIX) || url.includes(RESPONSE_PREFIX)) + ); + }, + }); + } else { + // Content Script side + { + // re-enable Sync XHR if disabled by featurePolicy + const allow = f => { + if (f.allow) { + const allowingValue = allowSyncXhr(f.allow); + if (f.allow != allowingValue) { + f.allow = allowingValue; + f.src = f.src; } - }, - removeListener(l) { - listeners.remove(l); - if (listeners.size === 0) { - browser.webRequest.onBeforeRequest.removeListener(onBeforeRequest); - browser.webRequest.onHeadersReceived.removeListener(onHeadersReceived); + } + }; + try { + // this is probably useless, but nontheless... + window.frameElement && allow(window.frameElement); + } catch (e) { + // SOP violation? + console.error(e); // DEV_ONLY + } + const mutationsCallback = records => { + for (var r of records) { + switch (r.type) { + case "attributes": + allow(r.target); + break; + case "childList": + [...r.addedNodes].forEach(allow); + break; } - }, - hasListener(l) { - return listeners.has(l); - }, - isMessageRequest(request) { - return request.type === "xmlhttprequest" && request.url.startsWith(ENDPOINT_PREFIX); } + }; + const observer = new MutationObserver(mutationsCallback); + observer.observe(document.documentElement, { + childList: true, + subtree: true, + attributeFilter: ["allow"], }); } - } else if (typeof browser.runtime.sendSyncMessage !== "function") { - // Content Script side - let uuid = () => (Math.random() * Date.now()).toString(16); - let docUrl = document.URL; - browser.runtime.sendSyncMessage = (msg, callback) => { - let msgId = `${uuid()},${docUrl}`; - let url = `${ENDPOINT_PREFIX}id=${encodeURIComponent(msgId)}` + - `&url=${encodeURIComponent(docUrl)}`; - if (window.top === window) { - // we add top URL information because Chromium doesn't know anything - // about frameAncestors - url += "&top=true"; - } - if (MOZILLA) { - // on Firefox we first need to send an async message telling the - // background script about the tab ID, which does not get sent - // with "privileged" XHR - browser.runtime.sendMessage( - {__syncMessage__: {id: msgId, payload: msg}} - ); - } - // then we send the payload using a privileged XHR, which is not subject - // to CORS but unfortunately doesn't carry any tab id except on Chromium + const docId = uuid(); + browser.runtime.sendSyncMessage = (msg) => { + let msgId = `${uuid()}:${docId}`; + let url = msgUrl(msgId); - url += `&msg=${encodeURIComponent(JSON.stringify(msg))}`; // adding the payload + const preSend = __syncMessage__ => browser.runtime.sendMessage({__syncMessage__}); + + // We first need to send an async message with both the payload + // and "trusted" sender metadata, along with an unique msgId to + // reconcile with in the retrieval phase via synchronous XHR + const preflight = preSend({ id: msgId, payload: msg }); + + // Now go retrieve the result! + const MAX_LOOPS = 1000; let r = new XMLHttpRequest(); + let result; let chunks = []; - for (;;) { + for (let loop = 0; ; ) { try { r.open("GET", url, false); r.send(null); - result = JSON.parse(r.responseText); + const rawResult = r.responseURL.startsWith(RESPONSE_PREFIX) + ? decodeURIComponent(r.responseURL.replace(RESPONSE_PREFIX, "")) + : r.responseText; + result = JSON.parse(rawResult); if ("chunk" in result) { - let {chunk, more} = result; + let { chunk, more } = result; chunks.push(chunk); if (more) { continue; } - result = JSON.parse(chunks.join('')); - } else { - if (result.error) throw result.error; - result = "payload" in result ? result.payload : result; + result = JSON.parse(chunks.join("")); + } else if (result.loop) { + if (++loop > MAX_LOOPS) { + console.debug( + "Too many loops (%s), look for deadlock conditions.", + loop + ); + throw new Error("Too many SyncMessage loops!"); + } + continue; + } else if (result.error) { + result.error = new Error(result.error.message + ` (${url})`, result.error); } - } catch(e) { - console.error(`syncMessage error in ${document.URL}: ${e.message} (response ${r.responseText})`); + } catch (e) { + console.error(e, + `SyncMessage ${msgId} error in ${document.URL}: ${e.message} (response ${url} - ${r.responseURL} - ${r.responseText})` + ); + result = { + error: new Error(`SyncMessage Error ${e.message}`, { cause: e }), + }; } break; } - if (callback) callback(result); - return result; + preSend({ id: msgId, release: true }); + if (result.error) { + if (document.featurePolicy && !document.featurePolicy?.allowsFeature("sync-xhr")) { + throw new Error(`SyncMessage fails on ${document.URL} because sync-xhr is not allowed!`); + } + if (document.readyState == "loading" && /Failed to load/.test(result.error.message)) { + window.stop(); + (async () => { + try { + await preflight; + browser.runtime.sendSyncMessage(msg); + } catch (e) { + console.error(e, `SyncMessage immediate retry failed on ${document.URL}!`); + if (!(await preSend({retry: true}))) { + return; + } + } + history.go(0); + })(); + } + throw result.error; + } + return result.payload; }; } -})(); +} diff --git a/data/extensions/jsr@javascriptrestrictor/nscl/common/SyncMessage/request.json b/data/extensions/jsr@javascriptrestrictor/nscl/common/SyncMessage/request.json new file mode 100644 index 0000000..679761f --- /dev/null +++ b/data/extensions/jsr@javascriptrestrictor/nscl/common/SyncMessage/request.json @@ -0,0 +1,5 @@ +{ + "error": { + "message": "SyncMessage responder did not work!" + } +} diff --git a/data/extensions/jsr@javascriptrestrictor/nscl/common/SyncMessage/response.json b/data/extensions/jsr@javascriptrestrictor/nscl/common/SyncMessage/response.json new file mode 100644 index 0000000..06a6b90 --- /dev/null +++ b/data/extensions/jsr@javascriptrestrictor/nscl/common/SyncMessage/response.json @@ -0,0 +1 @@ +{ "loop": 1 } diff --git a/data/extensions/jsr@javascriptrestrictor/nscl/common/log.js b/data/extensions/jsr@javascriptrestrictor/nscl/common/log.js index b71fbc5..e754e66 100644 --- a/data/extensions/jsr@javascriptrestrictor/nscl/common/log.js +++ b/data/extensions/jsr@javascriptrestrictor/nscl/common/log.js @@ -1,7 +1,7 @@ /* * NoScript Commons Library * Reusable building blocks for cross-browser security/privacy WebExtensions. - * Copyright (C) 2020-2023 Giorgio Maone <https://maone.net> + * Copyright (C) 2020-2024 Giorgio Maone <https://maone.net> * * SPDX-License-Identifier: GPL-3.0-or-later * @@ -18,20 +18,29 @@ * this program. If not, see <https://www.gnu.org/licenses/>. */ +"use strict"; { - let PREFIX = typeof browser === "object" && typeof importScripts === "undefined" + const PREFIX = typeof browser === "object" && typeof importScripts === "undefined" ? `[${browser.runtime.getManifest().name}]` : ''; - let debugCount = 0; + const startupTime = Date.now(); + let lastDebugTime = startupTime; + let ordinal = 1; - function log(msg, ...rest) { - console.log(`${PREFIX} ${msg}`, ...rest); - } + const getStack = () => new Error().stack.replace(/^(?:Error.*\n)?(?:.*\n){2}/, ""); - function debug(msg, ...rest) { - } - - function error(e, msg, ...rest) { - console.error(`${PREFIX} ${msg}`, ...rest, e, e.message, e.stack); - } + Object.assign(globalThis, { + log(msg, ...rest) { + console.log(`${PREFIX} ${msg}`, ...rest); + }, + debug(msg, ...rest) { + const ts = Date.now(); + const sinceStartup = ts - startupTime; + const elapsed = ts - lastDebugTime; + lastDebugTime = ts; + }, + error(e, msg, ...rest) { + console.error(e, `${PREFIX} ${msg}`, ...rest, getStack()); + }, + }); } diff --git a/data/extensions/jsr@javascriptrestrictor/nscl/common/sha256.js b/data/extensions/jsr@javascriptrestrictor/nscl/common/sha256.js index 73d2b66..b9bd614 100644 --- a/data/extensions/jsr@javascriptrestrictor/nscl/common/sha256.js +++ b/data/extensions/jsr@javascriptrestrictor/nscl/common/sha256.js @@ -1,7 +1,7 @@ /* * NoScript Commons Library * Reusable building blocks for cross-browser security/privacy WebExtensions. - * Copyright (C) 2020-2023 Giorgio Maone <https://maone.net> + * Copyright (C) 2020-2024 Giorgio Maone <https://maone.net> * * SPDX-License-Identifier: GPL-3.0-or-later * diff --git a/data/extensions/jsr@javascriptrestrictor/nscl/common/tld.js b/data/extensions/jsr@javascriptrestrictor/nscl/common/tld.js index 87bd6b0..ea82ab6 100644 --- a/data/extensions/jsr@javascriptrestrictor/nscl/common/tld.js +++ b/data/extensions/jsr@javascriptrestrictor/nscl/common/tld.js @@ -1,7 +1,7 @@ /* * NoScript Commons Library * Reusable building blocks for cross-browser security/privacy WebExtensions. - * Copyright (C) 2020-2023 Giorgio Maone <https://maone.net> + * Copyright (C) 2020-2024 Giorgio Maone <https://maone.net> * * SPDX-License-Identifier: GPL-3.0-or-later * @@ -77,7 +77,7 @@ var tld = (() => { } }; - const tlds = {"icann":{"ac":1,"com.ac":2,"edu.ac":2,"gov.ac":2,"net.ac":2,"mil.ac":2,"org.ac":2,"ad":1,"nom.ad":2,"ae":1,"co.ae":2,"net.ae":2,"org.ae":2,"sch.ae":2,"ac.ae":2,"gov.ae":2,"mil.ae":2,"aero":1,"accident-investigation.aero":2,"accident-prevention.aero":2,"aerobatic.aero":2,"aeroclub.aero":2,"aerodrome.aero":2,"agents.aero":2,"aircraft.aero":2,"airline.aero":2,"airport.aero":2,"air-surveillance.aero":2,"airtraffic.aero":2,"air-traffic-control.aero":2,"ambulance.aero":2,"amusement.aero":2,"association.aero":2,"author.aero":2,"ballooning.aero":2,"broker.aero":2,"caa.aero":2,"cargo.aero":2,"catering.aero":2,"certification.aero":2,"championship.aero":2,"charter.aero":2,"civilaviation.aero":2,"club.aero":2,"conference.aero":2,"consultant.aero":2,"consulting.aero":2,"control.aero":2,"council.aero":2,"crew.aero":2,"design.aero":2,"dgca.aero":2,"educator.aero":2,"emergency.aero":2,"engine.aero":2,"engineer.aero":2,"entertainment.aero":2,"equipment.aero":2,"exchange.aero":2,"express.aero":2,"federation.aero":2,"flight.aero":2,"fuel.aero":2,"gliding.aero":2,"government.aero":2,"groundhandling.aero":2,"group.aero":2,"hanggliding.aero":2,"homebuilt.aero":2,"insurance.aero":2,"journal.aero":2,"journalist.aero":2,"leasing.aero":2,"logistics.aero":2,"magazine.aero":2,"maintenance.aero":2,"media.aero":2,"microlight.aero":2,"modelling.aero":2,"navigation.aero":2,"parachuting.aero":2,"paragliding.aero":2,"passenger-association.aero":2,"pilot.aero":2,"press.aero":2,"production.aero":2,"recreation.aero":2,"repbody.aero":2,"res.aero":2,"research.aero":2,"rotorcraft.aero":2,"safety.aero":2,"scientist.aero":2,"services.aero":2,"show.aero":2,"skydiving.aero":2,"software.aero":2,"student.aero":2,"trader.aero":2,"trading.aero":2,"trainer.aero":2,"union.aero":2,"workinggroup.aero":2,"works.aero":2,"af":1,"gov.af":2,"com.af":2,"org.af":2,"net.af":2,"edu.af":2,"ag":1,"com.ag":2,"org.ag":2,"net.ag":2,"co.ag":2,"nom.ag":2,"ai":1,"off.ai":2,"com.ai":2,"net.ai":2,"org.ai":2,"al":1,"com.al":2,"edu.al":2,"gov.al":2,"mil.al":2,"net.al":2,"org.al":2,"am":1,"co.am":2,"com.am":2,"commune.am":2,"net.am":2,"org.am":2,"ao":1,"ed.ao":2,"gv.ao":2,"og.ao":2,"co.ao":2,"pb.ao":2,"it.ao":2,"aq":1,"ar":1,"bet.ar":2,"com.ar":2,"coop.ar":2,"edu.ar":2,"gob.ar":2,"gov.ar":2,"int.ar":2,"mil.ar":2,"musica.ar":2,"mutual.ar":2,"net.ar":2,"org.ar":2,"senasa.ar":2,"tur.ar":2,"arpa":1,"e164.arpa":2,"in-addr.arpa":2,"ip6.arpa":2,"iris.arpa":2,"uri.arpa":2,"urn.arpa":2,"as":1,"gov.as":2,"asia":1,"at":1,"ac.at":2,"co.at":2,"gv.at":2,"or.at":2,"sth.ac.at":3,"au":1,"com.au":2,"net.au":2,"org.au":2,"edu.au":2,"gov.au":2,"asn.au":2,"id.au":2,"info.au":2,"conf.au":2,"oz.au":2,"act.au":2,"nsw.au":2,"nt.au":2,"qld.au":2,"sa.au":2,"tas.au":2,"vic.au":2,"wa.au":2,"act.edu.au":3,"catholic.edu.au":3,"nsw.edu.au":3,"nt.edu.au":3,"qld.edu.au":3,"sa.edu.au":3,"tas.edu.au":3,"vic.edu.au":3,"wa.edu.au":3,"qld.gov.au":3,"sa.gov.au":3,"tas.gov.au":3,"vic.gov.au":3,"wa.gov.au":3,"schools.nsw.edu.au":4,"aw":1,"com.aw":2,"ax":1,"az":1,"com.az":2,"net.az":2,"int.az":2,"gov.az":2,"org.az":2,"edu.az":2,"info.az":2,"pp.az":2,"mil.az":2,"name.az":2,"pro.az":2,"biz.az":2,"ba":1,"com.ba":2,"edu.ba":2,"gov.ba":2,"mil.ba":2,"net.ba":2,"org.ba":2,"bb":1,"biz.bb":2,"co.bb":2,"com.bb":2,"edu.bb":2,"gov.bb":2,"info.bb":2,"net.bb":2,"org.bb":2,"store.bb":2,"tv.bb":2,"bd":2,"be":1,"ac.be":2,"bf":1,"gov.bf":2,"bg":1,"a.bg":2,"b.bg":2,"c.bg":2,"d.bg":2,"e.bg":2,"f.bg":2,"g.bg":2,"h.bg":2,"i.bg":2,"j.bg":2,"k.bg":2,"l.bg":2,"m.bg":2,"n.bg":2,"o.bg":2,"p.bg":2,"q.bg":2,"r.bg":2,"s.bg":2,"t.bg":2,"u.bg":2,"v.bg":2,"w.bg":2,"x.bg":2,"y.bg":2,"z.bg":2,"0.bg":2,"1.bg":2,"2.bg":2,"3.bg":2,"4.bg":2,"5.bg":2,"6.bg":2,"7.bg":2,"8.bg":2,"9.bg":2,"bh":1,"com.bh":2,"edu.bh":2,"net.bh":2,"org.bh":2,"gov.bh":2,"bi":1,"co.bi":2,"com.bi":2,"edu.bi":2,"or.bi":2,"org.bi":2,"biz":1,"bj":1,"africa.bj":2,"agro.bj":2,"architectes.bj":2,"assur.bj":2,"avocats.bj":2,"co.bj":2,"com.bj":2,"eco.bj":2,"econo.bj":2,"edu.bj":2,"info.bj":2,"loisirs.bj":2,"money.bj":2,"net.bj":2,"org.bj":2,"ote.bj":2,"resto.bj":2,"restaurant.bj":2,"tourism.bj":2,"univ.bj":2,"bm":1,"com.bm":2,"edu.bm":2,"gov.bm":2,"net.bm":2,"org.bm":2,"bn":1,"com.bn":2,"edu.bn":2,"gov.bn":2,"net.bn":2,"org.bn":2,"bo":1,"com.bo":2,"edu.bo":2,"gob.bo":2,"int.bo":2,"org.bo":2,"net.bo":2,"mil.bo":2,"tv.bo":2,"web.bo":2,"academia.bo":2,"agro.bo":2,"arte.bo":2,"blog.bo":2,"bolivia.bo":2,"ciencia.bo":2,"cooperativa.bo":2,"democracia.bo":2,"deporte.bo":2,"ecologia.bo":2,"economia.bo":2,"empresa.bo":2,"indigena.bo":2,"industria.bo":2,"info.bo":2,"medicina.bo":2,"movimiento.bo":2,"musica.bo":2,"natural.bo":2,"nombre.bo":2,"noticias.bo":2,"patria.bo":2,"politica.bo":2,"profesional.bo":2,"plurinacional.bo":2,"pueblo.bo":2,"revista.bo":2,"salud.bo":2,"tecnologia.bo":2,"tksat.bo":2,"transporte.bo":2,"wiki.bo":2,"br":1,"9guacu.br":2,"abc.br":2,"adm.br":2,"adv.br":2,"agr.br":2,"aju.br":2,"am.br":2,"anani.br":2,"aparecida.br":2,"app.br":2,"arq.br":2,"art.br":2,"ato.br":2,"b.br":2,"barueri.br":2,"belem.br":2,"bhz.br":2,"bib.br":2,"bio.br":2,"blog.br":2,"bmd.br":2,"boavista.br":2,"bsb.br":2,"campinagrande.br":2,"campinas.br":2,"caxias.br":2,"cim.br":2,"cng.br":2,"cnt.br":2,"com.br":2,"contagem.br":2,"coop.br":2,"coz.br":2,"cri.br":2,"cuiaba.br":2,"curitiba.br":2,"def.br":2,"des.br":2,"det.br":2,"dev.br":2,"ecn.br":2,"eco.br":2,"edu.br":2,"emp.br":2,"enf.br":2,"eng.br":2,"esp.br":2,"etc.br":2,"eti.br":2,"far.br":2,"feira.br":2,"flog.br":2,"floripa.br":2,"fm.br":2,"fnd.br":2,"fortal.br":2,"fot.br":2,"foz.br":2,"fst.br":2,"g12.br":2,"geo.br":2,"ggf.br":2,"goiania.br":2,"gov.br":2,"ac.gov.br":3,"al.gov.br":3,"am.gov.br":3,"ap.gov.br":3,"ba.gov.br":3,"ce.gov.br":3,"df.gov.br":3,"es.gov.br":3,"go.gov.br":3,"ma.gov.br":3,"mg.gov.br":3,"ms.gov.br":3,"mt.gov.br":3,"pa.gov.br":3,"pb.gov.br":3,"pe.gov.br":3,"pi.gov.br":3,"pr.gov.br":3,"rj.gov.br":3,"rn.gov.br":3,"ro.gov.br":3,"rr.gov.br":3,"rs.gov.br":3,"sc.gov.br":3,"se.gov.br":3,"sp.gov.br":3,"to.gov.br":3,"gru.br":2,"imb.br":2,"ind.br":2,"inf.br":2,"jab.br":2,"jampa.br":2,"jdf.br":2,"joinville.br":2,"jor.br":2,"jus.br":2,"leg.br":2,"lel.br":2,"log.br":2,"londrina.br":2,"macapa.br":2,"maceio.br":2,"manaus.br":2,"maringa.br":2,"mat.br":2,"med.br":2,"mil.br":2,"morena.br":2,"mp.br":2,"mus.br":2,"natal.br":2,"net.br":2,"niteroi.br":2,"nom.br":3,"not.br":2,"ntr.br":2,"odo.br":2,"ong.br":2,"org.br":2,"osasco.br":2,"palmas.br":2,"poa.br":2,"ppg.br":2,"pro.br":2,"psc.br":2,"psi.br":2,"pvh.br":2,"qsl.br":2,"radio.br":2,"rec.br":2,"recife.br":2,"rep.br":2,"ribeirao.br":2,"rio.br":2,"riobranco.br":2,"riopreto.br":2,"salvador.br":2,"sampa.br":2,"santamaria.br":2,"santoandre.br":2,"saobernardo.br":2,"saogonca.br":2,"seg.br":2,"sjc.br":2,"slg.br":2,"slz.br":2,"sorocaba.br":2,"srv.br":2,"taxi.br":2,"tc.br":2,"tec.br":2,"teo.br":2,"the.br":2,"tmp.br":2,"trd.br":2,"tur.br":2,"tv.br":2,"udi.br":2,"vet.br":2,"vix.br":2,"vlog.br":2,"wiki.br":2,"zlg.br":2,"bs":1,"com.bs":2,"net.bs":2,"org.bs":2,"edu.bs":2,"gov.bs":2,"bt":1,"com.bt":2,"edu.bt":2,"gov.bt":2,"net.bt":2,"org.bt":2,"bv":1,"bw":1,"co.bw":2,"org.bw":2,"by":1,"gov.by":2,"mil.by":2,"com.by":2,"of.by":2,"bz":1,"com.bz":2,"net.bz":2,"org.bz":2,"edu.bz":2,"gov.bz":2,"ca":1,"ab.ca":2,"bc.ca":2,"mb.ca":2,"nb.ca":2,"nf.ca":2,"nl.ca":2,"ns.ca":2,"nt.ca":2,"nu.ca":2,"on.ca":2,"pe.ca":2,"qc.ca":2,"sk.ca":2,"yk.ca":2,"gc.ca":2,"cat":1,"cc":1,"cd":1,"gov.cd":2,"cf":1,"cg":1,"ch":1,"ci":1,"org.ci":2,"or.ci":2,"com.ci":2,"co.ci":2,"edu.ci":2,"ed.ci":2,"ac.ci":2,"net.ci":2,"go.ci":2,"asso.ci":2,"xn--aroport-bya.ci":2,"int.ci":2,"presse.ci":2,"md.ci":2,"gouv.ci":2,"ck":2,"www.ck":1,"cl":1,"co.cl":2,"gob.cl":2,"gov.cl":2,"mil.cl":2,"cm":1,"co.cm":2,"com.cm":2,"gov.cm":2,"net.cm":2,"cn":1,"ac.cn":2,"com.cn":2,"edu.cn":2,"gov.cn":2,"net.cn":2,"org.cn":2,"mil.cn":2,"xn--55qx5d.cn":2,"xn--io0a7i.cn":2,"xn--od0alg.cn":2,"ah.cn":2,"bj.cn":2,"cq.cn":2,"fj.cn":2,"gd.cn":2,"gs.cn":2,"gz.cn":2,"gx.cn":2,"ha.cn":2,"hb.cn":2,"he.cn":2,"hi.cn":2,"hl.cn":2,"hn.cn":2,"jl.cn":2,"js.cn":2,"jx.cn":2,"ln.cn":2,"nm.cn":2,"nx.cn":2,"qh.cn":2,"sc.cn":2,"sd.cn":2,"sh.cn":2,"sn.cn":2,"sx.cn":2,"tj.cn":2,"xj.cn":2,"xz.cn":2,"yn.cn":2,"zj.cn":2,"hk.cn":2,"mo.cn":2,"tw.cn":2,"co":1,"arts.co":2,"com.co":2,"edu.co":2,"firm.co":2,"gov.co":2,"info.co":2,"int.co":2,"mil.co":2,"net.co":2,"nom.co":2,"org.co":2,"rec.co":2,"web.co":2,"com":1,"coop":1,"cr":1,"ac.cr":2,"co.cr":2,"ed.cr":2,"fi.cr":2,"go.cr":2,"or.cr":2,"sa.cr":2,"cu":1,"com.cu":2,"edu.cu":2,"org.cu":2,"net.cu":2,"gov.cu":2,"inf.cu":2,"cv":1,"com.cv":2,"edu.cv":2,"int.cv":2,"nome.cv":2,"org.cv":2,"cw":1,"com.cw":2,"edu.cw":2,"net.cw":2,"org.cw":2,"cx":1,"gov.cx":2,"cy":1,"ac.cy":2,"biz.cy":2,"com.cy":2,"ekloges.cy":2,"gov.cy":2,"ltd.cy":2,"mil.cy":2,"net.cy":2,"org.cy":2,"press.cy":2,"pro.cy":2,"tm.cy":2,"cz":1,"de":1,"dj":1,"dk":1,"dm":1,"com.dm":2,"net.dm":2,"org.dm":2,"edu.dm":2,"gov.dm":2,"do":1,"art.do":2,"com.do":2,"edu.do":2,"gob.do":2,"gov.do":2,"mil.do":2,"net.do":2,"org.do":2,"sld.do":2,"web.do":2,"dz":1,"art.dz":2,"asso.dz":2,"com.dz":2,"edu.dz":2,"gov.dz":2,"org.dz":2,"net.dz":2,"pol.dz":2,"soc.dz":2,"tm.dz":2,"ec":1,"com.ec":2,"info.ec":2,"net.ec":2,"fin.ec":2,"k12.ec":2,"med.ec":2,"pro.ec":2,"org.ec":2,"edu.ec":2,"gov.ec":2,"gob.ec":2,"mil.ec":2,"edu":1,"ee":1,"edu.ee":2,"gov.ee":2,"riik.ee":2,"lib.ee":2,"med.ee":2,"com.ee":2,"pri.ee":2,"aip.ee":2,"org.ee":2,"fie.ee":2,"eg":1,"com.eg":2,"edu.eg":2,"eun.eg":2,"gov.eg":2,"mil.eg":2,"name.eg":2,"net.eg":2,"org.eg":2,"sci.eg":2,"er":2,"es":1,"com.es":2,"nom.es":2,"org.es":2,"gob.es":2,"edu.es":2,"et":1,"com.et":2,"gov.et":2,"org.et":2,"edu.et":2,"biz.et":2,"name.et":2,"info.et":2,"net.et":2,"eu":1,"fi":1,"aland.fi":2,"fj":1,"ac.fj":2,"biz.fj":2,"com.fj":2,"gov.fj":2,"info.fj":2,"mil.fj":2,"name.fj":2,"net.fj":2,"org.fj":2,"pro.fj":2,"fk":2,"com.fm":2,"edu.fm":2,"net.fm":2,"org.fm":2,"fm":1,"fo":1,"fr":1,"asso.fr":2,"com.fr":2,"gouv.fr":2,"nom.fr":2,"prd.fr":2,"tm.fr":2,"avoues.fr":2,"cci.fr":2,"greta.fr":2,"huissier-justice.fr":2,"ga":1,"gb":1,"edu.gd":2,"gov.gd":2,"gd":1,"ge":1,"com.ge":2,"edu.ge":2,"gov.ge":2,"org.ge":2,"mil.ge":2,"net.ge":2,"pvt.ge":2,"gf":1,"gg":1,"co.gg":2,"net.gg":2,"org.gg":2,"gh":1,"com.gh":2,"edu.gh":2,"gov.gh":2,"org.gh":2,"mil.gh":2,"gi":1,"com.gi":2,"ltd.gi":2,"gov.gi":2,"mod.gi":2,"edu.gi":2,"org.gi":2,"gl":1,"co.gl":2,"com.gl":2,"edu.gl":2,"net.gl":2,"org.gl":2,"gm":1,"gn":1,"ac.gn":2,"com.gn":2,"edu.gn":2,"gov.gn":2,"org.gn":2,"net.gn":2,"gov":1,"gp":1,"com.gp":2,"net.gp":2,"mobi.gp":2,"edu.gp":2,"org.gp":2,"asso.gp":2,"gq":1,"gr":1,"com.gr":2,"edu.gr":2,"net.gr":2,"org.gr":2,"gov.gr":2,"gs":1,"gt":1,"com.gt":2,"edu.gt":2,"gob.gt":2,"ind.gt":2,"mil.gt":2,"net.gt":2,"org.gt":2,"gu":1,"com.gu":2,"edu.gu":2,"gov.gu":2,"guam.gu":2,"info.gu":2,"net.gu":2,"org.gu":2,"web.gu":2,"gw":1,"gy":1,"co.gy":2,"com.gy":2,"edu.gy":2,"gov.gy":2,"net.gy":2,"org.gy":2,"hk":1,"com.hk":2,"edu.hk":2,"gov.hk":2,"idv.hk":2,"net.hk":2,"org.hk":2,"xn--55qx5d.hk":2,"xn--wcvs22d.hk":2,"xn--lcvr32d.hk":2,"xn--mxtq1m.hk":2,"xn--gmqw5a.hk":2,"xn--ciqpn.hk":2,"xn--gmq050i.hk":2,"xn--zf0avx.hk":2,"xn--io0a7i.hk":2,"xn--mk0axi.hk":2,"xn--od0alg.hk":2,"xn--od0aq3b.hk":2,"xn--tn0ag.hk":2,"xn--uc0atv.hk":2,"xn--uc0ay4a.hk":2,"hm":1,"hn":1,"com.hn":2,"edu.hn":2,"org.hn":2,"net.hn":2,"mil.hn":2,"gob.hn":2,"hr":1,"iz.hr":2,"from.hr":2,"name.hr":2,"com.hr":2,"ht":1,"com.ht":2,"shop.ht":2,"firm.ht":2,"info.ht":2,"adult.ht":2,"net.ht":2,"pro.ht":2,"org.ht":2,"med.ht":2,"art.ht":2,"coop.ht":2,"pol.ht":2,"asso.ht":2,"edu.ht":2,"rel.ht":2,"gouv.ht":2,"perso.ht":2,"hu":1,"co.hu":2,"info.hu":2,"org.hu":2,"priv.hu":2,"sport.hu":2,"tm.hu":2,"2000.hu":2,"agrar.hu":2,"bolt.hu":2,"casino.hu":2,"city.hu":2,"erotica.hu":2,"erotika.hu":2,"film.hu":2,"forum.hu":2,"games.hu":2,"hotel.hu":2,"ingatlan.hu":2,"jogasz.hu":2,"konyvelo.hu":2,"lakas.hu":2,"media.hu":2,"news.hu":2,"reklam.hu":2,"sex.hu":2,"shop.hu":2,"suli.hu":2,"szex.hu":2,"tozsde.hu":2,"utazas.hu":2,"video.hu":2,"id":1,"ac.id":2,"biz.id":2,"co.id":2,"desa.id":2,"go.id":2,"mil.id":2,"my.id":2,"net.id":2,"or.id":2,"ponpes.id":2,"sch.id":2,"web.id":2,"ie":1,"gov.ie":2,"il":1,"ac.il":2,"co.il":2,"gov.il":2,"idf.il":2,"k12.il":2,"muni.il":2,"net.il":2,"org.il":2,"xn--4dbrk0ce":1,"xn--4dbgdty6c.xn--4dbrk0ce":2,"xn--5dbhl8d.xn--4dbrk0ce":2,"xn--8dbq2a.xn--4dbrk0ce":2,"xn--hebda8b.xn--4dbrk0ce":2,"im":1,"ac.im":2,"co.im":2,"com.im":2,"ltd.co.im":3,"net.im":2,"org.im":2,"plc.co.im":3,"tt.im":2,"tv.im":2,"in":1,"5g.in":2,"6g.in":2,"ac.in":2,"ai.in":2,"am.in":2,"bihar.in":2,"biz.in":2,"business.in":2,"ca.in":2,"cn.in":2,"co.in":2,"com.in":2,"coop.in":2,"cs.in":2,"delhi.in":2,"dr.in":2,"edu.in":2,"er.in":2,"firm.in":2,"gen.in":2,"gov.in":2,"gujarat.in":2,"ind.in":2,"info.in":2,"int.in":2,"internet.in":2,"io.in":2,"me.in":2,"mil.in":2,"net.in":2,"nic.in":2,"org.in":2,"pg.in":2,"post.in":2,"pro.in":2,"res.in":2,"travel.in":2,"tv.in":2,"uk.in":2,"up.in":2,"us.in":2,"info":1,"int":1,"eu.int":2,"io":1,"com.io":2,"iq":1,"gov.iq":2,"edu.iq":2,"mil.iq":2,"com.iq":2,"org.iq":2,"net.iq":2,"ir":1,"ac.ir":2,"co.ir":2,"gov.ir":2,"id.ir":2,"net.ir":2,"org.ir":2,"sch.ir":2,"xn--mgba3a4f16a.ir":2,"xn--mgba3a4fra.ir":2,"is":1,"net.is":2,"com.is":2,"edu.is":2,"gov.is":2,"org.is":2,"int.is":2,"it":1,"gov.it":2,"edu.it":2,"abr.it":2,"abruzzo.it":2,"aosta-valley.it":2,"aostavalley.it":2,"bas.it":2,"basilicata.it":2,"cal.it":2,"calabria.it":2,"cam.it":2,"campania.it":2,"emilia-romagna.it":2,"emiliaromagna.it":2,"emr.it":2,"friuli-v-giulia.it":2,"friuli-ve-giulia.it":2,"friuli-vegiulia.it":2,"friuli-venezia-giulia.it":2,"friuli-veneziagiulia.it":2,"friuli-vgiulia.it":2,"friuliv-giulia.it":2,"friulive-giulia.it":2,"friulivegiulia.it":2,"friulivenezia-giulia.it":2,"friuliveneziagiulia.it":2,"friulivgiulia.it":2,"fvg.it":2,"laz.it":2,"lazio.it":2,"lig.it":2,"liguria.it":2,"lom.it":2,"lombardia.it":2,"lombardy.it":2,"lucania.it":2,"mar.it":2,"marche.it":2,"mol.it":2,"molise.it":2,"piedmont.it":2,"piemonte.it":2,"pmn.it":2,"pug.it":2,"puglia.it":2,"sar.it":2,"sardegna.it":2,"sardinia.it":2,"sic.it":2,"sicilia.it":2,"sicily.it":2,"taa.it":2,"tos.it":2,"toscana.it":2,"trentin-sud-tirol.it":2,"xn--trentin-sd-tirol-rzb.it":2,"trentin-sudtirol.it":2,"xn--trentin-sdtirol-7vb.it":2,"trentin-sued-tirol.it":2,"trentin-suedtirol.it":2,"trentino-a-adige.it":2,"trentino-aadige.it":2,"trentino-alto-adige.it":2,"trentino-altoadige.it":2,"trentino-s-tirol.it":2,"trentino-stirol.it":2,"trentino-sud-tirol.it":2,"xn--trentino-sd-tirol-c3b.it":2,"trentino-sudtirol.it":2,"xn--trentino-sdtirol-szb.it":2,"trentino-sued-tirol.it":2,"trentino-suedtirol.it":2,"trentino.it":2,"trentinoa-adige.it":2,"trentinoaadige.it":2,"trentinoalto-adige.it":2,"trentinoaltoadige.it":2,"trentinos-tirol.it":2,"trentinostirol.it":2,"trentinosud-tirol.it":2,"xn--trentinosd-tirol-rzb.it":2,"trentinosudtirol.it":2,"xn--trentinosdtirol-7vb.it":2,"trentinosued-tirol.it":2,"trentinosuedtirol.it":2,"trentinsud-tirol.it":2,"xn--trentinsd-tirol-6vb.it":2,"trentinsudtirol.it":2,"xn--trentinsdtirol-nsb.it":2,"trentinsued-tirol.it":2,"trentinsuedtirol.it":2,"tuscany.it":2,"umb.it":2,"umbria.it":2,"val-d-aosta.it":2,"val-daosta.it":2,"vald-aosta.it":2,"valdaosta.it":2,"valle-aosta.it":2,"valle-d-aosta.it":2,"valle-daosta.it":2,"valleaosta.it":2,"valled-aosta.it":2,"valledaosta.it":2,"vallee-aoste.it":2,"xn--valle-aoste-ebb.it":2,"vallee-d-aoste.it":2,"xn--valle-d-aoste-ehb.it":2,"valleeaoste.it":2,"xn--valleaoste-e7a.it":2,"valleedaoste.it":2,"xn--valledaoste-ebb.it":2,"vao.it":2,"vda.it":2,"ven.it":2,"veneto.it":2,"ag.it":2,"agrigento.it":2,"al.it":2,"alessandria.it":2,"alto-adige.it":2,"altoadige.it":2,"an.it":2,"ancona.it":2,"andria-barletta-trani.it":2,"andria-trani-barletta.it":2,"andriabarlettatrani.it":2,"andriatranibarletta.it":2,"ao.it":2,"aosta.it":2,"aoste.it":2,"ap.it":2,"aq.it":2,"aquila.it":2,"ar.it":2,"arezzo.it":2,"ascoli-piceno.it":2,"ascolipiceno.it":2,"asti.it":2,"at.it":2,"av.it":2,"avellino.it":2,"ba.it":2,"balsan-sudtirol.it":2,"xn--balsan-sdtirol-nsb.it":2,"balsan-suedtirol.it":2,"balsan.it":2,"bari.it":2,"barletta-trani-andria.it":2,"barlettatraniandria.it":2,"belluno.it":2,"benevento.it":2,"bergamo.it":2,"bg.it":2,"bi.it":2,"biella.it":2,"bl.it":2,"bn.it":2,"bo.it":2,"bologna.it":2,"bolzano-altoadige.it":2,"bolzano.it":2,"bozen-sudtirol.it":2,"xn--bozen-sdtirol-2ob.it":2,"bozen-suedtirol.it":2,"bozen.it":2,"br.it":2,"brescia.it":2,"brindisi.it":2,"bs.it":2,"bt.it":2,"bulsan-sudtirol.it":2,"xn--bulsan-sdtirol-nsb.it":2,"bulsan-suedtirol.it":2,"bulsan.it":2,"bz.it":2,"ca.it":2,"cagliari.it":2,"caltanissetta.it":2,"campidano-medio.it":2,"campidanomedio.it":2,"campobasso.it":2,"carbonia-iglesias.it":2,"carboniaiglesias.it":2,"carrara-massa.it":2,"carraramassa.it":2,"caserta.it":2,"catania.it":2,"catanzaro.it":2,"cb.it":2,"ce.it":2,"cesena-forli.it":2,"xn--cesena-forl-mcb.it":2,"cesenaforli.it":2,"xn--cesenaforl-i8a.it":2,"ch.it":2,"chieti.it":2,"ci.it":2,"cl.it":2,"cn.it":2,"co.it":2,"como.it":2,"cosenza.it":2,"cr.it":2,"cremona.it":2,"crotone.it":2,"cs.it":2,"ct.it":2,"cuneo.it":2,"cz.it":2,"dell-ogliastra.it":2,"dellogliastra.it":2,"en.it":2,"enna.it":2,"fc.it":2,"fe.it":2,"fermo.it":2,"ferrara.it":2,"fg.it":2,"fi.it":2,"firenze.it":2,"florence.it":2,"fm.it":2,"foggia.it":2,"forli-cesena.it":2,"xn--forl-cesena-fcb.it":2,"forlicesena.it":2,"xn--forlcesena-c8a.it":2,"fr.it":2,"frosinone.it":2,"ge.it":2,"genoa.it":2,"genova.it":2,"go.it":2,"gorizia.it":2,"gr.it":2,"grosseto.it":2,"iglesias-carbonia.it":2,"iglesiascarbonia.it":2,"im.it":2,"imperia.it":2,"is.it":2,"isernia.it":2,"kr.it":2,"la-spezia.it":2,"laquila.it":2,"laspezia.it":2,"latina.it":2,"lc.it":2,"le.it":2,"lecce.it":2,"lecco.it":2,"li.it":2,"livorno.it":2,"lo.it":2,"lodi.it":2,"lt.it":2,"lu.it":2,"lucca.it":2,"macerata.it":2,"mantova.it":2,"massa-carrara.it":2,"massacarrara.it":2,"matera.it":2,"mb.it":2,"mc.it":2,"me.it":2,"medio-campidano.it":2,"mediocampidano.it":2,"messina.it":2,"mi.it":2,"milan.it":2,"milano.it":2,"mn.it":2,"mo.it":2,"modena.it":2,"monza-brianza.it":2,"monza-e-della-brianza.it":2,"monza.it":2,"monzabrianza.it":2,"monzaebrianza.it":2,"monzaedellabrianza.it":2,"ms.it":2,"mt.it":2,"na.it":2,"naples.it":2,"napoli.it":2,"no.it":2,"novara.it":2,"nu.it":2,"nuoro.it":2,"og.it":2,"ogliastra.it":2,"olbia-tempio.it":2,"olbiatempio.it":2,"or.it":2,"oristano.it":2,"ot.it":2,"pa.it":2,"padova.it":2,"padua.it":2,"palermo.it":2,"parma.it":2,"pavia.it":2,"pc.it":2,"pd.it":2,"pe.it":2,"perugia.it":2,"pesaro-urbino.it":2,"pesarourbino.it":2,"pescara.it":2,"pg.it":2,"pi.it":2,"piacenza.it":2,"pisa.it":2,"pistoia.it":2,"pn.it":2,"po.it":2,"pordenone.it":2,"potenza.it":2,"pr.it":2,"prato.it":2,"pt.it":2,"pu.it":2,"pv.it":2,"pz.it":2,"ra.it":2,"ragusa.it":2,"ravenna.it":2,"rc.it":2,"re.it":2,"reggio-calabria.it":2,"reggio-emilia.it":2,"reggiocalabria.it":2,"reggioemilia.it":2,"rg.it":2,"ri.it":2,"rieti.it":2,"rimini.it":2,"rm.it":2,"rn.it":2,"ro.it":2,"roma.it":2,"rome.it":2,"rovigo.it":2,"sa.it":2,"salerno.it":2,"sassari.it":2,"savona.it":2,"si.it":2,"siena.it":2,"siracusa.it":2,"so.it":2,"sondrio.it":2,"sp.it":2,"sr.it":2,"ss.it":2,"suedtirol.it":2,"xn--sdtirol-n2a.it":2,"sv.it":2,"ta.it":2,"taranto.it":2,"te.it":2,"tempio-olbia.it":2,"tempioolbia.it":2,"teramo.it":2,"terni.it":2,"tn.it":2,"to.it":2,"torino.it":2,"tp.it":2,"tr.it":2,"trani-andria-barletta.it":2,"trani-barletta-andria.it":2,"traniandriabarletta.it":2,"tranibarlettaandria.it":2,"trapani.it":2,"trento.it":2,"treviso.it":2,"trieste.it":2,"ts.it":2,"turin.it":2,"tv.it":2,"ud.it":2,"udine.it":2,"urbino-pesaro.it":2,"urbinopesaro.it":2,"va.it":2,"varese.it":2,"vb.it":2,"vc.it":2,"ve.it":2,"venezia.it":2,"venice.it":2,"verbania.it":2,"vercelli.it":2,"verona.it":2,"vi.it":2,"vibo-valentia.it":2,"vibovalentia.it":2,"vicenza.it":2,"viterbo.it":2,"vr.it":2,"vs.it":2,"vt.it":2,"vv.it":2,"je":1,"co.je":2,"net.je":2,"org.je":2,"jm":2,"jo":1,"com.jo":2,"org.jo":2,"net.jo":2,"edu.jo":2,"sch.jo":2,"gov.jo":2,"mil.jo":2,"name.jo":2,"jobs":1,"jp":1,"ac.jp":2,"ad.jp":2,"co.jp":2,"ed.jp":2,"go.jp":2,"gr.jp":2,"lg.jp":2,"ne.jp":2,"or.jp":2,"aichi.jp":2,"akita.jp":2,"aomori.jp":2,"chiba.jp":2,"ehime.jp":2,"fukui.jp":2,"fukuoka.jp":2,"fukushima.jp":2,"gifu.jp":2,"gunma.jp":2,"hiroshima.jp":2,"hokkaido.jp":2,"hyogo.jp":2,"ibaraki.jp":2,"ishikawa.jp":2,"iwate.jp":2,"kagawa.jp":2,"kagoshima.jp":2,"kanagawa.jp":2,"kochi.jp":2,"kumamoto.jp":2,"kyoto.jp":2,"mie.jp":2,"miyagi.jp":2,"miyazaki.jp":2,"nagano.jp":2,"nagasaki.jp":2,"nara.jp":2,"niigata.jp":2,"oita.jp":2,"okayama.jp":2,"okinawa.jp":2,"osaka.jp":2,"saga.jp":2,"saitama.jp":2,"shiga.jp":2,"shimane.jp":2,"shizuoka.jp":2,"tochigi.jp":2,"tokushima.jp":2,"tokyo.jp":2,"tottori.jp":2,"toyama.jp":2,"wakayama.jp":2,"yamagata.jp":2,"yamaguchi.jp":2,"yamanashi.jp":2,"xn--4pvxs.jp":2,"xn--vgu402c.jp":2,"xn--c3s14m.jp":2,"xn--f6qx53a.jp":2,"xn--8pvr4u.jp":2,"xn--uist22h.jp":2,"xn--djrs72d6uy.jp":2,"xn--mkru45i.jp":2,"xn--0trq7p7nn.jp":2,"xn--8ltr62k.jp":2,"xn--2m4a15e.jp":2,"xn--efvn9s.jp":2,"xn--32vp30h.jp":2,"xn--4it797k.jp":2,"xn--1lqs71d.jp":2,"xn--5rtp49c.jp":2,"xn--5js045d.jp":2,"xn--ehqz56n.jp":2,"xn--1lqs03n.jp":2,"xn--qqqt11m.jp":2,"xn--kbrq7o.jp":2,"xn--pssu33l.jp":2,"xn--ntsq17g.jp":2,"xn--uisz3g.jp":2,"xn--6btw5a.jp":2,"xn--1ctwo.jp":2,"xn--6orx2r.jp":2,"xn--rht61e.jp":2,"xn--rht27z.jp":2,"xn--djty4k.jp":2,"xn--nit225k.jp":2,"xn--rht3d.jp":2,"xn--klty5x.jp":2,"xn--kltx9a.jp":2,"xn--kltp7d.jp":2,"xn--uuwu58a.jp":2,"xn--zbx025d.jp":2,"xn--ntso0iqx3a.jp":2,"xn--elqq16h.jp":2,"xn--4it168d.jp":2,"xn--klt787d.jp":2,"xn--rny31h.jp":2,"xn--7t0a264c.jp":2,"xn--5rtq34k.jp":2,"xn--k7yn95e.jp":2,"xn--tor131o.jp":2,"xn--d5qv7z876c.jp":2,"kawasaki.jp":3,"kitakyushu.jp":3,"kobe.jp":3,"nagoya.jp":3,"sapporo.jp":3,"sendai.jp":3,"yokohama.jp":3,"city.kawasaki.jp":2,"city.kitakyushu.jp":2,"city.kobe.jp":2,"city.nagoya.jp":2,"city.sapporo.jp":2,"city.sendai.jp":2,"city.yokohama.jp":2,"aisai.aichi.jp":3,"ama.aichi.jp":3,"anjo.aichi.jp":3,"asuke.aichi.jp":3,"chiryu.aichi.jp":3,"chita.aichi.jp":3,"fuso.aichi.jp":3,"gamagori.aichi.jp":3,"handa.aichi.jp":3,"hazu.aichi.jp":3,"hekinan.aichi.jp":3,"higashiura.aichi.jp":3,"ichinomiya.aichi.jp":3,"inazawa.aichi.jp":3,"inuyama.aichi.jp":3,"isshiki.aichi.jp":3,"iwakura.aichi.jp":3,"kanie.aichi.jp":3,"kariya.aichi.jp":3,"kasugai.aichi.jp":3,"kira.aichi.jp":3,"kiyosu.aichi.jp":3,"komaki.aichi.jp":3,"konan.aichi.jp":3,"kota.aichi.jp":3,"mihama.aichi.jp":3,"miyoshi.aichi.jp":3,"nishio.aichi.jp":3,"nisshin.aichi.jp":3,"obu.aichi.jp":3,"oguchi.aichi.jp":3,"oharu.aichi.jp":3,"okazaki.aichi.jp":3,"owariasahi.aichi.jp":3,"seto.aichi.jp":3,"shikatsu.aichi.jp":3,"shinshiro.aichi.jp":3,"shitara.aichi.jp":3,"tahara.aichi.jp":3,"takahama.aichi.jp":3,"tobishima.aichi.jp":3,"toei.aichi.jp":3,"togo.aichi.jp":3,"tokai.aichi.jp":3,"tokoname.aichi.jp":3,"toyoake.aichi.jp":3,"toyohashi.aichi.jp":3,"toyokawa.aichi.jp":3,"toyone.aichi.jp":3,"toyota.aichi.jp":3,"tsushima.aichi.jp":3,"yatomi.aichi.jp":3,"akita.akita.jp":3,"daisen.akita.jp":3,"fujisato.akita.jp":3,"gojome.akita.jp":3,"hachirogata.akita.jp":3,"happou.akita.jp":3,"higashinaruse.akita.jp":3,"honjo.akita.jp":3,"honjyo.akita.jp":3,"ikawa.akita.jp":3,"kamikoani.akita.jp":3,"kamioka.akita.jp":3,"katagami.akita.jp":3,"kazuno.akita.jp":3,"kitaakita.akita.jp":3,"kosaka.akita.jp":3,"kyowa.akita.jp":3,"misato.akita.jp":3,"mitane.akita.jp":3,"moriyoshi.akita.jp":3,"nikaho.akita.jp":3,"noshiro.akita.jp":3,"odate.akita.jp":3,"oga.akita.jp":3,"ogata.akita.jp":3,"semboku.akita.jp":3,"yokote.akita.jp":3,"yurihonjo.akita.jp":3,"aomori.aomori.jp":3,"gonohe.aomori.jp":3,"hachinohe.aomori.jp":3,"hashikami.aomori.jp":3,"hiranai.aomori.jp":3,"hirosaki.aomori.jp":3,"itayanagi.aomori.jp":3,"kuroishi.aomori.jp":3,"misawa.aomori.jp":3,"mutsu.aomori.jp":3,"nakadomari.aomori.jp":3,"noheji.aomori.jp":3,"oirase.aomori.jp":3,"owani.aomori.jp":3,"rokunohe.aomori.jp":3,"sannohe.aomori.jp":3,"shichinohe.aomori.jp":3,"shingo.aomori.jp":3,"takko.aomori.jp":3,"towada.aomori.jp":3,"tsugaru.aomori.jp":3,"tsuruta.aomori.jp":3,"abiko.chiba.jp":3,"asahi.chiba.jp":3,"chonan.chiba.jp":3,"chosei.chiba.jp":3,"choshi.chiba.jp":3,"chuo.chiba.jp":3,"funabashi.chiba.jp":3,"futtsu.chiba.jp":3,"hanamigawa.chiba.jp":3,"ichihara.chiba.jp":3,"ichikawa.chiba.jp":3,"ichinomiya.chiba.jp":3,"inzai.chiba.jp":3,"isumi.chiba.jp":3,"kamagaya.chiba.jp":3,"kamogawa.chiba.jp":3,"kashiwa.chiba.jp":3,"katori.chiba.jp":3,"katsuura.chiba.jp":3,"kimitsu.chiba.jp":3,"kisarazu.chiba.jp":3,"kozaki.chiba.jp":3,"kujukuri.chiba.jp":3,"kyonan.chiba.jp":3,"matsudo.chiba.jp":3,"midori.chiba.jp":3,"mihama.chiba.jp":3,"minamiboso.chiba.jp":3,"mobara.chiba.jp":3,"mutsuzawa.chiba.jp":3,"nagara.chiba.jp":3,"nagareyama.chiba.jp":3,"narashino.chiba.jp":3,"narita.chiba.jp":3,"noda.chiba.jp":3,"oamishirasato.chiba.jp":3,"omigawa.chiba.jp":3,"onjuku.chiba.jp":3,"otaki.chiba.jp":3,"sakae.chiba.jp":3,"sakura.chiba.jp":3,"shimofusa.chiba.jp":3,"shirako.chiba.jp":3,"shiroi.chiba.jp":3,"shisui.chiba.jp":3,"sodegaura.chiba.jp":3,"sosa.chiba.jp":3,"tako.chiba.jp":3,"tateyama.chiba.jp":3,"togane.chiba.jp":3,"tohnosho.chiba.jp":3,"tomisato.chiba.jp":3,"urayasu.chiba.jp":3,"yachimata.chiba.jp":3,"yachiyo.chiba.jp":3,"yokaichiba.chiba.jp":3,"yokoshibahikari.chiba.jp":3,"yotsukaido.chiba.jp":3,"ainan.ehime.jp":3,"honai.ehime.jp":3,"ikata.ehime.jp":3,"imabari.ehime.jp":3,"iyo.ehime.jp":3,"kamijima.ehime.jp":3,"kihoku.ehime.jp":3,"kumakogen.ehime.jp":3,"masaki.ehime.jp":3,"matsuno.ehime.jp":3,"matsuyama.ehime.jp":3,"namikata.ehime.jp":3,"niihama.ehime.jp":3,"ozu.ehime.jp":3,"saijo.ehime.jp":3,"seiyo.ehime.jp":3,"shikokuchuo.ehime.jp":3,"tobe.ehime.jp":3,"toon.ehime.jp":3,"uchiko.ehime.jp":3,"uwajima.ehime.jp":3,"yawatahama.ehime.jp":3,"echizen.fukui.jp":3,"eiheiji.fukui.jp":3,"fukui.fukui.jp":3,"ikeda.fukui.jp":3,"katsuyama.fukui.jp":3,"mihama.fukui.jp":3,"minamiechizen.fukui.jp":3,"obama.fukui.jp":3,"ohi.fukui.jp":3,"ono.fukui.jp":3,"sabae.fukui.jp":3,"sakai.fukui.jp":3,"takahama.fukui.jp":3,"tsuruga.fukui.jp":3,"wakasa.fukui.jp":3,"ashiya.fukuoka.jp":3,"buzen.fukuoka.jp":3,"chikugo.fukuoka.jp":3,"chikuho.fukuoka.jp":3,"chikujo.fukuoka.jp":3,"chikushino.fukuoka.jp":3,"chikuzen.fukuoka.jp":3,"chuo.fukuoka.jp":3,"dazaifu.fukuoka.jp":3,"fukuchi.fukuoka.jp":3,"hakata.fukuoka.jp":3,"higashi.fukuoka.jp":3,"hirokawa.fukuoka.jp":3,"hisayama.fukuoka.jp":3,"iizuka.fukuoka.jp":3,"inatsuki.fukuoka.jp":3,"kaho.fukuoka.jp":3,"kasuga.fukuoka.jp":3,"kasuya.fukuoka.jp":3,"kawara.fukuoka.jp":3,"keisen.fukuoka.jp":3,"koga.fukuoka.jp":3,"kurate.fukuoka.jp":3,"kurogi.fukuoka.jp":3,"kurume.fukuoka.jp":3,"minami.fukuoka.jp":3,"miyako.fukuoka.jp":3,"miyama.fukuoka.jp":3,"miyawaka.fukuoka.jp":3,"mizumaki.fukuoka.jp":3,"munakata.fukuoka.jp":3,"nakagawa.fukuoka.jp":3,"nakama.fukuoka.jp":3,"nishi.fukuoka.jp":3,"nogata.fukuoka.jp":3,"ogori.fukuoka.jp":3,"okagaki.fukuoka.jp":3,"okawa.fukuoka.jp":3,"oki.fukuoka.jp":3,"omuta.fukuoka.jp":3,"onga.fukuoka.jp":3,"onojo.fukuoka.jp":3,"oto.fukuoka.jp":3,"saigawa.fukuoka.jp":3,"sasaguri.fukuoka.jp":3,"shingu.fukuoka.jp":3,"shinyoshitomi.fukuoka.jp":3,"shonai.fukuoka.jp":3,"soeda.fukuoka.jp":3,"sue.fukuoka.jp":3,"tachiarai.fukuoka.jp":3,"tagawa.fukuoka.jp":3,"takata.fukuoka.jp":3,"toho.fukuoka.jp":3,"toyotsu.fukuoka.jp":3,"tsuiki.fukuoka.jp":3,"ukiha.fukuoka.jp":3,"umi.fukuoka.jp":3,"usui.fukuoka.jp":3,"yamada.fukuoka.jp":3,"yame.fukuoka.jp":3,"yanagawa.fukuoka.jp":3,"yukuhashi.fukuoka.jp":3,"aizubange.fukushima.jp":3,"aizumisato.fukushima.jp":3,"aizuwakamatsu.fukushima.jp":3,"asakawa.fukushima.jp":3,"bandai.fukushima.jp":3,"date.fukushima.jp":3,"fukushima.fukushima.jp":3,"furudono.fukushima.jp":3,"futaba.fukushima.jp":3,"hanawa.fukushima.jp":3,"higashi.fukushima.jp":3,"hirata.fukushima.jp":3,"hirono.fukushima.jp":3,"iitate.fukushima.jp":3,"inawashiro.fukushima.jp":3,"ishikawa.fukushima.jp":3,"iwaki.fukushima.jp":3,"izumizaki.fukushima.jp":3,"kagamiishi.fukushima.jp":3,"kaneyama.fukushima.jp":3,"kawamata.fukushima.jp":3,"kitakata.fukushima.jp":3,"kitashiobara.fukushima.jp":3,"koori.fukushima.jp":3,"koriyama.fukushima.jp":3,"kunimi.fukushima.jp":3,"miharu.fukushima.jp":3,"mishima.fukushima.jp":3,"namie.fukushima.jp":3,"nango.fukushima.jp":3,"nishiaizu.fukushima.jp":3,"nishigo.fukushima.jp":3,"okuma.fukushima.jp":3,"omotego.fukushima.jp":3,"ono.fukushima.jp":3,"otama.fukushima.jp":3,"samegawa.fukushima.jp":3,"shimogo.fukushima.jp":3,"shirakawa.fukushima.jp":3,"showa.fukushima.jp":3,"soma.fukushima.jp":3,"sukagawa.fukushima.jp":3,"taishin.fukushima.jp":3,"tamakawa.fukushima.jp":3,"tanagura.fukushima.jp":3,"tenei.fukushima.jp":3,"yabuki.fukushima.jp":3,"yamato.fukushima.jp":3,"yamatsuri.fukushima.jp":3,"yanaizu.fukushima.jp":3,"yugawa.fukushima.jp":3,"anpachi.gifu.jp":3,"ena.gifu.jp":3,"gifu.gifu.jp":3,"ginan.gifu.jp":3,"godo.gifu.jp":3,"gujo.gifu.jp":3,"hashima.gifu.jp":3,"hichiso.gifu.jp":3,"hida.gifu.jp":3,"higashishirakawa.gifu.jp":3,"ibigawa.gifu.jp":3,"ikeda.gifu.jp":3,"kakamigahara.gifu.jp":3,"kani.gifu.jp":3,"kasahara.gifu.jp":3,"kasamatsu.gifu.jp":3,"kawaue.gifu.jp":3,"kitagata.gifu.jp":3,"mino.gifu.jp":3,"minokamo.gifu.jp":3,"mitake.gifu.jp":3,"mizunami.gifu.jp":3,"motosu.gifu.jp":3,"nakatsugawa.gifu.jp":3,"ogaki.gifu.jp":3,"sakahogi.gifu.jp":3,"seki.gifu.jp":3,"sekigahara.gifu.jp":3,"shirakawa.gifu.jp":3,"tajimi.gifu.jp":3,"takayama.gifu.jp":3,"tarui.gifu.jp":3,"toki.gifu.jp":3,"tomika.gifu.jp":3,"wanouchi.gifu.jp":3,"yamagata.gifu.jp":3,"yaotsu.gifu.jp":3,"yoro.gifu.jp":3,"annaka.gunma.jp":3,"chiyoda.gunma.jp":3,"fujioka.gunma.jp":3,"higashiagatsuma.gunma.jp":3,"isesaki.gunma.jp":3,"itakura.gunma.jp":3,"kanna.gunma.jp":3,"kanra.gunma.jp":3,"katashina.gunma.jp":3,"kawaba.gunma.jp":3,"kiryu.gunma.jp":3,"kusatsu.gunma.jp":3,"maebashi.gunma.jp":3,"meiwa.gunma.jp":3,"midori.gunma.jp":3,"minakami.gunma.jp":3,"naganohara.gunma.jp":3,"nakanojo.gunma.jp":3,"nanmoku.gunma.jp":3,"numata.gunma.jp":3,"oizumi.gunma.jp":3,"ora.gunma.jp":3,"ota.gunma.jp":3,"shibukawa.gunma.jp":3,"shimonita.gunma.jp":3,"shinto.gunma.jp":3,"showa.gunma.jp":3,"takasaki.gunma.jp":3,"takayama.gunma.jp":3,"tamamura.gunma.jp":3,"tatebayashi.gunma.jp":3,"tomioka.gunma.jp":3,"tsukiyono.gunma.jp":3,"tsumagoi.gunma.jp":3,"ueno.gunma.jp":3,"yoshioka.gunma.jp":3,"asaminami.hiroshima.jp":3,"daiwa.hiroshima.jp":3,"etajima.hiroshima.jp":3,"fuchu.hiroshima.jp":3,"fukuyama.hiroshima.jp":3,"hatsukaichi.hiroshima.jp":3,"higashihiroshima.hiroshima.jp":3,"hongo.hiroshima.jp":3,"jinsekikogen.hiroshima.jp":3,"kaita.hiroshima.jp":3,"kui.hiroshima.jp":3,"kumano.hiroshima.jp":3,"kure.hiroshima.jp":3,"mihara.hiroshima.jp":3,"miyoshi.hiroshima.jp":3,"naka.hiroshima.jp":3,"onomichi.hiroshima.jp":3,"osakikamijima.hiroshima.jp":3,"otake.hiroshima.jp":3,"saka.hiroshima.jp":3,"sera.hiroshima.jp":3,"seranishi.hiroshima.jp":3,"shinichi.hiroshima.jp":3,"shobara.hiroshima.jp":3,"takehara.hiroshima.jp":3,"abashiri.hokkaido.jp":3,"abira.hokkaido.jp":3,"aibetsu.hokkaido.jp":3,"akabira.hokkaido.jp":3,"akkeshi.hokkaido.jp":3,"asahikawa.hokkaido.jp":3,"ashibetsu.hokkaido.jp":3,"ashoro.hokkaido.jp":3,"assabu.hokkaido.jp":3,"atsuma.hokkaido.jp":3,"bibai.hokkaido.jp":3,"biei.hokkaido.jp":3,"bifuka.hokkaido.jp":3,"bihoro.hokkaido.jp":3,"biratori.hokkaido.jp":3,"chippubetsu.hokkaido.jp":3,"chitose.hokkaido.jp":3,"date.hokkaido.jp":3,"ebetsu.hokkaido.jp":3,"embetsu.hokkaido.jp":3,"eniwa.hokkaido.jp":3,"erimo.hokkaido.jp":3,"esan.hokkaido.jp":3,"esashi.hokkaido.jp":3,"fukagawa.hokkaido.jp":3,"fukushima.hokkaido.jp":3,"furano.hokkaido.jp":3,"furubira.hokkaido.jp":3,"haboro.hokkaido.jp":3,"hakodate.hokkaido.jp":3,"hamatonbetsu.hokkaido.jp":3,"hidaka.hokkaido.jp":3,"higashikagura.hokkaido.jp":3,"higashikawa.hokkaido.jp":3,"hiroo.hokkaido.jp":3,"hokuryu.hokkaido.jp":3,"hokuto.hokkaido.jp":3,"honbetsu.hokkaido.jp":3,"horokanai.hokkaido.jp":3,"horonobe.hokkaido.jp":3,"ikeda.hokkaido.jp":3,"imakane.hokkaido.jp":3,"ishikari.hokkaido.jp":3,"iwamizawa.hokkaido.jp":3,"iwanai.hokkaido.jp":3,"kamifurano.hokkaido.jp":3,"kamikawa.hokkaido.jp":3,"kamishihoro.hokkaido.jp":3,"kamisunagawa.hokkaido.jp":3,"kamoenai.hokkaido.jp":3,"kayabe.hokkaido.jp":3,"kembuchi.hokkaido.jp":3,"kikonai.hokkaido.jp":3,"kimobetsu.hokkaido.jp":3,"kitahiroshima.hokkaido.jp":3,"kitami.hokkaido.jp":3,"kiyosato.hokkaido.jp":3,"koshimizu.hokkaido.jp":3,"kunneppu.hokkaido.jp":3,"kuriyama.hokkaido.jp":3,"kuromatsunai.hokkaido.jp":3,"kushiro.hokkaido.jp":3,"kutchan.hokkaido.jp":3,"kyowa.hokkaido.jp":3,"mashike.hokkaido.jp":3,"matsumae.hokkaido.jp":3,"mikasa.hokkaido.jp":3,"minamifurano.hokkaido.jp":3,"mombetsu.hokkaido.jp":3,"moseushi.hokkaido.jp":3,"mukawa.hokkaido.jp":3,"muroran.hokkaido.jp":3,"naie.hokkaido.jp":3,"nakagawa.hokkaido.jp":3,"nakasatsunai.hokkaido.jp":3,"nakatombetsu.hokkaido.jp":3,"nanae.hokkaido.jp":3,"nanporo.hokkaido.jp":3,"nayoro.hokkaido.jp":3,"nemuro.hokkaido.jp":3,"niikappu.hokkaido.jp":3,"niki.hokkaido.jp":3,"nishiokoppe.hokkaido.jp":3,"noboribetsu.hokkaido.jp":3,"numata.hokkaido.jp":3,"obihiro.hokkaido.jp":3,"obira.hokkaido.jp":3,"oketo.hokkaido.jp":3,"okoppe.hokkaido.jp":3,"otaru.hokkaido.jp":3,"otobe.hokkaido.jp":3,"otofuke.hokkaido.jp":3,"otoineppu.hokkaido.jp":3,"oumu.hokkaido.jp":3,"ozora.hokkaido.jp":3,"pippu.hokkaido.jp":3,"rankoshi.hokkaido.jp":3,"rebun.hokkaido.jp":3,"rikubetsu.hokkaido.jp":3,"rishiri.hokkaido.jp":3,"rishirifuji.hokkaido.jp":3,"saroma.hokkaido.jp":3,"sarufutsu.hokkaido.jp":3,"shakotan.hokkaido.jp":3,"shari.hokkaido.jp":3,"shibecha.hokkaido.jp":3,"shibetsu.hokkaido.jp":3,"shikabe.hokkaido.jp":3,"shikaoi.hokkaido.jp":3,"shimamaki.hokkaido.jp":3,"shimizu.hokkaido.jp":3,"shimokawa.hokkaido.jp":3,"shinshinotsu.hokkaido.jp":3,"shintoku.hokkaido.jp":3,"shiranuka.hokkaido.jp":3,"shiraoi.hokkaido.jp":3,"shiriuchi.hokkaido.jp":3,"sobetsu.hokkaido.jp":3,"sunagawa.hokkaido.jp":3,"taiki.hokkaido.jp":3,"takasu.hokkaido.jp":3,"takikawa.hokkaido.jp":3,"takinoue.hokkaido.jp":3,"teshikaga.hokkaido.jp":3,"tobetsu.hokkaido.jp":3,"tohma.hokkaido.jp":3,"tomakomai.hokkaido.jp":3,"tomari.hokkaido.jp":3,"toya.hokkaido.jp":3,"toyako.hokkaido.jp":3,"toyotomi.hokkaido.jp":3,"toyoura.hokkaido.jp":3,"tsubetsu.hokkaido.jp":3,"tsukigata.hokkaido.jp":3,"urakawa.hokkaido.jp":3,"urausu.hokkaido.jp":3,"uryu.hokkaido.jp":3,"utashinai.hokkaido.jp":3,"wakkanai.hokkaido.jp":3,"wassamu.hokkaido.jp":3,"yakumo.hokkaido.jp":3,"yoichi.hokkaido.jp":3,"aioi.hyogo.jp":3,"akashi.hyogo.jp":3,"ako.hyogo.jp":3,"amagasaki.hyogo.jp":3,"aogaki.hyogo.jp":3,"asago.hyogo.jp":3,"ashiya.hyogo.jp":3,"awaji.hyogo.jp":3,"fukusaki.hyogo.jp":3,"goshiki.hyogo.jp":3,"harima.hyogo.jp":3,"himeji.hyogo.jp":3,"ichikawa.hyogo.jp":3,"inagawa.hyogo.jp":3,"itami.hyogo.jp":3,"kakogawa.hyogo.jp":3,"kamigori.hyogo.jp":3,"kamikawa.hyogo.jp":3,"kasai.hyogo.jp":3,"kasuga.hyogo.jp":3,"kawanishi.hyogo.jp":3,"miki.hyogo.jp":3,"minamiawaji.hyogo.jp":3,"nishinomiya.hyogo.jp":3,"nishiwaki.hyogo.jp":3,"ono.hyogo.jp":3,"sanda.hyogo.jp":3,"sannan.hyogo.jp":3,"sasayama.hyogo.jp":3,"sayo.hyogo.jp":3,"shingu.hyogo.jp":3,"shinonsen.hyogo.jp":3,"shiso.hyogo.jp":3,"sumoto.hyogo.jp":3,"taishi.hyogo.jp":3,"taka.hyogo.jp":3,"takarazuka.hyogo.jp":3,"takasago.hyogo.jp":3,"takino.hyogo.jp":3,"tamba.hyogo.jp":3,"tatsuno.hyogo.jp":3,"toyooka.hyogo.jp":3,"yabu.hyogo.jp":3,"yashiro.hyogo.jp":3,"yoka.hyogo.jp":3,"yokawa.hyogo.jp":3,"ami.ibaraki.jp":3,"asahi.ibaraki.jp":3,"bando.ibaraki.jp":3,"chikusei.ibaraki.jp":3,"daigo.ibaraki.jp":3,"fujishiro.ibaraki.jp":3,"hitachi.ibaraki.jp":3,"hitachinaka.ibaraki.jp":3,"hitachiomiya.ibaraki.jp":3,"hitachiota.ibaraki.jp":3,"ibaraki.ibaraki.jp":3,"ina.ibaraki.jp":3,"inashiki.ibaraki.jp":3,"itako.ibaraki.jp":3,"iwama.ibaraki.jp":3,"joso.ibaraki.jp":3,"kamisu.ibaraki.jp":3,"kasama.ibaraki.jp":3,"kashima.ibaraki.jp":3,"kasumigaura.ibaraki.jp":3,"koga.ibaraki.jp":3,"miho.ibaraki.jp":3,"mito.ibaraki.jp":3,"moriya.ibaraki.jp":3,"naka.ibaraki.jp":3,"namegata.ibaraki.jp":3,"oarai.ibaraki.jp":3,"ogawa.ibaraki.jp":3,"omitama.ibaraki.jp":3,"ryugasaki.ibaraki.jp":3,"sakai.ibaraki.jp":3,"sakuragawa.ibaraki.jp":3,"shimodate.ibaraki.jp":3,"shimotsuma.ibaraki.jp":3,"shirosato.ibaraki.jp":3,"sowa.ibaraki.jp":3,"suifu.ibaraki.jp":3,"takahagi.ibaraki.jp":3,"tamatsukuri.ibaraki.jp":3,"tokai.ibaraki.jp":3,"tomobe.ibaraki.jp":3,"tone.ibaraki.jp":3,"toride.ibaraki.jp":3,"tsuchiura.ibaraki.jp":3,"tsukuba.ibaraki.jp":3,"uchihara.ibaraki.jp":3,"ushiku.ibaraki.jp":3,"yachiyo.ibaraki.jp":3,"yamagata.ibaraki.jp":3,"yawara.ibaraki.jp":3,"yuki.ibaraki.jp":3,"anamizu.ishikawa.jp":3,"hakui.ishikawa.jp":3,"hakusan.ishikawa.jp":3,"kaga.ishikawa.jp":3,"kahoku.ishikawa.jp":3,"kanazawa.ishikawa.jp":3,"kawakita.ishikawa.jp":3,"komatsu.ishikawa.jp":3,"nakanoto.ishikawa.jp":3,"nanao.ishikawa.jp":3,"nomi.ishikawa.jp":3,"nonoichi.ishikawa.jp":3,"noto.ishikawa.jp":3,"shika.ishikawa.jp":3,"suzu.ishikawa.jp":3,"tsubata.ishikawa.jp":3,"tsurugi.ishikawa.jp":3,"uchinada.ishikawa.jp":3,"wajima.ishikawa.jp":3,"fudai.iwate.jp":3,"fujisawa.iwate.jp":3,"hanamaki.iwate.jp":3,"hiraizumi.iwate.jp":3,"hirono.iwate.jp":3,"ichinohe.iwate.jp":3,"ichinoseki.iwate.jp":3,"iwaizumi.iwate.jp":3,"iwate.iwate.jp":3,"joboji.iwate.jp":3,"kamaishi.iwate.jp":3,"kanegasaki.iwate.jp":3,"karumai.iwate.jp":3,"kawai.iwate.jp":3,"kitakami.iwate.jp":3,"kuji.iwate.jp":3,"kunohe.iwate.jp":3,"kuzumaki.iwate.jp":3,"miyako.iwate.jp":3,"mizusawa.iwate.jp":3,"morioka.iwate.jp":3,"ninohe.iwate.jp":3,"noda.iwate.jp":3,"ofunato.iwate.jp":3,"oshu.iwate.jp":3,"otsuchi.iwate.jp":3,"rikuzentakata.iwate.jp":3,"shiwa.iwate.jp":3,"shizukuishi.iwate.jp":3,"sumita.iwate.jp":3,"tanohata.iwate.jp":3,"tono.iwate.jp":3,"yahaba.iwate.jp":3,"yamada.iwate.jp":3,"ayagawa.kagawa.jp":3,"higashikagawa.kagawa.jp":3,"kanonji.kagawa.jp":3,"kotohira.kagawa.jp":3,"manno.kagawa.jp":3,"marugame.kagawa.jp":3,"mitoyo.kagawa.jp":3,"naoshima.kagawa.jp":3,"sanuki.kagawa.jp":3,"tadotsu.kagawa.jp":3,"takamatsu.kagawa.jp":3,"tonosho.kagawa.jp":3,"uchinomi.kagawa.jp":3,"utazu.kagawa.jp":3,"zentsuji.kagawa.jp":3,"akune.kagoshima.jp":3,"amami.kagoshima.jp":3,"hioki.kagoshima.jp":3,"isa.kagoshima.jp":3,"isen.kagoshima.jp":3,"izumi.kagoshima.jp":3,"kagoshima.kagoshima.jp":3,"kanoya.kagoshima.jp":3,"kawanabe.kagoshima.jp":3,"kinko.kagoshima.jp":3,"kouyama.kagoshima.jp":3,"makurazaki.kagoshima.jp":3,"matsumoto.kagoshima.jp":3,"minamitane.kagoshima.jp":3,"nakatane.kagoshima.jp":3,"nishinoomote.kagoshima.jp":3,"satsumasendai.kagoshima.jp":3,"soo.kagoshima.jp":3,"tarumizu.kagoshima.jp":3,"yusui.kagoshima.jp":3,"aikawa.kanagawa.jp":3,"atsugi.kanagawa.jp":3,"ayase.kanagawa.jp":3,"chigasaki.kanagawa.jp":3,"ebina.kanagawa.jp":3,"fujisawa.kanagawa.jp":3,"hadano.kanagawa.jp":3,"hakone.kanagawa.jp":3,"hiratsuka.kanagawa.jp":3,"isehara.kanagawa.jp":3,"kaisei.kanagawa.jp":3,"kamakura.kanagawa.jp":3,"kiyokawa.kanagawa.jp":3,"matsuda.kanagawa.jp":3,"minamiashigara.kanagawa.jp":3,"miura.kanagawa.jp":3,"nakai.kanagawa.jp":3,"ninomiya.kanagawa.jp":3,"odawara.kanagawa.jp":3,"oi.kanagawa.jp":3,"oiso.kanagawa.jp":3,"sagamihara.kanagawa.jp":3,"samukawa.kanagawa.jp":3,"tsukui.kanagawa.jp":3,"yamakita.kanagawa.jp":3,"yamato.kanagawa.jp":3,"yokosuka.kanagawa.jp":3,"yugawara.kanagawa.jp":3,"zama.kanagawa.jp":3,"zushi.kanagawa.jp":3,"aki.kochi.jp":3,"geisei.kochi.jp":3,"hidaka.kochi.jp":3,"higashitsuno.kochi.jp":3,"ino.kochi.jp":3,"kagami.kochi.jp":3,"kami.kochi.jp":3,"kitagawa.kochi.jp":3,"kochi.kochi.jp":3,"mihara.kochi.jp":3,"motoyama.kochi.jp":3,"muroto.kochi.jp":3,"nahari.kochi.jp":3,"nakamura.kochi.jp":3,"nankoku.kochi.jp":3,"nishitosa.kochi.jp":3,"niyodogawa.kochi.jp":3,"ochi.kochi.jp":3,"okawa.kochi.jp":3,"otoyo.kochi.jp":3,"otsuki.kochi.jp":3,"sakawa.kochi.jp":3,"sukumo.kochi.jp":3,"susaki.kochi.jp":3,"tosa.kochi.jp":3,"tosashimizu.kochi.jp":3,"toyo.kochi.jp":3,"tsuno.kochi.jp":3,"umaji.kochi.jp":3,"yasuda.kochi.jp":3,"yusuhara.kochi.jp":3,"amakusa.kumamoto.jp":3,"arao.kumamoto.jp":3,"aso.kumamoto.jp":3,"choyo.kumamoto.jp":3,"gyokuto.kumamoto.jp":3,"kamiamakusa.kumamoto.jp":3,"kikuchi.kumamoto.jp":3,"kumamoto.kumamoto.jp":3,"mashiki.kumamoto.jp":3,"mifune.kumamoto.jp":3,"minamata.kumamoto.jp":3,"minamioguni.kumamoto.jp":3,"nagasu.kumamoto.jp":3,"nishihara.kumamoto.jp":3,"oguni.kumamoto.jp":3,"ozu.kumamoto.jp":3,"sumoto.kumamoto.jp":3,"takamori.kumamoto.jp":3,"uki.kumamoto.jp":3,"uto.kumamoto.jp":3,"yamaga.kumamoto.jp":3,"yamato.kumamoto.jp":3,"yatsushiro.kumamoto.jp":3,"ayabe.kyoto.jp":3,"fukuchiyama.kyoto.jp":3,"higashiyama.kyoto.jp":3,"ide.kyoto.jp":3,"ine.kyoto.jp":3,"joyo.kyoto.jp":3,"kameoka.kyoto.jp":3,"kamo.kyoto.jp":3,"kita.kyoto.jp":3,"kizu.kyoto.jp":3,"kumiyama.kyoto.jp":3,"kyotamba.kyoto.jp":3,"kyotanabe.kyoto.jp":3,"kyotango.kyoto.jp":3,"maizuru.kyoto.jp":3,"minami.kyoto.jp":3,"minamiyamashiro.kyoto.jp":3,"miyazu.kyoto.jp":3,"muko.kyoto.jp":3,"nagaokakyo.kyoto.jp":3,"nakagyo.kyoto.jp":3,"nantan.kyoto.jp":3,"oyamazaki.kyoto.jp":3,"sakyo.kyoto.jp":3,"seika.kyoto.jp":3,"tanabe.kyoto.jp":3,"uji.kyoto.jp":3,"ujitawara.kyoto.jp":3,"wazuka.kyoto.jp":3,"yamashina.kyoto.jp":3,"yawata.kyoto.jp":3,"asahi.mie.jp":3,"inabe.mie.jp":3,"ise.mie.jp":3,"kameyama.mie.jp":3,"kawagoe.mie.jp":3,"kiho.mie.jp":3,"kisosaki.mie.jp":3,"kiwa.mie.jp":3,"komono.mie.jp":3,"kumano.mie.jp":3,"kuwana.mie.jp":3,"matsusaka.mie.jp":3,"meiwa.mie.jp":3,"mihama.mie.jp":3,"minamiise.mie.jp":3,"misugi.mie.jp":3,"miyama.mie.jp":3,"nabari.mie.jp":3,"shima.mie.jp":3,"suzuka.mie.jp":3,"tado.mie.jp":3,"taiki.mie.jp":3,"taki.mie.jp":3,"tamaki.mie.jp":3,"toba.mie.jp":3,"tsu.mie.jp":3,"udono.mie.jp":3,"ureshino.mie.jp":3,"watarai.mie.jp":3,"yokkaichi.mie.jp":3,"furukawa.miyagi.jp":3,"higashimatsushima.miyagi.jp":3,"ishinomaki.miyagi.jp":3,"iwanuma.miyagi.jp":3,"kakuda.miyagi.jp":3,"kami.miyagi.jp":3,"kawasaki.miyagi.jp":3,"marumori.miyagi.jp":3,"matsushima.miyagi.jp":3,"minamisanriku.miyagi.jp":3,"misato.miyagi.jp":3,"murata.miyagi.jp":3,"natori.miyagi.jp":3,"ogawara.miyagi.jp":3,"ohira.miyagi.jp":3,"onagawa.miyagi.jp":3,"osaki.miyagi.jp":3,"rifu.miyagi.jp":3,"semine.miyagi.jp":3,"shibata.miyagi.jp":3,"shichikashuku.miyagi.jp":3,"shikama.miyagi.jp":3,"shiogama.miyagi.jp":3,"shiroishi.miyagi.jp":3,"tagajo.miyagi.jp":3,"taiwa.miyagi.jp":3,"tome.miyagi.jp":3,"tomiya.miyagi.jp":3,"wakuya.miyagi.jp":3,"watari.miyagi.jp":3,"yamamoto.miyagi.jp":3,"zao.miyagi.jp":3,"aya.miyazaki.jp":3,"ebino.miyazaki.jp":3,"gokase.miyazaki.jp":3,"hyuga.miyazaki.jp":3,"kadogawa.miyazaki.jp":3,"kawaminami.miyazaki.jp":3,"kijo.miyazaki.jp":3,"kitagawa.miyazaki.jp":3,"kitakata.miyazaki.jp":3,"kitaura.miyazaki.jp":3,"kobayashi.miyazaki.jp":3,"kunitomi.miyazaki.jp":3,"kushima.miyazaki.jp":3,"mimata.miyazaki.jp":3,"miyakonojo.miyazaki.jp":3,"miyazaki.miyazaki.jp":3,"morotsuka.miyazaki.jp":3,"nichinan.miyazaki.jp":3,"nishimera.miyazaki.jp":3,"nobeoka.miyazaki.jp":3,"saito.miyazaki.jp":3,"shiiba.miyazaki.jp":3,"shintomi.miyazaki.jp":3,"takaharu.miyazaki.jp":3,"takanabe.miyazaki.jp":3,"takazaki.miyazaki.jp":3,"tsuno.miyazaki.jp":3,"achi.nagano.jp":3,"agematsu.nagano.jp":3,"anan.nagano.jp":3,"aoki.nagano.jp":3,"asahi.nagano.jp":3,"azumino.nagano.jp":3,"chikuhoku.nagano.jp":3,"chikuma.nagano.jp":3,"chino.nagano.jp":3,"fujimi.nagano.jp":3,"hakuba.nagano.jp":3,"hara.nagano.jp":3,"hiraya.nagano.jp":3,"iida.nagano.jp":3,"iijima.nagano.jp":3,"iiyama.nagano.jp":3,"iizuna.nagano.jp":3,"ikeda.nagano.jp":3,"ikusaka.nagano.jp":3,"ina.nagano.jp":3,"karuizawa.nagano.jp":3,"kawakami.nagano.jp":3,"kiso.nagano.jp":3,"kisofukushima.nagano.jp":3,"kitaaiki.nagano.jp":3,"komagane.nagano.jp":3,"komoro.nagano.jp":3,"matsukawa.nagano.jp":3,"matsumoto.nagano.jp":3,"miasa.nagano.jp":3,"minamiaiki.nagano.jp":3,"minamimaki.nagano.jp":3,"minamiminowa.nagano.jp":3,"minowa.nagano.jp":3,"miyada.nagano.jp":3,"miyota.nagano.jp":3,"mochizuki.nagano.jp":3,"nagano.nagano.jp":3,"nagawa.nagano.jp":3,"nagiso.nagano.jp":3,"nakagawa.nagano.jp":3,"nakano.nagano.jp":3,"nozawaonsen.nagano.jp":3,"obuse.nagano.jp":3,"ogawa.nagano.jp":3,"okaya.nagano.jp":3,"omachi.nagano.jp":3,"omi.nagano.jp":3,"ookuwa.nagano.jp":3,"ooshika.nagano.jp":3,"otaki.nagano.jp":3,"otari.nagano.jp":3,"sakae.nagano.jp":3,"sakaki.nagano.jp":3,"saku.nagano.jp":3,"sakuho.nagano.jp":3,"shimosuwa.nagano.jp":3,"shinanomachi.nagano.jp":3,"shiojiri.nagano.jp":3,"suwa.nagano.jp":3,"suzaka.nagano.jp":3,"takagi.nagano.jp":3,"takamori.nagano.jp":3,"takayama.nagano.jp":3,"tateshina.nagano.jp":3,"tatsuno.nagano.jp":3,"togakushi.nagano.jp":3,"togura.nagano.jp":3,"tomi.nagano.jp":3,"ueda.nagano.jp":3,"wada.nagano.jp":3,"yamagata.nagano.jp":3,"yamanouchi.nagano.jp":3,"yasaka.nagano.jp":3,"yasuoka.nagano.jp":3,"chijiwa.nagasaki.jp":3,"futsu.nagasaki.jp":3,"goto.nagasaki.jp":3,"hasami.nagasaki.jp":3,"hirado.nagasaki.jp":3,"iki.nagasaki.jp":3,"isahaya.nagasaki.jp":3,"kawatana.nagasaki.jp":3,"kuchinotsu.nagasaki.jp":3,"matsuura.nagasaki.jp":3,"nagasaki.nagasaki.jp":3,"obama.nagasaki.jp":3,"omura.nagasaki.jp":3,"oseto.nagasaki.jp":3,"saikai.nagasaki.jp":3,"sasebo.nagasaki.jp":3,"seihi.nagasaki.jp":3,"shimabara.nagasaki.jp":3,"shinkamigoto.nagasaki.jp":3,"togitsu.nagasaki.jp":3,"tsushima.nagasaki.jp":3,"unzen.nagasaki.jp":3,"ando.nara.jp":3,"gose.nara.jp":3,"heguri.nara.jp":3,"higashiyoshino.nara.jp":3,"ikaruga.nara.jp":3,"ikoma.nara.jp":3,"kamikitayama.nara.jp":3,"kanmaki.nara.jp":3,"kashiba.nara.jp":3,"kashihara.nara.jp":3,"katsuragi.nara.jp":3,"kawai.nara.jp":3,"kawakami.nara.jp":3,"kawanishi.nara.jp":3,"koryo.nara.jp":3,"kurotaki.nara.jp":3,"mitsue.nara.jp":3,"miyake.nara.jp":3,"nara.nara.jp":3,"nosegawa.nara.jp":3,"oji.nara.jp":3,"ouda.nara.jp":3,"oyodo.nara.jp":3,"sakurai.nara.jp":3,"sango.nara.jp":3,"shimoichi.nara.jp":3,"shimokitayama.nara.jp":3,"shinjo.nara.jp":3,"soni.nara.jp":3,"takatori.nara.jp":3,"tawaramoto.nara.jp":3,"tenkawa.nara.jp":3,"tenri.nara.jp":3,"uda.nara.jp":3,"yamatokoriyama.nara.jp":3,"yamatotakada.nara.jp":3,"yamazoe.nara.jp":3,"yoshino.nara.jp":3,"aga.niigata.jp":3,"agano.niigata.jp":3,"gosen.niigata.jp":3,"itoigawa.niigata.jp":3,"izumozaki.niigata.jp":3,"joetsu.niigata.jp":3,"kamo.niigata.jp":3,"kariwa.niigata.jp":3,"kashiwazaki.niigata.jp":3,"minamiuonuma.niigata.jp":3,"mitsuke.niigata.jp":3,"muika.niigata.jp":3,"murakami.niigata.jp":3,"myoko.niigata.jp":3,"nagaoka.niigata.jp":3,"niigata.niigata.jp":3,"ojiya.niigata.jp":3,"omi.niigata.jp":3,"sado.niigata.jp":3,"sanjo.niigata.jp":3,"seiro.niigata.jp":3,"seirou.niigata.jp":3,"sekikawa.niigata.jp":3,"shibata.niigata.jp":3,"tagami.niigata.jp":3,"tainai.niigata.jp":3,"tochio.niigata.jp":3,"tokamachi.niigata.jp":3,"tsubame.niigata.jp":3,"tsunan.niigata.jp":3,"uonuma.niigata.jp":3,"yahiko.niigata.jp":3,"yoita.niigata.jp":3,"yuzawa.niigata.jp":3,"beppu.oita.jp":3,"bungoono.oita.jp":3,"bungotakada.oita.jp":3,"hasama.oita.jp":3,"hiji.oita.jp":3,"himeshima.oita.jp":3,"hita.oita.jp":3,"kamitsue.oita.jp":3,"kokonoe.oita.jp":3,"kuju.oita.jp":3,"kunisaki.oita.jp":3,"kusu.oita.jp":3,"oita.oita.jp":3,"saiki.oita.jp":3,"taketa.oita.jp":3,"tsukumi.oita.jp":3,"usa.oita.jp":3,"usuki.oita.jp":3,"yufu.oita.jp":3,"akaiwa.okayama.jp":3,"asakuchi.okayama.jp":3,"bizen.okayama.jp":3,"hayashima.okayama.jp":3,"ibara.okayama.jp":3,"kagamino.okayama.jp":3,"kasaoka.okayama.jp":3,"kibichuo.okayama.jp":3,"kumenan.okayama.jp":3,"kurashiki.okayama.jp":3,"maniwa.okayama.jp":3,"misaki.okayama.jp":3,"nagi.okayama.jp":3,"niimi.okayama.jp":3,"nishiawakura.okayama.jp":3,"okayama.okayama.jp":3,"satosho.okayama.jp":3,"setouchi.okayama.jp":3,"shinjo.okayama.jp":3,"shoo.okayama.jp":3,"soja.okayama.jp":3,"takahashi.okayama.jp":3,"tamano.okayama.jp":3,"tsuyama.okayama.jp":3,"wake.okayama.jp":3,"yakage.okayama.jp":3,"aguni.okinawa.jp":3,"ginowan.okinawa.jp":3,"ginoza.okinawa.jp":3,"gushikami.okinawa.jp":3,"haebaru.okinawa.jp":3,"higashi.okinawa.jp":3,"hirara.okinawa.jp":3,"iheya.okinawa.jp":3,"ishigaki.okinawa.jp":3,"ishikawa.okinawa.jp":3,"itoman.okinawa.jp":3,"izena.okinawa.jp":3,"kadena.okinawa.jp":3,"kin.okinawa.jp":3,"kitadaito.okinawa.jp":3,"kitanakagusuku.okinawa.jp":3,"kumejima.okinawa.jp":3,"kunigami.okinawa.jp":3,"minamidaito.okinawa.jp":3,"motobu.okinawa.jp":3,"nago.okinawa.jp":3,"naha.okinawa.jp":3,"nakagusuku.okinawa.jp":3,"nakijin.okinawa.jp":3,"nanjo.okinawa.jp":3,"nishihara.okinawa.jp":3,"ogimi.okinawa.jp":3,"okinawa.okinawa.jp":3,"onna.okinawa.jp":3,"shimoji.okinawa.jp":3,"taketomi.okinawa.jp":3,"tarama.okinawa.jp":3,"tokashiki.okinawa.jp":3,"tomigusuku.okinawa.jp":3,"tonaki.okinawa.jp":3,"urasoe.okinawa.jp":3,"uruma.okinawa.jp":3,"yaese.okinawa.jp":3,"yomitan.okinawa.jp":3,"yonabaru.okinawa.jp":3,"yonaguni.okinawa.jp":3,"zamami.okinawa.jp":3,"abeno.osaka.jp":3,"chihayaakasaka.osaka.jp":3,"chuo.osaka.jp":3,"daito.osaka.jp":3,"fujiidera.osaka.jp":3,"habikino.osaka.jp":3,"hannan.osaka.jp":3,"higashiosaka.osaka.jp":3,"higashisumiyoshi.osaka.jp":3,"higashiyodogawa.osaka.jp":3,"hirakata.osaka.jp":3,"ibaraki.osaka.jp":3,"ikeda.osaka.jp":3,"izumi.osaka.jp":3,"izumiotsu.osaka.jp":3,"izumisano.osaka.jp":3,"kadoma.osaka.jp":3,"kaizuka.osaka.jp":3,"kanan.osaka.jp":3,"kashiwara.osaka.jp":3,"katano.osaka.jp":3,"kawachinagano.osaka.jp":3,"kishiwada.osaka.jp":3,"kita.osaka.jp":3,"kumatori.osaka.jp":3,"matsubara.osaka.jp":3,"minato.osaka.jp":3,"minoh.osaka.jp":3,"misaki.osaka.jp":3,"moriguchi.osaka.jp":3,"neyagawa.osaka.jp":3,"nishi.osaka.jp":3,"nose.osaka.jp":3,"osakasayama.osaka.jp":3,"sakai.osaka.jp":3,"sayama.osaka.jp":3,"sennan.osaka.jp":3,"settsu.osaka.jp":3,"shijonawate.osaka.jp":3,"shimamoto.osaka.jp":3,"suita.osaka.jp":3,"tadaoka.osaka.jp":3,"taishi.osaka.jp":3,"tajiri.osaka.jp":3,"takaishi.osaka.jp":3,"takatsuki.osaka.jp":3,"tondabayashi.osaka.jp":3,"toyonaka.osaka.jp":3,"toyono.osaka.jp":3,"yao.osaka.jp":3,"ariake.saga.jp":3,"arita.saga.jp":3,"fukudomi.saga.jp":3,"genkai.saga.jp":3,"hamatama.saga.jp":3,"hizen.saga.jp":3,"imari.saga.jp":3,"kamimine.saga.jp":3,"kanzaki.saga.jp":3,"karatsu.saga.jp":3,"kashima.saga.jp":3,"kitagata.saga.jp":3,"kitahata.saga.jp":3,"kiyama.saga.jp":3,"kouhoku.saga.jp":3,"kyuragi.saga.jp":3,"nishiarita.saga.jp":3,"ogi.saga.jp":3,"omachi.saga.jp":3,"ouchi.saga.jp":3,"saga.saga.jp":3,"shiroishi.saga.jp":3,"taku.saga.jp":3,"tara.saga.jp":3,"tosu.saga.jp":3,"yoshinogari.saga.jp":3,"arakawa.saitama.jp":3,"asaka.saitama.jp":3,"chichibu.saitama.jp":3,"fujimi.saitama.jp":3,"fujimino.saitama.jp":3,"fukaya.saitama.jp":3,"hanno.saitama.jp":3,"hanyu.saitama.jp":3,"hasuda.saitama.jp":3,"hatogaya.saitama.jp":3,"hatoyama.saitama.jp":3,"hidaka.saitama.jp":3,"higashichichibu.saitama.jp":3,"higashimatsuyama.saitama.jp":3,"honjo.saitama.jp":3,"ina.saitama.jp":3,"iruma.saitama.jp":3,"iwatsuki.saitama.jp":3,"kamiizumi.saitama.jp":3,"kamikawa.saitama.jp":3,"kamisato.saitama.jp":3,"kasukabe.saitama.jp":3,"kawagoe.saitama.jp":3,"kawaguchi.saitama.jp":3,"kawajima.saitama.jp":3,"kazo.saitama.jp":3,"kitamoto.saitama.jp":3,"koshigaya.saitama.jp":3,"kounosu.saitama.jp":3,"kuki.saitama.jp":3,"kumagaya.saitama.jp":3,"matsubushi.saitama.jp":3,"minano.saitama.jp":3,"misato.saitama.jp":3,"miyashiro.saitama.jp":3,"miyoshi.saitama.jp":3,"moroyama.saitama.jp":3,"nagatoro.saitama.jp":3,"namegawa.saitama.jp":3,"niiza.saitama.jp":3,"ogano.saitama.jp":3,"ogawa.saitama.jp":3,"ogose.saitama.jp":3,"okegawa.saitama.jp":3,"omiya.saitama.jp":3,"otaki.saitama.jp":3,"ranzan.saitama.jp":3,"ryokami.saitama.jp":3,"saitama.saitama.jp":3,"sakado.saitama.jp":3,"satte.saitama.jp":3,"sayama.saitama.jp":3,"shiki.saitama.jp":3,"shiraoka.saitama.jp":3,"soka.saitama.jp":3,"sugito.saitama.jp":3,"toda.saitama.jp":3,"tokigawa.saitama.jp":3,"tokorozawa.saitama.jp":3,"tsurugashima.saitama.jp":3,"urawa.saitama.jp":3,"warabi.saitama.jp":3,"yashio.saitama.jp":3,"yokoze.saitama.jp":3,"yono.saitama.jp":3,"yorii.saitama.jp":3,"yoshida.saitama.jp":3,"yoshikawa.saitama.jp":3,"yoshimi.saitama.jp":3,"aisho.shiga.jp":3,"gamo.shiga.jp":3,"higashiomi.shiga.jp":3,"hikone.shiga.jp":3,"koka.shiga.jp":3,"konan.shiga.jp":3,"kosei.shiga.jp":3,"koto.shiga.jp":3,"kusatsu.shiga.jp":3,"maibara.shiga.jp":3,"moriyama.shiga.jp":3,"nagahama.shiga.jp":3,"nishiazai.shiga.jp":3,"notogawa.shiga.jp":3,"omihachiman.shiga.jp":3,"otsu.shiga.jp":3,"ritto.shiga.jp":3,"ryuoh.shiga.jp":3,"takashima.shiga.jp":3,"takatsuki.shiga.jp":3,"torahime.shiga.jp":3,"toyosato.shiga.jp":3,"yasu.shiga.jp":3,"akagi.shimane.jp":3,"ama.shimane.jp":3,"gotsu.shimane.jp":3,"hamada.shimane.jp":3,"higashiizumo.shimane.jp":3,"hikawa.shimane.jp":3,"hikimi.shimane.jp":3,"izumo.shimane.jp":3,"kakinoki.shimane.jp":3,"masuda.shimane.jp":3,"matsue.shimane.jp":3,"misato.shimane.jp":3,"nishinoshima.shimane.jp":3,"ohda.shimane.jp":3,"okinoshima.shimane.jp":3,"okuizumo.shimane.jp":3,"shimane.shimane.jp":3,"tamayu.shimane.jp":3,"tsuwano.shimane.jp":3,"unnan.shimane.jp":3,"yakumo.shimane.jp":3,"yasugi.shimane.jp":3,"yatsuka.shimane.jp":3,"arai.shizuoka.jp":3,"atami.shizuoka.jp":3,"fuji.shizuoka.jp":3,"fujieda.shizuoka.jp":3,"fujikawa.shizuoka.jp":3,"fujinomiya.shizuoka.jp":3,"fukuroi.shizuoka.jp":3,"gotemba.shizuoka.jp":3,"haibara.shizuoka.jp":3,"hamamatsu.shizuoka.jp":3,"higashiizu.shizuoka.jp":3,"ito.shizuoka.jp":3,"iwata.shizuoka.jp":3,"izu.shizuoka.jp":3,"izunokuni.shizuoka.jp":3,"kakegawa.shizuoka.jp":3,"kannami.shizuoka.jp":3,"kawanehon.shizuoka.jp":3,"kawazu.shizuoka.jp":3,"kikugawa.shizuoka.jp":3,"kosai.shizuoka.jp":3,"makinohara.shizuoka.jp":3,"matsuzaki.shizuoka.jp":3,"minamiizu.shizuoka.jp":3,"mishima.shizuoka.jp":3,"morimachi.shizuoka.jp":3,"nishiizu.shizuoka.jp":3,"numazu.shizuoka.jp":3,"omaezaki.shizuoka.jp":3,"shimada.shizuoka.jp":3,"shimizu.shizuoka.jp":3,"shimoda.shizuoka.jp":3,"shizuoka.shizuoka.jp":3,"susono.shizuoka.jp":3,"yaizu.shizuoka.jp":3,"yoshida.shizuoka.jp":3,"ashikaga.tochigi.jp":3,"bato.tochigi.jp":3,"haga.tochigi.jp":3,"ichikai.tochigi.jp":3,"iwafune.tochigi.jp":3,"kaminokawa.tochigi.jp":3,"kanuma.tochigi.jp":3,"karasuyama.tochigi.jp":3,"kuroiso.tochigi.jp":3,"mashiko.tochigi.jp":3,"mibu.tochigi.jp":3,"moka.tochigi.jp":3,"motegi.tochigi.jp":3,"nasu.tochigi.jp":3,"nasushiobara.tochigi.jp":3,"nikko.tochigi.jp":3,"nishikata.tochigi.jp":3,"nogi.tochigi.jp":3,"ohira.tochigi.jp":3,"ohtawara.tochigi.jp":3,"oyama.tochigi.jp":3,"sakura.tochigi.jp":3,"sano.tochigi.jp":3,"shimotsuke.tochigi.jp":3,"shioya.tochigi.jp":3,"takanezawa.tochigi.jp":3,"tochigi.tochigi.jp":3,"tsuga.tochigi.jp":3,"ujiie.tochigi.jp":3,"utsunomiya.tochigi.jp":3,"yaita.tochigi.jp":3,"aizumi.tokushima.jp":3,"anan.tokushima.jp":3,"ichiba.tokushima.jp":3,"itano.tokushima.jp":3,"kainan.tokushima.jp":3,"komatsushima.tokushima.jp":3,"matsushige.tokushima.jp":3,"mima.tokushima.jp":3,"minami.tokushima.jp":3,"miyoshi.tokushima.jp":3,"mugi.tokushima.jp":3,"nakagawa.tokushima.jp":3,"naruto.tokushima.jp":3,"sanagochi.tokushima.jp":3,"shishikui.tokushima.jp":3,"tokushima.tokushima.jp":3,"wajiki.tokushima.jp":3,"adachi.tokyo.jp":3,"akiruno.tokyo.jp":3,"akishima.tokyo.jp":3,"aogashima.tokyo.jp":3,"arakawa.tokyo.jp":3,"bunkyo.tokyo.jp":3,"chiyoda.tokyo.jp":3,"chofu.tokyo.jp":3,"chuo.tokyo.jp":3,"edogawa.tokyo.jp":3,"fuchu.tokyo.jp":3,"fussa.tokyo.jp":3,"hachijo.tokyo.jp":3,"hachioji.tokyo.jp":3,"hamura.tokyo.jp":3,"higashikurume.tokyo.jp":3,"higashimurayama.tokyo.jp":3,"higashiyamato.tokyo.jp":3,"hino.tokyo.jp":3,"hinode.tokyo.jp":3,"hinohara.tokyo.jp":3,"inagi.tokyo.jp":3,"itabashi.tokyo.jp":3,"katsushika.tokyo.jp":3,"kita.tokyo.jp":3,"kiyose.tokyo.jp":3,"kodaira.tokyo.jp":3,"koganei.tokyo.jp":3,"kokubunji.tokyo.jp":3,"komae.tokyo.jp":3,"koto.tokyo.jp":3,"kouzushima.tokyo.jp":3,"kunitachi.tokyo.jp":3,"machida.tokyo.jp":3,"meguro.tokyo.jp":3,"minato.tokyo.jp":3,"mitaka.tokyo.jp":3,"mizuho.tokyo.jp":3,"musashimurayama.tokyo.jp":3,"musashino.tokyo.jp":3,"nakano.tokyo.jp":3,"nerima.tokyo.jp":3,"ogasawara.tokyo.jp":3,"okutama.tokyo.jp":3,"ome.tokyo.jp":3,"oshima.tokyo.jp":3,"ota.tokyo.jp":3,"setagaya.tokyo.jp":3,"shibuya.tokyo.jp":3,"shinagawa.tokyo.jp":3,"shinjuku.tokyo.jp":3,"suginami.tokyo.jp":3,"sumida.tokyo.jp":3,"tachikawa.tokyo.jp":3,"taito.tokyo.jp":3,"tama.tokyo.jp":3,"toshima.tokyo.jp":3,"chizu.tottori.jp":3,"hino.tottori.jp":3,"kawahara.tottori.jp":3,"koge.tottori.jp":3,"kotoura.tottori.jp":3,"misasa.tottori.jp":3,"nanbu.tottori.jp":3,"nichinan.tottori.jp":3,"sakaiminato.tottori.jp":3,"tottori.tottori.jp":3,"wakasa.tottori.jp":3,"yazu.tottori.jp":3,"yonago.tottori.jp":3,"asahi.toyama.jp":3,"fuchu.toyama.jp":3,"fukumitsu.toyama.jp":3,"funahashi.toyama.jp":3,"himi.toyama.jp":3,"imizu.toyama.jp":3,"inami.toyama.jp":3,"johana.toyama.jp":3,"kamiichi.toyama.jp":3,"kurobe.toyama.jp":3,"nakaniikawa.toyama.jp":3,"namerikawa.toyama.jp":3,"nanto.toyama.jp":3,"nyuzen.toyama.jp":3,"oyabe.toyama.jp":3,"taira.toyama.jp":3,"takaoka.toyama.jp":3,"tateyama.toyama.jp":3,"toga.toyama.jp":3,"tonami.toyama.jp":3,"toyama.toyama.jp":3,"unazuki.toyama.jp":3,"uozu.toyama.jp":3,"yamada.toyama.jp":3,"arida.wakayama.jp":3,"aridagawa.wakayama.jp":3,"gobo.wakayama.jp":3,"hashimoto.wakayama.jp":3,"hidaka.wakayama.jp":3,"hirogawa.wakayama.jp":3,"inami.wakayama.jp":3,"iwade.wakayama.jp":3,"kainan.wakayama.jp":3,"kamitonda.wakayama.jp":3,"katsuragi.wakayama.jp":3,"kimino.wakayama.jp":3,"kinokawa.wakayama.jp":3,"kitayama.wakayama.jp":3,"koya.wakayama.jp":3,"koza.wakayama.jp":3,"kozagawa.wakayama.jp":3,"kudoyama.wakayama.jp":3,"kushimoto.wakayama.jp":3,"mihama.wakayama.jp":3,"misato.wakayama.jp":3,"nachikatsuura.wakayama.jp":3,"shingu.wakayama.jp":3,"shirahama.wakayama.jp":3,"taiji.wakayama.jp":3,"tanabe.wakayama.jp":3,"wakayama.wakayama.jp":3,"yuasa.wakayama.jp":3,"yura.wakayama.jp":3,"asahi.yamagata.jp":3,"funagata.yamagata.jp":3,"higashine.yamagata.jp":3,"iide.yamagata.jp":3,"kahoku.yamagata.jp":3,"kaminoyama.yamagata.jp":3,"kaneyama.yamagata.jp":3,"kawanishi.yamagata.jp":3,"mamurogawa.yamagata.jp":3,"mikawa.yamagata.jp":3,"murayama.yamagata.jp":3,"nagai.yamagata.jp":3,"nakayama.yamagata.jp":3,"nanyo.yamagata.jp":3,"nishikawa.yamagata.jp":3,"obanazawa.yamagata.jp":3,"oe.yamagata.jp":3,"oguni.yamagata.jp":3,"ohkura.yamagata.jp":3,"oishida.yamagata.jp":3,"sagae.yamagata.jp":3,"sakata.yamagata.jp":3,"sakegawa.yamagata.jp":3,"shinjo.yamagata.jp":3,"shirataka.yamagata.jp":3,"shonai.yamagata.jp":3,"takahata.yamagata.jp":3,"tendo.yamagata.jp":3,"tozawa.yamagata.jp":3,"tsuruoka.yamagata.jp":3,"yamagata.yamagata.jp":3,"yamanobe.yamagata.jp":3,"yonezawa.yamagata.jp":3,"yuza.yamagata.jp":3,"abu.yamaguchi.jp":3,"hagi.yamaguchi.jp":3,"hikari.yamaguchi.jp":3,"hofu.yamaguchi.jp":3,"iwakuni.yamaguchi.jp":3,"kudamatsu.yamaguchi.jp":3,"mitou.yamaguchi.jp":3,"nagato.yamaguchi.jp":3,"oshima.yamaguchi.jp":3,"shimonoseki.yamaguchi.jp":3,"shunan.yamaguchi.jp":3,"tabuse.yamaguchi.jp":3,"tokuyama.yamaguchi.jp":3,"toyota.yamaguchi.jp":3,"ube.yamaguchi.jp":3,"yuu.yamaguchi.jp":3,"chuo.yamanashi.jp":3,"doshi.yamanashi.jp":3,"fuefuki.yamanashi.jp":3,"fujikawa.yamanashi.jp":3,"fujikawaguchiko.yamanashi.jp":3,"fujiyoshida.yamanashi.jp":3,"hayakawa.yamanashi.jp":3,"hokuto.yamanashi.jp":3,"ichikawamisato.yamanashi.jp":3,"kai.yamanashi.jp":3,"kofu.yamanashi.jp":3,"koshu.yamanashi.jp":3,"kosuge.yamanashi.jp":3,"minami-alps.yamanashi.jp":3,"minobu.yamanashi.jp":3,"nakamichi.yamanashi.jp":3,"nanbu.yamanashi.jp":3,"narusawa.yamanashi.jp":3,"nirasaki.yamanashi.jp":3,"nishikatsura.yamanashi.jp":3,"oshino.yamanashi.jp":3,"otsuki.yamanashi.jp":3,"showa.yamanashi.jp":3,"tabayama.yamanashi.jp":3,"tsuru.yamanashi.jp":3,"uenohara.yamanashi.jp":3,"yamanakako.yamanashi.jp":3,"yamanashi.yamanashi.jp":3,"ke":1,"ac.ke":2,"co.ke":2,"go.ke":2,"info.ke":2,"me.ke":2,"mobi.ke":2,"ne.ke":2,"or.ke":2,"sc.ke":2,"kg":1,"org.kg":2,"net.kg":2,"com.kg":2,"edu.kg":2,"gov.kg":2,"mil.kg":2,"kh":2,"ki":1,"edu.ki":2,"biz.ki":2,"net.ki":2,"org.ki":2,"gov.ki":2,"info.ki":2,"com.ki":2,"km":1,"org.km":2,"nom.km":2,"gov.km":2,"prd.km":2,"tm.km":2,"edu.km":2,"mil.km":2,"ass.km":2,"com.km":2,"coop.km":2,"asso.km":2,"presse.km":2,"medecin.km":2,"notaires.km":2,"pharmaciens.km":2,"veterinaire.km":2,"gouv.km":2,"kn":1,"net.kn":2,"org.kn":2,"edu.kn":2,"gov.kn":2,"kp":1,"com.kp":2,"edu.kp":2,"gov.kp":2,"org.kp":2,"rep.kp":2,"tra.kp":2,"kr":1,"ac.kr":2,"co.kr":2,"es.kr":2,"go.kr":2,"hs.kr":2,"kg.kr":2,"mil.kr":2,"ms.kr":2,"ne.kr":2,"or.kr":2,"pe.kr":2,"re.kr":2,"sc.kr":2,"busan.kr":2,"chungbuk.kr":2,"chungnam.kr":2,"daegu.kr":2,"daejeon.kr":2,"gangwon.kr":2,"gwangju.kr":2,"gyeongbuk.kr":2,"gyeonggi.kr":2,"gyeongnam.kr":2,"incheon.kr":2,"jeju.kr":2,"jeonbuk.kr":2,"jeonnam.kr":2,"seoul.kr":2,"ulsan.kr":2,"kw":1,"com.kw":2,"edu.kw":2,"emb.kw":2,"gov.kw":2,"ind.kw":2,"net.kw":2,"org.kw":2,"ky":1,"com.ky":2,"edu.ky":2,"net.ky":2,"org.ky":2,"kz":1,"org.kz":2,"edu.kz":2,"net.kz":2,"gov.kz":2,"mil.kz":2,"com.kz":2,"la":1,"int.la":2,"net.la":2,"info.la":2,"edu.la":2,"gov.la":2,"per.la":2,"com.la":2,"org.la":2,"lb":1,"com.lb":2,"edu.lb":2,"gov.lb":2,"net.lb":2,"org.lb":2,"lc":1,"com.lc":2,"net.lc":2,"co.lc":2,"org.lc":2,"edu.lc":2,"gov.lc":2,"li":1,"lk":1,"gov.lk":2,"sch.lk":2,"net.lk":2,"int.lk":2,"com.lk":2,"org.lk":2,"edu.lk":2,"ngo.lk":2,"soc.lk":2,"web.lk":2,"ltd.lk":2,"assn.lk":2,"grp.lk":2,"hotel.lk":2,"ac.lk":2,"lr":1,"com.lr":2,"edu.lr":2,"gov.lr":2,"org.lr":2,"net.lr":2,"ls":1,"ac.ls":2,"biz.ls":2,"co.ls":2,"edu.ls":2,"gov.ls":2,"info.ls":2,"net.ls":2,"org.ls":2,"sc.ls":2,"lt":1,"gov.lt":2,"lu":1,"lv":1,"com.lv":2,"edu.lv":2,"gov.lv":2,"org.lv":2,"mil.lv":2,"id.lv":2,"net.lv":2,"asn.lv":2,"conf.lv":2,"ly":1,"com.ly":2,"net.ly":2,"gov.ly":2,"plc.ly":2,"edu.ly":2,"sch.ly":2,"med.ly":2,"org.ly":2,"id.ly":2,"ma":1,"co.ma":2,"net.ma":2,"gov.ma":2,"org.ma":2,"ac.ma":2,"press.ma":2,"mc":1,"tm.mc":2,"asso.mc":2,"md":1,"me":1,"co.me":2,"net.me":2,"org.me":2,"edu.me":2,"ac.me":2,"gov.me":2,"its.me":2,"priv.me":2,"mg":1,"org.mg":2,"nom.mg":2,"gov.mg":2,"prd.mg":2,"tm.mg":2,"edu.mg":2,"mil.mg":2,"com.mg":2,"co.mg":2,"mh":1,"mil":1,"mk":1,"com.mk":2,"org.mk":2,"net.mk":2,"edu.mk":2,"gov.mk":2,"inf.mk":2,"name.mk":2,"ml":1,"com.ml":2,"edu.ml":2,"gouv.ml":2,"gov.ml":2,"net.ml":2,"org.ml":2,"presse.ml":2,"mm":2,"mn":1,"gov.mn":2,"edu.mn":2,"org.mn":2,"mo":1,"com.mo":2,"net.mo":2,"org.mo":2,"edu.mo":2,"gov.mo":2,"mobi":1,"mp":1,"mq":1,"mr":1,"gov.mr":2,"ms":1,"com.ms":2,"edu.ms":2,"gov.ms":2,"net.ms":2,"org.ms":2,"mt":1,"com.mt":2,"edu.mt":2,"net.mt":2,"org.mt":2,"mu":1,"com.mu":2,"net.mu":2,"org.mu":2,"gov.mu":2,"ac.mu":2,"co.mu":2,"or.mu":2,"museum":1,"mv":1,"aero.mv":2,"biz.mv":2,"com.mv":2,"coop.mv":2,"edu.mv":2,"gov.mv":2,"info.mv":2,"int.mv":2,"mil.mv":2,"museum.mv":2,"name.mv":2,"net.mv":2,"org.mv":2,"pro.mv":2,"mw":1,"ac.mw":2,"biz.mw":2,"co.mw":2,"com.mw":2,"coop.mw":2,"edu.mw":2,"gov.mw":2,"int.mw":2,"museum.mw":2,"net.mw":2,"org.mw":2,"mx":1,"com.mx":2,"org.mx":2,"gob.mx":2,"edu.mx":2,"net.mx":2,"my":1,"biz.my":2,"com.my":2,"edu.my":2,"gov.my":2,"mil.my":2,"name.my":2,"net.my":2,"org.my":2,"mz":1,"ac.mz":2,"adv.mz":2,"co.mz":2,"edu.mz":2,"gov.mz":2,"mil.mz":2,"net.mz":2,"org.mz":2,"na":1,"info.na":2,"pro.na":2,"name.na":2,"school.na":2,"or.na":2,"dr.na":2,"us.na":2,"mx.na":2,"ca.na":2,"in.na":2,"cc.na":2,"tv.na":2,"ws.na":2,"mobi.na":2,"co.na":2,"com.na":2,"org.na":2,"name":1,"nc":1,"asso.nc":2,"nom.nc":2,"ne":1,"net":1,"nf":1,"com.nf":2,"net.nf":2,"per.nf":2,"rec.nf":2,"web.nf":2,"arts.nf":2,"firm.nf":2,"info.nf":2,"other.nf":2,"store.nf":2,"ng":1,"com.ng":2,"edu.ng":2,"gov.ng":2,"i.ng":2,"mil.ng":2,"mobi.ng":2,"name.ng":2,"net.ng":2,"org.ng":2,"sch.ng":2,"ni":1,"ac.ni":2,"biz.ni":2,"co.ni":2,"com.ni":2,"edu.ni":2,"gob.ni":2,"in.ni":2,"info.ni":2,"int.ni":2,"mil.ni":2,"net.ni":2,"nom.ni":2,"org.ni":2,"web.ni":2,"nl":1,"no":1,"fhs.no":2,"vgs.no":2,"fylkesbibl.no":2,"folkebibl.no":2,"museum.no":2,"idrett.no":2,"priv.no":2,"mil.no":2,"stat.no":2,"dep.no":2,"kommune.no":2,"herad.no":2,"aa.no":2,"ah.no":2,"bu.no":2,"fm.no":2,"hl.no":2,"hm.no":2,"jan-mayen.no":2,"mr.no":2,"nl.no":2,"nt.no":2,"of.no":2,"ol.no":2,"oslo.no":2,"rl.no":2,"sf.no":2,"st.no":2,"svalbard.no":2,"tm.no":2,"tr.no":2,"va.no":2,"vf.no":2,"gs.aa.no":3,"gs.ah.no":3,"gs.bu.no":3,"gs.fm.no":3,"gs.hl.no":3,"gs.hm.no":3,"gs.jan-mayen.no":3,"gs.mr.no":3,"gs.nl.no":3,"gs.nt.no":3,"gs.of.no":3,"gs.ol.no":3,"gs.oslo.no":3,"gs.rl.no":3,"gs.sf.no":3,"gs.st.no":3,"gs.svalbard.no":3,"gs.tm.no":3,"gs.tr.no":3,"gs.va.no":3,"gs.vf.no":3,"akrehamn.no":2,"xn--krehamn-dxa.no":2,"algard.no":2,"xn--lgrd-poac.no":2,"arna.no":2,"brumunddal.no":2,"bryne.no":2,"bronnoysund.no":2,"xn--brnnysund-m8ac.no":2,"drobak.no":2,"xn--drbak-wua.no":2,"egersund.no":2,"fetsund.no":2,"floro.no":2,"xn--flor-jra.no":2,"fredrikstad.no":2,"hokksund.no":2,"honefoss.no":2,"xn--hnefoss-q1a.no":2,"jessheim.no":2,"jorpeland.no":2,"xn--jrpeland-54a.no":2,"kirkenes.no":2,"kopervik.no":2,"krokstadelva.no":2,"langevag.no":2,"xn--langevg-jxa.no":2,"leirvik.no":2,"mjondalen.no":2,"xn--mjndalen-64a.no":2,"mo-i-rana.no":2,"mosjoen.no":2,"xn--mosjen-eya.no":2,"nesoddtangen.no":2,"orkanger.no":2,"osoyro.no":2,"xn--osyro-wua.no":2,"raholt.no":2,"xn--rholt-mra.no":2,"sandnessjoen.no":2,"xn--sandnessjen-ogb.no":2,"skedsmokorset.no":2,"slattum.no":2,"spjelkavik.no":2,"stathelle.no":2,"stavern.no":2,"stjordalshalsen.no":2,"xn--stjrdalshalsen-sqb.no":2,"tananger.no":2,"tranby.no":2,"vossevangen.no":2,"afjord.no":2,"xn--fjord-lra.no":2,"agdenes.no":2,"al.no":2,"xn--l-1fa.no":2,"alesund.no":2,"xn--lesund-hua.no":2,"alstahaug.no":2,"alta.no":2,"xn--lt-liac.no":2,"alaheadju.no":2,"xn--laheadju-7ya.no":2,"alvdal.no":2,"amli.no":2,"xn--mli-tla.no":2,"amot.no":2,"xn--mot-tla.no":2,"andebu.no":2,"andoy.no":2,"xn--andy-ira.no":2,"andasuolo.no":2,"ardal.no":2,"xn--rdal-poa.no":2,"aremark.no":2,"arendal.no":2,"xn--s-1fa.no":2,"aseral.no":2,"xn--seral-lra.no":2,"asker.no":2,"askim.no":2,"askvoll.no":2,"askoy.no":2,"xn--asky-ira.no":2,"asnes.no":2,"xn--snes-poa.no":2,"audnedaln.no":2,"aukra.no":2,"aure.no":2,"aurland.no":2,"aurskog-holand.no":2,"xn--aurskog-hland-jnb.no":2,"austevoll.no":2,"austrheim.no":2,"averoy.no":2,"xn--avery-yua.no":2,"balestrand.no":2,"ballangen.no":2,"balat.no":2,"xn--blt-elab.no":2,"balsfjord.no":2,"bahccavuotna.no":2,"xn--bhccavuotna-k7a.no":2,"bamble.no":2,"bardu.no":2,"beardu.no":2,"beiarn.no":2,"bajddar.no":2,"xn--bjddar-pta.no":2,"baidar.no":2,"xn--bidr-5nac.no":2,"berg.no":2,"bergen.no":2,"berlevag.no":2,"xn--berlevg-jxa.no":2,"bearalvahki.no":2,"xn--bearalvhki-y4a.no":2,"bindal.no":2,"birkenes.no":2,"bjarkoy.no":2,"xn--bjarky-fya.no":2,"bjerkreim.no":2,"bjugn.no":2,"bodo.no":2,"xn--bod-2na.no":2,"badaddja.no":2,"xn--bdddj-mrabd.no":2,"budejju.no":2,"bokn.no":2,"bremanger.no":2,"bronnoy.no":2,"xn--brnny-wuac.no":2,"bygland.no":2,"bykle.no":2,"barum.no":2,"xn--brum-voa.no":2,"bo.telemark.no":3,"xn--b-5ga.telemark.no":3,"bo.nordland.no":3,"xn--b-5ga.nordland.no":3,"bievat.no":2,"xn--bievt-0qa.no":2,"bomlo.no":2,"xn--bmlo-gra.no":2,"batsfjord.no":2,"xn--btsfjord-9za.no":2,"bahcavuotna.no":2,"xn--bhcavuotna-s4a.no":2,"dovre.no":2,"drammen.no":2,"drangedal.no":2,"dyroy.no":2,"xn--dyry-ira.no":2,"donna.no":2,"xn--dnna-gra.no":2,"eid.no":2,"eidfjord.no":2,"eidsberg.no":2,"eidskog.no":2,"eidsvoll.no":2,"eigersund.no":2,"elverum.no":2,"enebakk.no":2,"engerdal.no":2,"etne.no":2,"etnedal.no":2,"evenes.no":2,"evenassi.no":2,"xn--eveni-0qa01ga.no":2,"evje-og-hornnes.no":2,"farsund.no":2,"fauske.no":2,"fuossko.no":2,"fuoisku.no":2,"fedje.no":2,"fet.no":2,"finnoy.no":2,"xn--finny-yua.no":2,"fitjar.no":2,"fjaler.no":2,"fjell.no":2,"flakstad.no":2,"flatanger.no":2,"flekkefjord.no":2,"flesberg.no":2,"flora.no":2,"fla.no":2,"xn--fl-zia.no":2,"folldal.no":2,"forsand.no":2,"fosnes.no":2,"frei.no":2,"frogn.no":2,"froland.no":2,"frosta.no":2,"frana.no":2,"xn--frna-woa.no":2,"froya.no":2,"xn--frya-hra.no":2,"fusa.no":2,"fyresdal.no":2,"forde.no":2,"xn--frde-gra.no":2,"gamvik.no":2,"gangaviika.no":2,"xn--ggaviika-8ya47h.no":2,"gaular.no":2,"gausdal.no":2,"gildeskal.no":2,"xn--gildeskl-g0a.no":2,"giske.no":2,"gjemnes.no":2,"gjerdrum.no":2,"gjerstad.no":2,"gjesdal.no":2,"gjovik.no":2,"xn--gjvik-wua.no":2,"gloppen.no":2,"gol.no":2,"gran.no":2,"grane.no":2,"granvin.no":2,"gratangen.no":2,"grimstad.no":2,"grong.no":2,"kraanghke.no":2,"xn--kranghke-b0a.no":2,"grue.no":2,"gulen.no":2,"hadsel.no":2,"halden.no":2,"halsa.no":2,"hamar.no":2,"hamaroy.no":2,"habmer.no":2,"xn--hbmer-xqa.no":2,"hapmir.no":2,"xn--hpmir-xqa.no":2,"hammerfest.no":2,"hammarfeasta.no":2,"xn--hmmrfeasta-s4ac.no":2,"haram.no":2,"hareid.no":2,"harstad.no":2,"hasvik.no":2,"aknoluokta.no":2,"xn--koluokta-7ya57h.no":2,"hattfjelldal.no":2,"aarborte.no":2,"haugesund.no":2,"hemne.no":2,"hemnes.no":2,"hemsedal.no":2,"heroy.more-og-romsdal.no":3,"xn--hery-ira.xn--mre-og-romsdal-qqb.no":3,"heroy.nordland.no":3,"xn--hery-ira.nordland.no":3,"hitra.no":2,"hjartdal.no":2,"hjelmeland.no":2,"hobol.no":2,"xn--hobl-ira.no":2,"hof.no":2,"hol.no":2,"hole.no":2,"holmestrand.no":2,"holtalen.no":2,"xn--holtlen-hxa.no":2,"hornindal.no":2,"horten.no":2,"hurdal.no":2,"hurum.no":2,"hvaler.no":2,"hyllestad.no":2,"hagebostad.no":2,"xn--hgebostad-g3a.no":2,"hoyanger.no":2,"xn--hyanger-q1a.no":2,"hoylandet.no":2,"xn--hylandet-54a.no":2,"ha.no":2,"xn--h-2fa.no":2,"ibestad.no":2,"inderoy.no":2,"xn--indery-fya.no":2,"iveland.no":2,"jevnaker.no":2,"jondal.no":2,"jolster.no":2,"xn--jlster-bya.no":2,"karasjok.no":2,"karasjohka.no":2,"xn--krjohka-hwab49j.no":2,"karlsoy.no":2,"galsa.no":2,"xn--gls-elac.no":2,"karmoy.no":2,"xn--karmy-yua.no":2,"kautokeino.no":2,"guovdageaidnu.no":2,"klepp.no":2,"klabu.no":2,"xn--klbu-woa.no":2,"kongsberg.no":2,"kongsvinger.no":2,"kragero.no":2,"xn--krager-gya.no":2,"kristiansand.no":2,"kristiansund.no":2,"krodsherad.no":2,"xn--krdsherad-m8a.no":2,"kvalsund.no":2,"rahkkeravju.no":2,"xn--rhkkervju-01af.no":2,"kvam.no":2,"kvinesdal.no":2,"kvinnherad.no":2,"kviteseid.no":2,"kvitsoy.no":2,"xn--kvitsy-fya.no":2,"kvafjord.no":2,"xn--kvfjord-nxa.no":2,"giehtavuoatna.no":2,"kvanangen.no":2,"xn--kvnangen-k0a.no":2,"navuotna.no":2,"xn--nvuotna-hwa.no":2,"kafjord.no":2,"xn--kfjord-iua.no":2,"gaivuotna.no":2,"xn--givuotna-8ya.no":2,"larvik.no":2,"lavangen.no":2,"lavagis.no":2,"loabat.no":2,"xn--loabt-0qa.no":2,"lebesby.no":2,"davvesiida.no":2,"leikanger.no":2,"leirfjord.no":2,"leka.no":2,"leksvik.no":2,"lenvik.no":2,"leangaviika.no":2,"xn--leagaviika-52b.no":2,"lesja.no":2,"levanger.no":2,"lier.no":2,"lierne.no":2,"lillehammer.no":2,"lillesand.no":2,"lindesnes.no":2,"lindas.no":2,"xn--linds-pra.no":2,"lom.no":2,"loppa.no":2,"lahppi.no":2,"xn--lhppi-xqa.no":2,"lund.no":2,"lunner.no":2,"luroy.no":2,"xn--lury-ira.no":2,"luster.no":2,"lyngdal.no":2,"lyngen.no":2,"ivgu.no":2,"lardal.no":2,"lerdal.no":2,"xn--lrdal-sra.no":2,"lodingen.no":2,"xn--ldingen-q1a.no":2,"lorenskog.no":2,"xn--lrenskog-54a.no":2,"loten.no":2,"xn--lten-gra.no":2,"malvik.no":2,"masoy.no":2,"xn--msy-ula0h.no":2,"muosat.no":2,"xn--muost-0qa.no":2,"mandal.no":2,"marker.no":2,"marnardal.no":2,"masfjorden.no":2,"meland.no":2,"meldal.no":2,"melhus.no":2,"meloy.no":2,"xn--mely-ira.no":2,"meraker.no":2,"xn--merker-kua.no":2,"moareke.no":2,"xn--moreke-jua.no":2,"midsund.no":2,"midtre-gauldal.no":2,"modalen.no":2,"modum.no":2,"molde.no":2,"moskenes.no":2,"moss.no":2,"mosvik.no":2,"malselv.no":2,"xn--mlselv-iua.no":2,"malatvuopmi.no":2,"xn--mlatvuopmi-s4a.no":2,"namdalseid.no":2,"aejrie.no":2,"namsos.no":2,"namsskogan.no":2,"naamesjevuemie.no":2,"xn--nmesjevuemie-tcba.no":2,"laakesvuemie.no":2,"nannestad.no":2,"narvik.no":2,"narviika.no":2,"naustdal.no":2,"nedre-eiker.no":2,"nes.akershus.no":3,"nes.buskerud.no":3,"nesna.no":2,"nesodden.no":2,"nesseby.no":2,"unjarga.no":2,"xn--unjrga-rta.no":2,"nesset.no":2,"nissedal.no":2,"nittedal.no":2,"nord-aurdal.no":2,"nord-fron.no":2,"nord-odal.no":2,"norddal.no":2,"nordkapp.no":2,"davvenjarga.no":2,"xn--davvenjrga-y4a.no":2,"nordre-land.no":2,"nordreisa.no":2,"raisa.no":2,"xn--risa-5na.no":2,"nore-og-uvdal.no":2,"notodden.no":2,"naroy.no":2,"xn--nry-yla5g.no":2,"notteroy.no":2,"xn--nttery-byae.no":2,"odda.no":2,"oksnes.no":2,"xn--ksnes-uua.no":2,"oppdal.no":2,"oppegard.no":2,"xn--oppegrd-ixa.no":2,"orkdal.no":2,"orland.no":2,"xn--rland-uua.no":2,"orskog.no":2,"xn--rskog-uua.no":2,"orsta.no":2,"xn--rsta-fra.no":2,"os.hedmark.no":3,"os.hordaland.no":3,"osen.no":2,"osteroy.no":2,"xn--ostery-fya.no":2,"ostre-toten.no":2,"xn--stre-toten-zcb.no":2,"overhalla.no":2,"ovre-eiker.no":2,"xn--vre-eiker-k8a.no":2,"oyer.no":2,"xn--yer-zna.no":2,"oygarden.no":2,"xn--ygarden-p1a.no":2,"oystre-slidre.no":2,"xn--ystre-slidre-ujb.no":2,"porsanger.no":2,"porsangu.no":2,"xn--porsgu-sta26f.no":2,"porsgrunn.no":2,"radoy.no":2,"xn--rady-ira.no":2,"rakkestad.no":2,"rana.no":2,"ruovat.no":2,"randaberg.no":2,"rauma.no":2,"rendalen.no":2,"rennebu.no":2,"rennesoy.no":2,"xn--rennesy-v1a.no":2,"rindal.no":2,"ringebu.no":2,"ringerike.no":2,"ringsaker.no":2,"rissa.no":2,"risor.no":2,"xn--risr-ira.no":2,"roan.no":2,"rollag.no":2,"rygge.no":2,"ralingen.no":2,"xn--rlingen-mxa.no":2,"rodoy.no":2,"xn--rdy-0nab.no":2,"romskog.no":2,"xn--rmskog-bya.no":2,"roros.no":2,"xn--rros-gra.no":2,"rost.no":2,"xn--rst-0na.no":2,"royken.no":2,"xn--ryken-vua.no":2,"royrvik.no":2,"xn--ryrvik-bya.no":2,"rade.no":2,"xn--rde-ula.no":2,"salangen.no":2,"siellak.no":2,"saltdal.no":2,"salat.no":2,"xn--slt-elab.no":2,"xn--slat-5na.no":2,"samnanger.no":2,"sande.more-og-romsdal.no":3,"sande.xn--mre-og-romsdal-qqb.no":3,"sande.vestfold.no":3,"sandefjord.no":2,"sandnes.no":2,"sandoy.no":2,"xn--sandy-yua.no":2,"sarpsborg.no":2,"sauda.no":2,"sauherad.no":2,"sel.no":2,"selbu.no":2,"selje.no":2,"seljord.no":2,"sigdal.no":2,"siljan.no":2,"sirdal.no":2,"skaun.no":2,"skedsmo.no":2,"ski.no":2,"skien.no":2,"skiptvet.no":2,"skjervoy.no":2,"xn--skjervy-v1a.no":2,"skierva.no":2,"xn--skierv-uta.no":2,"skjak.no":2,"xn--skjk-soa.no":2,"skodje.no":2,"skanland.no":2,"xn--sknland-fxa.no":2,"skanit.no":2,"xn--sknit-yqa.no":2,"smola.no":2,"xn--smla-hra.no":2,"snillfjord.no":2,"snasa.no":2,"xn--snsa-roa.no":2,"snoasa.no":2,"snaase.no":2,"xn--snase-nra.no":2,"sogndal.no":2,"sokndal.no":2,"sola.no":2,"solund.no":2,"songdalen.no":2,"sortland.no":2,"spydeberg.no":2,"stange.no":2,"stavanger.no":2,"steigen.no":2,"steinkjer.no":2,"stjordal.no":2,"xn--stjrdal-s1a.no":2,"stokke.no":2,"stor-elvdal.no":2,"stord.no":2,"stordal.no":2,"storfjord.no":2,"omasvuotna.no":2,"strand.no":2,"stranda.no":2,"stryn.no":2,"sula.no":2,"suldal.no":2,"sund.no":2,"sunndal.no":2,"surnadal.no":2,"sveio.no":2,"svelvik.no":2,"sykkylven.no":2,"sogne.no":2,"xn--sgne-gra.no":2,"somna.no":2,"xn--smna-gra.no":2,"sondre-land.no":2,"xn--sndre-land-0cb.no":2,"sor-aurdal.no":2,"xn--sr-aurdal-l8a.no":2,"sor-fron.no":2,"xn--sr-fron-q1a.no":2,"sor-odal.no":2,"xn--sr-odal-q1a.no":2,"sor-varanger.no":2,"xn--sr-varanger-ggb.no":2,"matta-varjjat.no":2,"xn--mtta-vrjjat-k7af.no":2,"sorfold.no":2,"xn--srfold-bya.no":2,"sorreisa.no":2,"xn--srreisa-q1a.no":2,"sorum.no":2,"xn--srum-gra.no":2,"tana.no":2,"deatnu.no":2,"time.no":2,"tingvoll.no":2,"tinn.no":2,"tjeldsund.no":2,"dielddanuorri.no":2,"tjome.no":2,"xn--tjme-hra.no":2,"tokke.no":2,"tolga.no":2,"torsken.no":2,"tranoy.no":2,"xn--trany-yua.no":2,"tromso.no":2,"xn--troms-zua.no":2,"tromsa.no":2,"romsa.no":2,"trondheim.no":2,"troandin.no":2,"trysil.no":2,"trana.no":2,"xn--trna-woa.no":2,"trogstad.no":2,"xn--trgstad-r1a.no":2,"tvedestrand.no":2,"tydal.no":2,"tynset.no":2,"tysfjord.no":2,"divtasvuodna.no":2,"divttasvuotna.no":2,"tysnes.no":2,"tysvar.no":2,"xn--tysvr-vra.no":2,"tonsberg.no":2,"xn--tnsberg-q1a.no":2,"ullensaker.no":2,"ullensvang.no":2,"ulvik.no":2,"utsira.no":2,"vadso.no":2,"xn--vads-jra.no":2,"cahcesuolo.no":2,"xn--hcesuolo-7ya35b.no":2,"vaksdal.no":2,"valle.no":2,"vang.no":2,"vanylven.no":2,"vardo.no":2,"xn--vard-jra.no":2,"varggat.no":2,"xn--vrggt-xqad.no":2,"vefsn.no":2,"vaapste.no":2,"vega.no":2,"vegarshei.no":2,"xn--vegrshei-c0a.no":2,"vennesla.no":2,"verdal.no":2,"verran.no":2,"vestby.no":2,"vestnes.no":2,"vestre-slidre.no":2,"vestre-toten.no":2,"vestvagoy.no":2,"xn--vestvgy-ixa6o.no":2,"vevelstad.no":2,"vik.no":2,"vikna.no":2,"vindafjord.no":2,"volda.no":2,"voss.no":2,"varoy.no":2,"xn--vry-yla5g.no":2,"vagan.no":2,"xn--vgan-qoa.no":2,"voagat.no":2,"vagsoy.no":2,"xn--vgsy-qoa0j.no":2,"vaga.no":2,"xn--vg-yiab.no":2,"valer.ostfold.no":3,"xn--vler-qoa.xn--stfold-9xa.no":3,"valer.hedmark.no":3,"xn--vler-qoa.hedmark.no":3,"np":2,"nr":1,"biz.nr":2,"info.nr":2,"gov.nr":2,"edu.nr":2,"org.nr":2,"net.nr":2,"com.nr":2,"nu":1,"nz":1,"ac.nz":2,"co.nz":2,"cri.nz":2,"geek.nz":2,"gen.nz":2,"govt.nz":2,"health.nz":2,"iwi.nz":2,"kiwi.nz":2,"maori.nz":2,"mil.nz":2,"xn--mori-qsa.nz":2,"net.nz":2,"org.nz":2,"parliament.nz":2,"school.nz":2,"om":1,"co.om":2,"com.om":2,"edu.om":2,"gov.om":2,"med.om":2,"museum.om":2,"net.om":2,"org.om":2,"pro.om":2,"onion":1,"org":1,"pa":1,"ac.pa":2,"gob.pa":2,"com.pa":2,"org.pa":2,"sld.pa":2,"edu.pa":2,"net.pa":2,"ing.pa":2,"abo.pa":2,"med.pa":2,"nom.pa":2,"pe":1,"edu.pe":2,"gob.pe":2,"nom.pe":2,"mil.pe":2,"org.pe":2,"com.pe":2,"net.pe":2,"pf":1,"com.pf":2,"org.pf":2,"edu.pf":2,"pg":2,"ph":1,"com.ph":2,"net.ph":2,"org.ph":2,"gov.ph":2,"edu.ph":2,"ngo.ph":2,"mil.ph":2,"i.ph":2,"pk":1,"com.pk":2,"net.pk":2,"edu.pk":2,"org.pk":2,"fam.pk":2,"biz.pk":2,"web.pk":2,"gov.pk":2,"gob.pk":2,"gok.pk":2,"gon.pk":2,"gop.pk":2,"gos.pk":2,"info.pk":2,"pl":1,"com.pl":2,"net.pl":2,"org.pl":2,"aid.pl":2,"agro.pl":2,"atm.pl":2,"auto.pl":2,"biz.pl":2,"edu.pl":2,"gmina.pl":2,"gsm.pl":2,"info.pl":2,"mail.pl":2,"miasta.pl":2,"media.pl":2,"mil.pl":2,"nieruchomosci.pl":2,"nom.pl":2,"pc.pl":2,"powiat.pl":2,"priv.pl":2,"realestate.pl":2,"rel.pl":2,"sex.pl":2,"shop.pl":2,"sklep.pl":2,"sos.pl":2,"szkola.pl":2,"targi.pl":2,"tm.pl":2,"tourism.pl":2,"travel.pl":2,"turystyka.pl":2,"gov.pl":2,"ap.gov.pl":3,"griw.gov.pl":3,"ic.gov.pl":3,"is.gov.pl":3,"kmpsp.gov.pl":3,"konsulat.gov.pl":3,"kppsp.gov.pl":3,"kwp.gov.pl":3,"kwpsp.gov.pl":3,"mup.gov.pl":3,"mw.gov.pl":3,"oia.gov.pl":3,"oirm.gov.pl":3,"oke.gov.pl":3,"oow.gov.pl":3,"oschr.gov.pl":3,"oum.gov.pl":3,"pa.gov.pl":3,"pinb.gov.pl":3,"piw.gov.pl":3,"po.gov.pl":3,"pr.gov.pl":3,"psp.gov.pl":3,"psse.gov.pl":3,"pup.gov.pl":3,"rzgw.gov.pl":3,"sa.gov.pl":3,"sdn.gov.pl":3,"sko.gov.pl":3,"so.gov.pl":3,"sr.gov.pl":3,"starostwo.gov.pl":3,"ug.gov.pl":3,"ugim.gov.pl":3,"um.gov.pl":3,"umig.gov.pl":3,"upow.gov.pl":3,"uppo.gov.pl":3,"us.gov.pl":3,"uw.gov.pl":3,"uzs.gov.pl":3,"wif.gov.pl":3,"wiih.gov.pl":3,"winb.gov.pl":3,"wios.gov.pl":3,"witd.gov.pl":3,"wiw.gov.pl":3,"wkz.gov.pl":3,"wsa.gov.pl":3,"wskr.gov.pl":3,"wsse.gov.pl":3,"wuoz.gov.pl":3,"wzmiuw.gov.pl":3,"zp.gov.pl":3,"zpisdn.gov.pl":3,"augustow.pl":2,"babia-gora.pl":2,"bedzin.pl":2,"beskidy.pl":2,"bialowieza.pl":2,"bialystok.pl":2,"bielawa.pl":2,"bieszczady.pl":2,"boleslawiec.pl":2,"bydgoszcz.pl":2,"bytom.pl":2,"cieszyn.pl":2,"czeladz.pl":2,"czest.pl":2,"dlugoleka.pl":2,"elblag.pl":2,"elk.pl":2,"glogow.pl":2,"gniezno.pl":2,"gorlice.pl":2,"grajewo.pl":2,"ilawa.pl":2,"jaworzno.pl":2,"jelenia-gora.pl":2,"jgora.pl":2,"kalisz.pl":2,"kazimierz-dolny.pl":2,"karpacz.pl":2,"kartuzy.pl":2,"kaszuby.pl":2,"katowice.pl":2,"kepno.pl":2,"ketrzyn.pl":2,"klodzko.pl":2,"kobierzyce.pl":2,"kolobrzeg.pl":2,"konin.pl":2,"konskowola.pl":2,"kutno.pl":2,"lapy.pl":2,"lebork.pl":2,"legnica.pl":2,"lezajsk.pl":2,"limanowa.pl":2,"lomza.pl":2,"lowicz.pl":2,"lubin.pl":2,"lukow.pl":2,"malbork.pl":2,"malopolska.pl":2,"mazowsze.pl":2,"mazury.pl":2,"mielec.pl":2,"mielno.pl":2,"mragowo.pl":2,"naklo.pl":2,"nowaruda.pl":2,"nysa.pl":2,"olawa.pl":2,"olecko.pl":2,"olkusz.pl":2,"olsztyn.pl":2,"opoczno.pl":2,"opole.pl":2,"ostroda.pl":2,"ostroleka.pl":2,"ostrowiec.pl":2,"ostrowwlkp.pl":2,"pila.pl":2,"pisz.pl":2,"podhale.pl":2,"podlasie.pl":2,"polkowice.pl":2,"pomorze.pl":2,"pomorskie.pl":2,"prochowice.pl":2,"pruszkow.pl":2,"przeworsk.pl":2,"pulawy.pl":2,"radom.pl":2,"rawa-maz.pl":2,"rybnik.pl":2,"rzeszow.pl":2,"sanok.pl":2,"sejny.pl":2,"slask.pl":2,"slupsk.pl":2,"sosnowiec.pl":2,"stalowa-wola.pl":2,"skoczow.pl":2,"starachowice.pl":2,"stargard.pl":2,"suwalki.pl":2,"swidnica.pl":2,"swiebodzin.pl":2,"swinoujscie.pl":2,"szczecin.pl":2,"szczytno.pl":2,"tarnobrzeg.pl":2,"tgory.pl":2,"turek.pl":2,"tychy.pl":2,"ustka.pl":2,"walbrzych.pl":2,"warmia.pl":2,"warszawa.pl":2,"waw.pl":2,"wegrow.pl":2,"wielun.pl":2,"wlocl.pl":2,"wloclawek.pl":2,"wodzislaw.pl":2,"wolomin.pl":2,"wroclaw.pl":2,"zachpomor.pl":2,"zagan.pl":2,"zarow.pl":2,"zgora.pl":2,"zgorzelec.pl":2,"pm":1,"pn":1,"gov.pn":2,"co.pn":2,"org.pn":2,"edu.pn":2,"net.pn":2,"post":1,"pr":1,"com.pr":2,"net.pr":2,"org.pr":2,"gov.pr":2,"edu.pr":2,"isla.pr":2,"pro.pr":2,"biz.pr":2,"info.pr":2,"name.pr":2,"est.pr":2,"prof.pr":2,"ac.pr":2,"pro":1,"aaa.pro":2,"aca.pro":2,"acct.pro":2,"avocat.pro":2,"bar.pro":2,"cpa.pro":2,"eng.pro":2,"jur.pro":2,"law.pro":2,"med.pro":2,"recht.pro":2,"ps":1,"edu.ps":2,"gov.ps":2,"sec.ps":2,"plo.ps":2,"com.ps":2,"org.ps":2,"net.ps":2,"pt":1,"net.pt":2,"gov.pt":2,"org.pt":2,"edu.pt":2,"int.pt":2,"publ.pt":2,"com.pt":2,"nome.pt":2,"pw":1,"co.pw":2,"ne.pw":2,"or.pw":2,"ed.pw":2,"go.pw":2,"belau.pw":2,"py":1,"com.py":2,"coop.py":2,"edu.py":2,"gov.py":2,"mil.py":2,"net.py":2,"org.py":2,"qa":1,"com.qa":2,"edu.qa":2,"gov.qa":2,"mil.qa":2,"name.qa":2,"net.qa":2,"org.qa":2,"sch.qa":2,"re":1,"asso.re":2,"com.re":2,"nom.re":2,"ro":1,"arts.ro":2,"com.ro":2,"firm.ro":2,"info.ro":2,"nom.ro":2,"nt.ro":2,"org.ro":2,"rec.ro":2,"store.ro":2,"tm.ro":2,"www.ro":2,"rs":1,"ac.rs":2,"co.rs":2,"edu.rs":2,"gov.rs":2,"in.rs":2,"org.rs":2,"ru":1,"rw":1,"ac.rw":2,"co.rw":2,"coop.rw":2,"gov.rw":2,"mil.rw":2,"net.rw":2,"org.rw":2,"sa":1,"com.sa":2,"net.sa":2,"org.sa":2,"gov.sa":2,"med.sa":2,"pub.sa":2,"edu.sa":2,"sch.sa":2,"sb":1,"com.sb":2,"edu.sb":2,"gov.sb":2,"net.sb":2,"org.sb":2,"sc":1,"com.sc":2,"gov.sc":2,"net.sc":2,"org.sc":2,"edu.sc":2,"sd":1,"com.sd":2,"net.sd":2,"org.sd":2,"edu.sd":2,"med.sd":2,"tv.sd":2,"gov.sd":2,"info.sd":2,"se":1,"a.se":2,"ac.se":2,"b.se":2,"bd.se":2,"brand.se":2,"c.se":2,"d.se":2,"e.se":2,"f.se":2,"fh.se":2,"fhsk.se":2,"fhv.se":2,"g.se":2,"h.se":2,"i.se":2,"k.se":2,"komforb.se":2,"kommunalforbund.se":2,"komvux.se":2,"l.se":2,"lanbib.se":2,"m.se":2,"n.se":2,"naturbruksgymn.se":2,"o.se":2,"org.se":2,"p.se":2,"parti.se":2,"pp.se":2,"press.se":2,"r.se":2,"s.se":2,"t.se":2,"tm.se":2,"u.se":2,"w.se":2,"x.se":2,"y.se":2,"z.se":2,"sg":1,"com.sg":2,"net.sg":2,"org.sg":2,"gov.sg":2,"edu.sg":2,"per.sg":2,"sh":1,"com.sh":2,"net.sh":2,"gov.sh":2,"org.sh":2,"mil.sh":2,"si":1,"sj":1,"sk":1,"sl":1,"com.sl":2,"net.sl":2,"edu.sl":2,"gov.sl":2,"org.sl":2,"sm":1,"sn":1,"art.sn":2,"com.sn":2,"edu.sn":2,"gouv.sn":2,"org.sn":2,"perso.sn":2,"univ.sn":2,"so":1,"com.so":2,"edu.so":2,"gov.so":2,"me.so":2,"net.so":2,"org.so":2,"sr":1,"ss":1,"biz.ss":2,"com.ss":2,"edu.ss":2,"gov.ss":2,"me.ss":2,"net.ss":2,"org.ss":2,"sch.ss":2,"st":1,"co.st":2,"com.st":2,"consulado.st":2,"edu.st":2,"embaixada.st":2,"mil.st":2,"net.st":2,"org.st":2,"principe.st":2,"saotome.st":2,"store.st":2,"su":1,"sv":1,"com.sv":2,"edu.sv":2,"gob.sv":2,"org.sv":2,"red.sv":2,"sx":1,"gov.sx":2,"sy":1,"edu.sy":2,"gov.sy":2,"net.sy":2,"mil.sy":2,"com.sy":2,"org.sy":2,"sz":1,"co.sz":2,"ac.sz":2,"org.sz":2,"tc":1,"td":1,"tel":1,"tf":1,"tg":1,"th":1,"ac.th":2,"co.th":2,"go.th":2,"in.th":2,"mi.th":2,"net.th":2,"or.th":2,"tj":1,"ac.tj":2,"biz.tj":2,"co.tj":2,"com.tj":2,"edu.tj":2,"go.tj":2,"gov.tj":2,"int.tj":2,"mil.tj":2,"name.tj":2,"net.tj":2,"nic.tj":2,"org.tj":2,"test.tj":2,"web.tj":2,"tk":1,"tl":1,"gov.tl":2,"tm":1,"com.tm":2,"co.tm":2,"org.tm":2,"net.tm":2,"nom.tm":2,"gov.tm":2,"mil.tm":2,"edu.tm":2,"tn":1,"com.tn":2,"ens.tn":2,"fin.tn":2,"gov.tn":2,"ind.tn":2,"info.tn":2,"intl.tn":2,"mincom.tn":2,"nat.tn":2,"net.tn":2,"org.tn":2,"perso.tn":2,"tourism.tn":2,"to":1,"com.to":2,"gov.to":2,"net.to":2,"org.to":2,"edu.to":2,"mil.to":2,"tr":1,"av.tr":2,"bbs.tr":2,"bel.tr":2,"biz.tr":2,"com.tr":2,"dr.tr":2,"edu.tr":2,"gen.tr":2,"gov.tr":2,"info.tr":2,"mil.tr":2,"k12.tr":2,"kep.tr":2,"name.tr":2,"net.tr":2,"org.tr":2,"pol.tr":2,"tel.tr":2,"tsk.tr":2,"tv.tr":2,"web.tr":2,"nc.tr":2,"gov.nc.tr":3,"tt":1,"co.tt":2,"com.tt":2,"org.tt":2,"net.tt":2,"biz.tt":2,"info.tt":2,"pro.tt":2,"int.tt":2,"coop.tt":2,"jobs.tt":2,"mobi.tt":2,"travel.tt":2,"museum.tt":2,"aero.tt":2,"name.tt":2,"gov.tt":2,"edu.tt":2,"tv":1,"tw":1,"edu.tw":2,"gov.tw":2,"mil.tw":2,"com.tw":2,"net.tw":2,"org.tw":2,"idv.tw":2,"game.tw":2,"ebiz.tw":2,"club.tw":2,"xn--zf0ao64a.tw":2,"xn--uc0atv.tw":2,"xn--czrw28b.tw":2,"tz":1,"ac.tz":2,"co.tz":2,"go.tz":2,"hotel.tz":2,"info.tz":2,"me.tz":2,"mil.tz":2,"mobi.tz":2,"ne.tz":2,"or.tz":2,"sc.tz":2,"tv.tz":2,"ua":1,"com.ua":2,"edu.ua":2,"gov.ua":2,"in.ua":2,"net.ua":2,"org.ua":2,"cherkassy.ua":2,"cherkasy.ua":2,"chernigov.ua":2,"chernihiv.ua":2,"chernivtsi.ua":2,"chernovtsy.ua":2,"ck.ua":2,"cn.ua":2,"cr.ua":2,"crimea.ua":2,"cv.ua":2,"dn.ua":2,"dnepropetrovsk.ua":2,"dnipropetrovsk.ua":2,"donetsk.ua":2,"dp.ua":2,"if.ua":2,"ivano-frankivsk.ua":2,"kh.ua":2,"kharkiv.ua":2,"kharkov.ua":2,"kherson.ua":2,"khmelnitskiy.ua":2,"khmelnytskyi.ua":2,"kiev.ua":2,"kirovograd.ua":2,"km.ua":2,"kr.ua":2,"kropyvnytskyi.ua":2,"krym.ua":2,"ks.ua":2,"kv.ua":2,"kyiv.ua":2,"lg.ua":2,"lt.ua":2,"lugansk.ua":2,"luhansk.ua":2,"lutsk.ua":2,"lv.ua":2,"lviv.ua":2,"mk.ua":2,"mykolaiv.ua":2,"nikolaev.ua":2,"od.ua":2,"odesa.ua":2,"odessa.ua":2,"pl.ua":2,"poltava.ua":2,"rivne.ua":2,"rovno.ua":2,"rv.ua":2,"sb.ua":2,"sebastopol.ua":2,"sevastopol.ua":2,"sm.ua":2,"sumy.ua":2,"te.ua":2,"ternopil.ua":2,"uz.ua":2,"uzhgorod.ua":2,"uzhhorod.ua":2,"vinnica.ua":2,"vinnytsia.ua":2,"vn.ua":2,"volyn.ua":2,"yalta.ua":2,"zakarpattia.ua":2,"zaporizhzhe.ua":2,"zaporizhzhia.ua":2,"zhitomir.ua":2,"zhytomyr.ua":2,"zp.ua":2,"zt.ua":2,"ug":1,"co.ug":2,"or.ug":2,"ac.ug":2,"sc.ug":2,"go.ug":2,"ne.ug":2,"com.ug":2,"org.ug":2,"uk":1,"ac.uk":2,"co.uk":2,"gov.uk":2,"ltd.uk":2,"me.uk":2,"net.uk":2,"nhs.uk":2,"org.uk":2,"plc.uk":2,"police.uk":2,"sch.uk":3,"us":1,"dni.us":2,"fed.us":2,"isa.us":2,"kids.us":2,"nsn.us":2,"ak.us":2,"al.us":2,"ar.us":2,"as.us":2,"az.us":2,"ca.us":2,"co.us":2,"ct.us":2,"dc.us":2,"de.us":2,"fl.us":2,"ga.us":2,"gu.us":2,"hi.us":2,"ia.us":2,"id.us":2,"il.us":2,"in.us":2,"ks.us":2,"ky.us":2,"la.us":2,"ma.us":2,"md.us":2,"me.us":2,"mi.us":2,"mn.us":2,"mo.us":2,"ms.us":2,"mt.us":2,"nc.us":2,"nd.us":2,"ne.us":2,"nh.us":2,"nj.us":2,"nm.us":2,"nv.us":2,"ny.us":2,"oh.us":2,"ok.us":2,"or.us":2,"pa.us":2,"pr.us":2,"ri.us":2,"sc.us":2,"sd.us":2,"tn.us":2,"tx.us":2,"ut.us":2,"vi.us":2,"vt.us":2,"va.us":2,"wa.us":2,"wi.us":2,"wv.us":2,"wy.us":2,"k12.ak.us":3,"k12.al.us":3,"k12.ar.us":3,"k12.as.us":3,"k12.az.us":3,"k12.ca.us":3,"k12.co.us":3,"k12.ct.us":3,"k12.dc.us":3,"k12.fl.us":3,"k12.ga.us":3,"k12.gu.us":3,"k12.ia.us":3,"k12.id.us":3,"k12.il.us":3,"k12.in.us":3,"k12.ks.us":3,"k12.ky.us":3,"k12.la.us":3,"k12.ma.us":3,"k12.md.us":3,"k12.me.us":3,"k12.mi.us":3,"k12.mn.us":3,"k12.mo.us":3,"k12.ms.us":3,"k12.mt.us":3,"k12.nc.us":3,"k12.ne.us":3,"k12.nh.us":3,"k12.nj.us":3,"k12.nm.us":3,"k12.nv.us":3,"k12.ny.us":3,"k12.oh.us":3,"k12.ok.us":3,"k12.or.us":3,"k12.pa.us":3,"k12.pr.us":3,"k12.sc.us":3,"k12.tn.us":3,"k12.tx.us":3,"k12.ut.us":3,"k12.vi.us":3,"k12.vt.us":3,"k12.va.us":3,"k12.wa.us":3,"k12.wi.us":3,"k12.wy.us":3,"cc.ak.us":3,"cc.al.us":3,"cc.ar.us":3,"cc.as.us":3,"cc.az.us":3,"cc.ca.us":3,"cc.co.us":3,"cc.ct.us":3,"cc.dc.us":3,"cc.de.us":3,"cc.fl.us":3,"cc.ga.us":3,"cc.gu.us":3,"cc.hi.us":3,"cc.ia.us":3,"cc.id.us":3,"cc.il.us":3,"cc.in.us":3,"cc.ks.us":3,"cc.ky.us":3,"cc.la.us":3,"cc.ma.us":3,"cc.md.us":3,"cc.me.us":3,"cc.mi.us":3,"cc.mn.us":3,"cc.mo.us":3,"cc.ms.us":3,"cc.mt.us":3,"cc.nc.us":3,"cc.nd.us":3,"cc.ne.us":3,"cc.nh.us":3,"cc.nj.us":3,"cc.nm.us":3,"cc.nv.us":3,"cc.ny.us":3,"cc.oh.us":3,"cc.ok.us":3,"cc.or.us":3,"cc.pa.us":3,"cc.pr.us":3,"cc.ri.us":3,"cc.sc.us":3,"cc.sd.us":3,"cc.tn.us":3,"cc.tx.us":3,"cc.ut.us":3,"cc.vi.us":3,"cc.vt.us":3,"cc.va.us":3,"cc.wa.us":3,"cc.wi.us":3,"cc.wv.us":3,"cc.wy.us":3,"lib.ak.us":3,"lib.al.us":3,"lib.ar.us":3,"lib.as.us":3,"lib.az.us":3,"lib.ca.us":3,"lib.co.us":3,"lib.ct.us":3,"lib.dc.us":3,"lib.fl.us":3,"lib.ga.us":3,"lib.gu.us":3,"lib.hi.us":3,"lib.ia.us":3,"lib.id.us":3,"lib.il.us":3,"lib.in.us":3,"lib.ks.us":3,"lib.ky.us":3,"lib.la.us":3,"lib.ma.us":3,"lib.md.us":3,"lib.me.us":3,"lib.mi.us":3,"lib.mn.us":3,"lib.mo.us":3,"lib.ms.us":3,"lib.mt.us":3,"lib.nc.us":3,"lib.nd.us":3,"lib.ne.us":3,"lib.nh.us":3,"lib.nj.us":3,"lib.nm.us":3,"lib.nv.us":3,"lib.ny.us":3,"lib.oh.us":3,"lib.ok.us":3,"lib.or.us":3,"lib.pa.us":3,"lib.pr.us":3,"lib.ri.us":3,"lib.sc.us":3,"lib.sd.us":3,"lib.tn.us":3,"lib.tx.us":3,"lib.ut.us":3,"lib.vi.us":3,"lib.vt.us":3,"lib.va.us":3,"lib.wa.us":3,"lib.wi.us":3,"lib.wy.us":3,"pvt.k12.ma.us":4,"chtr.k12.ma.us":4,"paroch.k12.ma.us":4,"ann-arbor.mi.us":3,"cog.mi.us":3,"dst.mi.us":3,"eaton.mi.us":3,"gen.mi.us":3,"mus.mi.us":3,"tec.mi.us":3,"washtenaw.mi.us":3,"uy":1,"com.uy":2,"edu.uy":2,"gub.uy":2,"mil.uy":2,"net.uy":2,"org.uy":2,"uz":1,"co.uz":2,"com.uz":2,"net.uz":2,"org.uz":2,"va":1,"vc":1,"com.vc":2,"net.vc":2,"org.vc":2,"gov.vc":2,"mil.vc":2,"edu.vc":2,"ve":1,"arts.ve":2,"bib.ve":2,"co.ve":2,"com.ve":2,"e12.ve":2,"edu.ve":2,"firm.ve":2,"gob.ve":2,"gov.ve":2,"info.ve":2,"int.ve":2,"mil.ve":2,"net.ve":2,"nom.ve":2,"org.ve":2,"rar.ve":2,"rec.ve":2,"store.ve":2,"tec.ve":2,"web.ve":2,"vg":1,"vi":1,"co.vi":2,"com.vi":2,"k12.vi":2,"net.vi":2,"org.vi":2,"vn":1,"ac.vn":2,"ai.vn":2,"biz.vn":2,"com.vn":2,"edu.vn":2,"gov.vn":2,"health.vn":2,"id.vn":2,"info.vn":2,"int.vn":2,"io.vn":2,"name.vn":2,"net.vn":2,"org.vn":2,"pro.vn":2,"angiang.vn":2,"bacgiang.vn":2,"backan.vn":2,"baclieu.vn":2,"bacninh.vn":2,"baria-vungtau.vn":2,"bentre.vn":2,"binhdinh.vn":2,"binhduong.vn":2,"binhphuoc.vn":2,"binhthuan.vn":2,"camau.vn":2,"cantho.vn":2,"caobang.vn":2,"daklak.vn":2,"daknong.vn":2,"danang.vn":2,"dienbien.vn":2,"dongnai.vn":2,"dongthap.vn":2,"gialai.vn":2,"hagiang.vn":2,"haiduong.vn":2,"haiphong.vn":2,"hanam.vn":2,"hanoi.vn":2,"hatinh.vn":2,"haugiang.vn":2,"hoabinh.vn":2,"hungyen.vn":2,"khanhhoa.vn":2,"kiengiang.vn":2,"kontum.vn":2,"laichau.vn":2,"lamdong.vn":2,"langson.vn":2,"laocai.vn":2,"longan.vn":2,"namdinh.vn":2,"nghean.vn":2,"ninhbinh.vn":2,"ninhthuan.vn":2,"phutho.vn":2,"phuyen.vn":2,"quangbinh.vn":2,"quangnam.vn":2,"quangngai.vn":2,"quangninh.vn":2,"quangtri.vn":2,"soctrang.vn":2,"sonla.vn":2,"tayninh.vn":2,"thaibinh.vn":2,"thainguyen.vn":2,"thanhhoa.vn":2,"thanhphohochiminh.vn":2,"thuathienhue.vn":2,"tiengiang.vn":2,"travinh.vn":2,"tuyenquang.vn":2,"vinhlong.vn":2,"vinhphuc.vn":2,"yenbai.vn":2,"vu":1,"com.vu":2,"edu.vu":2,"net.vu":2,"org.vu":2,"wf":1,"ws":1,"com.ws":2,"net.ws":2,"org.ws":2,"gov.ws":2,"edu.ws":2,"yt":1,"xn--mgbaam7a8h":1,"xn--y9a3aq":1,"xn--54b7fta0cc":1,"xn--90ae":1,"xn--mgbcpq6gpa1a":1,"xn--90ais":1,"xn--fiqs8s":1,"xn--fiqz9s":1,"xn--lgbbat1ad8j":1,"xn--wgbh1c":1,"xn--e1a4c":1,"xn--qxa6a":1,"xn--mgbah1a3hjkrd":1,"xn--node":1,"xn--qxam":1,"xn--j6w193g":1,"xn--55qx5d.xn--j6w193g":2,"xn--wcvs22d.xn--j6w193g":2,"xn--mxtq1m.xn--j6w193g":2,"xn--gmqw5a.xn--j6w193g":2,"xn--od0alg.xn--j6w193g":2,"xn--uc0atv.xn--j6w193g":2,"xn--2scrj9c":1,"xn--3hcrj9c":1,"xn--45br5cyl":1,"xn--h2breg3eve":1,"xn--h2brj9c8c":1,"xn--mgbgu82a":1,"xn--rvc1e0am3e":1,"xn--h2brj9c":1,"xn--mgbbh1a":1,"xn--mgbbh1a71e":1,"xn--fpcrj9c3d":1,"xn--gecrj9c":1,"xn--s9brj9c":1,"xn--45brj9c":1,"xn--xkc2dl3a5ee0h":1,"xn--mgba3a4f16a":1,"xn--mgba3a4fra":1,"xn--mgbtx2b":1,"xn--mgbayh7gpa":1,"xn--3e0b707e":1,"xn--80ao21a":1,"xn--q7ce6a":1,"xn--fzc2c9e2c":1,"xn--xkc2al3hye2a":1,"xn--mgbc0a9azcg":1,"xn--d1alf":1,"xn--l1acc":1,"xn--mix891f":1,"xn--mix082f":1,"xn--mgbx4cd0ab":1,"xn--mgb9awbf":1,"xn--mgbai9azgqp6j":1,"xn--mgbai9a5eva00b":1,"xn--ygbi2ammx":1,"xn--90a3ac":1,"xn--o1ac.xn--90a3ac":2,"xn--c1avg.xn--90a3ac":2,"xn--90azh.xn--90a3ac":2,"xn--d1at.xn--90a3ac":2,"xn--o1ach.xn--90a3ac":2,"xn--80au.xn--90a3ac":2,"xn--p1ai":1,"xn--wgbl6a":1,"xn--mgberp4a5d4ar":1,"xn--mgberp4a5d4a87g":1,"xn--mgbqly7c0a67fbc":1,"xn--mgbqly7cvafr":1,"xn--mgbpl2fh":1,"xn--yfro4i67o":1,"xn--clchc0ea0b2g2a9gcd":1,"xn--ogbpf8fl":1,"xn--mgbtf8fl":1,"xn--o3cw4h":1,"xn--12c1fe0br.xn--o3cw4h":2,"xn--12co0c3b4eva.xn--o3cw4h":2,"xn--h3cuzk1di.xn--o3cw4h":2,"xn--o3cyx2a.xn--o3cw4h":2,"xn--m3ch0j3a.xn--o3cw4h":2,"xn--12cfi8ixb8l.xn--o3cw4h":2,"xn--pgbs0dh":1,"xn--kpry57d":1,"xn--kprw13d":1,"xn--nnx388a":1,"xn--j1amh":1,"xn--mgb2ddes":1,"xxx":1,"ye":1,"com.ye":2,"edu.ye":2,"gov.ye":2,"net.ye":2,"mil.ye":2,"org.ye":2,"ac.za":2,"agric.za":2,"alt.za":2,"co.za":2,"edu.za":2,"gov.za":2,"grondar.za":2,"law.za":2,"mil.za":2,"net.za":2,"ngo.za":2,"nic.za":2,"nis.za":2,"nom.za":2,"org.za":2,"school.za":2,"tm.za":2,"web.za":2,"zm":1,"ac.zm":2,"biz.zm":2,"co.zm":2,"com.zm":2,"edu.zm":2,"gov.zm":2,"info.zm":2,"mil.zm":2,"net.zm":2,"org.zm":2,"sch.zm":2,"zw":1,"ac.zw":2,"co.zw":2,"gov.zw":2,"mil.zw":2,"org.zw":2,"aaa":1,"aarp":1,"abb":1,"abbott":1,"abbvie":1,"abc":1,"able":1,"abogado":1,"abudhabi":1,"academy":1,"accenture":1,"accountant":1,"accountants":1,"aco":1,"actor":1,"ads":1,"adult":1,"aeg":1,"aetna":1,"afl":1,"africa":1,"agakhan":1,"agency":1,"aig":1,"airbus":1,"airforce":1,"airtel":1,"akdn":1,"alibaba":1,"alipay":1,"allfinanz":1,"allstate":1,"ally":1,"alsace":1,"alstom":1,"amazon":1,"americanexpress":1,"americanfamily":1,"amex":1,"amfam":1,"amica":1,"amsterdam":1,"analytics":1,"android":1,"anquan":1,"anz":1,"aol":1,"apartments":1,"app":1,"apple":1,"aquarelle":1,"arab":1,"aramco":1,"archi":1,"army":1,"art":1,"arte":1,"asda":1,"associates":1,"athleta":1,"attorney":1,"auction":1,"audi":1,"audible":1,"audio":1,"auspost":1,"author":1,"auto":1,"autos":1,"avianca":1,"aws":1,"axa":1,"azure":1,"baby":1,"baidu":1,"banamex":1,"bananarepublic":1,"band":1,"bank":1,"bar":1,"barcelona":1,"barclaycard":1,"barclays":1,"barefoot":1,"bargains":1,"baseball":1,"basketball":1,"bauhaus":1,"bayern":1,"bbc":1,"bbt":1,"bbva":1,"bcg":1,"bcn":1,"beats":1,"beauty":1,"beer":1,"bentley":1,"berlin":1,"best":1,"bestbuy":1,"bet":1,"bharti":1,"bible":1,"bid":1,"bike":1,"bing":1,"bingo":1,"bio":1,"black":1,"blackfriday":1,"blockbuster":1,"blog":1,"bloomberg":1,"blue":1,"bms":1,"bmw":1,"bnpparibas":1,"boats":1,"boehringer":1,"bofa":1,"bom":1,"bond":1,"boo":1,"book":1,"booking":1,"bosch":1,"bostik":1,"boston":1,"bot":1,"boutique":1,"box":1,"bradesco":1,"bridgestone":1,"broadway":1,"broker":1,"brother":1,"brussels":1,"build":1,"builders":1,"business":1,"buy":1,"buzz":1,"bzh":1,"cab":1,"cafe":1,"cal":1,"call":1,"calvinklein":1,"cam":1,"camera":1,"camp":1,"canon":1,"capetown":1,"capital":1,"capitalone":1,"car":1,"caravan":1,"cards":1,"care":1,"career":1,"careers":1,"cars":1,"casa":1,"case":1,"cash":1,"casino":1,"catering":1,"catholic":1,"cba":1,"cbn":1,"cbre":1,"center":1,"ceo":1,"cern":1,"cfa":1,"cfd":1,"chanel":1,"channel":1,"charity":1,"chase":1,"chat":1,"cheap":1,"chintai":1,"christmas":1,"chrome":1,"church":1,"cipriani":1,"circle":1,"cisco":1,"citadel":1,"citi":1,"citic":1,"city":1,"claims":1,"cleaning":1,"click":1,"clinic":1,"clinique":1,"clothing":1,"cloud":1,"club":1,"clubmed":1,"coach":1,"codes":1,"coffee":1,"college":1,"cologne":1,"comcast":1,"commbank":1,"community":1,"company":1,"compare":1,"computer":1,"comsec":1,"condos":1,"construction":1,"consulting":1,"contact":1,"contractors":1,"cooking":1,"cool":1,"corsica":1,"country":1,"coupon":1,"coupons":1,"courses":1,"cpa":1,"credit":1,"creditcard":1,"creditunion":1,"cricket":1,"crown":1,"crs":1,"cruise":1,"cruises":1,"cuisinella":1,"cymru":1,"cyou":1,"dabur":1,"dad":1,"dance":1,"data":1,"date":1,"dating":1,"datsun":1,"day":1,"dclk":1,"dds":1,"deal":1,"dealer":1,"deals":1,"degree":1,"delivery":1,"dell":1,"deloitte":1,"delta":1,"democrat":1,"dental":1,"dentist":1,"design":1,"dev":1,"dhl":1,"diamonds":1,"diet":1,"digital":1,"direct":1,"directory":1,"discount":1,"discover":1,"dish":1,"diy":1,"dnp":1,"docs":1,"doctor":1,"dog":1,"domains":1,"dot":1,"download":1,"drive":1,"dtv":1,"dubai":1,"dunlop":1,"dupont":1,"durban":1,"dvag":1,"dvr":1,"earth":1,"eat":1,"eco":1,"edeka":1,"education":1,"email":1,"emerck":1,"energy":1,"engineer":1,"engineering":1,"enterprises":1,"epson":1,"equipment":1,"ericsson":1,"erni":1,"esq":1,"estate":1,"etisalat":1,"eurovision":1,"eus":1,"events":1,"exchange":1,"expert":1,"exposed":1,"express":1,"extraspace":1,"fage":1,"fail":1,"fairwinds":1,"faith":1,"family":1,"fan":1,"fans":1,"farm":1,"farmers":1,"fashion":1,"fast":1,"fedex":1,"feedback":1,"ferrari":1,"ferrero":1,"fidelity":1,"fido":1,"film":1,"final":1,"finance":1,"financial":1,"fire":1,"firestone":1,"firmdale":1,"fish":1,"fishing":1,"fit":1,"fitness":1,"flickr":1,"flights":1,"flir":1,"florist":1,"flowers":1,"fly":1,"foo":1,"food":1,"football":1,"ford":1,"forex":1,"forsale":1,"forum":1,"foundation":1,"fox":1,"free":1,"fresenius":1,"frl":1,"frogans":1,"frontier":1,"ftr":1,"fujitsu":1,"fun":1,"fund":1,"furniture":1,"futbol":1,"fyi":1,"gal":1,"gallery":1,"gallo":1,"gallup":1,"game":1,"games":1,"gap":1,"garden":1,"gay":1,"gbiz":1,"gdn":1,"gea":1,"gent":1,"genting":1,"george":1,"ggee":1,"gift":1,"gifts":1,"gives":1,"giving":1,"glass":1,"gle":1,"global":1,"globo":1,"gmail":1,"gmbh":1,"gmo":1,"gmx":1,"godaddy":1,"gold":1,"goldpoint":1,"golf":1,"goo":1,"goodyear":1,"goog":1,"google":1,"gop":1,"got":1,"grainger":1,"graphics":1,"gratis":1,"green":1,"gripe":1,"grocery":1,"group":1,"guardian":1,"gucci":1,"guge":1,"guide":1,"guitars":1,"guru":1,"hair":1,"hamburg":1,"hangout":1,"haus":1,"hbo":1,"hdfc":1,"hdfcbank":1,"health":1,"healthcare":1,"help":1,"helsinki":1,"here":1,"hermes":1,"hiphop":1,"hisamitsu":1,"hitachi":1,"hiv":1,"hkt":1,"hockey":1,"holdings":1,"holiday":1,"homedepot":1,"homegoods":1,"homes":1,"homesense":1,"honda":1,"horse":1,"hospital":1,"host":1,"hosting":1,"hot":1,"hotels":1,"hotmail":1,"house":1,"how":1,"hsbc":1,"hughes":1,"hyatt":1,"hyundai":1,"ibm":1,"icbc":1,"ice":1,"icu":1,"ieee":1,"ifm":1,"ikano":1,"imamat":1,"imdb":1,"immo":1,"immobilien":1,"inc":1,"industries":1,"infiniti":1,"ing":1,"ink":1,"institute":1,"insurance":1,"insure":1,"international":1,"intuit":1,"investments":1,"ipiranga":1,"irish":1,"ismaili":1,"ist":1,"istanbul":1,"itau":1,"itv":1,"jaguar":1,"java":1,"jcb":1,"jeep":1,"jetzt":1,"jewelry":1,"jio":1,"jll":1,"jmp":1,"jnj":1,"joburg":1,"jot":1,"joy":1,"jpmorgan":1,"jprs":1,"juegos":1,"juniper":1,"kaufen":1,"kddi":1,"kerryhotels":1,"kerrylogistics":1,"kerryproperties":1,"kfh":1,"kia":1,"kids":1,"kim":1,"kinder":1,"kindle":1,"kitchen":1,"kiwi":1,"koeln":1,"komatsu":1,"kosher":1,"kpmg":1,"kpn":1,"krd":1,"kred":1,"kuokgroup":1,"kyoto":1,"lacaixa":1,"lamborghini":1,"lamer":1,"lancaster":1,"land":1,"landrover":1,"lanxess":1,"lasalle":1,"lat":1,"latino":1,"latrobe":1,"law":1,"lawyer":1,"lds":1,"lease":1,"leclerc":1,"lefrak":1,"legal":1,"lego":1,"lexus":1,"lgbt":1,"lidl":1,"life":1,"lifeinsurance":1,"lifestyle":1,"lighting":1,"like":1,"lilly":1,"limited":1,"limo":1,"lincoln":1,"link":1,"lipsy":1,"live":1,"living":1,"llc":1,"llp":1,"loan":1,"loans":1,"locker":1,"locus":1,"lol":1,"london":1,"lotte":1,"lotto":1,"love":1,"lpl":1,"lplfinancial":1,"ltd":1,"ltda":1,"lundbeck":1,"luxe":1,"luxury":1,"madrid":1,"maif":1,"maison":1,"makeup":1,"man":1,"management":1,"mango":1,"map":1,"market":1,"marketing":1,"markets":1,"marriott":1,"marshalls":1,"mattel":1,"mba":1,"mckinsey":1,"med":1,"media":1,"meet":1,"melbourne":1,"meme":1,"memorial":1,"men":1,"menu":1,"merckmsd":1,"miami":1,"microsoft":1,"mini":1,"mint":1,"mit":1,"mitsubishi":1,"mlb":1,"mls":1,"mma":1,"mobile":1,"moda":1,"moe":1,"moi":1,"mom":1,"monash":1,"money":1,"monster":1,"mormon":1,"mortgage":1,"moscow":1,"moto":1,"motorcycles":1,"mov":1,"movie":1,"msd":1,"mtn":1,"mtr":1,"music":1,"nab":1,"nagoya":1,"natura":1,"navy":1,"nba":1,"nec":1,"netbank":1,"netflix":1,"network":1,"neustar":1,"new":1,"news":1,"next":1,"nextdirect":1,"nexus":1,"nfl":1,"ngo":1,"nhk":1,"nico":1,"nike":1,"nikon":1,"ninja":1,"nissan":1,"nissay":1,"nokia":1,"norton":1,"now":1,"nowruz":1,"nowtv":1,"nra":1,"nrw":1,"ntt":1,"nyc":1,"obi":1,"observer":1,"office":1,"okinawa":1,"olayan":1,"olayangroup":1,"oldnavy":1,"ollo":1,"omega":1,"one":1,"ong":1,"onl":1,"online":1,"ooo":1,"open":1,"oracle":1,"orange":1,"organic":1,"origins":1,"osaka":1,"otsuka":1,"ott":1,"ovh":1,"page":1,"panasonic":1,"paris":1,"pars":1,"partners":1,"parts":1,"party":1,"pay":1,"pccw":1,"pet":1,"pfizer":1,"pharmacy":1,"phd":1,"philips":1,"phone":1,"photo":1,"photography":1,"photos":1,"physio":1,"pics":1,"pictet":1,"pictures":1,"pid":1,"pin":1,"ping":1,"pink":1,"pioneer":1,"pizza":1,"place":1,"play":1,"playstation":1,"plumbing":1,"plus":1,"pnc":1,"pohl":1,"poker":1,"politie":1,"porn":1,"pramerica":1,"praxi":1,"press":1,"prime":1,"prod":1,"productions":1,"prof":1,"progressive":1,"promo":1,"properties":1,"property":1,"protection":1,"pru":1,"prudential":1,"pub":1,"pwc":1,"qpon":1,"quebec":1,"quest":1,"racing":1,"radio":1,"read":1,"realestate":1,"realtor":1,"realty":1,"recipes":1,"red":1,"redstone":1,"redumbrella":1,"rehab":1,"reise":1,"reisen":1,"reit":1,"reliance":1,"ren":1,"rent":1,"rentals":1,"repair":1,"report":1,"republican":1,"rest":1,"restaurant":1,"review":1,"reviews":1,"rexroth":1,"rich":1,"richardli":1,"ricoh":1,"ril":1,"rio":1,"rip":1,"rocher":1,"rocks":1,"rodeo":1,"rogers":1,"room":1,"rsvp":1,"rugby":1,"ruhr":1,"run":1,"rwe":1,"ryukyu":1,"saarland":1,"safe":1,"safety":1,"sakura":1,"sale":1,"salon":1,"samsclub":1,"samsung":1,"sandvik":1,"sandvikcoromant":1,"sanofi":1,"sap":1,"sarl":1,"sas":1,"save":1,"saxo":1,"sbi":1,"sbs":1,"sca":1,"scb":1,"schaeffler":1,"schmidt":1,"scholarships":1,"school":1,"schule":1,"schwarz":1,"science":1,"scot":1,"search":1,"seat":1,"secure":1,"security":1,"seek":1,"select":1,"sener":1,"services":1,"seven":1,"sew":1,"sex":1,"sexy":1,"sfr":1,"shangrila":1,"sharp":1,"shaw":1,"shell":1,"shia":1,"shiksha":1,"shoes":1,"shop":1,"shopping":1,"shouji":1,"show":1,"silk":1,"sina":1,"singles":1,"site":1,"ski":1,"skin":1,"sky":1,"skype":1,"sling":1,"smart":1,"smile":1,"sncf":1,"soccer":1,"social":1,"softbank":1,"software":1,"sohu":1,"solar":1,"solutions":1,"song":1,"sony":1,"soy":1,"spa":1,"space":1,"sport":1,"spot":1,"srl":1,"stada":1,"staples":1,"star":1,"statebank":1,"statefarm":1,"stc":1,"stcgroup":1,"stockholm":1,"storage":1,"store":1,"stream":1,"studio":1,"study":1,"style":1,"sucks":1,"supplies":1,"supply":1,"support":1,"surf":1,"surgery":1,"suzuki":1,"swatch":1,"swiss":1,"sydney":1,"systems":1,"tab":1,"taipei":1,"talk":1,"taobao":1,"target":1,"tatamotors":1,"tatar":1,"tattoo":1,"tax":1,"taxi":1,"tci":1,"tdk":1,"team":1,"tech":1,"technology":1,"temasek":1,"tennis":1,"teva":1,"thd":1,"theater":1,"theatre":1,"tiaa":1,"tickets":1,"tienda":1,"tips":1,"tires":1,"tirol":1,"tjmaxx":1,"tjx":1,"tkmaxx":1,"tmall":1,"today":1,"tokyo":1,"tools":1,"top":1,"toray":1,"toshiba":1,"total":1,"tours":1,"town":1,"toyota":1,"toys":1,"trade":1,"trading":1,"training":1,"travel":1,"travelers":1,"travelersinsurance":1,"trust":1,"trv":1,"tube":1,"tui":1,"tunes":1,"tushu":1,"tvs":1,"ubank":1,"ubs":1,"unicom":1,"university":1,"uno":1,"uol":1,"ups":1,"vacations":1,"vana":1,"vanguard":1,"vegas":1,"ventures":1,"verisign":1,"versicherung":1,"vet":1,"viajes":1,"video":1,"vig":1,"viking":1,"villas":1,"vin":1,"vip":1,"virgin":1,"visa":1,"vision":1,"viva":1,"vivo":1,"vlaanderen":1,"vodka":1,"volkswagen":1,"volvo":1,"vote":1,"voting":1,"voto":1,"voyage":1,"wales":1,"walmart":1,"walter":1,"wang":1,"wanggou":1,"watch":1,"watches":1,"weather":1,"weatherchannel":1,"webcam":1,"weber":1,"website":1,"wedding":1,"weibo":1,"weir":1,"whoswho":1,"wien":1,"wiki":1,"williamhill":1,"win":1,"windows":1,"wine":1,"winners":1,"wme":1,"wolterskluwer":1,"woodside":1,"work":1,"works":1,"world":1,"wow":1,"wtc":1,"wtf":1,"xbox":1,"xerox":1,"xfinity":1,"xihuan":1,"xin":1,"xn--11b4c3d":1,"xn--1ck2e1b":1,"xn--1qqw23a":1,"xn--30rr7y":1,"xn--3bst00m":1,"xn--3ds443g":1,"xn--3pxu8k":1,"xn--42c2d9a":1,"xn--45q11c":1,"xn--4gbrim":1,"xn--55qw42g":1,"xn--55qx5d":1,"xn--5su34j936bgsg":1,"xn--5tzm5g":1,"xn--6frz82g":1,"xn--6qq986b3xl":1,"xn--80adxhks":1,"xn--80aqecdr1a":1,"xn--80asehdb":1,"xn--80aswg":1,"xn--8y0a063a":1,"xn--9dbq2a":1,"xn--9et52u":1,"xn--9krt00a":1,"xn--b4w605ferd":1,"xn--bck1b9a5dre4c":1,"xn--c1avg":1,"xn--c2br7g":1,"xn--cck2b3b":1,"xn--cckwcxetd":1,"xn--cg4bki":1,"xn--czr694b":1,"xn--czrs0t":1,"xn--czru2d":1,"xn--d1acj3b":1,"xn--eckvdtc9d":1,"xn--efvy88h":1,"xn--fct429k":1,"xn--fhbei":1,"xn--fiq228c5hs":1,"xn--fiq64b":1,"xn--fjq720a":1,"xn--flw351e":1,"xn--fzys8d69uvgm":1,"xn--g2xx48c":1,"xn--gckr3f0f":1,"xn--gk3at1e":1,"xn--hxt814e":1,"xn--i1b6b1a6a2e":1,"xn--imr513n":1,"xn--io0a7i":1,"xn--j1aef":1,"xn--jlq480n2rg":1,"xn--jvr189m":1,"xn--kcrx77d1x4a":1,"xn--kput3i":1,"xn--mgba3a3ejt":1,"xn--mgba7c0bbn0a":1,"xn--mgbaakc7dvf":1,"xn--mgbab2bd":1,"xn--mgbca7dzdo":1,"xn--mgbi4ecexp":1,"xn--mgbt3dhd":1,"xn--mk1bu44c":1,"xn--mxtq1m":1,"xn--ngbc5azd":1,"xn--ngbe9e0a":1,"xn--ngbrx":1,"xn--nqv7f":1,"xn--nqv7fs00ema":1,"xn--nyqy26a":1,"xn--otu796d":1,"xn--p1acf":1,"xn--pssy2u":1,"xn--q9jyb4c":1,"xn--qcka1pmc":1,"xn--rhqv96g":1,"xn--rovu88b":1,"xn--ses554g":1,"xn--t60b56a":1,"xn--tckwe":1,"xn--tiq49xqyj":1,"xn--unup4y":1,"xn--vermgensberater-ctb":1,"xn--vermgensberatung-pwb":1,"xn--vhquv":1,"xn--vuq861b":1,"xn--w4r85el8fhu5dnra":1,"xn--w4rs40l":1,"xn--xhq521b":1,"xn--zfr164b":1,"xyz":1,"yachts":1,"yahoo":1,"yamaxun":1,"yandex":1,"yodobashi":1,"yoga":1,"yokohama":1,"you":1,"youtube":1,"yun":1,"zappos":1,"zara":1,"zero":1,"zip":1,"zone":1,"zuerich":1},"private":{"cc.ua":2,"inf.ua":2,"ltd.ua":2,"611.to":2,"graphox.us":2,"devcdnaccesso.com":3,"on-acorn.io":3,"activetrail.biz":2,"adobeaemcloud.com":2,"dev.adobeaemcloud.com":4,"hlx.live":2,"adobeaemcloud.net":2,"hlx.page":2,"hlx3.page":2,"adobeio-static.net":2,"adobeioruntime.net":2,"beep.pl":2,"airkitapps.com":2,"airkitapps-au.com":2,"airkitapps.eu":2,"aivencloud.com":2,"akadns.net":2,"akamai.net":2,"akamai-staging.net":2,"akamaiedge.net":2,"akamaiedge-staging.net":2,"akamaihd.net":2,"akamaihd-staging.net":2,"akamaiorigin.net":2,"akamaiorigin-staging.net":2,"akamaized.net":2,"akamaized-staging.net":2,"edgekey.net":2,"edgekey-staging.net":2,"edgesuite.net":2,"edgesuite-staging.net":2,"barsy.ca":2,"compute.estate":3,"alces.network":3,"kasserver.com":2,"altervista.org":2,"alwaysdata.net":2,"myamaze.net":2,"execute-api.cn-north-1.amazonaws.com.cn":5,"execute-api.cn-northwest-1.amazonaws.com.cn":5,"execute-api.af-south-1.amazonaws.com":4,"execute-api.ap-east-1.amazonaws.com":4,"execute-api.ap-northeast-1.amazonaws.com":4,"execute-api.ap-northeast-2.amazonaws.com":4,"execute-api.ap-northeast-3.amazonaws.com":4,"execute-api.ap-south-1.amazonaws.com":4,"execute-api.ap-south-2.amazonaws.com":4,"execute-api.ap-southeast-1.amazonaws.com":4,"execute-api.ap-southeast-2.amazonaws.com":4,"execute-api.ap-southeast-3.amazonaws.com":4,"execute-api.ap-southeast-4.amazonaws.com":4,"execute-api.ca-central-1.amazonaws.com":4,"execute-api.eu-central-1.amazonaws.com":4,"execute-api.eu-central-2.amazonaws.com":4,"execute-api.eu-north-1.amazonaws.com":4,"execute-api.eu-south-1.amazonaws.com":4,"execute-api.eu-south-2.amazonaws.com":4,"execute-api.eu-west-1.amazonaws.com":4,"execute-api.eu-west-2.amazonaws.com":4,"execute-api.eu-west-3.amazonaws.com":4,"execute-api.il-central-1.amazonaws.com":4,"execute-api.me-central-1.amazonaws.com":4,"execute-api.me-south-1.amazonaws.com":4,"execute-api.sa-east-1.amazonaws.com":4,"execute-api.us-east-1.amazonaws.com":4,"execute-api.us-east-2.amazonaws.com":4,"execute-api.us-gov-east-1.amazonaws.com":4,"execute-api.us-gov-west-1.amazonaws.com":4,"execute-api.us-west-1.amazonaws.com":4,"execute-api.us-west-2.amazonaws.com":4,"cloudfront.net":2,"auth.af-south-1.amazoncognito.com":4,"auth.ap-northeast-1.amazoncognito.com":4,"auth.ap-northeast-2.amazoncognito.com":4,"auth.ap-northeast-3.amazoncognito.com":4,"auth.ap-south-1.amazoncognito.com":4,"auth.ap-southeast-1.amazoncognito.com":4,"auth.ap-southeast-2.amazoncognito.com":4,"auth.ap-southeast-3.amazoncognito.com":4,"auth.ca-central-1.amazoncognito.com":4,"auth.eu-central-1.amazoncognito.com":4,"auth.eu-north-1.amazoncognito.com":4,"auth.eu-south-1.amazoncognito.com":4,"auth.eu-west-1.amazoncognito.com":4,"auth.eu-west-2.amazoncognito.com":4,"auth.eu-west-3.amazoncognito.com":4,"auth.il-central-1.amazoncognito.com":4,"auth.me-south-1.amazoncognito.com":4,"auth.sa-east-1.amazoncognito.com":4,"auth.us-east-1.amazoncognito.com":4,"auth-fips.us-east-1.amazoncognito.com":4,"auth.us-east-2.amazoncognito.com":4,"auth-fips.us-east-2.amazoncognito.com":4,"auth-fips.us-gov-west-1.amazoncognito.com":4,"auth.us-west-1.amazoncognito.com":4,"auth-fips.us-west-1.amazoncognito.com":4,"auth.us-west-2.amazoncognito.com":4,"auth-fips.us-west-2.amazoncognito.com":4,"compute.amazonaws.com":4,"compute-1.amazonaws.com":4,"compute.amazonaws.com.cn":5,"us-east-1.amazonaws.com":3,"emrappui-prod.cn-north-1.amazonaws.com.cn":5,"emrnotebooks-prod.cn-north-1.amazonaws.com.cn":5,"emrstudio-prod.cn-north-1.amazonaws.com.cn":5,"emrappui-prod.cn-northwest-1.amazonaws.com.cn":5,"emrnotebooks-prod.cn-northwest-1.amazonaws.com.cn":5,"emrstudio-prod.cn-northwest-1.amazonaws.com.cn":5,"emrappui-prod.af-south-1.amazonaws.com":4,"emrnotebooks-prod.af-south-1.amazonaws.com":4,"emrstudio-prod.af-south-1.amazonaws.com":4,"emrappui-prod.ap-east-1.amazonaws.com":4,"emrnotebooks-prod.ap-east-1.amazonaws.com":4,"emrstudio-prod.ap-east-1.amazonaws.com":4,"emrappui-prod.ap-northeast-1.amazonaws.com":4,"emrnotebooks-prod.ap-northeast-1.amazonaws.com":4,"emrstudio-prod.ap-northeast-1.amazonaws.com":4,"emrappui-prod.ap-northeast-2.amazonaws.com":4,"emrnotebooks-prod.ap-northeast-2.amazonaws.com":4,"emrstudio-prod.ap-northeast-2.amazonaws.com":4,"emrappui-prod.ap-northeast-3.amazonaws.com":4,"emrnotebooks-prod.ap-northeast-3.amazonaws.com":4,"emrstudio-prod.ap-northeast-3.amazonaws.com":4,"emrappui-prod.ap-south-1.amazonaws.com":4,"emrnotebooks-prod.ap-south-1.amazonaws.com":4,"emrstudio-prod.ap-south-1.amazonaws.com":4,"emrappui-prod.ap-southeast-1.amazonaws.com":4,"emrnotebooks-prod.ap-southeast-1.amazonaws.com":4,"emrstudio-prod.ap-southeast-1.amazonaws.com":4,"emrappui-prod.ap-southeast-2.amazonaws.com":4,"emrnotebooks-prod.ap-southeast-2.amazonaws.com":4,"emrstudio-prod.ap-southeast-2.amazonaws.com":4,"emrappui-prod.ap-southeast-3.amazonaws.com":4,"emrnotebooks-prod.ap-southeast-3.amazonaws.com":4,"emrstudio-prod.ap-southeast-3.amazonaws.com":4,"emrappui-prod.ca-central-1.amazonaws.com":4,"emrnotebooks-prod.ca-central-1.amazonaws.com":4,"emrstudio-prod.ca-central-1.amazonaws.com":4,"emrappui-prod.eu-central-1.amazonaws.com":4,"emrnotebooks-prod.eu-central-1.amazonaws.com":4,"emrstudio-prod.eu-central-1.amazonaws.com":4,"emrappui-prod.eu-north-1.amazonaws.com":4,"emrnotebooks-prod.eu-north-1.amazonaws.com":4,"emrstudio-prod.eu-north-1.amazonaws.com":4,"emrappui-prod.eu-south-1.amazonaws.com":4,"emrnotebooks-prod.eu-south-1.amazonaws.com":4,"emrstudio-prod.eu-south-1.amazonaws.com":4,"emrappui-prod.eu-west-1.amazonaws.com":4,"emrnotebooks-prod.eu-west-1.amazonaws.com":4,"emrstudio-prod.eu-west-1.amazonaws.com":4,"emrappui-prod.eu-west-2.amazonaws.com":4,"emrnotebooks-prod.eu-west-2.amazonaws.com":4,"emrstudio-prod.eu-west-2.amazonaws.com":4,"emrappui-prod.eu-west-3.amazonaws.com":4,"emrnotebooks-prod.eu-west-3.amazonaws.com":4,"emrstudio-prod.eu-west-3.amazonaws.com":4,"emrappui-prod.me-central-1.amazonaws.com":4,"emrnotebooks-prod.me-central-1.amazonaws.com":4,"emrstudio-prod.me-central-1.amazonaws.com":4,"emrappui-prod.me-south-1.amazonaws.com":4,"emrnotebooks-prod.me-south-1.amazonaws.com":4,"emrstudio-prod.me-south-1.amazonaws.com":4,"emrappui-prod.sa-east-1.amazonaws.com":4,"emrnotebooks-prod.sa-east-1.amazonaws.com":4,"emrstudio-prod.sa-east-1.amazonaws.com":4,"emrappui-prod.us-east-1.amazonaws.com":4,"emrnotebooks-prod.us-east-1.amazonaws.com":4,"emrstudio-prod.us-east-1.amazonaws.com":4,"emrappui-prod.us-east-2.amazonaws.com":4,"emrnotebooks-prod.us-east-2.amazonaws.com":4,"emrstudio-prod.us-east-2.amazonaws.com":4,"emrappui-prod.us-gov-east-1.amazonaws.com":4,"emrnotebooks-prod.us-gov-east-1.amazonaws.com":4,"emrstudio-prod.us-gov-east-1.amazonaws.com":4,"emrappui-prod.us-gov-west-1.amazonaws.com":4,"emrnotebooks-prod.us-gov-west-1.amazonaws.com":4,"emrstudio-prod.us-gov-west-1.amazonaws.com":4,"emrappui-prod.us-west-1.amazonaws.com":4,"emrnotebooks-prod.us-west-1.amazonaws.com":4,"emrstudio-prod.us-west-1.amazonaws.com":4,"emrappui-prod.us-west-2.amazonaws.com":4,"emrnotebooks-prod.us-west-2.amazonaws.com":4,"emrstudio-prod.us-west-2.amazonaws.com":4,"cn-north-1.airflow.amazonaws.com.cn":6,"cn-northwest-1.airflow.amazonaws.com.cn":6,"ap-northeast-1.airflow.amazonaws.com":5,"ap-northeast-2.airflow.amazonaws.com":5,"ap-south-1.airflow.amazonaws.com":5,"ap-southeast-1.airflow.amazonaws.com":5,"ap-southeast-2.airflow.amazonaws.com":5,"ca-central-1.airflow.amazonaws.com":5,"eu-central-1.airflow.amazonaws.com":5,"eu-north-1.airflow.amazonaws.com":5,"eu-west-1.airflow.amazonaws.com":5,"eu-west-2.airflow.amazonaws.com":5,"eu-west-3.airflow.amazonaws.com":5,"sa-east-1.airflow.amazonaws.com":5,"us-east-1.airflow.amazonaws.com":5,"us-east-2.airflow.amazonaws.com":5,"us-west-2.airflow.amazonaws.com":5,"s3.dualstack.cn-north-1.amazonaws.com.cn":6,"s3-accesspoint.dualstack.cn-north-1.amazonaws.com.cn":6,"s3-website.dualstack.cn-north-1.amazonaws.com.cn":6,"s3.cn-north-1.amazonaws.com.cn":5,"s3-accesspoint.cn-north-1.amazonaws.com.cn":5,"s3-deprecated.cn-north-1.amazonaws.com.cn":5,"s3-object-lambda.cn-north-1.amazonaws.com.cn":5,"s3-website.cn-north-1.amazonaws.com.cn":5,"s3.dualstack.cn-northwest-1.amazonaws.com.cn":6,"s3-accesspoint.dualstack.cn-northwest-1.amazonaws.com.cn":6,"s3.cn-northwest-1.amazonaws.com.cn":5,"s3-accesspoint.cn-northwest-1.amazonaws.com.cn":5,"s3-object-lambda.cn-northwest-1.amazonaws.com.cn":5,"s3-website.cn-northwest-1.amazonaws.com.cn":5,"s3.dualstack.af-south-1.amazonaws.com":5,"s3-accesspoint.dualstack.af-south-1.amazonaws.com":5,"s3-website.dualstack.af-south-1.amazonaws.com":5,"s3.af-south-1.amazonaws.com":4,"s3-accesspoint.af-south-1.amazonaws.com":4,"s3-object-lambda.af-south-1.amazonaws.com":4,"s3-website.af-south-1.amazonaws.com":4,"s3.dualstack.ap-east-1.amazonaws.com":5,"s3-accesspoint.dualstack.ap-east-1.amazonaws.com":5,"s3.ap-east-1.amazonaws.com":4,"s3-accesspoint.ap-east-1.amazonaws.com":4,"s3-object-lambda.ap-east-1.amazonaws.com":4,"s3-website.ap-east-1.amazonaws.com":4,"s3.dualstack.ap-northeast-1.amazonaws.com":5,"s3-accesspoint.dualstack.ap-northeast-1.amazonaws.com":5,"s3-website.dualstack.ap-northeast-1.amazonaws.com":5,"s3.ap-northeast-1.amazonaws.com":4,"s3-accesspoint.ap-northeast-1.amazonaws.com":4,"s3-object-lambda.ap-northeast-1.amazonaws.com":4,"s3-website.ap-northeast-1.amazonaws.com":4,"s3.dualstack.ap-northeast-2.amazonaws.com":5,"s3-accesspoint.dualstack.ap-northeast-2.amazonaws.com":5,"s3-website.dualstack.ap-northeast-2.amazonaws.com":5,"s3.ap-northeast-2.amazonaws.com":4,"s3-accesspoint.ap-northeast-2.amazonaws.com":4,"s3-object-lambda.ap-northeast-2.amazonaws.com":4,"s3-website.ap-northeast-2.amazonaws.com":4,"s3.dualstack.ap-northeast-3.amazonaws.com":5,"s3-accesspoint.dualstack.ap-northeast-3.amazonaws.com":5,"s3-website.dualstack.ap-northeast-3.amazonaws.com":5,"s3.ap-northeast-3.amazonaws.com":4,"s3-accesspoint.ap-northeast-3.amazonaws.com":4,"s3-object-lambda.ap-northeast-3.amazonaws.com":4,"s3-website.ap-northeast-3.amazonaws.com":4,"s3.dualstack.ap-south-1.amazonaws.com":5,"s3-accesspoint.dualstack.ap-south-1.amazonaws.com":5,"s3-website.dualstack.ap-south-1.amazonaws.com":5,"s3.ap-south-1.amazonaws.com":4,"s3-accesspoint.ap-south-1.amazonaws.com":4,"s3-object-lambda.ap-south-1.amazonaws.com":4,"s3-website.ap-south-1.amazonaws.com":4,"s3.dualstack.ap-south-2.amazonaws.com":5,"s3-accesspoint.dualstack.ap-south-2.amazonaws.com":5,"s3.ap-south-2.amazonaws.com":4,"s3-accesspoint.ap-south-2.amazonaws.com":4,"s3-object-lambda.ap-south-2.amazonaws.com":4,"s3-website.ap-south-2.amazonaws.com":4,"s3.dualstack.ap-southeast-1.amazonaws.com":5,"s3-accesspoint.dualstack.ap-southeast-1.amazonaws.com":5,"s3-website.dualstack.ap-southeast-1.amazonaws.com":5,"s3.ap-southeast-1.amazonaws.com":4,"s3-accesspoint.ap-southeast-1.amazonaws.com":4,"s3-object-lambda.ap-southeast-1.amazonaws.com":4,"s3-website.ap-southeast-1.amazonaws.com":4,"s3.dualstack.ap-southeast-2.amazonaws.com":5,"s3-accesspoint.dualstack.ap-southeast-2.amazonaws.com":5,"s3-website.dualstack.ap-southeast-2.amazonaws.com":5,"s3.ap-southeast-2.amazonaws.com":4,"s3-accesspoint.ap-southeast-2.amazonaws.com":4,"s3-object-lambda.ap-southeast-2.amazonaws.com":4,"s3-website.ap-southeast-2.amazonaws.com":4,"s3.dualstack.ap-southeast-3.amazonaws.com":5,"s3-accesspoint.dualstack.ap-southeast-3.amazonaws.com":5,"s3.ap-southeast-3.amazonaws.com":4,"s3-accesspoint.ap-southeast-3.amazonaws.com":4,"s3-object-lambda.ap-southeast-3.amazonaws.com":4,"s3-website.ap-southeast-3.amazonaws.com":4,"s3.dualstack.ap-southeast-4.amazonaws.com":5,"s3-accesspoint.dualstack.ap-southeast-4.amazonaws.com":5,"s3.ap-southeast-4.amazonaws.com":4,"s3-accesspoint.ap-southeast-4.amazonaws.com":4,"s3-object-lambda.ap-southeast-4.amazonaws.com":4,"s3-website.ap-southeast-4.amazonaws.com":4,"s3.dualstack.ca-central-1.amazonaws.com":5,"s3-accesspoint.dualstack.ca-central-1.amazonaws.com":5,"s3-accesspoint-fips.dualstack.ca-central-1.amazonaws.com":5,"s3-fips.dualstack.ca-central-1.amazonaws.com":5,"s3-website.dualstack.ca-central-1.amazonaws.com":5,"s3.ca-central-1.amazonaws.com":4,"s3-accesspoint.ca-central-1.amazonaws.com":4,"s3-accesspoint-fips.ca-central-1.amazonaws.com":4,"s3-fips.ca-central-1.amazonaws.com":4,"s3-object-lambda.ca-central-1.amazonaws.com":4,"s3-website.ca-central-1.amazonaws.com":4,"s3.dualstack.eu-central-1.amazonaws.com":5,"s3-accesspoint.dualstack.eu-central-1.amazonaws.com":5,"s3-website.dualstack.eu-central-1.amazonaws.com":5,"s3.eu-central-1.amazonaws.com":4,"s3-accesspoint.eu-central-1.amazonaws.com":4,"s3-object-lambda.eu-central-1.amazonaws.com":4,"s3-website.eu-central-1.amazonaws.com":4,"s3.dualstack.eu-central-2.amazonaws.com":5,"s3-accesspoint.dualstack.eu-central-2.amazonaws.com":5,"s3.eu-central-2.amazonaws.com":4,"s3-accesspoint.eu-central-2.amazonaws.com":4,"s3-object-lambda.eu-central-2.amazonaws.com":4,"s3-website.eu-central-2.amazonaws.com":4,"s3.dualstack.eu-north-1.amazonaws.com":5,"s3-accesspoint.dualstack.eu-north-1.amazonaws.com":5,"s3.eu-north-1.amazonaws.com":4,"s3-accesspoint.eu-north-1.amazonaws.com":4,"s3-object-lambda.eu-north-1.amazonaws.com":4,"s3-website.eu-north-1.amazonaws.com":4,"s3.dualstack.eu-south-1.amazonaws.com":5,"s3-accesspoint.dualstack.eu-south-1.amazonaws.com":5,"s3-website.dualstack.eu-south-1.amazonaws.com":5,"s3.eu-south-1.amazonaws.com":4,"s3-accesspoint.eu-south-1.amazonaws.com":4,"s3-object-lambda.eu-south-1.amazonaws.com":4,"s3-website.eu-south-1.amazonaws.com":4,"s3.dualstack.eu-south-2.amazonaws.com":5,"s3-accesspoint.dualstack.eu-south-2.amazonaws.com":5,"s3.eu-south-2.amazonaws.com":4,"s3-accesspoint.eu-south-2.amazonaws.com":4,"s3-object-lambda.eu-south-2.amazonaws.com":4,"s3-website.eu-south-2.amazonaws.com":4,"s3.dualstack.eu-west-1.amazonaws.com":5,"s3-accesspoint.dualstack.eu-west-1.amazonaws.com":5,"s3-website.dualstack.eu-west-1.amazonaws.com":5,"s3.eu-west-1.amazonaws.com":4,"s3-accesspoint.eu-west-1.amazonaws.com":4,"s3-deprecated.eu-west-1.amazonaws.com":4,"s3-object-lambda.eu-west-1.amazonaws.com":4,"s3-website.eu-west-1.amazonaws.com":4,"s3.dualstack.eu-west-2.amazonaws.com":5,"s3-accesspoint.dualstack.eu-west-2.amazonaws.com":5,"s3.eu-west-2.amazonaws.com":4,"s3-accesspoint.eu-west-2.amazonaws.com":4,"s3-object-lambda.eu-west-2.amazonaws.com":4,"s3-website.eu-west-2.amazonaws.com":4,"s3.dualstack.eu-west-3.amazonaws.com":5,"s3-accesspoint.dualstack.eu-west-3.amazonaws.com":5,"s3-website.dualstack.eu-west-3.amazonaws.com":5,"s3.eu-west-3.amazonaws.com":4,"s3-accesspoint.eu-west-3.amazonaws.com":4,"s3-object-lambda.eu-west-3.amazonaws.com":4,"s3-website.eu-west-3.amazonaws.com":4,"s3.dualstack.il-central-1.amazonaws.com":5,"s3-accesspoint.dualstack.il-central-1.amazonaws.com":5,"s3.il-central-1.amazonaws.com":4,"s3-accesspoint.il-central-1.amazonaws.com":4,"s3-object-lambda.il-central-1.amazonaws.com":4,"s3-website.il-central-1.amazonaws.com":4,"s3.dualstack.me-central-1.amazonaws.com":5,"s3-accesspoint.dualstack.me-central-1.amazonaws.com":5,"s3.me-central-1.amazonaws.com":4,"s3-accesspoint.me-central-1.amazonaws.com":4,"s3-object-lambda.me-central-1.amazonaws.com":4,"s3-website.me-central-1.amazonaws.com":4,"s3.dualstack.me-south-1.amazonaws.com":5,"s3-accesspoint.dualstack.me-south-1.amazonaws.com":5,"s3.me-south-1.amazonaws.com":4,"s3-accesspoint.me-south-1.amazonaws.com":4,"s3-object-lambda.me-south-1.amazonaws.com":4,"s3-website.me-south-1.amazonaws.com":4,"s3.amazonaws.com":3,"s3-1.amazonaws.com":3,"s3-ap-east-1.amazonaws.com":3,"s3-ap-northeast-1.amazonaws.com":3,"s3-ap-northeast-2.amazonaws.com":3,"s3-ap-northeast-3.amazonaws.com":3,"s3-ap-south-1.amazonaws.com":3,"s3-ap-southeast-1.amazonaws.com":3,"s3-ap-southeast-2.amazonaws.com":3,"s3-ca-central-1.amazonaws.com":3,"s3-eu-central-1.amazonaws.com":3,"s3-eu-north-1.amazonaws.com":3,"s3-eu-west-1.amazonaws.com":3,"s3-eu-west-2.amazonaws.com":3,"s3-eu-west-3.amazonaws.com":3,"s3-external-1.amazonaws.com":3,"s3-fips-us-gov-east-1.amazonaws.com":3,"s3-fips-us-gov-west-1.amazonaws.com":3,"mrap.accesspoint.s3-global.amazonaws.com":5,"s3-me-south-1.amazonaws.com":3,"s3-sa-east-1.amazonaws.com":3,"s3-us-east-2.amazonaws.com":3,"s3-us-gov-east-1.amazonaws.com":3,"s3-us-gov-west-1.amazonaws.com":3,"s3-us-west-1.amazonaws.com":3,"s3-us-west-2.amazonaws.com":3,"s3-website-ap-northeast-1.amazonaws.com":3,"s3-website-ap-southeast-1.amazonaws.com":3,"s3-website-ap-southeast-2.amazonaws.com":3,"s3-website-eu-west-1.amazonaws.com":3,"s3-website-sa-east-1.amazonaws.com":3,"s3-website-us-east-1.amazonaws.com":3,"s3-website-us-gov-west-1.amazonaws.com":3,"s3-website-us-west-1.amazonaws.com":3,"s3-website-us-west-2.amazonaws.com":3,"s3.dualstack.sa-east-1.amazonaws.com":5,"s3-accesspoint.dualstack.sa-east-1.amazonaws.com":5,"s3-website.dualstack.sa-east-1.amazonaws.com":5,"s3.sa-east-1.amazonaws.com":4,"s3-accesspoint.sa-east-1.amazonaws.com":4,"s3-object-lambda.sa-east-1.amazonaws.com":4,"s3-website.sa-east-1.amazonaws.com":4,"s3.dualstack.us-east-1.amazonaws.com":5,"s3-accesspoint.dualstack.us-east-1.amazonaws.com":5,"s3-accesspoint-fips.dualstack.us-east-1.amazonaws.com":5,"s3-fips.dualstack.us-east-1.amazonaws.com":5,"s3-website.dualstack.us-east-1.amazonaws.com":5,"s3.us-east-1.amazonaws.com":4,"s3-accesspoint.us-east-1.amazonaws.com":4,"s3-accesspoint-fips.us-east-1.amazonaws.com":4,"s3-deprecated.us-east-1.amazonaws.com":4,"s3-fips.us-east-1.amazonaws.com":4,"s3-object-lambda.us-east-1.amazonaws.com":4,"s3-website.us-east-1.amazonaws.com":4,"s3.dualstack.us-east-2.amazonaws.com":5,"s3-accesspoint.dualstack.us-east-2.amazonaws.com":5,"s3-accesspoint-fips.dualstack.us-east-2.amazonaws.com":5,"s3-fips.dualstack.us-east-2.amazonaws.com":5,"s3.us-east-2.amazonaws.com":4,"s3-accesspoint.us-east-2.amazonaws.com":4,"s3-accesspoint-fips.us-east-2.amazonaws.com":4,"s3-deprecated.us-east-2.amazonaws.com":4,"s3-fips.us-east-2.amazonaws.com":4,"s3-object-lambda.us-east-2.amazonaws.com":4,"s3-website.us-east-2.amazonaws.com":4,"s3.dualstack.us-gov-east-1.amazonaws.com":5,"s3-accesspoint.dualstack.us-gov-east-1.amazonaws.com":5,"s3-accesspoint-fips.dualstack.us-gov-east-1.amazonaws.com":5,"s3-fips.dualstack.us-gov-east-1.amazonaws.com":5,"s3.us-gov-east-1.amazonaws.com":4,"s3-accesspoint.us-gov-east-1.amazonaws.com":4,"s3-accesspoint-fips.us-gov-east-1.amazonaws.com":4,"s3-fips.us-gov-east-1.amazonaws.com":4,"s3-object-lambda.us-gov-east-1.amazonaws.com":4,"s3-website.us-gov-east-1.amazonaws.com":4,"s3.dualstack.us-gov-west-1.amazonaws.com":5,"s3-accesspoint.dualstack.us-gov-west-1.amazonaws.com":5,"s3-accesspoint-fips.dualstack.us-gov-west-1.amazonaws.com":5,"s3-fips.dualstack.us-gov-west-1.amazonaws.com":5,"s3.us-gov-west-1.amazonaws.com":4,"s3-accesspoint.us-gov-west-1.amazonaws.com":4,"s3-accesspoint-fips.us-gov-west-1.amazonaws.com":4,"s3-fips.us-gov-west-1.amazonaws.com":4,"s3-object-lambda.us-gov-west-1.amazonaws.com":4,"s3-website.us-gov-west-1.amazonaws.com":4,"s3.dualstack.us-west-1.amazonaws.com":5,"s3-accesspoint.dualstack.us-west-1.amazonaws.com":5,"s3-accesspoint-fips.dualstack.us-west-1.amazonaws.com":5,"s3-fips.dualstack.us-west-1.amazonaws.com":5,"s3-website.dualstack.us-west-1.amazonaws.com":5,"s3.us-west-1.amazonaws.com":4,"s3-accesspoint.us-west-1.amazonaws.com":4,"s3-accesspoint-fips.us-west-1.amazonaws.com":4,"s3-fips.us-west-1.amazonaws.com":4,"s3-object-lambda.us-west-1.amazonaws.com":4,"s3-website.us-west-1.amazonaws.com":4,"s3.dualstack.us-west-2.amazonaws.com":5,"s3-accesspoint.dualstack.us-west-2.amazonaws.com":5,"s3-accesspoint-fips.dualstack.us-west-2.amazonaws.com":5,"s3-fips.dualstack.us-west-2.amazonaws.com":5,"s3-website.dualstack.us-west-2.amazonaws.com":5,"s3.us-west-2.amazonaws.com":4,"s3-accesspoint.us-west-2.amazonaws.com":4,"s3-accesspoint-fips.us-west-2.amazonaws.com":4,"s3-deprecated.us-west-2.amazonaws.com":4,"s3-fips.us-west-2.amazonaws.com":4,"s3-object-lambda.us-west-2.amazonaws.com":4,"s3-website.us-west-2.amazonaws.com":4,"notebook.af-south-1.sagemaker.aws":4,"notebook.ap-east-1.sagemaker.aws":4,"notebook.ap-northeast-1.sagemaker.aws":4,"notebook.ap-northeast-2.sagemaker.aws":4,"notebook.ap-northeast-3.sagemaker.aws":4,"notebook.ap-south-1.sagemaker.aws":4,"notebook.ap-south-2.sagemaker.aws":4,"notebook.ap-southeast-1.sagemaker.aws":4,"notebook.ap-southeast-2.sagemaker.aws":4,"notebook.ap-southeast-3.sagemaker.aws":4,"notebook.ap-southeast-4.sagemaker.aws":4,"notebook.ca-central-1.sagemaker.aws":4,"notebook.eu-central-1.sagemaker.aws":4,"notebook.eu-central-2.sagemaker.aws":4,"notebook.eu-north-1.sagemaker.aws":4,"notebook.eu-south-1.sagemaker.aws":4,"notebook.eu-south-2.sagemaker.aws":4,"notebook.eu-west-1.sagemaker.aws":4,"notebook.eu-west-2.sagemaker.aws":4,"notebook.eu-west-3.sagemaker.aws":4,"notebook.il-central-1.sagemaker.aws":4,"notebook.me-central-1.sagemaker.aws":4,"notebook.me-south-1.sagemaker.aws":4,"notebook.sa-east-1.sagemaker.aws":4,"notebook.us-east-1.sagemaker.aws":4,"notebook-fips.us-east-1.sagemaker.aws":4,"notebook.us-east-2.sagemaker.aws":4,"notebook-fips.us-east-2.sagemaker.aws":4,"notebook.us-gov-east-1.sagemaker.aws":4,"notebook-fips.us-gov-east-1.sagemaker.aws":4,"notebook.us-gov-west-1.sagemaker.aws":4,"notebook-fips.us-gov-west-1.sagemaker.aws":4,"notebook.us-west-1.sagemaker.aws":4,"notebook.us-west-2.sagemaker.aws":4,"notebook-fips.us-west-2.sagemaker.aws":4,"notebook.cn-north-1.sagemaker.com.cn":5,"notebook.cn-northwest-1.sagemaker.com.cn":5,"studio.af-south-1.sagemaker.aws":4,"studio.ap-east-1.sagemaker.aws":4,"studio.ap-northeast-1.sagemaker.aws":4,"studio.ap-northeast-2.sagemaker.aws":4,"studio.ap-northeast-3.sagemaker.aws":4,"studio.ap-south-1.sagemaker.aws":4,"studio.ap-southeast-1.sagemaker.aws":4,"studio.ap-southeast-2.sagemaker.aws":4,"studio.ap-southeast-3.sagemaker.aws":4,"studio.ca-central-1.sagemaker.aws":4,"studio.eu-central-1.sagemaker.aws":4,"studio.eu-north-1.sagemaker.aws":4,"studio.eu-south-1.sagemaker.aws":4,"studio.eu-west-1.sagemaker.aws":4,"studio.eu-west-2.sagemaker.aws":4,"studio.eu-west-3.sagemaker.aws":4,"studio.il-central-1.sagemaker.aws":4,"studio.me-central-1.sagemaker.aws":4,"studio.me-south-1.sagemaker.aws":4,"studio.sa-east-1.sagemaker.aws":4,"studio.us-east-1.sagemaker.aws":4,"studio.us-east-2.sagemaker.aws":4,"studio.us-gov-east-1.sagemaker.aws":4,"studio-fips.us-gov-east-1.sagemaker.aws":4,"studio.us-gov-west-1.sagemaker.aws":4,"studio-fips.us-gov-west-1.sagemaker.aws":4,"studio.us-west-1.sagemaker.aws":4,"studio.us-west-2.sagemaker.aws":4,"studio.cn-north-1.sagemaker.com.cn":5,"studio.cn-northwest-1.sagemaker.com.cn":5,"analytics-gateway.ap-northeast-1.amazonaws.com":4,"analytics-gateway.ap-northeast-2.amazonaws.com":4,"analytics-gateway.ap-south-1.amazonaws.com":4,"analytics-gateway.ap-southeast-1.amazonaws.com":4,"analytics-gateway.ap-southeast-2.amazonaws.com":4,"analytics-gateway.eu-central-1.amazonaws.com":4,"analytics-gateway.eu-west-1.amazonaws.com":4,"analytics-gateway.us-east-1.amazonaws.com":4,"analytics-gateway.us-east-2.amazonaws.com":4,"analytics-gateway.us-west-2.amazonaws.com":4,"amplifyapp.com":3,"awsapprunner.com":3,"webview-assets.aws-cloud9.af-south-1.amazonaws.com":5,"vfs.cloud9.af-south-1.amazonaws.com":5,"webview-assets.cloud9.af-south-1.amazonaws.com":5,"webview-assets.aws-cloud9.ap-east-1.amazonaws.com":5,"vfs.cloud9.ap-east-1.amazonaws.com":5,"webview-assets.cloud9.ap-east-1.amazonaws.com":5,"webview-assets.aws-cloud9.ap-northeast-1.amazonaws.com":5,"vfs.cloud9.ap-northeast-1.amazonaws.com":5,"webview-assets.cloud9.ap-northeast-1.amazonaws.com":5,"webview-assets.aws-cloud9.ap-northeast-2.amazonaws.com":5,"vfs.cloud9.ap-northeast-2.amazonaws.com":5,"webview-assets.cloud9.ap-northeast-2.amazonaws.com":5,"webview-assets.aws-cloud9.ap-northeast-3.amazonaws.com":5,"vfs.cloud9.ap-northeast-3.amazonaws.com":5,"webview-assets.cloud9.ap-northeast-3.amazonaws.com":5,"webview-assets.aws-cloud9.ap-south-1.amazonaws.com":5,"vfs.cloud9.ap-south-1.amazonaws.com":5,"webview-assets.cloud9.ap-south-1.amazonaws.com":5,"webview-assets.aws-cloud9.ap-southeast-1.amazonaws.com":5,"vfs.cloud9.ap-southeast-1.amazonaws.com":5,"webview-assets.cloud9.ap-southeast-1.amazonaws.com":5,"webview-assets.aws-cloud9.ap-southeast-2.amazonaws.com":5,"vfs.cloud9.ap-southeast-2.amazonaws.com":5,"webview-assets.cloud9.ap-southeast-2.amazonaws.com":5,"webview-assets.aws-cloud9.ca-central-1.amazonaws.com":5,"vfs.cloud9.ca-central-1.amazonaws.com":5,"webview-assets.cloud9.ca-central-1.amazonaws.com":5,"webview-assets.aws-cloud9.eu-central-1.amazonaws.com":5,"vfs.cloud9.eu-central-1.amazonaws.com":5,"webview-assets.cloud9.eu-central-1.amazonaws.com":5,"webview-assets.aws-cloud9.eu-north-1.amazonaws.com":5,"vfs.cloud9.eu-north-1.amazonaws.com":5,"webview-assets.cloud9.eu-north-1.amazonaws.com":5,"webview-assets.aws-cloud9.eu-south-1.amazonaws.com":5,"vfs.cloud9.eu-south-1.amazonaws.com":5,"webview-assets.cloud9.eu-south-1.amazonaws.com":5,"webview-assets.aws-cloud9.eu-west-1.amazonaws.com":5,"vfs.cloud9.eu-west-1.amazonaws.com":5,"webview-assets.cloud9.eu-west-1.amazonaws.com":5,"webview-assets.aws-cloud9.eu-west-2.amazonaws.com":5,"vfs.cloud9.eu-west-2.amazonaws.com":5,"webview-assets.cloud9.eu-west-2.amazonaws.com":5,"webview-assets.aws-cloud9.eu-west-3.amazonaws.com":5,"vfs.cloud9.eu-west-3.amazonaws.com":5,"webview-assets.cloud9.eu-west-3.amazonaws.com":5,"webview-assets.aws-cloud9.me-south-1.amazonaws.com":5,"vfs.cloud9.me-south-1.amazonaws.com":5,"webview-assets.cloud9.me-south-1.amazonaws.com":5,"webview-assets.aws-cloud9.sa-east-1.amazonaws.com":5,"vfs.cloud9.sa-east-1.amazonaws.com":5,"webview-assets.cloud9.sa-east-1.amazonaws.com":5,"webview-assets.aws-cloud9.us-east-1.amazonaws.com":5,"vfs.cloud9.us-east-1.amazonaws.com":5,"webview-assets.cloud9.us-east-1.amazonaws.com":5,"webview-assets.aws-cloud9.us-east-2.amazonaws.com":5,"vfs.cloud9.us-east-2.amazonaws.com":5,"webview-assets.cloud9.us-east-2.amazonaws.com":5,"webview-assets.aws-cloud9.us-west-1.amazonaws.com":5,"vfs.cloud9.us-west-1.amazonaws.com":5,"webview-assets.cloud9.us-west-1.amazonaws.com":5,"webview-assets.aws-cloud9.us-west-2.amazonaws.com":5,"vfs.cloud9.us-west-2.amazonaws.com":5,"webview-assets.cloud9.us-west-2.amazonaws.com":5,"cn-north-1.eb.amazonaws.com.cn":5,"cn-northwest-1.eb.amazonaws.com.cn":5,"elasticbeanstalk.com":2,"af-south-1.elasticbeanstalk.com":3,"ap-east-1.elasticbeanstalk.com":3,"ap-northeast-1.elasticbeanstalk.com":3,"ap-northeast-2.elasticbeanstalk.com":3,"ap-northeast-3.elasticbeanstalk.com":3,"ap-south-1.elasticbeanstalk.com":3,"ap-southeast-1.elasticbeanstalk.com":3,"ap-southeast-2.elasticbeanstalk.com":3,"ap-southeast-3.elasticbeanstalk.com":3,"ca-central-1.elasticbeanstalk.com":3,"eu-central-1.elasticbeanstalk.com":3,"eu-north-1.elasticbeanstalk.com":3,"eu-south-1.elasticbeanstalk.com":3,"eu-west-1.elasticbeanstalk.com":3,"eu-west-2.elasticbeanstalk.com":3,"eu-west-3.elasticbeanstalk.com":3,"il-central-1.elasticbeanstalk.com":3,"me-south-1.elasticbeanstalk.com":3,"sa-east-1.elasticbeanstalk.com":3,"us-east-1.elasticbeanstalk.com":3,"us-east-2.elasticbeanstalk.com":3,"us-gov-east-1.elasticbeanstalk.com":3,"us-gov-west-1.elasticbeanstalk.com":3,"us-west-1.elasticbeanstalk.com":3,"us-west-2.elasticbeanstalk.com":3,"elb.amazonaws.com.cn":5,"elb.amazonaws.com":4,"awsglobalaccelerator.com":2,"eero.online":2,"eero-stage.online":2,"t3l3p0rt.net":2,"tele.amune.org":3,"apigee.io":2,"siiites.com":2,"appspacehosted.com":2,"appspaceusercontent.com":2,"appudo.net":2,"on-aptible.com":2,"user.aseinet.ne.jp":4,"gv.vc":2,"d.gv.vc":3,"user.party.eus":3,"pimienta.org":2,"poivron.org":2,"potager.org":2,"sweetpepper.org":2,"myasustor.com":2,"cdn.prod.atlassian-dev.net":4,"translated.page":2,"autocode.dev":2,"myfritz.net":2,"onavstack.net":2,"awdev.ca":3,"advisor.ws":3,"ecommerce-shop.pl":2,"b-data.io":2,"backplaneapp.io":2,"balena-devices.com":2,"rs.ba":2,"banzai.cloud":3,"app.banzaicloud.io":3,"backyards.banzaicloud.io":4,"base.ec":2,"official.ec":2,"buyshop.jp":2,"fashionstore.jp":2,"handcrafted.jp":2,"kawaiishop.jp":2,"supersale.jp":2,"theshop.jp":2,"shopselect.net":2,"base.shop":2,"beagleboard.io":2,"beget.app":3,"betainabox.com":2,"bnr.la":2,"bitbucket.io":2,"blackbaudcdn.net":2,"of.je":2,"bluebite.io":2,"boomla.net":2,"boutir.com":2,"boxfuse.io":2,"square7.ch":2,"bplaced.com":2,"bplaced.de":2,"square7.de":2,"bplaced.net":2,"square7.net":2,"shop.brendly.rs":3,"browsersafetymark.io":2,"uk0.bigv.io":3,"dh.bytemark.co.uk":4,"vm.bytemark.co.uk":4,"cafjs.com":2,"mycd.eu":2,"canva-apps.cn":2,"canva-apps.com":2,"drr.ac":2,"uwu.ai":2,"carrd.co":2,"crd.co":2,"ju.mp":2,"ae.org":2,"br.com":2,"cn.com":2,"com.de":2,"com.se":2,"de.com":2,"eu.com":2,"gb.net":2,"hu.net":2,"jp.net":2,"jpn.com":2,"mex.com":2,"ru.com":2,"sa.com":2,"se.net":2,"uk.com":2,"uk.net":2,"us.com":2,"za.bz":2,"za.com":2,"ar.com":2,"hu.com":2,"kr.com":2,"no.com":2,"qc.com":2,"uy.com":2,"africa.com":2,"gr.com":2,"in.net":2,"web.in":2,"us.org":2,"co.com":2,"aus.basketball":2,"nz.basketball":2,"radio.am":2,"radio.fm":2,"c.la":2,"certmgr.org":2,"cx.ua":2,"discourse.group":2,"discourse.team":2,"cleverapps.io":2,"clerk.app":2,"clerkstage.app":2,"lcl.dev":3,"lclstage.dev":3,"stg.dev":3,"stgstage.dev":3,"clickrising.net":2,"c66.me":2,"cloud66.ws":2,"cloud66.zone":2,"jdevcloud.com":2,"wpdevcloud.com":2,"cloudaccess.host":2,"freesite.host":2,"cloudaccess.net":2,"cloudcontrolled.com":2,"cloudcontrolapp.com":2,"cloudera.site":3,"cf-ipfs.com":2,"cloudflare-ipfs.com":2,"trycloudflare.com":2,"pages.dev":2,"r2.dev":2,"workers.dev":2,"wnext.app":2,"co.ca":2,"otap.co":3,"co.cz":2,"c.cdn77.org":3,"cdn77-ssl.net":2,"r.cdn77.net":3,"rsc.cdn77.org":3,"ssl.origin.cdn77-secure.org":4,"cloudns.asia":2,"cloudns.biz":2,"cloudns.club":2,"cloudns.cc":2,"cloudns.eu":2,"cloudns.in":2,"cloudns.info":2,"cloudns.org":2,"cloudns.pro":2,"cloudns.pw":2,"cloudns.us":2,"cnpy.gdn":2,"codeberg.page":2,"co.nl":2,"co.no":2,"webhosting.be":2,"hosting-cluster.nl":2,"ac.ru":2,"edu.ru":2,"gov.ru":2,"int.ru":2,"mil.ru":2,"test.ru":2,"dyn.cosidns.de":3,"dynamisches-dns.de":2,"dnsupdater.de":2,"internet-dns.de":2,"l-o-g-i-n.de":2,"dynamic-dns.info":2,"feste-ip.net":2,"knx-server.net":2,"static-access.net":2,"realm.cz":2,"cryptonomic.net":3,"cupcake.is":2,"curv.dev":2,"customer-oci.com":3,"oci.customer-oci.com":4,"ocp.customer-oci.com":4,"ocs.customer-oci.com":4,"cyon.link":2,"cyon.site":2,"fnwk.site":2,"folionetwork.site":2,"platform0.app":2,"daplie.me":2,"localhost.daplie.me":3,"dattolocal.com":2,"dattorelay.com":2,"dattoweb.com":2,"mydatto.com":2,"dattolocal.net":2,"mydatto.net":2,"biz.dk":2,"co.dk":2,"firm.dk":2,"reg.dk":2,"store.dk":2,"dyndns.dappnode.io":3,"dapps.earth":3,"bzz.dapps.earth":4,"builtwithdark.com":2,"demo.datadetect.com":3,"instance.datadetect.com":3,"edgestack.me":2,"ddns5.com":2,"debian.net":2,"deno.dev":2,"deno-staging.dev":2,"dedyn.io":2,"deta.app":2,"deta.dev":2,"rss.my.id":4,"diher.solutions":3,"discordsays.com":2,"discordsez.com":2,"jozi.biz":2,"dnshome.de":2,"online.th":2,"shop.th":2,"drayddns.com":2,"shoparena.pl":2,"dreamhosters.com":2,"mydrobo.com":2,"drud.io":2,"drud.us":2,"duckdns.org":2,"bip.sh":2,"bitbridge.net":2,"dy.fi":2,"tunk.org":2,"dyndns-at-home.com":2,"dyndns-at-work.com":2,"dyndns-blog.com":2,"dyndns-free.com":2,"dyndns-home.com":2,"dyndns-ip.com":2,"dyndns-mail.com":2,"dyndns-office.com":2,"dyndns-pics.com":2,"dyndns-remote.com":2,"dyndns-server.com":2,"dyndns-web.com":2,"dyndns-wiki.com":2,"dyndns-work.com":2,"dyndns.biz":2,"dyndns.info":2,"dyndns.org":2,"dyndns.tv":2,"at-band-camp.net":2,"ath.cx":2,"barrel-of-knowledge.info":2,"barrell-of-knowledge.info":2,"better-than.tv":2,"blogdns.com":2,"blogdns.net":2,"blogdns.org":2,"blogsite.org":2,"boldlygoingnowhere.org":2,"broke-it.net":2,"buyshouses.net":2,"cechire.com":2,"dnsalias.com":2,"dnsalias.net":2,"dnsalias.org":2,"dnsdojo.com":2,"dnsdojo.net":2,"dnsdojo.org":2,"does-it.net":2,"doesntexist.com":2,"doesntexist.org":2,"dontexist.com":2,"dontexist.net":2,"dontexist.org":2,"doomdns.com":2,"doomdns.org":2,"dvrdns.org":2,"dyn-o-saur.com":2,"dynalias.com":2,"dynalias.net":2,"dynalias.org":2,"dynathome.net":2,"dyndns.ws":2,"endofinternet.net":2,"endofinternet.org":2,"endoftheinternet.org":2,"est-a-la-maison.com":2,"est-a-la-masion.com":2,"est-le-patron.com":2,"est-mon-blogueur.com":2,"for-better.biz":2,"for-more.biz":2,"for-our.info":2,"for-some.biz":2,"for-the.biz":2,"forgot.her.name":3,"forgot.his.name":3,"from-ak.com":2,"from-al.com":2,"from-ar.com":2,"from-az.net":2,"from-ca.com":2,"from-co.net":2,"from-ct.com":2,"from-dc.com":2,"from-de.com":2,"from-fl.com":2,"from-ga.com":2,"from-hi.com":2,"from-ia.com":2,"from-id.com":2,"from-il.com":2,"from-in.com":2,"from-ks.com":2,"from-ky.com":2,"from-la.net":2,"from-ma.com":2,"from-md.com":2,"from-me.org":2,"from-mi.com":2,"from-mn.com":2,"from-mo.com":2,"from-ms.com":2,"from-mt.com":2,"from-nc.com":2,"from-nd.com":2,"from-ne.com":2,"from-nh.com":2,"from-nj.com":2,"from-nm.com":2,"from-nv.com":2,"from-ny.net":2,"from-oh.com":2,"from-ok.com":2,"from-or.com":2,"from-pa.com":2,"from-pr.com":2,"from-ri.com":2,"from-sc.com":2,"from-sd.com":2,"from-tn.com":2,"from-tx.com":2,"from-ut.com":2,"from-va.com":2,"from-vt.com":2,"from-wa.com":2,"from-wi.com":2,"from-wv.com":2,"from-wy.com":2,"ftpaccess.cc":2,"fuettertdasnetz.de":2,"game-host.org":2,"game-server.cc":2,"getmyip.com":2,"gets-it.net":2,"go.dyndns.org":3,"gotdns.com":2,"gotdns.org":2,"groks-the.info":2,"groks-this.info":2,"ham-radio-op.net":2,"here-for-more.info":2,"hobby-site.com":2,"hobby-site.org":2,"home.dyndns.org":3,"homedns.org":2,"homeftp.net":2,"homeftp.org":2,"homeip.net":2,"homelinux.com":2,"homelinux.net":2,"homelinux.org":2,"homeunix.com":2,"homeunix.net":2,"homeunix.org":2,"iamallama.com":2,"in-the-band.net":2,"is-a-anarchist.com":2,"is-a-blogger.com":2,"is-a-bookkeeper.com":2,"is-a-bruinsfan.org":2,"is-a-bulls-fan.com":2,"is-a-candidate.org":2,"is-a-caterer.com":2,"is-a-celticsfan.org":2,"is-a-chef.com":2,"is-a-chef.net":2,"is-a-chef.org":2,"is-a-conservative.com":2,"is-a-cpa.com":2,"is-a-cubicle-slave.com":2,"is-a-democrat.com":2,"is-a-designer.com":2,"is-a-doctor.com":2,"is-a-financialadvisor.com":2,"is-a-geek.com":2,"is-a-geek.net":2,"is-a-geek.org":2,"is-a-green.com":2,"is-a-guru.com":2,"is-a-hard-worker.com":2,"is-a-hunter.com":2,"is-a-knight.org":2,"is-a-landscaper.com":2,"is-a-lawyer.com":2,"is-a-liberal.com":2,"is-a-libertarian.com":2,"is-a-linux-user.org":2,"is-a-llama.com":2,"is-a-musician.com":2,"is-a-nascarfan.com":2,"is-a-nurse.com":2,"is-a-painter.com":2,"is-a-patsfan.org":2,"is-a-personaltrainer.com":2,"is-a-photographer.com":2,"is-a-player.com":2,"is-a-republican.com":2,"is-a-rockstar.com":2,"is-a-socialist.com":2,"is-a-soxfan.org":2,"is-a-student.com":2,"is-a-teacher.com":2,"is-a-techie.com":2,"is-a-therapist.com":2,"is-an-accountant.com":2,"is-an-actor.com":2,"is-an-actress.com":2,"is-an-anarchist.com":2,"is-an-artist.com":2,"is-an-engineer.com":2,"is-an-entertainer.com":2,"is-by.us":2,"is-certified.com":2,"is-found.org":2,"is-gone.com":2,"is-into-anime.com":2,"is-into-cars.com":2,"is-into-cartoons.com":2,"is-into-games.com":2,"is-leet.com":2,"is-lost.org":2,"is-not-certified.com":2,"is-saved.org":2,"is-slick.com":2,"is-uberleet.com":2,"is-very-bad.org":2,"is-very-evil.org":2,"is-very-good.org":2,"is-very-nice.org":2,"is-very-sweet.org":2,"is-with-theband.com":2,"isa-geek.com":2,"isa-geek.net":2,"isa-geek.org":2,"isa-hockeynut.com":2,"issmarterthanyou.com":2,"isteingeek.de":2,"istmein.de":2,"kicks-ass.net":2,"kicks-ass.org":2,"knowsitall.info":2,"land-4-sale.us":2,"lebtimnetz.de":2,"leitungsen.de":2,"likes-pie.com":2,"likescandy.com":2,"merseine.nu":2,"mine.nu":2,"misconfused.org":2,"mypets.ws":2,"myphotos.cc":2,"neat-url.com":2,"office-on-the.net":2,"on-the-web.tv":2,"podzone.net":2,"podzone.org":2,"readmyblog.org":2,"saves-the-whales.com":2,"scrapper-site.net":2,"scrapping.cc":2,"selfip.biz":2,"selfip.com":2,"selfip.info":2,"selfip.net":2,"selfip.org":2,"sells-for-less.com":2,"sells-for-u.com":2,"sells-it.net":2,"sellsyourhome.org":2,"servebbs.com":2,"servebbs.net":2,"servebbs.org":2,"serveftp.net":2,"serveftp.org":2,"servegame.org":2,"shacknet.nu":2,"simple-url.com":2,"space-to-rent.com":2,"stuff-4-sale.org":2,"stuff-4-sale.us":2,"teaches-yoga.com":2,"thruhere.net":2,"traeumtgerade.de":2,"webhop.biz":2,"webhop.info":2,"webhop.net":2,"webhop.org":2,"worse-than.tv":2,"writesthisblog.com":2,"ddnss.de":2,"dyn.ddnss.de":3,"dyndns.ddnss.de":3,"dyndns1.de":2,"dyn-ip24.de":2,"home-webserver.de":2,"dyn.home-webserver.de":3,"myhome-server.de":2,"ddnss.org":2,"definima.net":2,"definima.io":2,"ondigitalocean.app":2,"digitaloceanspaces.com":3,"bci.dnstrace.pro":3,"ddnsfree.com":2,"ddnsgeek.com":2,"giize.com":2,"gleeze.com":2,"kozow.com":2,"loseyourip.com":2,"ooguy.com":2,"theworkpc.com":2,"casacam.net":2,"dynu.net":2,"accesscam.org":2,"camdvr.org":2,"freeddns.org":2,"mywire.org":2,"webredirect.org":2,"myddns.rocks":2,"blogsite.xyz":2,"dynv6.net":2,"e4.cz":2,"easypanel.app":2,"easypanel.host":2,"elementor.cloud":2,"elementor.cool":2,"en-root.fr":2,"mytuleap.com":2,"tuleap-partners.com":2,"encr.app":2,"encoreapi.com":2,"onred.one":2,"staging.onred.one":3,"eu.encoway.cloud":3,"eu.org":2,"al.eu.org":3,"asso.eu.org":3,"at.eu.org":3,"au.eu.org":3,"be.eu.org":3,"bg.eu.org":3,"ca.eu.org":3,"cd.eu.org":3,"ch.eu.org":3,"cn.eu.org":3,"cy.eu.org":3,"cz.eu.org":3,"de.eu.org":3,"dk.eu.org":3,"edu.eu.org":3,"ee.eu.org":3,"es.eu.org":3,"fi.eu.org":3,"fr.eu.org":3,"gr.eu.org":3,"hr.eu.org":3,"hu.eu.org":3,"ie.eu.org":3,"il.eu.org":3,"in.eu.org":3,"int.eu.org":3,"is.eu.org":3,"it.eu.org":3,"jp.eu.org":3,"kr.eu.org":3,"lt.eu.org":3,"lu.eu.org":3,"lv.eu.org":3,"mc.eu.org":3,"me.eu.org":3,"mk.eu.org":3,"mt.eu.org":3,"my.eu.org":3,"net.eu.org":3,"ng.eu.org":3,"nl.eu.org":3,"no.eu.org":3,"nz.eu.org":3,"paris.eu.org":3,"pl.eu.org":3,"pt.eu.org":3,"q-a.eu.org":3,"ro.eu.org":3,"ru.eu.org":3,"se.eu.org":3,"si.eu.org":3,"sk.eu.org":3,"tr.eu.org":3,"uk.eu.org":3,"us.eu.org":3,"eurodir.ru":2,"eu-1.evennode.com":3,"eu-2.evennode.com":3,"eu-3.evennode.com":3,"eu-4.evennode.com":3,"us-1.evennode.com":3,"us-2.evennode.com":3,"us-3.evennode.com":3,"us-4.evennode.com":3,"twmail.cc":2,"twmail.net":2,"twmail.org":2,"mymailer.com.tw":3,"url.tw":2,"onfabrica.com":2,"apps.fbsbx.com":3,"ru.net":2,"adygeya.ru":2,"bashkiria.ru":2,"bir.ru":2,"cbg.ru":2,"com.ru":2,"dagestan.ru":2,"grozny.ru":2,"kalmykia.ru":2,"kustanai.ru":2,"marine.ru":2,"mordovia.ru":2,"msk.ru":2,"mytis.ru":2,"nalchik.ru":2,"nov.ru":2,"pyatigorsk.ru":2,"spb.ru":2,"vladikavkaz.ru":2,"vladimir.ru":2,"abkhazia.su":2,"adygeya.su":2,"aktyubinsk.su":2,"arkhangelsk.su":2,"armenia.su":2,"ashgabad.su":2,"azerbaijan.su":2,"balashov.su":2,"bashkiria.su":2,"bryansk.su":2,"bukhara.su":2,"chimkent.su":2,"dagestan.su":2,"east-kazakhstan.su":2,"exnet.su":2,"georgia.su":2,"grozny.su":2,"ivanovo.su":2,"jambyl.su":2,"kalmykia.su":2,"kaluga.su":2,"karacol.su":2,"karaganda.su":2,"karelia.su":2,"khakassia.su":2,"krasnodar.su":2,"kurgan.su":2,"kustanai.su":2,"lenug.su":2,"mangyshlak.su":2,"mordovia.su":2,"msk.su":2,"murmansk.su":2,"nalchik.su":2,"navoi.su":2,"north-kazakhstan.su":2,"nov.su":2,"obninsk.su":2,"penza.su":2,"pokrovsk.su":2,"sochi.su":2,"spb.su":2,"tashkent.su":2,"termez.su":2,"togliatti.su":2,"troitsk.su":2,"tselinograd.su":2,"tula.su":2,"tuva.su":2,"vladikavkaz.su":2,"vladimir.su":2,"vologda.su":2,"channelsdvr.net":2,"u.channelsdvr.net":3,"edgecompute.app":2,"fastly-edge.com":2,"fastly-terrarium.com":2,"fastlylb.net":2,"map.fastlylb.net":3,"freetls.fastly.net":3,"map.fastly.net":3,"a.prod.fastly.net":4,"global.prod.fastly.net":4,"a.ssl.fastly.net":4,"b.ssl.fastly.net":4,"global.ssl.fastly.net":4,"user.fm":3,"fastvps-server.com":2,"fastvps.host":2,"myfast.host":2,"fastvps.site":2,"myfast.space":2,"fedorainfracloud.org":2,"fedorapeople.org":2,"cloud.fedoraproject.org":3,"app.os.fedoraproject.org":4,"app.os.stg.fedoraproject.org":5,"conn.uk":2,"copro.uk":2,"hosp.uk":2,"mydobiss.com":2,"fh-muenster.io":2,"filegear.me":2,"filegear-au.me":2,"filegear-de.me":2,"filegear-gb.me":2,"filegear-ie.me":2,"filegear-jp.me":2,"filegear-sg.me":2,"firebaseapp.com":2,"fireweb.app":2,"flap.id":2,"onflashdrive.app":2,"fldrv.com":2,"fly.dev":2,"edgeapp.net":2,"shw.io":2,"flynnhosting.net":2,"forgeblocks.com":2,"id.forgerock.io":3,"framer.app":2,"framercanvas.com":2,"framer.media":2,"framer.photos":2,"framer.website":2,"framer.wiki":2,"frusky.de":3,"ravpage.co.il":3,"0e.vc":2,"freebox-os.com":2,"freeboxos.com":2,"fbx-os.fr":2,"fbxos.fr":2,"freebox-os.fr":2,"freeboxos.fr":2,"freedesktop.org":2,"freemyip.com":2,"wien.funkfeuer.at":3,"futurecms.at":3,"ex.futurecms.at":4,"in.futurecms.at":4,"futurehosting.at":2,"futuremailing.at":2,"ex.ortsinfo.at":4,"kunden.ortsinfo.at":4,"statics.cloud":3,"independent-commission.uk":2,"independent-inquest.uk":2,"independent-inquiry.uk":2,"independent-panel.uk":2,"independent-review.uk":2,"public-inquiry.uk":2,"royal-commission.uk":2,"campaign.gov.uk":3,"service.gov.uk":3,"api.gov.uk":3,"gehirn.ne.jp":3,"usercontent.jp":2,"gentapps.com":2,"gentlentapis.com":2,"lab.ms":2,"cdn-edges.net":2,"ghost.io":2,"gsj.bz":2,"githubusercontent.com":2,"githubpreview.dev":2,"github.io":2,"gitlab.io":2,"gitapp.si":2,"gitpage.si":2,"glitch.me":2,"nog.community":2,"co.ro":2,"shop.ro":2,"lolipop.io":2,"angry.jp":2,"babyblue.jp":2,"babymilk.jp":2,"backdrop.jp":2,"bambina.jp":2,"bitter.jp":2,"blush.jp":2,"boo.jp":2,"boy.jp":2,"boyfriend.jp":2,"but.jp":2,"candypop.jp":2,"capoo.jp":2,"catfood.jp":2,"cheap.jp":2,"chicappa.jp":2,"chillout.jp":2,"chips.jp":2,"chowder.jp":2,"chu.jp":2,"ciao.jp":2,"cocotte.jp":2,"coolblog.jp":2,"cranky.jp":2,"cutegirl.jp":2,"daa.jp":2,"deca.jp":2,"deci.jp":2,"digick.jp":2,"egoism.jp":2,"fakefur.jp":2,"fem.jp":2,"flier.jp":2,"floppy.jp":2,"fool.jp":2,"frenchkiss.jp":2,"girlfriend.jp":2,"girly.jp":2,"gloomy.jp":2,"gonna.jp":2,"greater.jp":2,"hacca.jp":2,"heavy.jp":2,"her.jp":2,"hiho.jp":2,"hippy.jp":2,"holy.jp":2,"hungry.jp":2,"icurus.jp":2,"itigo.jp":2,"jellybean.jp":2,"kikirara.jp":2,"kill.jp":2,"kilo.jp":2,"kuron.jp":2,"littlestar.jp":2,"lolipopmc.jp":2,"lolitapunk.jp":2,"lomo.jp":2,"lovepop.jp":2,"lovesick.jp":2,"main.jp":2,"mods.jp":2,"mond.jp":2,"mongolian.jp":2,"moo.jp":2,"namaste.jp":2,"nikita.jp":2,"nobushi.jp":2,"noor.jp":2,"oops.jp":2,"parallel.jp":2,"parasite.jp":2,"pecori.jp":2,"peewee.jp":2,"penne.jp":2,"pepper.jp":2,"perma.jp":2,"pigboat.jp":2,"pinoko.jp":2,"punyu.jp":2,"pupu.jp":2,"pussycat.jp":2,"pya.jp":2,"raindrop.jp":2,"readymade.jp":2,"sadist.jp":2,"schoolbus.jp":2,"secret.jp":2,"staba.jp":2,"stripper.jp":2,"sub.jp":2,"sunnyday.jp":2,"thick.jp":2,"tonkotsu.jp":2,"under.jp":2,"upper.jp":2,"velvet.jp":2,"verse.jp":2,"versus.jp":2,"vivian.jp":2,"watson.jp":2,"weblike.jp":2,"whitesnow.jp":2,"zombie.jp":2,"heteml.net":2,"cloudapps.digital":2,"london.cloudapps.digital":3,"pymnt.uk":2,"homeoffice.gov.uk":3,"ro.im":2,"goip.de":2,"run.app":2,"a.run.app":3,"web.app":2,"0emm.com":3,"appspot.com":2,"r.appspot.com":4,"codespot.com":2,"googleapis.com":2,"googlecode.com":2,"pagespeedmobilizer.com":2,"publishproxy.com":2,"withgoogle.com":2,"withyoutube.com":2,"gateway.dev":3,"cloud.goog":2,"translate.goog":2,"usercontent.goog":3,"cloudfunctions.net":2,"blogspot.ae":2,"blogspot.al":2,"blogspot.am":2,"blogspot.ba":2,"blogspot.be":2,"blogspot.bg":2,"blogspot.bj":2,"blogspot.ca":2,"blogspot.cf":2,"blogspot.ch":2,"blogspot.cl":2,"blogspot.co.at":3,"blogspot.co.id":3,"blogspot.co.il":3,"blogspot.co.ke":3,"blogspot.co.nz":3,"blogspot.co.uk":3,"blogspot.co.za":3,"blogspot.com":2,"blogspot.com.ar":3,"blogspot.com.au":3,"blogspot.com.br":3,"blogspot.com.by":3,"blogspot.com.co":3,"blogspot.com.cy":3,"blogspot.com.ee":3,"blogspot.com.eg":3,"blogspot.com.es":3,"blogspot.com.mt":3,"blogspot.com.ng":3,"blogspot.com.tr":3,"blogspot.com.uy":3,"blogspot.cv":2,"blogspot.cz":2,"blogspot.de":2,"blogspot.dk":2,"blogspot.fi":2,"blogspot.fr":2,"blogspot.gr":2,"blogspot.hk":2,"blogspot.hr":2,"blogspot.hu":2,"blogspot.ie":2,"blogspot.in":2,"blogspot.is":2,"blogspot.it":2,"blogspot.jp":2,"blogspot.kr":2,"blogspot.li":2,"blogspot.lt":2,"blogspot.lu":2,"blogspot.md":2,"blogspot.mk":2,"blogspot.mr":2,"blogspot.mx":2,"blogspot.my":2,"blogspot.nl":2,"blogspot.no":2,"blogspot.pe":2,"blogspot.pt":2,"blogspot.qa":2,"blogspot.re":2,"blogspot.ro":2,"blogspot.rs":2,"blogspot.ru":2,"blogspot.se":2,"blogspot.sg":2,"blogspot.si":2,"blogspot.sk":2,"blogspot.sn":2,"blogspot.td":2,"blogspot.tw":2,"blogspot.ug":2,"blogspot.vn":2,"goupile.fr":2,"gov.nl":2,"awsmppl.com":2,"xn--gnstigbestellen-zvb.de":2,"xn--gnstigliefern-wob.de":2,"fin.ci":2,"free.hr":2,"caa.li":2,"ua.rs":2,"conf.se":2,"hs.zone":2,"hs.run":2,"hashbang.sh":2,"hasura.app":2,"hasura-app.io":2,"pages.it.hs-heilbronn.de":4,"hepforge.org":2,"herokuapp.com":2,"herokussl.com":2,"ravendb.cloud":2,"ravendb.community":2,"ravendb.me":2,"development.run":2,"ravendb.run":2,"homesklep.pl":2,"secaas.hk":2,"hoplix.shop":2,"orx.biz":2,"biz.gl":2,"col.ng":2,"firm.ng":2,"gen.ng":2,"ltd.ng":2,"ngo.ng":2,"edu.scot":2,"sch.so":2,"ie.ua":2,"hostyhosting.io":2,"xn--hkkinen-5wa.fi":2,"moonscale.io":3,"moonscale.net":2,"iki.fi":2,"ibxos.it":2,"iliadboxos.it":2,"impertrixcdn.com":2,"impertrix.com":2,"smushcdn.com":2,"wphostedmail.com":2,"wpmucdn.com":2,"tempurl.host":2,"wpmudev.host":2,"dyn-berlin.de":2,"in-berlin.de":2,"in-brb.de":2,"in-butter.de":2,"in-dsl.de":2,"in-dsl.net":2,"in-dsl.org":2,"in-vpn.de":2,"in-vpn.net":2,"in-vpn.org":2,"biz.at":2,"info.at":2,"info.cx":2,"ac.leg.br":3,"al.leg.br":3,"am.leg.br":3,"ap.leg.br":3,"ba.leg.br":3,"ce.leg.br":3,"df.leg.br":3,"es.leg.br":3,"go.leg.br":3,"ma.leg.br":3,"mg.leg.br":3,"ms.leg.br":3,"mt.leg.br":3,"pa.leg.br":3,"pb.leg.br":3,"pe.leg.br":3,"pi.leg.br":3,"pr.leg.br":3,"rj.leg.br":3,"rn.leg.br":3,"ro.leg.br":3,"rr.leg.br":3,"rs.leg.br":3,"sc.leg.br":3,"se.leg.br":3,"sp.leg.br":3,"to.leg.br":3,"pixolino.com":2,"na4u.ru":2,"iopsys.se":2,"ipifony.net":2,"iservschule.de":2,"mein-iserv.de":2,"schulplattform.de":2,"schulserver.de":2,"test-iserv.de":2,"iserv.dev":2,"iobb.net":2,"mel.cloudlets.com.au":4,"cloud.interhostsolutions.be":3,"mycloud.by":2,"alp1.ae.flow.ch":4,"appengine.flow.ch":3,"es-1.axarnet.cloud":3,"diadem.cloud":2,"vip.jelastic.cloud":3,"jele.cloud":2,"it1.eur.aruba.jenv-aruba.cloud":5,"it1.jenv-aruba.cloud":3,"keliweb.cloud":2,"cs.keliweb.cloud":3,"oxa.cloud":2,"tn.oxa.cloud":3,"uk.oxa.cloud":3,"primetel.cloud":2,"uk.primetel.cloud":3,"ca.reclaim.cloud":3,"uk.reclaim.cloud":3,"us.reclaim.cloud":3,"ch.trendhosting.cloud":3,"de.trendhosting.cloud":3,"jele.club":2,"amscompute.com":2,"dopaas.com":2,"paas.hosted-by-previder.com":3,"rag-cloud.hosteur.com":3,"rag-cloud-ch.hosteur.com":3,"jcloud.ik-server.com":3,"jcloud-ver-jpc.ik-server.com":3,"demo.jelastic.com":3,"kilatiron.com":2,"paas.massivegrid.com":3,"jed.wafaicloud.com":3,"lon.wafaicloud.com":3,"ryd.wafaicloud.com":3,"j.scaleforce.com.cy":4,"jelastic.dogado.eu":3,"fi.cloudplatform.fi":3,"demo.datacenter.fi":3,"paas.datacenter.fi":3,"jele.host":2,"mircloud.host":2,"paas.beebyte.io":3,"sekd1.beebyteapp.io":3,"jele.io":2,"cloud-fr1.unispace.io":3,"jc.neen.it":3,"cloud.jelastic.open.tim.it":5,"jcloud.kz":2,"upaas.kazteleport.kz":3,"cloudjiffy.net":2,"fra1-de.cloudjiffy.net":3,"west1-us.cloudjiffy.net":3,"jls-sto1.elastx.net":3,"jls-sto2.elastx.net":3,"jls-sto3.elastx.net":3,"faststacks.net":2,"fr-1.paas.massivegrid.net":4,"lon-1.paas.massivegrid.net":4,"lon-2.paas.massivegrid.net":4,"ny-1.paas.massivegrid.net":4,"ny-2.paas.massivegrid.net":4,"sg-1.paas.massivegrid.net":4,"jelastic.saveincloud.net":3,"nordeste-idc.saveincloud.net":3,"j.scaleforce.net":3,"jelastic.tsukaeru.net":3,"sdscloud.pl":2,"unicloud.pl":2,"mircloud.ru":2,"jelastic.regruhosting.ru":3,"enscaled.sg":2,"jele.site":2,"jelastic.team":2,"orangecloud.tn":2,"j.layershift.co.uk":4,"phx.enscaled.us":3,"mircloud.us":2,"myjino.ru":2,"hosting.myjino.ru":4,"landing.myjino.ru":4,"spectrum.myjino.ru":4,"vps.myjino.ru":4,"jotelulu.cloud":2,"triton.zone":3,"cns.joyent.com":4,"js.org":2,"kaas.gg":2,"khplay.nl":2,"ktistory.com":2,"kapsi.fi":2,"keymachine.de":2,"kinghost.net":2,"uni5.net":2,"knightpoint.systems":2,"koobin.events":2,"oya.to":2,"kuleuven.cloud":2,"ezproxy.kuleuven.be":3,"co.krd":2,"edu.krd":2,"krellian.net":2,"webthings.io":2,"git-repos.de":2,"lcube-server.de":2,"svn-repos.de":2,"leadpages.co":2,"lpages.co":2,"lpusercontent.com":2,"lelux.site":2,"co.business":2,"co.education":2,"co.events":2,"co.financial":2,"co.network":2,"co.place":2,"co.technology":2,"app.lmpm.com":3,"linkyard.cloud":2,"linkyard-cloud.ch":2,"members.linode.com":3,"nodebalancer.linode.com":4,"linodeobjects.com":3,"ip.linodeusercontent.com":3,"we.bs":2,"user.localcert.dev":4,"localzone.xyz":2,"loginline.app":2,"loginline.dev":2,"loginline.io":2,"loginline.services":2,"loginline.site":2,"servers.run":2,"lohmus.me":2,"krasnik.pl":2,"leczna.pl":2,"lubartow.pl":2,"lublin.pl":2,"poniatowa.pl":2,"swidnik.pl":2,"glug.org.uk":3,"lug.org.uk":3,"lugs.org.uk":3,"barsy.bg":2,"barsy.co.uk":3,"barsyonline.co.uk":3,"barsycenter.com":2,"barsyonline.com":2,"barsy.club":2,"barsy.de":2,"barsy.eu":2,"barsy.in":2,"barsy.info":2,"barsy.io":2,"barsy.me":2,"barsy.menu":2,"barsy.mobi":2,"barsy.net":2,"barsy.online":2,"barsy.org":2,"barsy.pro":2,"barsy.pub":2,"barsy.ro":2,"barsy.shop":2,"barsy.site":2,"barsy.support":2,"barsy.uk":2,"magentosite.cloud":3,"mayfirst.info":2,"mayfirst.org":2,"hb.cldmail.ru":3,"cn.vu":2,"mazeplay.com":2,"mcpe.me":2,"mcdir.me":2,"mcdir.ru":2,"mcpre.ru":2,"vps.mcdir.ru":3,"mediatech.by":2,"mediatech.dev":2,"hra.health":2,"miniserver.com":2,"memset.net":2,"messerli.app":2,"cloud.metacentrum.cz":4,"custom.metacentrum.cz":3,"flt.cloud.muni.cz":4,"usr.cloud.muni.cz":4,"meteorapp.com":2,"eu.meteorapp.com":3,"co.pl":2,"azurecontainer.io":3,"azurewebsites.net":2,"azure-mobile.net":2,"cloudapp.net":2,"azurestaticapps.net":2,"1.azurestaticapps.net":3,"2.azurestaticapps.net":3,"3.azurestaticapps.net":3,"4.azurestaticapps.net":3,"5.azurestaticapps.net":3,"6.azurestaticapps.net":3,"7.azurestaticapps.net":3,"centralus.azurestaticapps.net":3,"eastasia.azurestaticapps.net":3,"eastus2.azurestaticapps.net":3,"westeurope.azurestaticapps.net":3,"westus2.azurestaticapps.net":3,"csx.cc":2,"mintere.site":2,"forte.id":2,"mozilla-iot.org":2,"bmoattachments.org":2,"net.ru":2,"org.ru":2,"pp.ru":2,"hostedpi.com":2,"customer.mythic-beasts.com":3,"caracal.mythic-beasts.com":3,"fentiger.mythic-beasts.com":3,"lynx.mythic-beasts.com":3,"ocelot.mythic-beasts.com":3,"oncilla.mythic-beasts.com":3,"onza.mythic-beasts.com":3,"sphinx.mythic-beasts.com":3,"vs.mythic-beasts.com":3,"x.mythic-beasts.com":3,"yali.mythic-beasts.com":3,"cust.retrosnub.co.uk":4,"ui.nabu.casa":3,"cloud.nospamproxy.com":3,"netlify.app":2,"4u.com":2,"ngrok.app":2,"ngrok-free.app":2,"ngrok.dev":2,"ngrok-free.dev":2,"ngrok.io":2,"ap.ngrok.io":3,"au.ngrok.io":3,"eu.ngrok.io":3,"in.ngrok.io":3,"jp.ngrok.io":3,"sa.ngrok.io":3,"us.ngrok.io":3,"ngrok.pizza":2,"nh-serv.co.uk":3,"nfshost.com":2,"developer.app":3,"noop.app":2,"northflank.app":3,"build.run":3,"code.run":3,"database.run":3,"migration.run":3,"noticeable.news":2,"dnsking.ch":2,"mypi.co":2,"n4t.co":2,"001www.com":2,"ddnslive.com":2,"myiphost.com":2,"forumz.info":2,"16-b.it":2,"32-b.it":2,"64-b.it":2,"soundcast.me":2,"tcp4.me":2,"dnsup.net":2,"hicam.net":2,"now-dns.net":2,"ownip.net":2,"vpndns.net":2,"dynserv.org":2,"now-dns.org":2,"x443.pw":2,"now-dns.top":2,"ntdll.top":2,"freeddns.us":2,"crafting.xyz":2,"zapto.xyz":2,"nsupdate.info":2,"nerdpol.ovh":2,"blogsyte.com":2,"brasilia.me":2,"cable-modem.org":2,"ciscofreak.com":2,"collegefan.org":2,"couchpotatofries.org":2,"damnserver.com":2,"ddns.me":2,"ditchyourip.com":2,"dnsfor.me":2,"dnsiskinky.com":2,"dvrcam.info":2,"dynns.com":2,"eating-organic.net":2,"fantasyleague.cc":2,"geekgalaxy.com":2,"golffan.us":2,"health-carereform.com":2,"homesecuritymac.com":2,"homesecuritypc.com":2,"hopto.me":2,"ilovecollege.info":2,"loginto.me":2,"mlbfan.org":2,"mmafan.biz":2,"myactivedirectory.com":2,"mydissent.net":2,"myeffect.net":2,"mymediapc.net":2,"mypsx.net":2,"mysecuritycamera.com":2,"mysecuritycamera.net":2,"mysecuritycamera.org":2,"net-freaks.com":2,"nflfan.org":2,"nhlfan.net":2,"no-ip.ca":2,"no-ip.co.uk":3,"no-ip.net":2,"noip.us":2,"onthewifi.com":2,"pgafan.net":2,"point2this.com":2,"pointto.us":2,"privatizehealthinsurance.net":2,"quicksytes.com":2,"read-books.org":2,"securitytactics.com":2,"serveexchange.com":2,"servehumour.com":2,"servep2p.com":2,"servesarcasm.com":2,"stufftoread.com":2,"ufcfan.org":2,"unusualperson.com":2,"workisboring.com":2,"3utilities.com":2,"bounceme.net":2,"ddns.net":2,"ddnsking.com":2,"gotdns.ch":2,"hopto.org":2,"myftp.biz":2,"myftp.org":2,"myvnc.com":2,"no-ip.biz":2,"no-ip.info":2,"no-ip.org":2,"noip.me":2,"redirectme.net":2,"servebeer.com":2,"serveblog.net":2,"servecounterstrike.com":2,"serveftp.com":2,"servegame.com":2,"servehalflife.com":2,"servehttp.com":2,"serveirc.com":2,"serveminecraft.net":2,"servemp3.com":2,"servepics.com":2,"servequake.com":2,"sytes.net":2,"webhop.me":2,"zapto.org":2,"stage.nodeart.io":3,"pcloud.host":2,"nyc.mn":2,"static.observableusercontent.com":3,"cya.gg":2,"omg.lol":2,"cloudycluster.net":2,"omniwe.site":2,"123hjemmeside.dk":2,"123hjemmeside.no":2,"123homepage.it":2,"123kotisivu.fi":2,"123minsida.se":2,"123miweb.es":2,"123paginaweb.pt":2,"123sait.ru":2,"123siteweb.fr":2,"123webseite.at":2,"123webseite.de":2,"123website.be":2,"123website.ch":2,"123website.lu":2,"123website.nl":2,"service.one":2,"simplesite.com":2,"simplesite.com.br":3,"simplesite.gr":2,"simplesite.pl":2,"nid.io":2,"opensocial.site":2,"opencraft.hosting":2,"orsites.com":2,"operaunite.com":2,"tech.orange":2,"authgear-staging.com":2,"authgearapps.com":2,"skygearapp.com":2,"outsystemscloud.com":2,"webpaas.ovh.net":4,"hosting.ovh.net":4,"ownprovider.com":2,"own.pm":2,"owo.codes":3,"ox.rs":2,"oy.lc":2,"pgfog.com":2,"pagefrontapp.com":2,"pagexl.com":2,"paywhirl.com":3,"bar0.net":2,"bar1.net":2,"bar2.net":2,"rdv.to":2,"art.pl":2,"gliwice.pl":2,"krakow.pl":2,"poznan.pl":2,"wroc.pl":2,"zakopane.pl":2,"pantheonsite.io":2,"gotpantheon.com":2,"mypep.link":2,"perspecta.cloud":2,"lk3.ru":2,"on-web.fr":2,"bc.platform.sh":3,"ent.platform.sh":3,"eu.platform.sh":3,"us.platform.sh":3,"platformsh.site":3,"tst.site":3,"platter-app.com":2,"platter-app.dev":2,"platterp.us":2,"pdns.page":2,"plesk.page":2,"pleskns.com":2,"dyn53.io":2,"onporter.run":2,"co.bn":2,"postman-echo.com":2,"pstmn.io":2,"mock.pstmn.io":3,"httpbin.org":2,"prequalifyme.today":2,"xen.prgmr.com":3,"priv.at":2,"prvcy.page":2,"dweb.link":3,"protonet.io":2,"chirurgiens-dentistes-en-france.fr":2,"byen.site":2,"pubtls.org":2,"pythonanywhere.com":2,"eu.pythonanywhere.com":3,"qoto.io":2,"qualifioapp.com":2,"ladesk.com":2,"qbuser.com":2,"cloudsite.builders":2,"instances.spawn.cc":3,"instantcloud.cn":2,"ras.ru":2,"qa2.com":2,"qcx.io":2,"sys.qcx.io":4,"dev-myqnapcloud.com":2,"alpha-myqnapcloud.com":2,"myqnapcloud.com":2,"quipelements.com":3,"vapor.cloud":2,"vaporcloud.io":2,"rackmaze.com":2,"rackmaze.net":2,"g.vbrplsbx.io":3,"on-k3s.io":3,"on-rancher.cloud":3,"on-rio.io":3,"readthedocs.io":2,"rhcloud.com":2,"app.render.com":3,"onrender.com":2,"firewalledreplit.co":2,"id.firewalledreplit.co":3,"repl.co":2,"id.repl.co":3,"repl.run":2,"resindevice.io":2,"devices.resinstaging.io":3,"hzc.io":2,"wellbeingzone.eu":2,"wellbeingzone.co.uk":3,"adimo.co.uk":3,"itcouldbewor.se":2,"git-pages.rit.edu":3,"rocky.page":2,"xn--90amc.xn--p1acf":2,"xn--j1aef.xn--p1acf":2,"xn--j1ael8b.xn--p1acf":2,"xn--h1ahn.xn--p1acf":2,"xn--j1adp.xn--p1acf":2,"xn--c1avg.xn--p1acf":2,"xn--80aaa0cvac.xn--p1acf":2,"xn--h1aliz.xn--p1acf":2,"xn--90a1af.xn--p1acf":2,"xn--41a.xn--p1acf":2,"180r.com":2,"dojin.com":2,"sakuratan.com":2,"sakuraweb.com":2,"x0.com":2,"2-d.jp":2,"bona.jp":2,"crap.jp":2,"daynight.jp":2,"eek.jp":2,"flop.jp":2,"halfmoon.jp":2,"jeez.jp":2,"matrix.jp":2,"mimoza.jp":2,"ivory.ne.jp":3,"mail-box.ne.jp":3,"mints.ne.jp":3,"mokuren.ne.jp":3,"opal.ne.jp":3,"sakura.ne.jp":3,"sumomo.ne.jp":3,"topaz.ne.jp":3,"netgamers.jp":2,"nyanta.jp":2,"o0o0.jp":2,"rdy.jp":2,"rgr.jp":2,"rulez.jp":2,"s3.i":2}}; + const tlds = {"icann":{"ac":1,"com.ac":2,"edu.ac":2,"gov.ac":2,"mil.ac":2,"net.ac":2,"org.ac":2,"ad":1,"ae":1,"ac.ae":2,"co.ae":2,"gov.ae":2,"mil.ae":2,"net.ae":2,"org.ae":2,"sch.ae":2,"aero":1,"airline.aero":2,"airport.aero":2,"accident-investigation.aero":2,"accident-prevention.aero":2,"aerobatic.aero":2,"aeroclub.aero":2,"aerodrome.aero":2,"agents.aero":2,"air-surveillance.aero":2,"air-traffic-control.aero":2,"aircraft.aero":2,"airtraffic.aero":2,"ambulance.aero":2,"association.aero":2,"author.aero":2,"ballooning.aero":2,"broker.aero":2,"caa.aero":2,"cargo.aero":2,"catering.aero":2,"certification.aero":2,"championship.aero":2,"charter.aero":2,"civilaviation.aero":2,"club.aero":2,"conference.aero":2,"consultant.aero":2,"consulting.aero":2,"control.aero":2,"council.aero":2,"crew.aero":2,"design.aero":2,"dgca.aero":2,"educator.aero":2,"emergency.aero":2,"engine.aero":2,"engineer.aero":2,"entertainment.aero":2,"equipment.aero":2,"exchange.aero":2,"express.aero":2,"federation.aero":2,"flight.aero":2,"freight.aero":2,"fuel.aero":2,"gliding.aero":2,"government.aero":2,"groundhandling.aero":2,"group.aero":2,"hanggliding.aero":2,"homebuilt.aero":2,"insurance.aero":2,"journal.aero":2,"journalist.aero":2,"leasing.aero":2,"logistics.aero":2,"magazine.aero":2,"maintenance.aero":2,"marketplace.aero":2,"media.aero":2,"microlight.aero":2,"modelling.aero":2,"navigation.aero":2,"parachuting.aero":2,"paragliding.aero":2,"passenger-association.aero":2,"pilot.aero":2,"press.aero":2,"production.aero":2,"recreation.aero":2,"repbody.aero":2,"res.aero":2,"research.aero":2,"rotorcraft.aero":2,"safety.aero":2,"scientist.aero":2,"services.aero":2,"show.aero":2,"skydiving.aero":2,"software.aero":2,"student.aero":2,"taxi.aero":2,"trader.aero":2,"trading.aero":2,"trainer.aero":2,"union.aero":2,"workinggroup.aero":2,"works.aero":2,"af":1,"com.af":2,"edu.af":2,"gov.af":2,"net.af":2,"org.af":2,"ag":1,"co.ag":2,"com.ag":2,"net.ag":2,"nom.ag":2,"org.ag":2,"ai":1,"com.ai":2,"net.ai":2,"off.ai":2,"org.ai":2,"al":1,"com.al":2,"edu.al":2,"gov.al":2,"mil.al":2,"net.al":2,"org.al":2,"am":1,"co.am":2,"com.am":2,"commune.am":2,"net.am":2,"org.am":2,"ao":1,"co.ao":2,"ed.ao":2,"edu.ao":2,"gov.ao":2,"gv.ao":2,"it.ao":2,"og.ao":2,"org.ao":2,"pb.ao":2,"aq":1,"ar":1,"bet.ar":2,"com.ar":2,"coop.ar":2,"edu.ar":2,"gob.ar":2,"gov.ar":2,"int.ar":2,"mil.ar":2,"musica.ar":2,"mutual.ar":2,"net.ar":2,"org.ar":2,"seg.ar":2,"senasa.ar":2,"tur.ar":2,"arpa":1,"e164.arpa":2,"home.arpa":2,"in-addr.arpa":2,"ip6.arpa":2,"iris.arpa":2,"uri.arpa":2,"urn.arpa":2,"as":1,"gov.as":2,"asia":1,"at":1,"ac.at":2,"sth.ac.at":3,"co.at":2,"gv.at":2,"or.at":2,"au":1,"asn.au":2,"com.au":2,"edu.au":2,"gov.au":2,"id.au":2,"net.au":2,"org.au":2,"conf.au":2,"oz.au":2,"act.au":2,"nsw.au":2,"nt.au":2,"qld.au":2,"sa.au":2,"tas.au":2,"vic.au":2,"wa.au":2,"act.edu.au":3,"catholic.edu.au":3,"nsw.edu.au":3,"nt.edu.au":3,"qld.edu.au":3,"sa.edu.au":3,"tas.edu.au":3,"vic.edu.au":3,"wa.edu.au":3,"qld.gov.au":3,"sa.gov.au":3,"tas.gov.au":3,"vic.gov.au":3,"wa.gov.au":3,"schools.nsw.edu.au":4,"aw":1,"com.aw":2,"ax":1,"az":1,"biz.az":2,"co.az":2,"com.az":2,"edu.az":2,"gov.az":2,"info.az":2,"int.az":2,"mil.az":2,"name.az":2,"net.az":2,"org.az":2,"pp.az":2,"pro.az":2,"ba":1,"com.ba":2,"edu.ba":2,"gov.ba":2,"mil.ba":2,"net.ba":2,"org.ba":2,"bb":1,"biz.bb":2,"co.bb":2,"com.bb":2,"edu.bb":2,"gov.bb":2,"info.bb":2,"net.bb":2,"org.bb":2,"store.bb":2,"tv.bb":2,"bd":2,"be":1,"ac.be":2,"bf":1,"gov.bf":2,"bg":1,"0.bg":2,"1.bg":2,"2.bg":2,"3.bg":2,"4.bg":2,"5.bg":2,"6.bg":2,"7.bg":2,"8.bg":2,"9.bg":2,"a.bg":2,"b.bg":2,"c.bg":2,"d.bg":2,"e.bg":2,"f.bg":2,"g.bg":2,"h.bg":2,"i.bg":2,"j.bg":2,"k.bg":2,"l.bg":2,"m.bg":2,"n.bg":2,"o.bg":2,"p.bg":2,"q.bg":2,"r.bg":2,"s.bg":2,"t.bg":2,"u.bg":2,"v.bg":2,"w.bg":2,"x.bg":2,"y.bg":2,"z.bg":2,"bh":1,"com.bh":2,"edu.bh":2,"gov.bh":2,"net.bh":2,"org.bh":2,"bi":1,"co.bi":2,"com.bi":2,"edu.bi":2,"or.bi":2,"org.bi":2,"biz":1,"bj":1,"africa.bj":2,"agro.bj":2,"architectes.bj":2,"assur.bj":2,"avocats.bj":2,"co.bj":2,"com.bj":2,"eco.bj":2,"econo.bj":2,"edu.bj":2,"info.bj":2,"loisirs.bj":2,"money.bj":2,"net.bj":2,"org.bj":2,"ote.bj":2,"restaurant.bj":2,"resto.bj":2,"tourism.bj":2,"univ.bj":2,"bm":1,"com.bm":2,"edu.bm":2,"gov.bm":2,"net.bm":2,"org.bm":2,"bn":1,"com.bn":2,"edu.bn":2,"gov.bn":2,"net.bn":2,"org.bn":2,"bo":1,"com.bo":2,"edu.bo":2,"gob.bo":2,"int.bo":2,"mil.bo":2,"net.bo":2,"org.bo":2,"tv.bo":2,"web.bo":2,"academia.bo":2,"agro.bo":2,"arte.bo":2,"blog.bo":2,"bolivia.bo":2,"ciencia.bo":2,"cooperativa.bo":2,"democracia.bo":2,"deporte.bo":2,"ecologia.bo":2,"economia.bo":2,"empresa.bo":2,"indigena.bo":2,"industria.bo":2,"info.bo":2,"medicina.bo":2,"movimiento.bo":2,"musica.bo":2,"natural.bo":2,"nombre.bo":2,"noticias.bo":2,"patria.bo":2,"plurinacional.bo":2,"politica.bo":2,"profesional.bo":2,"pueblo.bo":2,"revista.bo":2,"salud.bo":2,"tecnologia.bo":2,"tksat.bo":2,"transporte.bo":2,"wiki.bo":2,"br":1,"9guacu.br":2,"abc.br":2,"adm.br":2,"adv.br":2,"agr.br":2,"aju.br":2,"am.br":2,"anani.br":2,"aparecida.br":2,"app.br":2,"arq.br":2,"art.br":2,"ato.br":2,"b.br":2,"barueri.br":2,"belem.br":2,"bet.br":2,"bhz.br":2,"bib.br":2,"bio.br":2,"blog.br":2,"bmd.br":2,"boavista.br":2,"bsb.br":2,"campinagrande.br":2,"campinas.br":2,"caxias.br":2,"cim.br":2,"cng.br":2,"cnt.br":2,"com.br":2,"contagem.br":2,"coop.br":2,"coz.br":2,"cri.br":2,"cuiaba.br":2,"curitiba.br":2,"def.br":2,"des.br":2,"det.br":2,"dev.br":2,"ecn.br":2,"eco.br":2,"edu.br":2,"emp.br":2,"enf.br":2,"eng.br":2,"esp.br":2,"etc.br":2,"eti.br":2,"far.br":2,"feira.br":2,"flog.br":2,"floripa.br":2,"fm.br":2,"fnd.br":2,"fortal.br":2,"fot.br":2,"foz.br":2,"fst.br":2,"g12.br":2,"geo.br":2,"ggf.br":2,"goiania.br":2,"gov.br":2,"ac.gov.br":3,"al.gov.br":3,"am.gov.br":3,"ap.gov.br":3,"ba.gov.br":3,"ce.gov.br":3,"df.gov.br":3,"es.gov.br":3,"go.gov.br":3,"ma.gov.br":3,"mg.gov.br":3,"ms.gov.br":3,"mt.gov.br":3,"pa.gov.br":3,"pb.gov.br":3,"pe.gov.br":3,"pi.gov.br":3,"pr.gov.br":3,"rj.gov.br":3,"rn.gov.br":3,"ro.gov.br":3,"rr.gov.br":3,"rs.gov.br":3,"sc.gov.br":3,"se.gov.br":3,"sp.gov.br":3,"to.gov.br":3,"gru.br":2,"imb.br":2,"ind.br":2,"inf.br":2,"jab.br":2,"jampa.br":2,"jdf.br":2,"joinville.br":2,"jor.br":2,"jus.br":2,"leg.br":2,"leilao.br":2,"lel.br":2,"log.br":2,"londrina.br":2,"macapa.br":2,"maceio.br":2,"manaus.br":2,"maringa.br":2,"mat.br":2,"med.br":2,"mil.br":2,"morena.br":2,"mp.br":2,"mus.br":2,"natal.br":2,"net.br":2,"niteroi.br":2,"nom.br":3,"not.br":2,"ntr.br":2,"odo.br":2,"ong.br":2,"org.br":2,"osasco.br":2,"palmas.br":2,"poa.br":2,"ppg.br":2,"pro.br":2,"psc.br":2,"psi.br":2,"pvh.br":2,"qsl.br":2,"radio.br":2,"rec.br":2,"recife.br":2,"rep.br":2,"ribeirao.br":2,"rio.br":2,"riobranco.br":2,"riopreto.br":2,"salvador.br":2,"sampa.br":2,"santamaria.br":2,"santoandre.br":2,"saobernardo.br":2,"saogonca.br":2,"seg.br":2,"sjc.br":2,"slg.br":2,"slz.br":2,"sorocaba.br":2,"srv.br":2,"taxi.br":2,"tc.br":2,"tec.br":2,"teo.br":2,"the.br":2,"tmp.br":2,"trd.br":2,"tur.br":2,"tv.br":2,"udi.br":2,"vet.br":2,"vix.br":2,"vlog.br":2,"wiki.br":2,"zlg.br":2,"bs":1,"com.bs":2,"edu.bs":2,"gov.bs":2,"net.bs":2,"org.bs":2,"bt":1,"com.bt":2,"edu.bt":2,"gov.bt":2,"net.bt":2,"org.bt":2,"bv":1,"bw":1,"ac.bw":2,"co.bw":2,"gov.bw":2,"net.bw":2,"org.bw":2,"by":1,"gov.by":2,"mil.by":2,"com.by":2,"of.by":2,"bz":1,"co.bz":2,"com.bz":2,"edu.bz":2,"gov.bz":2,"net.bz":2,"org.bz":2,"ca":1,"ab.ca":2,"bc.ca":2,"mb.ca":2,"nb.ca":2,"nf.ca":2,"nl.ca":2,"ns.ca":2,"nt.ca":2,"nu.ca":2,"on.ca":2,"pe.ca":2,"qc.ca":2,"sk.ca":2,"yk.ca":2,"gc.ca":2,"cat":1,"cc":1,"cd":1,"gov.cd":2,"cf":1,"cg":1,"ch":1,"ci":1,"ac.ci":2,"xn--aroport-bya.ci":2,"asso.ci":2,"co.ci":2,"com.ci":2,"ed.ci":2,"edu.ci":2,"go.ci":2,"gouv.ci":2,"int.ci":2,"net.ci":2,"or.ci":2,"org.ci":2,"ck":2,"www.ck":1,"cl":1,"co.cl":2,"gob.cl":2,"gov.cl":2,"mil.cl":2,"cm":1,"co.cm":2,"com.cm":2,"gov.cm":2,"net.cm":2,"cn":1,"ac.cn":2,"com.cn":2,"edu.cn":2,"gov.cn":2,"mil.cn":2,"net.cn":2,"org.cn":2,"xn--55qx5d.cn":2,"xn--od0alg.cn":2,"xn--io0a7i.cn":2,"ah.cn":2,"bj.cn":2,"cq.cn":2,"fj.cn":2,"gd.cn":2,"gs.cn":2,"gx.cn":2,"gz.cn":2,"ha.cn":2,"hb.cn":2,"he.cn":2,"hi.cn":2,"hk.cn":2,"hl.cn":2,"hn.cn":2,"jl.cn":2,"js.cn":2,"jx.cn":2,"ln.cn":2,"mo.cn":2,"nm.cn":2,"nx.cn":2,"qh.cn":2,"sc.cn":2,"sd.cn":2,"sh.cn":2,"sn.cn":2,"sx.cn":2,"tj.cn":2,"tw.cn":2,"xj.cn":2,"xz.cn":2,"yn.cn":2,"zj.cn":2,"co":1,"com.co":2,"edu.co":2,"gov.co":2,"mil.co":2,"net.co":2,"nom.co":2,"org.co":2,"com":1,"coop":1,"cr":1,"ac.cr":2,"co.cr":2,"ed.cr":2,"fi.cr":2,"go.cr":2,"or.cr":2,"sa.cr":2,"cu":1,"com.cu":2,"edu.cu":2,"gob.cu":2,"inf.cu":2,"nat.cu":2,"net.cu":2,"org.cu":2,"cv":1,"com.cv":2,"edu.cv":2,"id.cv":2,"int.cv":2,"net.cv":2,"nome.cv":2,"org.cv":2,"publ.cv":2,"cw":1,"com.cw":2,"edu.cw":2,"net.cw":2,"org.cw":2,"cx":1,"gov.cx":2,"cy":1,"ac.cy":2,"biz.cy":2,"com.cy":2,"ekloges.cy":2,"gov.cy":2,"ltd.cy":2,"mil.cy":2,"net.cy":2,"org.cy":2,"press.cy":2,"pro.cy":2,"tm.cy":2,"cz":1,"de":1,"dj":1,"dk":1,"dm":1,"co.dm":2,"com.dm":2,"edu.dm":2,"gov.dm":2,"net.dm":2,"org.dm":2,"do":1,"art.do":2,"com.do":2,"edu.do":2,"gob.do":2,"gov.do":2,"mil.do":2,"net.do":2,"org.do":2,"sld.do":2,"web.do":2,"dz":1,"art.dz":2,"asso.dz":2,"com.dz":2,"edu.dz":2,"gov.dz":2,"net.dz":2,"org.dz":2,"pol.dz":2,"soc.dz":2,"tm.dz":2,"ec":1,"abg.ec":2,"adm.ec":2,"agron.ec":2,"arqt.ec":2,"art.ec":2,"bar.ec":2,"chef.ec":2,"com.ec":2,"cont.ec":2,"cpa.ec":2,"cue.ec":2,"dent.ec":2,"dgn.ec":2,"disco.ec":2,"doc.ec":2,"edu.ec":2,"eng.ec":2,"esm.ec":2,"fin.ec":2,"fot.ec":2,"gal.ec":2,"gob.ec":2,"gov.ec":2,"gye.ec":2,"ibr.ec":2,"info.ec":2,"k12.ec":2,"lat.ec":2,"loj.ec":2,"med.ec":2,"mil.ec":2,"mktg.ec":2,"mon.ec":2,"net.ec":2,"ntr.ec":2,"odont.ec":2,"org.ec":2,"pro.ec":2,"prof.ec":2,"psic.ec":2,"psiq.ec":2,"pub.ec":2,"rio.ec":2,"rrpp.ec":2,"sal.ec":2,"tech.ec":2,"tul.ec":2,"tur.ec":2,"uio.ec":2,"vet.ec":2,"xxx.ec":2,"edu":1,"ee":1,"aip.ee":2,"com.ee":2,"edu.ee":2,"fie.ee":2,"gov.ee":2,"lib.ee":2,"med.ee":2,"org.ee":2,"pri.ee":2,"riik.ee":2,"eg":1,"ac.eg":2,"com.eg":2,"edu.eg":2,"eun.eg":2,"gov.eg":2,"info.eg":2,"me.eg":2,"mil.eg":2,"name.eg":2,"net.eg":2,"org.eg":2,"sci.eg":2,"sport.eg":2,"tv.eg":2,"er":2,"es":1,"com.es":2,"edu.es":2,"gob.es":2,"nom.es":2,"org.es":2,"et":1,"biz.et":2,"com.et":2,"edu.et":2,"gov.et":2,"info.et":2,"name.et":2,"net.et":2,"org.et":2,"eu":1,"fi":1,"aland.fi":2,"fj":1,"ac.fj":2,"biz.fj":2,"com.fj":2,"gov.fj":2,"info.fj":2,"mil.fj":2,"name.fj":2,"net.fj":2,"org.fj":2,"pro.fj":2,"fk":2,"fm":1,"com.fm":2,"edu.fm":2,"net.fm":2,"org.fm":2,"fo":1,"fr":1,"asso.fr":2,"com.fr":2,"gouv.fr":2,"nom.fr":2,"prd.fr":2,"tm.fr":2,"avoues.fr":2,"cci.fr":2,"greta.fr":2,"huissier-justice.fr":2,"ga":1,"gb":1,"gd":1,"edu.gd":2,"gov.gd":2,"ge":1,"com.ge":2,"edu.ge":2,"gov.ge":2,"net.ge":2,"org.ge":2,"pvt.ge":2,"school.ge":2,"gf":1,"gg":1,"co.gg":2,"net.gg":2,"org.gg":2,"gh":1,"biz.gh":2,"com.gh":2,"edu.gh":2,"gov.gh":2,"mil.gh":2,"net.gh":2,"org.gh":2,"gi":1,"com.gi":2,"edu.gi":2,"gov.gi":2,"ltd.gi":2,"mod.gi":2,"org.gi":2,"gl":1,"co.gl":2,"com.gl":2,"edu.gl":2,"net.gl":2,"org.gl":2,"gm":1,"gn":1,"ac.gn":2,"com.gn":2,"edu.gn":2,"gov.gn":2,"net.gn":2,"org.gn":2,"gov":1,"gp":1,"asso.gp":2,"com.gp":2,"edu.gp":2,"mobi.gp":2,"net.gp":2,"org.gp":2,"gq":1,"gr":1,"com.gr":2,"edu.gr":2,"gov.gr":2,"net.gr":2,"org.gr":2,"gs":1,"gt":1,"com.gt":2,"edu.gt":2,"gob.gt":2,"ind.gt":2,"mil.gt":2,"net.gt":2,"org.gt":2,"gu":1,"com.gu":2,"edu.gu":2,"gov.gu":2,"guam.gu":2,"info.gu":2,"net.gu":2,"org.gu":2,"web.gu":2,"gw":1,"gy":1,"co.gy":2,"com.gy":2,"edu.gy":2,"gov.gy":2,"net.gy":2,"org.gy":2,"hk":1,"com.hk":2,"edu.hk":2,"gov.hk":2,"idv.hk":2,"net.hk":2,"org.hk":2,"xn--ciqpn.hk":2,"xn--gmqw5a.hk":2,"xn--55qx5d.hk":2,"xn--mxtq1m.hk":2,"xn--lcvr32d.hk":2,"xn--wcvs22d.hk":2,"xn--gmq050i.hk":2,"xn--uc0atv.hk":2,"xn--uc0ay4a.hk":2,"xn--od0alg.hk":2,"xn--zf0avx.hk":2,"xn--mk0axi.hk":2,"xn--tn0ag.hk":2,"xn--od0aq3b.hk":2,"xn--io0a7i.hk":2,"hm":1,"hn":1,"com.hn":2,"edu.hn":2,"gob.hn":2,"mil.hn":2,"net.hn":2,"org.hn":2,"hr":1,"com.hr":2,"from.hr":2,"iz.hr":2,"name.hr":2,"ht":1,"adult.ht":2,"art.ht":2,"asso.ht":2,"com.ht":2,"coop.ht":2,"edu.ht":2,"firm.ht":2,"gouv.ht":2,"info.ht":2,"med.ht":2,"net.ht":2,"org.ht":2,"perso.ht":2,"pol.ht":2,"pro.ht":2,"rel.ht":2,"shop.ht":2,"hu":1,"2000.hu":2,"agrar.hu":2,"bolt.hu":2,"casino.hu":2,"city.hu":2,"co.hu":2,"erotica.hu":2,"erotika.hu":2,"film.hu":2,"forum.hu":2,"games.hu":2,"hotel.hu":2,"info.hu":2,"ingatlan.hu":2,"jogasz.hu":2,"konyvelo.hu":2,"lakas.hu":2,"media.hu":2,"news.hu":2,"org.hu":2,"priv.hu":2,"reklam.hu":2,"sex.hu":2,"shop.hu":2,"sport.hu":2,"suli.hu":2,"szex.hu":2,"tm.hu":2,"tozsde.hu":2,"utazas.hu":2,"video.hu":2,"id":1,"ac.id":2,"biz.id":2,"co.id":2,"desa.id":2,"go.id":2,"kop.id":2,"mil.id":2,"my.id":2,"net.id":2,"or.id":2,"ponpes.id":2,"sch.id":2,"web.id":2,"ie":1,"gov.ie":2,"il":1,"ac.il":2,"co.il":2,"gov.il":2,"idf.il":2,"k12.il":2,"muni.il":2,"net.il":2,"org.il":2,"xn--4dbrk0ce":1,"xn--4dbgdty6c.xn--4dbrk0ce":2,"xn--5dbhl8d.xn--4dbrk0ce":2,"xn--8dbq2a.xn--4dbrk0ce":2,"xn--hebda8b.xn--4dbrk0ce":2,"im":1,"ac.im":2,"co.im":2,"ltd.co.im":3,"plc.co.im":3,"com.im":2,"net.im":2,"org.im":2,"tt.im":2,"tv.im":2,"in":1,"5g.in":2,"6g.in":2,"ac.in":2,"ai.in":2,"am.in":2,"bihar.in":2,"biz.in":2,"business.in":2,"ca.in":2,"cn.in":2,"co.in":2,"com.in":2,"coop.in":2,"cs.in":2,"delhi.in":2,"dr.in":2,"edu.in":2,"er.in":2,"firm.in":2,"gen.in":2,"gov.in":2,"gujarat.in":2,"ind.in":2,"info.in":2,"int.in":2,"internet.in":2,"io.in":2,"me.in":2,"mil.in":2,"net.in":2,"nic.in":2,"org.in":2,"pg.in":2,"post.in":2,"pro.in":2,"res.in":2,"travel.in":2,"tv.in":2,"uk.in":2,"up.in":2,"us.in":2,"info":1,"int":1,"eu.int":2,"io":1,"co.io":2,"com.io":2,"edu.io":2,"gov.io":2,"mil.io":2,"net.io":2,"nom.io":2,"org.io":2,"iq":1,"com.iq":2,"edu.iq":2,"gov.iq":2,"mil.iq":2,"net.iq":2,"org.iq":2,"ir":1,"ac.ir":2,"co.ir":2,"gov.ir":2,"id.ir":2,"net.ir":2,"org.ir":2,"sch.ir":2,"xn--mgba3a4f16a.ir":2,"xn--mgba3a4fra.ir":2,"is":1,"it":1,"edu.it":2,"gov.it":2,"abr.it":2,"abruzzo.it":2,"aosta-valley.it":2,"aostavalley.it":2,"bas.it":2,"basilicata.it":2,"cal.it":2,"calabria.it":2,"cam.it":2,"campania.it":2,"emilia-romagna.it":2,"emiliaromagna.it":2,"emr.it":2,"friuli-v-giulia.it":2,"friuli-ve-giulia.it":2,"friuli-vegiulia.it":2,"friuli-venezia-giulia.it":2,"friuli-veneziagiulia.it":2,"friuli-vgiulia.it":2,"friuliv-giulia.it":2,"friulive-giulia.it":2,"friulivegiulia.it":2,"friulivenezia-giulia.it":2,"friuliveneziagiulia.it":2,"friulivgiulia.it":2,"fvg.it":2,"laz.it":2,"lazio.it":2,"lig.it":2,"liguria.it":2,"lom.it":2,"lombardia.it":2,"lombardy.it":2,"lucania.it":2,"mar.it":2,"marche.it":2,"mol.it":2,"molise.it":2,"piedmont.it":2,"piemonte.it":2,"pmn.it":2,"pug.it":2,"puglia.it":2,"sar.it":2,"sardegna.it":2,"sardinia.it":2,"sic.it":2,"sicilia.it":2,"sicily.it":2,"taa.it":2,"tos.it":2,"toscana.it":2,"trentin-sud-tirol.it":2,"xn--trentin-sd-tirol-rzb.it":2,"trentin-sudtirol.it":2,"xn--trentin-sdtirol-7vb.it":2,"trentin-sued-tirol.it":2,"trentin-suedtirol.it":2,"trentino.it":2,"trentino-a-adige.it":2,"trentino-aadige.it":2,"trentino-alto-adige.it":2,"trentino-altoadige.it":2,"trentino-s-tirol.it":2,"trentino-stirol.it":2,"trentino-sud-tirol.it":2,"xn--trentino-sd-tirol-c3b.it":2,"trentino-sudtirol.it":2,"xn--trentino-sdtirol-szb.it":2,"trentino-sued-tirol.it":2,"trentino-suedtirol.it":2,"trentinoa-adige.it":2,"trentinoaadige.it":2,"trentinoalto-adige.it":2,"trentinoaltoadige.it":2,"trentinos-tirol.it":2,"trentinostirol.it":2,"trentinosud-tirol.it":2,"xn--trentinosd-tirol-rzb.it":2,"trentinosudtirol.it":2,"xn--trentinosdtirol-7vb.it":2,"trentinosued-tirol.it":2,"trentinosuedtirol.it":2,"trentinsud-tirol.it":2,"xn--trentinsd-tirol-6vb.it":2,"trentinsudtirol.it":2,"xn--trentinsdtirol-nsb.it":2,"trentinsued-tirol.it":2,"trentinsuedtirol.it":2,"tuscany.it":2,"umb.it":2,"umbria.it":2,"val-d-aosta.it":2,"val-daosta.it":2,"vald-aosta.it":2,"valdaosta.it":2,"valle-aosta.it":2,"valle-d-aosta.it":2,"valle-daosta.it":2,"valleaosta.it":2,"valled-aosta.it":2,"valledaosta.it":2,"vallee-aoste.it":2,"xn--valle-aoste-ebb.it":2,"vallee-d-aoste.it":2,"xn--valle-d-aoste-ehb.it":2,"valleeaoste.it":2,"xn--valleaoste-e7a.it":2,"valleedaoste.it":2,"xn--valledaoste-ebb.it":2,"vao.it":2,"vda.it":2,"ven.it":2,"veneto.it":2,"ag.it":2,"agrigento.it":2,"al.it":2,"alessandria.it":2,"alto-adige.it":2,"altoadige.it":2,"an.it":2,"ancona.it":2,"andria-barletta-trani.it":2,"andria-trani-barletta.it":2,"andriabarlettatrani.it":2,"andriatranibarletta.it":2,"ao.it":2,"aosta.it":2,"aoste.it":2,"ap.it":2,"aq.it":2,"aquila.it":2,"ar.it":2,"arezzo.it":2,"ascoli-piceno.it":2,"ascolipiceno.it":2,"asti.it":2,"at.it":2,"av.it":2,"avellino.it":2,"ba.it":2,"balsan.it":2,"balsan-sudtirol.it":2,"xn--balsan-sdtirol-nsb.it":2,"balsan-suedtirol.it":2,"bari.it":2,"barletta-trani-andria.it":2,"barlettatraniandria.it":2,"belluno.it":2,"benevento.it":2,"bergamo.it":2,"bg.it":2,"bi.it":2,"biella.it":2,"bl.it":2,"bn.it":2,"bo.it":2,"bologna.it":2,"bolzano.it":2,"bolzano-altoadige.it":2,"bozen.it":2,"bozen-sudtirol.it":2,"xn--bozen-sdtirol-2ob.it":2,"bozen-suedtirol.it":2,"br.it":2,"brescia.it":2,"brindisi.it":2,"bs.it":2,"bt.it":2,"bulsan.it":2,"bulsan-sudtirol.it":2,"xn--bulsan-sdtirol-nsb.it":2,"bulsan-suedtirol.it":2,"bz.it":2,"ca.it":2,"cagliari.it":2,"caltanissetta.it":2,"campidano-medio.it":2,"campidanomedio.it":2,"campobasso.it":2,"carbonia-iglesias.it":2,"carboniaiglesias.it":2,"carrara-massa.it":2,"carraramassa.it":2,"caserta.it":2,"catania.it":2,"catanzaro.it":2,"cb.it":2,"ce.it":2,"cesena-forli.it":2,"xn--cesena-forl-mcb.it":2,"cesenaforli.it":2,"xn--cesenaforl-i8a.it":2,"ch.it":2,"chieti.it":2,"ci.it":2,"cl.it":2,"cn.it":2,"co.it":2,"como.it":2,"cosenza.it":2,"cr.it":2,"cremona.it":2,"crotone.it":2,"cs.it":2,"ct.it":2,"cuneo.it":2,"cz.it":2,"dell-ogliastra.it":2,"dellogliastra.it":2,"en.it":2,"enna.it":2,"fc.it":2,"fe.it":2,"fermo.it":2,"ferrara.it":2,"fg.it":2,"fi.it":2,"firenze.it":2,"florence.it":2,"fm.it":2,"foggia.it":2,"forli-cesena.it":2,"xn--forl-cesena-fcb.it":2,"forlicesena.it":2,"xn--forlcesena-c8a.it":2,"fr.it":2,"frosinone.it":2,"ge.it":2,"genoa.it":2,"genova.it":2,"go.it":2,"gorizia.it":2,"gr.it":2,"grosseto.it":2,"iglesias-carbonia.it":2,"iglesiascarbonia.it":2,"im.it":2,"imperia.it":2,"is.it":2,"isernia.it":2,"kr.it":2,"la-spezia.it":2,"laquila.it":2,"laspezia.it":2,"latina.it":2,"lc.it":2,"le.it":2,"lecce.it":2,"lecco.it":2,"li.it":2,"livorno.it":2,"lo.it":2,"lodi.it":2,"lt.it":2,"lu.it":2,"lucca.it":2,"macerata.it":2,"mantova.it":2,"massa-carrara.it":2,"massacarrara.it":2,"matera.it":2,"mb.it":2,"mc.it":2,"me.it":2,"medio-campidano.it":2,"mediocampidano.it":2,"messina.it":2,"mi.it":2,"milan.it":2,"milano.it":2,"mn.it":2,"mo.it":2,"modena.it":2,"monza.it":2,"monza-brianza.it":2,"monza-e-della-brianza.it":2,"monzabrianza.it":2,"monzaebrianza.it":2,"monzaedellabrianza.it":2,"ms.it":2,"mt.it":2,"na.it":2,"naples.it":2,"napoli.it":2,"no.it":2,"novara.it":2,"nu.it":2,"nuoro.it":2,"og.it":2,"ogliastra.it":2,"olbia-tempio.it":2,"olbiatempio.it":2,"or.it":2,"oristano.it":2,"ot.it":2,"pa.it":2,"padova.it":2,"padua.it":2,"palermo.it":2,"parma.it":2,"pavia.it":2,"pc.it":2,"pd.it":2,"pe.it":2,"perugia.it":2,"pesaro-urbino.it":2,"pesarourbino.it":2,"pescara.it":2,"pg.it":2,"pi.it":2,"piacenza.it":2,"pisa.it":2,"pistoia.it":2,"pn.it":2,"po.it":2,"pordenone.it":2,"potenza.it":2,"pr.it":2,"prato.it":2,"pt.it":2,"pu.it":2,"pv.it":2,"pz.it":2,"ra.it":2,"ragusa.it":2,"ravenna.it":2,"rc.it":2,"re.it":2,"reggio-calabria.it":2,"reggio-emilia.it":2,"reggiocalabria.it":2,"reggioemilia.it":2,"rg.it":2,"ri.it":2,"rieti.it":2,"rimini.it":2,"rm.it":2,"rn.it":2,"ro.it":2,"roma.it":2,"rome.it":2,"rovigo.it":2,"sa.it":2,"salerno.it":2,"sassari.it":2,"savona.it":2,"si.it":2,"siena.it":2,"siracusa.it":2,"so.it":2,"sondrio.it":2,"sp.it":2,"sr.it":2,"ss.it":2,"xn--sdtirol-n2a.it":2,"suedtirol.it":2,"sv.it":2,"ta.it":2,"taranto.it":2,"te.it":2,"tempio-olbia.it":2,"tempioolbia.it":2,"teramo.it":2,"terni.it":2,"tn.it":2,"to.it":2,"torino.it":2,"tp.it":2,"tr.it":2,"trani-andria-barletta.it":2,"trani-barletta-andria.it":2,"traniandriabarletta.it":2,"tranibarlettaandria.it":2,"trapani.it":2,"trento.it":2,"treviso.it":2,"trieste.it":2,"ts.it":2,"turin.it":2,"tv.it":2,"ud.it":2,"udine.it":2,"urbino-pesaro.it":2,"urbinopesaro.it":2,"va.it":2,"varese.it":2,"vb.it":2,"vc.it":2,"ve.it":2,"venezia.it":2,"venice.it":2,"verbania.it":2,"vercelli.it":2,"verona.it":2,"vi.it":2,"vibo-valentia.it":2,"vibovalentia.it":2,"vicenza.it":2,"viterbo.it":2,"vr.it":2,"vs.it":2,"vt.it":2,"vv.it":2,"je":1,"co.je":2,"net.je":2,"org.je":2,"jm":2,"jo":1,"agri.jo":2,"ai.jo":2,"com.jo":2,"edu.jo":2,"eng.jo":2,"fm.jo":2,"gov.jo":2,"mil.jo":2,"net.jo":2,"org.jo":2,"per.jo":2,"phd.jo":2,"sch.jo":2,"tv.jo":2,"jobs":1,"jp":1,"ac.jp":2,"ad.jp":2,"co.jp":2,"ed.jp":2,"go.jp":2,"gr.jp":2,"lg.jp":2,"ne.jp":2,"or.jp":2,"aichi.jp":2,"akita.jp":2,"aomori.jp":2,"chiba.jp":2,"ehime.jp":2,"fukui.jp":2,"fukuoka.jp":2,"fukushima.jp":2,"gifu.jp":2,"gunma.jp":2,"hiroshima.jp":2,"hokkaido.jp":2,"hyogo.jp":2,"ibaraki.jp":2,"ishikawa.jp":2,"iwate.jp":2,"kagawa.jp":2,"kagoshima.jp":2,"kanagawa.jp":2,"kochi.jp":2,"kumamoto.jp":2,"kyoto.jp":2,"mie.jp":2,"miyagi.jp":2,"miyazaki.jp":2,"nagano.jp":2,"nagasaki.jp":2,"nara.jp":2,"niigata.jp":2,"oita.jp":2,"okayama.jp":2,"okinawa.jp":2,"osaka.jp":2,"saga.jp":2,"saitama.jp":2,"shiga.jp":2,"shimane.jp":2,"shizuoka.jp":2,"tochigi.jp":2,"tokushima.jp":2,"tokyo.jp":2,"tottori.jp":2,"toyama.jp":2,"wakayama.jp":2,"yamagata.jp":2,"yamaguchi.jp":2,"yamanashi.jp":2,"xn--ehqz56n.jp":2,"xn--1lqs03n.jp":2,"xn--qqqt11m.jp":2,"xn--f6qx53a.jp":2,"xn--djrs72d6uy.jp":2,"xn--mkru45i.jp":2,"xn--0trq7p7nn.jp":2,"xn--5js045d.jp":2,"xn--kbrq7o.jp":2,"xn--pssu33l.jp":2,"xn--ntsq17g.jp":2,"xn--uisz3g.jp":2,"xn--6btw5a.jp":2,"xn--1ctwo.jp":2,"xn--6orx2r.jp":2,"xn--rht61e.jp":2,"xn--rht27z.jp":2,"xn--nit225k.jp":2,"xn--rht3d.jp":2,"xn--djty4k.jp":2,"xn--klty5x.jp":2,"xn--kltx9a.jp":2,"xn--kltp7d.jp":2,"xn--c3s14m.jp":2,"xn--vgu402c.jp":2,"xn--efvn9s.jp":2,"xn--1lqs71d.jp":2,"xn--4pvxs.jp":2,"xn--uuwu58a.jp":2,"xn--zbx025d.jp":2,"xn--8pvr4u.jp":2,"xn--5rtp49c.jp":2,"xn--ntso0iqx3a.jp":2,"xn--elqq16h.jp":2,"xn--4it168d.jp":2,"xn--klt787d.jp":2,"xn--rny31h.jp":2,"xn--7t0a264c.jp":2,"xn--uist22h.jp":2,"xn--8ltr62k.jp":2,"xn--2m4a15e.jp":2,"xn--32vp30h.jp":2,"xn--4it797k.jp":2,"xn--5rtq34k.jp":2,"xn--k7yn95e.jp":2,"xn--tor131o.jp":2,"xn--d5qv7z876c.jp":2,"kawasaki.jp":3,"city.kawasaki.jp":2,"kitakyushu.jp":3,"city.kitakyushu.jp":2,"kobe.jp":3,"city.kobe.jp":2,"nagoya.jp":3,"city.nagoya.jp":2,"sapporo.jp":3,"city.sapporo.jp":2,"sendai.jp":3,"city.sendai.jp":2,"yokohama.jp":3,"city.yokohama.jp":2,"aisai.aichi.jp":3,"ama.aichi.jp":3,"anjo.aichi.jp":3,"asuke.aichi.jp":3,"chiryu.aichi.jp":3,"chita.aichi.jp":3,"fuso.aichi.jp":3,"gamagori.aichi.jp":3,"handa.aichi.jp":3,"hazu.aichi.jp":3,"hekinan.aichi.jp":3,"higashiura.aichi.jp":3,"ichinomiya.aichi.jp":3,"inazawa.aichi.jp":3,"inuyama.aichi.jp":3,"isshiki.aichi.jp":3,"iwakura.aichi.jp":3,"kanie.aichi.jp":3,"kariya.aichi.jp":3,"kasugai.aichi.jp":3,"kira.aichi.jp":3,"kiyosu.aichi.jp":3,"komaki.aichi.jp":3,"konan.aichi.jp":3,"kota.aichi.jp":3,"mihama.aichi.jp":3,"miyoshi.aichi.jp":3,"nishio.aichi.jp":3,"nisshin.aichi.jp":3,"obu.aichi.jp":3,"oguchi.aichi.jp":3,"oharu.aichi.jp":3,"okazaki.aichi.jp":3,"owariasahi.aichi.jp":3,"seto.aichi.jp":3,"shikatsu.aichi.jp":3,"shinshiro.aichi.jp":3,"shitara.aichi.jp":3,"tahara.aichi.jp":3,"takahama.aichi.jp":3,"tobishima.aichi.jp":3,"toei.aichi.jp":3,"togo.aichi.jp":3,"tokai.aichi.jp":3,"tokoname.aichi.jp":3,"toyoake.aichi.jp":3,"toyohashi.aichi.jp":3,"toyokawa.aichi.jp":3,"toyone.aichi.jp":3,"toyota.aichi.jp":3,"tsushima.aichi.jp":3,"yatomi.aichi.jp":3,"akita.akita.jp":3,"daisen.akita.jp":3,"fujisato.akita.jp":3,"gojome.akita.jp":3,"hachirogata.akita.jp":3,"happou.akita.jp":3,"higashinaruse.akita.jp":3,"honjo.akita.jp":3,"honjyo.akita.jp":3,"ikawa.akita.jp":3,"kamikoani.akita.jp":3,"kamioka.akita.jp":3,"katagami.akita.jp":3,"kazuno.akita.jp":3,"kitaakita.akita.jp":3,"kosaka.akita.jp":3,"kyowa.akita.jp":3,"misato.akita.jp":3,"mitane.akita.jp":3,"moriyoshi.akita.jp":3,"nikaho.akita.jp":3,"noshiro.akita.jp":3,"odate.akita.jp":3,"oga.akita.jp":3,"ogata.akita.jp":3,"semboku.akita.jp":3,"yokote.akita.jp":3,"yurihonjo.akita.jp":3,"aomori.aomori.jp":3,"gonohe.aomori.jp":3,"hachinohe.aomori.jp":3,"hashikami.aomori.jp":3,"hiranai.aomori.jp":3,"hirosaki.aomori.jp":3,"itayanagi.aomori.jp":3,"kuroishi.aomori.jp":3,"misawa.aomori.jp":3,"mutsu.aomori.jp":3,"nakadomari.aomori.jp":3,"noheji.aomori.jp":3,"oirase.aomori.jp":3,"owani.aomori.jp":3,"rokunohe.aomori.jp":3,"sannohe.aomori.jp":3,"shichinohe.aomori.jp":3,"shingo.aomori.jp":3,"takko.aomori.jp":3,"towada.aomori.jp":3,"tsugaru.aomori.jp":3,"tsuruta.aomori.jp":3,"abiko.chiba.jp":3,"asahi.chiba.jp":3,"chonan.chiba.jp":3,"chosei.chiba.jp":3,"choshi.chiba.jp":3,"chuo.chiba.jp":3,"funabashi.chiba.jp":3,"futtsu.chiba.jp":3,"hanamigawa.chiba.jp":3,"ichihara.chiba.jp":3,"ichikawa.chiba.jp":3,"ichinomiya.chiba.jp":3,"inzai.chiba.jp":3,"isumi.chiba.jp":3,"kamagaya.chiba.jp":3,"kamogawa.chiba.jp":3,"kashiwa.chiba.jp":3,"katori.chiba.jp":3,"katsuura.chiba.jp":3,"kimitsu.chiba.jp":3,"kisarazu.chiba.jp":3,"kozaki.chiba.jp":3,"kujukuri.chiba.jp":3,"kyonan.chiba.jp":3,"matsudo.chiba.jp":3,"midori.chiba.jp":3,"mihama.chiba.jp":3,"minamiboso.chiba.jp":3,"mobara.chiba.jp":3,"mutsuzawa.chiba.jp":3,"nagara.chiba.jp":3,"nagareyama.chiba.jp":3,"narashino.chiba.jp":3,"narita.chiba.jp":3,"noda.chiba.jp":3,"oamishirasato.chiba.jp":3,"omigawa.chiba.jp":3,"onjuku.chiba.jp":3,"otaki.chiba.jp":3,"sakae.chiba.jp":3,"sakura.chiba.jp":3,"shimofusa.chiba.jp":3,"shirako.chiba.jp":3,"shiroi.chiba.jp":3,"shisui.chiba.jp":3,"sodegaura.chiba.jp":3,"sosa.chiba.jp":3,"tako.chiba.jp":3,"tateyama.chiba.jp":3,"togane.chiba.jp":3,"tohnosho.chiba.jp":3,"tomisato.chiba.jp":3,"urayasu.chiba.jp":3,"yachimata.chiba.jp":3,"yachiyo.chiba.jp":3,"yokaichiba.chiba.jp":3,"yokoshibahikari.chiba.jp":3,"yotsukaido.chiba.jp":3,"ainan.ehime.jp":3,"honai.ehime.jp":3,"ikata.ehime.jp":3,"imabari.ehime.jp":3,"iyo.ehime.jp":3,"kamijima.ehime.jp":3,"kihoku.ehime.jp":3,"kumakogen.ehime.jp":3,"masaki.ehime.jp":3,"matsuno.ehime.jp":3,"matsuyama.ehime.jp":3,"namikata.ehime.jp":3,"niihama.ehime.jp":3,"ozu.ehime.jp":3,"saijo.ehime.jp":3,"seiyo.ehime.jp":3,"shikokuchuo.ehime.jp":3,"tobe.ehime.jp":3,"toon.ehime.jp":3,"uchiko.ehime.jp":3,"uwajima.ehime.jp":3,"yawatahama.ehime.jp":3,"echizen.fukui.jp":3,"eiheiji.fukui.jp":3,"fukui.fukui.jp":3,"ikeda.fukui.jp":3,"katsuyama.fukui.jp":3,"mihama.fukui.jp":3,"minamiechizen.fukui.jp":3,"obama.fukui.jp":3,"ohi.fukui.jp":3,"ono.fukui.jp":3,"sabae.fukui.jp":3,"sakai.fukui.jp":3,"takahama.fukui.jp":3,"tsuruga.fukui.jp":3,"wakasa.fukui.jp":3,"ashiya.fukuoka.jp":3,"buzen.fukuoka.jp":3,"chikugo.fukuoka.jp":3,"chikuho.fukuoka.jp":3,"chikujo.fukuoka.jp":3,"chikushino.fukuoka.jp":3,"chikuzen.fukuoka.jp":3,"chuo.fukuoka.jp":3,"dazaifu.fukuoka.jp":3,"fukuchi.fukuoka.jp":3,"hakata.fukuoka.jp":3,"higashi.fukuoka.jp":3,"hirokawa.fukuoka.jp":3,"hisayama.fukuoka.jp":3,"iizuka.fukuoka.jp":3,"inatsuki.fukuoka.jp":3,"kaho.fukuoka.jp":3,"kasuga.fukuoka.jp":3,"kasuya.fukuoka.jp":3,"kawara.fukuoka.jp":3,"keisen.fukuoka.jp":3,"koga.fukuoka.jp":3,"kurate.fukuoka.jp":3,"kurogi.fukuoka.jp":3,"kurume.fukuoka.jp":3,"minami.fukuoka.jp":3,"miyako.fukuoka.jp":3,"miyama.fukuoka.jp":3,"miyawaka.fukuoka.jp":3,"mizumaki.fukuoka.jp":3,"munakata.fukuoka.jp":3,"nakagawa.fukuoka.jp":3,"nakama.fukuoka.jp":3,"nishi.fukuoka.jp":3,"nogata.fukuoka.jp":3,"ogori.fukuoka.jp":3,"okagaki.fukuoka.jp":3,"okawa.fukuoka.jp":3,"oki.fukuoka.jp":3,"omuta.fukuoka.jp":3,"onga.fukuoka.jp":3,"onojo.fukuoka.jp":3,"oto.fukuoka.jp":3,"saigawa.fukuoka.jp":3,"sasaguri.fukuoka.jp":3,"shingu.fukuoka.jp":3,"shinyoshitomi.fukuoka.jp":3,"shonai.fukuoka.jp":3,"soeda.fukuoka.jp":3,"sue.fukuoka.jp":3,"tachiarai.fukuoka.jp":3,"tagawa.fukuoka.jp":3,"takata.fukuoka.jp":3,"toho.fukuoka.jp":3,"toyotsu.fukuoka.jp":3,"tsuiki.fukuoka.jp":3,"ukiha.fukuoka.jp":3,"umi.fukuoka.jp":3,"usui.fukuoka.jp":3,"yamada.fukuoka.jp":3,"yame.fukuoka.jp":3,"yanagawa.fukuoka.jp":3,"yukuhashi.fukuoka.jp":3,"aizubange.fukushima.jp":3,"aizumisato.fukushima.jp":3,"aizuwakamatsu.fukushima.jp":3,"asakawa.fukushima.jp":3,"bandai.fukushima.jp":3,"date.fukushima.jp":3,"fukushima.fukushima.jp":3,"furudono.fukushima.jp":3,"futaba.fukushima.jp":3,"hanawa.fukushima.jp":3,"higashi.fukushima.jp":3,"hirata.fukushima.jp":3,"hirono.fukushima.jp":3,"iitate.fukushima.jp":3,"inawashiro.fukushima.jp":3,"ishikawa.fukushima.jp":3,"iwaki.fukushima.jp":3,"izumizaki.fukushima.jp":3,"kagamiishi.fukushima.jp":3,"kaneyama.fukushima.jp":3,"kawamata.fukushima.jp":3,"kitakata.fukushima.jp":3,"kitashiobara.fukushima.jp":3,"koori.fukushima.jp":3,"koriyama.fukushima.jp":3,"kunimi.fukushima.jp":3,"miharu.fukushima.jp":3,"mishima.fukushima.jp":3,"namie.fukushima.jp":3,"nango.fukushima.jp":3,"nishiaizu.fukushima.jp":3,"nishigo.fukushima.jp":3,"okuma.fukushima.jp":3,"omotego.fukushima.jp":3,"ono.fukushima.jp":3,"otama.fukushima.jp":3,"samegawa.fukushima.jp":3,"shimogo.fukushima.jp":3,"shirakawa.fukushima.jp":3,"showa.fukushima.jp":3,"soma.fukushima.jp":3,"sukagawa.fukushima.jp":3,"taishin.fukushima.jp":3,"tamakawa.fukushima.jp":3,"tanagura.fukushima.jp":3,"tenei.fukushima.jp":3,"yabuki.fukushima.jp":3,"yamato.fukushima.jp":3,"yamatsuri.fukushima.jp":3,"yanaizu.fukushima.jp":3,"yugawa.fukushima.jp":3,"anpachi.gifu.jp":3,"ena.gifu.jp":3,"gifu.gifu.jp":3,"ginan.gifu.jp":3,"godo.gifu.jp":3,"gujo.gifu.jp":3,"hashima.gifu.jp":3,"hichiso.gifu.jp":3,"hida.gifu.jp":3,"higashishirakawa.gifu.jp":3,"ibigawa.gifu.jp":3,"ikeda.gifu.jp":3,"kakamigahara.gifu.jp":3,"kani.gifu.jp":3,"kasahara.gifu.jp":3,"kasamatsu.gifu.jp":3,"kawaue.gifu.jp":3,"kitagata.gifu.jp":3,"mino.gifu.jp":3,"minokamo.gifu.jp":3,"mitake.gifu.jp":3,"mizunami.gifu.jp":3,"motosu.gifu.jp":3,"nakatsugawa.gifu.jp":3,"ogaki.gifu.jp":3,"sakahogi.gifu.jp":3,"seki.gifu.jp":3,"sekigahara.gifu.jp":3,"shirakawa.gifu.jp":3,"tajimi.gifu.jp":3,"takayama.gifu.jp":3,"tarui.gifu.jp":3,"toki.gifu.jp":3,"tomika.gifu.jp":3,"wanouchi.gifu.jp":3,"yamagata.gifu.jp":3,"yaotsu.gifu.jp":3,"yoro.gifu.jp":3,"annaka.gunma.jp":3,"chiyoda.gunma.jp":3,"fujioka.gunma.jp":3,"higashiagatsuma.gunma.jp":3,"isesaki.gunma.jp":3,"itakura.gunma.jp":3,"kanna.gunma.jp":3,"kanra.gunma.jp":3,"katashina.gunma.jp":3,"kawaba.gunma.jp":3,"kiryu.gunma.jp":3,"kusatsu.gunma.jp":3,"maebashi.gunma.jp":3,"meiwa.gunma.jp":3,"midori.gunma.jp":3,"minakami.gunma.jp":3,"naganohara.gunma.jp":3,"nakanojo.gunma.jp":3,"nanmoku.gunma.jp":3,"numata.gunma.jp":3,"oizumi.gunma.jp":3,"ora.gunma.jp":3,"ota.gunma.jp":3,"shibukawa.gunma.jp":3,"shimonita.gunma.jp":3,"shinto.gunma.jp":3,"showa.gunma.jp":3,"takasaki.gunma.jp":3,"takayama.gunma.jp":3,"tamamura.gunma.jp":3,"tatebayashi.gunma.jp":3,"tomioka.gunma.jp":3,"tsukiyono.gunma.jp":3,"tsumagoi.gunma.jp":3,"ueno.gunma.jp":3,"yoshioka.gunma.jp":3,"asaminami.hiroshima.jp":3,"daiwa.hiroshima.jp":3,"etajima.hiroshima.jp":3,"fuchu.hiroshima.jp":3,"fukuyama.hiroshima.jp":3,"hatsukaichi.hiroshima.jp":3,"higashihiroshima.hiroshima.jp":3,"hongo.hiroshima.jp":3,"jinsekikogen.hiroshima.jp":3,"kaita.hiroshima.jp":3,"kui.hiroshima.jp":3,"kumano.hiroshima.jp":3,"kure.hiroshima.jp":3,"mihara.hiroshima.jp":3,"miyoshi.hiroshima.jp":3,"naka.hiroshima.jp":3,"onomichi.hiroshima.jp":3,"osakikamijima.hiroshima.jp":3,"otake.hiroshima.jp":3,"saka.hiroshima.jp":3,"sera.hiroshima.jp":3,"seranishi.hiroshima.jp":3,"shinichi.hiroshima.jp":3,"shobara.hiroshima.jp":3,"takehara.hiroshima.jp":3,"abashiri.hokkaido.jp":3,"abira.hokkaido.jp":3,"aibetsu.hokkaido.jp":3,"akabira.hokkaido.jp":3,"akkeshi.hokkaido.jp":3,"asahikawa.hokkaido.jp":3,"ashibetsu.hokkaido.jp":3,"ashoro.hokkaido.jp":3,"assabu.hokkaido.jp":3,"atsuma.hokkaido.jp":3,"bibai.hokkaido.jp":3,"biei.hokkaido.jp":3,"bifuka.hokkaido.jp":3,"bihoro.hokkaido.jp":3,"biratori.hokkaido.jp":3,"chippubetsu.hokkaido.jp":3,"chitose.hokkaido.jp":3,"date.hokkaido.jp":3,"ebetsu.hokkaido.jp":3,"embetsu.hokkaido.jp":3,"eniwa.hokkaido.jp":3,"erimo.hokkaido.jp":3,"esan.hokkaido.jp":3,"esashi.hokkaido.jp":3,"fukagawa.hokkaido.jp":3,"fukushima.hokkaido.jp":3,"furano.hokkaido.jp":3,"furubira.hokkaido.jp":3,"haboro.hokkaido.jp":3,"hakodate.hokkaido.jp":3,"hamatonbetsu.hokkaido.jp":3,"hidaka.hokkaido.jp":3,"higashikagura.hokkaido.jp":3,"higashikawa.hokkaido.jp":3,"hiroo.hokkaido.jp":3,"hokuryu.hokkaido.jp":3,"hokuto.hokkaido.jp":3,"honbetsu.hokkaido.jp":3,"horokanai.hokkaido.jp":3,"horonobe.hokkaido.jp":3,"ikeda.hokkaido.jp":3,"imakane.hokkaido.jp":3,"ishikari.hokkaido.jp":3,"iwamizawa.hokkaido.jp":3,"iwanai.hokkaido.jp":3,"kamifurano.hokkaido.jp":3,"kamikawa.hokkaido.jp":3,"kamishihoro.hokkaido.jp":3,"kamisunagawa.hokkaido.jp":3,"kamoenai.hokkaido.jp":3,"kayabe.hokkaido.jp":3,"kembuchi.hokkaido.jp":3,"kikonai.hokkaido.jp":3,"kimobetsu.hokkaido.jp":3,"kitahiroshima.hokkaido.jp":3,"kitami.hokkaido.jp":3,"kiyosato.hokkaido.jp":3,"koshimizu.hokkaido.jp":3,"kunneppu.hokkaido.jp":3,"kuriyama.hokkaido.jp":3,"kuromatsunai.hokkaido.jp":3,"kushiro.hokkaido.jp":3,"kutchan.hokkaido.jp":3,"kyowa.hokkaido.jp":3,"mashike.hokkaido.jp":3,"matsumae.hokkaido.jp":3,"mikasa.hokkaido.jp":3,"minamifurano.hokkaido.jp":3,"mombetsu.hokkaido.jp":3,"moseushi.hokkaido.jp":3,"mukawa.hokkaido.jp":3,"muroran.hokkaido.jp":3,"naie.hokkaido.jp":3,"nakagawa.hokkaido.jp":3,"nakasatsunai.hokkaido.jp":3,"nakatombetsu.hokkaido.jp":3,"nanae.hokkaido.jp":3,"nanporo.hokkaido.jp":3,"nayoro.hokkaido.jp":3,"nemuro.hokkaido.jp":3,"niikappu.hokkaido.jp":3,"niki.hokkaido.jp":3,"nishiokoppe.hokkaido.jp":3,"noboribetsu.hokkaido.jp":3,"numata.hokkaido.jp":3,"obihiro.hokkaido.jp":3,"obira.hokkaido.jp":3,"oketo.hokkaido.jp":3,"okoppe.hokkaido.jp":3,"otaru.hokkaido.jp":3,"otobe.hokkaido.jp":3,"otofuke.hokkaido.jp":3,"otoineppu.hokkaido.jp":3,"oumu.hokkaido.jp":3,"ozora.hokkaido.jp":3,"pippu.hokkaido.jp":3,"rankoshi.hokkaido.jp":3,"rebun.hokkaido.jp":3,"rikubetsu.hokkaido.jp":3,"rishiri.hokkaido.jp":3,"rishirifuji.hokkaido.jp":3,"saroma.hokkaido.jp":3,"sarufutsu.hokkaido.jp":3,"shakotan.hokkaido.jp":3,"shari.hokkaido.jp":3,"shibecha.hokkaido.jp":3,"shibetsu.hokkaido.jp":3,"shikabe.hokkaido.jp":3,"shikaoi.hokkaido.jp":3,"shimamaki.hokkaido.jp":3,"shimizu.hokkaido.jp":3,"shimokawa.hokkaido.jp":3,"shinshinotsu.hokkaido.jp":3,"shintoku.hokkaido.jp":3,"shiranuka.hokkaido.jp":3,"shiraoi.hokkaido.jp":3,"shiriuchi.hokkaido.jp":3,"sobetsu.hokkaido.jp":3,"sunagawa.hokkaido.jp":3,"taiki.hokkaido.jp":3,"takasu.hokkaido.jp":3,"takikawa.hokkaido.jp":3,"takinoue.hokkaido.jp":3,"teshikaga.hokkaido.jp":3,"tobetsu.hokkaido.jp":3,"tohma.hokkaido.jp":3,"tomakomai.hokkaido.jp":3,"tomari.hokkaido.jp":3,"toya.hokkaido.jp":3,"toyako.hokkaido.jp":3,"toyotomi.hokkaido.jp":3,"toyoura.hokkaido.jp":3,"tsubetsu.hokkaido.jp":3,"tsukigata.hokkaido.jp":3,"urakawa.hokkaido.jp":3,"urausu.hokkaido.jp":3,"uryu.hokkaido.jp":3,"utashinai.hokkaido.jp":3,"wakkanai.hokkaido.jp":3,"wassamu.hokkaido.jp":3,"yakumo.hokkaido.jp":3,"yoichi.hokkaido.jp":3,"aioi.hyogo.jp":3,"akashi.hyogo.jp":3,"ako.hyogo.jp":3,"amagasaki.hyogo.jp":3,"aogaki.hyogo.jp":3,"asago.hyogo.jp":3,"ashiya.hyogo.jp":3,"awaji.hyogo.jp":3,"fukusaki.hyogo.jp":3,"goshiki.hyogo.jp":3,"harima.hyogo.jp":3,"himeji.hyogo.jp":3,"ichikawa.hyogo.jp":3,"inagawa.hyogo.jp":3,"itami.hyogo.jp":3,"kakogawa.hyogo.jp":3,"kamigori.hyogo.jp":3,"kamikawa.hyogo.jp":3,"kasai.hyogo.jp":3,"kasuga.hyogo.jp":3,"kawanishi.hyogo.jp":3,"miki.hyogo.jp":3,"minamiawaji.hyogo.jp":3,"nishinomiya.hyogo.jp":3,"nishiwaki.hyogo.jp":3,"ono.hyogo.jp":3,"sanda.hyogo.jp":3,"sannan.hyogo.jp":3,"sasayama.hyogo.jp":3,"sayo.hyogo.jp":3,"shingu.hyogo.jp":3,"shinonsen.hyogo.jp":3,"shiso.hyogo.jp":3,"sumoto.hyogo.jp":3,"taishi.hyogo.jp":3,"taka.hyogo.jp":3,"takarazuka.hyogo.jp":3,"takasago.hyogo.jp":3,"takino.hyogo.jp":3,"tamba.hyogo.jp":3,"tatsuno.hyogo.jp":3,"toyooka.hyogo.jp":3,"yabu.hyogo.jp":3,"yashiro.hyogo.jp":3,"yoka.hyogo.jp":3,"yokawa.hyogo.jp":3,"ami.ibaraki.jp":3,"asahi.ibaraki.jp":3,"bando.ibaraki.jp":3,"chikusei.ibaraki.jp":3,"daigo.ibaraki.jp":3,"fujishiro.ibaraki.jp":3,"hitachi.ibaraki.jp":3,"hitachinaka.ibaraki.jp":3,"hitachiomiya.ibaraki.jp":3,"hitachiota.ibaraki.jp":3,"ibaraki.ibaraki.jp":3,"ina.ibaraki.jp":3,"inashiki.ibaraki.jp":3,"itako.ibaraki.jp":3,"iwama.ibaraki.jp":3,"joso.ibaraki.jp":3,"kamisu.ibaraki.jp":3,"kasama.ibaraki.jp":3,"kashima.ibaraki.jp":3,"kasumigaura.ibaraki.jp":3,"koga.ibaraki.jp":3,"miho.ibaraki.jp":3,"mito.ibaraki.jp":3,"moriya.ibaraki.jp":3,"naka.ibaraki.jp":3,"namegata.ibaraki.jp":3,"oarai.ibaraki.jp":3,"ogawa.ibaraki.jp":3,"omitama.ibaraki.jp":3,"ryugasaki.ibaraki.jp":3,"sakai.ibaraki.jp":3,"sakuragawa.ibaraki.jp":3,"shimodate.ibaraki.jp":3,"shimotsuma.ibaraki.jp":3,"shirosato.ibaraki.jp":3,"sowa.ibaraki.jp":3,"suifu.ibaraki.jp":3,"takahagi.ibaraki.jp":3,"tamatsukuri.ibaraki.jp":3,"tokai.ibaraki.jp":3,"tomobe.ibaraki.jp":3,"tone.ibaraki.jp":3,"toride.ibaraki.jp":3,"tsuchiura.ibaraki.jp":3,"tsukuba.ibaraki.jp":3,"uchihara.ibaraki.jp":3,"ushiku.ibaraki.jp":3,"yachiyo.ibaraki.jp":3,"yamagata.ibaraki.jp":3,"yawara.ibaraki.jp":3,"yuki.ibaraki.jp":3,"anamizu.ishikawa.jp":3,"hakui.ishikawa.jp":3,"hakusan.ishikawa.jp":3,"kaga.ishikawa.jp":3,"kahoku.ishikawa.jp":3,"kanazawa.ishikawa.jp":3,"kawakita.ishikawa.jp":3,"komatsu.ishikawa.jp":3,"nakanoto.ishikawa.jp":3,"nanao.ishikawa.jp":3,"nomi.ishikawa.jp":3,"nonoichi.ishikawa.jp":3,"noto.ishikawa.jp":3,"shika.ishikawa.jp":3,"suzu.ishikawa.jp":3,"tsubata.ishikawa.jp":3,"tsurugi.ishikawa.jp":3,"uchinada.ishikawa.jp":3,"wajima.ishikawa.jp":3,"fudai.iwate.jp":3,"fujisawa.iwate.jp":3,"hanamaki.iwate.jp":3,"hiraizumi.iwate.jp":3,"hirono.iwate.jp":3,"ichinohe.iwate.jp":3,"ichinoseki.iwate.jp":3,"iwaizumi.iwate.jp":3,"iwate.iwate.jp":3,"joboji.iwate.jp":3,"kamaishi.iwate.jp":3,"kanegasaki.iwate.jp":3,"karumai.iwate.jp":3,"kawai.iwate.jp":3,"kitakami.iwate.jp":3,"kuji.iwate.jp":3,"kunohe.iwate.jp":3,"kuzumaki.iwate.jp":3,"miyako.iwate.jp":3,"mizusawa.iwate.jp":3,"morioka.iwate.jp":3,"ninohe.iwate.jp":3,"noda.iwate.jp":3,"ofunato.iwate.jp":3,"oshu.iwate.jp":3,"otsuchi.iwate.jp":3,"rikuzentakata.iwate.jp":3,"shiwa.iwate.jp":3,"shizukuishi.iwate.jp":3,"sumita.iwate.jp":3,"tanohata.iwate.jp":3,"tono.iwate.jp":3,"yahaba.iwate.jp":3,"yamada.iwate.jp":3,"ayagawa.kagawa.jp":3,"higashikagawa.kagawa.jp":3,"kanonji.kagawa.jp":3,"kotohira.kagawa.jp":3,"manno.kagawa.jp":3,"marugame.kagawa.jp":3,"mitoyo.kagawa.jp":3,"naoshima.kagawa.jp":3,"sanuki.kagawa.jp":3,"tadotsu.kagawa.jp":3,"takamatsu.kagawa.jp":3,"tonosho.kagawa.jp":3,"uchinomi.kagawa.jp":3,"utazu.kagawa.jp":3,"zentsuji.kagawa.jp":3,"akune.kagoshima.jp":3,"amami.kagoshima.jp":3,"hioki.kagoshima.jp":3,"isa.kagoshima.jp":3,"isen.kagoshima.jp":3,"izumi.kagoshima.jp":3,"kagoshima.kagoshima.jp":3,"kanoya.kagoshima.jp":3,"kawanabe.kagoshima.jp":3,"kinko.kagoshima.jp":3,"kouyama.kagoshima.jp":3,"makurazaki.kagoshima.jp":3,"matsumoto.kagoshima.jp":3,"minamitane.kagoshima.jp":3,"nakatane.kagoshima.jp":3,"nishinoomote.kagoshima.jp":3,"satsumasendai.kagoshima.jp":3,"soo.kagoshima.jp":3,"tarumizu.kagoshima.jp":3,"yusui.kagoshima.jp":3,"aikawa.kanagawa.jp":3,"atsugi.kanagawa.jp":3,"ayase.kanagawa.jp":3,"chigasaki.kanagawa.jp":3,"ebina.kanagawa.jp":3,"fujisawa.kanagawa.jp":3,"hadano.kanagawa.jp":3,"hakone.kanagawa.jp":3,"hiratsuka.kanagawa.jp":3,"isehara.kanagawa.jp":3,"kaisei.kanagawa.jp":3,"kamakura.kanagawa.jp":3,"kiyokawa.kanagawa.jp":3,"matsuda.kanagawa.jp":3,"minamiashigara.kanagawa.jp":3,"miura.kanagawa.jp":3,"nakai.kanagawa.jp":3,"ninomiya.kanagawa.jp":3,"odawara.kanagawa.jp":3,"oi.kanagawa.jp":3,"oiso.kanagawa.jp":3,"sagamihara.kanagawa.jp":3,"samukawa.kanagawa.jp":3,"tsukui.kanagawa.jp":3,"yamakita.kanagawa.jp":3,"yamato.kanagawa.jp":3,"yokosuka.kanagawa.jp":3,"yugawara.kanagawa.jp":3,"zama.kanagawa.jp":3,"zushi.kanagawa.jp":3,"aki.kochi.jp":3,"geisei.kochi.jp":3,"hidaka.kochi.jp":3,"higashitsuno.kochi.jp":3,"ino.kochi.jp":3,"kagami.kochi.jp":3,"kami.kochi.jp":3,"kitagawa.kochi.jp":3,"kochi.kochi.jp":3,"mihara.kochi.jp":3,"motoyama.kochi.jp":3,"muroto.kochi.jp":3,"nahari.kochi.jp":3,"nakamura.kochi.jp":3,"nankoku.kochi.jp":3,"nishitosa.kochi.jp":3,"niyodogawa.kochi.jp":3,"ochi.kochi.jp":3,"okawa.kochi.jp":3,"otoyo.kochi.jp":3,"otsuki.kochi.jp":3,"sakawa.kochi.jp":3,"sukumo.kochi.jp":3,"susaki.kochi.jp":3,"tosa.kochi.jp":3,"tosashimizu.kochi.jp":3,"toyo.kochi.jp":3,"tsuno.kochi.jp":3,"umaji.kochi.jp":3,"yasuda.kochi.jp":3,"yusuhara.kochi.jp":3,"amakusa.kumamoto.jp":3,"arao.kumamoto.jp":3,"aso.kumamoto.jp":3,"choyo.kumamoto.jp":3,"gyokuto.kumamoto.jp":3,"kamiamakusa.kumamoto.jp":3,"kikuchi.kumamoto.jp":3,"kumamoto.kumamoto.jp":3,"mashiki.kumamoto.jp":3,"mifune.kumamoto.jp":3,"minamata.kumamoto.jp":3,"minamioguni.kumamoto.jp":3,"nagasu.kumamoto.jp":3,"nishihara.kumamoto.jp":3,"oguni.kumamoto.jp":3,"ozu.kumamoto.jp":3,"sumoto.kumamoto.jp":3,"takamori.kumamoto.jp":3,"uki.kumamoto.jp":3,"uto.kumamoto.jp":3,"yamaga.kumamoto.jp":3,"yamato.kumamoto.jp":3,"yatsushiro.kumamoto.jp":3,"ayabe.kyoto.jp":3,"fukuchiyama.kyoto.jp":3,"higashiyama.kyoto.jp":3,"ide.kyoto.jp":3,"ine.kyoto.jp":3,"joyo.kyoto.jp":3,"kameoka.kyoto.jp":3,"kamo.kyoto.jp":3,"kita.kyoto.jp":3,"kizu.kyoto.jp":3,"kumiyama.kyoto.jp":3,"kyotamba.kyoto.jp":3,"kyotanabe.kyoto.jp":3,"kyotango.kyoto.jp":3,"maizuru.kyoto.jp":3,"minami.kyoto.jp":3,"minamiyamashiro.kyoto.jp":3,"miyazu.kyoto.jp":3,"muko.kyoto.jp":3,"nagaokakyo.kyoto.jp":3,"nakagyo.kyoto.jp":3,"nantan.kyoto.jp":3,"oyamazaki.kyoto.jp":3,"sakyo.kyoto.jp":3,"seika.kyoto.jp":3,"tanabe.kyoto.jp":3,"uji.kyoto.jp":3,"ujitawara.kyoto.jp":3,"wazuka.kyoto.jp":3,"yamashina.kyoto.jp":3,"yawata.kyoto.jp":3,"asahi.mie.jp":3,"inabe.mie.jp":3,"ise.mie.jp":3,"kameyama.mie.jp":3,"kawagoe.mie.jp":3,"kiho.mie.jp":3,"kisosaki.mie.jp":3,"kiwa.mie.jp":3,"komono.mie.jp":3,"kumano.mie.jp":3,"kuwana.mie.jp":3,"matsusaka.mie.jp":3,"meiwa.mie.jp":3,"mihama.mie.jp":3,"minamiise.mie.jp":3,"misugi.mie.jp":3,"miyama.mie.jp":3,"nabari.mie.jp":3,"shima.mie.jp":3,"suzuka.mie.jp":3,"tado.mie.jp":3,"taiki.mie.jp":3,"taki.mie.jp":3,"tamaki.mie.jp":3,"toba.mie.jp":3,"tsu.mie.jp":3,"udono.mie.jp":3,"ureshino.mie.jp":3,"watarai.mie.jp":3,"yokkaichi.mie.jp":3,"furukawa.miyagi.jp":3,"higashimatsushima.miyagi.jp":3,"ishinomaki.miyagi.jp":3,"iwanuma.miyagi.jp":3,"kakuda.miyagi.jp":3,"kami.miyagi.jp":3,"kawasaki.miyagi.jp":3,"marumori.miyagi.jp":3,"matsushima.miyagi.jp":3,"minamisanriku.miyagi.jp":3,"misato.miyagi.jp":3,"murata.miyagi.jp":3,"natori.miyagi.jp":3,"ogawara.miyagi.jp":3,"ohira.miyagi.jp":3,"onagawa.miyagi.jp":3,"osaki.miyagi.jp":3,"rifu.miyagi.jp":3,"semine.miyagi.jp":3,"shibata.miyagi.jp":3,"shichikashuku.miyagi.jp":3,"shikama.miyagi.jp":3,"shiogama.miyagi.jp":3,"shiroishi.miyagi.jp":3,"tagajo.miyagi.jp":3,"taiwa.miyagi.jp":3,"tome.miyagi.jp":3,"tomiya.miyagi.jp":3,"wakuya.miyagi.jp":3,"watari.miyagi.jp":3,"yamamoto.miyagi.jp":3,"zao.miyagi.jp":3,"aya.miyazaki.jp":3,"ebino.miyazaki.jp":3,"gokase.miyazaki.jp":3,"hyuga.miyazaki.jp":3,"kadogawa.miyazaki.jp":3,"kawaminami.miyazaki.jp":3,"kijo.miyazaki.jp":3,"kitagawa.miyazaki.jp":3,"kitakata.miyazaki.jp":3,"kitaura.miyazaki.jp":3,"kobayashi.miyazaki.jp":3,"kunitomi.miyazaki.jp":3,"kushima.miyazaki.jp":3,"mimata.miyazaki.jp":3,"miyakonojo.miyazaki.jp":3,"miyazaki.miyazaki.jp":3,"morotsuka.miyazaki.jp":3,"nichinan.miyazaki.jp":3,"nishimera.miyazaki.jp":3,"nobeoka.miyazaki.jp":3,"saito.miyazaki.jp":3,"shiiba.miyazaki.jp":3,"shintomi.miyazaki.jp":3,"takaharu.miyazaki.jp":3,"takanabe.miyazaki.jp":3,"takazaki.miyazaki.jp":3,"tsuno.miyazaki.jp":3,"achi.nagano.jp":3,"agematsu.nagano.jp":3,"anan.nagano.jp":3,"aoki.nagano.jp":3,"asahi.nagano.jp":3,"azumino.nagano.jp":3,"chikuhoku.nagano.jp":3,"chikuma.nagano.jp":3,"chino.nagano.jp":3,"fujimi.nagano.jp":3,"hakuba.nagano.jp":3,"hara.nagano.jp":3,"hiraya.nagano.jp":3,"iida.nagano.jp":3,"iijima.nagano.jp":3,"iiyama.nagano.jp":3,"iizuna.nagano.jp":3,"ikeda.nagano.jp":3,"ikusaka.nagano.jp":3,"ina.nagano.jp":3,"karuizawa.nagano.jp":3,"kawakami.nagano.jp":3,"kiso.nagano.jp":3,"kisofukushima.nagano.jp":3,"kitaaiki.nagano.jp":3,"komagane.nagano.jp":3,"komoro.nagano.jp":3,"matsukawa.nagano.jp":3,"matsumoto.nagano.jp":3,"miasa.nagano.jp":3,"minamiaiki.nagano.jp":3,"minamimaki.nagano.jp":3,"minamiminowa.nagano.jp":3,"minowa.nagano.jp":3,"miyada.nagano.jp":3,"miyota.nagano.jp":3,"mochizuki.nagano.jp":3,"nagano.nagano.jp":3,"nagawa.nagano.jp":3,"nagiso.nagano.jp":3,"nakagawa.nagano.jp":3,"nakano.nagano.jp":3,"nozawaonsen.nagano.jp":3,"obuse.nagano.jp":3,"ogawa.nagano.jp":3,"okaya.nagano.jp":3,"omachi.nagano.jp":3,"omi.nagano.jp":3,"ookuwa.nagano.jp":3,"ooshika.nagano.jp":3,"otaki.nagano.jp":3,"otari.nagano.jp":3,"sakae.nagano.jp":3,"sakaki.nagano.jp":3,"saku.nagano.jp":3,"sakuho.nagano.jp":3,"shimosuwa.nagano.jp":3,"shinanomachi.nagano.jp":3,"shiojiri.nagano.jp":3,"suwa.nagano.jp":3,"suzaka.nagano.jp":3,"takagi.nagano.jp":3,"takamori.nagano.jp":3,"takayama.nagano.jp":3,"tateshina.nagano.jp":3,"tatsuno.nagano.jp":3,"togakushi.nagano.jp":3,"togura.nagano.jp":3,"tomi.nagano.jp":3,"ueda.nagano.jp":3,"wada.nagano.jp":3,"yamagata.nagano.jp":3,"yamanouchi.nagano.jp":3,"yasaka.nagano.jp":3,"yasuoka.nagano.jp":3,"chijiwa.nagasaki.jp":3,"futsu.nagasaki.jp":3,"goto.nagasaki.jp":3,"hasami.nagasaki.jp":3,"hirado.nagasaki.jp":3,"iki.nagasaki.jp":3,"isahaya.nagasaki.jp":3,"kawatana.nagasaki.jp":3,"kuchinotsu.nagasaki.jp":3,"matsuura.nagasaki.jp":3,"nagasaki.nagasaki.jp":3,"obama.nagasaki.jp":3,"omura.nagasaki.jp":3,"oseto.nagasaki.jp":3,"saikai.nagasaki.jp":3,"sasebo.nagasaki.jp":3,"seihi.nagasaki.jp":3,"shimabara.nagasaki.jp":3,"shinkamigoto.nagasaki.jp":3,"togitsu.nagasaki.jp":3,"tsushima.nagasaki.jp":3,"unzen.nagasaki.jp":3,"ando.nara.jp":3,"gose.nara.jp":3,"heguri.nara.jp":3,"higashiyoshino.nara.jp":3,"ikaruga.nara.jp":3,"ikoma.nara.jp":3,"kamikitayama.nara.jp":3,"kanmaki.nara.jp":3,"kashiba.nara.jp":3,"kashihara.nara.jp":3,"katsuragi.nara.jp":3,"kawai.nara.jp":3,"kawakami.nara.jp":3,"kawanishi.nara.jp":3,"koryo.nara.jp":3,"kurotaki.nara.jp":3,"mitsue.nara.jp":3,"miyake.nara.jp":3,"nara.nara.jp":3,"nosegawa.nara.jp":3,"oji.nara.jp":3,"ouda.nara.jp":3,"oyodo.nara.jp":3,"sakurai.nara.jp":3,"sango.nara.jp":3,"shimoichi.nara.jp":3,"shimokitayama.nara.jp":3,"shinjo.nara.jp":3,"soni.nara.jp":3,"takatori.nara.jp":3,"tawaramoto.nara.jp":3,"tenkawa.nara.jp":3,"tenri.nara.jp":3,"uda.nara.jp":3,"yamatokoriyama.nara.jp":3,"yamatotakada.nara.jp":3,"yamazoe.nara.jp":3,"yoshino.nara.jp":3,"aga.niigata.jp":3,"agano.niigata.jp":3,"gosen.niigata.jp":3,"itoigawa.niigata.jp":3,"izumozaki.niigata.jp":3,"joetsu.niigata.jp":3,"kamo.niigata.jp":3,"kariwa.niigata.jp":3,"kashiwazaki.niigata.jp":3,"minamiuonuma.niigata.jp":3,"mitsuke.niigata.jp":3,"muika.niigata.jp":3,"murakami.niigata.jp":3,"myoko.niigata.jp":3,"nagaoka.niigata.jp":3,"niigata.niigata.jp":3,"ojiya.niigata.jp":3,"omi.niigata.jp":3,"sado.niigata.jp":3,"sanjo.niigata.jp":3,"seiro.niigata.jp":3,"seirou.niigata.jp":3,"sekikawa.niigata.jp":3,"shibata.niigata.jp":3,"tagami.niigata.jp":3,"tainai.niigata.jp":3,"tochio.niigata.jp":3,"tokamachi.niigata.jp":3,"tsubame.niigata.jp":3,"tsunan.niigata.jp":3,"uonuma.niigata.jp":3,"yahiko.niigata.jp":3,"yoita.niigata.jp":3,"yuzawa.niigata.jp":3,"beppu.oita.jp":3,"bungoono.oita.jp":3,"bungotakada.oita.jp":3,"hasama.oita.jp":3,"hiji.oita.jp":3,"himeshima.oita.jp":3,"hita.oita.jp":3,"kamitsue.oita.jp":3,"kokonoe.oita.jp":3,"kuju.oita.jp":3,"kunisaki.oita.jp":3,"kusu.oita.jp":3,"oita.oita.jp":3,"saiki.oita.jp":3,"taketa.oita.jp":3,"tsukumi.oita.jp":3,"usa.oita.jp":3,"usuki.oita.jp":3,"yufu.oita.jp":3,"akaiwa.okayama.jp":3,"asakuchi.okayama.jp":3,"bizen.okayama.jp":3,"hayashima.okayama.jp":3,"ibara.okayama.jp":3,"kagamino.okayama.jp":3,"kasaoka.okayama.jp":3,"kibichuo.okayama.jp":3,"kumenan.okayama.jp":3,"kurashiki.okayama.jp":3,"maniwa.okayama.jp":3,"misaki.okayama.jp":3,"nagi.okayama.jp":3,"niimi.okayama.jp":3,"nishiawakura.okayama.jp":3,"okayama.okayama.jp":3,"satosho.okayama.jp":3,"setouchi.okayama.jp":3,"shinjo.okayama.jp":3,"shoo.okayama.jp":3,"soja.okayama.jp":3,"takahashi.okayama.jp":3,"tamano.okayama.jp":3,"tsuyama.okayama.jp":3,"wake.okayama.jp":3,"yakage.okayama.jp":3,"aguni.okinawa.jp":3,"ginowan.okinawa.jp":3,"ginoza.okinawa.jp":3,"gushikami.okinawa.jp":3,"haebaru.okinawa.jp":3,"higashi.okinawa.jp":3,"hirara.okinawa.jp":3,"iheya.okinawa.jp":3,"ishigaki.okinawa.jp":3,"ishikawa.okinawa.jp":3,"itoman.okinawa.jp":3,"izena.okinawa.jp":3,"kadena.okinawa.jp":3,"kin.okinawa.jp":3,"kitadaito.okinawa.jp":3,"kitanakagusuku.okinawa.jp":3,"kumejima.okinawa.jp":3,"kunigami.okinawa.jp":3,"minamidaito.okinawa.jp":3,"motobu.okinawa.jp":3,"nago.okinawa.jp":3,"naha.okinawa.jp":3,"nakagusuku.okinawa.jp":3,"nakijin.okinawa.jp":3,"nanjo.okinawa.jp":3,"nishihara.okinawa.jp":3,"ogimi.okinawa.jp":3,"okinawa.okinawa.jp":3,"onna.okinawa.jp":3,"shimoji.okinawa.jp":3,"taketomi.okinawa.jp":3,"tarama.okinawa.jp":3,"tokashiki.okinawa.jp":3,"tomigusuku.okinawa.jp":3,"tonaki.okinawa.jp":3,"urasoe.okinawa.jp":3,"uruma.okinawa.jp":3,"yaese.okinawa.jp":3,"yomitan.okinawa.jp":3,"yonabaru.okinawa.jp":3,"yonaguni.okinawa.jp":3,"zamami.okinawa.jp":3,"abeno.osaka.jp":3,"chihayaakasaka.osaka.jp":3,"chuo.osaka.jp":3,"daito.osaka.jp":3,"fujiidera.osaka.jp":3,"habikino.osaka.jp":3,"hannan.osaka.jp":3,"higashiosaka.osaka.jp":3,"higashisumiyoshi.osaka.jp":3,"higashiyodogawa.osaka.jp":3,"hirakata.osaka.jp":3,"ibaraki.osaka.jp":3,"ikeda.osaka.jp":3,"izumi.osaka.jp":3,"izumiotsu.osaka.jp":3,"izumisano.osaka.jp":3,"kadoma.osaka.jp":3,"kaizuka.osaka.jp":3,"kanan.osaka.jp":3,"kashiwara.osaka.jp":3,"katano.osaka.jp":3,"kawachinagano.osaka.jp":3,"kishiwada.osaka.jp":3,"kita.osaka.jp":3,"kumatori.osaka.jp":3,"matsubara.osaka.jp":3,"minato.osaka.jp":3,"minoh.osaka.jp":3,"misaki.osaka.jp":3,"moriguchi.osaka.jp":3,"neyagawa.osaka.jp":3,"nishi.osaka.jp":3,"nose.osaka.jp":3,"osakasayama.osaka.jp":3,"sakai.osaka.jp":3,"sayama.osaka.jp":3,"sennan.osaka.jp":3,"settsu.osaka.jp":3,"shijonawate.osaka.jp":3,"shimamoto.osaka.jp":3,"suita.osaka.jp":3,"tadaoka.osaka.jp":3,"taishi.osaka.jp":3,"tajiri.osaka.jp":3,"takaishi.osaka.jp":3,"takatsuki.osaka.jp":3,"tondabayashi.osaka.jp":3,"toyonaka.osaka.jp":3,"toyono.osaka.jp":3,"yao.osaka.jp":3,"ariake.saga.jp":3,"arita.saga.jp":3,"fukudomi.saga.jp":3,"genkai.saga.jp":3,"hamatama.saga.jp":3,"hizen.saga.jp":3,"imari.saga.jp":3,"kamimine.saga.jp":3,"kanzaki.saga.jp":3,"karatsu.saga.jp":3,"kashima.saga.jp":3,"kitagata.saga.jp":3,"kitahata.saga.jp":3,"kiyama.saga.jp":3,"kouhoku.saga.jp":3,"kyuragi.saga.jp":3,"nishiarita.saga.jp":3,"ogi.saga.jp":3,"omachi.saga.jp":3,"ouchi.saga.jp":3,"saga.saga.jp":3,"shiroishi.saga.jp":3,"taku.saga.jp":3,"tara.saga.jp":3,"tosu.saga.jp":3,"yoshinogari.saga.jp":3,"arakawa.saitama.jp":3,"asaka.saitama.jp":3,"chichibu.saitama.jp":3,"fujimi.saitama.jp":3,"fujimino.saitama.jp":3,"fukaya.saitama.jp":3,"hanno.saitama.jp":3,"hanyu.saitama.jp":3,"hasuda.saitama.jp":3,"hatogaya.saitama.jp":3,"hatoyama.saitama.jp":3,"hidaka.saitama.jp":3,"higashichichibu.saitama.jp":3,"higashimatsuyama.saitama.jp":3,"honjo.saitama.jp":3,"ina.saitama.jp":3,"iruma.saitama.jp":3,"iwatsuki.saitama.jp":3,"kamiizumi.saitama.jp":3,"kamikawa.saitama.jp":3,"kamisato.saitama.jp":3,"kasukabe.saitama.jp":3,"kawagoe.saitama.jp":3,"kawaguchi.saitama.jp":3,"kawajima.saitama.jp":3,"kazo.saitama.jp":3,"kitamoto.saitama.jp":3,"koshigaya.saitama.jp":3,"kounosu.saitama.jp":3,"kuki.saitama.jp":3,"kumagaya.saitama.jp":3,"matsubushi.saitama.jp":3,"minano.saitama.jp":3,"misato.saitama.jp":3,"miyashiro.saitama.jp":3,"miyoshi.saitama.jp":3,"moroyama.saitama.jp":3,"nagatoro.saitama.jp":3,"namegawa.saitama.jp":3,"niiza.saitama.jp":3,"ogano.saitama.jp":3,"ogawa.saitama.jp":3,"ogose.saitama.jp":3,"okegawa.saitama.jp":3,"omiya.saitama.jp":3,"otaki.saitama.jp":3,"ranzan.saitama.jp":3,"ryokami.saitama.jp":3,"saitama.saitama.jp":3,"sakado.saitama.jp":3,"satte.saitama.jp":3,"sayama.saitama.jp":3,"shiki.saitama.jp":3,"shiraoka.saitama.jp":3,"soka.saitama.jp":3,"sugito.saitama.jp":3,"toda.saitama.jp":3,"tokigawa.saitama.jp":3,"tokorozawa.saitama.jp":3,"tsurugashima.saitama.jp":3,"urawa.saitama.jp":3,"warabi.saitama.jp":3,"yashio.saitama.jp":3,"yokoze.saitama.jp":3,"yono.saitama.jp":3,"yorii.saitama.jp":3,"yoshida.saitama.jp":3,"yoshikawa.saitama.jp":3,"yoshimi.saitama.jp":3,"aisho.shiga.jp":3,"gamo.shiga.jp":3,"higashiomi.shiga.jp":3,"hikone.shiga.jp":3,"koka.shiga.jp":3,"konan.shiga.jp":3,"kosei.shiga.jp":3,"koto.shiga.jp":3,"kusatsu.shiga.jp":3,"maibara.shiga.jp":3,"moriyama.shiga.jp":3,"nagahama.shiga.jp":3,"nishiazai.shiga.jp":3,"notogawa.shiga.jp":3,"omihachiman.shiga.jp":3,"otsu.shiga.jp":3,"ritto.shiga.jp":3,"ryuoh.shiga.jp":3,"takashima.shiga.jp":3,"takatsuki.shiga.jp":3,"torahime.shiga.jp":3,"toyosato.shiga.jp":3,"yasu.shiga.jp":3,"akagi.shimane.jp":3,"ama.shimane.jp":3,"gotsu.shimane.jp":3,"hamada.shimane.jp":3,"higashiizumo.shimane.jp":3,"hikawa.shimane.jp":3,"hikimi.shimane.jp":3,"izumo.shimane.jp":3,"kakinoki.shimane.jp":3,"masuda.shimane.jp":3,"matsue.shimane.jp":3,"misato.shimane.jp":3,"nishinoshima.shimane.jp":3,"ohda.shimane.jp":3,"okinoshima.shimane.jp":3,"okuizumo.shimane.jp":3,"shimane.shimane.jp":3,"tamayu.shimane.jp":3,"tsuwano.shimane.jp":3,"unnan.shimane.jp":3,"yakumo.shimane.jp":3,"yasugi.shimane.jp":3,"yatsuka.shimane.jp":3,"arai.shizuoka.jp":3,"atami.shizuoka.jp":3,"fuji.shizuoka.jp":3,"fujieda.shizuoka.jp":3,"fujikawa.shizuoka.jp":3,"fujinomiya.shizuoka.jp":3,"fukuroi.shizuoka.jp":3,"gotemba.shizuoka.jp":3,"haibara.shizuoka.jp":3,"hamamatsu.shizuoka.jp":3,"higashiizu.shizuoka.jp":3,"ito.shizuoka.jp":3,"iwata.shizuoka.jp":3,"izu.shizuoka.jp":3,"izunokuni.shizuoka.jp":3,"kakegawa.shizuoka.jp":3,"kannami.shizuoka.jp":3,"kawanehon.shizuoka.jp":3,"kawazu.shizuoka.jp":3,"kikugawa.shizuoka.jp":3,"kosai.shizuoka.jp":3,"makinohara.shizuoka.jp":3,"matsuzaki.shizuoka.jp":3,"minamiizu.shizuoka.jp":3,"mishima.shizuoka.jp":3,"morimachi.shizuoka.jp":3,"nishiizu.shizuoka.jp":3,"numazu.shizuoka.jp":3,"omaezaki.shizuoka.jp":3,"shimada.shizuoka.jp":3,"shimizu.shizuoka.jp":3,"shimoda.shizuoka.jp":3,"shizuoka.shizuoka.jp":3,"susono.shizuoka.jp":3,"yaizu.shizuoka.jp":3,"yoshida.shizuoka.jp":3,"ashikaga.tochigi.jp":3,"bato.tochigi.jp":3,"haga.tochigi.jp":3,"ichikai.tochigi.jp":3,"iwafune.tochigi.jp":3,"kaminokawa.tochigi.jp":3,"kanuma.tochigi.jp":3,"karasuyama.tochigi.jp":3,"kuroiso.tochigi.jp":3,"mashiko.tochigi.jp":3,"mibu.tochigi.jp":3,"moka.tochigi.jp":3,"motegi.tochigi.jp":3,"nasu.tochigi.jp":3,"nasushiobara.tochigi.jp":3,"nikko.tochigi.jp":3,"nishikata.tochigi.jp":3,"nogi.tochigi.jp":3,"ohira.tochigi.jp":3,"ohtawara.tochigi.jp":3,"oyama.tochigi.jp":3,"sakura.tochigi.jp":3,"sano.tochigi.jp":3,"shimotsuke.tochigi.jp":3,"shioya.tochigi.jp":3,"takanezawa.tochigi.jp":3,"tochigi.tochigi.jp":3,"tsuga.tochigi.jp":3,"ujiie.tochigi.jp":3,"utsunomiya.tochigi.jp":3,"yaita.tochigi.jp":3,"aizumi.tokushima.jp":3,"anan.tokushima.jp":3,"ichiba.tokushima.jp":3,"itano.tokushima.jp":3,"kainan.tokushima.jp":3,"komatsushima.tokushima.jp":3,"matsushige.tokushima.jp":3,"mima.tokushima.jp":3,"minami.tokushima.jp":3,"miyoshi.tokushima.jp":3,"mugi.tokushima.jp":3,"nakagawa.tokushima.jp":3,"naruto.tokushima.jp":3,"sanagochi.tokushima.jp":3,"shishikui.tokushima.jp":3,"tokushima.tokushima.jp":3,"wajiki.tokushima.jp":3,"adachi.tokyo.jp":3,"akiruno.tokyo.jp":3,"akishima.tokyo.jp":3,"aogashima.tokyo.jp":3,"arakawa.tokyo.jp":3,"bunkyo.tokyo.jp":3,"chiyoda.tokyo.jp":3,"chofu.tokyo.jp":3,"chuo.tokyo.jp":3,"edogawa.tokyo.jp":3,"fuchu.tokyo.jp":3,"fussa.tokyo.jp":3,"hachijo.tokyo.jp":3,"hachioji.tokyo.jp":3,"hamura.tokyo.jp":3,"higashikurume.tokyo.jp":3,"higashimurayama.tokyo.jp":3,"higashiyamato.tokyo.jp":3,"hino.tokyo.jp":3,"hinode.tokyo.jp":3,"hinohara.tokyo.jp":3,"inagi.tokyo.jp":3,"itabashi.tokyo.jp":3,"katsushika.tokyo.jp":3,"kita.tokyo.jp":3,"kiyose.tokyo.jp":3,"kodaira.tokyo.jp":3,"koganei.tokyo.jp":3,"kokubunji.tokyo.jp":3,"komae.tokyo.jp":3,"koto.tokyo.jp":3,"kouzushima.tokyo.jp":3,"kunitachi.tokyo.jp":3,"machida.tokyo.jp":3,"meguro.tokyo.jp":3,"minato.tokyo.jp":3,"mitaka.tokyo.jp":3,"mizuho.tokyo.jp":3,"musashimurayama.tokyo.jp":3,"musashino.tokyo.jp":3,"nakano.tokyo.jp":3,"nerima.tokyo.jp":3,"ogasawara.tokyo.jp":3,"okutama.tokyo.jp":3,"ome.tokyo.jp":3,"oshima.tokyo.jp":3,"ota.tokyo.jp":3,"setagaya.tokyo.jp":3,"shibuya.tokyo.jp":3,"shinagawa.tokyo.jp":3,"shinjuku.tokyo.jp":3,"suginami.tokyo.jp":3,"sumida.tokyo.jp":3,"tachikawa.tokyo.jp":3,"taito.tokyo.jp":3,"tama.tokyo.jp":3,"toshima.tokyo.jp":3,"chizu.tottori.jp":3,"hino.tottori.jp":3,"kawahara.tottori.jp":3,"koge.tottori.jp":3,"kotoura.tottori.jp":3,"misasa.tottori.jp":3,"nanbu.tottori.jp":3,"nichinan.tottori.jp":3,"sakaiminato.tottori.jp":3,"tottori.tottori.jp":3,"wakasa.tottori.jp":3,"yazu.tottori.jp":3,"yonago.tottori.jp":3,"asahi.toyama.jp":3,"fuchu.toyama.jp":3,"fukumitsu.toyama.jp":3,"funahashi.toyama.jp":3,"himi.toyama.jp":3,"imizu.toyama.jp":3,"inami.toyama.jp":3,"johana.toyama.jp":3,"kamiichi.toyama.jp":3,"kurobe.toyama.jp":3,"nakaniikawa.toyama.jp":3,"namerikawa.toyama.jp":3,"nanto.toyama.jp":3,"nyuzen.toyama.jp":3,"oyabe.toyama.jp":3,"taira.toyama.jp":3,"takaoka.toyama.jp":3,"tateyama.toyama.jp":3,"toga.toyama.jp":3,"tonami.toyama.jp":3,"toyama.toyama.jp":3,"unazuki.toyama.jp":3,"uozu.toyama.jp":3,"yamada.toyama.jp":3,"arida.wakayama.jp":3,"aridagawa.wakayama.jp":3,"gobo.wakayama.jp":3,"hashimoto.wakayama.jp":3,"hidaka.wakayama.jp":3,"hirogawa.wakayama.jp":3,"inami.wakayama.jp":3,"iwade.wakayama.jp":3,"kainan.wakayama.jp":3,"kamitonda.wakayama.jp":3,"katsuragi.wakayama.jp":3,"kimino.wakayama.jp":3,"kinokawa.wakayama.jp":3,"kitayama.wakayama.jp":3,"koya.wakayama.jp":3,"koza.wakayama.jp":3,"kozagawa.wakayama.jp":3,"kudoyama.wakayama.jp":3,"kushimoto.wakayama.jp":3,"mihama.wakayama.jp":3,"misato.wakayama.jp":3,"nachikatsuura.wakayama.jp":3,"shingu.wakayama.jp":3,"shirahama.wakayama.jp":3,"taiji.wakayama.jp":3,"tanabe.wakayama.jp":3,"wakayama.wakayama.jp":3,"yuasa.wakayama.jp":3,"yura.wakayama.jp":3,"asahi.yamagata.jp":3,"funagata.yamagata.jp":3,"higashine.yamagata.jp":3,"iide.yamagata.jp":3,"kahoku.yamagata.jp":3,"kaminoyama.yamagata.jp":3,"kaneyama.yamagata.jp":3,"kawanishi.yamagata.jp":3,"mamurogawa.yamagata.jp":3,"mikawa.yamagata.jp":3,"murayama.yamagata.jp":3,"nagai.yamagata.jp":3,"nakayama.yamagata.jp":3,"nanyo.yamagata.jp":3,"nishikawa.yamagata.jp":3,"obanazawa.yamagata.jp":3,"oe.yamagata.jp":3,"oguni.yamagata.jp":3,"ohkura.yamagata.jp":3,"oishida.yamagata.jp":3,"sagae.yamagata.jp":3,"sakata.yamagata.jp":3,"sakegawa.yamagata.jp":3,"shinjo.yamagata.jp":3,"shirataka.yamagata.jp":3,"shonai.yamagata.jp":3,"takahata.yamagata.jp":3,"tendo.yamagata.jp":3,"tozawa.yamagata.jp":3,"tsuruoka.yamagata.jp":3,"yamagata.yamagata.jp":3,"yamanobe.yamagata.jp":3,"yonezawa.yamagata.jp":3,"yuza.yamagata.jp":3,"abu.yamaguchi.jp":3,"hagi.yamaguchi.jp":3,"hikari.yamaguchi.jp":3,"hofu.yamaguchi.jp":3,"iwakuni.yamaguchi.jp":3,"kudamatsu.yamaguchi.jp":3,"mitou.yamaguchi.jp":3,"nagato.yamaguchi.jp":3,"oshima.yamaguchi.jp":3,"shimonoseki.yamaguchi.jp":3,"shunan.yamaguchi.jp":3,"tabuse.yamaguchi.jp":3,"tokuyama.yamaguchi.jp":3,"toyota.yamaguchi.jp":3,"ube.yamaguchi.jp":3,"yuu.yamaguchi.jp":3,"chuo.yamanashi.jp":3,"doshi.yamanashi.jp":3,"fuefuki.yamanashi.jp":3,"fujikawa.yamanashi.jp":3,"fujikawaguchiko.yamanashi.jp":3,"fujiyoshida.yamanashi.jp":3,"hayakawa.yamanashi.jp":3,"hokuto.yamanashi.jp":3,"ichikawamisato.yamanashi.jp":3,"kai.yamanashi.jp":3,"kofu.yamanashi.jp":3,"koshu.yamanashi.jp":3,"kosuge.yamanashi.jp":3,"minami-alps.yamanashi.jp":3,"minobu.yamanashi.jp":3,"nakamichi.yamanashi.jp":3,"nanbu.yamanashi.jp":3,"narusawa.yamanashi.jp":3,"nirasaki.yamanashi.jp":3,"nishikatsura.yamanashi.jp":3,"oshino.yamanashi.jp":3,"otsuki.yamanashi.jp":3,"showa.yamanashi.jp":3,"tabayama.yamanashi.jp":3,"tsuru.yamanashi.jp":3,"uenohara.yamanashi.jp":3,"yamanakako.yamanashi.jp":3,"yamanashi.yamanashi.jp":3,"ke":1,"ac.ke":2,"co.ke":2,"go.ke":2,"info.ke":2,"me.ke":2,"mobi.ke":2,"ne.ke":2,"or.ke":2,"sc.ke":2,"kg":1,"com.kg":2,"edu.kg":2,"gov.kg":2,"mil.kg":2,"net.kg":2,"org.kg":2,"kh":2,"ki":1,"biz.ki":2,"com.ki":2,"edu.ki":2,"gov.ki":2,"info.ki":2,"net.ki":2,"org.ki":2,"km":1,"ass.km":2,"com.km":2,"edu.km":2,"gov.km":2,"mil.km":2,"nom.km":2,"org.km":2,"prd.km":2,"tm.km":2,"asso.km":2,"coop.km":2,"gouv.km":2,"medecin.km":2,"notaires.km":2,"pharmaciens.km":2,"presse.km":2,"veterinaire.km":2,"kn":1,"edu.kn":2,"gov.kn":2,"net.kn":2,"org.kn":2,"kp":1,"com.kp":2,"edu.kp":2,"gov.kp":2,"org.kp":2,"rep.kp":2,"tra.kp":2,"kr":1,"ac.kr":2,"ai.kr":2,"co.kr":2,"es.kr":2,"go.kr":2,"hs.kr":2,"io.kr":2,"it.kr":2,"kg.kr":2,"me.kr":2,"mil.kr":2,"ms.kr":2,"ne.kr":2,"or.kr":2,"pe.kr":2,"re.kr":2,"sc.kr":2,"busan.kr":2,"chungbuk.kr":2,"chungnam.kr":2,"daegu.kr":2,"daejeon.kr":2,"gangwon.kr":2,"gwangju.kr":2,"gyeongbuk.kr":2,"gyeonggi.kr":2,"gyeongnam.kr":2,"incheon.kr":2,"jeju.kr":2,"jeonbuk.kr":2,"jeonnam.kr":2,"seoul.kr":2,"ulsan.kr":2,"kw":1,"com.kw":2,"edu.kw":2,"emb.kw":2,"gov.kw":2,"ind.kw":2,"net.kw":2,"org.kw":2,"ky":1,"com.ky":2,"edu.ky":2,"net.ky":2,"org.ky":2,"kz":1,"com.kz":2,"edu.kz":2,"gov.kz":2,"mil.kz":2,"net.kz":2,"org.kz":2,"la":1,"com.la":2,"edu.la":2,"gov.la":2,"info.la":2,"int.la":2,"net.la":2,"org.la":2,"per.la":2,"lb":1,"com.lb":2,"edu.lb":2,"gov.lb":2,"net.lb":2,"org.lb":2,"lc":1,"co.lc":2,"com.lc":2,"edu.lc":2,"gov.lc":2,"net.lc":2,"org.lc":2,"li":1,"lk":1,"ac.lk":2,"assn.lk":2,"com.lk":2,"edu.lk":2,"gov.lk":2,"grp.lk":2,"hotel.lk":2,"int.lk":2,"ltd.lk":2,"net.lk":2,"ngo.lk":2,"org.lk":2,"sch.lk":2,"soc.lk":2,"web.lk":2,"lr":1,"com.lr":2,"edu.lr":2,"gov.lr":2,"net.lr":2,"org.lr":2,"ls":1,"ac.ls":2,"biz.ls":2,"co.ls":2,"edu.ls":2,"gov.ls":2,"info.ls":2,"net.ls":2,"org.ls":2,"sc.ls":2,"lt":1,"gov.lt":2,"lu":1,"lv":1,"asn.lv":2,"com.lv":2,"conf.lv":2,"edu.lv":2,"gov.lv":2,"id.lv":2,"mil.lv":2,"net.lv":2,"org.lv":2,"ly":1,"com.ly":2,"edu.ly":2,"gov.ly":2,"id.ly":2,"med.ly":2,"net.ly":2,"org.ly":2,"plc.ly":2,"sch.ly":2,"ma":1,"ac.ma":2,"co.ma":2,"gov.ma":2,"net.ma":2,"org.ma":2,"press.ma":2,"mc":1,"asso.mc":2,"tm.mc":2,"md":1,"me":1,"ac.me":2,"co.me":2,"edu.me":2,"gov.me":2,"its.me":2,"net.me":2,"org.me":2,"priv.me":2,"mg":1,"co.mg":2,"com.mg":2,"edu.mg":2,"gov.mg":2,"mil.mg":2,"nom.mg":2,"org.mg":2,"prd.mg":2,"mh":1,"mil":1,"mk":1,"com.mk":2,"edu.mk":2,"gov.mk":2,"inf.mk":2,"name.mk":2,"net.mk":2,"org.mk":2,"ml":1,"ac.ml":2,"art.ml":2,"asso.ml":2,"com.ml":2,"edu.ml":2,"gouv.ml":2,"gov.ml":2,"info.ml":2,"inst.ml":2,"net.ml":2,"org.ml":2,"pr.ml":2,"presse.ml":2,"mm":2,"mn":1,"edu.mn":2,"gov.mn":2,"org.mn":2,"mo":1,"com.mo":2,"edu.mo":2,"gov.mo":2,"net.mo":2,"org.mo":2,"mobi":1,"mp":1,"mq":1,"mr":1,"gov.mr":2,"ms":1,"com.ms":2,"edu.ms":2,"gov.ms":2,"net.ms":2,"org.ms":2,"mt":1,"com.mt":2,"edu.mt":2,"net.mt":2,"org.mt":2,"mu":1,"ac.mu":2,"co.mu":2,"com.mu":2,"gov.mu":2,"net.mu":2,"or.mu":2,"org.mu":2,"museum":1,"mv":1,"aero.mv":2,"biz.mv":2,"com.mv":2,"coop.mv":2,"edu.mv":2,"gov.mv":2,"info.mv":2,"int.mv":2,"mil.mv":2,"museum.mv":2,"name.mv":2,"net.mv":2,"org.mv":2,"pro.mv":2,"mw":1,"ac.mw":2,"biz.mw":2,"co.mw":2,"com.mw":2,"coop.mw":2,"edu.mw":2,"gov.mw":2,"int.mw":2,"net.mw":2,"org.mw":2,"mx":1,"com.mx":2,"edu.mx":2,"gob.mx":2,"net.mx":2,"org.mx":2,"my":1,"biz.my":2,"com.my":2,"edu.my":2,"gov.my":2,"mil.my":2,"name.my":2,"net.my":2,"org.my":2,"mz":1,"ac.mz":2,"adv.mz":2,"co.mz":2,"edu.mz":2,"gov.mz":2,"mil.mz":2,"net.mz":2,"org.mz":2,"na":1,"alt.na":2,"co.na":2,"com.na":2,"gov.na":2,"net.na":2,"org.na":2,"name":1,"nc":1,"asso.nc":2,"nom.nc":2,"ne":1,"net":1,"nf":1,"arts.nf":2,"com.nf":2,"firm.nf":2,"info.nf":2,"net.nf":2,"other.nf":2,"per.nf":2,"rec.nf":2,"store.nf":2,"web.nf":2,"ng":1,"com.ng":2,"edu.ng":2,"gov.ng":2,"i.ng":2,"mil.ng":2,"mobi.ng":2,"name.ng":2,"net.ng":2,"org.ng":2,"sch.ng":2,"ni":1,"ac.ni":2,"biz.ni":2,"co.ni":2,"com.ni":2,"edu.ni":2,"gob.ni":2,"in.ni":2,"info.ni":2,"int.ni":2,"mil.ni":2,"net.ni":2,"nom.ni":2,"org.ni":2,"web.ni":2,"nl":1,"no":1,"fhs.no":2,"folkebibl.no":2,"fylkesbibl.no":2,"idrett.no":2,"museum.no":2,"priv.no":2,"vgs.no":2,"dep.no":2,"herad.no":2,"kommune.no":2,"mil.no":2,"stat.no":2,"aa.no":2,"ah.no":2,"bu.no":2,"fm.no":2,"hl.no":2,"hm.no":2,"jan-mayen.no":2,"mr.no":2,"nl.no":2,"nt.no":2,"of.no":2,"ol.no":2,"oslo.no":2,"rl.no":2,"sf.no":2,"st.no":2,"svalbard.no":2,"tm.no":2,"tr.no":2,"va.no":2,"vf.no":2,"gs.aa.no":3,"gs.ah.no":3,"gs.bu.no":3,"gs.fm.no":3,"gs.hl.no":3,"gs.hm.no":3,"gs.jan-mayen.no":3,"gs.mr.no":3,"gs.nl.no":3,"gs.nt.no":3,"gs.of.no":3,"gs.ol.no":3,"gs.oslo.no":3,"gs.rl.no":3,"gs.sf.no":3,"gs.st.no":3,"gs.svalbard.no":3,"gs.tm.no":3,"gs.tr.no":3,"gs.va.no":3,"gs.vf.no":3,"akrehamn.no":2,"xn--krehamn-dxa.no":2,"algard.no":2,"xn--lgrd-poac.no":2,"arna.no":2,"bronnoysund.no":2,"xn--brnnysund-m8ac.no":2,"brumunddal.no":2,"bryne.no":2,"drobak.no":2,"xn--drbak-wua.no":2,"egersund.no":2,"fetsund.no":2,"floro.no":2,"xn--flor-jra.no":2,"fredrikstad.no":2,"hokksund.no":2,"honefoss.no":2,"xn--hnefoss-q1a.no":2,"jessheim.no":2,"jorpeland.no":2,"xn--jrpeland-54a.no":2,"kirkenes.no":2,"kopervik.no":2,"krokstadelva.no":2,"langevag.no":2,"xn--langevg-jxa.no":2,"leirvik.no":2,"mjondalen.no":2,"xn--mjndalen-64a.no":2,"mo-i-rana.no":2,"mosjoen.no":2,"xn--mosjen-eya.no":2,"nesoddtangen.no":2,"orkanger.no":2,"osoyro.no":2,"xn--osyro-wua.no":2,"raholt.no":2,"xn--rholt-mra.no":2,"sandnessjoen.no":2,"xn--sandnessjen-ogb.no":2,"skedsmokorset.no":2,"slattum.no":2,"spjelkavik.no":2,"stathelle.no":2,"stavern.no":2,"stjordalshalsen.no":2,"xn--stjrdalshalsen-sqb.no":2,"tananger.no":2,"tranby.no":2,"vossevangen.no":2,"aarborte.no":2,"aejrie.no":2,"afjord.no":2,"xn--fjord-lra.no":2,"agdenes.no":2,"nes.akershus.no":3,"aknoluokta.no":2,"xn--koluokta-7ya57h.no":2,"al.no":2,"xn--l-1fa.no":2,"alaheadju.no":2,"xn--laheadju-7ya.no":2,"alesund.no":2,"xn--lesund-hua.no":2,"alstahaug.no":2,"alta.no":2,"xn--lt-liac.no":2,"alvdal.no":2,"amli.no":2,"xn--mli-tla.no":2,"amot.no":2,"xn--mot-tla.no":2,"andasuolo.no":2,"andebu.no":2,"andoy.no":2,"xn--andy-ira.no":2,"ardal.no":2,"xn--rdal-poa.no":2,"aremark.no":2,"arendal.no":2,"xn--s-1fa.no":2,"aseral.no":2,"xn--seral-lra.no":2,"asker.no":2,"askim.no":2,"askoy.no":2,"xn--asky-ira.no":2,"askvoll.no":2,"asnes.no":2,"xn--snes-poa.no":2,"audnedaln.no":2,"aukra.no":2,"aure.no":2,"aurland.no":2,"aurskog-holand.no":2,"xn--aurskog-hland-jnb.no":2,"austevoll.no":2,"austrheim.no":2,"averoy.no":2,"xn--avery-yua.no":2,"badaddja.no":2,"xn--bdddj-mrabd.no":2,"xn--brum-voa.no":2,"bahcavuotna.no":2,"xn--bhcavuotna-s4a.no":2,"bahccavuotna.no":2,"xn--bhccavuotna-k7a.no":2,"baidar.no":2,"xn--bidr-5nac.no":2,"bajddar.no":2,"xn--bjddar-pta.no":2,"balat.no":2,"xn--blt-elab.no":2,"balestrand.no":2,"ballangen.no":2,"balsfjord.no":2,"bamble.no":2,"bardu.no":2,"barum.no":2,"batsfjord.no":2,"xn--btsfjord-9za.no":2,"bearalvahki.no":2,"xn--bearalvhki-y4a.no":2,"beardu.no":2,"beiarn.no":2,"berg.no":2,"bergen.no":2,"berlevag.no":2,"xn--berlevg-jxa.no":2,"bievat.no":2,"xn--bievt-0qa.no":2,"bindal.no":2,"birkenes.no":2,"bjarkoy.no":2,"xn--bjarky-fya.no":2,"bjerkreim.no":2,"bjugn.no":2,"bodo.no":2,"xn--bod-2na.no":2,"bokn.no":2,"bomlo.no":2,"xn--bmlo-gra.no":2,"bremanger.no":2,"bronnoy.no":2,"xn--brnny-wuac.no":2,"budejju.no":2,"nes.buskerud.no":3,"bygland.no":2,"bykle.no":2,"cahcesuolo.no":2,"xn--hcesuolo-7ya35b.no":2,"davvenjarga.no":2,"xn--davvenjrga-y4a.no":2,"davvesiida.no":2,"deatnu.no":2,"dielddanuorri.no":2,"divtasvuodna.no":2,"divttasvuotna.no":2,"donna.no":2,"xn--dnna-gra.no":2,"dovre.no":2,"drammen.no":2,"drangedal.no":2,"dyroy.no":2,"xn--dyry-ira.no":2,"eid.no":2,"eidfjord.no":2,"eidsberg.no":2,"eidskog.no":2,"eidsvoll.no":2,"eigersund.no":2,"elverum.no":2,"enebakk.no":2,"engerdal.no":2,"etne.no":2,"etnedal.no":2,"evenassi.no":2,"xn--eveni-0qa01ga.no":2,"evenes.no":2,"evje-og-hornnes.no":2,"farsund.no":2,"fauske.no":2,"fedje.no":2,"fet.no":2,"finnoy.no":2,"xn--finny-yua.no":2,"fitjar.no":2,"fjaler.no":2,"fjell.no":2,"fla.no":2,"xn--fl-zia.no":2,"flakstad.no":2,"flatanger.no":2,"flekkefjord.no":2,"flesberg.no":2,"flora.no":2,"folldal.no":2,"forde.no":2,"xn--frde-gra.no":2,"forsand.no":2,"fosnes.no":2,"xn--frna-woa.no":2,"frana.no":2,"frei.no":2,"frogn.no":2,"froland.no":2,"frosta.no":2,"froya.no":2,"xn--frya-hra.no":2,"fuoisku.no":2,"fuossko.no":2,"fusa.no":2,"fyresdal.no":2,"gaivuotna.no":2,"xn--givuotna-8ya.no":2,"galsa.no":2,"xn--gls-elac.no":2,"gamvik.no":2,"gangaviika.no":2,"xn--ggaviika-8ya47h.no":2,"gaular.no":2,"gausdal.no":2,"giehtavuoatna.no":2,"gildeskal.no":2,"xn--gildeskl-g0a.no":2,"giske.no":2,"gjemnes.no":2,"gjerdrum.no":2,"gjerstad.no":2,"gjesdal.no":2,"gjovik.no":2,"xn--gjvik-wua.no":2,"gloppen.no":2,"gol.no":2,"gran.no":2,"grane.no":2,"granvin.no":2,"gratangen.no":2,"grimstad.no":2,"grong.no":2,"grue.no":2,"gulen.no":2,"guovdageaidnu.no":2,"ha.no":2,"xn--h-2fa.no":2,"habmer.no":2,"xn--hbmer-xqa.no":2,"hadsel.no":2,"xn--hgebostad-g3a.no":2,"hagebostad.no":2,"halden.no":2,"halsa.no":2,"hamar.no":2,"hamaroy.no":2,"hammarfeasta.no":2,"xn--hmmrfeasta-s4ac.no":2,"hammerfest.no":2,"hapmir.no":2,"xn--hpmir-xqa.no":2,"haram.no":2,"hareid.no":2,"harstad.no":2,"hasvik.no":2,"hattfjelldal.no":2,"haugesund.no":2,"os.hedmark.no":3,"valer.hedmark.no":3,"xn--vler-qoa.hedmark.no":3,"hemne.no":2,"hemnes.no":2,"hemsedal.no":2,"hitra.no":2,"hjartdal.no":2,"hjelmeland.no":2,"hobol.no":2,"xn--hobl-x70ya.no":2,"hof.no":2,"hol.no":2,"hole.no":2,"holmestrand.no":2,"holtalen.no":2,"xn--holtlen-hxa.no":2,"os.hordaland.no":3,"hornindal.no":2,"horten.no":2,"hoyanger.no":2,"xn--hyanger-q1a.no":2,"hoylandet.no":2,"xn--hylandet-54a.no":2,"hurdal.no":2,"hurum.no":2,"hvaler.no":2,"hyllestad.no":2,"ibestad.no":2,"inderoy.no":2,"xn--indery-fya.no":2,"iveland.no":2,"ivgu.no":2,"jevnaker.no":2,"jolster.no":2,"xn--jlster-bya.no":2,"jondal.no":2,"kafjord.no":2,"xn--kfjord-iua.no":2,"karasjohka.no":2,"xn--krjohka-hwab49j.no":2,"karasjok.no":2,"karlsoy.no":2,"karmoy.no":2,"xn--karmy-yua.no":2,"kautokeino.no":2,"klabu.no":2,"xn--klbu-woa.no":2,"klepp.no":2,"kongsberg.no":2,"kongsvinger.no":2,"kraanghke.no":2,"xn--kranghke-b0a.no":2,"kragero.no":2,"xn--krager-gya.no":2,"kristiansand.no":2,"kristiansund.no":2,"krodsherad.no":2,"xn--krdsherad-m8a.no":2,"xn--kvfjord-nxa.no":2,"xn--kvnangen-k0a.no":2,"kvafjord.no":2,"kvalsund.no":2,"kvam.no":2,"kvanangen.no":2,"kvinesdal.no":2,"kvinnherad.no":2,"kviteseid.no":2,"kvitsoy.no":2,"xn--kvitsy-fya.no":2,"laakesvuemie.no":2,"xn--lrdal-sra.no":2,"lahppi.no":2,"xn--lhppi-xqa.no":2,"lardal.no":2,"larvik.no":2,"lavagis.no":2,"lavangen.no":2,"leangaviika.no":2,"xn--leagaviika-52b.no":2,"lebesby.no":2,"leikanger.no":2,"leirfjord.no":2,"leka.no":2,"leksvik.no":2,"lenvik.no":2,"lerdal.no":2,"lesja.no":2,"levanger.no":2,"lier.no":2,"lierne.no":2,"lillehammer.no":2,"lillesand.no":2,"lindas.no":2,"xn--linds-pra.no":2,"lindesnes.no":2,"loabat.no":2,"xn--loabt-0qa.no":2,"lodingen.no":2,"xn--ldingen-q1a.no":2,"lom.no":2,"loppa.no":2,"lorenskog.no":2,"xn--lrenskog-54a.no":2,"loten.no":2,"xn--lten-gra.no":2,"lund.no":2,"lunner.no":2,"luroy.no":2,"xn--lury-ira.no":2,"luster.no":2,"lyngdal.no":2,"lyngen.no":2,"malatvuopmi.no":2,"xn--mlatvuopmi-s4a.no":2,"malselv.no":2,"xn--mlselv-iua.no":2,"malvik.no":2,"mandal.no":2,"marker.no":2,"marnardal.no":2,"masfjorden.no":2,"masoy.no":2,"xn--msy-ula0h.no":2,"matta-varjjat.no":2,"xn--mtta-vrjjat-k7af.no":2,"meland.no":2,"meldal.no":2,"melhus.no":2,"meloy.no":2,"xn--mely-ira.no":2,"meraker.no":2,"xn--merker-kua.no":2,"midsund.no":2,"midtre-gauldal.no":2,"moareke.no":2,"xn--moreke-jua.no":2,"modalen.no":2,"modum.no":2,"molde.no":2,"heroy.more-og-romsdal.no":3,"sande.more-og-romsdal.no":3,"xn--hery-ira.xn--mre-og-romsdal-qqb.no":3,"sande.xn--mre-og-romsdal-qqb.no":3,"moskenes.no":2,"moss.no":2,"mosvik.no":2,"muosat.no":2,"xn--muost-0qa.no":2,"naamesjevuemie.no":2,"xn--nmesjevuemie-tcba.no":2,"xn--nry-yla5g.no":2,"namdalseid.no":2,"namsos.no":2,"namsskogan.no":2,"nannestad.no":2,"naroy.no":2,"narviika.no":2,"narvik.no":2,"naustdal.no":2,"navuotna.no":2,"xn--nvuotna-hwa.no":2,"nedre-eiker.no":2,"nesna.no":2,"nesodden.no":2,"nesseby.no":2,"nesset.no":2,"nissedal.no":2,"nittedal.no":2,"nord-aurdal.no":2,"nord-fron.no":2,"nord-odal.no":2,"norddal.no":2,"nordkapp.no":2,"bo.nordland.no":3,"xn--b-5ga.nordland.no":3,"heroy.nordland.no":3,"xn--hery-ira.nordland.no":3,"nordre-land.no":2,"nordreisa.no":2,"nore-og-uvdal.no":2,"notodden.no":2,"notteroy.no":2,"xn--nttery-byae.no":2,"odda.no":2,"oksnes.no":2,"xn--ksnes-uua.no":2,"omasvuotna.no":2,"oppdal.no":2,"oppegard.no":2,"xn--oppegrd-ixa.no":2,"orkdal.no":2,"orland.no":2,"xn--rland-uua.no":2,"orskog.no":2,"xn--rskog-uua.no":2,"orsta.no":2,"xn--rsta-fra.no":2,"osen.no":2,"osteroy.no":2,"xn--ostery-fya.no":2,"valer.ostfold.no":3,"xn--vler-qoa.xn--stfold-9xa.no":3,"ostre-toten.no":2,"xn--stre-toten-zcb.no":2,"overhalla.no":2,"ovre-eiker.no":2,"xn--vre-eiker-k8a.no":2,"oyer.no":2,"xn--yer-zna.no":2,"oygarden.no":2,"xn--ygarden-p1a.no":2,"oystre-slidre.no":2,"xn--ystre-slidre-ujb.no":2,"porsanger.no":2,"porsangu.no":2,"xn--porsgu-sta26f.no":2,"porsgrunn.no":2,"rade.no":2,"xn--rde-ula.no":2,"radoy.no":2,"xn--rady-ira.no":2,"xn--rlingen-mxa.no":2,"rahkkeravju.no":2,"xn--rhkkervju-01af.no":2,"raisa.no":2,"xn--risa-5na.no":2,"rakkestad.no":2,"ralingen.no":2,"rana.no":2,"randaberg.no":2,"rauma.no":2,"rendalen.no":2,"rennebu.no":2,"rennesoy.no":2,"xn--rennesy-v1a.no":2,"rindal.no":2,"ringebu.no":2,"ringerike.no":2,"ringsaker.no":2,"risor.no":2,"xn--risr-ira.no":2,"rissa.no":2,"roan.no":2,"rodoy.no":2,"xn--rdy-0nab.no":2,"rollag.no":2,"romsa.no":2,"romskog.no":2,"xn--rmskog-bya.no":2,"roros.no":2,"xn--rros-gra.no":2,"rost.no":2,"xn--rst-0na.no":2,"royken.no":2,"xn--ryken-vua.no":2,"royrvik.no":2,"xn--ryrvik-bya.no":2,"ruovat.no":2,"rygge.no":2,"salangen.no":2,"salat.no":2,"xn--slat-5na.no":2,"xn--slt-elab.no":2,"saltdal.no":2,"samnanger.no":2,"sandefjord.no":2,"sandnes.no":2,"sandoy.no":2,"xn--sandy-yua.no":2,"sarpsborg.no":2,"sauda.no":2,"sauherad.no":2,"sel.no":2,"selbu.no":2,"selje.no":2,"seljord.no":2,"siellak.no":2,"sigdal.no":2,"siljan.no":2,"sirdal.no":2,"skanit.no":2,"xn--sknit-yqa.no":2,"skanland.no":2,"xn--sknland-fxa.no":2,"skaun.no":2,"skedsmo.no":2,"ski.no":2,"skien.no":2,"skierva.no":2,"xn--skierv-uta.no":2,"skiptvet.no":2,"skjak.no":2,"xn--skjk-soa.no":2,"skjervoy.no":2,"xn--skjervy-v1a.no":2,"skodje.no":2,"smola.no":2,"xn--smla-hra.no":2,"snaase.no":2,"xn--snase-nra.no":2,"snasa.no":2,"xn--snsa-roa.no":2,"snillfjord.no":2,"snoasa.no":2,"sogndal.no":2,"sogne.no":2,"xn--sgne-gra.no":2,"sokndal.no":2,"sola.no":2,"solund.no":2,"somna.no":2,"xn--smna-gra.no":2,"sondre-land.no":2,"xn--sndre-land-0cb.no":2,"songdalen.no":2,"sor-aurdal.no":2,"xn--sr-aurdal-l8a.no":2,"sor-fron.no":2,"xn--sr-fron-q1a.no":2,"sor-odal.no":2,"xn--sr-odal-q1a.no":2,"sor-varanger.no":2,"xn--sr-varanger-ggb.no":2,"sorfold.no":2,"xn--srfold-bya.no":2,"sorreisa.no":2,"xn--srreisa-q1a.no":2,"sortland.no":2,"sorum.no":2,"xn--srum-gra.no":2,"spydeberg.no":2,"stange.no":2,"stavanger.no":2,"steigen.no":2,"steinkjer.no":2,"stjordal.no":2,"xn--stjrdal-s1a.no":2,"stokke.no":2,"stor-elvdal.no":2,"stord.no":2,"stordal.no":2,"storfjord.no":2,"strand.no":2,"stranda.no":2,"stryn.no":2,"sula.no":2,"suldal.no":2,"sund.no":2,"sunndal.no":2,"surnadal.no":2,"sveio.no":2,"svelvik.no":2,"sykkylven.no":2,"tana.no":2,"bo.telemark.no":3,"xn--b-5ga.telemark.no":3,"time.no":2,"tingvoll.no":2,"tinn.no":2,"tjeldsund.no":2,"tjome.no":2,"xn--tjme-hra.no":2,"tokke.no":2,"tolga.no":2,"tonsberg.no":2,"xn--tnsberg-q1a.no":2,"torsken.no":2,"xn--trna-woa.no":2,"trana.no":2,"tranoy.no":2,"xn--trany-yua.no":2,"troandin.no":2,"trogstad.no":2,"xn--trgstad-r1a.no":2,"tromsa.no":2,"tromso.no":2,"xn--troms-zua.no":2,"trondheim.no":2,"trysil.no":2,"tvedestrand.no":2,"tydal.no":2,"tynset.no":2,"tysfjord.no":2,"tysnes.no":2,"xn--tysvr-vra.no":2,"tysvar.no":2,"ullensaker.no":2,"ullensvang.no":2,"ulvik.no":2,"unjarga.no":2,"xn--unjrga-rta.no":2,"utsira.no":2,"vaapste.no":2,"vadso.no":2,"xn--vads-jra.no":2,"xn--vry-yla5g.no":2,"vaga.no":2,"xn--vg-yiab.no":2,"vagan.no":2,"xn--vgan-qoa.no":2,"vagsoy.no":2,"xn--vgsy-qoa0j.no":2,"vaksdal.no":2,"valle.no":2,"vang.no":2,"vanylven.no":2,"vardo.no":2,"xn--vard-jra.no":2,"varggat.no":2,"xn--vrggt-xqad.no":2,"varoy.no":2,"vefsn.no":2,"vega.no":2,"vegarshei.no":2,"xn--vegrshei-c0a.no":2,"vennesla.no":2,"verdal.no":2,"verran.no":2,"vestby.no":2,"sande.vestfold.no":3,"vestnes.no":2,"vestre-slidre.no":2,"vestre-toten.no":2,"vestvagoy.no":2,"xn--vestvgy-ixa6o.no":2,"vevelstad.no":2,"vik.no":2,"vikna.no":2,"vindafjord.no":2,"voagat.no":2,"volda.no":2,"voss.no":2,"np":2,"nr":1,"biz.nr":2,"com.nr":2,"edu.nr":2,"gov.nr":2,"info.nr":2,"net.nr":2,"org.nr":2,"nu":1,"nz":1,"ac.nz":2,"co.nz":2,"cri.nz":2,"geek.nz":2,"gen.nz":2,"govt.nz":2,"health.nz":2,"iwi.nz":2,"kiwi.nz":2,"maori.nz":2,"xn--mori-qsa.nz":2,"mil.nz":2,"net.nz":2,"org.nz":2,"parliament.nz":2,"school.nz":2,"om":1,"co.om":2,"com.om":2,"edu.om":2,"gov.om":2,"med.om":2,"museum.om":2,"net.om":2,"org.om":2,"pro.om":2,"onion":1,"org":1,"pa":1,"abo.pa":2,"ac.pa":2,"com.pa":2,"edu.pa":2,"gob.pa":2,"ing.pa":2,"med.pa":2,"net.pa":2,"nom.pa":2,"org.pa":2,"sld.pa":2,"pe":1,"com.pe":2,"edu.pe":2,"gob.pe":2,"mil.pe":2,"net.pe":2,"nom.pe":2,"org.pe":2,"pf":1,"com.pf":2,"edu.pf":2,"org.pf":2,"pg":2,"ph":1,"com.ph":2,"edu.ph":2,"gov.ph":2,"i.ph":2,"mil.ph":2,"net.ph":2,"ngo.ph":2,"org.ph":2,"pk":1,"ac.pk":2,"biz.pk":2,"com.pk":2,"edu.pk":2,"fam.pk":2,"gkp.pk":2,"gob.pk":2,"gog.pk":2,"gok.pk":2,"gop.pk":2,"gos.pk":2,"gov.pk":2,"net.pk":2,"org.pk":2,"web.pk":2,"pl":1,"com.pl":2,"net.pl":2,"org.pl":2,"agro.pl":2,"aid.pl":2,"atm.pl":2,"auto.pl":2,"biz.pl":2,"edu.pl":2,"gmina.pl":2,"gsm.pl":2,"info.pl":2,"mail.pl":2,"media.pl":2,"miasta.pl":2,"mil.pl":2,"nieruchomosci.pl":2,"nom.pl":2,"pc.pl":2,"powiat.pl":2,"priv.pl":2,"realestate.pl":2,"rel.pl":2,"sex.pl":2,"shop.pl":2,"sklep.pl":2,"sos.pl":2,"szkola.pl":2,"targi.pl":2,"tm.pl":2,"tourism.pl":2,"travel.pl":2,"turystyka.pl":2,"gov.pl":2,"ap.gov.pl":3,"griw.gov.pl":3,"ic.gov.pl":3,"is.gov.pl":3,"kmpsp.gov.pl":3,"konsulat.gov.pl":3,"kppsp.gov.pl":3,"kwp.gov.pl":3,"kwpsp.gov.pl":3,"mup.gov.pl":3,"mw.gov.pl":3,"oia.gov.pl":3,"oirm.gov.pl":3,"oke.gov.pl":3,"oow.gov.pl":3,"oschr.gov.pl":3,"oum.gov.pl":3,"pa.gov.pl":3,"pinb.gov.pl":3,"piw.gov.pl":3,"po.gov.pl":3,"pr.gov.pl":3,"psp.gov.pl":3,"psse.gov.pl":3,"pup.gov.pl":3,"rzgw.gov.pl":3,"sa.gov.pl":3,"sdn.gov.pl":3,"sko.gov.pl":3,"so.gov.pl":3,"sr.gov.pl":3,"starostwo.gov.pl":3,"ug.gov.pl":3,"ugim.gov.pl":3,"um.gov.pl":3,"umig.gov.pl":3,"upow.gov.pl":3,"uppo.gov.pl":3,"us.gov.pl":3,"uw.gov.pl":3,"uzs.gov.pl":3,"wif.gov.pl":3,"wiih.gov.pl":3,"winb.gov.pl":3,"wios.gov.pl":3,"witd.gov.pl":3,"wiw.gov.pl":3,"wkz.gov.pl":3,"wsa.gov.pl":3,"wskr.gov.pl":3,"wsse.gov.pl":3,"wuoz.gov.pl":3,"wzmiuw.gov.pl":3,"zp.gov.pl":3,"zpisdn.gov.pl":3,"augustow.pl":2,"babia-gora.pl":2,"bedzin.pl":2,"beskidy.pl":2,"bialowieza.pl":2,"bialystok.pl":2,"bielawa.pl":2,"bieszczady.pl":2,"boleslawiec.pl":2,"bydgoszcz.pl":2,"bytom.pl":2,"cieszyn.pl":2,"czeladz.pl":2,"czest.pl":2,"dlugoleka.pl":2,"elblag.pl":2,"elk.pl":2,"glogow.pl":2,"gniezno.pl":2,"gorlice.pl":2,"grajewo.pl":2,"ilawa.pl":2,"jaworzno.pl":2,"jelenia-gora.pl":2,"jgora.pl":2,"kalisz.pl":2,"karpacz.pl":2,"kartuzy.pl":2,"kaszuby.pl":2,"katowice.pl":2,"kazimierz-dolny.pl":2,"kepno.pl":2,"ketrzyn.pl":2,"klodzko.pl":2,"kobierzyce.pl":2,"kolobrzeg.pl":2,"konin.pl":2,"konskowola.pl":2,"kutno.pl":2,"lapy.pl":2,"lebork.pl":2,"legnica.pl":2,"lezajsk.pl":2,"limanowa.pl":2,"lomza.pl":2,"lowicz.pl":2,"lubin.pl":2,"lukow.pl":2,"malbork.pl":2,"malopolska.pl":2,"mazowsze.pl":2,"mazury.pl":2,"mielec.pl":2,"mielno.pl":2,"mragowo.pl":2,"naklo.pl":2,"nowaruda.pl":2,"nysa.pl":2,"olawa.pl":2,"olecko.pl":2,"olkusz.pl":2,"olsztyn.pl":2,"opoczno.pl":2,"opole.pl":2,"ostroda.pl":2,"ostroleka.pl":2,"ostrowiec.pl":2,"ostrowwlkp.pl":2,"pila.pl":2,"pisz.pl":2,"podhale.pl":2,"podlasie.pl":2,"polkowice.pl":2,"pomorskie.pl":2,"pomorze.pl":2,"prochowice.pl":2,"pruszkow.pl":2,"przeworsk.pl":2,"pulawy.pl":2,"radom.pl":2,"rawa-maz.pl":2,"rybnik.pl":2,"rzeszow.pl":2,"sanok.pl":2,"sejny.pl":2,"skoczow.pl":2,"slask.pl":2,"slupsk.pl":2,"sosnowiec.pl":2,"stalowa-wola.pl":2,"starachowice.pl":2,"stargard.pl":2,"suwalki.pl":2,"swidnica.pl":2,"swiebodzin.pl":2,"swinoujscie.pl":2,"szczecin.pl":2,"szczytno.pl":2,"tarnobrzeg.pl":2,"tgory.pl":2,"turek.pl":2,"tychy.pl":2,"ustka.pl":2,"walbrzych.pl":2,"warmia.pl":2,"warszawa.pl":2,"waw.pl":2,"wegrow.pl":2,"wielun.pl":2,"wlocl.pl":2,"wloclawek.pl":2,"wodzislaw.pl":2,"wolomin.pl":2,"wroclaw.pl":2,"zachpomor.pl":2,"zagan.pl":2,"zarow.pl":2,"zgora.pl":2,"zgorzelec.pl":2,"pm":1,"pn":1,"co.pn":2,"edu.pn":2,"gov.pn":2,"net.pn":2,"org.pn":2,"post":1,"pr":1,"biz.pr":2,"com.pr":2,"edu.pr":2,"gov.pr":2,"info.pr":2,"isla.pr":2,"name.pr":2,"net.pr":2,"org.pr":2,"pro.pr":2,"ac.pr":2,"est.pr":2,"prof.pr":2,"pro":1,"aaa.pro":2,"aca.pro":2,"acct.pro":2,"avocat.pro":2,"bar.pro":2,"cpa.pro":2,"eng.pro":2,"jur.pro":2,"law.pro":2,"med.pro":2,"recht.pro":2,"ps":1,"com.ps":2,"edu.ps":2,"gov.ps":2,"net.ps":2,"org.ps":2,"plo.ps":2,"sec.ps":2,"pt":1,"com.pt":2,"edu.pt":2,"gov.pt":2,"int.pt":2,"net.pt":2,"nome.pt":2,"org.pt":2,"publ.pt":2,"pw":1,"gov.pw":2,"py":1,"com.py":2,"coop.py":2,"edu.py":2,"gov.py":2,"mil.py":2,"net.py":2,"org.py":2,"qa":1,"com.qa":2,"edu.qa":2,"gov.qa":2,"mil.qa":2,"name.qa":2,"net.qa":2,"org.qa":2,"sch.qa":2,"re":1,"asso.re":2,"com.re":2,"ro":1,"arts.ro":2,"com.ro":2,"firm.ro":2,"info.ro":2,"nom.ro":2,"nt.ro":2,"org.ro":2,"rec.ro":2,"store.ro":2,"tm.ro":2,"www.ro":2,"rs":1,"ac.rs":2,"co.rs":2,"edu.rs":2,"gov.rs":2,"in.rs":2,"org.rs":2,"ru":1,"rw":1,"ac.rw":2,"co.rw":2,"coop.rw":2,"gov.rw":2,"mil.rw":2,"net.rw":2,"org.rw":2,"sa":1,"com.sa":2,"edu.sa":2,"gov.sa":2,"med.sa":2,"net.sa":2,"org.sa":2,"pub.sa":2,"sch.sa":2,"sb":1,"com.sb":2,"edu.sb":2,"gov.sb":2,"net.sb":2,"org.sb":2,"sc":1,"com.sc":2,"edu.sc":2,"gov.sc":2,"net.sc":2,"org.sc":2,"sd":1,"com.sd":2,"edu.sd":2,"gov.sd":2,"info.sd":2,"med.sd":2,"net.sd":2,"org.sd":2,"tv.sd":2,"se":1,"a.se":2,"ac.se":2,"b.se":2,"bd.se":2,"brand.se":2,"c.se":2,"d.se":2,"e.se":2,"f.se":2,"fh.se":2,"fhsk.se":2,"fhv.se":2,"g.se":2,"h.se":2,"i.se":2,"k.se":2,"komforb.se":2,"kommunalforbund.se":2,"komvux.se":2,"l.se":2,"lanbib.se":2,"m.se":2,"n.se":2,"naturbruksgymn.se":2,"o.se":2,"org.se":2,"p.se":2,"parti.se":2,"pp.se":2,"press.se":2,"r.se":2,"s.se":2,"t.se":2,"tm.se":2,"u.se":2,"w.se":2,"x.se":2,"y.se":2,"z.se":2,"sg":1,"com.sg":2,"edu.sg":2,"gov.sg":2,"net.sg":2,"org.sg":2,"sh":1,"com.sh":2,"gov.sh":2,"mil.sh":2,"net.sh":2,"org.sh":2,"si":1,"sj":1,"sk":1,"sl":1,"com.sl":2,"edu.sl":2,"gov.sl":2,"net.sl":2,"org.sl":2,"sm":1,"sn":1,"art.sn":2,"com.sn":2,"edu.sn":2,"gouv.sn":2,"org.sn":2,"perso.sn":2,"univ.sn":2,"so":1,"com.so":2,"edu.so":2,"gov.so":2,"me.so":2,"net.so":2,"org.so":2,"sr":1,"ss":1,"biz.ss":2,"co.ss":2,"com.ss":2,"edu.ss":2,"gov.ss":2,"me.ss":2,"net.ss":2,"org.ss":2,"sch.ss":2,"st":1,"co.st":2,"com.st":2,"consulado.st":2,"edu.st":2,"embaixada.st":2,"mil.st":2,"net.st":2,"org.st":2,"principe.st":2,"saotome.st":2,"store.st":2,"su":1,"sv":1,"com.sv":2,"edu.sv":2,"gob.sv":2,"org.sv":2,"red.sv":2,"sx":1,"gov.sx":2,"sy":1,"com.sy":2,"edu.sy":2,"gov.sy":2,"mil.sy":2,"net.sy":2,"org.sy":2,"sz":1,"ac.sz":2,"co.sz":2,"org.sz":2,"tc":1,"td":1,"tel":1,"tf":1,"tg":1,"th":1,"ac.th":2,"co.th":2,"go.th":2,"in.th":2,"mi.th":2,"net.th":2,"or.th":2,"tj":1,"ac.tj":2,"biz.tj":2,"co.tj":2,"com.tj":2,"edu.tj":2,"go.tj":2,"gov.tj":2,"int.tj":2,"mil.tj":2,"name.tj":2,"net.tj":2,"nic.tj":2,"org.tj":2,"test.tj":2,"web.tj":2,"tk":1,"tl":1,"gov.tl":2,"tm":1,"co.tm":2,"com.tm":2,"edu.tm":2,"gov.tm":2,"mil.tm":2,"net.tm":2,"nom.tm":2,"org.tm":2,"tn":1,"com.tn":2,"ens.tn":2,"fin.tn":2,"gov.tn":2,"ind.tn":2,"info.tn":2,"intl.tn":2,"mincom.tn":2,"nat.tn":2,"net.tn":2,"org.tn":2,"perso.tn":2,"tourism.tn":2,"to":1,"com.to":2,"edu.to":2,"gov.to":2,"mil.to":2,"net.to":2,"org.to":2,"tr":1,"av.tr":2,"bbs.tr":2,"bel.tr":2,"biz.tr":2,"com.tr":2,"dr.tr":2,"edu.tr":2,"gen.tr":2,"gov.tr":2,"info.tr":2,"k12.tr":2,"kep.tr":2,"mil.tr":2,"name.tr":2,"net.tr":2,"org.tr":2,"pol.tr":2,"tel.tr":2,"tsk.tr":2,"tv.tr":2,"web.tr":2,"nc.tr":2,"gov.nc.tr":3,"tt":1,"biz.tt":2,"co.tt":2,"com.tt":2,"edu.tt":2,"gov.tt":2,"info.tt":2,"mil.tt":2,"name.tt":2,"net.tt":2,"org.tt":2,"pro.tt":2,"tv":1,"tw":1,"club.tw":2,"com.tw":2,"ebiz.tw":2,"edu.tw":2,"game.tw":2,"gov.tw":2,"idv.tw":2,"mil.tw":2,"net.tw":2,"org.tw":2,"tz":1,"ac.tz":2,"co.tz":2,"go.tz":2,"hotel.tz":2,"info.tz":2,"me.tz":2,"mil.tz":2,"mobi.tz":2,"ne.tz":2,"or.tz":2,"sc.tz":2,"tv.tz":2,"ua":1,"com.ua":2,"edu.ua":2,"gov.ua":2,"in.ua":2,"net.ua":2,"org.ua":2,"cherkassy.ua":2,"cherkasy.ua":2,"chernigov.ua":2,"chernihiv.ua":2,"chernivtsi.ua":2,"chernovtsy.ua":2,"ck.ua":2,"cn.ua":2,"cr.ua":2,"crimea.ua":2,"cv.ua":2,"dn.ua":2,"dnepropetrovsk.ua":2,"dnipropetrovsk.ua":2,"donetsk.ua":2,"dp.ua":2,"if.ua":2,"ivano-frankivsk.ua":2,"kh.ua":2,"kharkiv.ua":2,"kharkov.ua":2,"kherson.ua":2,"khmelnitskiy.ua":2,"khmelnytskyi.ua":2,"kiev.ua":2,"kirovograd.ua":2,"km.ua":2,"kr.ua":2,"kropyvnytskyi.ua":2,"krym.ua":2,"ks.ua":2,"kv.ua":2,"kyiv.ua":2,"lg.ua":2,"lt.ua":2,"lugansk.ua":2,"luhansk.ua":2,"lutsk.ua":2,"lv.ua":2,"lviv.ua":2,"mk.ua":2,"mykolaiv.ua":2,"nikolaev.ua":2,"od.ua":2,"odesa.ua":2,"odessa.ua":2,"pl.ua":2,"poltava.ua":2,"rivne.ua":2,"rovno.ua":2,"rv.ua":2,"sb.ua":2,"sebastopol.ua":2,"sevastopol.ua":2,"sm.ua":2,"sumy.ua":2,"te.ua":2,"ternopil.ua":2,"uz.ua":2,"uzhgorod.ua":2,"uzhhorod.ua":2,"vinnica.ua":2,"vinnytsia.ua":2,"vn.ua":2,"volyn.ua":2,"yalta.ua":2,"zakarpattia.ua":2,"zaporizhzhe.ua":2,"zaporizhzhia.ua":2,"zhitomir.ua":2,"zhytomyr.ua":2,"zp.ua":2,"zt.ua":2,"ug":1,"ac.ug":2,"co.ug":2,"com.ug":2,"edu.ug":2,"go.ug":2,"gov.ug":2,"mil.ug":2,"ne.ug":2,"or.ug":2,"org.ug":2,"sc.ug":2,"us.ug":2,"uk":1,"ac.uk":2,"co.uk":2,"gov.uk":2,"ltd.uk":2,"me.uk":2,"net.uk":2,"nhs.uk":2,"org.uk":2,"plc.uk":2,"police.uk":2,"sch.uk":3,"us":1,"dni.us":2,"isa.us":2,"nsn.us":2,"ak.us":2,"al.us":2,"ar.us":2,"as.us":2,"az.us":2,"ca.us":2,"co.us":2,"ct.us":2,"dc.us":2,"de.us":2,"fl.us":2,"ga.us":2,"gu.us":2,"hi.us":2,"ia.us":2,"id.us":2,"il.us":2,"in.us":2,"ks.us":2,"ky.us":2,"la.us":2,"ma.us":2,"md.us":2,"me.us":2,"mi.us":2,"mn.us":2,"mo.us":2,"ms.us":2,"mt.us":2,"nc.us":2,"nd.us":2,"ne.us":2,"nh.us":2,"nj.us":2,"nm.us":2,"nv.us":2,"ny.us":2,"oh.us":2,"ok.us":2,"or.us":2,"pa.us":2,"pr.us":2,"ri.us":2,"sc.us":2,"sd.us":2,"tn.us":2,"tx.us":2,"ut.us":2,"va.us":2,"vi.us":2,"vt.us":2,"wa.us":2,"wi.us":2,"wv.us":2,"wy.us":2,"k12.ak.us":3,"k12.al.us":3,"k12.ar.us":3,"k12.as.us":3,"k12.az.us":3,"k12.ca.us":3,"k12.co.us":3,"k12.ct.us":3,"k12.dc.us":3,"k12.fl.us":3,"k12.ga.us":3,"k12.gu.us":3,"k12.ia.us":3,"k12.id.us":3,"k12.il.us":3,"k12.in.us":3,"k12.ks.us":3,"k12.ky.us":3,"k12.la.us":3,"k12.ma.us":3,"k12.md.us":3,"k12.me.us":3,"k12.mi.us":3,"k12.mn.us":3,"k12.mo.us":3,"k12.ms.us":3,"k12.mt.us":3,"k12.nc.us":3,"k12.ne.us":3,"k12.nh.us":3,"k12.nj.us":3,"k12.nm.us":3,"k12.nv.us":3,"k12.ny.us":3,"k12.oh.us":3,"k12.ok.us":3,"k12.or.us":3,"k12.pa.us":3,"k12.pr.us":3,"k12.sc.us":3,"k12.tn.us":3,"k12.tx.us":3,"k12.ut.us":3,"k12.va.us":3,"k12.vi.us":3,"k12.vt.us":3,"k12.wa.us":3,"k12.wi.us":3,"cc.ak.us":3,"lib.ak.us":3,"cc.al.us":3,"lib.al.us":3,"cc.ar.us":3,"lib.ar.us":3,"cc.as.us":3,"lib.as.us":3,"cc.az.us":3,"lib.az.us":3,"cc.ca.us":3,"lib.ca.us":3,"cc.co.us":3,"lib.co.us":3,"cc.ct.us":3,"lib.ct.us":3,"cc.dc.us":3,"lib.dc.us":3,"cc.de.us":3,"cc.fl.us":3,"cc.ga.us":3,"cc.gu.us":3,"cc.hi.us":3,"cc.ia.us":3,"cc.id.us":3,"cc.il.us":3,"cc.in.us":3,"cc.ks.us":3,"cc.ky.us":3,"cc.la.us":3,"cc.ma.us":3,"cc.md.us":3,"cc.me.us":3,"cc.mi.us":3,"cc.mn.us":3,"cc.mo.us":3,"cc.ms.us":3,"cc.mt.us":3,"cc.nc.us":3,"cc.nd.us":3,"cc.ne.us":3,"cc.nh.us":3,"cc.nj.us":3,"cc.nm.us":3,"cc.nv.us":3,"cc.ny.us":3,"cc.oh.us":3,"cc.ok.us":3,"cc.or.us":3,"cc.pa.us":3,"cc.pr.us":3,"cc.ri.us":3,"cc.sc.us":3,"cc.sd.us":3,"cc.tn.us":3,"cc.tx.us":3,"cc.ut.us":3,"cc.va.us":3,"cc.vi.us":3,"cc.vt.us":3,"cc.wa.us":3,"cc.wi.us":3,"cc.wv.us":3,"cc.wy.us":3,"k12.wy.us":3,"lib.fl.us":3,"lib.ga.us":3,"lib.gu.us":3,"lib.hi.us":3,"lib.ia.us":3,"lib.id.us":3,"lib.il.us":3,"lib.in.us":3,"lib.ks.us":3,"lib.ky.us":3,"lib.la.us":3,"lib.ma.us":3,"lib.md.us":3,"lib.me.us":3,"lib.mi.us":3,"lib.mn.us":3,"lib.mo.us":3,"lib.ms.us":3,"lib.mt.us":3,"lib.nc.us":3,"lib.nd.us":3,"lib.ne.us":3,"lib.nh.us":3,"lib.nj.us":3,"lib.nm.us":3,"lib.nv.us":3,"lib.ny.us":3,"lib.oh.us":3,"lib.ok.us":3,"lib.or.us":3,"lib.pa.us":3,"lib.pr.us":3,"lib.ri.us":3,"lib.sc.us":3,"lib.sd.us":3,"lib.tn.us":3,"lib.tx.us":3,"lib.ut.us":3,"lib.va.us":3,"lib.vi.us":3,"lib.vt.us":3,"lib.wa.us":3,"lib.wi.us":3,"lib.wy.us":3,"chtr.k12.ma.us":4,"paroch.k12.ma.us":4,"pvt.k12.ma.us":4,"ann-arbor.mi.us":3,"cog.mi.us":3,"dst.mi.us":3,"eaton.mi.us":3,"gen.mi.us":3,"mus.mi.us":3,"tec.mi.us":3,"washtenaw.mi.us":3,"uy":1,"com.uy":2,"edu.uy":2,"gub.uy":2,"mil.uy":2,"net.uy":2,"org.uy":2,"uz":1,"co.uz":2,"com.uz":2,"net.uz":2,"org.uz":2,"va":1,"vc":1,"com.vc":2,"edu.vc":2,"gov.vc":2,"mil.vc":2,"net.vc":2,"org.vc":2,"ve":1,"arts.ve":2,"bib.ve":2,"co.ve":2,"com.ve":2,"e12.ve":2,"edu.ve":2,"emprende.ve":2,"firm.ve":2,"gob.ve":2,"gov.ve":2,"info.ve":2,"int.ve":2,"mil.ve":2,"net.ve":2,"nom.ve":2,"org.ve":2,"rar.ve":2,"rec.ve":2,"store.ve":2,"tec.ve":2,"web.ve":2,"vg":1,"edu.vg":2,"vi":1,"co.vi":2,"com.vi":2,"k12.vi":2,"net.vi":2,"org.vi":2,"vn":1,"ac.vn":2,"ai.vn":2,"biz.vn":2,"com.vn":2,"edu.vn":2,"gov.vn":2,"health.vn":2,"id.vn":2,"info.vn":2,"int.vn":2,"io.vn":2,"name.vn":2,"net.vn":2,"org.vn":2,"pro.vn":2,"angiang.vn":2,"bacgiang.vn":2,"backan.vn":2,"baclieu.vn":2,"bacninh.vn":2,"baria-vungtau.vn":2,"bentre.vn":2,"binhdinh.vn":2,"binhduong.vn":2,"binhphuoc.vn":2,"binhthuan.vn":2,"camau.vn":2,"cantho.vn":2,"caobang.vn":2,"daklak.vn":2,"daknong.vn":2,"danang.vn":2,"dienbien.vn":2,"dongnai.vn":2,"dongthap.vn":2,"gialai.vn":2,"hagiang.vn":2,"haiduong.vn":2,"haiphong.vn":2,"hanam.vn":2,"hanoi.vn":2,"hatinh.vn":2,"haugiang.vn":2,"hoabinh.vn":2,"hungyen.vn":2,"khanhhoa.vn":2,"kiengiang.vn":2,"kontum.vn":2,"laichau.vn":2,"lamdong.vn":2,"langson.vn":2,"laocai.vn":2,"longan.vn":2,"namdinh.vn":2,"nghean.vn":2,"ninhbinh.vn":2,"ninhthuan.vn":2,"phutho.vn":2,"phuyen.vn":2,"quangbinh.vn":2,"quangnam.vn":2,"quangngai.vn":2,"quangninh.vn":2,"quangtri.vn":2,"soctrang.vn":2,"sonla.vn":2,"tayninh.vn":2,"thaibinh.vn":2,"thainguyen.vn":2,"thanhhoa.vn":2,"thanhphohochiminh.vn":2,"thuathienhue.vn":2,"tiengiang.vn":2,"travinh.vn":2,"tuyenquang.vn":2,"vinhlong.vn":2,"vinhphuc.vn":2,"yenbai.vn":2,"vu":1,"com.vu":2,"edu.vu":2,"net.vu":2,"org.vu":2,"wf":1,"ws":1,"com.ws":2,"edu.ws":2,"gov.ws":2,"net.ws":2,"org.ws":2,"yt":1,"xn--mgbaam7a8h":1,"xn--y9a3aq":1,"xn--54b7fta0cc":1,"xn--90ae":1,"xn--mgbcpq6gpa1a":1,"xn--90au3644qa":1,"xn--fiqs8s":1,"xn--fiqz9s":1,"xn--lgbbat1ad8j":1,"xn--wgbh1c":1,"xn--e1a4c":1,"xn--qxa6a":1,"xn--mgbah1a3hjkrd":1,"xn--node":1,"xn--qxam":1,"xn--j6w193g":1,"xn--gmqw5a.xn--j6w193g":2,"xn--55qx5d.xn--j6w193g":2,"xn--mxtq1m.xn--j6w193g":2,"xn--wcvs22d.xn--j6w193g":2,"xn--uc0atv.xn--j6w193g":2,"xn--od0alg.xn--j6w193g":2,"xn--2scrj9c":1,"xn--3hcrj9c":1,"xn--45br5cyl":1,"xn--h2breg3eve":1,"xn--h2brj9c8c":1,"xn--mgbgu82a":1,"xn--rvc1e0am3e":1,"xn--h2brj9c":1,"xn--mgbbh1a":1,"xn--mgbbh1a71e":1,"xn--fpcrj9c3d":1,"xn--gecrj9c":1,"xn--s9brj9c":1,"xn--45brj9c":1,"xn--xkc2dl3a5ee0h":1,"xn--mgba3a4f16a":1,"xn--mgba3a4fra":1,"xn--mgbtx2b":1,"xn--mgbayh7gpa":1,"xn--3e0b707e":1,"xn--80ao21a":1,"xn--q7ce6a":1,"xn--fzc2c9e2c":1,"xn--xkc2al3hye2a":1,"xn--mgbc0a9azcg":1,"xn--d1alf":1,"xn--l1acc":1,"xn--mix891f":1,"xn--mix082f":1,"xn--mgbx4cd0ab":1,"xn--mgb9awbf":1,"xn--mgbai9azgqp6j":1,"xn--mgbai9a5eva00b":1,"xn--ygbi2ammx":1,"xn--90a3ac":1,"xn--80au.xn--90a3ac":2,"xn--90azh.xn--90a3ac":2,"xn--d1at.xn--90a3ac":2,"xn--c1avg.xn--90a3ac":2,"xn--o1ac.xn--90a3ac":2,"xn--o1ach.xn--90a3ac":2,"xn--p1ai":1,"xn--wgbl6a":1,"xn--mgberp4a5d4ar":1,"xn--mgberp4a5d4a87g":1,"xn--mgbqly7c0a67fbc":1,"xn--mgbqly7cvafr":1,"xn--mgbpl2fh":1,"xn--yfro4i67o":1,"xn--clchc0ea0b3ipdcd73789da":1,"xn--ogbpf8fl":1,"xn--mgbtf8fl":1,"xn--o3cw4h":1,"xn--o3cyx2a.xn--o3cw4h":2,"xn--12co0c3b4eva.xn--o3cw4h":2,"xn--m3ch0j3a.xn--o3cw4h":2,"xn--h3cuzk1di.xn--o3cw4h":2,"xn--12c1fe0br.xn--o3cw4h":2,"xn--12cfi8ixb8l.xn--o3cw4h":2,"xn--pgbs0dh":1,"xn--kpry57d":1,"xn--kprw13d":1,"xn--nnx388a":1,"xn--j1amh":1,"xn--mgb2ddes":1,"xxx":1,"ye":1,"com.ye":2,"edu.ye":2,"gov.ye":2,"mil.ye":2,"net.ye":2,"org.ye":2,"ac.za":2,"agric.za":2,"alt.za":2,"co.za":2,"edu.za":2,"gov.za":2,"grondar.za":2,"law.za":2,"mil.za":2,"net.za":2,"ngo.za":2,"nic.za":2,"nis.za":2,"nom.za":2,"org.za":2,"school.za":2,"tm.za":2,"web.za":2,"zm":1,"ac.zm":2,"biz.zm":2,"co.zm":2,"com.zm":2,"edu.zm":2,"gov.zm":2,"info.zm":2,"mil.zm":2,"net.zm":2,"org.zm":2,"sch.zm":2,"zw":1,"ac.zw":2,"co.zw":2,"gov.zw":2,"mil.zw":2,"org.zw":2,"aaa":1,"aarp":1,"abb":1,"abbott":1,"abbvie":1,"abc":1,"able":1,"abogado":1,"abudhabi":1,"academy":1,"accenture":1,"accountant":1,"accountants":1,"aco":1,"actor":1,"ads":1,"adult":1,"aeg":1,"aetna":1,"afl":1,"africa":1,"agakhan":1,"agency":1,"aig":1,"airbus":1,"airforce":1,"airtel":1,"akdn":1,"alibaba":1,"alipay":1,"allfinanz":1,"allstate":1,"ally":1,"alsace":1,"alstom":1,"amazon":1,"americanexpress":1,"americanfamily":1,"amex":1,"amfam":1,"amica":1,"amsterdam":1,"analytics":1,"android":1,"anquan":1,"anz":1,"aol":1,"apartments":1,"app":1,"apple":1,"aquarelle":1,"arab":1,"aramco":1,"archi":1,"army":1,"art":1,"arte":1,"asda":1,"associates":1,"athleta":1,"attorney":1,"auction":1,"audi":1,"audible":1,"audio":1,"auspost":1,"author":1,"auto":1,"autos":1,"aws":1,"axa":1,"azure":1,"baby":1,"baidu":1,"banamex":1,"band":1,"bank":1,"bar":1,"barcelona":1,"barclaycard":1,"barclays":1,"barefoot":1,"bargains":1,"baseball":1,"basketball":1,"bauhaus":1,"bayern":1,"bbc":1,"bbt":1,"bbva":1,"bcg":1,"bcn":1,"beats":1,"beauty":1,"beer":1,"berlin":1,"best":1,"bestbuy":1,"bet":1,"bharti":1,"bible":1,"bid":1,"bike":1,"bing":1,"bingo":1,"bio":1,"black":1,"blackfriday":1,"blockbuster":1,"blog":1,"bloomberg":1,"blue":1,"bms":1,"bmw":1,"bnpparibas":1,"boats":1,"boehringer":1,"bofa":1,"bom":1,"bond":1,"boo":1,"book":1,"booking":1,"bosch":1,"bostik":1,"boston":1,"bot":1,"boutique":1,"box":1,"bradesco":1,"bridgestone":1,"broadway":1,"broker":1,"brother":1,"brussels":1,"build":1,"builders":1,"business":1,"buy":1,"buzz":1,"bzh":1,"cab":1,"cafe":1,"cal":1,"call":1,"calvinklein":1,"cam":1,"camera":1,"camp":1,"canon":1,"capetown":1,"capital":1,"capitalone":1,"car":1,"caravan":1,"cards":1,"care":1,"career":1,"careers":1,"cars":1,"casa":1,"case":1,"cash":1,"casino":1,"catering":1,"catholic":1,"cba":1,"cbn":1,"cbre":1,"center":1,"ceo":1,"cern":1,"cfa":1,"cfd":1,"chanel":1,"channel":1,"charity":1,"chase":1,"chat":1,"cheap":1,"chintai":1,"christmas":1,"chrome":1,"church":1,"cipriani":1,"circle":1,"cisco":1,"citadel":1,"citi":1,"citic":1,"city":1,"claims":1,"cleaning":1,"click":1,"clinic":1,"clinique":1,"clothing":1,"cloud":1,"club":1,"clubmed":1,"coach":1,"codes":1,"coffee":1,"college":1,"cologne":1,"commbank":1,"community":1,"company":1,"compare":1,"computer":1,"comsec":1,"condos":1,"construction":1,"consulting":1,"contact":1,"contractors":1,"cooking":1,"cool":1,"corsica":1,"country":1,"coupon":1,"coupons":1,"courses":1,"cpa":1,"credit":1,"creditcard":1,"creditunion":1,"cricket":1,"crown":1,"crs":1,"cruise":1,"cruises":1,"cuisinella":1,"cymru":1,"cyou":1,"dad":1,"dance":1,"data":1,"date":1,"dating":1,"datsun":1,"day":1,"dclk":1,"dds":1,"deal":1,"dealer":1,"deals":1,"degree":1,"delivery":1,"dell":1,"deloitte":1,"delta":1,"democrat":1,"dental":1,"dentist":1,"desi":1,"design":1,"dev":1,"dhl":1,"diamonds":1,"diet":1,"digital":1,"direct":1,"directory":1,"discount":1,"discover":1,"dish":1,"diy":1,"dnp":1,"docs":1,"doctor":1,"dog":1,"domains":1,"dot":1,"download":1,"drive":1,"dtv":1,"dubai":1,"dunlop":1,"dupont":1,"durban":1,"dvag":1,"dvr":1,"earth":1,"eat":1,"eco":1,"edeka":1,"education":1,"email":1,"emerck":1,"energy":1,"engineer":1,"engineering":1,"enterprises":1,"epson":1,"equipment":1,"ericsson":1,"erni":1,"esq":1,"estate":1,"eurovision":1,"eus":1,"events":1,"exchange":1,"expert":1,"exposed":1,"express":1,"extraspace":1,"fage":1,"fail":1,"fairwinds":1,"faith":1,"family":1,"fan":1,"fans":1,"farm":1,"farmers":1,"fashion":1,"fast":1,"fedex":1,"feedback":1,"ferrari":1,"ferrero":1,"fidelity":1,"fido":1,"film":1,"final":1,"finance":1,"financial":1,"fire":1,"firestone":1,"firmdale":1,"fish":1,"fishing":1,"fit":1,"fitness":1,"flickr":1,"flights":1,"flir":1,"florist":1,"flowers":1,"fly":1,"foo":1,"food":1,"football":1,"ford":1,"forex":1,"forsale":1,"forum":1,"foundation":1,"fox":1,"free":1,"fresenius":1,"frl":1,"frogans":1,"frontier":1,"ftr":1,"fujitsu":1,"fun":1,"fund":1,"furniture":1,"futbol":1,"fyi":1,"gal":1,"gallery":1,"gallo":1,"gallup":1,"game":1,"games":1,"gap":1,"garden":1,"gay":1,"gbiz":1,"gdn":1,"gea":1,"gent":1,"genting":1,"george":1,"ggee":1,"gift":1,"gifts":1,"gives":1,"giving":1,"glass":1,"gle":1,"global":1,"globo":1,"gmail":1,"gmbh":1,"gmo":1,"gmx":1,"godaddy":1,"gold":1,"goldpoint":1,"golf":1,"goo":1,"goodyear":1,"goog":1,"google":1,"gop":1,"got":1,"grainger":1,"graphics":1,"gratis":1,"green":1,"gripe":1,"grocery":1,"group":1,"gucci":1,"guge":1,"guide":1,"guitars":1,"guru":1,"hair":1,"hamburg":1,"hangout":1,"haus":1,"hbo":1,"hdfc":1,"hdfcbank":1,"health":1,"healthcare":1,"help":1,"helsinki":1,"here":1,"hermes":1,"hiphop":1,"hisamitsu":1,"hitachi":1,"hiv":1,"hkt":1,"hockey":1,"holdings":1,"holiday":1,"homedepot":1,"homegoods":1,"homes":1,"homesense":1,"honda":1,"horse":1,"hospital":1,"host":1,"hosting":1,"hot":1,"hotel":1,"hotels":1,"hotmail":1,"house":1,"how":1,"hsbc":1,"hughes":1,"hyatt":1,"hyundai":1,"ibm":1,"icbc":1,"ice":1,"icu":1,"ieee":1,"ifm":1,"ikano":1,"imamat":1,"imdb":1,"immo":1,"immobilien":1,"inc":1,"industries":1,"infiniti":1,"ing":1,"ink":1,"institute":1,"insurance":1,"insure":1,"international":1,"intuit":1,"investments":1,"ipiranga":1,"irish":1,"ismaili":1,"ist":1,"istanbul":1,"itau":1,"itv":1,"jaguar":1,"java":1,"jcb":1,"jeep":1,"jetzt":1,"jewelry":1,"jio":1,"jll":1,"jmp":1,"jnj":1,"joburg":1,"jot":1,"joy":1,"jpmorgan":1,"jprs":1,"juegos":1,"juniper":1,"kaufen":1,"kddi":1,"kerryhotels":1,"kerryproperties":1,"kfh":1,"kia":1,"kids":1,"kim":1,"kindle":1,"kitchen":1,"kiwi":1,"koeln":1,"komatsu":1,"kosher":1,"kpmg":1,"kpn":1,"krd":1,"kred":1,"kuokgroup":1,"kyoto":1,"lacaixa":1,"lamborghini":1,"lamer":1,"land":1,"landrover":1,"lanxess":1,"lasalle":1,"lat":1,"latino":1,"latrobe":1,"law":1,"lawyer":1,"lds":1,"lease":1,"leclerc":1,"lefrak":1,"legal":1,"lego":1,"lexus":1,"lgbt":1,"lidl":1,"life":1,"lifeinsurance":1,"lifestyle":1,"lighting":1,"like":1,"lilly":1,"limited":1,"limo":1,"lincoln":1,"link":1,"live":1,"living":1,"llc":1,"llp":1,"loan":1,"loans":1,"locker":1,"locus":1,"lol":1,"london":1,"lotte":1,"lotto":1,"love":1,"lpl":1,"lplfinancial":1,"ltd":1,"ltda":1,"lundbeck":1,"luxe":1,"luxury":1,"madrid":1,"maif":1,"maison":1,"makeup":1,"man":1,"management":1,"mango":1,"map":1,"market":1,"marketing":1,"markets":1,"marriott":1,"marshalls":1,"mattel":1,"mba":1,"mckinsey":1,"med":1,"media":1,"meet":1,"melbourne":1,"meme":1,"memorial":1,"men":1,"menu":1,"merck":1,"merckmsd":1,"miami":1,"microsoft":1,"mini":1,"mint":1,"mit":1,"mitsubishi":1,"mlb":1,"mls":1,"mma":1,"mobile":1,"moda":1,"moe":1,"moi":1,"mom":1,"monash":1,"money":1,"monster":1,"mormon":1,"mortgage":1,"moscow":1,"moto":1,"motorcycles":1,"mov":1,"movie":1,"msd":1,"mtn":1,"mtr":1,"music":1,"nab":1,"nagoya":1,"navy":1,"nba":1,"nec":1,"netbank":1,"netflix":1,"network":1,"neustar":1,"new":1,"news":1,"next":1,"nextdirect":1,"nexus":1,"nfl":1,"ngo":1,"nhk":1,"nico":1,"nike":1,"nikon":1,"ninja":1,"nissan":1,"nissay":1,"nokia":1,"norton":1,"now":1,"nowruz":1,"nowtv":1,"nra":1,"nrw":1,"ntt":1,"nyc":1,"obi":1,"observer":1,"office":1,"okinawa":1,"olayan":1,"olayangroup":1,"ollo":1,"omega":1,"one":1,"ong":1,"onl":1,"online":1,"ooo":1,"open":1,"oracle":1,"orange":1,"organic":1,"origins":1,"osaka":1,"otsuka":1,"ott":1,"ovh":1,"page":1,"panasonic":1,"paris":1,"pars":1,"partners":1,"parts":1,"party":1,"pay":1,"pccw":1,"pet":1,"pfizer":1,"pharmacy":1,"phd":1,"philips":1,"phone":1,"photo":1,"photography":1,"photos":1,"physio":1,"pics":1,"pictet":1,"pictures":1,"pid":1,"pin":1,"ping":1,"pink":1,"pioneer":1,"pizza":1,"place":1,"play":1,"playstation":1,"plumbing":1,"plus":1,"pnc":1,"pohl":1,"poker":1,"politie":1,"porn":1,"praxi":1,"press":1,"prime":1,"prod":1,"productions":1,"prof":1,"progressive":1,"promo":1,"properties":1,"property":1,"protection":1,"pru":1,"prudential":1,"pub":1,"pwc":1,"qpon":1,"quebec":1,"quest":1,"racing":1,"radio":1,"read":1,"realestate":1,"realtor":1,"realty":1,"recipes":1,"red":1,"redstone":1,"redumbrella":1,"rehab":1,"reise":1,"reisen":1,"reit":1,"reliance":1,"ren":1,"rent":1,"rentals":1,"repair":1,"report":1,"republican":1,"rest":1,"restaurant":1,"review":1,"reviews":1,"rexroth":1,"rich":1,"richardli":1,"ricoh":1,"ril":1,"rio":1,"rip":1,"rocks":1,"rodeo":1,"rogers":1,"room":1,"rsvp":1,"rugby":1,"ruhr":1,"run":1,"rwe":1,"ryukyu":1,"saarland":1,"safe":1,"safety":1,"sakura":1,"sale":1,"salon":1,"samsclub":1,"samsung":1,"sandvik":1,"sandvikcoromant":1,"sanofi":1,"sap":1,"sarl":1,"sas":1,"save":1,"saxo":1,"sbi":1,"sbs":1,"scb":1,"schaeffler":1,"schmidt":1,"scholarships":1,"school":1,"schule":1,"schwarz":1,"science":1,"scot":1,"search":1,"seat":1,"secure":1,"security":1,"seek":1,"select":1,"sener":1,"services":1,"seven":1,"sew":1,"sex":1,"sexy":1,"sfr":1,"shangrila":1,"sharp":1,"shell":1,"shia":1,"shiksha":1,"shoes":1,"shop":1,"shopping":1,"shouji":1,"show":1,"silk":1,"sina":1,"singles":1,"site":1,"ski":1,"skin":1,"sky":1,"skype":1,"sling":1,"smart":1,"smile":1,"sncf":1,"soccer":1,"social":1,"softbank":1,"software":1,"sohu":1,"solar":1,"solutions":1,"song":1,"sony":1,"soy":1,"spa":1,"space":1,"sport":1,"spot":1,"srl":1,"stada":1,"staples":1,"star":1,"statebank":1,"statefarm":1,"stc":1,"stcgroup":1,"stockholm":1,"storage":1,"store":1,"stream":1,"studio":1,"study":1,"style":1,"sucks":1,"supplies":1,"supply":1,"support":1,"surf":1,"surgery":1,"suzuki":1,"swatch":1,"swiss":1,"sydney":1,"systems":1,"tab":1,"taipei":1,"talk":1,"taobao":1,"target":1,"tatamotors":1,"tatar":1,"tattoo":1,"tax":1,"taxi":1,"tci":1,"tdk":1,"team":1,"tech":1,"technology":1,"temasek":1,"tennis":1,"teva":1,"thd":1,"theater":1,"theatre":1,"tiaa":1,"tickets":1,"tienda":1,"tips":1,"tires":1,"tirol":1,"tjmaxx":1,"tjx":1,"tkmaxx":1,"tmall":1,"today":1,"tokyo":1,"tools":1,"top":1,"toray":1,"toshiba":1,"total":1,"tours":1,"town":1,"toyota":1,"toys":1,"trade":1,"trading":1,"training":1,"travel":1,"travelers":1,"travelersinsurance":1,"trust":1,"trv":1,"tube":1,"tui":1,"tunes":1,"tushu":1,"tvs":1,"ubank":1,"ubs":1,"unicom":1,"university":1,"uno":1,"uol":1,"ups":1,"vacations":1,"vana":1,"vanguard":1,"vegas":1,"ventures":1,"verisign":1,"versicherung":1,"vet":1,"viajes":1,"video":1,"vig":1,"viking":1,"villas":1,"vin":1,"vip":1,"virgin":1,"visa":1,"vision":1,"viva":1,"vivo":1,"vlaanderen":1,"vodka":1,"volvo":1,"vote":1,"voting":1,"voto":1,"voyage":1,"wales":1,"walmart":1,"walter":1,"wang":1,"wanggou":1,"watch":1,"watches":1,"weather":1,"weatherchannel":1,"webcam":1,"weber":1,"website":1,"wed":1,"wedding":1,"weibo":1,"weir":1,"whoswho":1,"wien":1,"wiki":1,"williamhill":1,"win":1,"windows":1,"wine":1,"winners":1,"wme":1,"wolterskluwer":1,"woodside":1,"work":1,"works":1,"world":1,"wow":1,"wtc":1,"wtf":1,"xbox":1,"xerox":1,"xihuan":1,"xin":1,"xn--11b4c3d":1,"xn--1ck2e1b":1,"xn--1qqw23a":1,"xn--30rr7y":1,"xn--3bst00m":1,"xn--3ds443g":1,"xn--3pxu8k":1,"xn--42c2d9a":1,"xn--45q11c":1,"xn--4gbrim":1,"xn--55qw42g":1,"xn--55qx5d":1,"xn--5su34j936bgsg":1,"xn--5tzm5g":1,"xn--6frz82g":1,"xn--6qq986b3xl":1,"xn--80adxhks":1,"xn--80aqecdr1a":1,"xn--80asehdb":1,"xn--80aswg":1,"xn--8y0a063a":1,"xn--9dbq2a":1,"xn--9et52u":1,"xn--9krt00a":1,"xn--b4w605ferd":1,"xn--bck1b9a5dre4c":1,"xn--c1avg":1,"xn--c2br7g":1,"xn--cck2b3b":1,"xn--cckwcxetd":1,"xn--cg4bki":1,"xn--czr694b":1,"xn--czrs0t":1,"xn--czru2d":1,"xn--d1acj3b":1,"xn--eckvdtc9d":1,"xn--efvy88h":1,"xn--fct429k":1,"xn--fhbei":1,"xn--fiq228c5hs":1,"xn--fiq64b":1,"xn--fjq720a":1,"xn--flw351e":1,"xn--fzys8d69uvgm":1,"xn--g2xx48c":1,"xn--gckr3f0f":1,"xn--gk3at1e":1,"xn--hxt814e":1,"xn--i1b6b1a6a2e":1,"xn--imr513n":1,"xn--io0a7i":1,"xn--j1aef":1,"xn--jlq480n2rg":1,"xn--jvr189m":1,"xn--kcrx77d1x4a":1,"xn--kput3i":1,"xn--mgba3a3ejt":1,"xn--mgba7c0bbn0a":1,"xn--mgbab2bd":1,"xn--mgbca7dzdo":1,"xn--mgbi4ecexp":1,"xn--mgbt3dhd":1,"xn--mk1bu44c":1,"xn--mxtq1m":1,"xn--ngbc5azd":1,"xn--ngbe9e0a":1,"xn--ngbrx":1,"xn--nqv7f":1,"xn--nqv7fs00ema":1,"xn--nyqy26a":1,"xn--otu796d":1,"xn--p1acf":1,"xn--pssy2u":1,"xn--q9jyb4c":1,"xn--qcka1pmc":1,"xn--rhqv96g":1,"xn--rovu88b":1,"xn--ses554g":1,"xn--t60b56a":1,"xn--tckwe":1,"xn--tiq49xqyj":1,"xn--unup4y":1,"xn--vermgensberater-ctb":1,"xn--vermgensberatung-pwb":1,"xn--vhquv":1,"xn--vuq861b":1,"xn--w4r85el8fhu5dnra":1,"xn--w4rs40l":1,"xn--xhq521b":1,"xn--zfr164b":1,"xyz":1,"yachts":1,"yahoo":1,"yamaxun":1,"yandex":1,"yodobashi":1,"yoga":1,"yokohama":1,"you":1,"youtube":1,"yun":1,"zappos":1,"zara":1,"zero":1,"zip":1,"zone":1,"zuerich":1},"private":{"co.krd":2,"edu.krd":2,"art.pl":2,"gliwice.pl":2,"krakow.pl":2,"poznan.pl":2,"wroc.pl":2,"zakopane.pl":2,"lib.de.us":3,"12chars.dev":2,"12chars.it":2,"12chars.pro":2,"cc.ua":2,"inf.ua":2,"ltd.ua":2,"611.to":2,"a2hosted.com":2,"cpserver.com":2,"on-acorn.io":3,"activetrail.biz":2,"adaptable.app":2,"myaddr.dev":2,"myaddr.io":2,"dyn.addr.tools":3,"myaddr.tools":2,"adobeaemcloud.com":2,"dev.adobeaemcloud.com":4,"aem.live":2,"hlx.live":2,"adobeaemcloud.net":2,"aem.network":2,"aem.page":2,"hlx.page":2,"aem.reviews":2,"adobeio-static.net":2,"adobeioruntime.net":2,"africa.com":2,"beep.pl":2,"airkitapps.com":2,"airkitapps-au.com":2,"airkitapps.eu":2,"aiven.app":2,"aivencloud.com":2,"akadns.net":2,"akamai.net":2,"akamai-staging.net":2,"akamaiedge.net":2,"akamaiedge-staging.net":2,"akamaihd.net":2,"akamaihd-staging.net":2,"akamaiorigin.net":2,"akamaiorigin-staging.net":2,"akamaized.net":2,"akamaized-staging.net":2,"edgekey.net":2,"edgekey-staging.net":2,"edgesuite.net":2,"edgesuite-staging.net":2,"barsy.ca":2,"compute.estate":3,"alces.network":3,"alibabacloudcs.com":2,"kasserver.com":2,"altervista.org":2,"alwaysdata.net":2,"myamaze.net":2,"execute-api.cn-north-1.amazonaws.com.cn":5,"execute-api.cn-northwest-1.amazonaws.com.cn":5,"execute-api.af-south-1.amazonaws.com":4,"execute-api.ap-east-1.amazonaws.com":4,"execute-api.ap-northeast-1.amazonaws.com":4,"execute-api.ap-northeast-2.amazonaws.com":4,"execute-api.ap-northeast-3.amazonaws.com":4,"execute-api.ap-south-1.amazonaws.com":4,"execute-api.ap-south-2.amazonaws.com":4,"execute-api.ap-southeast-1.amazonaws.com":4,"execute-api.ap-southeast-2.amazonaws.com":4,"execute-api.ap-southeast-3.amazonaws.com":4,"execute-api.ap-southeast-4.amazonaws.com":4,"execute-api.ap-southeast-5.amazonaws.com":4,"execute-api.ca-central-1.amazonaws.com":4,"execute-api.ca-west-1.amazonaws.com":4,"execute-api.eu-central-1.amazonaws.com":4,"execute-api.eu-central-2.amazonaws.com":4,"execute-api.eu-north-1.amazonaws.com":4,"execute-api.eu-south-1.amazonaws.com":4,"execute-api.eu-south-2.amazonaws.com":4,"execute-api.eu-west-1.amazonaws.com":4,"execute-api.eu-west-2.amazonaws.com":4,"execute-api.eu-west-3.amazonaws.com":4,"execute-api.il-central-1.amazonaws.com":4,"execute-api.me-central-1.amazonaws.com":4,"execute-api.me-south-1.amazonaws.com":4,"execute-api.sa-east-1.amazonaws.com":4,"execute-api.us-east-1.amazonaws.com":4,"execute-api.us-east-2.amazonaws.com":4,"execute-api.us-gov-east-1.amazonaws.com":4,"execute-api.us-gov-west-1.amazonaws.com":4,"execute-api.us-west-1.amazonaws.com":4,"execute-api.us-west-2.amazonaws.com":4,"cloudfront.net":2,"auth.af-south-1.amazoncognito.com":4,"auth.ap-east-1.amazoncognito.com":4,"auth.ap-northeast-1.amazoncognito.com":4,"auth.ap-northeast-2.amazoncognito.com":4,"auth.ap-northeast-3.amazoncognito.com":4,"auth.ap-south-1.amazoncognito.com":4,"auth.ap-south-2.amazoncognito.com":4,"auth.ap-southeast-1.amazoncognito.com":4,"auth.ap-southeast-2.amazoncognito.com":4,"auth.ap-southeast-3.amazoncognito.com":4,"auth.ap-southeast-4.amazoncognito.com":4,"auth.ap-southeast-5.amazoncognito.com":4,"auth.ca-central-1.amazoncognito.com":4,"auth.ca-west-1.amazoncognito.com":4,"auth.eu-central-1.amazoncognito.com":4,"auth.eu-central-2.amazoncognito.com":4,"auth.eu-north-1.amazoncognito.com":4,"auth.eu-south-1.amazoncognito.com":4,"auth.eu-south-2.amazoncognito.com":4,"auth.eu-west-1.amazoncognito.com":4,"auth.eu-west-2.amazoncognito.com":4,"auth.eu-west-3.amazoncognito.com":4,"auth.il-central-1.amazoncognito.com":4,"auth.me-central-1.amazoncognito.com":4,"auth.me-south-1.amazoncognito.com":4,"auth.sa-east-1.amazoncognito.com":4,"auth.us-east-1.amazoncognito.com":4,"auth-fips.us-east-1.amazoncognito.com":4,"auth.us-east-2.amazoncognito.com":4,"auth-fips.us-east-2.amazoncognito.com":4,"auth-fips.us-gov-east-1.amazoncognito.com":4,"auth-fips.us-gov-west-1.amazoncognito.com":4,"auth.us-west-1.amazoncognito.com":4,"auth-fips.us-west-1.amazoncognito.com":4,"auth.us-west-2.amazoncognito.com":4,"auth-fips.us-west-2.amazoncognito.com":4,"compute.amazonaws.com.cn":5,"compute.amazonaws.com":4,"compute-1.amazonaws.com":4,"us-east-1.amazonaws.com":3,"emrappui-prod.cn-north-1.amazonaws.com.cn":5,"emrnotebooks-prod.cn-north-1.amazonaws.com.cn":5,"emrstudio-prod.cn-north-1.amazonaws.com.cn":5,"emrappui-prod.cn-northwest-1.amazonaws.com.cn":5,"emrnotebooks-prod.cn-northwest-1.amazonaws.com.cn":5,"emrstudio-prod.cn-northwest-1.amazonaws.com.cn":5,"emrappui-prod.af-south-1.amazonaws.com":4,"emrnotebooks-prod.af-south-1.amazonaws.com":4,"emrstudio-prod.af-south-1.amazonaws.com":4,"emrappui-prod.ap-east-1.amazonaws.com":4,"emrnotebooks-prod.ap-east-1.amazonaws.com":4,"emrstudio-prod.ap-east-1.amazonaws.com":4,"emrappui-prod.ap-northeast-1.amazonaws.com":4,"emrnotebooks-prod.ap-northeast-1.amazonaws.com":4,"emrstudio-prod.ap-northeast-1.amazonaws.com":4,"emrappui-prod.ap-northeast-2.amazonaws.com":4,"emrnotebooks-prod.ap-northeast-2.amazonaws.com":4,"emrstudio-prod.ap-northeast-2.amazonaws.com":4,"emrappui-prod.ap-northeast-3.amazonaws.com":4,"emrnotebooks-prod.ap-northeast-3.amazonaws.com":4,"emrstudio-prod.ap-northeast-3.amazonaws.com":4,"emrappui-prod.ap-south-1.amazonaws.com":4,"emrnotebooks-prod.ap-south-1.amazonaws.com":4,"emrstudio-prod.ap-south-1.amazonaws.com":4,"emrappui-prod.ap-south-2.amazonaws.com":4,"emrnotebooks-prod.ap-south-2.amazonaws.com":4,"emrstudio-prod.ap-south-2.amazonaws.com":4,"emrappui-prod.ap-southeast-1.amazonaws.com":4,"emrnotebooks-prod.ap-southeast-1.amazonaws.com":4,"emrstudio-prod.ap-southeast-1.amazonaws.com":4,"emrappui-prod.ap-southeast-2.amazonaws.com":4,"emrnotebooks-prod.ap-southeast-2.amazonaws.com":4,"emrstudio-prod.ap-southeast-2.amazonaws.com":4,"emrappui-prod.ap-southeast-3.amazonaws.com":4,"emrnotebooks-prod.ap-southeast-3.amazonaws.com":4,"emrstudio-prod.ap-southeast-3.amazonaws.com":4,"emrappui-prod.ap-southeast-4.amazonaws.com":4,"emrnotebooks-prod.ap-southeast-4.amazonaws.com":4,"emrstudio-prod.ap-southeast-4.amazonaws.com":4,"emrappui-prod.ca-central-1.amazonaws.com":4,"emrnotebooks-prod.ca-central-1.amazonaws.com":4,"emrstudio-prod.ca-central-1.amazonaws.com":4,"emrappui-prod.ca-west-1.amazonaws.com":4,"emrnotebooks-prod.ca-west-1.amazonaws.com":4,"emrstudio-prod.ca-west-1.amazonaws.com":4,"emrappui-prod.eu-central-1.amazonaws.com":4,"emrnotebooks-prod.eu-central-1.amazonaws.com":4,"emrstudio-prod.eu-central-1.amazonaws.com":4,"emrappui-prod.eu-central-2.amazonaws.com":4,"emrnotebooks-prod.eu-central-2.amazonaws.com":4,"emrstudio-prod.eu-central-2.amazonaws.com":4,"emrappui-prod.eu-north-1.amazonaws.com":4,"emrnotebooks-prod.eu-north-1.amazonaws.com":4,"emrstudio-prod.eu-north-1.amazonaws.com":4,"emrappui-prod.eu-south-1.amazonaws.com":4,"emrnotebooks-prod.eu-south-1.amazonaws.com":4,"emrstudio-prod.eu-south-1.amazonaws.com":4,"emrappui-prod.eu-south-2.amazonaws.com":4,"emrnotebooks-prod.eu-south-2.amazonaws.com":4,"emrstudio-prod.eu-south-2.amazonaws.com":4,"emrappui-prod.eu-west-1.amazonaws.com":4,"emrnotebooks-prod.eu-west-1.amazonaws.com":4,"emrstudio-prod.eu-west-1.amazonaws.com":4,"emrappui-prod.eu-west-2.amazonaws.com":4,"emrnotebooks-prod.eu-west-2.amazonaws.com":4,"emrstudio-prod.eu-west-2.amazonaws.com":4,"emrappui-prod.eu-west-3.amazonaws.com":4,"emrnotebooks-prod.eu-west-3.amazonaws.com":4,"emrstudio-prod.eu-west-3.amazonaws.com":4,"emrappui-prod.il-central-1.amazonaws.com":4,"emrnotebooks-prod.il-central-1.amazonaws.com":4,"emrstudio-prod.il-central-1.amazonaws.com":4,"emrappui-prod.me-central-1.amazonaws.com":4,"emrnotebooks-prod.me-central-1.amazonaws.com":4,"emrstudio-prod.me-central-1.amazonaws.com":4,"emrappui-prod.me-south-1.amazonaws.com":4,"emrnotebooks-prod.me-south-1.amazonaws.com":4,"emrstudio-prod.me-south-1.amazonaws.com":4,"emrappui-prod.sa-east-1.amazonaws.com":4,"emrnotebooks-prod.sa-east-1.amazonaws.com":4,"emrstudio-prod.sa-east-1.amazonaws.com":4,"emrappui-prod.us-east-1.amazonaws.com":4,"emrnotebooks-prod.us-east-1.amazonaws.com":4,"emrstudio-prod.us-east-1.amazonaws.com":4,"emrappui-prod.us-east-2.amazonaws.com":4,"emrnotebooks-prod.us-east-2.amazonaws.com":4,"emrstudio-prod.us-east-2.amazonaws.com":4,"emrappui-prod.us-gov-east-1.amazonaws.com":4,"emrnotebooks-prod.us-gov-east-1.amazonaws.com":4,"emrstudio-prod.us-gov-east-1.amazonaws.com":4,"emrappui-prod.us-gov-west-1.amazonaws.com":4,"emrnotebooks-prod.us-gov-west-1.amazonaws.com":4,"emrstudio-prod.us-gov-west-1.amazonaws.com":4,"emrappui-prod.us-west-1.amazonaws.com":4,"emrnotebooks-prod.us-west-1.amazonaws.com":4,"emrstudio-prod.us-west-1.amazonaws.com":4,"emrappui-prod.us-west-2.amazonaws.com":4,"emrnotebooks-prod.us-west-2.amazonaws.com":4,"emrstudio-prod.us-west-2.amazonaws.com":4,"cn-north-1.airflow.amazonaws.com.cn":6,"cn-northwest-1.airflow.amazonaws.com.cn":6,"af-south-1.airflow.amazonaws.com":5,"ap-east-1.airflow.amazonaws.com":5,"ap-northeast-1.airflow.amazonaws.com":5,"ap-northeast-2.airflow.amazonaws.com":5,"ap-northeast-3.airflow.amazonaws.com":5,"ap-south-1.airflow.amazonaws.com":5,"ap-south-2.airflow.amazonaws.com":5,"ap-southeast-1.airflow.amazonaws.com":5,"ap-southeast-2.airflow.amazonaws.com":5,"ap-southeast-3.airflow.amazonaws.com":5,"ap-southeast-4.airflow.amazonaws.com":5,"ca-central-1.airflow.amazonaws.com":5,"ca-west-1.airflow.amazonaws.com":5,"eu-central-1.airflow.amazonaws.com":5,"eu-central-2.airflow.amazonaws.com":5,"eu-north-1.airflow.amazonaws.com":5,"eu-south-1.airflow.amazonaws.com":5,"eu-south-2.airflow.amazonaws.com":5,"eu-west-1.airflow.amazonaws.com":5,"eu-west-2.airflow.amazonaws.com":5,"eu-west-3.airflow.amazonaws.com":5,"il-central-1.airflow.amazonaws.com":5,"me-central-1.airflow.amazonaws.com":5,"me-south-1.airflow.amazonaws.com":5,"sa-east-1.airflow.amazonaws.com":5,"us-east-1.airflow.amazonaws.com":5,"us-east-2.airflow.amazonaws.com":5,"us-west-1.airflow.amazonaws.com":5,"us-west-2.airflow.amazonaws.com":5,"s3.dualstack.cn-north-1.amazonaws.com.cn":6,"s3-accesspoint.dualstack.cn-north-1.amazonaws.com.cn":6,"s3-website.dualstack.cn-north-1.amazonaws.com.cn":6,"s3.cn-north-1.amazonaws.com.cn":5,"s3-accesspoint.cn-north-1.amazonaws.com.cn":5,"s3-deprecated.cn-north-1.amazonaws.com.cn":5,"s3-object-lambda.cn-north-1.amazonaws.com.cn":5,"s3-website.cn-north-1.amazonaws.com.cn":5,"s3.dualstack.cn-northwest-1.amazonaws.com.cn":6,"s3-accesspoint.dualstack.cn-northwest-1.amazonaws.com.cn":6,"s3.cn-northwest-1.amazonaws.com.cn":5,"s3-accesspoint.cn-northwest-1.amazonaws.com.cn":5,"s3-object-lambda.cn-northwest-1.amazonaws.com.cn":5,"s3-website.cn-northwest-1.amazonaws.com.cn":5,"s3.dualstack.af-south-1.amazonaws.com":5,"s3-accesspoint.dualstack.af-south-1.amazonaws.com":5,"s3-website.dualstack.af-south-1.amazonaws.com":5,"s3.af-south-1.amazonaws.com":4,"s3-accesspoint.af-south-1.amazonaws.com":4,"s3-object-lambda.af-south-1.amazonaws.com":4,"s3-website.af-south-1.amazonaws.com":4,"s3.dualstack.ap-east-1.amazonaws.com":5,"s3-accesspoint.dualstack.ap-east-1.amazonaws.com":5,"s3.ap-east-1.amazonaws.com":4,"s3-accesspoint.ap-east-1.amazonaws.com":4,"s3-object-lambda.ap-east-1.amazonaws.com":4,"s3-website.ap-east-1.amazonaws.com":4,"s3.dualstack.ap-northeast-1.amazonaws.com":5,"s3-accesspoint.dualstack.ap-northeast-1.amazonaws.com":5,"s3-website.dualstack.ap-northeast-1.amazonaws.com":5,"s3.ap-northeast-1.amazonaws.com":4,"s3-accesspoint.ap-northeast-1.amazonaws.com":4,"s3-object-lambda.ap-northeast-1.amazonaws.com":4,"s3-website.ap-northeast-1.amazonaws.com":4,"s3.dualstack.ap-northeast-2.amazonaws.com":5,"s3-accesspoint.dualstack.ap-northeast-2.amazonaws.com":5,"s3-website.dualstack.ap-northeast-2.amazonaws.com":5,"s3.ap-northeast-2.amazonaws.com":4,"s3-accesspoint.ap-northeast-2.amazonaws.com":4,"s3-object-lambda.ap-northeast-2.amazonaws.com":4,"s3-website.ap-northeast-2.amazonaws.com":4,"s3.dualstack.ap-northeast-3.amazonaws.com":5,"s3-accesspoint.dualstack.ap-northeast-3.amazonaws.com":5,"s3-website.dualstack.ap-northeast-3.amazonaws.com":5,"s3.ap-northeast-3.amazonaws.com":4,"s3-accesspoint.ap-northeast-3.amazonaws.com":4,"s3-object-lambda.ap-northeast-3.amazonaws.com":4,"s3-website.ap-northeast-3.amazonaws.com":4,"s3.dualstack.ap-south-1.amazonaws.com":5,"s3-accesspoint.dualstack.ap-south-1.amazonaws.com":5,"s3-website.dualstack.ap-south-1.amazonaws.com":5,"s3.ap-south-1.amazonaws.com":4,"s3-accesspoint.ap-south-1.amazonaws.com":4,"s3-object-lambda.ap-south-1.amazonaws.com":4,"s3-website.ap-south-1.amazonaws.com":4,"s3.dualstack.ap-south-2.amazonaws.com":5,"s3-accesspoint.dualstack.ap-south-2.amazonaws.com":5,"s3-website.dualstack.ap-south-2.amazonaws.com":5,"s3.ap-south-2.amazonaws.com":4,"s3-accesspoint.ap-south-2.amazonaws.com":4,"s3-object-lambda.ap-south-2.amazonaws.com":4,"s3-website.ap-south-2.amazonaws.com":4,"s3.dualstack.ap-southeast-1.amazonaws.com":5,"s3-accesspoint.dualstack.ap-southeast-1.amazonaws.com":5,"s3-website.dualstack.ap-southeast-1.amazonaws.com":5,"s3.ap-southeast-1.amazonaws.com":4,"s3-accesspoint.ap-southeast-1.amazonaws.com":4,"s3-object-lambda.ap-southeast-1.amazonaws.com":4,"s3-website.ap-southeast-1.amazonaws.com":4,"s3.dualstack.ap-southeast-2.amazonaws.com":5,"s3-accesspoint.dualstack.ap-southeast-2.amazonaws.com":5,"s3-website.dualstack.ap-southeast-2.amazonaws.com":5,"s3.ap-southeast-2.amazonaws.com":4,"s3-accesspoint.ap-southeast-2.amazonaws.com":4,"s3-object-lambda.ap-southeast-2.amazonaws.com":4,"s3-website.ap-southeast-2.amazonaws.com":4,"s3.dualstack.ap-southeast-3.amazonaws.com":5,"s3-accesspoint.dualstack.ap-southeast-3.amazonaws.com":5,"s3-website.dualstack.ap-southeast-3.amazonaws.com":5,"s3.ap-southeast-3.amazonaws.com":4,"s3-accesspoint.ap-southeast-3.amazonaws.com":4,"s3-object-lambda.ap-southeast-3.amazonaws.com":4,"s3-website.ap-southeast-3.amazonaws.com":4,"s3.dualstack.ap-southeast-4.amazonaws.com":5,"s3-accesspoint.dualstack.ap-southeast-4.amazonaws.com":5,"s3-website.dualstack.ap-southeast-4.amazonaws.com":5,"s3.ap-southeast-4.amazonaws.com":4,"s3-accesspoint.ap-southeast-4.amazonaws.com":4,"s3-object-lambda.ap-southeast-4.amazonaws.com":4,"s3-website.ap-southeast-4.amazonaws.com":4,"s3.dualstack.ap-southeast-5.amazonaws.com":5,"s3-accesspoint.dualstack.ap-southeast-5.amazonaws.com":5,"s3-website.dualstack.ap-southeast-5.amazonaws.com":5,"s3.ap-southeast-5.amazonaws.com":4,"s3-accesspoint.ap-southeast-5.amazonaws.com":4,"s3-deprecated.ap-southeast-5.amazonaws.com":4,"s3-object-lambda.ap-southeast-5.amazonaws.com":4,"s3-website.ap-southeast-5.amazonaws.com":4,"s3.dualstack.ca-central-1.amazonaws.com":5,"s3-accesspoint.dualstack.ca-central-1.amazonaws.com":5,"s3-accesspoint-fips.dualstack.ca-central-1.amazonaws.com":5,"s3-fips.dualstack.ca-central-1.amazonaws.com":5,"s3-website.dualstack.ca-central-1.amazonaws.com":5,"s3.ca-central-1.amazonaws.com":4,"s3-accesspoint.ca-central-1.amazonaws.com":4,"s3-accesspoint-fips.ca-central-1.amazonaws.com":4,"s3-fips.ca-central-1.amazonaws.com":4,"s3-object-lambda.ca-central-1.amazonaws.com":4,"s3-website.ca-central-1.amazonaws.com":4,"s3.dualstack.ca-west-1.amazonaws.com":5,"s3-accesspoint.dualstack.ca-west-1.amazonaws.com":5,"s3-accesspoint-fips.dualstack.ca-west-1.amazonaws.com":5,"s3-fips.dualstack.ca-west-1.amazonaws.com":5,"s3-website.dualstack.ca-west-1.amazonaws.com":5,"s3.ca-west-1.amazonaws.com":4,"s3-accesspoint.ca-west-1.amazonaws.com":4,"s3-accesspoint-fips.ca-west-1.amazonaws.com":4,"s3-fips.ca-west-1.amazonaws.com":4,"s3-object-lambda.ca-west-1.amazonaws.com":4,"s3-website.ca-west-1.amazonaws.com":4,"s3.dualstack.eu-central-1.amazonaws.com":5,"s3-accesspoint.dualstack.eu-central-1.amazonaws.com":5,"s3-website.dualstack.eu-central-1.amazonaws.com":5,"s3.eu-central-1.amazonaws.com":4,"s3-accesspoint.eu-central-1.amazonaws.com":4,"s3-object-lambda.eu-central-1.amazonaws.com":4,"s3-website.eu-central-1.amazonaws.com":4,"s3.dualstack.eu-central-2.amazonaws.com":5,"s3-accesspoint.dualstack.eu-central-2.amazonaws.com":5,"s3-website.dualstack.eu-central-2.amazonaws.com":5,"s3.eu-central-2.amazonaws.com":4,"s3-accesspoint.eu-central-2.amazonaws.com":4,"s3-object-lambda.eu-central-2.amazonaws.com":4,"s3-website.eu-central-2.amazonaws.com":4,"s3.dualstack.eu-north-1.amazonaws.com":5,"s3-accesspoint.dualstack.eu-north-1.amazonaws.com":5,"s3.eu-north-1.amazonaws.com":4,"s3-accesspoint.eu-north-1.amazonaws.com":4,"s3-object-lambda.eu-north-1.amazonaws.com":4,"s3-website.eu-north-1.amazonaws.com":4,"s3.dualstack.eu-south-1.amazonaws.com":5,"s3-accesspoint.dualstack.eu-south-1.amazonaws.com":5,"s3-website.dualstack.eu-south-1.amazonaws.com":5,"s3.eu-south-1.amazonaws.com":4,"s3-accesspoint.eu-south-1.amazonaws.com":4,"s3-object-lambda.eu-south-1.amazonaws.com":4,"s3-website.eu-south-1.amazonaws.com":4,"s3.dualstack.eu-south-2.amazonaws.com":5,"s3-accesspoint.dualstack.eu-south-2.amazonaws.com":5,"s3-website.dualstack.eu-south-2.amazonaws.com":5,"s3.eu-south-2.amazonaws.com":4,"s3-accesspoint.eu-south-2.amazonaws.com":4,"s3-object-lambda.eu-south-2.amazonaws.com":4,"s3-website.eu-south-2.amazonaws.com":4,"s3.dualstack.eu-west-1.amazonaws.com":5,"s3-accesspoint.dualstack.eu-west-1.amazonaws.com":5,"s3-website.dualstack.eu-west-1.amazonaws.com":5,"s3.eu-west-1.amazonaws.com":4,"s3-accesspoint.eu-west-1.amazonaws.com":4,"s3-deprecated.eu-west-1.amazonaws.com":4,"s3-object-lambda.eu-west-1.amazonaws.com":4,"s3-website.eu-west-1.amazonaws.com":4,"s3.dualstack.eu-west-2.amazonaws.com":5,"s3-accesspoint.dualstack.eu-west-2.amazonaws.com":5,"s3.eu-west-2.amazonaws.com":4,"s3-accesspoint.eu-west-2.amazonaws.com":4,"s3-object-lambda.eu-west-2.amazonaws.com":4,"s3-website.eu-west-2.amazonaws.com":4,"s3.dualstack.eu-west-3.amazonaws.com":5,"s3-accesspoint.dualstack.eu-west-3.amazonaws.com":5,"s3-website.dualstack.eu-west-3.amazonaws.com":5,"s3.eu-west-3.amazonaws.com":4,"s3-accesspoint.eu-west-3.amazonaws.com":4,"s3-object-lambda.eu-west-3.amazonaws.com":4,"s3-website.eu-west-3.amazonaws.com":4,"s3.dualstack.il-central-1.amazonaws.com":5,"s3-accesspoint.dualstack.il-central-1.amazonaws.com":5,"s3-website.dualstack.il-central-1.amazonaws.com":5,"s3.il-central-1.amazonaws.com":4,"s3-accesspoint.il-central-1.amazonaws.com":4,"s3-object-lambda.il-central-1.amazonaws.com":4,"s3-website.il-central-1.amazonaws.com":4,"s3.dualstack.me-central-1.amazonaws.com":5,"s3-accesspoint.dualstack.me-central-1.amazonaws.com":5,"s3-website.dualstack.me-central-1.amazonaws.com":5,"s3.me-central-1.amazonaws.com":4,"s3-accesspoint.me-central-1.amazonaws.com":4,"s3-object-lambda.me-central-1.amazonaws.com":4,"s3-website.me-central-1.amazonaws.com":4,"s3.dualstack.me-south-1.amazonaws.com":5,"s3-accesspoint.dualstack.me-south-1.amazonaws.com":5,"s3.me-south-1.amazonaws.com":4,"s3-accesspoint.me-south-1.amazonaws.com":4,"s3-object-lambda.me-south-1.amazonaws.com":4,"s3-website.me-south-1.amazonaws.com":4,"s3.amazonaws.com":3,"s3-1.amazonaws.com":3,"s3-ap-east-1.amazonaws.com":3,"s3-ap-northeast-1.amazonaws.com":3,"s3-ap-northeast-2.amazonaws.com":3,"s3-ap-northeast-3.amazonaws.com":3,"s3-ap-south-1.amazonaws.com":3,"s3-ap-southeast-1.amazonaws.com":3,"s3-ap-southeast-2.amazonaws.com":3,"s3-ca-central-1.amazonaws.com":3,"s3-eu-central-1.amazonaws.com":3,"s3-eu-north-1.amazonaws.com":3,"s3-eu-west-1.amazonaws.com":3,"s3-eu-west-2.amazonaws.com":3,"s3-eu-west-3.amazonaws.com":3,"s3-external-1.amazonaws.com":3,"s3-fips-us-gov-east-1.amazonaws.com":3,"s3-fips-us-gov-west-1.amazonaws.com":3,"mrap.accesspoint.s3-global.amazonaws.com":5,"s3-me-south-1.amazonaws.com":3,"s3-sa-east-1.amazonaws.com":3,"s3-us-east-2.amazonaws.com":3,"s3-us-gov-east-1.amazonaws.com":3,"s3-us-gov-west-1.amazonaws.com":3,"s3-us-west-1.amazonaws.com":3,"s3-us-west-2.amazonaws.com":3,"s3-website-ap-northeast-1.amazonaws.com":3,"s3-website-ap-southeast-1.amazonaws.com":3,"s3-website-ap-southeast-2.amazonaws.com":3,"s3-website-eu-west-1.amazonaws.com":3,"s3-website-sa-east-1.amazonaws.com":3,"s3-website-us-east-1.amazonaws.com":3,"s3-website-us-gov-west-1.amazonaws.com":3,"s3-website-us-west-1.amazonaws.com":3,"s3-website-us-west-2.amazonaws.com":3,"s3.dualstack.sa-east-1.amazonaws.com":5,"s3-accesspoint.dualstack.sa-east-1.amazonaws.com":5,"s3-website.dualstack.sa-east-1.amazonaws.com":5,"s3.sa-east-1.amazonaws.com":4,"s3-accesspoint.sa-east-1.amazonaws.com":4,"s3-object-lambda.sa-east-1.amazonaws.com":4,"s3-website.sa-east-1.amazonaws.com":4,"s3.dualstack.us-east-1.amazonaws.com":5,"s3-accesspoint.dualstack.us-east-1.amazonaws.com":5,"s3-accesspoint-fips.dualstack.us-east-1.amazonaws.com":5,"s3-fips.dualstack.us-east-1.amazonaws.com":5,"s3-website.dualstack.us-east-1.amazonaws.com":5,"s3.us-east-1.amazonaws.com":4,"s3-accesspoint.us-east-1.amazonaws.com":4,"s3-accesspoint-fips.us-east-1.amazonaws.com":4,"s3-deprecated.us-east-1.amazonaws.com":4,"s3-fips.us-east-1.amazonaws.com":4,"s3-object-lambda.us-east-1.amazonaws.com":4,"s3-website.us-east-1.amazonaws.com":4,"s3.dualstack.us-east-2.amazonaws.com":5,"s3-accesspoint.dualstack.us-east-2.amazonaws.com":5,"s3-accesspoint-fips.dualstack.us-east-2.amazonaws.com":5,"s3-fips.dualstack.us-east-2.amazonaws.com":5,"s3-website.dualstack.us-east-2.amazonaws.com":5,"s3.us-east-2.amazonaws.com":4,"s3-accesspoint.us-east-2.amazonaws.com":4,"s3-accesspoint-fips.us-east-2.amazonaws.com":4,"s3-deprecated.us-east-2.amazonaws.com":4,"s3-fips.us-east-2.amazonaws.com":4,"s3-object-lambda.us-east-2.amazonaws.com":4,"s3-website.us-east-2.amazonaws.com":4,"s3.dualstack.us-gov-east-1.amazonaws.com":5,"s3-accesspoint.dualstack.us-gov-east-1.amazonaws.com":5,"s3-accesspoint-fips.dualstack.us-gov-east-1.amazonaws.com":5,"s3-fips.dualstack.us-gov-east-1.amazonaws.com":5,"s3.us-gov-east-1.amazonaws.com":4,"s3-accesspoint.us-gov-east-1.amazonaws.com":4,"s3-accesspoint-fips.us-gov-east-1.amazonaws.com":4,"s3-fips.us-gov-east-1.amazonaws.com":4,"s3-object-lambda.us-gov-east-1.amazonaws.com":4,"s3-website.us-gov-east-1.amazonaws.com":4,"s3.dualstack.us-gov-west-1.amazonaws.com":5,"s3-accesspoint.dualstack.us-gov-west-1.amazonaws.com":5,"s3-accesspoint-fips.dualstack.us-gov-west-1.amazonaws.com":5,"s3-fips.dualstack.us-gov-west-1.amazonaws.com":5,"s3.us-gov-west-1.amazonaws.com":4,"s3-accesspoint.us-gov-west-1.amazonaws.com":4,"s3-accesspoint-fips.us-gov-west-1.amazonaws.com":4,"s3-fips.us-gov-west-1.amazonaws.com":4,"s3-object-lambda.us-gov-west-1.amazonaws.com":4,"s3-website.us-gov-west-1.amazonaws.com":4,"s3.dualstack.us-west-1.amazonaws.com":5,"s3-accesspoint.dualstack.us-west-1.amazonaws.com":5,"s3-accesspoint-fips.dualstack.us-west-1.amazonaws.com":5,"s3-fips.dualstack.us-west-1.amazonaws.com":5,"s3-website.dualstack.us-west-1.amazonaws.com":5,"s3.us-west-1.amazonaws.com":4,"s3-accesspoint.us-west-1.amazonaws.com":4,"s3-accesspoint-fips.us-west-1.amazonaws.com":4,"s3-fips.us-west-1.amazonaws.com":4,"s3-object-lambda.us-west-1.amazonaws.com":4,"s3-website.us-west-1.amazonaws.com":4,"s3.dualstack.us-west-2.amazonaws.com":5,"s3-accesspoint.dualstack.us-west-2.amazonaws.com":5,"s3-accesspoint-fips.dualstack.us-west-2.amazonaws.com":5,"s3-fips.dualstack.us-west-2.amazonaws.com":5,"s3-website.dualstack.us-west-2.amazonaws.com":5,"s3.us-west-2.amazonaws.com":4,"s3-accesspoint.us-west-2.amazonaws.com":4,"s3-accesspoint-fips.us-west-2.amazonaws.com":4,"s3-deprecated.us-west-2.amazonaws.com":4,"s3-fips.us-west-2.amazonaws.com":4,"s3-object-lambda.us-west-2.amazonaws.com":4,"s3-website.us-west-2.amazonaws.com":4,"labeling.ap-northeast-1.sagemaker.aws":4,"labeling.ap-northeast-2.sagemaker.aws":4,"labeling.ap-south-1.sagemaker.aws":4,"labeling.ap-southeast-1.sagemaker.aws":4,"labeling.ap-southeast-2.sagemaker.aws":4,"labeling.ca-central-1.sagemaker.aws":4,"labeling.eu-central-1.sagemaker.aws":4,"labeling.eu-west-1.sagemaker.aws":4,"labeling.eu-west-2.sagemaker.aws":4,"labeling.us-east-1.sagemaker.aws":4,"labeling.us-east-2.sagemaker.aws":4,"labeling.us-west-2.sagemaker.aws":4,"notebook.af-south-1.sagemaker.aws":4,"notebook.ap-east-1.sagemaker.aws":4,"notebook.ap-northeast-1.sagemaker.aws":4,"notebook.ap-northeast-2.sagemaker.aws":4,"notebook.ap-northeast-3.sagemaker.aws":4,"notebook.ap-south-1.sagemaker.aws":4,"notebook.ap-south-2.sagemaker.aws":4,"notebook.ap-southeast-1.sagemaker.aws":4,"notebook.ap-southeast-2.sagemaker.aws":4,"notebook.ap-southeast-3.sagemaker.aws":4,"notebook.ap-southeast-4.sagemaker.aws":4,"notebook.ca-central-1.sagemaker.aws":4,"notebook-fips.ca-central-1.sagemaker.aws":4,"notebook.ca-west-1.sagemaker.aws":4,"notebook-fips.ca-west-1.sagemaker.aws":4,"notebook.eu-central-1.sagemaker.aws":4,"notebook.eu-central-2.sagemaker.aws":4,"notebook.eu-north-1.sagemaker.aws":4,"notebook.eu-south-1.sagemaker.aws":4,"notebook.eu-south-2.sagemaker.aws":4,"notebook.eu-west-1.sagemaker.aws":4,"notebook.eu-west-2.sagemaker.aws":4,"notebook.eu-west-3.sagemaker.aws":4,"notebook.il-central-1.sagemaker.aws":4,"notebook.me-central-1.sagemaker.aws":4,"notebook.me-south-1.sagemaker.aws":4,"notebook.sa-east-1.sagemaker.aws":4,"notebook.us-east-1.sagemaker.aws":4,"notebook-fips.us-east-1.sagemaker.aws":4,"notebook.us-east-2.sagemaker.aws":4,"notebook-fips.us-east-2.sagemaker.aws":4,"notebook.us-gov-east-1.sagemaker.aws":4,"notebook-fips.us-gov-east-1.sagemaker.aws":4,"notebook.us-gov-west-1.sagemaker.aws":4,"notebook-fips.us-gov-west-1.sagemaker.aws":4,"notebook.us-west-1.sagemaker.aws":4,"notebook-fips.us-west-1.sagemaker.aws":4,"notebook.us-west-2.sagemaker.aws":4,"notebook-fips.us-west-2.sagemaker.aws":4,"notebook.cn-north-1.sagemaker.com.cn":5,"notebook.cn-northwest-1.sagemaker.com.cn":5,"studio.af-south-1.sagemaker.aws":4,"studio.ap-east-1.sagemaker.aws":4,"studio.ap-northeast-1.sagemaker.aws":4,"studio.ap-northeast-2.sagemaker.aws":4,"studio.ap-northeast-3.sagemaker.aws":4,"studio.ap-south-1.sagemaker.aws":4,"studio.ap-southeast-1.sagemaker.aws":4,"studio.ap-southeast-2.sagemaker.aws":4,"studio.ap-southeast-3.sagemaker.aws":4,"studio.ca-central-1.sagemaker.aws":4,"studio.eu-central-1.sagemaker.aws":4,"studio.eu-central-2.sagemaker.aws":4,"studio.eu-north-1.sagemaker.aws":4,"studio.eu-south-1.sagemaker.aws":4,"studio.eu-south-2.sagemaker.aws":4,"studio.eu-west-1.sagemaker.aws":4,"studio.eu-west-2.sagemaker.aws":4,"studio.eu-west-3.sagemaker.aws":4,"studio.il-central-1.sagemaker.aws":4,"studio.me-central-1.sagemaker.aws":4,"studio.me-south-1.sagemaker.aws":4,"studio.sa-east-1.sagemaker.aws":4,"studio.us-east-1.sagemaker.aws":4,"studio.us-east-2.sagemaker.aws":4,"studio.us-gov-east-1.sagemaker.aws":4,"studio-fips.us-gov-east-1.sagemaker.aws":4,"studio.us-gov-west-1.sagemaker.aws":4,"studio-fips.us-gov-west-1.sagemaker.aws":4,"studio.us-west-1.sagemaker.aws":4,"studio.us-west-2.sagemaker.aws":4,"studio.cn-north-1.sagemaker.com.cn":5,"studio.cn-northwest-1.sagemaker.com.cn":5,"experiments.sagemaker.aws":4,"analytics-gateway.ap-northeast-1.amazonaws.com":4,"analytics-gateway.ap-northeast-2.amazonaws.com":4,"analytics-gateway.ap-south-1.amazonaws.com":4,"analytics-gateway.ap-southeast-1.amazonaws.com":4,"analytics-gateway.ap-southeast-2.amazonaws.com":4,"analytics-gateway.eu-central-1.amazonaws.com":4,"analytics-gateway.eu-west-1.amazonaws.com":4,"analytics-gateway.us-east-1.amazonaws.com":4,"analytics-gateway.us-east-2.amazonaws.com":4,"analytics-gateway.us-west-2.amazonaws.com":4,"amplifyapp.com":2,"awsapprunner.com":3,"webview-assets.aws-cloud9.af-south-1.amazonaws.com":5,"vfs.cloud9.af-south-1.amazonaws.com":5,"webview-assets.cloud9.af-south-1.amazonaws.com":5,"webview-assets.aws-cloud9.ap-east-1.amazonaws.com":5,"vfs.cloud9.ap-east-1.amazonaws.com":5,"webview-assets.cloud9.ap-east-1.amazonaws.com":5,"webview-assets.aws-cloud9.ap-northeast-1.amazonaws.com":5,"vfs.cloud9.ap-northeast-1.amazonaws.com":5,"webview-assets.cloud9.ap-northeast-1.amazonaws.com":5,"webview-assets.aws-cloud9.ap-northeast-2.amazonaws.com":5,"vfs.cloud9.ap-northeast-2.amazonaws.com":5,"webview-assets.cloud9.ap-northeast-2.amazonaws.com":5,"webview-assets.aws-cloud9.ap-northeast-3.amazonaws.com":5,"vfs.cloud9.ap-northeast-3.amazonaws.com":5,"webview-assets.cloud9.ap-northeast-3.amazonaws.com":5,"webview-assets.aws-cloud9.ap-south-1.amazonaws.com":5,"vfs.cloud9.ap-south-1.amazonaws.com":5,"webview-assets.cloud9.ap-south-1.amazonaws.com":5,"webview-assets.aws-cloud9.ap-southeast-1.amazonaws.com":5,"vfs.cloud9.ap-southeast-1.amazonaws.com":5,"webview-assets.cloud9.ap-southeast-1.amazonaws.com":5,"webview-assets.aws-cloud9.ap-southeast-2.amazonaws.com":5,"vfs.cloud9.ap-southeast-2.amazonaws.com":5,"webview-assets.cloud9.ap-southeast-2.amazonaws.com":5,"webview-assets.aws-cloud9.ca-central-1.amazonaws.com":5,"vfs.cloud9.ca-central-1.amazonaws.com":5,"webview-assets.cloud9.ca-central-1.amazonaws.com":5,"webview-assets.aws-cloud9.eu-central-1.amazonaws.com":5,"vfs.cloud9.eu-central-1.amazonaws.com":5,"webview-assets.cloud9.eu-central-1.amazonaws.com":5,"webview-assets.aws-cloud9.eu-north-1.amazonaws.com":5,"vfs.cloud9.eu-north-1.amazonaws.com":5,"webview-assets.cloud9.eu-north-1.amazonaws.com":5,"webview-assets.aws-cloud9.eu-south-1.amazonaws.com":5,"vfs.cloud9.eu-south-1.amazonaws.com":5,"webview-assets.cloud9.eu-south-1.amazonaws.com":5,"webview-assets.aws-cloud9.eu-west-1.amazonaws.com":5,"vfs.cloud9.eu-west-1.amazonaws.com":5,"webview-assets.cloud9.eu-west-1.amazonaws.com":5,"webview-assets.aws-cloud9.eu-west-2.amazonaws.com":5,"vfs.cloud9.eu-west-2.amazonaws.com":5,"webview-assets.cloud9.eu-west-2.amazonaws.com":5,"webview-assets.aws-cloud9.eu-west-3.amazonaws.com":5,"vfs.cloud9.eu-west-3.amazonaws.com":5,"webview-assets.cloud9.eu-west-3.amazonaws.com":5,"webview-assets.aws-cloud9.il-central-1.amazonaws.com":5,"vfs.cloud9.il-central-1.amazonaws.com":5,"webview-assets.aws-cloud9.me-south-1.amazonaws.com":5,"vfs.cloud9.me-south-1.amazonaws.com":5,"webview-assets.cloud9.me-south-1.amazonaws.com":5,"webview-assets.aws-cloud9.sa-east-1.amazonaws.com":5,"vfs.cloud9.sa-east-1.amazonaws.com":5,"webview-assets.cloud9.sa-east-1.amazonaws.com":5,"webview-assets.aws-cloud9.us-east-1.amazonaws.com":5,"vfs.cloud9.us-east-1.amazonaws.com":5,"webview-assets.cloud9.us-east-1.amazonaws.com":5,"webview-assets.aws-cloud9.us-east-2.amazonaws.com":5,"vfs.cloud9.us-east-2.amazonaws.com":5,"webview-assets.cloud9.us-east-2.amazonaws.com":5,"webview-assets.aws-cloud9.us-west-1.amazonaws.com":5,"vfs.cloud9.us-west-1.amazonaws.com":5,"webview-assets.cloud9.us-west-1.amazonaws.com":5,"webview-assets.aws-cloud9.us-west-2.amazonaws.com":5,"vfs.cloud9.us-west-2.amazonaws.com":5,"webview-assets.cloud9.us-west-2.amazonaws.com":5,"awsapps.com":2,"cn-north-1.eb.amazonaws.com.cn":5,"cn-northwest-1.eb.amazonaws.com.cn":5,"elasticbeanstalk.com":2,"af-south-1.elasticbeanstalk.com":3,"ap-east-1.elasticbeanstalk.com":3,"ap-northeast-1.elasticbeanstalk.com":3,"ap-northeast-2.elasticbeanstalk.com":3,"ap-northeast-3.elasticbeanstalk.com":3,"ap-south-1.elasticbeanstalk.com":3,"ap-southeast-1.elasticbeanstalk.com":3,"ap-southeast-2.elasticbeanstalk.com":3,"ap-southeast-3.elasticbeanstalk.com":3,"ca-central-1.elasticbeanstalk.com":3,"eu-central-1.elasticbeanstalk.com":3,"eu-north-1.elasticbeanstalk.com":3,"eu-south-1.elasticbeanstalk.com":3,"eu-west-1.elasticbeanstalk.com":3,"eu-west-2.elasticbeanstalk.com":3,"eu-west-3.elasticbeanstalk.com":3,"il-central-1.elasticbeanstalk.com":3,"me-south-1.elasticbeanstalk.com":3,"sa-east-1.elasticbeanstalk.com":3,"us-east-1.elasticbeanstalk.com":3,"us-east-2.elasticbeanstalk.com":3,"us-gov-east-1.elasticbeanstalk.com":3,"us-gov-west-1.elasticbeanstalk.com":3,"us-west-1.elasticbeanstalk.com":3,"us-west-2.elasticbeanstalk.com":3,"elb.amazonaws.com.cn":5,"elb.amazonaws.com":4,"awsglobalaccelerator.com":2,"private.repost.aws":4,"transfer-webapp.ap-northeast-1.on.aws":4,"transfer-webapp.ap-southeast-1.on.aws":4,"transfer-webapp.ap-southeast-2.on.aws":4,"transfer-webapp.eu-central-1.on.aws":4,"transfer-webapp.eu-north-1.on.aws":4,"transfer-webapp.eu-west-1.on.aws":4,"transfer-webapp.us-east-1.on.aws":4,"transfer-webapp.us-east-2.on.aws":4,"transfer-webapp.us-west-2.on.aws":4,"eero.online":2,"eero-stage.online":2,"apigee.io":2,"panel.dev":2,"siiites.com":2,"appspacehosted.com":2,"appspaceusercontent.com":2,"appudo.net":2,"appwrite.global":2,"appwrite.run":3,"on-aptible.com":2,"f5.si":2,"arvanedge.ir":2,"user.aseinet.ne.jp":4,"gv.vc":2,"d.gv.vc":3,"user.party.eus":3,"pimienta.org":2,"poivron.org":2,"potager.org":2,"sweetpepper.org":2,"myasustor.com":2,"cdn.prod.atlassian-dev.net":4,"translated.page":2,"myfritz.link":2,"myfritz.net":2,"onavstack.net":2,"awdev.ca":3,"advisor.ws":3,"ecommerce-shop.pl":2,"b-data.io":2,"balena-devices.com":2,"base.ec":2,"official.ec":2,"buyshop.jp":2,"fashionstore.jp":2,"handcrafted.jp":2,"kawaiishop.jp":2,"supersale.jp":2,"theshop.jp":2,"shopselect.net":2,"base.shop":2,"beagleboard.io":2,"beget.app":3,"pages.gay":2,"bnr.la":2,"bitbucket.io":2,"blackbaudcdn.net":2,"of.je":2,"square.site":2,"bluebite.io":2,"boomla.net":2,"boutir.com":2,"boxfuse.io":2,"square7.ch":2,"bplaced.com":2,"bplaced.de":2,"square7.de":2,"bplaced.net":2,"square7.net":2,"brave.app":2,"s.brave.app":4,"brave.io":2,"s.brave.io":4,"shop.brendly.hr":3,"shop.brendly.rs":3,"browsersafetymark.io":2,"radio.am":2,"radio.fm":2,"cdn.bubble.io":3,"bubbleapps.io":2,"uk0.bigv.io":3,"dh.bytemark.co.uk":4,"vm.bytemark.co.uk":4,"cafjs.com":2,"canva-apps.cn":2,"my.canvasite.cn":3,"canva-apps.com":2,"my.canva.site":3,"drr.ac":2,"uwu.ai":2,"carrd.co":2,"crd.co":2,"ju.mp":2,"api.gov.uk":3,"cdn77-storage.com":2,"rsc.contentproxy9.cz":3,"r.cdn77.net":3,"cdn77-ssl.net":2,"c.cdn77.org":3,"rsc.cdn77.org":3,"ssl.origin.cdn77-secure.org":4,"za.bz":2,"br.com":2,"cn.com":2,"de.com":2,"eu.com":2,"jpn.com":2,"mex.com":2,"ru.com":2,"sa.com":2,"uk.com":2,"us.com":2,"za.com":2,"com.de":2,"gb.net":2,"hu.net":2,"jp.net":2,"se.net":2,"uk.net":2,"ae.org":2,"com.se":2,"cx.ua":2,"discourse.group":2,"discourse.team":2,"clerk.app":2,"clerkstage.app":2,"lcl.dev":3,"lclstage.dev":3,"stg.dev":3,"stgstage.dev":3,"cleverapps.cc":2,"services.clever-cloud.com":4,"cleverapps.io":2,"cleverapps.tech":2,"clickrising.net":2,"cloudns.asia":2,"cloudns.be":2,"cloud-ip.biz":2,"cloudns.biz":2,"cloudns.cc":2,"cloudns.ch":2,"cloudns.cl":2,"cloudns.club":2,"dnsabr.com":2,"ip-ddns.com":2,"cloudns.cx":2,"cloudns.eu":2,"cloudns.in":2,"cloudns.info":2,"ddns-ip.net":2,"dns-cloud.net":2,"dns-dynamic.net":2,"cloudns.nz":2,"cloudns.org":2,"ip-dynamic.org":2,"cloudns.ph":2,"cloudns.pro":2,"cloudns.pw":2,"cloudns.us":2,"c66.me":2,"cloud66.ws":2,"jdevcloud.com":2,"wpdevcloud.com":2,"cloudaccess.host":2,"freesite.host":2,"cloudaccess.net":2,"cloudbeesusercontent.io":2,"cloudera.site":3,"cf-ipfs.com":2,"cloudflare-ipfs.com":2,"trycloudflare.com":2,"pages.dev":2,"r2.dev":2,"workers.dev":2,"cloudflare.net":2,"cdn.cloudflare.net":3,"cdn.cloudflareanycast.net":3,"cdn.cloudflarecn.net":3,"cdn.cloudflareglobal.net":3,"cust.cloudscale.ch":3,"objects.lpg.cloudscale.ch":4,"objects.rma.cloudscale.ch":4,"lpg.objectstorage.ch":3,"rma.objectstorage.ch":3,"wnext.app":2,"cnpy.gdn":2,"otap.co":3,"co.ca":2,"co.com":2,"codeberg.page":2,"csb.app":2,"preview.csb.app":3,"co.nl":2,"co.no":2,"devinapps.com":3,"webhosting.be":2,"hosting-cluster.nl":2,"ctfcloud.net":2,"convex.app":2,"convex.cloud":2,"convex.site":2,"ac.ru":2,"edu.ru":2,"gov.ru":2,"int.ru":2,"mil.ru":2,"dyn.cosidns.de":3,"dnsupdater.de":2,"dynamisches-dns.de":2,"internet-dns.de":2,"l-o-g-i-n.de":2,"dynamic-dns.info":2,"feste-ip.net":2,"knx-server.net":2,"static-access.net":2,"craft.me":2,"realm.cz":2,"on.crisp.email":3,"cryptonomic.net":3,"cfolks.pl":2,"cyon.link":2,"cyon.site":2,"biz.dk":2,"co.dk":2,"firm.dk":2,"reg.dk":2,"store.dk":2,"dyndns.dappnode.io":3,"builtwithdark.com":2,"darklang.io":2,"demo.datadetect.com":3,"instance.datadetect.com":3,"edgestack.me":2,"dattolocal.com":2,"dattorelay.com":2,"dattoweb.com":2,"mydatto.com":2,"dattolocal.net":2,"mydatto.net":2,"ddnss.de":2,"dyn.ddnss.de":3,"dyndns.ddnss.de":3,"dyn-ip24.de":2,"dyndns1.de":2,"home-webserver.de":2,"dyn.home-webserver.de":3,"myhome-server.de":2,"ddnss.org":2,"debian.net":2,"definima.io":2,"definima.net":2,"deno.dev":2,"deno-staging.dev":2,"deno.net":2,"dedyn.io":2,"deta.app":2,"deta.dev":2,"caffeine.ai":2,"id.ai":2,"icp-api.io":2,"icp0.io":2,"raw.icp0.io":4,"icp1.io":2,"raw.icp1.io":4,"caffeine.site":2,"dfirma.pl":2,"dkonto.pl":2,"you2.pl":2,"ondigitalocean.app":2,"digitaloceanspaces.com":3,"qzz.io":2,"us.kg":2,"xx.kg":2,"dpdns.org":2,"discordsays.com":2,"discordsez.com":2,"jozi.biz":2,"dnshome.de":2,"online.th":2,"shop.th":2,"drayddns.com":2,"shoparena.pl":2,"dreamhosters.com":2,"durumis.com":2,"mydrobo.com":2,"duckdns.org":2,"dy.fi":2,"tunk.org":2,"dyndns.biz":2,"for-better.biz":2,"for-more.biz":2,"for-some.biz":2,"for-the.biz":2,"selfip.biz":2,"webhop.biz":2,"ftpaccess.cc":2,"game-server.cc":2,"myphotos.cc":2,"scrapping.cc":2,"blogdns.com":2,"cechire.com":2,"dnsalias.com":2,"dnsdojo.com":2,"doesntexist.com":2,"dontexist.com":2,"doomdns.com":2,"dyn-o-saur.com":2,"dynalias.com":2,"dyndns-at-home.com":2,"dyndns-at-work.com":2,"dyndns-blog.com":2,"dyndns-free.com":2,"dyndns-home.com":2,"dyndns-ip.com":2,"dyndns-mail.com":2,"dyndns-office.com":2,"dyndns-pics.com":2,"dyndns-remote.com":2,"dyndns-server.com":2,"dyndns-web.com":2,"dyndns-wiki.com":2,"dyndns-work.com":2,"est-a-la-maison.com":2,"est-a-la-masion.com":2,"est-le-patron.com":2,"est-mon-blogueur.com":2,"from-ak.com":2,"from-al.com":2,"from-ar.com":2,"from-ca.com":2,"from-ct.com":2,"from-dc.com":2,"from-de.com":2,"from-fl.com":2,"from-ga.com":2,"from-hi.com":2,"from-ia.com":2,"from-id.com":2,"from-il.com":2,"from-in.com":2,"from-ks.com":2,"from-ky.com":2,"from-ma.com":2,"from-md.com":2,"from-mi.com":2,"from-mn.com":2,"from-mo.com":2,"from-ms.com":2,"from-mt.com":2,"from-nc.com":2,"from-nd.com":2,"from-ne.com":2,"from-nh.com":2,"from-nj.com":2,"from-nm.com":2,"from-nv.com":2,"from-oh.com":2,"from-ok.com":2,"from-or.com":2,"from-pa.com":2,"from-pr.com":2,"from-ri.com":2,"from-sc.com":2,"from-sd.com":2,"from-tn.com":2,"from-tx.com":2,"from-ut.com":2,"from-va.com":2,"from-vt.com":2,"from-wa.com":2,"from-wi.com":2,"from-wv.com":2,"from-wy.com":2,"getmyip.com":2,"gotdns.com":2,"hobby-site.com":2,"homelinux.com":2,"homeunix.com":2,"iamallama.com":2,"is-a-anarchist.com":2,"is-a-blogger.com":2,"is-a-bookkeeper.com":2,"is-a-bulls-fan.com":2,"is-a-caterer.com":2,"is-a-chef.com":2,"is-a-conservative.com":2,"is-a-cpa.com":2,"is-a-cubicle-slave.com":2,"is-a-democrat.com":2,"is-a-designer.com":2,"is-a-doctor.com":2,"is-a-financialadvisor.com":2,"is-a-geek.com":2,"is-a-green.com":2,"is-a-guru.com":2,"is-a-hard-worker.com":2,"is-a-hunter.com":2,"is-a-landscaper.com":2,"is-a-lawyer.com":2,"is-a-liberal.com":2,"is-a-libertarian.com":2,"is-a-llama.com":2,"is-a-musician.com":2,"is-a-nascarfan.com":2,"is-a-nurse.com":2,"is-a-painter.com":2,"is-a-personaltrainer.com":2,"is-a-photographer.com":2,"is-a-player.com":2,"is-a-republican.com":2,"is-a-rockstar.com":2,"is-a-socialist.com":2,"is-a-student.com":2,"is-a-teacher.com":2,"is-a-techie.com":2,"is-a-therapist.com":2,"is-an-accountant.com":2,"is-an-actor.com":2,"is-an-actress.com":2,"is-an-anarchist.com":2,"is-an-artist.com":2,"is-an-engineer.com":2,"is-an-entertainer.com":2,"is-certified.com":2,"is-gone.com":2,"is-into-anime.com":2,"is-into-cars.com":2,"is-into-cartoons.com":2,"is-into-games.com":2,"is-leet.com":2,"is-not-certified.com":2,"is-slick.com":2,"is-uberleet.com":2,"is-with-theband.com":2,"isa-geek.com":2,"isa-hockeynut.com":2,"issmarterthanyou.com":2,"likes-pie.com":2,"likescandy.com":2,"neat-url.com":2,"saves-the-whales.com":2,"selfip.com":2,"sells-for-less.com":2,"sells-for-u.com":2,"servebbs.com":2,"simple-url.com":2,"space-to-rent.com":2,"teaches-yoga.com":2,"writesthisblog.com":2,"ath.cx":2,"fuettertdasnetz.de":2,"isteingeek.de":2,"istmein.de":2,"lebtimnetz.de":2,"leitungsen.de":2,"traeumtgerade.de":2,"barrel-of-knowledge.info":2,"barrell-of-knowledge.info":2,"dyndns.info":2,"for-our.info":2,"groks-the.info":2,"groks-this.info":2,"here-for-more.info":2,"knowsitall.info":2,"selfip.info":2,"webhop.info":2,"forgot.her.name":3,"forgot.his.name":3,"at-band-camp.net":2,"blogdns.net":2,"broke-it.net":2,"buyshouses.net":2,"dnsalias.net":2,"dnsdojo.net":2,"does-it.net":2,"dontexist.net":2,"dynalias.net":2,"dynathome.net":2,"endofinternet.net":2,"from-az.net":2,"from-co.net":2,"from-la.net":2,"from-ny.net":2,"gets-it.net":2,"ham-radio-op.net":2,"homeftp.net":2,"homeip.net":2,"homelinux.net":2,"homeunix.net":2,"in-the-band.net":2,"is-a-chef.net":2,"is-a-geek.net":2,"isa-geek.net":2,"kicks-ass.net":2,"office-on-the.net":2,"podzone.net":2,"scrapper-site.net":2,"selfip.net":2,"sells-it.net":2,"servebbs.net":2,"serveftp.net":2,"thruhere.net":2,"webhop.net":2,"merseine.nu":2,"mine.nu":2,"shacknet.nu":2,"blogdns.org":2,"blogsite.org":2,"boldlygoingnowhere.org":2,"dnsalias.org":2,"dnsdojo.org":2,"doesntexist.org":2,"dontexist.org":2,"doomdns.org":2,"dvrdns.org":2,"dynalias.org":2,"dyndns.org":2,"go.dyndns.org":3,"home.dyndns.org":3,"endofinternet.org":2,"endoftheinternet.org":2,"from-me.org":2,"game-host.org":2,"gotdns.org":2,"hobby-site.org":2,"homedns.org":2,"homeftp.org":2,"homelinux.org":2,"homeunix.org":2,"is-a-bruinsfan.org":2,"is-a-candidate.org":2,"is-a-celticsfan.org":2,"is-a-chef.org":2,"is-a-geek.org":2,"is-a-knight.org":2,"is-a-linux-user.org":2,"is-a-patsfan.org":2,"is-a-soxfan.org":2,"is-found.org":2,"is-lost.org":2,"is-saved.org":2,"is-very-bad.org":2,"is-very-evil.org":2,"is-very-good.org":2,"is-very-nice.org":2,"is-very-sweet.org":2,"isa-geek.org":2,"kicks-ass.org":2,"misconfused.org":2,"podzone.org":2,"readmyblog.org":2,"selfip.org":2,"sellsyourhome.org":2,"servebbs.org":2,"serveftp.org":2,"servegame.org":2,"stuff-4-sale.org":2,"webhop.org":2,"better-than.tv":2,"dyndns.tv":2,"on-the-web.tv":2,"worse-than.tv":2,"is-by.us":2,"land-4-sale.us":2,"stuff-4-sale.us":2,"dyndns.ws":2,"mypets.ws":2,"ddnsfree.com":2,"ddnsgeek.com":2,"giize.com":2,"gleeze.com":2,"kozow.com":2,"loseyourip.com":2,"ooguy.com":2,"theworkpc.com":2,"casacam.net":2,"dynu.net":2,"accesscam.org":2,"camdvr.org":2,"freeddns.org":2,"mywire.org":2,"webredirect.org":2,"myddns.rocks":2,"dynv6.net":2,"e4.cz":2,"easypanel.app":2,"easypanel.host":2,"ewp.live":3,"twmail.cc":2,"twmail.net":2,"twmail.org":2,"mymailer.com.tw":3,"url.tw":2,"at.emf.camp":3,"rt.ht":2,"elementor.cloud":2,"elementor.cool":2,"en-root.fr":2,"mytuleap.com":2,"tuleap-partners.com":2,"encr.app":2,"frontend.encr.app":3,"encoreapi.com":2,"lp.dev":2,"api.lp.dev":3,"objects.lp.dev":3,"eu.encoway.cloud":3,"eu.org":2,"al.eu.org":3,"asso.eu.org":3,"at.eu.org":3,"au.eu.org":3,"be.eu.org":3,"bg.eu.org":3,"ca.eu.org":3,"cd.eu.org":3,"ch.eu.org":3,"cn.eu.org":3,"cy.eu.org":3,"cz.eu.org":3,"de.eu.org":3,"dk.eu.org":3,"edu.eu.org":3,"ee.eu.org":3,"es.eu.org":3,"fi.eu.org":3,"fr.eu.org":3,"gr.eu.org":3,"hr.eu.org":3,"hu.eu.org":3,"ie.eu.org":3,"il.eu.org":3,"in.eu.org":3,"int.eu.org":3,"is.eu.org":3,"it.eu.org":3,"jp.eu.org":3,"kr.eu.org":3,"lt.eu.org":3,"lu.eu.org":3,"lv.eu.org":3,"me.eu.org":3,"mk.eu.org":3,"mt.eu.org":3,"my.eu.org":3,"net.eu.org":3,"ng.eu.org":3,"nl.eu.org":3,"no.eu.org":3,"nz.eu.org":3,"pl.eu.org":3,"pt.eu.org":3,"ro.eu.org":3,"ru.eu.org":3,"se.eu.org":3,"si.eu.org":3,"sk.eu.org":3,"tr.eu.org":3,"uk.eu.org":3,"us.eu.org":3,"eurodir.ru":2,"eu-1.evennode.com":3,"eu-2.evennode.com":3,"eu-3.evennode.com":3,"eu-4.evennode.com":3,"us-1.evennode.com":3,"us-2.evennode.com":3,"us-3.evennode.com":3,"us-4.evennode.com":3,"relay.evervault.app":3,"relay.evervault.dev":3,"expo.app":2,"staging.expo.app":3,"onfabrica.com":2,"ru.net":2,"adygeya.ru":2,"bashkiria.ru":2,"bir.ru":2,"cbg.ru":2,"com.ru":2,"dagestan.ru":2,"grozny.ru":2,"kalmykia.ru":2,"kustanai.ru":2,"marine.ru":2,"mordovia.ru":2,"msk.ru":2,"mytis.ru":2,"nalchik.ru":2,"nov.ru":2,"pyatigorsk.ru":2,"spb.ru":2,"vladikavkaz.ru":2,"vladimir.ru":2,"abkhazia.su":2,"adygeya.su":2,"aktyubinsk.su":2,"arkhangelsk.su":2,"armenia.su":2,"ashgabad.su":2,"azerbaijan.su":2,"balashov.su":2,"bashkiria.su":2,"bryansk.su":2,"bukhara.su":2,"chimkent.su":2,"dagestan.su":2,"east-kazakhstan.su":2,"exnet.su":2,"georgia.su":2,"grozny.su":2,"ivanovo.su":2,"jambyl.su":2,"kalmykia.su":2,"kaluga.su":2,"karacol.su":2,"karaganda.su":2,"karelia.su":2,"khakassia.su":2,"krasnodar.su":2,"kurgan.su":2,"kustanai.su":2,"lenug.su":2,"mangyshlak.su":2,"mordovia.su":2,"msk.su":2,"murmansk.su":2,"nalchik.su":2,"navoi.su":2,"north-kazakhstan.su":2,"nov.su":2,"obninsk.su":2,"penza.su":2,"pokrovsk.su":2,"sochi.su":2,"spb.su":2,"tashkent.su":2,"termez.su":2,"togliatti.su":2,"troitsk.su":2,"tselinograd.su":2,"tula.su":2,"tuva.su":2,"vladikavkaz.su":2,"vladimir.su":2,"vologda.su":2,"channelsdvr.net":2,"u.channelsdvr.net":3,"edgecompute.app":2,"fastly-edge.com":2,"fastly-terrarium.com":2,"freetls.fastly.net":3,"map.fastly.net":3,"a.prod.fastly.net":4,"global.prod.fastly.net":4,"a.ssl.fastly.net":4,"b.ssl.fastly.net":4,"global.ssl.fastly.net":4,"fastlylb.net":2,"map.fastlylb.net":3,"user.fm":3,"fastvps-server.com":2,"fastvps.host":2,"myfast.host":2,"fastvps.site":2,"myfast.space":2,"conn.uk":2,"copro.uk":2,"hosp.uk":2,"fedorainfracloud.org":2,"fedorapeople.org":2,"cloud.fedoraproject.org":3,"app.os.fedoraproject.org":4,"app.os.stg.fedoraproject.org":5,"mydobiss.com":2,"fh-muenster.io":2,"figma.site":2,"preview.site":2,"filegear.me":2,"firebaseapp.com":2,"fldrv.com":2,"on-fleek.app":2,"flutterflow.app":2,"fly.dev":2,"shw.io":2,"edgeapp.net":2,"forgeblocks.com":2,"id.forgerock.io":3,"e2b.app":2,"framer.ai":2,"framer.app":2,"framercanvas.com":2,"framer.media":2,"framer.photos":2,"framer.website":2,"framer.wiki":2,"0e.vc":3,"freebox-os.com":2,"freeboxos.com":2,"fbx-os.fr":2,"fbxos.fr":2,"freebox-os.fr":2,"freeboxos.fr":2,"freedesktop.org":2,"freemyip.com":2,"frusky.de":3,"wien.funkfeuer.at":3,"daemon.asia":2,"dix.asia":2,"mydns.bz":2,"0am.jp":2,"0g0.jp":2,"0j0.jp":2,"0t0.jp":2,"mydns.jp":2,"pgw.jp":2,"wjg.jp":2,"keyword-on.net":2,"live-on.net":2,"server-on.net":2,"mydns.tw":2,"mydns.vc":2,"futurecms.at":3,"ex.futurecms.at":4,"in.futurecms.at":4,"futurehosting.at":2,"futuremailing.at":2,"ex.ortsinfo.at":4,"kunden.ortsinfo.at":4,"statics.cloud":3,"aliases121.com":2,"campaign.gov.uk":3,"service.gov.uk":3,"independent-commission.uk":2,"independent-inquest.uk":2,"independent-inquiry.uk":2,"independent-panel.uk":2,"independent-review.uk":2,"public-inquiry.uk":2,"royal-commission.uk":2,"gehirn.ne.jp":3,"usercontent.jp":2,"gentapps.com":2,"gentlentapis.com":2,"cdn-edges.net":2,"gsj.bz":2,"github.app":2,"githubusercontent.com":2,"githubpreview.dev":2,"github.io":2,"gitlab.io":2,"gitapp.si":2,"gitpage.si":2,"glitch.me":2,"nog.community":2,"co.ro":2,"shop.ro":2,"lolipop.io":2,"angry.jp":2,"babyblue.jp":2,"babymilk.jp":2,"backdrop.jp":2,"bambina.jp":2,"bitter.jp":2,"blush.jp":2,"boo.jp":2,"boy.jp":2,"boyfriend.jp":2,"but.jp":2,"candypop.jp":2,"capoo.jp":2,"catfood.jp":2,"cheap.jp":2,"chicappa.jp":2,"chillout.jp":2,"chips.jp":2,"chowder.jp":2,"chu.jp":2,"ciao.jp":2,"cocotte.jp":2,"coolblog.jp":2,"cranky.jp":2,"cutegirl.jp":2,"daa.jp":2,"deca.jp":2,"deci.jp":2,"digick.jp":2,"egoism.jp":2,"fakefur.jp":2,"fem.jp":2,"flier.jp":2,"floppy.jp":2,"fool.jp":2,"frenchkiss.jp":2,"girlfriend.jp":2,"girly.jp":2,"gloomy.jp":2,"gonna.jp":2,"greater.jp":2,"hacca.jp":2,"heavy.jp":2,"her.jp":2,"hiho.jp":2,"hippy.jp":2,"holy.jp":2,"hungry.jp":2,"icurus.jp":2,"itigo.jp":2,"jellybean.jp":2,"kikirara.jp":2,"kill.jp":2,"kilo.jp":2,"kuron.jp":2,"littlestar.jp":2,"lolipopmc.jp":2,"lolitapunk.jp":2,"lomo.jp":2,"lovepop.jp":2,"lovesick.jp":2,"main.jp":2,"mods.jp":2,"mond.jp":2,"mongolian.jp":2,"moo.jp":2,"namaste.jp":2,"nikita.jp":2,"nobushi.jp":2,"noor.jp":2,"oops.jp":2,"parallel.jp":2,"parasite.jp":2,"pecori.jp":2,"peewee.jp":2,"penne.jp":2,"pepper.jp":2,"perma.jp":2,"pigboat.jp":2,"pinoko.jp":2,"punyu.jp":2,"pupu.jp":2,"pussycat.jp":2,"pya.jp":2,"raindrop.jp":2,"readymade.jp":2,"sadist.jp":2,"schoolbus.jp":2,"secret.jp":2,"staba.jp":2,"stripper.jp":2,"sub.jp":2,"sunnyday.jp":2,"thick.jp":2,"tonkotsu.jp":2,"under.jp":2,"upper.jp":2,"velvet.jp":2,"verse.jp":2,"versus.jp":2,"vivian.jp":2,"watson.jp":2,"weblike.jp":2,"whitesnow.jp":2,"zombie.jp":2,"heteml.net":2,"graphic.design":2,"goip.de":2,"hosted.app":3,"run.app":3,"mtls.run.app":4,"web.app":2,"0emm.com":3,"appspot.com":2,"r.appspot.com":4,"blogspot.com":2,"codespot.com":2,"googleapis.com":2,"googlecode.com":2,"pagespeedmobilizer.com":2,"withgoogle.com":2,"withyoutube.com":2,"gateway.dev":3,"cloud.goog":2,"translate.goog":2,"usercontent.goog":3,"cloudfunctions.net":2,"goupile.fr":2,"pymnt.uk":2,"cloudapps.digital":2,"london.cloudapps.digital":3,"gov.nl":2,"grafana-dev.net":2,"grayjayleagues.com":2,"xn--gnstigbestellen-zvb.de":2,"xn--gnstigliefern-wob.de":2,"xn--hkkinen-5wa.fi":2,"hashbang.sh":2,"hasura.app":2,"hasura-app.io":2,"hatenablog.com":2,"hatenadiary.com":2,"hateblo.jp":2,"hatenablog.jp":2,"hatenadiary.jp":2,"hatenadiary.org":2,"pages.it.hs-heilbronn.de":4,"pages-research.it.hs-heilbronn.de":4,"heiyu.space":2,"helioho.st":2,"heliohost.us":2,"hepforge.org":2,"herokuapp.com":2,"heyflow.page":2,"heyflow.site":2,"ravendb.cloud":2,"ravendb.community":2,"development.run":2,"ravendb.run":2,"homesklep.pl":2,"kin.one":3,"id.pub":3,"kin.pub":3,"hoplix.shop":2,"orx.biz":2,"biz.gl":2,"biz.ng":2,"co.biz.ng":3,"dl.biz.ng":3,"go.biz.ng":3,"lg.biz.ng":3,"on.biz.ng":3,"col.ng":2,"firm.ng":2,"gen.ng":2,"ltd.ng":2,"ngo.ng":2,"plc.ng":2,"hostyhosting.io":2,"hf.space":2,"static.hf.space":3,"hypernode.io":2,"iobb.net":2,"co.cz":2,"moonscale.io":3,"moonscale.net":2,"gr.com":2,"iki.fi":2,"ibxos.it":2,"iliadboxos.it":2,"smushcdn.com":2,"wphostedmail.com":2,"wpmucdn.com":2,"tempurl.host":2,"wpmudev.host":2,"dyn-berlin.de":2,"in-berlin.de":2,"in-brb.de":2,"in-butter.de":2,"in-dsl.de":2,"in-vpn.de":2,"in-dsl.net":2,"in-vpn.net":2,"in-dsl.org":2,"in-vpn.org":2,"oninferno.net":2,"biz.at":2,"info.at":2,"info.cx":2,"ac.leg.br":3,"al.leg.br":3,"am.leg.br":3,"ap.leg.br":3,"ba.leg.br":3,"ce.leg.br":3,"df.leg.br":3,"es.leg.br":3,"go.leg.br":3,"ma.leg.br":3,"mg.leg.br":3,"ms.leg.br":3,"mt.leg.br":3,"pa.leg.br":3,"pb.leg.br":3,"pe.leg.br":3,"pi.leg.br":3,"pr.leg.br":3,"rj.leg.br":3,"rn.leg.br":3,"ro.leg.br":3,"rr.leg.br":3,"rs.leg.br":3,"sc.leg.br":3,"se.leg.br":3,"sp.leg.br":3,"to.leg.br":3,"pixolino.com":2,"na4u.ru":2,"botdash.app":2,"botdash.dev":2,"botdash.gg":2,"botdash.net":2,"botda.sh":2,"botdash.xyz":2,"apps-1and1.com":2,"live-website.com":2,"webspace-host.com":2,"apps-1and1.net":2,"websitebuilder.online":2,"app-ionos.space":2,"iopsys.se":2,"inbrowser.dev":3,"dweb.link":3,"inbrowser.link":3,"ipifony.net":2,"ir.md":2,"is-a-good.dev":2,"is-a.dev":2,"iservschule.de":2,"mein-iserv.de":2,"schuldock.de":2,"schulplattform.de":2,"schulserver.de":2,"test-iserv.de":2,"iserv.dev":2,"iserv.host":2,"mel.cloudlets.com.au":4,"cloud.interhostsolutions.be":3,"alp1.ae.flow.ch":4,"appengine.flow.ch":3,"es-1.axarnet.cloud":3,"diadem.cloud":2,"vip.jelastic.cloud":3,"jele.cloud":2,"it1.eur.aruba.jenv-aruba.cloud":5,"it1.jenv-aruba.cloud":3,"keliweb.cloud":2,"cs.keliweb.cloud":3,"oxa.cloud":2,"tn.oxa.cloud":3,"uk.oxa.cloud":3,"primetel.cloud":2,"uk.primetel.cloud":3,"ca.reclaim.cloud":3,"uk.reclaim.cloud":3,"us.reclaim.cloud":3,"ch.trendhosting.cloud":3,"de.trendhosting.cloud":3,"jele.club":2,"dopaas.com":2,"paas.hosted-by-previder.com":3,"rag-cloud.hosteur.com":3,"rag-cloud-ch.hosteur.com":3,"jcloud.ik-server.com":3,"jcloud-ver-jpc.ik-server.com":3,"demo.jelastic.com":3,"paas.massivegrid.com":3,"jed.wafaicloud.com":3,"ryd.wafaicloud.com":3,"j.scaleforce.com.cy":4,"jelastic.dogado.eu":3,"fi.cloudplatform.fi":3,"demo.datacenter.fi":3,"paas.datacenter.fi":3,"jele.host":2,"mircloud.host":2,"paas.beebyte.io":3,"sekd1.beebyteapp.io":3,"jele.io":2,"jc.neen.it":3,"jcloud.kz":2,"cloudjiffy.net":2,"fra1-de.cloudjiffy.net":3,"west1-us.cloudjiffy.net":3,"jls-sto1.elastx.net":3,"jls-sto2.elastx.net":3,"jls-sto3.elastx.net":3,"fr-1.paas.massivegrid.net":4,"lon-1.paas.massivegrid.net":4,"lon-2.paas.massivegrid.net":4,"ny-1.paas.massivegrid.net":4,"ny-2.paas.massivegrid.net":4,"sg-1.paas.massivegrid.net":4,"jelastic.saveincloud.net":3,"nordeste-idc.saveincloud.net":3,"j.scaleforce.net":3,"sdscloud.pl":2,"unicloud.pl":2,"mircloud.ru":2,"enscaled.sg":2,"jele.site":2,"jelastic.team":2,"orangecloud.tn":2,"j.layershift.co.uk":4,"phx.enscaled.us":3,"mircloud.us":2,"myjino.ru":2,"hosting.myjino.ru":4,"landing.myjino.ru":4,"spectrum.myjino.ru":4,"vps.myjino.ru":4,"jotelulu.cloud":2,"webadorsite.com":2,"jouwweb.site":2,"cns.joyent.com":4,"triton.zone":3,"js.org":2,"kaas.gg":2,"khplay.nl":2,"kapsi.fi":2,"ezproxy.kuleuven.be":3,"kuleuven.cloud":2,"keymachine.de":2,"kinghost.net":2,"uni5.net":2,"knightpoint.systems":2,"koobin.events":2,"webthings.io":2,"krellian.net":2,"oya.to":2,"laravel.cloud":2,"git-repos.de":2,"lcube-server.de":2,"svn-repos.de":2,"leadpages.co":2,"lpages.co":2,"lpusercontent.com":2,"liara.run":2,"iran.liara.run":3,"libp2p.direct":2,"runcontainers.dev":2,"co.business":2,"co.education":2,"co.events":2,"co.financial":2,"co.network":2,"co.place":2,"co.technology":2,"linkyard-cloud.ch":2,"linkyard.cloud":2,"members.linode.com":3,"nodebalancer.linode.com":4,"linodeobjects.com":3,"ip.linodeusercontent.com":3,"we.bs":2,"filegear-sg.me":2,"ggff.net":2,"user.localcert.dev":4,"localcert.net":2,"localtonet.com":2,"localto.net":3,"lodz.pl":2,"pabianice.pl":2,"plock.pl":2,"sieradz.pl":2,"skierniewice.pl":2,"zgierz.pl":2,"loginline.app":2,"loginline.dev":2,"loginline.io":2,"loginline.services":2,"loginline.site":2,"lohmus.me":2,"servers.run":2,"lovable.app":2,"lovableproject.com":2,"krasnik.pl":2,"leczna.pl":2,"lubartow.pl":2,"lublin.pl":2,"poniatowa.pl":2,"swidnik.pl":2,"glug.org.uk":3,"lug.org.uk":3,"lugs.org.uk":3,"barsy.bg":2,"barsy.club":2,"barsycenter.com":2,"barsyonline.com":2,"barsy.de":2,"barsy.dev":2,"barsy.eu":2,"barsy.gr":2,"barsy.in":2,"barsy.info":2,"barsy.io":2,"barsy.me":2,"barsy.menu":2,"barsyonline.menu":2,"barsy.mobi":2,"barsy.net":2,"barsy.online":2,"barsy.org":2,"barsy.pro":2,"barsy.pub":2,"barsy.ro":2,"barsy.rs":2,"barsy.shop":2,"barsyonline.shop":2,"barsy.site":2,"barsy.store":2,"barsy.support":2,"barsy.uk":2,"barsy.co.uk":3,"barsyonline.co.uk":3,"lutrausercontent.com":3,"luyani.app":2,"luyani.net":2,"magentosite.cloud":3,"hb.cldmail.ru":3,"matlab.cloud":2,"modelscape.com":2,"mwcloudnonprod.com":2,"polyspace.com":2,"mayfirst.info":2,"mayfirst.org":2,"mazeplay.com":2,"mcdir.me":2,"mcdir.ru":2,"vps.mcdir.ru":3,"mcpre.ru":2,"mediatech.by":2,"mediatech.dev":2,"hra.health":2,"medusajs.app":2,"miniserver.com":2,"memset.net":2,"messerli.app":2,"atmeta.com":2,"apps.fbsbx.com":3,"cloud.metacentrum.cz":4,"custom.metacentrum.cz":3,"flt.cloud.muni.cz":4,"usr.cloud.muni.cz":4,"meteorapp.com":2,"eu.meteorapp.com":3,"co.pl":2,"azurecontainer.io":3,"azure-api.net":2,"azure-mobile.net":2,"azureedge.net":2,"azurefd.net":2,"azurestaticapps.net":2,"1.azurestaticapps.net":3,"2.azurestaticapps.net":3,"3.azurestaticapps.net":3,"4.azurestaticapps.net":3,"5.azurestaticapps.net":3,"6.azurestaticapps.net":3,"7.azurestaticapps.net":3,"centralus.azurestaticapps.net":3,"eastasia.azurestaticapps.net":3,"eastus2.azurestaticapps.net":3,"westeurope.azurestaticapps.net":3,"westus2.azurestaticapps.net":3,"azurewebsites.net":2,"cloudapp.net":2,"trafficmanager.net":2,"blob.core.windows.net":4,"servicebus.windows.net":3,"routingthecloud.com":2,"sn.mynetname.net":3,"routingthecloud.net":2,"routingthecloud.org":2,"csx.cc":2,"mydbserver.com":2,"webspaceconfig.de":2,"mittwald.info":2,"mittwaldserver.info":2,"typo3server.info":2,"project.space":2,"modx.dev":2,"bmoattachments.org":2,"net.ru":2,"org.ru":2,"pp.ru":2,"hostedpi.com":2,"caracal.mythic-beasts.com":3,"customer.mythic-beasts.com":3,"fentiger.mythic-beasts.com":3,"lynx.mythic-beasts.com":3,"ocelot.mythic-beasts.com":3,"oncilla.mythic-beasts.com":3,"onza.mythic-beasts.com":3,"sphinx.mythic-beasts.com":3,"vs.mythic-beasts.com":3,"x.mythic-beasts.com":3,"yali.mythic-beasts.com":3,"cust.retrosnub.co.uk":4,"ui.nabu.casa":3,"cloud.nospamproxy.com":3,"o365.cloud.nospamproxy.com":4,"netlib.re":2,"netfy.app":2,"netlify.app":2,"4u.com":2,"nfshost.com":2,"ipfs.nftstorage.link":3,"ngo.us":2,"ngrok.app":2,"ngrok-free.app":2,"ngrok.dev":2,"ngrok-free.dev":2,"ngrok.io":2,"ap.ngrok.io":3,"au.ngrok.io":3,"eu.ngrok.io":3,"in.ngrok.io":3,"jp.ngrok.io":3,"sa.ngrok.io":3,"us.ngrok.io":3,"ngrok.pizza":2,"ngrok.pro":2,"torun.pl":2,"nh-serv.co.uk":3,"nimsite.uk":2,"mmafan.biz":2,"myftp.biz":2,"no-ip.biz":2,"no-ip.ca":2,"fantasyleague.cc":2,"gotdns.ch":2,"3utilities.com":2,"blogsyte.com":2,"ciscofreak.com":2,"damnserver.com":2,"ddnsking.com":2,"ditchyourip.com":2,"dnsiskinky.com":2,"dynns.com":2,"geekgalaxy.com":2,"health-carereform.com":2,"homesecuritymac.com":2,"homesecuritypc.com":2,"myactivedirectory.com":2,"mysecuritycamera.com":2,"myvnc.com":2,"net-freaks.com":2,"onthewifi.com":2,"point2this.com":2,"quicksytes.com":2,"securitytactics.com":2,"servebeer.com":2,"servecounterstrike.com":2,"serveexchange.com":2,"serveftp.com":2,"servegame.com":2,"servehalflife.com":2,"servehttp.com":2,"servehumour.com":2,"serveirc.com":2,"servemp3.com":2,"servep2p.com":2,"servepics.com":2,"servequake.com":2,"servesarcasm.com":2,"stufftoread.com":2,"unusualperson.com":2,"workisboring.com":2,"dvrcam.info":2,"ilovecollege.info":2,"no-ip.info":2,"brasilia.me":2,"ddns.me":2,"dnsfor.me":2,"hopto.me":2,"loginto.me":2,"noip.me":2,"webhop.me":2,"bounceme.net":2,"ddns.net":2,"eating-organic.net":2,"mydissent.net":2,"myeffect.net":2,"mymediapc.net":2,"mypsx.net":2,"mysecuritycamera.net":2,"nhlfan.net":2,"no-ip.net":2,"pgafan.net":2,"privatizehealthinsurance.net":2,"redirectme.net":2,"serveblog.net":2,"serveminecraft.net":2,"sytes.net":2,"cable-modem.org":2,"collegefan.org":2,"couchpotatofries.org":2,"hopto.org":2,"mlbfan.org":2,"myftp.org":2,"mysecuritycamera.org":2,"nflfan.org":2,"no-ip.org":2,"read-books.org":2,"ufcfan.org":2,"zapto.org":2,"no-ip.co.uk":3,"golffan.us":2,"noip.us":2,"pointto.us":2,"stage.nodeart.io":3,"developer.app":3,"noop.app":2,"northflank.app":3,"build.run":3,"code.run":3,"database.run":3,"migration.run":3,"noticeable.news":2,"notion.site":2,"dnsking.ch":2,"mypi.co":2,"myiphost.com":2,"forumz.info":2,"soundcast.me":2,"tcp4.me":2,"dnsup.net":2,"hicam.net":2,"now-dns.net":2,"ownip.net":2,"vpndns.net":2,"dynserv.org":2,"now-dns.org":2,"x443.pw":2,"ntdll.top":2,"freeddns.us":2,"nsupdate.info":2,"nerdpol.ovh":2,"nyc.mn":2,"prvcy.page":2,"obl.ong":2,"observablehq.cloud":2,"static.observableusercontent.com":3,"omg.lol":2,"cloudycluster.net":2,"omniwe.site":2,"123webseite.at":2,"123website.be":2,"simplesite.com.br":3,"123website.ch":2,"simplesite.com":2,"123webseite.de":2,"123hjemmeside.dk":2,"123miweb.es":2,"123kotisivu.fi":2,"123siteweb.fr":2,"simplesite.gr":2,"123homepage.it":2,"123website.lu":2,"123website.nl":2,"123hjemmeside.no":2,"service.one":2,"simplesite.pl":2,"123paginaweb.pt":2,"123minsida.se":2,"onid.ca":2,"is-a-fullstack.dev":2,"is-cool.dev":2,"is-not-a.dev":2,"localplayer.dev":2,"is-local.org":2,"opensocial.site":2,"opencraft.hosting":2,"16-b.it":2,"32-b.it":2,"64-b.it":2,"orsites.com":2,"operaunite.com":2,"customer-oci.com":3,"oci.customer-oci.com":4,"ocp.customer-oci.com":4,"ocs.customer-oci.com":4,"oraclecloudapps.com":3,"oraclegovcloudapps.com":3,"oraclegovcloudapps.uk":3,"tech.orange":2,"can.re":2,"authgear-staging.com":2,"authgearapps.com":2,"skygearapp.com":2,"outsystemscloud.com":2,"hosting.ovh.net":4,"webpaas.ovh.net":4,"ownprovider.com":2,"own.pm":2,"owo.codes":3,"ox.rs":2,"oy.lc":2,"pgfog.com":2,"pagexl.com":2,"gotpantheon.com":2,"pantheonsite.io":2,"paywhirl.com":3,"xmit.co":3,"xmit.dev":2,"madethis.site":2,"srv.us":2,"gh.srv.us":3,"gl.srv.us":3,"lk3.ru":2,"mypep.link":2,"perspecta.cloud":2,"on-web.fr":2,"upsun.app":3,"upsunapp.com":2,"ent.platform.sh":3,"eu.platform.sh":3,"us.platform.sh":3,"platformsh.site":3,"tst.site":3,"platter-app.dev":2,"platterp.us":2,"pley.games":2,"onporter.run":2,"co.bn":2,"postman-echo.com":2,"pstmn.io":2,"mock.pstmn.io":3,"httpbin.org":2,"prequalifyme.today":2,"xen.prgmr.com":3,"priv.at":2,"c01.kr":2,"eliv-cdn.kr":2,"eliv-dns.kr":2,"mmv.kr":2,"vki.kr":2,"dev.project-study.com":3,"protonet.io":2,"chirurgiens-dentistes-en-france.fr":2,"byen.site":2,"pubtls.org":2,"pythonanywhere.com":2,"eu.pythonanywhere.com":3,"qa2.com":2,"qcx.io":2,"sys.qcx.io":4,"myqnapcloud.cn":2,"alpha-myqnapcloud.com":2,"dev-myqnapcloud.com":2,"mycloudnas.com":2,"mynascloud.com":2,"myqnapcloud.com":2,"qoto.io":2,"qualifioapp.com":2,"ladesk.com":2,"qbuser.com":2,"quipelements.com":3,"vapor.cloud":2,"vaporcloud.io":2,"rackmaze.com":2,"rackmaze.net":2,"cloudsite.builders":2,"myradweb.net":2,"servername.us":2,"web.in":2,"in.net":2,"myrdbx.io":2,"site.rb-hosting.io":3,"on-rancher.cloud":3,"on-k3s.io":3,"on-rio.io":3,"ravpage.co.il":3,"readthedocs-hosted.com":2,"readthedocs.io":2,"rhcloud.com":2,"instances.spawn.cc":3,"onrender.com":2,"app.render.com":3,"replit.app":2,"id.replit.app":3,"firewalledreplit.co":2,"id.firewalledreplit.co":3,"repl.co":2,"id.repl.co":3,"replit.dev":2,"archer.replit.dev":3,"bones.replit.dev":3,"canary.replit.dev":3,"global.replit.dev":3,"hacker.replit.dev":3,"id.replit.dev":3,"janeway.replit.dev":3,"kim.replit.dev":3,"kira.replit.dev":3,"kirk.replit.dev":3,"odo.replit.dev":3,"paris.replit.dev":3,"picard.replit.dev":3,"pike.replit.dev":3,"prerelease.replit.dev":3,"reed.replit.dev":3,"riker.replit.dev":3,"sisko.replit.dev":3,"spock.replit.dev":3,"staging.replit.dev":3,"sulu.replit.dev":3,"tarpit.replit.dev":3,"teams.replit.dev":3,"tucker.replit.dev":3,"wesley.replit.dev":3,"worf.replit.dev":3,"repl.run":2,"resindevice.io":2,"devices.resinstaging.io":3,"hzc.io":2,"adimo.co.uk":3,"itcouldbewor.se":2,"aus.basketball":2,"nz.basketball":2,"subsc-pay.com":2,"subsc-pay.net":2,"git-pages.rit.edu":3,"rocky.page":2,"rub.de":2,"ruhr-uni-bochum.de":2,"io.noc.ruhr-uni-bochum.de":4,"xn--90amc.xn--p1acf":2,"xn--j1aef.xn--p1acf":2,"xn--j1ael8b.xn--p1acf":2,"xn--h1ahn.xn--p1acf":2,"xn--j1adp.xn--p1acf":2,"xn--c1avg.xn--p1acf":2,"xn--80aaa0cvac.xn--p1acf":2,"xn--h1aliz.xn--p1acf":2,"xn--90a1af.xn--p1acf":2,"xn--41a.xn--p1acf":2,"ras.ru":2,"nyat.app":2,"180r.com":2,"dojin.com":2,"sakuratan.com":2,"sakuraweb.com":2,"x0.com":2,"2-d.jp":2,"bona.jp":2,"crap.jp":2,"daynight.jp":2,"eek.jp":2,"flop.jp":2,"halfmoon.jp":2,"jeez.jp":2,"matrix.jp":2,"mimoza.jp":2,"ivory.ne.jp":3,"mail-box.ne.jp":3,"mints.ne.jp":3,"mokuren.ne.jp":3,"opal.ne.jp":3,"sakura.ne.jp":3,"sumomo.ne.jp":3,"topaz.ne.jp":3,"netgamers.jp":2,"nyanta.jp":2,"o0o0.jp":2,"rdy.jp":2,"rgr.jp":2,"rulez.jp":2,"s3.isk01.sakurastorage.jp":4,"s3.isk02.sakurastorage.jp":4,"saloon.jp":2,"sblo.jp":2,"skr.jp":2,"tank.jp":2,"uh-oh.jp":2,"undo.jp":2,"rs.webaccel.jp":3,"user.webaccel.jp":3,"websozai.jp":2,"xii.jp":2,"squares.net":2,"jpn.org":2,"kirara.st":2,"x0.to":2,"from.tv":2,"sakura.tv":2,"builder.code.com":4,"dev-builder.code.com":4,"stg-builder.code.com":4,"001.test.code-builder-stg.platform.salesforce.com":7,"d.crm.dev":4,"w.crm.dev":4,"wa.crm.dev":4,"wb.crm.dev":4,"wc.crm.dev":4,"wd.crm.dev":4,"we.crm.dev":4,"wf.crm.dev":4,"sandcats.io":2,"logoip.com":2,"logoip.de":2,"fr-par-1.baremetal.scw.cloud":4,"fr-par-2.baremetal.scw.cloud":4,"nl-ams-1.baremetal.scw.cloud":4,"cockpit.fr-par.scw.cloud":4,"fnc.fr-par.scw.cloud":4,"functions.fnc.fr-par.scw.cloud":5,"k8s.fr-par.scw.cloud":4,"nodes.k8s.fr-par.scw.cloud":5,"s3.fr-par.scw.cloud":4,"s3-website.fr-par.scw.cloud":4,"whm.fr-par.scw.cloud":4,"priv.instances.scw.cloud":4,"pub.instances.scw.cloud":4,"k8s.scw.cloud":3,"cockpit.nl-ams.scw.cloud":4,"k8s.nl-ams.scw.cloud":4,"nodes.k8s.nl-ams.scw.cloud":5,"s3.nl-ams.scw.cloud":4,"s3-website.nl-ams.scw.cloud":4,"whm.nl-ams.scw.cloud":4,"cockpit.pl-waw.scw.cloud":4,"k8s.pl-waw.scw.cloud":4,"nodes.k8s.pl-waw.scw.cloud":5,"s3.pl-waw.scw.cloud":4,"s3-website.pl-waw.scw.cloud":4,"scalebook.scw.cloud":3,"smartlabeling.scw.cloud":3,"dedibox.fr":2,"schokokeks.net":2,"gov.scot":2,"service.gov.scot":3,"scrysec.com":2,"client.scrypted.io":3,"firewall-gateway.com":2,"firewall-gateway.de":2,"my-gateway.de":2,"my-router.de":2,"spdns.de":2,"spdns.eu":2,"firewall-gateway.net":2,"my-firewall.org":2,"myfirewall.org":2,"spdns.org":2,"seidat.net":2,"sellfy.store":2,"minisite.ms":2,"senseering.net":2,"servebolt.cloud":2,"biz.ua":2,"co.ua":2,"pp.ua":2,"as.sh.cn":3,"sheezy.games":2,"myshopblocks.com":2,"myshopify.com":2,"shopitsite.com":2,"shopware.shop":2,"shopware.store":2,"mo-siemens.io":2,"1kapp.com":2,"appchizi.com":2,"applinzi.com":2,"sinaapp.com":2,"vipsinaapp.com":2,"siteleaf.net":2,"small-web.org":2,"aeroport.fr":2,"avocat.fr":2,"chambagri.fr":2,"chirurgiens-dentistes.fr":2,"experts-comptables.fr":2,"medecin.fr":2,"notaires.fr":2,"pharmacien.fr":2,"port.fr":2,"veterinaire.fr":2,"vp4.me":2,"snowflake.app":3,"privatelink.snowflake.app":4,"streamlit.app":2,"streamlitapp.com":2,"try-snowplow.com":2,"mafelo.net":2,"playstation-cloud.com":2,"srht.site":2,"apps.lair.io":3,"stolos.io":3,"4.at":2,"my.at":2,"my.de":2,"nxa.eu":3,"nx.gw":2,"customer.speedpartner.de":3,"myspreadshop.at":2,"myspreadshop.com.au":3,"myspreadshop.be":2,"myspreadshop.ca":2,"myspreadshop.ch":2,"myspreadshop.com":2,"myspreadshop.de":2,"myspreadshop.dk":2,"myspreadshop.es":2,"myspreadshop.fi":2,"myspreadshop.fr":2,"myspreadshop.ie":2,"myspreadshop.it":2,"myspreadshop.net":2,"myspreadshop.nl":2,"myspreadshop.no":2,"myspreadshop.pl":2,"myspreadshop.se":2,"myspreadshop.co.uk":3,"w-corp-staticblitz.com":2,"w-credentialless-staticblitz.com":2,"w-staticblitz.com":2,"stackhero-network.com":2,"runs.onstackit.cloud":3,"stackit.gg":2,"stackit.rocks":2,"stackit.run":2,"stackit.zone":2,"musician.io":2,"novecore.site":2,"api.stdlib.com":3,"feedback.ac":2,"forms.ac":2,"assessments.cx":2,"calculators.cx":2,"funnels.cx":2,"paynow.cx":2,"quizzes.cx":2,"researched.cx":2,"tests.cx":2,"surveys.so":2,"ipfs.storacha.link":3,"ipfs.w3s.link":3,"storebase.store":2,"storipress.app":2,"storj.farm":2,"strapiapp.com":2,"media.strapiapp.com":3,"vps-host.net":2,"atl.jelastic.vps-host.net":4,"njs.jelastic.vps-host.net":4,"ric.jelastic.vps-host.net":4,"streak-link.com":2,"streaklinks.com":2,"streakusercontent.com":2,"soc.srcf.net":3,"user.srcf.net":3,"utwente.io":2,"temp-dns.com":2,"supabase.co":2,"supabase.in":2,"supabase.net":2,"syncloud.it":2,"dscloud.biz":2,"direct.quickconnect.cn":3,"dsmynas.com":2,"familyds.com":2,"diskstation.me":2,"dscloud.me":2,"i234.me":2,"myds.me":2,"synology.me":2,"dscloud.mobi":2,"dsmynas.net":2,"familyds.net":2,"dsmynas.org":2,"familyds.org":2,"direct.quickconnect.to":3,"vpnplus.to":2,"mytabit.com":2,"mytabit.co.il":3,"tabitorder.co.il":3,"taifun-dns.de":2,"ts.net":2,"c.ts.net":4,"gda.pl":2,"gdansk.pl":2,"gdynia.pl":2,"med.pl":2,"sopot.pl":2,"taveusercontent.com":2,"p.tawk.email":3,"p.tawkto.email":3,"tche.br":2,"site.tb-hosting.com":3,"edugit.io":2,"s3.teckids.org":3,"telebit.app":2,"telebit.io":2,"telebit.xyz":3,"firenet.ch":3,"svc.firenet.ch":4,"reservd.com":2,"thingdustdata.com":2,"cust.dev.thingdust.io":4,"reservd.dev.thingdust.io":4,"cust.disrec.thingdust.io":4,"reservd.disrec.thingdust.io":4,"cust.prod.thingdust.io":4,"cust.testing.thingdust.io":4,"reservd.testing.thingdust.io":4,"tickets.io":2,"arvo.network":2,"azimuth.network":2,"tlon.network":2,"torproject.net":2,"pages.torproject.net":3,"townnews-staging.com":2,"12hp.at":2,"2ix.at":2,"4lima.at":2,"lima-city.at":2,"12hp.ch":2,"2ix.ch":2,"4lima.ch":2,"lima-city.ch":2,"trafficplex.cloud":2,"de.cool":2,"12hp.de":2,"2ix.de":2,"4lima.de":2,"lima-city.de":2,"1337.pictures":2,"clan.rip":2,"lima-city.rocks":2,"webspace.rocks":2,"lima.zone":2,"transurl.be":3,"transurl.eu":3,"site.transip.me":3,"transurl.nl":3,"tuxfamily.org":2,"dd-dns.de":2,"dray-dns.de":2,"draydns.de":2,"dyn-vpn.de":2,"dynvpn.de":2,"mein-vigor.de":2,"my-vigor.de":2,"my-wan.de":2,"syno-ds.de":2,"synology-diskstation.de":2,"synology-ds.de":2,"diskstation.eu":2,"diskstation.org":2,"typedream.app":2,"pro.typeform.com":3,"uberspace.de":3,"uber.space":2,"hk.com":2,"inc.hk":2,"ltd.hk":2,"hk.org":2,"it.com":2,"unison-services.cloud":2,"virtual-user.de":2,"virtualuser.de":2,"obj.ag":2,"name.pm":2,"sch.tf":2,"biz.wf":2,"sch.wf":2,"org.yt":2,"rs.ba":2,"bielsko.pl":2,"urown.cloud":2,"dnsupdate.info":2,"us.org":2,"v.ua":2,"val.run":2,"web.val.run":3,"vercel.app":2,"v0.build":2,"vercel.dev":2,"vusercontent.net":2,"vercel.run":2,"now.sh":2,"2038.io":2,"v-info.info":2,"vistablog.ir":2,"deus-canvas.com":2,"voorloper.cloud":2,"vultrobjects.com":3,"wafflecell.com":2,"webflow.io":2,"webflowtest.io":2,"webhare.dev":3,"bookonline.app":2,"hotelwithflight.com":2,"reserve-online.com":2,"reserve-online.net":2,"cprapid.com":2,"pleskns.com":2,"wp2.host":2,"pdns.page":2,"plesk.page":2,"cpanel.site":2,"wpsquared.site":2,"wadl.top":3,"remotewd.com":2,"box.ca":2,"pages.wiardweb.com":3,"toolforge.org":2,"wmcloud.org":2,"wmflabs.org":2,"wdh.app":2,"hrsn.dev":2,"windsurf.app":2,"windsurf.build":2,"panel.gg":2,"daemon.panel.gg":3,"wixsite.com":2,"wixstudio.com":2,"editorx.io":2,"wixstudio.io":2,"wix.run":2,"messwithdns.com":2,"woltlab-demo.com":2,"myforum.community":2,"community-pro.de":2,"diskussionsbereich.de":2,"community-pro.net":2,"meinforum.net":2,"affinitylottery.org.uk":3,"raffleentry.org.uk":3,"weeklylottery.org.uk":3,"wpenginepowered.com":2,"js.wpenginepowered.com":3,"half.host":2,"xnbay.com":2,"u2.xnbay.com":3,"u2-local.xnbay.com":3,"cistron.nl":2,"demon.nl":2,"xs4all.space":2,"yandexcloud.net":2,"storage.yandexcloud.net":3,"website.yandexcloud.net":3,"official.academy":2,"yolasite.com":2,"ynh.fr":2,"nohost.me":2,"noho.st":2,"za.net":2,"za.org":2,"zap.cloud":2,"zeabur.app":2,"zerops.app":3,"bss.design":2,"basicserver.io":2,"virtualserver.io":2,"enterprisecloud.nu":2,"zone.id":2}}; return tld; })(); diff --git a/data/extensions/jsr@javascriptrestrictor/nscl/common/uuid.js b/data/extensions/jsr@javascriptrestrictor/nscl/common/uuid.js index 4d403d7..9c8d6a4 100644 --- a/data/extensions/jsr@javascriptrestrictor/nscl/common/uuid.js +++ b/data/extensions/jsr@javascriptrestrictor/nscl/common/uuid.js @@ -1,7 +1,7 @@ /* * NoScript Commons Library * Reusable building blocks for cross-browser security/privacy WebExtensions. - * Copyright (C) 2020-2023 Giorgio Maone <https://maone.net> + * Copyright (C) 2020-2024 Giorgio Maone <https://maone.net> * * SPDX-License-Identifier: GPL-3.0-or-later * @@ -19,17 +19,27 @@ */ 'use strict'; +{ + const _impl = "randomUUID" in crypto + ? () => crypto.randomUUID() + : () => + ([1e7]+-1e3+-4e3+-8e3+-1e11).replace(/[018]/g, + c => (c ^ crypto.getRandomValues(new Uint8Array(1))[0] & 15 >> c / 4) + .toString(16)) + ; -function uuid() { - try { - return ([1e7]+-1e3+-4e3+-8e3+-1e11).replace(/[018]/g, - c => (c ^ crypto.getRandomValues(new Uint8Array(1))[0] & 15 >> c / 4) - .toString(16)); - } catch (e) { - // fallback, as the Tor Browser seems to fail above - uuid = () => 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) { + // if crypto API is missing or broken + const _fallback = () => + 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, c => { let r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8); return v.toString(16); }); + + var uuid = function() { + try { + return _impl(); + } catch (e) { + return _fallback(); + } } } diff --git a/data/extensions/jsr@javascriptrestrictor/nscl/content/patchWindow.js b/data/extensions/jsr@javascriptrestrictor/nscl/content/patchWindow.js index 047e686..976470b 100644 --- a/data/extensions/jsr@javascriptrestrictor/nscl/content/patchWindow.js +++ b/data/extensions/jsr@javascriptrestrictor/nscl/content/patchWindow.js @@ -1,7 +1,7 @@ /* * NoScript Commons Library * Reusable building blocks for cross-browser security/privacy WebExtensions. - * Copyright (C) 2020-2023 Giorgio Maone <https://maone.net> + * Copyright (C) 2020-2024 Giorgio Maone <https://maone.net> * * SPDX-License-Identifier: GPL-3.0-or-later * @@ -56,20 +56,27 @@ */ function patchWindow(patchingCallback, env = {}) { - if (typeof patchingCallback !== "function") { - patchingCallback = new Function("unwrappedWindow", "env", patchingCallback); - } - let eventId = this && this.eventId || `windowPatchMessages:${uuid()}`; - let { dispatchEvent, addEventListener } = window; + const forcedPortId = patchingCallback.portId; + const justPort = forcedPortId && !patchingCallback.code; + const portId = forcedPortId || + this && this.portId || + `windowPatchMessages:${uuid()}`; + + const { dispatchEvent, addEventListener } = self; function Port(from, to) { + if (!self.document) { + // ServiceWorker scope, dummy port, won't be used. + this.postMessage = () => {}; + return; + } // we need a double dispatching dance and maintaining a stack of // return values / thrown errors because Chromium seals the detail object // (on Firefox we could just append further properties to it...) let retStack = []; function fire(e, detail, target = window) { - dispatchEvent.call(target, new CustomEvent(`${eventId}:${e}`, {detail, composed: true})); + dispatchEvent.call(target, new CustomEvent(`${portId}:${e}`, {detail, composed: true})); } this.postMessage = function(msg, target = window) { retStack.push({}); @@ -79,7 +86,7 @@ function patchWindow(patchingCallback, env = {}) { if (ret.error) throw ret.error; return ret.value; }; - addEventListener.call(window, `${eventId}:${from}`, event => { + addEventListener.call(window, `${portId}:${from}`, event => { if (typeof this.onMessage === "function" && event.detail) { let ret = {}; try { @@ -90,7 +97,7 @@ function patchWindow(patchingCallback, env = {}) { fire(`return:${to}`, ret); } }, true); - addEventListener.call(window, `${eventId}:return:${from}`, event => { + addEventListener.call(window, `${portId}:return:${from}`, event => { let {detail} = event; if (detail && retStack.length) { retStack[retStack.length -1] = detail; @@ -99,9 +106,22 @@ function patchWindow(patchingCallback, env = {}) { this.onMessage = null; } let port = new Port("extension", "page"); + if (patchWindow.disabled) { + return port; + } + if (justPort) { + return port; + } else if (patchingCallback.code) { + patchingCallback = patchingCallback.code; + } - let nativeExport = this && this.exportFunction || typeof exportFunction == "function"; - if (!nativeExport) { + const nativeExport = typeof exportFunction == "function"; + if (typeof patchingCallback !== "function") { + patchingCallback = + nativeExport ? new Function("unwrappedWindow", "env", patchingCallback) + : `function (unwrappedWindow, env) {\n${patchingCallback}\n}`; + } + if (!(nativeExport || this && this.exportFunction)) { // Chromium let exportFunction = (func, targetObject, {defineAs, original} = {}) => { try { @@ -181,24 +201,36 @@ function patchWindow(patchingCallback, env = {}) { let cloneInto = (obj, targetObject) => { return obj; // dummy for assignment }; - let script = document.createElement("script"); - script.text = ` + + const code = ` (() => { let patchWindow = ${patchWindow}; let cloneInto = ${cloneInto}; let exportFunction = ${exportFunction}; let env = ${JSON.stringify(env)}; - let eventId = ${JSON.stringify(eventId)}; + let portId = ${JSON.stringify(portId)}; + const console = Object.fromEntries(Object.entries(self.console).map(([n, v]) => v.bind ? [n, v.bind(self.console)] : [n,v])); + env.port = new (${Port})("page", "extension"); ({ patchWindow, exportFunction, cloneInto, - eventId, + portId, }).patchWindow(${patchingCallback}, env); })(); `; - document.documentElement.insertBefore(script, document.documentElement.firstChild); + if (!self.document) { + // we're doing it with userScripts on mv3 + return {portId, code}; + } + let script = document.createElement("script"); + script.text = code; + try { + document.documentElement.insertBefore(script, document.documentElement.firstChild); + } catch(e) { + console.error(e, code); + } script.remove(); return port; } @@ -290,10 +322,12 @@ function patchWindow(patchingCallback, env = {}) { } // auto-trigger window patching whenever new elements are added to the DOM let patchAll = () => { - const win = xray.unwrap(window); - for (let j = 0; j in win; j++) { + if (patchWindow.disabled) { + observer.disconnect(); + } + for (let j = 0; j in window; j++) { try { - modifyWindow(win[j]); + modifyWindow(window[j]); } catch (e) { console.error(e, `Patching frames[${j}]`); } @@ -306,14 +340,22 @@ function patchWindow(patchingCallback, env = {}) { let patchHandler = { apply(target, thisArg, args) { let ret = Reflect.apply(target, thisArg, args); - thisArg = thisArg && xray.wrap(thisArg); - if (thisArg) { - thisArg = xray.wrap(thisArg); - if ((thisArg.ownerDocument || thisArg) === xrayWin.document) { - patchAll(); + const wrapped = thisArg && xray.wrap(thisArg); + if (wrapped) { + try { + if ((wrapped.ownerDocument || wrapped) === xrayWin.document) { + patchAll(); + } + } catch (e) { + console.error("Can't propagate patches (likely SOP violation).", e, thisArg, wrapped, location); // DEV_ONLY } } - return ret ? xray.forPage(ret, win) : ret; + try { + return ret ? xray.forPage(ret, win) : ret; + } catch (e) { + console.error("Can't wrap return value.", e, thisArg, target, args, ret, location); // DEV_ONLY + } + return ret; } }; @@ -418,4 +460,29 @@ if (patchWindow.xrayEnabled) { if (frameElement instanceof HTMLObjectElement) { frameElement.dispatchEvent(new CustomEvent(eventId)); } -}
\ No newline at end of file +} + +Object.defineProperty(patchWindow, "disabled", { + get() { + if (typeof ns === "object" && ns) { + if (ns.allows && ns.policy) { + const value = !ns.allows("script"); + Object.defineProperty(patchWindow, "disabled", { value, configurable: true }); + return value; + } + if (typeof ns.on === "function") { + ns.on("capabilities", () => { + if (ns.allows) { + this.disabled; + } + }); + } + } + return false; + }, + set(value) { + Object.defineProperty(patchWindow, "disabled", { value, configurable: true }); + return value; + }, + configurable: true, +});
\ No newline at end of file diff --git a/data/extensions/jsr@javascriptrestrictor/nscl/lib/browser-polyfill.js b/data/extensions/jsr@javascriptrestrictor/nscl/lib/browser-polyfill.js index e942c99..e4ac9ea 100644 --- a/data/extensions/jsr@javascriptrestrictor/nscl/lib/browser-polyfill.js +++ b/data/extensions/jsr@javascriptrestrictor/nscl/lib/browser-polyfill.js @@ -11,25 +11,25 @@ global.browser = mod.exports; } })(typeof globalThis !== "undefined" ? globalThis : typeof self !== "undefined" ? self : this, function (module) { - /* webextension-polyfill - v0.8.0 - Tue Apr 20 2021 11:27:38 */ - + /* webextension-polyfill - v0.12.0 - Tue May 14 2024 18:01:29 */ /* -*- Mode: indent-tabs-mode: nil; js-indent-level: 2 -*- */ - /* vim: set sts=2 sw=2 et 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/. */ "use strict"; - if (typeof browser === "undefined" || Object.getPrototypeOf(browser) !== Object.prototype) { + if (!(globalThis.chrome && globalThis.chrome.runtime && globalThis.chrome.runtime.id)) { + throw new Error("This script should only be loaded in a browser extension."); + } + if (!(globalThis.browser && globalThis.browser.runtime && globalThis.browser.runtime.id)) { const CHROME_SEND_MESSAGE_CALLBACK_NO_RESPONSE_MESSAGE = "The message port closed before a response was received."; - const SEND_RESPONSE_DEPRECATION_WARNING = "Returning a Promise is the preferred way to send a reply from an onMessage/onMessageExternal listener, as the sendResponse will be removed from the specs (See https://developer.mozilla.org/docs/Mozilla/Add-ons/WebExtensions/API/runtime/onMessage)"; // Wrapping the bulk of this polyfill in a one-time-use function is a minor + + // Wrapping the bulk of this polyfill in a one-time-use function is a minor // optimization for Firefox. Since Spidermonkey does not fully parse the // contents of a function until the first time it's called, and since it will // never actually need to be called, this allows the polyfill to be included // in Firefox nearly for free. - const wrapAPIs = extensionAPIs => { // NOTE: apiMetadata is associated to the content of the api-metadata.json file // at build time by replacing the following "include" with the content of the @@ -706,10 +706,10 @@ } } }; - if (Object.keys(apiMetadata).length === 0) { throw new Error("api-metadata.json has not been included in browser-polyfill"); } + /** * A WeakMap subclass which creates and stores a value for any key which does * not exist when accessed, but behaves exactly as an ordinary WeakMap @@ -720,23 +720,19 @@ * key which does not exist, the first time it is accessed. The * function receives, as its only argument, the key being created. */ - - class DefaultWeakMap extends WeakMap { constructor(createItem, items = undefined) { super(items); this.createItem = createItem; } - get(key) { if (!this.has(key)) { this.set(key, this.createItem(key)); } - return super.get(key); } - } + /** * Returns true if the given object is an object with a `then` method, and can * therefore be assumed to behave as a Promise. @@ -744,11 +740,10 @@ * @param {*} value The value to test. * @returns {boolean} True if the value is thenable. */ - - const isThenable = value => { return value && typeof value === "object" && typeof value.then === "function"; }; + /** * Creates and returns a function which, when called, will resolve or reject * the given promise based on how it is called: @@ -780,8 +775,6 @@ * @returns {function} * The generated callback function. */ - - const makeCallback = (promise, metadata) => { return (...callbackArgs) => { if (extensionAPIs.runtime.lastError) { @@ -793,8 +786,8 @@ } }; }; - const pluralizeArguments = numArgs => numArgs == 1 ? "argument" : "arguments"; + /** * Creates a wrapper function for a method with the given name and metadata. * @@ -821,18 +814,14 @@ * @returns {function(object, ...*)} * The generated wrapper function. */ - - const wrapAsyncFunction = (name, metadata) => { return function asyncFunctionWrapper(target, ...args) { if (args.length < metadata.minArgs) { throw new Error(`Expected at least ${metadata.minArgs} ${pluralizeArguments(metadata.minArgs)} for ${name}(), got ${args.length}`); } - if (args.length > metadata.maxArgs) { throw new Error(`Expected at most ${metadata.maxArgs} ${pluralizeArguments(metadata.maxArgs)} for ${name}(), got ${args.length}`); } - return new Promise((resolve, reject) => { if (metadata.fallbackToNoCallback) { // This API method has currently no callback on Chrome, but it return a promise on Firefox, @@ -845,9 +834,10 @@ }, metadata)); } catch (cbError) { console.warn(`${name} API method doesn't seem to support the callback parameter, ` + "falling back to call it without a callback: ", cbError); - target[name](...args); // Update the API method metadata, so that the next API calls will not try to - // use the unsupported callback anymore. + target[name](...args); + // Update the API method metadata, so that the next API calls will not try to + // use the unsupported callback anymore. metadata.fallbackToNoCallback = false; metadata.noCallback = true; resolve(); @@ -864,6 +854,7 @@ }); }; }; + /** * Wraps an existing method of the target object, so that calls to it are * intercepted by the given wrapper function. The wrapper function receives, @@ -883,18 +874,15 @@ * A Proxy object for the given method, which invokes the given wrapper * method in its place. */ - - const wrapMethod = (target, method, wrapper) => { return new Proxy(method, { apply(targetMethod, thisObj, args) { return wrapper.call(thisObj, target, ...args); } - }); }; - let hasOwnProperty = Function.call.bind(Object.prototype.hasOwnProperty); + /** * Wraps an object in a Proxy which intercepts and wraps certain methods * based on the given `wrappers` and `metadata` objects. @@ -918,28 +906,24 @@ * * @returns {Proxy<object>} */ - const wrapObject = (target, wrappers = {}, metadata = {}) => { let cache = Object.create(null); let handlers = { has(proxyTarget, prop) { return prop in target || prop in cache; }, - get(proxyTarget, prop, receiver) { if (prop in cache) { return cache[prop]; } - if (!(prop in target)) { return undefined; } - let value = target[prop]; - if (typeof value === "function") { // This is a method on the underlying object. Check if we need to do // any wrapping. + if (typeof wrappers[prop] === "function") { // We have a special-case wrapper for this method. value = wrapMethod(target, target[prop], wrappers[prop]); @@ -967,42 +951,35 @@ Object.defineProperty(cache, prop, { configurable: true, enumerable: true, - get() { return target[prop]; }, - set(value) { target[prop] = value; } - }); return value; } - cache[prop] = value; return value; }, - set(proxyTarget, prop, value, receiver) { if (prop in cache) { cache[prop] = value; } else { target[prop] = value; } - return true; }, - defineProperty(proxyTarget, prop, desc) { return Reflect.defineProperty(cache, prop, desc); }, - deleteProperty(proxyTarget, prop) { return Reflect.deleteProperty(cache, prop); } + }; - }; // Per contract of the Proxy API, the "get" proxy handler must return the + // Per contract of the Proxy API, the "get" proxy handler must return the // original value of the target if that value is declared read-only and // non-configurable. For this reason, we create an object with the // prototype set to `target` instead of using `target` directly. @@ -1012,10 +989,10 @@ // The proxy handlers themselves will still use the original `target` // instead of the `proxyTarget`, so that the methods and properties are // dereferenced via the original targets. - let proxyTarget = Object.create(target); return new Proxy(proxyTarget, handlers); }; + /** * Creates a set of wrapper functions for an event object, which handles * wrapping of listener functions that those messages are passed. @@ -1032,27 +1009,22 @@ * * @returns {object} */ - - const wrapEvent = wrapperMap => ({ addListener(target, listener, ...args) { target.addListener(wrapperMap.get(listener), ...args); }, - hasListener(target, listener) { return target.hasListener(wrapperMap.get(listener)); }, - removeListener(target, listener) { target.removeListener(wrapperMap.get(listener)); } - }); - const onRequestFinishedWrappers = new DefaultWeakMap(listener => { if (typeof listener !== "function") { return listener; } + /** * Wraps an onRequestFinished listener function so that it will return a * `getContent()` property which returns a `Promise` rather than using a @@ -1061,12 +1033,8 @@ * @param {object} req * The HAR entry object representing the network request. */ - - return function onRequestFinished(req) { - const wrappedReq = wrapObject(req, {} - /* wrappers */ - , { + const wrappedReq = wrapObject(req, {} /* wrappers */, { getContent: { minArgs: 0, maxArgs: 0 @@ -1074,13 +1042,12 @@ }); listener(wrappedReq); }; - }); // Keep track if the deprecation warning has been logged at least once. - - let loggedSendResponseDeprecationWarning = false; + }); const onMessageWrappers = new DefaultWeakMap(listener => { if (typeof listener !== "function") { return listener; } + /** * Wraps a message listener function so that it may send responses based on * its return value, rather than by returning a sentinel value and calling a @@ -1098,42 +1065,34 @@ * True if the wrapped listener returned a Promise, which will later * yield a response. False otherwise. */ - - return function onMessage(message, sender, sendResponse) { let didCallSendResponse = false; let wrappedSendResponse; let sendResponsePromise = new Promise(resolve => { wrappedSendResponse = function (response) { - if (!loggedSendResponseDeprecationWarning) { - console.warn(SEND_RESPONSE_DEPRECATION_WARNING, new Error().stack); - loggedSendResponseDeprecationWarning = true; - } - didCallSendResponse = true; resolve(response); }; }); let result; - try { result = listener(message, sender, wrappedSendResponse); } catch (err) { result = Promise.reject(err); } + const isResultThenable = result !== true && isThenable(result); - const isResultThenable = result !== true && isThenable(result); // If the listener didn't returned true or a Promise, or called + // If the listener didn't returned true or a Promise, or called // wrappedSendResponse synchronously, we can exit earlier // because there will be no response sent from this listener. - if (result !== true && !isResultThenable && !didCallSendResponse) { return false; - } // A small helper to send the message if the promise resolves + } + + // A small helper to send the message if the promise resolves // and an error if the promise rejects (a wrapped sendMessage has // to translate the message into a resolved promise or a rejected // promise). - - const sendPromisedResult = promise => { promise.then(msg => { // send the message value. @@ -1142,13 +1101,11 @@ // Send a JSON representation of the error if the rejected value // is an instance of error, or the object itself otherwise. let message; - if (error && (error instanceof Error || typeof error.message === "string")) { message = error.message; } else { message = "An unexpected error occurred"; } - sendResponse({ __mozWebExtensionPolyfillReject__: true, message @@ -1157,22 +1114,21 @@ // Print an error on the console if unable to send the response. console.error("Failed to send onMessage rejected reply", err); }); - }; // If the listener returned a Promise, send the resolved value as a + }; + + // If the listener returned a Promise, send the resolved value as a // result, otherwise wait the promise related to the wrappedSendResponse // callback to resolve and send it as a response. - - if (isResultThenable) { sendPromisedResult(result); } else { sendPromisedResult(sendResponsePromise); - } // Let Chrome know that the listener is replying. - + } + // Let Chrome know that the listener is replying. return true; }; }); - const wrappedSendMessageCallback = ({ reject, resolve @@ -1194,16 +1150,13 @@ resolve(reply); } }; - const wrappedSendMessage = (name, metadata, apiNamespaceObj, ...args) => { if (args.length < metadata.minArgs) { throw new Error(`Expected at least ${metadata.minArgs} ${pluralizeArguments(metadata.minArgs)} for ${name}(), got ${args.length}`); } - if (args.length > metadata.maxArgs) { throw new Error(`Expected at most ${metadata.maxArgs} ${pluralizeArguments(metadata.maxArgs)} for ${name}(), got ${args.length}`); } - return new Promise((resolve, reject) => { const wrappedCb = wrappedSendMessageCallback.bind(null, { resolve, @@ -1213,7 +1166,6 @@ apiNamespaceObj.sendMessage(...args); }); }; - const staticWrappers = { devtools: { network: { @@ -1263,14 +1215,10 @@ return wrapObject(extensionAPIs, staticWrappers, apiMetadata); }; - if (typeof chrome != "object" || !chrome || !chrome.runtime || !chrome.runtime.id) { - throw new Error("This script should only be loaded in a browser extension."); - } // The build process adds a UMD wrapper around this file, which makes the + // The build process adds a UMD wrapper around this file, which makes the // `module` variable available. - - module.exports = wrapAPIs(chrome); } else { - module.exports = browser; + module.exports = globalThis.browser; } }); diff --git a/data/extensions/jsr@javascriptrestrictor/nscl/service/DocStartInjection.js b/data/extensions/jsr@javascriptrestrictor/nscl/service/DocStartInjection.js index 1b78604..65571ab 100644 --- a/data/extensions/jsr@javascriptrestrictor/nscl/service/DocStartInjection.js +++ b/data/extensions/jsr@javascriptrestrictor/nscl/service/DocStartInjection.js @@ -1,7 +1,7 @@ /* * NoScript Commons Library * Reusable building blocks for cross-browser security/privacy WebExtensions. - * Copyright (C) 2020-2023 Giorgio Maone <https://maone.net> + * Copyright (C) 2020-2024 Giorgio Maone <https://maone.net> * * SPDX-License-Identifier: GPL-3.0-or-later * @@ -25,7 +25,9 @@ var DocStartInjection = (() => { const MSG_ID = "__DocStartInjection__"; - let repeating = !("contentScripts" in browser); + const repeating = !("contentScripts" in browser); + const mv3Callbacks = repeating && !browser.tabs.executeScript; // mv3 on Chrome + let scriptBuilders = new Set(); let getId = ({requestId, tabId, frameId, url}) => requestId || `${tabId}:${frameId}:${url}`; let pending = new Map(); @@ -47,16 +49,32 @@ var DocStartInjection = (() => { let {tabId, frameId, url} = request; if (tabId < 0 || !/^(?:(?:https?|ftp|data|blob|file):|about:blank$)/.test(url)) return; - await Promise.all([...scriptBuilders].map(async buildScript => { + await Promise.allSettled([...scriptBuilders].map(async buildScript => { + let script; try { - let script = await buildScript({tabId, frameId, url}); - if (script) scripts.add(`try { + script = await buildScript({tabId, frameId, url}); + if (!script) return; + if (mv3Callbacks) { + if (typeof script !== "object") { + throw new Error('On MV3 only {data: jsonObject, callback: "globalFunctionName", assign: "globalScopeVarName"} injection can work!') + } + const {data, callback, assign} = script; + scripts.add({ + data, + callback, + assign, + }); + return; + } + // mv2 + scripts.add(`try { ${typeof script === "function" ? `(${script})();` : script} } catch (e) { console.error("Error in DocStartInjection script", e); - }`); + }` + ); } catch (e) { - error("Error calling DocStartInjection scriptBuilder", buildScript, e); + error(`Error calling DocStartInjection scriptBuilder: buildScript ${buildScript} - script: ${script}`, e); } })); @@ -68,9 +86,42 @@ var DocStartInjection = (() => { let id = getId(request); if (repeating) { - let scriptsBlock = [...scripts].join("\n"); - let injectionId = `injection:${uuid()}:${await sha256(scriptsBlock)}`; - let args = { + let injectionId = `injection:${uuid()}:${await sha256(Math.random().toString(16))}`; + let args = mv3Callbacks ? + // mv3 browser.scripting.executeScript() + { + func: (url, injectionId, scripts) => { + if (document.readyState === "complete" || + window[injectionId] || + document.URL !== url + ) return window[injectionId]; + window[injectionId] = true; + for (s of scripts) { + const {callback, assign, data} = s; + try { + if (assign && !(assign in globalThis)) { + globalThis[assign] = data; + } + if (callback) { + let cb = globalThis[callback]; + if (typeof cb == "function") { + cb.call(globalThis, data); + } else { + console.warn(`callback globalThis.${callback} is not a function (${cb}).`); + } + } + } catch (e) { + console.error(`Error in DocStartInjection script ${JSON.stringify(s)}`, e); + } + } + return document.readyState === "loading"; + }, + args: [url, injectionId, [...scripts]], + target: {tabId, frameIds: [frameId]}, + injectImmediately: true, + } : + // mv2 browser.tabs.executeScript() + { code: `(() => { let injectionId = ${JSON.stringify(injectionId)}; if (document.readyState === "complete" || @@ -78,7 +129,7 @@ var DocStartInjection = (() => { document.URL !== ${JSON.stringify(url)} ) return window[injectionId]; window[injectionId] = true; - ${scriptsBlock} + ${[...scripts].join("\n")} return document.readyState === "loading"; })();`, runAt: "document_start", @@ -117,11 +168,21 @@ var DocStartInjection = (() => { } async function run(request, repeat = false) { - let id = getId(request); - let args = pending.get(id); + const id = getId(request); + const args = pending.get(id); if (!args) return; let {url, tabId} = request; - let attempts = 0, success = false; + let attempts = 0; + let success = false; + const execute = mv3Callbacks ? + async () => { + const ret = await browser.scripting.executeScript(args); + return ret[0].result; + } + : async() => { + const ret = await browser.tabs.executeScript(tabId, args); + return ret[0]; + }; for (; pending.has(id);) { attempts++; try { @@ -133,8 +194,8 @@ var DocStartInjection = (() => { } console.error(`DocStartInjection at ${url} ${attempts} failed attempts so far...`); } - let ret = await browser.tabs.executeScript(tabId, args); - if (success = ret[0]) { + if (execute()) { + success = true; break; } } catch (e) { @@ -144,6 +205,10 @@ var DocStartInjection = (() => { if (!/\baccess\b/.test(e.message)) { console.error(e.message); } + if (!browser.tabs.executeScript) { + console.error(`MV3 fatality, cannot script tab ${tabId}! ${JSON.stringify(args)}`); + break; + } if (attempts % 1000 === 0) { console.error(`DocStartInjection at ${url} ${attempts} failed attempts`, e); } @@ -209,6 +274,7 @@ var DocStartInjection = (() => { } return { + mv3Callbacks, register(scriptBuilder) { if (scriptBuilders.size === 0) listen(true); scriptBuilders.add(scriptBuilder); diff --git a/data/extensions/jsr@javascriptrestrictor/nscl/service/NavCache.js b/data/extensions/jsr@javascriptrestrictor/nscl/service/NavCache.js index 0e603fd..28bdb0d 100644 --- a/data/extensions/jsr@javascriptrestrictor/nscl/service/NavCache.js +++ b/data/extensions/jsr@javascriptrestrictor/nscl/service/NavCache.js @@ -1,7 +1,7 @@ /* * NoScript Commons Library * Reusable building blocks for cross-browser security/privacy WebExtensions. - * Copyright (C) 2020-2023 Giorgio Maone <https://maone.net> + * Copyright (C) 2020-2024 Giorgio Maone <https://maone.net> * * SPDX-License-Identifier: GPL-3.0-or-later * @@ -45,26 +45,26 @@ var NavCache = (() => { }); browser.tabs.onRemoved.addListener(tabId => { - tabs.delete(tabId); + delete tabs[tabId]; }); - (async () => { - - async function populateFrames(tab) { - let tabId = tab.id; - let frames = await browser.webNavigation.getAllFrames({tabId}); - if (!frames) return; // invalid tab - if (!tabs[tabId]) tabs[tabId] = {}; - let top = tabs[tabId]; - for ({frameId, url, parentFrameId} of frames) { - tab[frameId] = {url, parentFrameId}; + return { + wakening: (async () => { + async function populateFrames(tab) { + let tabId = tab.id; + let frames = await browser.webNavigation.getAllFrames({tabId}); + if (!frames) return; // invalid tab + if (!tabs[tabId]) tabs[tabId] = {}; + let top = tabs[tabId]; + for ({frameId, url, parentFrameId} of frames) { + tab[frameId] = {url, parentFrameId}; + } } - } - await Promise.all((await browser.tabs.query({})).map(populateFrames)); - })(); + await Promise.all((await browser.tabs.query({})).map(populateFrames)); + return true; + })(), - return { getTab(tabId) { return clone(tabs[tabId] || {}); }, diff --git a/data/extensions/jsr@javascriptrestrictor/nscl/service/TabCache.js b/data/extensions/jsr@javascriptrestrictor/nscl/service/TabCache.js index bac095e..eb290f0 100644 --- a/data/extensions/jsr@javascriptrestrictor/nscl/service/TabCache.js +++ b/data/extensions/jsr@javascriptrestrictor/nscl/service/TabCache.js @@ -1,7 +1,7 @@ /* * NoScript Commons Library * Reusable building blocks for cross-browser security/privacy WebExtensions. - * Copyright (C) 2020-2023 Giorgio Maone <https://maone.net> + * Copyright (C) 2020-2024 Giorgio Maone <https://maone.net> * * SPDX-License-Identifier: GPL-3.0-or-later * @@ -20,7 +20,7 @@ var TabCache = (() => { - let cache = new Map(); + const cache = new Map(); browser.tabs.onUpdated.addListener((tabId, changes, tab) => { cache.set(tabId, tab); @@ -30,15 +30,17 @@ var TabCache = (() => { cache.delete(tabId); }); - (async () => { - for (let tab of await browser.tabs.query({})) { - cache.set(tab.id, tab); - } - })(); - return { + wakening: (async () => { + for (let tab of await browser.tabs.query({})) { + cache.set(tab.id, tab); + } + })(), get(tabId) { return cache.get(tabId); + }, + async async(tabId) { + return cache.get(tabId) || await browser.tabs.get(tabId); } }; })(); diff --git a/data/extensions/jsr@javascriptrestrictor/options.html b/data/extensions/jsr@javascriptrestrictor/options.html index 04b23b1..9cfec6c 100644 --- a/data/extensions/jsr@javascriptrestrictor/options.html +++ b/data/extensions/jsr@javascriptrestrictor/options.html @@ -59,6 +59,8 @@ SPDX-License-Identifier: GPL-3.0-or-later <h2 id="set-default-level" data-localize="JavascriptShield">JavaScript Shield</h2> <div class="jss_description" data-localize="JavascriptShieldDescription" htmltranslation></div> + <p class="alert mv3" id="mv3-devmode-required" issue166-localize="MV3DevmodeRequired" htmltranslation></p> + <h3 data-localize="JavascriptShieldLevelsMainLevelOptionHeading">Create custom levels and set the default level</h3> <p class="alert" data-localize="newLevelsNotRecommended" htmltranslation>We do not recommend creating own levels and changing configuration if you are concerned about browser fingerprinting. Please read @@ -81,7 +83,7 @@ SPDX-License-Identifier: GPL-3.0-or-later </div> </div> - <div id="proxy-protection-config"> + <div id="proxy-protection-config" class="mv2"> <div class="protection-title"> <h2 class="shield-onoff-label" for="nbs-switch" data-localize="NetworkBoundaryShield">Network Boundary Shield</h2> <label class="switch"> @@ -117,6 +119,8 @@ SPDX-License-Identifier: GPL-3.0-or-later </fieldset> </div> + <p class="alert mv3" data-localize="MV3BrokenFeatures" htmltranslation></p> + <div id="fingerprinting-protection-config"> <div class="protection-title"> <h2 class="shield-onoff-label" for="fpd-switch" data-localize="FingerprintDetector">Fingerprint Detector</h2> diff --git a/data/extensions/jsr@javascriptrestrictor/popup.html b/data/extensions/jsr@javascriptrestrictor/popup.html index 878a4e9..795e9ea 100644 --- a/data/extensions/jsr@javascriptrestrictor/popup.html +++ b/data/extensions/jsr@javascriptrestrictor/popup.html @@ -31,7 +31,7 @@ SPDX-License-Identifier: GPL-3.0-or-later </div> <button id="global-settings" title="Open global settings" data-localize="globalSettings">Global settings</button> </header> - + <p class="alert mv3" id="mv3-devmode-required" issue166-localize="MV3DevmodeRequired" htmltranslation></p> <content id="site-settings"> <div class="flex align-items-center justify-content-between"> <label class="text-large" data-localize="settingsForDomain">Settings for domain</label> @@ -87,7 +87,7 @@ SPDX-License-Identifier: GPL-3.0-or-later </template> - <section id="nbs_whitelist"> + <section id="nbs_whitelist" class="mv2"> <p class="off_message" data-localize="NBSgloballyOff">Network Boundary Shield is globally off.</p> <div class="switch_wrapper"> <label for="nbs-switch" data-localize="networkBoundaryShield">Network Boundary Shield</label> diff --git a/data/extensions/jsr@javascriptrestrictor/popup.js b/data/extensions/jsr@javascriptrestrictor/popup.js index a7d7adb..69771c0 100644 --- a/data/extensions/jsr@javascriptrestrictor/popup.js +++ b/data/extensions/jsr@javascriptrestrictor/popup.js @@ -336,21 +336,32 @@ document.getElementById("fpd-switch").addEventListener("change", () => {setTimeo async function getCurrentSite() {
if (typeof site !== "undefined") return site;
try {
+ let [tab] = await browser.tabs.query({currentWindow: true, active: true});
// Check whether content scripts are allowed on the current tab:
// if an exception is thrown, showing per-site settings is pointless,
// because we couldn't operate here anyway
- [pageConfiguration = {}] = await browser.tabs.executeScript({code:
- `typeof pageConfiguration === "object" && pageConfiguration || {};`});
+ if ("executeScript" in browser.tabs) {
+ [pageConfiguration = {}] = await browser.tabs.executeScript({
+ code: `typeof pageConfiguration === "object" && pageConfiguration || {};`
+ });
+ } else {
+ pageConfiguration = (await browser.scripting.executeScript({
+ injectImmediately: true,
+ func: () => typeof pageConfiguration === "object" && pageConfiguration || {},
+ target: {tabId: tab.id},
+ }))[0].result;
+ }
- let [tab] = await browser.tabs.query({currentWindow: true, active: true});
hits = await browser.runtime.sendMessage({purpose: 'fpd-fetch-hits', tabId: tab.id});
// Obtain and normalize hostname
return site = getEffectiveDomain(tab.url);
} catch (e) {
- if (e.toString() === "Error: Missing host permission for the tab") {
- await async_sleep(200); // recursively call itself, this exception occurs in Firefox during an inactive tab activation (tab page was not reload after the browser start)
+ if (/^Error: (?:Missing host permissions|Could not establish connection)/.test(e.toString())) {
+ console.warn("Recoverable timing error during popup startup, retrying in 300ms", e);
+ await async_sleep(200);
return await getCurrentSite();
}
+ console.error(e);
return site = null;
}
}
diff --git a/data/extensions/jsr@javascriptrestrictor/session_hash.js b/data/extensions/jsr@javascriptrestrictor/session_hash.js index ce3445c..1a3938c 100644 --- a/data/extensions/jsr@javascriptrestrictor/session_hash.js +++ b/data/extensions/jsr@javascriptrestrictor/session_hash.js @@ -27,20 +27,34 @@ * * \note cached visited domains with related keys are only deleted after end of the session */ + +// depends on /nscl/common/CachedStorage.js + var Hashes = { - sessionHash : gen_random64().toString(), - visitedDomains : {}, - getFor(url){ + async getFor(url){ let site = getSiteForURL(url); - let domainHash = this.visitedDomains[site]; - if (!domainHash) { - let hmac = sha256.hmac.create(this.sessionHash); - hmac.update(site); - domainHash = hmac.hex(); - this.visitedDomains[site] = domainHash; - } - return { - domainHash - }; - } + let {sessionHash, visitedDomains} = await CachedStorage.init({ + sessionHash: null, + visitedDomains: {} + }, "Hashes"); + this.sessionHash = sessionHash ??= gen_random64().toString(); + let siteHashes = visitedDomains[site]; + if (!siteHashes) { + let hmac = sha256.hmac.create(this.sessionHash); + hmac.update(site); + const domainHash = hmac.hex(); + const hash = sha256.create(); + hash.update(JSON.stringify(domainHash)); + // Redefine the domainHash for incognito context: + // Compute the SHA256 hash of the original hash so that the incognito hash is: + // * significantly different to the original domainHash, + // * computationally difficult to revert, + // * the same for all incognito windows (for the same domain). + const incognitoHash = hash.hex(); + visitedDomains[site] = siteHashes = {domainHash, incognitoHash}; + await CachedStorage.save(this); + } + return siteHashes; + } }; + diff --git a/data/extensions/jsr@javascriptrestrictor/settings_tweaks.js b/data/extensions/jsr@javascriptrestrictor/settings_tweaks.js index 314e042..1e9efd4 100644 --- a/data/extensions/jsr@javascriptrestrictor/settings_tweaks.js +++ b/data/extensions/jsr@javascriptrestrictor/settings_tweaks.js @@ -35,6 +35,20 @@ var tweak_domains_builtin = { "webworker": 2 } }, + "pad.riseup.net": { + "explanation": "https://pagure.io/JShelter/webextension/issue/152", + "level_id": ["1", "2"], + "tweaks": { + "webworker": 2 + } + }, + "kiwi.com": { + "explanation": "https://pagure.io/JShelter/webextension/issue/153", + "level_id": ["1", "2"], + "tweaks": { + "webworker": 2 + } + }, }; // TODO: implement the possibility of community-currated lists of exceptions diff --git a/data/extensions/jsr@javascriptrestrictor/wrapping.js b/data/extensions/jsr@javascriptrestrictor/wrapping.js index d2f20e4..94b2c7a 100644 --- a/data/extensions/jsr@javascriptrestrictor/wrapping.js +++ b/data/extensions/jsr@javascriptrestrictor/wrapping.js @@ -57,7 +57,7 @@ function add_wrappers(wrappers) { * Function to be used by wrapped code used for rounding */ var rounding_function = `function rounding_function(numberToRound, precision) { - return numberToRound - (numberToRound % Math.pow(10, Math.max(3 - precision))); + return numberToRound - (numberToRound % precision); }`; /** @@ -65,11 +65,8 @@ var rounding_function = `function rounding_function(numberToRound, precision) { */ var noise_function = `let lastValue = 0; function noise_function(numberToChange, precision) { - const noise = Math.floor(Math.random() * Math.pow(10, 3 - precision)); - const arr = (numberToChange + '').split('.'); - const number = parseInt(arr[0]); - const decimal = parseInt(arr[1]); - var value = number - (number % noise) + parseFloat('0.' + (decimal - (decimal % noise))); + const noise = Math.floor(Math.random() * precision); + var value = numberToChange + noise; if (lastValue < value) { lastValue = value; } diff --git a/data/extensions/jsr@javascriptrestrictor/wrappingS-TEMPORAL.js b/data/extensions/jsr@javascriptrestrictor/wrappingS-TEMPORAL.js new file mode 100644 index 0000000..0a68cc9 --- /dev/null +++ b/data/extensions/jsr@javascriptrestrictor/wrappingS-TEMPORAL.js @@ -0,0 +1,89 @@ +/** \file + * \brief Wrappers for High Resolution Time (Level 2) standard + * + * \see https://w3c.github.io/hr-time/ + * + * \author Copyright (C) 2025 Libor Polcak + * + * \license SPDX-License-Identifier: GPL-3.0-or-later + */ +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see <https://www.gnu.org/licenses/>. +// + + +/** \file + * \ingroup wrappers + * + * This wrapper aims on prevention of microarchitectural attacks, clock-skew attacks, and other time + * related attacks. The goal is to limit the precision of the time returned by the Temporal API. + * + * \see https://www.fit.vut.cz/study/thesis/22308/?year=0&sup=Pol%C4%8D%C3%A1k, especially Sect. + * 7.2. + * + * \see Tom Van Goethem, Wouter Joosen, Nick Nikiforakis. The Clock is Still Ticking: +Timing Attacks in the Modern Web. CCS'15. DOI: http://dx.doi.org/10.1145/2810103.2813632. +https://lirias.kuleuven.be/retrieve/389086 + * + * \see Schwarz, M., Lipp, M. a Gruss, D. JavaScript Zero: Real JavaScript and Zero + * Side-Channel Attacks. NDSS'18. + * + * \see Schwarz M., Maurice C., Gruss D., Mangard S. (2017) Fantastic Timers and Where to Find Them: High-Resolution Microarchitectural Attacks in JavaScript. In: Kiayias A. (eds) Financial Cryptography and Data Security. FC 2017. Lecture Notes in Computer Science, vol 10322. Springer, Cham. https://doi.org/10.1007/978-3-319-70972-7_13 + * + * The wrappers support the following behaviour: + * + * * Round timestamp: Limit the precision by removing (a part of) the decimal part of the timestamp. + * * Randomize after rounding: Create a fake decimal part to confuse attackers and to create + * timestamps that look similar to expected timestamps. + */ + + + +/* + * Create private namespace + */ +(function() { + var wrappers = [ + { + parent_object: "Temporal.Now", + parent_object_property: "instant", + wrapped_objects: [ + { + original_name: "Temporal.Now.instant", + wrapped_name: "originalTemporalNowInstant", + }, + ], + helping_code: rounding_function + noise_function + + ` + var precision = args[0]; + var doNoise = args[1]; + var func = rounding_function; + if (doNoise) { + func = noise_function; + } + `, + wrapping_function_args: "", + wrapping_function_body: ` + var original = originalTemporalNowInstant(); + var originalEpochMilliseconds = original.epochMilliseconds; + var changedValue = func(originalEpochMilliseconds, precision); + var fakeInstant = new Temporal.Instant(BigInt(changedValue) * 1000000n); // Note that we cannot return this value as it may contain different zone and other metadata to the original + var durationUntil = original.until(fakeInstant); + var result = original.add(durationUntil); + return result; + `, + }, + ] + add_wrappers(wrappers); +})() |