├── ASF-LICENSE-2.0 ├── LICENSE ├── bin └── update-psl-icann-section ├── composer.json ├── data ├── .gitkeep └── leaguepsl-LEAGUE_URI_ICANN_SECTION-5a3cc7f81795bb2e48e848af42d287b4.cache └── src ├── Installer └── ICANNSection.php ├── PublicSuffix ├── Cache.php ├── CacheException.php ├── CurlHttpClient.php ├── Domain.php ├── Exception.php ├── HttpClient.php ├── HttpClientException.php ├── ICANNSectionManager.php └── Rules.php ├── functions.php └── functions_include.php /ASF-LICENSE-2.0: -------------------------------------------------------------------------------- 1 | This license is included in this distribution to satisfy the ASF License 2.0. 2 | Certain clearly marked portions of this project are derivative works of the 3 | registered-domain-libs project, which can be found here: 4 | https://github.com/usrflo/registered-domain-libs 5 | 6 | License text begins below 7 | 8 | Licensed to the Apache Software Foundation (ASF) under one or more 9 | contributor license agreements. See the NOTICE file distributed with 10 | this work for additional information regarding copyright ownership. 11 | The ASF licenses this file to you under the Apache License, Version 2.0 12 | (the "License"); you may not use this file except in compliance with 13 | the License. You may obtain a copy of the License at: 14 | 15 | http://www.apache.org/licenses/LICENSE-2.0 16 | 17 | Unless required by applicable law or agreed to in writing, software 18 | distributed under the License is distributed on an "AS IS" BASIS, 19 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 20 | implied. 21 | See the License for the specific language governing permissions 22 | and 23 | limitations under the License. 24 | 25 | Florian Sager, 25.07.2008, sager@agitos.de, 26 | http://www.agitos.de 27 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2017 ignace nyamagana butera 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy of 6 | this software and associated documentation files (the "Software"), to deal in 7 | the Software without restriction, including without limitation the rights to 8 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 9 | the Software, and to permit persons to whom the Software is furnished to do so, 10 | subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 17 | FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 18 | COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 19 | IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 20 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -------------------------------------------------------------------------------- /bin/update-psl-icann-section: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env php 2 | =7.0", 36 | "ext-intl": "*", 37 | "psr/simple-cache": "^1.0" 38 | }, 39 | "require-dev": { 40 | "phpunit/phpunit": "^6.3", 41 | "mikey179/vfsstream": "^1.6", 42 | "friendsofphp/php-cs-fixer": "^2.7" 43 | }, 44 | "suggest": { 45 | "ext-curl": "To use the bundle cURL HTTP client", 46 | "psr/simple-cache-implementation": "To enable using other cache providers" 47 | }, 48 | "autoload": { 49 | "psr-4": { 50 | "League\\Uri\\": "src" 51 | }, 52 | "files": ["src/functions_include.php"] 53 | }, 54 | "autoload-dev": { 55 | "psr-4": { 56 | "League\\Uri\\Tests\\": "tests/" 57 | } 58 | }, 59 | "scripts": { 60 | "post-install-cmd": "\\League\\Uri\\Installer\\ICANNSection::update", 61 | "post-update-cmd": "\\League\\Uri\\Installer\\ICANNSection::update", 62 | "test": "phpunit --coverage-text; php-cs-fixer fix -vv --diff --dry-run --allow-risky=yes", 63 | "phpunit": "phpunit --coverage-text", 64 | "phpcs": "php-cs-fixer fix -vv --diff --dry-run --allow-risky=yes" 65 | } 66 | } 67 | -------------------------------------------------------------------------------- /data/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thephpleague/uri-hostname-parser/a3ef2f862640bfd79dd3fc28f23c98be09152603/data/.gitkeep -------------------------------------------------------------------------------- /data/leaguepsl-LEAGUE_URI_ICANN_SECTION-5a3cc7f81795bb2e48e848af42d287b4.cache: -------------------------------------------------------------------------------- 1 | s:87205:"{"ac":{"com":[],"edu":[],"gov":[],"net":[],"mil":[],"org":[]},"ad":{"nom":[]},"ae":{"co":[],"net":[],"org":[],"sch":[],"ac":[],"gov":[],"mil":[]},"aero":{"accident-investigation":[],"accident-prevention":[],"aerobatic":[],"aeroclub":[],"aerodrome":[],"agents":[],"aircraft":[],"airline":[],"airport":[],"air-surveillance":[],"airtraffic":[],"air-traffic-control":[],"ambulance":[],"amusement":[],"association":[],"author":[],"ballooning":[],"broker":[],"caa":[],"cargo":[],"catering":[],"certification":[],"championship":[],"charter":[],"civilaviation":[],"club":[],"conference":[],"consultant":[],"consulting":[],"control":[],"council":[],"crew":[],"design":[],"dgca":[],"educator":[],"emergency":[],"engine":[],"engineer":[],"entertainment":[],"equipment":[],"exchange":[],"express":[],"federation":[],"flight":[],"freight":[],"fuel":[],"gliding":[],"government":[],"groundhandling":[],"group":[],"hanggliding":[],"homebuilt":[],"insurance":[],"journal":[],"journalist":[],"leasing":[],"logistics":[],"magazine":[],"maintenance":[],"media":[],"microlight":[],"modelling":[],"navigation":[],"parachuting":[],"paragliding":[],"passenger-association":[],"pilot":[],"press":[],"production":[],"recreation":[],"repbody":[],"res":[],"research":[],"rotorcraft":[],"safety":[],"scientist":[],"services":[],"show":[],"skydiving":[],"software":[],"student":[],"trader":[],"trading":[],"trainer":[],"union":[],"workinggroup":[],"works":[]},"af":{"gov":[],"com":[],"org":[],"net":[],"edu":[]},"ag":{"com":[],"org":[],"net":[],"co":[],"nom":[]},"ai":{"off":[],"com":[],"net":[],"org":[]},"al":{"com":[],"edu":[],"gov":[],"mil":[],"net":[],"org":[]},"am":[],"ao":{"ed":[],"gv":[],"og":[],"co":[],"pb":[],"it":[]},"aq":[],"ar":{"com":[],"edu":[],"gob":[],"gov":[],"int":[],"mil":[],"musica":[],"net":[],"org":[],"tur":[]},"arpa":{"e164":[],"in-addr":[],"ip6":[],"iris":[],"uri":[],"urn":[]},"as":{"gov":[]},"asia":[],"at":{"ac":[],"co":[],"gv":[],"or":[]},"au":{"com":[],"net":[],"org":[],"edu":{"act":[],"nsw":[],"nt":[],"qld":[],"sa":[],"tas":[],"vic":[],"wa":[]},"gov":{"qld":[],"sa":[],"tas":[],"vic":[],"wa":[]},"asn":[],"id":[],"info":[],"conf":[],"oz":[],"act":[],"nsw":[],"nt":[],"qld":[],"sa":[],"tas":[],"vic":[],"wa":[]},"aw":{"com":[]},"ax":[],"az":{"com":[],"net":[],"int":[],"gov":[],"org":[],"edu":[],"info":[],"pp":[],"mil":[],"name":[],"pro":[],"biz":[]},"ba":{"com":[],"edu":[],"gov":[],"mil":[],"net":[],"org":[]},"bb":{"biz":[],"co":[],"com":[],"edu":[],"gov":[],"info":[],"net":[],"org":[],"store":[],"tv":[]},"bd":{"*":[]},"be":{"ac":[]},"bf":{"gov":[]},"bg":{"a":[],"b":[],"c":[],"d":[],"e":[],"f":[],"g":[],"h":[],"i":[],"j":[],"k":[],"l":[],"m":[],"n":[],"o":[],"p":[],"q":[],"r":[],"s":[],"t":[],"u":[],"v":[],"w":[],"x":[],"y":[],"z":[],"0":[],"1":[],"2":[],"3":[],"4":[],"5":[],"6":[],"7":[],"8":[],"9":[]},"bh":{"com":[],"edu":[],"net":[],"org":[],"gov":[]},"bi":{"co":[],"com":[],"edu":[],"or":[],"org":[]},"biz":[],"bj":{"asso":[],"barreau":[],"gouv":[]},"bm":{"com":[],"edu":[],"gov":[],"net":[],"org":[]},"bn":{"*":[]},"bo":{"com":[],"edu":[],"gob":[],"int":[],"org":[],"net":[],"mil":[],"tv":[],"web":[],"academia":[],"agro":[],"arte":[],"blog":[],"bolivia":[],"ciencia":[],"cooperativa":[],"democracia":[],"deporte":[],"ecologia":[],"economia":[],"empresa":[],"indigena":[],"industria":[],"info":[],"medicina":[],"movimiento":[],"musica":[],"natural":[],"nombre":[],"noticias":[],"patria":[],"politica":[],"profesional":[],"plurinacional":[],"pueblo":[],"revista":[],"salud":[],"tecnologia":[],"tksat":[],"transporte":[],"wiki":[]},"br":{"9guacu":[],"abc":[],"adm":[],"adv":[],"agr":[],"aju":[],"am":[],"anani":[],"aparecida":[],"arq":[],"art":[],"ato":[],"b":[],"belem":[],"bhz":[],"bio":[],"blog":[],"bmd":[],"boavista":[],"bsb":[],"campinagrande":[],"campinas":[],"caxias":[],"cim":[],"cng":[],"cnt":[],"com":[],"contagem":[],"coop":[],"cri":[],"cuiaba":[],"curitiba":[],"def":[],"ecn":[],"eco":[],"edu":[],"emp":[],"eng":[],"esp":[],"etc":[],"eti":[],"far":[],"feira":[],"flog":[],"floripa":[],"fm":[],"fnd":[],"fortal":[],"fot":[],"foz":[],"fst":[],"g12":[],"ggf":[],"goiania":[],"gov":{"ac":[],"al":[],"am":[],"ap":[],"ba":[],"ce":[],"df":[],"es":[],"go":[],"ma":[],"mg":[],"ms":[],"mt":[],"pa":[],"pb":[],"pe":[],"pi":[],"pr":[],"rj":[],"rn":[],"ro":[],"rr":[],"rs":[],"sc":[],"se":[],"sp":[],"to":[]},"gru":[],"imb":[],"ind":[],"inf":[],"jab":[],"jampa":[],"jdf":[],"joinville":[],"jor":[],"jus":[],"leg":[],"lel":[],"londrina":[],"macapa":[],"maceio":[],"manaus":[],"maringa":[],"mat":[],"med":[],"mil":[],"morena":[],"mp":[],"mus":[],"natal":[],"net":[],"niteroi":[],"nom":{"*":[]},"not":[],"ntr":[],"odo":[],"org":[],"osasco":[],"palmas":[],"poa":[],"ppg":[],"pro":[],"psc":[],"psi":[],"pvh":[],"qsl":[],"radio":[],"rec":[],"recife":[],"ribeirao":[],"rio":[],"riobranco":[],"riopreto":[],"salvador":[],"sampa":[],"santamaria":[],"santoandre":[],"saobernardo":[],"saogonca":[],"sjc":[],"slg":[],"slz":[],"sorocaba":[],"srv":[],"taxi":[],"teo":[],"the":[],"tmp":[],"trd":[],"tur":[],"tv":[],"udi":[],"vet":[],"vix":[],"vlog":[],"wiki":[],"zlg":[]},"bs":{"com":[],"net":[],"org":[],"edu":[],"gov":[]},"bt":{"com":[],"edu":[],"gov":[],"net":[],"org":[]},"bv":[],"bw":{"co":[],"org":[]},"by":{"gov":[],"mil":[],"com":[],"of":[]},"bz":{"com":[],"net":[],"org":[],"edu":[],"gov":[]},"ca":{"ab":[],"bc":[],"mb":[],"nb":[],"nf":[],"nl":[],"ns":[],"nt":[],"nu":[],"on":[],"pe":[],"qc":[],"sk":[],"yk":[],"gc":[]},"cat":[],"cc":[],"cd":{"gov":[]},"cf":[],"cg":[],"ch":[],"ci":{"org":[],"or":[],"com":[],"co":[],"edu":[],"ed":[],"ac":[],"net":[],"go":[],"asso":[],"xn--aroport-bya":[],"int":[],"presse":[],"md":[],"gouv":[]},"ck":{"*":[],"www":{"!":""}},"cl":{"gov":[],"gob":[],"co":[],"mil":[]},"cm":{"co":[],"com":[],"gov":[],"net":[]},"cn":{"ac":[],"com":[],"edu":[],"gov":[],"net":[],"org":[],"mil":[],"xn--55qx5d":[],"xn--io0a7i":[],"xn--od0alg":[],"ah":[],"bj":[],"cq":[],"fj":[],"gd":[],"gs":[],"gz":[],"gx":[],"ha":[],"hb":[],"he":[],"hi":[],"hl":[],"hn":[],"jl":[],"js":[],"jx":[],"ln":[],"nm":[],"nx":[],"qh":[],"sc":[],"sd":[],"sh":[],"sn":[],"sx":[],"tj":[],"xj":[],"xz":[],"yn":[],"zj":[],"hk":[],"mo":[],"tw":[]},"co":{"arts":[],"com":[],"edu":[],"firm":[],"gov":[],"info":[],"int":[],"mil":[],"net":[],"nom":[],"org":[],"rec":[],"web":[]},"com":[],"coop":[],"cr":{"ac":[],"co":[],"ed":[],"fi":[],"go":[],"or":[],"sa":[]},"cu":{"com":[],"edu":[],"org":[],"net":[],"gov":[],"inf":[]},"cv":[],"cw":{"com":[],"edu":[],"net":[],"org":[]},"cx":{"gov":[]},"cy":{"ac":[],"biz":[],"com":[],"ekloges":[],"gov":[],"ltd":[],"name":[],"net":[],"org":[],"parliament":[],"press":[],"pro":[],"tm":[]},"cz":[],"de":[],"dj":[],"dk":[],"dm":{"com":[],"net":[],"org":[],"edu":[],"gov":[]},"do":{"art":[],"com":[],"edu":[],"gob":[],"gov":[],"mil":[],"net":[],"org":[],"sld":[],"web":[]},"dz":{"com":[],"org":[],"net":[],"gov":[],"edu":[],"asso":[],"pol":[],"art":[]},"ec":{"com":[],"info":[],"net":[],"fin":[],"k12":[],"med":[],"pro":[],"org":[],"edu":[],"gov":[],"gob":[],"mil":[]},"edu":[],"ee":{"edu":[],"gov":[],"riik":[],"lib":[],"med":[],"com":[],"pri":[],"aip":[],"org":[],"fie":[]},"eg":{"com":[],"edu":[],"eun":[],"gov":[],"mil":[],"name":[],"net":[],"org":[],"sci":[]},"er":{"*":[]},"es":{"com":[],"nom":[],"org":[],"gob":[],"edu":[]},"et":{"com":[],"gov":[],"org":[],"edu":[],"biz":[],"name":[],"info":[],"net":[]},"eu":[],"fi":{"aland":[]},"fj":{"*":[]},"fk":{"*":[]},"fm":[],"fo":[],"fr":{"com":[],"asso":[],"nom":[],"prd":[],"presse":[],"tm":[],"aeroport":[],"assedic":[],"avocat":[],"avoues":[],"cci":[],"chambagri":[],"chirurgiens-dentistes":[],"experts-comptables":[],"geometre-expert":[],"gouv":[],"greta":[],"huissier-justice":[],"medecin":[],"notaires":[],"pharmacien":[],"port":[],"veterinaire":[]},"ga":[],"gb":[],"gd":[],"ge":{"com":[],"edu":[],"gov":[],"org":[],"mil":[],"net":[],"pvt":[]},"gf":[],"gg":{"co":[],"net":[],"org":[]},"gh":{"com":[],"edu":[],"gov":[],"org":[],"mil":[]},"gi":{"com":[],"ltd":[],"gov":[],"mod":[],"edu":[],"org":[]},"gl":{"co":[],"com":[],"edu":[],"net":[],"org":[]},"gm":[],"gn":{"ac":[],"com":[],"edu":[],"gov":[],"org":[],"net":[]},"gov":[],"gp":{"com":[],"net":[],"mobi":[],"edu":[],"org":[],"asso":[]},"gq":[],"gr":{"com":[],"edu":[],"net":[],"org":[],"gov":[]},"gs":[],"gt":{"com":[],"edu":[],"gob":[],"ind":[],"mil":[],"net":[],"org":[]},"gu":{"*":[]},"gw":[],"gy":{"co":[],"com":[],"edu":[],"gov":[],"net":[],"org":[]},"hk":{"com":[],"edu":[],"gov":[],"idv":[],"net":[],"org":[],"xn--55qx5d":[],"xn--wcvs22d":[],"xn--lcvr32d":[],"xn--mxtq1m":[],"xn--gmqw5a":[],"xn--ciqpn":[],"xn--gmq050i":[],"xn--zf0avx":[],"xn--io0a7i":[],"xn--mk0axi":[],"xn--od0alg":[],"xn--od0aq3b":[],"xn--tn0ag":[],"xn--uc0atv":[],"xn--uc0ay4a":[]},"hm":[],"hn":{"com":[],"edu":[],"org":[],"net":[],"mil":[],"gob":[]},"hr":{"iz":[],"from":[],"name":[],"com":[]},"ht":{"com":[],"shop":[],"firm":[],"info":[],"adult":[],"net":[],"pro":[],"org":[],"med":[],"art":[],"coop":[],"pol":[],"asso":[],"edu":[],"rel":[],"gouv":[],"perso":[]},"hu":{"co":[],"info":[],"org":[],"priv":[],"sport":[],"tm":[],"2000":[],"agrar":[],"bolt":[],"casino":[],"city":[],"erotica":[],"erotika":[],"film":[],"forum":[],"games":[],"hotel":[],"ingatlan":[],"jogasz":[],"konyvelo":[],"lakas":[],"media":[],"news":[],"reklam":[],"sex":[],"shop":[],"suli":[],"szex":[],"tozsde":[],"utazas":[],"video":[]},"id":{"ac":[],"biz":[],"co":[],"desa":[],"go":[],"mil":[],"my":[],"net":[],"or":[],"sch":[],"web":[]},"ie":{"gov":[]},"il":{"ac":[],"co":[],"gov":[],"idf":[],"k12":[],"muni":[],"net":[],"org":[]},"im":{"ac":[],"co":{"ltd":[],"plc":[]},"com":[],"net":[],"org":[],"tt":[],"tv":[]},"in":{"co":[],"firm":[],"net":[],"org":[],"gen":[],"ind":[],"nic":[],"ac":[],"edu":[],"res":[],"gov":[],"mil":[]},"info":[],"int":{"eu":[]},"io":{"com":[]},"iq":{"gov":[],"edu":[],"mil":[],"com":[],"org":[],"net":[]},"ir":{"ac":[],"co":[],"gov":[],"id":[],"net":[],"org":[],"sch":[],"xn--mgba3a4f16a":[],"xn--mgba3a4fra":[]},"is":{"net":[],"com":[],"edu":[],"gov":[],"org":[],"int":[]},"it":{"gov":[],"edu":[],"abr":[],"abruzzo":[],"aosta-valley":[],"aostavalley":[],"bas":[],"basilicata":[],"cal":[],"calabria":[],"cam":[],"campania":[],"emilia-romagna":[],"emiliaromagna":[],"emr":[],"friuli-v-giulia":[],"friuli-ve-giulia":[],"friuli-vegiulia":[],"friuli-venezia-giulia":[],"friuli-veneziagiulia":[],"friuli-vgiulia":[],"friuliv-giulia":[],"friulive-giulia":[],"friulivegiulia":[],"friulivenezia-giulia":[],"friuliveneziagiulia":[],"friulivgiulia":[],"fvg":[],"laz":[],"lazio":[],"lig":[],"liguria":[],"lom":[],"lombardia":[],"lombardy":[],"lucania":[],"mar":[],"marche":[],"mol":[],"molise":[],"piedmont":[],"piemonte":[],"pmn":[],"pug":[],"puglia":[],"sar":[],"sardegna":[],"sardinia":[],"sic":[],"sicilia":[],"sicily":[],"taa":[],"tos":[],"toscana":[],"trentino-a-adige":[],"trentino-aadige":[],"trentino-alto-adige":[],"trentino-altoadige":[],"trentino-s-tirol":[],"trentino-stirol":[],"trentino-sud-tirol":[],"trentino-sudtirol":[],"trentino-sued-tirol":[],"trentino-suedtirol":[],"trentinoa-adige":[],"trentinoaadige":[],"trentinoalto-adige":[],"trentinoaltoadige":[],"trentinos-tirol":[],"trentinostirol":[],"trentinosud-tirol":[],"trentinosudtirol":[],"trentinosued-tirol":[],"trentinosuedtirol":[],"tuscany":[],"umb":[],"umbria":[],"val-d-aosta":[],"val-daosta":[],"vald-aosta":[],"valdaosta":[],"valle-aosta":[],"valle-d-aosta":[],"valle-daosta":[],"valleaosta":[],"valled-aosta":[],"valledaosta":[],"vallee-aoste":[],"valleeaoste":[],"vao":[],"vda":[],"ven":[],"veneto":[],"ag":[],"agrigento":[],"al":[],"alessandria":[],"alto-adige":[],"altoadige":[],"an":[],"ancona":[],"andria-barletta-trani":[],"andria-trani-barletta":[],"andriabarlettatrani":[],"andriatranibarletta":[],"ao":[],"aosta":[],"aoste":[],"ap":[],"aq":[],"aquila":[],"ar":[],"arezzo":[],"ascoli-piceno":[],"ascolipiceno":[],"asti":[],"at":[],"av":[],"avellino":[],"ba":[],"balsan":[],"bari":[],"barletta-trani-andria":[],"barlettatraniandria":[],"belluno":[],"benevento":[],"bergamo":[],"bg":[],"bi":[],"biella":[],"bl":[],"bn":[],"bo":[],"bologna":[],"bolzano":[],"bozen":[],"br":[],"brescia":[],"brindisi":[],"bs":[],"bt":[],"bz":[],"ca":[],"cagliari":[],"caltanissetta":[],"campidano-medio":[],"campidanomedio":[],"campobasso":[],"carbonia-iglesias":[],"carboniaiglesias":[],"carrara-massa":[],"carraramassa":[],"caserta":[],"catania":[],"catanzaro":[],"cb":[],"ce":[],"cesena-forli":[],"cesenaforli":[],"ch":[],"chieti":[],"ci":[],"cl":[],"cn":[],"co":[],"como":[],"cosenza":[],"cr":[],"cremona":[],"crotone":[],"cs":[],"ct":[],"cuneo":[],"cz":[],"dell-ogliastra":[],"dellogliastra":[],"en":[],"enna":[],"fc":[],"fe":[],"fermo":[],"ferrara":[],"fg":[],"fi":[],"firenze":[],"florence":[],"fm":[],"foggia":[],"forli-cesena":[],"forlicesena":[],"fr":[],"frosinone":[],"ge":[],"genoa":[],"genova":[],"go":[],"gorizia":[],"gr":[],"grosseto":[],"iglesias-carbonia":[],"iglesiascarbonia":[],"im":[],"imperia":[],"is":[],"isernia":[],"kr":[],"la-spezia":[],"laquila":[],"laspezia":[],"latina":[],"lc":[],"le":[],"lecce":[],"lecco":[],"li":[],"livorno":[],"lo":[],"lodi":[],"lt":[],"lu":[],"lucca":[],"macerata":[],"mantova":[],"massa-carrara":[],"massacarrara":[],"matera":[],"mb":[],"mc":[],"me":[],"medio-campidano":[],"mediocampidano":[],"messina":[],"mi":[],"milan":[],"milano":[],"mn":[],"mo":[],"modena":[],"monza-brianza":[],"monza-e-della-brianza":[],"monza":[],"monzabrianza":[],"monzaebrianza":[],"monzaedellabrianza":[],"ms":[],"mt":[],"na":[],"naples":[],"napoli":[],"no":[],"novara":[],"nu":[],"nuoro":[],"og":[],"ogliastra":[],"olbia-tempio":[],"olbiatempio":[],"or":[],"oristano":[],"ot":[],"pa":[],"padova":[],"padua":[],"palermo":[],"parma":[],"pavia":[],"pc":[],"pd":[],"pe":[],"perugia":[],"pesaro-urbino":[],"pesarourbino":[],"pescara":[],"pg":[],"pi":[],"piacenza":[],"pisa":[],"pistoia":[],"pn":[],"po":[],"pordenone":[],"potenza":[],"pr":[],"prato":[],"pt":[],"pu":[],"pv":[],"pz":[],"ra":[],"ragusa":[],"ravenna":[],"rc":[],"re":[],"reggio-calabria":[],"reggio-emilia":[],"reggiocalabria":[],"reggioemilia":[],"rg":[],"ri":[],"rieti":[],"rimini":[],"rm":[],"rn":[],"ro":[],"roma":[],"rome":[],"rovigo":[],"sa":[],"salerno":[],"sassari":[],"savona":[],"si":[],"siena":[],"siracusa":[],"so":[],"sondrio":[],"sp":[],"sr":[],"ss":[],"suedtirol":[],"sv":[],"ta":[],"taranto":[],"te":[],"tempio-olbia":[],"tempioolbia":[],"teramo":[],"terni":[],"tn":[],"to":[],"torino":[],"tp":[],"tr":[],"trani-andria-barletta":[],"trani-barletta-andria":[],"traniandriabarletta":[],"tranibarlettaandria":[],"trapani":[],"trentino":[],"trento":[],"treviso":[],"trieste":[],"ts":[],"turin":[],"tv":[],"ud":[],"udine":[],"urbino-pesaro":[],"urbinopesaro":[],"va":[],"varese":[],"vb":[],"vc":[],"ve":[],"venezia":[],"venice":[],"verbania":[],"vercelli":[],"verona":[],"vi":[],"vibo-valentia":[],"vibovalentia":[],"vicenza":[],"viterbo":[],"vr":[],"vs":[],"vt":[],"vv":[]},"je":{"co":[],"net":[],"org":[]},"jm":{"*":[]},"jo":{"com":[],"org":[],"net":[],"edu":[],"sch":[],"gov":[],"mil":[],"name":[]},"jobs":[],"jp":{"ac":[],"ad":[],"co":[],"ed":[],"go":[],"gr":[],"lg":[],"ne":[],"or":[],"aichi":{"aisai":[],"ama":[],"anjo":[],"asuke":[],"chiryu":[],"chita":[],"fuso":[],"gamagori":[],"handa":[],"hazu":[],"hekinan":[],"higashiura":[],"ichinomiya":[],"inazawa":[],"inuyama":[],"isshiki":[],"iwakura":[],"kanie":[],"kariya":[],"kasugai":[],"kira":[],"kiyosu":[],"komaki":[],"konan":[],"kota":[],"mihama":[],"miyoshi":[],"nishio":[],"nisshin":[],"obu":[],"oguchi":[],"oharu":[],"okazaki":[],"owariasahi":[],"seto":[],"shikatsu":[],"shinshiro":[],"shitara":[],"tahara":[],"takahama":[],"tobishima":[],"toei":[],"togo":[],"tokai":[],"tokoname":[],"toyoake":[],"toyohashi":[],"toyokawa":[],"toyone":[],"toyota":[],"tsushima":[],"yatomi":[]},"akita":{"akita":[],"daisen":[],"fujisato":[],"gojome":[],"hachirogata":[],"happou":[],"higashinaruse":[],"honjo":[],"honjyo":[],"ikawa":[],"kamikoani":[],"kamioka":[],"katagami":[],"kazuno":[],"kitaakita":[],"kosaka":[],"kyowa":[],"misato":[],"mitane":[],"moriyoshi":[],"nikaho":[],"noshiro":[],"odate":[],"oga":[],"ogata":[],"semboku":[],"yokote":[],"yurihonjo":[]},"aomori":{"aomori":[],"gonohe":[],"hachinohe":[],"hashikami":[],"hiranai":[],"hirosaki":[],"itayanagi":[],"kuroishi":[],"misawa":[],"mutsu":[],"nakadomari":[],"noheji":[],"oirase":[],"owani":[],"rokunohe":[],"sannohe":[],"shichinohe":[],"shingo":[],"takko":[],"towada":[],"tsugaru":[],"tsuruta":[]},"chiba":{"abiko":[],"asahi":[],"chonan":[],"chosei":[],"choshi":[],"chuo":[],"funabashi":[],"futtsu":[],"hanamigawa":[],"ichihara":[],"ichikawa":[],"ichinomiya":[],"inzai":[],"isumi":[],"kamagaya":[],"kamogawa":[],"kashiwa":[],"katori":[],"katsuura":[],"kimitsu":[],"kisarazu":[],"kozaki":[],"kujukuri":[],"kyonan":[],"matsudo":[],"midori":[],"mihama":[],"minamiboso":[],"mobara":[],"mutsuzawa":[],"nagara":[],"nagareyama":[],"narashino":[],"narita":[],"noda":[],"oamishirasato":[],"omigawa":[],"onjuku":[],"otaki":[],"sakae":[],"sakura":[],"shimofusa":[],"shirako":[],"shiroi":[],"shisui":[],"sodegaura":[],"sosa":[],"tako":[],"tateyama":[],"togane":[],"tohnosho":[],"tomisato":[],"urayasu":[],"yachimata":[],"yachiyo":[],"yokaichiba":[],"yokoshibahikari":[],"yotsukaido":[]},"ehime":{"ainan":[],"honai":[],"ikata":[],"imabari":[],"iyo":[],"kamijima":[],"kihoku":[],"kumakogen":[],"masaki":[],"matsuno":[],"matsuyama":[],"namikata":[],"niihama":[],"ozu":[],"saijo":[],"seiyo":[],"shikokuchuo":[],"tobe":[],"toon":[],"uchiko":[],"uwajima":[],"yawatahama":[]},"fukui":{"echizen":[],"eiheiji":[],"fukui":[],"ikeda":[],"katsuyama":[],"mihama":[],"minamiechizen":[],"obama":[],"ohi":[],"ono":[],"sabae":[],"sakai":[],"takahama":[],"tsuruga":[],"wakasa":[]},"fukuoka":{"ashiya":[],"buzen":[],"chikugo":[],"chikuho":[],"chikujo":[],"chikushino":[],"chikuzen":[],"chuo":[],"dazaifu":[],"fukuchi":[],"hakata":[],"higashi":[],"hirokawa":[],"hisayama":[],"iizuka":[],"inatsuki":[],"kaho":[],"kasuga":[],"kasuya":[],"kawara":[],"keisen":[],"koga":[],"kurate":[],"kurogi":[],"kurume":[],"minami":[],"miyako":[],"miyama":[],"miyawaka":[],"mizumaki":[],"munakata":[],"nakagawa":[],"nakama":[],"nishi":[],"nogata":[],"ogori":[],"okagaki":[],"okawa":[],"oki":[],"omuta":[],"onga":[],"onojo":[],"oto":[],"saigawa":[],"sasaguri":[],"shingu":[],"shinyoshitomi":[],"shonai":[],"soeda":[],"sue":[],"tachiarai":[],"tagawa":[],"takata":[],"toho":[],"toyotsu":[],"tsuiki":[],"ukiha":[],"umi":[],"usui":[],"yamada":[],"yame":[],"yanagawa":[],"yukuhashi":[]},"fukushima":{"aizubange":[],"aizumisato":[],"aizuwakamatsu":[],"asakawa":[],"bandai":[],"date":[],"fukushima":[],"furudono":[],"futaba":[],"hanawa":[],"higashi":[],"hirata":[],"hirono":[],"iitate":[],"inawashiro":[],"ishikawa":[],"iwaki":[],"izumizaki":[],"kagamiishi":[],"kaneyama":[],"kawamata":[],"kitakata":[],"kitashiobara":[],"koori":[],"koriyama":[],"kunimi":[],"miharu":[],"mishima":[],"namie":[],"nango":[],"nishiaizu":[],"nishigo":[],"okuma":[],"omotego":[],"ono":[],"otama":[],"samegawa":[],"shimogo":[],"shirakawa":[],"showa":[],"soma":[],"sukagawa":[],"taishin":[],"tamakawa":[],"tanagura":[],"tenei":[],"yabuki":[],"yamato":[],"yamatsuri":[],"yanaizu":[],"yugawa":[]},"gifu":{"anpachi":[],"ena":[],"gifu":[],"ginan":[],"godo":[],"gujo":[],"hashima":[],"hichiso":[],"hida":[],"higashishirakawa":[],"ibigawa":[],"ikeda":[],"kakamigahara":[],"kani":[],"kasahara":[],"kasamatsu":[],"kawaue":[],"kitagata":[],"mino":[],"minokamo":[],"mitake":[],"mizunami":[],"motosu":[],"nakatsugawa":[],"ogaki":[],"sakahogi":[],"seki":[],"sekigahara":[],"shirakawa":[],"tajimi":[],"takayama":[],"tarui":[],"toki":[],"tomika":[],"wanouchi":[],"yamagata":[],"yaotsu":[],"yoro":[]},"gunma":{"annaka":[],"chiyoda":[],"fujioka":[],"higashiagatsuma":[],"isesaki":[],"itakura":[],"kanna":[],"kanra":[],"katashina":[],"kawaba":[],"kiryu":[],"kusatsu":[],"maebashi":[],"meiwa":[],"midori":[],"minakami":[],"naganohara":[],"nakanojo":[],"nanmoku":[],"numata":[],"oizumi":[],"ora":[],"ota":[],"shibukawa":[],"shimonita":[],"shinto":[],"showa":[],"takasaki":[],"takayama":[],"tamamura":[],"tatebayashi":[],"tomioka":[],"tsukiyono":[],"tsumagoi":[],"ueno":[],"yoshioka":[]},"hiroshima":{"asaminami":[],"daiwa":[],"etajima":[],"fuchu":[],"fukuyama":[],"hatsukaichi":[],"higashihiroshima":[],"hongo":[],"jinsekikogen":[],"kaita":[],"kui":[],"kumano":[],"kure":[],"mihara":[],"miyoshi":[],"naka":[],"onomichi":[],"osakikamijima":[],"otake":[],"saka":[],"sera":[],"seranishi":[],"shinichi":[],"shobara":[],"takehara":[]},"hokkaido":{"abashiri":[],"abira":[],"aibetsu":[],"akabira":[],"akkeshi":[],"asahikawa":[],"ashibetsu":[],"ashoro":[],"assabu":[],"atsuma":[],"bibai":[],"biei":[],"bifuka":[],"bihoro":[],"biratori":[],"chippubetsu":[],"chitose":[],"date":[],"ebetsu":[],"embetsu":[],"eniwa":[],"erimo":[],"esan":[],"esashi":[],"fukagawa":[],"fukushima":[],"furano":[],"furubira":[],"haboro":[],"hakodate":[],"hamatonbetsu":[],"hidaka":[],"higashikagura":[],"higashikawa":[],"hiroo":[],"hokuryu":[],"hokuto":[],"honbetsu":[],"horokanai":[],"horonobe":[],"ikeda":[],"imakane":[],"ishikari":[],"iwamizawa":[],"iwanai":[],"kamifurano":[],"kamikawa":[],"kamishihoro":[],"kamisunagawa":[],"kamoenai":[],"kayabe":[],"kembuchi":[],"kikonai":[],"kimobetsu":[],"kitahiroshima":[],"kitami":[],"kiyosato":[],"koshimizu":[],"kunneppu":[],"kuriyama":[],"kuromatsunai":[],"kushiro":[],"kutchan":[],"kyowa":[],"mashike":[],"matsumae":[],"mikasa":[],"minamifurano":[],"mombetsu":[],"moseushi":[],"mukawa":[],"muroran":[],"naie":[],"nakagawa":[],"nakasatsunai":[],"nakatombetsu":[],"nanae":[],"nanporo":[],"nayoro":[],"nemuro":[],"niikappu":[],"niki":[],"nishiokoppe":[],"noboribetsu":[],"numata":[],"obihiro":[],"obira":[],"oketo":[],"okoppe":[],"otaru":[],"otobe":[],"otofuke":[],"otoineppu":[],"oumu":[],"ozora":[],"pippu":[],"rankoshi":[],"rebun":[],"rikubetsu":[],"rishiri":[],"rishirifuji":[],"saroma":[],"sarufutsu":[],"shakotan":[],"shari":[],"shibecha":[],"shibetsu":[],"shikabe":[],"shikaoi":[],"shimamaki":[],"shimizu":[],"shimokawa":[],"shinshinotsu":[],"shintoku":[],"shiranuka":[],"shiraoi":[],"shiriuchi":[],"sobetsu":[],"sunagawa":[],"taiki":[],"takasu":[],"takikawa":[],"takinoue":[],"teshikaga":[],"tobetsu":[],"tohma":[],"tomakomai":[],"tomari":[],"toya":[],"toyako":[],"toyotomi":[],"toyoura":[],"tsubetsu":[],"tsukigata":[],"urakawa":[],"urausu":[],"uryu":[],"utashinai":[],"wakkanai":[],"wassamu":[],"yakumo":[],"yoichi":[]},"hyogo":{"aioi":[],"akashi":[],"ako":[],"amagasaki":[],"aogaki":[],"asago":[],"ashiya":[],"awaji":[],"fukusaki":[],"goshiki":[],"harima":[],"himeji":[],"ichikawa":[],"inagawa":[],"itami":[],"kakogawa":[],"kamigori":[],"kamikawa":[],"kasai":[],"kasuga":[],"kawanishi":[],"miki":[],"minamiawaji":[],"nishinomiya":[],"nishiwaki":[],"ono":[],"sanda":[],"sannan":[],"sasayama":[],"sayo":[],"shingu":[],"shinonsen":[],"shiso":[],"sumoto":[],"taishi":[],"taka":[],"takarazuka":[],"takasago":[],"takino":[],"tamba":[],"tatsuno":[],"toyooka":[],"yabu":[],"yashiro":[],"yoka":[],"yokawa":[]},"ibaraki":{"ami":[],"asahi":[],"bando":[],"chikusei":[],"daigo":[],"fujishiro":[],"hitachi":[],"hitachinaka":[],"hitachiomiya":[],"hitachiota":[],"ibaraki":[],"ina":[],"inashiki":[],"itako":[],"iwama":[],"joso":[],"kamisu":[],"kasama":[],"kashima":[],"kasumigaura":[],"koga":[],"miho":[],"mito":[],"moriya":[],"naka":[],"namegata":[],"oarai":[],"ogawa":[],"omitama":[],"ryugasaki":[],"sakai":[],"sakuragawa":[],"shimodate":[],"shimotsuma":[],"shirosato":[],"sowa":[],"suifu":[],"takahagi":[],"tamatsukuri":[],"tokai":[],"tomobe":[],"tone":[],"toride":[],"tsuchiura":[],"tsukuba":[],"uchihara":[],"ushiku":[],"yachiyo":[],"yamagata":[],"yawara":[],"yuki":[]},"ishikawa":{"anamizu":[],"hakui":[],"hakusan":[],"kaga":[],"kahoku":[],"kanazawa":[],"kawakita":[],"komatsu":[],"nakanoto":[],"nanao":[],"nomi":[],"nonoichi":[],"noto":[],"shika":[],"suzu":[],"tsubata":[],"tsurugi":[],"uchinada":[],"wajima":[]},"iwate":{"fudai":[],"fujisawa":[],"hanamaki":[],"hiraizumi":[],"hirono":[],"ichinohe":[],"ichinoseki":[],"iwaizumi":[],"iwate":[],"joboji":[],"kamaishi":[],"kanegasaki":[],"karumai":[],"kawai":[],"kitakami":[],"kuji":[],"kunohe":[],"kuzumaki":[],"miyako":[],"mizusawa":[],"morioka":[],"ninohe":[],"noda":[],"ofunato":[],"oshu":[],"otsuchi":[],"rikuzentakata":[],"shiwa":[],"shizukuishi":[],"sumita":[],"tanohata":[],"tono":[],"yahaba":[],"yamada":[]},"kagawa":{"ayagawa":[],"higashikagawa":[],"kanonji":[],"kotohira":[],"manno":[],"marugame":[],"mitoyo":[],"naoshima":[],"sanuki":[],"tadotsu":[],"takamatsu":[],"tonosho":[],"uchinomi":[],"utazu":[],"zentsuji":[]},"kagoshima":{"akune":[],"amami":[],"hioki":[],"isa":[],"isen":[],"izumi":[],"kagoshima":[],"kanoya":[],"kawanabe":[],"kinko":[],"kouyama":[],"makurazaki":[],"matsumoto":[],"minamitane":[],"nakatane":[],"nishinoomote":[],"satsumasendai":[],"soo":[],"tarumizu":[],"yusui":[]},"kanagawa":{"aikawa":[],"atsugi":[],"ayase":[],"chigasaki":[],"ebina":[],"fujisawa":[],"hadano":[],"hakone":[],"hiratsuka":[],"isehara":[],"kaisei":[],"kamakura":[],"kiyokawa":[],"matsuda":[],"minamiashigara":[],"miura":[],"nakai":[],"ninomiya":[],"odawara":[],"oi":[],"oiso":[],"sagamihara":[],"samukawa":[],"tsukui":[],"yamakita":[],"yamato":[],"yokosuka":[],"yugawara":[],"zama":[],"zushi":[]},"kochi":{"aki":[],"geisei":[],"hidaka":[],"higashitsuno":[],"ino":[],"kagami":[],"kami":[],"kitagawa":[],"kochi":[],"mihara":[],"motoyama":[],"muroto":[],"nahari":[],"nakamura":[],"nankoku":[],"nishitosa":[],"niyodogawa":[],"ochi":[],"okawa":[],"otoyo":[],"otsuki":[],"sakawa":[],"sukumo":[],"susaki":[],"tosa":[],"tosashimizu":[],"toyo":[],"tsuno":[],"umaji":[],"yasuda":[],"yusuhara":[]},"kumamoto":{"amakusa":[],"arao":[],"aso":[],"choyo":[],"gyokuto":[],"kamiamakusa":[],"kikuchi":[],"kumamoto":[],"mashiki":[],"mifune":[],"minamata":[],"minamioguni":[],"nagasu":[],"nishihara":[],"oguni":[],"ozu":[],"sumoto":[],"takamori":[],"uki":[],"uto":[],"yamaga":[],"yamato":[],"yatsushiro":[]},"kyoto":{"ayabe":[],"fukuchiyama":[],"higashiyama":[],"ide":[],"ine":[],"joyo":[],"kameoka":[],"kamo":[],"kita":[],"kizu":[],"kumiyama":[],"kyotamba":[],"kyotanabe":[],"kyotango":[],"maizuru":[],"minami":[],"minamiyamashiro":[],"miyazu":[],"muko":[],"nagaokakyo":[],"nakagyo":[],"nantan":[],"oyamazaki":[],"sakyo":[],"seika":[],"tanabe":[],"uji":[],"ujitawara":[],"wazuka":[],"yamashina":[],"yawata":[]},"mie":{"asahi":[],"inabe":[],"ise":[],"kameyama":[],"kawagoe":[],"kiho":[],"kisosaki":[],"kiwa":[],"komono":[],"kumano":[],"kuwana":[],"matsusaka":[],"meiwa":[],"mihama":[],"minamiise":[],"misugi":[],"miyama":[],"nabari":[],"shima":[],"suzuka":[],"tado":[],"taiki":[],"taki":[],"tamaki":[],"toba":[],"tsu":[],"udono":[],"ureshino":[],"watarai":[],"yokkaichi":[]},"miyagi":{"furukawa":[],"higashimatsushima":[],"ishinomaki":[],"iwanuma":[],"kakuda":[],"kami":[],"kawasaki":[],"marumori":[],"matsushima":[],"minamisanriku":[],"misato":[],"murata":[],"natori":[],"ogawara":[],"ohira":[],"onagawa":[],"osaki":[],"rifu":[],"semine":[],"shibata":[],"shichikashuku":[],"shikama":[],"shiogama":[],"shiroishi":[],"tagajo":[],"taiwa":[],"tome":[],"tomiya":[],"wakuya":[],"watari":[],"yamamoto":[],"zao":[]},"miyazaki":{"aya":[],"ebino":[],"gokase":[],"hyuga":[],"kadogawa":[],"kawaminami":[],"kijo":[],"kitagawa":[],"kitakata":[],"kitaura":[],"kobayashi":[],"kunitomi":[],"kushima":[],"mimata":[],"miyakonojo":[],"miyazaki":[],"morotsuka":[],"nichinan":[],"nishimera":[],"nobeoka":[],"saito":[],"shiiba":[],"shintomi":[],"takaharu":[],"takanabe":[],"takazaki":[],"tsuno":[]},"nagano":{"achi":[],"agematsu":[],"anan":[],"aoki":[],"asahi":[],"azumino":[],"chikuhoku":[],"chikuma":[],"chino":[],"fujimi":[],"hakuba":[],"hara":[],"hiraya":[],"iida":[],"iijima":[],"iiyama":[],"iizuna":[],"ikeda":[],"ikusaka":[],"ina":[],"karuizawa":[],"kawakami":[],"kiso":[],"kisofukushima":[],"kitaaiki":[],"komagane":[],"komoro":[],"matsukawa":[],"matsumoto":[],"miasa":[],"minamiaiki":[],"minamimaki":[],"minamiminowa":[],"minowa":[],"miyada":[],"miyota":[],"mochizuki":[],"nagano":[],"nagawa":[],"nagiso":[],"nakagawa":[],"nakano":[],"nozawaonsen":[],"obuse":[],"ogawa":[],"okaya":[],"omachi":[],"omi":[],"ookuwa":[],"ooshika":[],"otaki":[],"otari":[],"sakae":[],"sakaki":[],"saku":[],"sakuho":[],"shimosuwa":[],"shinanomachi":[],"shiojiri":[],"suwa":[],"suzaka":[],"takagi":[],"takamori":[],"takayama":[],"tateshina":[],"tatsuno":[],"togakushi":[],"togura":[],"tomi":[],"ueda":[],"wada":[],"yamagata":[],"yamanouchi":[],"yasaka":[],"yasuoka":[]},"nagasaki":{"chijiwa":[],"futsu":[],"goto":[],"hasami":[],"hirado":[],"iki":[],"isahaya":[],"kawatana":[],"kuchinotsu":[],"matsuura":[],"nagasaki":[],"obama":[],"omura":[],"oseto":[],"saikai":[],"sasebo":[],"seihi":[],"shimabara":[],"shinkamigoto":[],"togitsu":[],"tsushima":[],"unzen":[]},"nara":{"ando":[],"gose":[],"heguri":[],"higashiyoshino":[],"ikaruga":[],"ikoma":[],"kamikitayama":[],"kanmaki":[],"kashiba":[],"kashihara":[],"katsuragi":[],"kawai":[],"kawakami":[],"kawanishi":[],"koryo":[],"kurotaki":[],"mitsue":[],"miyake":[],"nara":[],"nosegawa":[],"oji":[],"ouda":[],"oyodo":[],"sakurai":[],"sango":[],"shimoichi":[],"shimokitayama":[],"shinjo":[],"soni":[],"takatori":[],"tawaramoto":[],"tenkawa":[],"tenri":[],"uda":[],"yamatokoriyama":[],"yamatotakada":[],"yamazoe":[],"yoshino":[]},"niigata":{"aga":[],"agano":[],"gosen":[],"itoigawa":[],"izumozaki":[],"joetsu":[],"kamo":[],"kariwa":[],"kashiwazaki":[],"minamiuonuma":[],"mitsuke":[],"muika":[],"murakami":[],"myoko":[],"nagaoka":[],"niigata":[],"ojiya":[],"omi":[],"sado":[],"sanjo":[],"seiro":[],"seirou":[],"sekikawa":[],"shibata":[],"tagami":[],"tainai":[],"tochio":[],"tokamachi":[],"tsubame":[],"tsunan":[],"uonuma":[],"yahiko":[],"yoita":[],"yuzawa":[]},"oita":{"beppu":[],"bungoono":[],"bungotakada":[],"hasama":[],"hiji":[],"himeshima":[],"hita":[],"kamitsue":[],"kokonoe":[],"kuju":[],"kunisaki":[],"kusu":[],"oita":[],"saiki":[],"taketa":[],"tsukumi":[],"usa":[],"usuki":[],"yufu":[]},"okayama":{"akaiwa":[],"asakuchi":[],"bizen":[],"hayashima":[],"ibara":[],"kagamino":[],"kasaoka":[],"kibichuo":[],"kumenan":[],"kurashiki":[],"maniwa":[],"misaki":[],"nagi":[],"niimi":[],"nishiawakura":[],"okayama":[],"satosho":[],"setouchi":[],"shinjo":[],"shoo":[],"soja":[],"takahashi":[],"tamano":[],"tsuyama":[],"wake":[],"yakage":[]},"okinawa":{"aguni":[],"ginowan":[],"ginoza":[],"gushikami":[],"haebaru":[],"higashi":[],"hirara":[],"iheya":[],"ishigaki":[],"ishikawa":[],"itoman":[],"izena":[],"kadena":[],"kin":[],"kitadaito":[],"kitanakagusuku":[],"kumejima":[],"kunigami":[],"minamidaito":[],"motobu":[],"nago":[],"naha":[],"nakagusuku":[],"nakijin":[],"nanjo":[],"nishihara":[],"ogimi":[],"okinawa":[],"onna":[],"shimoji":[],"taketomi":[],"tarama":[],"tokashiki":[],"tomigusuku":[],"tonaki":[],"urasoe":[],"uruma":[],"yaese":[],"yomitan":[],"yonabaru":[],"yonaguni":[],"zamami":[]},"osaka":{"abeno":[],"chihayaakasaka":[],"chuo":[],"daito":[],"fujiidera":[],"habikino":[],"hannan":[],"higashiosaka":[],"higashisumiyoshi":[],"higashiyodogawa":[],"hirakata":[],"ibaraki":[],"ikeda":[],"izumi":[],"izumiotsu":[],"izumisano":[],"kadoma":[],"kaizuka":[],"kanan":[],"kashiwara":[],"katano":[],"kawachinagano":[],"kishiwada":[],"kita":[],"kumatori":[],"matsubara":[],"minato":[],"minoh":[],"misaki":[],"moriguchi":[],"neyagawa":[],"nishi":[],"nose":[],"osakasayama":[],"sakai":[],"sayama":[],"sennan":[],"settsu":[],"shijonawate":[],"shimamoto":[],"suita":[],"tadaoka":[],"taishi":[],"tajiri":[],"takaishi":[],"takatsuki":[],"tondabayashi":[],"toyonaka":[],"toyono":[],"yao":[]},"saga":{"ariake":[],"arita":[],"fukudomi":[],"genkai":[],"hamatama":[],"hizen":[],"imari":[],"kamimine":[],"kanzaki":[],"karatsu":[],"kashima":[],"kitagata":[],"kitahata":[],"kiyama":[],"kouhoku":[],"kyuragi":[],"nishiarita":[],"ogi":[],"omachi":[],"ouchi":[],"saga":[],"shiroishi":[],"taku":[],"tara":[],"tosu":[],"yoshinogari":[]},"saitama":{"arakawa":[],"asaka":[],"chichibu":[],"fujimi":[],"fujimino":[],"fukaya":[],"hanno":[],"hanyu":[],"hasuda":[],"hatogaya":[],"hatoyama":[],"hidaka":[],"higashichichibu":[],"higashimatsuyama":[],"honjo":[],"ina":[],"iruma":[],"iwatsuki":[],"kamiizumi":[],"kamikawa":[],"kamisato":[],"kasukabe":[],"kawagoe":[],"kawaguchi":[],"kawajima":[],"kazo":[],"kitamoto":[],"koshigaya":[],"kounosu":[],"kuki":[],"kumagaya":[],"matsubushi":[],"minano":[],"misato":[],"miyashiro":[],"miyoshi":[],"moroyama":[],"nagatoro":[],"namegawa":[],"niiza":[],"ogano":[],"ogawa":[],"ogose":[],"okegawa":[],"omiya":[],"otaki":[],"ranzan":[],"ryokami":[],"saitama":[],"sakado":[],"satte":[],"sayama":[],"shiki":[],"shiraoka":[],"soka":[],"sugito":[],"toda":[],"tokigawa":[],"tokorozawa":[],"tsurugashima":[],"urawa":[],"warabi":[],"yashio":[],"yokoze":[],"yono":[],"yorii":[],"yoshida":[],"yoshikawa":[],"yoshimi":[]},"shiga":{"aisho":[],"gamo":[],"higashiomi":[],"hikone":[],"koka":[],"konan":[],"kosei":[],"koto":[],"kusatsu":[],"maibara":[],"moriyama":[],"nagahama":[],"nishiazai":[],"notogawa":[],"omihachiman":[],"otsu":[],"ritto":[],"ryuoh":[],"takashima":[],"takatsuki":[],"torahime":[],"toyosato":[],"yasu":[]},"shimane":{"akagi":[],"ama":[],"gotsu":[],"hamada":[],"higashiizumo":[],"hikawa":[],"hikimi":[],"izumo":[],"kakinoki":[],"masuda":[],"matsue":[],"misato":[],"nishinoshima":[],"ohda":[],"okinoshima":[],"okuizumo":[],"shimane":[],"tamayu":[],"tsuwano":[],"unnan":[],"yakumo":[],"yasugi":[],"yatsuka":[]},"shizuoka":{"arai":[],"atami":[],"fuji":[],"fujieda":[],"fujikawa":[],"fujinomiya":[],"fukuroi":[],"gotemba":[],"haibara":[],"hamamatsu":[],"higashiizu":[],"ito":[],"iwata":[],"izu":[],"izunokuni":[],"kakegawa":[],"kannami":[],"kawanehon":[],"kawazu":[],"kikugawa":[],"kosai":[],"makinohara":[],"matsuzaki":[],"minamiizu":[],"mishima":[],"morimachi":[],"nishiizu":[],"numazu":[],"omaezaki":[],"shimada":[],"shimizu":[],"shimoda":[],"shizuoka":[],"susono":[],"yaizu":[],"yoshida":[]},"tochigi":{"ashikaga":[],"bato":[],"haga":[],"ichikai":[],"iwafune":[],"kaminokawa":[],"kanuma":[],"karasuyama":[],"kuroiso":[],"mashiko":[],"mibu":[],"moka":[],"motegi":[],"nasu":[],"nasushiobara":[],"nikko":[],"nishikata":[],"nogi":[],"ohira":[],"ohtawara":[],"oyama":[],"sakura":[],"sano":[],"shimotsuke":[],"shioya":[],"takanezawa":[],"tochigi":[],"tsuga":[],"ujiie":[],"utsunomiya":[],"yaita":[]},"tokushima":{"aizumi":[],"anan":[],"ichiba":[],"itano":[],"kainan":[],"komatsushima":[],"matsushige":[],"mima":[],"minami":[],"miyoshi":[],"mugi":[],"nakagawa":[],"naruto":[],"sanagochi":[],"shishikui":[],"tokushima":[],"wajiki":[]},"tokyo":{"adachi":[],"akiruno":[],"akishima":[],"aogashima":[],"arakawa":[],"bunkyo":[],"chiyoda":[],"chofu":[],"chuo":[],"edogawa":[],"fuchu":[],"fussa":[],"hachijo":[],"hachioji":[],"hamura":[],"higashikurume":[],"higashimurayama":[],"higashiyamato":[],"hino":[],"hinode":[],"hinohara":[],"inagi":[],"itabashi":[],"katsushika":[],"kita":[],"kiyose":[],"kodaira":[],"koganei":[],"kokubunji":[],"komae":[],"koto":[],"kouzushima":[],"kunitachi":[],"machida":[],"meguro":[],"minato":[],"mitaka":[],"mizuho":[],"musashimurayama":[],"musashino":[],"nakano":[],"nerima":[],"ogasawara":[],"okutama":[],"ome":[],"oshima":[],"ota":[],"setagaya":[],"shibuya":[],"shinagawa":[],"shinjuku":[],"suginami":[],"sumida":[],"tachikawa":[],"taito":[],"tama":[],"toshima":[]},"tottori":{"chizu":[],"hino":[],"kawahara":[],"koge":[],"kotoura":[],"misasa":[],"nanbu":[],"nichinan":[],"sakaiminato":[],"tottori":[],"wakasa":[],"yazu":[],"yonago":[]},"toyama":{"asahi":[],"fuchu":[],"fukumitsu":[],"funahashi":[],"himi":[],"imizu":[],"inami":[],"johana":[],"kamiichi":[],"kurobe":[],"nakaniikawa":[],"namerikawa":[],"nanto":[],"nyuzen":[],"oyabe":[],"taira":[],"takaoka":[],"tateyama":[],"toga":[],"tonami":[],"toyama":[],"unazuki":[],"uozu":[],"yamada":[]},"wakayama":{"arida":[],"aridagawa":[],"gobo":[],"hashimoto":[],"hidaka":[],"hirogawa":[],"inami":[],"iwade":[],"kainan":[],"kamitonda":[],"katsuragi":[],"kimino":[],"kinokawa":[],"kitayama":[],"koya":[],"koza":[],"kozagawa":[],"kudoyama":[],"kushimoto":[],"mihama":[],"misato":[],"nachikatsuura":[],"shingu":[],"shirahama":[],"taiji":[],"tanabe":[],"wakayama":[],"yuasa":[],"yura":[]},"yamagata":{"asahi":[],"funagata":[],"higashine":[],"iide":[],"kahoku":[],"kaminoyama":[],"kaneyama":[],"kawanishi":[],"mamurogawa":[],"mikawa":[],"murayama":[],"nagai":[],"nakayama":[],"nanyo":[],"nishikawa":[],"obanazawa":[],"oe":[],"oguni":[],"ohkura":[],"oishida":[],"sagae":[],"sakata":[],"sakegawa":[],"shinjo":[],"shirataka":[],"shonai":[],"takahata":[],"tendo":[],"tozawa":[],"tsuruoka":[],"yamagata":[],"yamanobe":[],"yonezawa":[],"yuza":[]},"yamaguchi":{"abu":[],"hagi":[],"hikari":[],"hofu":[],"iwakuni":[],"kudamatsu":[],"mitou":[],"nagato":[],"oshima":[],"shimonoseki":[],"shunan":[],"tabuse":[],"tokuyama":[],"toyota":[],"ube":[],"yuu":[]},"yamanashi":{"chuo":[],"doshi":[],"fuefuki":[],"fujikawa":[],"fujikawaguchiko":[],"fujiyoshida":[],"hayakawa":[],"hokuto":[],"ichikawamisato":[],"kai":[],"kofu":[],"koshu":[],"kosuge":[],"minami-alps":[],"minobu":[],"nakamichi":[],"nanbu":[],"narusawa":[],"nirasaki":[],"nishikatsura":[],"oshino":[],"otsuki":[],"showa":[],"tabayama":[],"tsuru":[],"uenohara":[],"yamanakako":[],"yamanashi":[]},"xn--4pvxs":[],"xn--vgu402c":[],"xn--c3s14m":[],"xn--f6qx53a":[],"xn--8pvr4u":[],"xn--uist22h":[],"xn--djrs72d6uy":[],"xn--mkru45i":[],"xn--0trq7p7nn":[],"xn--8ltr62k":[],"xn--2m4a15e":[],"xn--efvn9s":[],"xn--32vp30h":[],"xn--4it797k":[],"xn--1lqs71d":[],"xn--5rtp49c":[],"xn--5js045d":[],"xn--ehqz56n":[],"xn--1lqs03n":[],"xn--qqqt11m":[],"xn--kbrq7o":[],"xn--pssu33l":[],"xn--ntsq17g":[],"xn--uisz3g":[],"xn--6btw5a":[],"xn--1ctwo":[],"xn--6orx2r":[],"xn--rht61e":[],"xn--rht27z":[],"xn--djty4k":[],"xn--nit225k":[],"xn--rht3d":[],"xn--klty5x":[],"xn--kltx9a":[],"xn--kltp7d":[],"xn--uuwu58a":[],"xn--zbx025d":[],"xn--ntso0iqx3a":[],"xn--elqq16h":[],"xn--4it168d":[],"xn--klt787d":[],"xn--rny31h":[],"xn--7t0a264c":[],"xn--5rtq34k":[],"xn--k7yn95e":[],"xn--tor131o":[],"xn--d5qv7z876c":[],"kawasaki":{"*":[],"city":{"!":""}},"kitakyushu":{"*":[],"city":{"!":""}},"kobe":{"*":[],"city":{"!":""}},"nagoya":{"*":[],"city":{"!":""}},"sapporo":{"*":[],"city":{"!":""}},"sendai":{"*":[],"city":{"!":""}},"yokohama":{"*":[],"city":{"!":""}}},"ke":{"ac":[],"co":[],"go":[],"info":[],"me":[],"mobi":[],"ne":[],"or":[],"sc":[]},"kg":{"org":[],"net":[],"com":[],"edu":[],"gov":[],"mil":[]},"kh":{"*":[]},"ki":{"edu":[],"biz":[],"net":[],"org":[],"gov":[],"info":[],"com":[]},"km":{"org":[],"nom":[],"gov":[],"prd":[],"tm":[],"edu":[],"mil":[],"ass":[],"com":[],"coop":[],"asso":[],"presse":[],"medecin":[],"notaires":[],"pharmaciens":[],"veterinaire":[],"gouv":[]},"kn":{"net":[],"org":[],"edu":[],"gov":[]},"kp":{"com":[],"edu":[],"gov":[],"org":[],"rep":[],"tra":[]},"kr":{"ac":[],"co":[],"es":[],"go":[],"hs":[],"kg":[],"mil":[],"ms":[],"ne":[],"or":[],"pe":[],"re":[],"sc":[],"busan":[],"chungbuk":[],"chungnam":[],"daegu":[],"daejeon":[],"gangwon":[],"gwangju":[],"gyeongbuk":[],"gyeonggi":[],"gyeongnam":[],"incheon":[],"jeju":[],"jeonbuk":[],"jeonnam":[],"seoul":[],"ulsan":[]},"kw":{"*":[]},"ky":{"edu":[],"gov":[],"com":[],"org":[],"net":[]},"kz":{"org":[],"edu":[],"net":[],"gov":[],"mil":[],"com":[]},"la":{"int":[],"net":[],"info":[],"edu":[],"gov":[],"per":[],"com":[],"org":[]},"lb":{"com":[],"edu":[],"gov":[],"net":[],"org":[]},"lc":{"com":[],"net":[],"co":[],"org":[],"edu":[],"gov":[]},"li":[],"lk":{"gov":[],"sch":[],"net":[],"int":[],"com":[],"org":[],"edu":[],"ngo":[],"soc":[],"web":[],"ltd":[],"assn":[],"grp":[],"hotel":[],"ac":[]},"lr":{"com":[],"edu":[],"gov":[],"org":[],"net":[]},"ls":{"co":[],"org":[]},"lt":{"gov":[]},"lu":[],"lv":{"com":[],"edu":[],"gov":[],"org":[],"mil":[],"id":[],"net":[],"asn":[],"conf":[]},"ly":{"com":[],"net":[],"gov":[],"plc":[],"edu":[],"sch":[],"med":[],"org":[],"id":[]},"ma":{"co":[],"net":[],"gov":[],"org":[],"ac":[],"press":[]},"mc":{"tm":[],"asso":[]},"md":[],"me":{"co":[],"net":[],"org":[],"edu":[],"ac":[],"gov":[],"its":[],"priv":[]},"mg":{"org":[],"nom":[],"gov":[],"prd":[],"tm":[],"edu":[],"mil":[],"com":[],"co":[]},"mh":[],"mil":[],"mk":{"com":[],"org":[],"net":[],"edu":[],"gov":[],"inf":[],"name":[]},"ml":{"com":[],"edu":[],"gouv":[],"gov":[],"net":[],"org":[],"presse":[]},"mm":{"*":[]},"mn":{"gov":[],"edu":[],"org":[]},"mo":{"com":[],"net":[],"org":[],"edu":[],"gov":[]},"mobi":[],"mp":[],"mq":[],"mr":{"gov":[]},"ms":{"com":[],"edu":[],"gov":[],"net":[],"org":[]},"mt":{"com":[],"edu":[],"net":[],"org":[]},"mu":{"com":[],"net":[],"org":[],"gov":[],"ac":[],"co":[],"or":[]},"museum":{"academy":[],"agriculture":[],"air":[],"airguard":[],"alabama":[],"alaska":[],"amber":[],"ambulance":[],"american":[],"americana":[],"americanantiques":[],"americanart":[],"amsterdam":[],"and":[],"annefrank":[],"anthro":[],"anthropology":[],"antiques":[],"aquarium":[],"arboretum":[],"archaeological":[],"archaeology":[],"architecture":[],"art":[],"artanddesign":[],"artcenter":[],"artdeco":[],"arteducation":[],"artgallery":[],"arts":[],"artsandcrafts":[],"asmatart":[],"assassination":[],"assisi":[],"association":[],"astronomy":[],"atlanta":[],"austin":[],"australia":[],"automotive":[],"aviation":[],"axis":[],"badajoz":[],"baghdad":[],"bahn":[],"bale":[],"baltimore":[],"barcelona":[],"baseball":[],"basel":[],"baths":[],"bauern":[],"beauxarts":[],"beeldengeluid":[],"bellevue":[],"bergbau":[],"berkeley":[],"berlin":[],"bern":[],"bible":[],"bilbao":[],"bill":[],"birdart":[],"birthplace":[],"bonn":[],"boston":[],"botanical":[],"botanicalgarden":[],"botanicgarden":[],"botany":[],"brandywinevalley":[],"brasil":[],"bristol":[],"british":[],"britishcolumbia":[],"broadcast":[],"brunel":[],"brussel":[],"brussels":[],"bruxelles":[],"building":[],"burghof":[],"bus":[],"bushey":[],"cadaques":[],"california":[],"cambridge":[],"can":[],"canada":[],"capebreton":[],"carrier":[],"cartoonart":[],"casadelamoneda":[],"castle":[],"castres":[],"celtic":[],"center":[],"chattanooga":[],"cheltenham":[],"chesapeakebay":[],"chicago":[],"children":[],"childrens":[],"childrensgarden":[],"chiropractic":[],"chocolate":[],"christiansburg":[],"cincinnati":[],"cinema":[],"circus":[],"civilisation":[],"civilization":[],"civilwar":[],"clinton":[],"clock":[],"coal":[],"coastaldefence":[],"cody":[],"coldwar":[],"collection":[],"colonialwilliamsburg":[],"coloradoplateau":[],"columbia":[],"columbus":[],"communication":[],"communications":[],"community":[],"computer":[],"computerhistory":[],"xn--comunicaes-v6a2o":[],"contemporary":[],"contemporaryart":[],"convent":[],"copenhagen":[],"corporation":[],"xn--correios-e-telecomunicaes-ghc29a":[],"corvette":[],"costume":[],"countryestate":[],"county":[],"crafts":[],"cranbrook":[],"creation":[],"cultural":[],"culturalcenter":[],"culture":[],"cyber":[],"cymru":[],"dali":[],"dallas":[],"database":[],"ddr":[],"decorativearts":[],"delaware":[],"delmenhorst":[],"denmark":[],"depot":[],"design":[],"detroit":[],"dinosaur":[],"discovery":[],"dolls":[],"donostia":[],"durham":[],"eastafrica":[],"eastcoast":[],"education":[],"educational":[],"egyptian":[],"eisenbahn":[],"elburg":[],"elvendrell":[],"embroidery":[],"encyclopedic":[],"england":[],"entomology":[],"environment":[],"environmentalconservation":[],"epilepsy":[],"essex":[],"estate":[],"ethnology":[],"exeter":[],"exhibition":[],"family":[],"farm":[],"farmequipment":[],"farmers":[],"farmstead":[],"field":[],"figueres":[],"filatelia":[],"film":[],"fineart":[],"finearts":[],"finland":[],"flanders":[],"florida":[],"force":[],"fortmissoula":[],"fortworth":[],"foundation":[],"francaise":[],"frankfurt":[],"franziskaner":[],"freemasonry":[],"freiburg":[],"fribourg":[],"frog":[],"fundacio":[],"furniture":[],"gallery":[],"garden":[],"gateway":[],"geelvinck":[],"gemological":[],"geology":[],"georgia":[],"giessen":[],"glas":[],"glass":[],"gorge":[],"grandrapids":[],"graz":[],"guernsey":[],"halloffame":[],"hamburg":[],"handson":[],"harvestcelebration":[],"hawaii":[],"health":[],"heimatunduhren":[],"hellas":[],"helsinki":[],"hembygdsforbund":[],"heritage":[],"histoire":[],"historical":[],"historicalsociety":[],"historichouses":[],"historisch":[],"historisches":[],"history":[],"historyofscience":[],"horology":[],"house":[],"humanities":[],"illustration":[],"imageandsound":[],"indian":[],"indiana":[],"indianapolis":[],"indianmarket":[],"intelligence":[],"interactive":[],"iraq":[],"iron":[],"isleofman":[],"jamison":[],"jefferson":[],"jerusalem":[],"jewelry":[],"jewish":[],"jewishart":[],"jfk":[],"journalism":[],"judaica":[],"judygarland":[],"juedisches":[],"juif":[],"karate":[],"karikatur":[],"kids":[],"koebenhavn":[],"koeln":[],"kunst":[],"kunstsammlung":[],"kunstunddesign":[],"labor":[],"labour":[],"lajolla":[],"lancashire":[],"landes":[],"lans":[],"xn--lns-qla":[],"larsson":[],"lewismiller":[],"lincoln":[],"linz":[],"living":[],"livinghistory":[],"localhistory":[],"london":[],"losangeles":[],"louvre":[],"loyalist":[],"lucerne":[],"luxembourg":[],"luzern":[],"mad":[],"madrid":[],"mallorca":[],"manchester":[],"mansion":[],"mansions":[],"manx":[],"marburg":[],"maritime":[],"maritimo":[],"maryland":[],"marylhurst":[],"media":[],"medical":[],"medizinhistorisches":[],"meeres":[],"memorial":[],"mesaverde":[],"michigan":[],"midatlantic":[],"military":[],"mill":[],"miners":[],"mining":[],"minnesota":[],"missile":[],"missoula":[],"modern":[],"moma":[],"money":[],"monmouth":[],"monticello":[],"montreal":[],"moscow":[],"motorcycle":[],"muenchen":[],"muenster":[],"mulhouse":[],"muncie":[],"museet":[],"museumcenter":[],"museumvereniging":[],"music":[],"national":[],"nationalfirearms":[],"nationalheritage":[],"nativeamerican":[],"naturalhistory":[],"naturalhistorymuseum":[],"naturalsciences":[],"nature":[],"naturhistorisches":[],"natuurwetenschappen":[],"naumburg":[],"naval":[],"nebraska":[],"neues":[],"newhampshire":[],"newjersey":[],"newmexico":[],"newport":[],"newspaper":[],"newyork":[],"niepce":[],"norfolk":[],"north":[],"nrw":[],"nuernberg":[],"nuremberg":[],"nyc":[],"nyny":[],"oceanographic":[],"oceanographique":[],"omaha":[],"online":[],"ontario":[],"openair":[],"oregon":[],"oregontrail":[],"otago":[],"oxford":[],"pacific":[],"paderborn":[],"palace":[],"paleo":[],"palmsprings":[],"panama":[],"paris":[],"pasadena":[],"pharmacy":[],"philadelphia":[],"philadelphiaarea":[],"philately":[],"phoenix":[],"photography":[],"pilots":[],"pittsburgh":[],"planetarium":[],"plantation":[],"plants":[],"plaza":[],"portal":[],"portland":[],"portlligat":[],"posts-and-telecommunications":[],"preservation":[],"presidio":[],"press":[],"project":[],"public":[],"pubol":[],"quebec":[],"railroad":[],"railway":[],"research":[],"resistance":[],"riodejaneiro":[],"rochester":[],"rockart":[],"roma":[],"russia":[],"saintlouis":[],"salem":[],"salvadordali":[],"salzburg":[],"sandiego":[],"sanfrancisco":[],"santabarbara":[],"santacruz":[],"santafe":[],"saskatchewan":[],"satx":[],"savannahga":[],"schlesisches":[],"schoenbrunn":[],"schokoladen":[],"school":[],"schweiz":[],"science":[],"scienceandhistory":[],"scienceandindustry":[],"sciencecenter":[],"sciencecenters":[],"science-fiction":[],"sciencehistory":[],"sciences":[],"sciencesnaturelles":[],"scotland":[],"seaport":[],"settlement":[],"settlers":[],"shell":[],"sherbrooke":[],"sibenik":[],"silk":[],"ski":[],"skole":[],"society":[],"sologne":[],"soundandvision":[],"southcarolina":[],"southwest":[],"space":[],"spy":[],"square":[],"stadt":[],"stalbans":[],"starnberg":[],"state":[],"stateofdelaware":[],"station":[],"steam":[],"steiermark":[],"stjohn":[],"stockholm":[],"stpetersburg":[],"stuttgart":[],"suisse":[],"surgeonshall":[],"surrey":[],"svizzera":[],"sweden":[],"sydney":[],"tank":[],"tcm":[],"technology":[],"telekommunikation":[],"television":[],"texas":[],"textile":[],"theater":[],"time":[],"timekeeping":[],"topology":[],"torino":[],"touch":[],"town":[],"transport":[],"tree":[],"trolley":[],"trust":[],"trustee":[],"uhren":[],"ulm":[],"undersea":[],"university":[],"usa":[],"usantiques":[],"usarts":[],"uscountryestate":[],"usculture":[],"usdecorativearts":[],"usgarden":[],"ushistory":[],"ushuaia":[],"uslivinghistory":[],"utah":[],"uvic":[],"valley":[],"vantaa":[],"versailles":[],"viking":[],"village":[],"virginia":[],"virtual":[],"virtuel":[],"vlaanderen":[],"volkenkunde":[],"wales":[],"wallonie":[],"war":[],"washingtondc":[],"watchandclock":[],"watch-and-clock":[],"western":[],"westfalen":[],"whaling":[],"wildlife":[],"williamsburg":[],"windmill":[],"workshop":[],"york":[],"yorkshire":[],"yosemite":[],"youth":[],"zoological":[],"zoology":[],"xn--9dbhblg6di":[],"xn--h1aegh":[]},"mv":{"aero":[],"biz":[],"com":[],"coop":[],"edu":[],"gov":[],"info":[],"int":[],"mil":[],"museum":[],"name":[],"net":[],"org":[],"pro":[]},"mw":{"ac":[],"biz":[],"co":[],"com":[],"coop":[],"edu":[],"gov":[],"int":[],"museum":[],"net":[],"org":[]},"mx":{"com":[],"org":[],"gob":[],"edu":[],"net":[]},"my":{"com":[],"net":[],"org":[],"gov":[],"edu":[],"mil":[],"name":[]},"mz":{"ac":[],"adv":[],"co":[],"edu":[],"gov":[],"mil":[],"net":[],"org":[]},"na":{"info":[],"pro":[],"name":[],"school":[],"or":[],"dr":[],"us":[],"mx":[],"ca":[],"in":[],"cc":[],"tv":[],"ws":[],"mobi":[],"co":[],"com":[],"org":[]},"name":[],"nc":{"asso":[],"nom":[]},"ne":[],"net":[],"nf":{"com":[],"net":[],"per":[],"rec":[],"web":[],"arts":[],"firm":[],"info":[],"other":[],"store":[]},"ng":{"com":[],"edu":[],"gov":[],"i":[],"mil":[],"mobi":[],"name":[],"net":[],"org":[],"sch":[]},"ni":{"ac":[],"biz":[],"co":[],"com":[],"edu":[],"gob":[],"in":[],"info":[],"int":[],"mil":[],"net":[],"nom":[],"org":[],"web":[]},"nl":{"bv":[]},"no":{"fhs":[],"vgs":[],"fylkesbibl":[],"folkebibl":[],"museum":[],"idrett":[],"priv":[],"mil":[],"stat":[],"dep":[],"kommune":[],"herad":[],"aa":{"gs":[]},"ah":{"gs":[]},"bu":{"gs":[]},"fm":{"gs":[]},"hl":{"gs":[]},"hm":{"gs":[]},"jan-mayen":{"gs":[]},"mr":{"gs":[]},"nl":{"gs":[]},"nt":{"gs":[]},"of":{"gs":[]},"ol":{"gs":[]},"oslo":{"gs":[]},"rl":{"gs":[]},"sf":{"gs":[]},"st":{"gs":[]},"svalbard":{"gs":[]},"tm":{"gs":[]},"tr":{"gs":[]},"va":{"gs":[]},"vf":{"gs":[]},"akrehamn":[],"xn--krehamn-dxa":[],"algard":[],"xn--lgrd-poac":[],"arna":[],"brumunddal":[],"bryne":[],"bronnoysund":[],"xn--brnnysund-m8ac":[],"drobak":[],"xn--drbak-wua":[],"egersund":[],"fetsund":[],"floro":[],"xn--flor-jra":[],"fredrikstad":[],"hokksund":[],"honefoss":[],"xn--hnefoss-q1a":[],"jessheim":[],"jorpeland":[],"xn--jrpeland-54a":[],"kirkenes":[],"kopervik":[],"krokstadelva":[],"langevag":[],"xn--langevg-jxa":[],"leirvik":[],"mjondalen":[],"xn--mjndalen-64a":[],"mo-i-rana":[],"mosjoen":[],"xn--mosjen-eya":[],"nesoddtangen":[],"orkanger":[],"osoyro":[],"xn--osyro-wua":[],"raholt":[],"xn--rholt-mra":[],"sandnessjoen":[],"xn--sandnessjen-ogb":[],"skedsmokorset":[],"slattum":[],"spjelkavik":[],"stathelle":[],"stavern":[],"stjordalshalsen":[],"xn--stjrdalshalsen-sqb":[],"tananger":[],"tranby":[],"vossevangen":[],"afjord":[],"xn--fjord-lra":[],"agdenes":[],"al":[],"xn--l-1fa":[],"alesund":[],"xn--lesund-hua":[],"alstahaug":[],"alta":[],"xn--lt-liac":[],"alaheadju":[],"xn--laheadju-7ya":[],"alvdal":[],"amli":[],"xn--mli-tla":[],"amot":[],"xn--mot-tla":[],"andebu":[],"andoy":[],"xn--andy-ira":[],"andasuolo":[],"ardal":[],"xn--rdal-poa":[],"aremark":[],"arendal":[],"xn--s-1fa":[],"aseral":[],"xn--seral-lra":[],"asker":[],"askim":[],"askvoll":[],"askoy":[],"xn--asky-ira":[],"asnes":[],"xn--snes-poa":[],"audnedaln":[],"aukra":[],"aure":[],"aurland":[],"aurskog-holand":[],"xn--aurskog-hland-jnb":[],"austevoll":[],"austrheim":[],"averoy":[],"xn--avery-yua":[],"balestrand":[],"ballangen":[],"balat":[],"xn--blt-elab":[],"balsfjord":[],"bahccavuotna":[],"xn--bhccavuotna-k7a":[],"bamble":[],"bardu":[],"beardu":[],"beiarn":[],"bajddar":[],"xn--bjddar-pta":[],"baidar":[],"xn--bidr-5nac":[],"berg":[],"bergen":[],"berlevag":[],"xn--berlevg-jxa":[],"bearalvahki":[],"xn--bearalvhki-y4a":[],"bindal":[],"birkenes":[],"bjarkoy":[],"xn--bjarky-fya":[],"bjerkreim":[],"bjugn":[],"bodo":[],"xn--bod-2na":[],"badaddja":[],"xn--bdddj-mrabd":[],"budejju":[],"bokn":[],"bremanger":[],"bronnoy":[],"xn--brnny-wuac":[],"bygland":[],"bykle":[],"barum":[],"xn--brum-voa":[],"telemark":{"bo":[],"xn--b-5ga":[]},"nordland":{"bo":[],"xn--b-5ga":[],"heroy":[],"xn--hery-ira":[]},"bievat":[],"xn--bievt-0qa":[],"bomlo":[],"xn--bmlo-gra":[],"batsfjord":[],"xn--btsfjord-9za":[],"bahcavuotna":[],"xn--bhcavuotna-s4a":[],"dovre":[],"drammen":[],"drangedal":[],"dyroy":[],"xn--dyry-ira":[],"donna":[],"xn--dnna-gra":[],"eid":[],"eidfjord":[],"eidsberg":[],"eidskog":[],"eidsvoll":[],"eigersund":[],"elverum":[],"enebakk":[],"engerdal":[],"etne":[],"etnedal":[],"evenes":[],"evenassi":[],"xn--eveni-0qa01ga":[],"evje-og-hornnes":[],"farsund":[],"fauske":[],"fuossko":[],"fuoisku":[],"fedje":[],"fet":[],"finnoy":[],"xn--finny-yua":[],"fitjar":[],"fjaler":[],"fjell":[],"flakstad":[],"flatanger":[],"flekkefjord":[],"flesberg":[],"flora":[],"fla":[],"xn--fl-zia":[],"folldal":[],"forsand":[],"fosnes":[],"frei":[],"frogn":[],"froland":[],"frosta":[],"frana":[],"xn--frna-woa":[],"froya":[],"xn--frya-hra":[],"fusa":[],"fyresdal":[],"forde":[],"xn--frde-gra":[],"gamvik":[],"gangaviika":[],"xn--ggaviika-8ya47h":[],"gaular":[],"gausdal":[],"gildeskal":[],"xn--gildeskl-g0a":[],"giske":[],"gjemnes":[],"gjerdrum":[],"gjerstad":[],"gjesdal":[],"gjovik":[],"xn--gjvik-wua":[],"gloppen":[],"gol":[],"gran":[],"grane":[],"granvin":[],"gratangen":[],"grimstad":[],"grong":[],"kraanghke":[],"xn--kranghke-b0a":[],"grue":[],"gulen":[],"hadsel":[],"halden":[],"halsa":[],"hamar":[],"hamaroy":[],"habmer":[],"xn--hbmer-xqa":[],"hapmir":[],"xn--hpmir-xqa":[],"hammerfest":[],"hammarfeasta":[],"xn--hmmrfeasta-s4ac":[],"haram":[],"hareid":[],"harstad":[],"hasvik":[],"aknoluokta":[],"xn--koluokta-7ya57h":[],"hattfjelldal":[],"aarborte":[],"haugesund":[],"hemne":[],"hemnes":[],"hemsedal":[],"more-og-romsdal":{"heroy":[],"sande":[]},"xn--mre-og-romsdal-qqb":{"xn--hery-ira":[],"sande":[]},"hitra":[],"hjartdal":[],"hjelmeland":[],"hobol":[],"xn--hobl-ira":[],"hof":[],"hol":[],"hole":[],"holmestrand":[],"holtalen":[],"xn--holtlen-hxa":[],"hornindal":[],"horten":[],"hurdal":[],"hurum":[],"hvaler":[],"hyllestad":[],"hagebostad":[],"xn--hgebostad-g3a":[],"hoyanger":[],"xn--hyanger-q1a":[],"hoylandet":[],"xn--hylandet-54a":[],"ha":[],"xn--h-2fa":[],"ibestad":[],"inderoy":[],"xn--indery-fya":[],"iveland":[],"jevnaker":[],"jondal":[],"jolster":[],"xn--jlster-bya":[],"karasjok":[],"karasjohka":[],"xn--krjohka-hwab49j":[],"karlsoy":[],"galsa":[],"xn--gls-elac":[],"karmoy":[],"xn--karmy-yua":[],"kautokeino":[],"guovdageaidnu":[],"klepp":[],"klabu":[],"xn--klbu-woa":[],"kongsberg":[],"kongsvinger":[],"kragero":[],"xn--krager-gya":[],"kristiansand":[],"kristiansund":[],"krodsherad":[],"xn--krdsherad-m8a":[],"kvalsund":[],"rahkkeravju":[],"xn--rhkkervju-01af":[],"kvam":[],"kvinesdal":[],"kvinnherad":[],"kviteseid":[],"kvitsoy":[],"xn--kvitsy-fya":[],"kvafjord":[],"xn--kvfjord-nxa":[],"giehtavuoatna":[],"kvanangen":[],"xn--kvnangen-k0a":[],"navuotna":[],"xn--nvuotna-hwa":[],"kafjord":[],"xn--kfjord-iua":[],"gaivuotna":[],"xn--givuotna-8ya":[],"larvik":[],"lavangen":[],"lavagis":[],"loabat":[],"xn--loabt-0qa":[],"lebesby":[],"davvesiida":[],"leikanger":[],"leirfjord":[],"leka":[],"leksvik":[],"lenvik":[],"leangaviika":[],"xn--leagaviika-52b":[],"lesja":[],"levanger":[],"lier":[],"lierne":[],"lillehammer":[],"lillesand":[],"lindesnes":[],"lindas":[],"xn--linds-pra":[],"lom":[],"loppa":[],"lahppi":[],"xn--lhppi-xqa":[],"lund":[],"lunner":[],"luroy":[],"xn--lury-ira":[],"luster":[],"lyngdal":[],"lyngen":[],"ivgu":[],"lardal":[],"lerdal":[],"xn--lrdal-sra":[],"lodingen":[],"xn--ldingen-q1a":[],"lorenskog":[],"xn--lrenskog-54a":[],"loten":[],"xn--lten-gra":[],"malvik":[],"masoy":[],"xn--msy-ula0h":[],"muosat":[],"xn--muost-0qa":[],"mandal":[],"marker":[],"marnardal":[],"masfjorden":[],"meland":[],"meldal":[],"melhus":[],"meloy":[],"xn--mely-ira":[],"meraker":[],"xn--merker-kua":[],"moareke":[],"xn--moreke-jua":[],"midsund":[],"midtre-gauldal":[],"modalen":[],"modum":[],"molde":[],"moskenes":[],"moss":[],"mosvik":[],"malselv":[],"xn--mlselv-iua":[],"malatvuopmi":[],"xn--mlatvuopmi-s4a":[],"namdalseid":[],"aejrie":[],"namsos":[],"namsskogan":[],"naamesjevuemie":[],"xn--nmesjevuemie-tcba":[],"laakesvuemie":[],"nannestad":[],"narvik":[],"narviika":[],"naustdal":[],"nedre-eiker":[],"akershus":{"nes":[]},"buskerud":{"nes":[]},"nesna":[],"nesodden":[],"nesseby":[],"unjarga":[],"xn--unjrga-rta":[],"nesset":[],"nissedal":[],"nittedal":[],"nord-aurdal":[],"nord-fron":[],"nord-odal":[],"norddal":[],"nordkapp":[],"davvenjarga":[],"xn--davvenjrga-y4a":[],"nordre-land":[],"nordreisa":[],"raisa":[],"xn--risa-5na":[],"nore-og-uvdal":[],"notodden":[],"naroy":[],"xn--nry-yla5g":[],"notteroy":[],"xn--nttery-byae":[],"odda":[],"oksnes":[],"xn--ksnes-uua":[],"oppdal":[],"oppegard":[],"xn--oppegrd-ixa":[],"orkdal":[],"orland":[],"xn--rland-uua":[],"orskog":[],"xn--rskog-uua":[],"orsta":[],"xn--rsta-fra":[],"hedmark":{"os":[],"valer":[],"xn--vler-qoa":[]},"hordaland":{"os":[]},"osen":[],"osteroy":[],"xn--ostery-fya":[],"ostre-toten":[],"xn--stre-toten-zcb":[],"overhalla":[],"ovre-eiker":[],"xn--vre-eiker-k8a":[],"oyer":[],"xn--yer-zna":[],"oygarden":[],"xn--ygarden-p1a":[],"oystre-slidre":[],"xn--ystre-slidre-ujb":[],"porsanger":[],"porsangu":[],"xn--porsgu-sta26f":[],"porsgrunn":[],"radoy":[],"xn--rady-ira":[],"rakkestad":[],"rana":[],"ruovat":[],"randaberg":[],"rauma":[],"rendalen":[],"rennebu":[],"rennesoy":[],"xn--rennesy-v1a":[],"rindal":[],"ringebu":[],"ringerike":[],"ringsaker":[],"rissa":[],"risor":[],"xn--risr-ira":[],"roan":[],"rollag":[],"rygge":[],"ralingen":[],"xn--rlingen-mxa":[],"rodoy":[],"xn--rdy-0nab":[],"romskog":[],"xn--rmskog-bya":[],"roros":[],"xn--rros-gra":[],"rost":[],"xn--rst-0na":[],"royken":[],"xn--ryken-vua":[],"royrvik":[],"xn--ryrvik-bya":[],"rade":[],"xn--rde-ula":[],"salangen":[],"siellak":[],"saltdal":[],"salat":[],"xn--slt-elab":[],"xn--slat-5na":[],"samnanger":[],"vestfold":{"sande":[]},"sandefjord":[],"sandnes":[],"sandoy":[],"xn--sandy-yua":[],"sarpsborg":[],"sauda":[],"sauherad":[],"sel":[],"selbu":[],"selje":[],"seljord":[],"sigdal":[],"siljan":[],"sirdal":[],"skaun":[],"skedsmo":[],"ski":[],"skien":[],"skiptvet":[],"skjervoy":[],"xn--skjervy-v1a":[],"skierva":[],"xn--skierv-uta":[],"skjak":[],"xn--skjk-soa":[],"skodje":[],"skanland":[],"xn--sknland-fxa":[],"skanit":[],"xn--sknit-yqa":[],"smola":[],"xn--smla-hra":[],"snillfjord":[],"snasa":[],"xn--snsa-roa":[],"snoasa":[],"snaase":[],"xn--snase-nra":[],"sogndal":[],"sokndal":[],"sola":[],"solund":[],"songdalen":[],"sortland":[],"spydeberg":[],"stange":[],"stavanger":[],"steigen":[],"steinkjer":[],"stjordal":[],"xn--stjrdal-s1a":[],"stokke":[],"stor-elvdal":[],"stord":[],"stordal":[],"storfjord":[],"omasvuotna":[],"strand":[],"stranda":[],"stryn":[],"sula":[],"suldal":[],"sund":[],"sunndal":[],"surnadal":[],"sveio":[],"svelvik":[],"sykkylven":[],"sogne":[],"xn--sgne-gra":[],"somna":[],"xn--smna-gra":[],"sondre-land":[],"xn--sndre-land-0cb":[],"sor-aurdal":[],"xn--sr-aurdal-l8a":[],"sor-fron":[],"xn--sr-fron-q1a":[],"sor-odal":[],"xn--sr-odal-q1a":[],"sor-varanger":[],"xn--sr-varanger-ggb":[],"matta-varjjat":[],"xn--mtta-vrjjat-k7af":[],"sorfold":[],"xn--srfold-bya":[],"sorreisa":[],"xn--srreisa-q1a":[],"sorum":[],"xn--srum-gra":[],"tana":[],"deatnu":[],"time":[],"tingvoll":[],"tinn":[],"tjeldsund":[],"dielddanuorri":[],"tjome":[],"xn--tjme-hra":[],"tokke":[],"tolga":[],"torsken":[],"tranoy":[],"xn--trany-yua":[],"tromso":[],"xn--troms-zua":[],"tromsa":[],"romsa":[],"trondheim":[],"troandin":[],"trysil":[],"trana":[],"xn--trna-woa":[],"trogstad":[],"xn--trgstad-r1a":[],"tvedestrand":[],"tydal":[],"tynset":[],"tysfjord":[],"divtasvuodna":[],"divttasvuotna":[],"tysnes":[],"tysvar":[],"xn--tysvr-vra":[],"tonsberg":[],"xn--tnsberg-q1a":[],"ullensaker":[],"ullensvang":[],"ulvik":[],"utsira":[],"vadso":[],"xn--vads-jra":[],"cahcesuolo":[],"xn--hcesuolo-7ya35b":[],"vaksdal":[],"valle":[],"vang":[],"vanylven":[],"vardo":[],"xn--vard-jra":[],"varggat":[],"xn--vrggt-xqad":[],"vefsn":[],"vaapste":[],"vega":[],"vegarshei":[],"xn--vegrshei-c0a":[],"vennesla":[],"verdal":[],"verran":[],"vestby":[],"vestnes":[],"vestre-slidre":[],"vestre-toten":[],"vestvagoy":[],"xn--vestvgy-ixa6o":[],"vevelstad":[],"vik":[],"vikna":[],"vindafjord":[],"volda":[],"voss":[],"varoy":[],"xn--vry-yla5g":[],"vagan":[],"xn--vgan-qoa":[],"voagat":[],"vagsoy":[],"xn--vgsy-qoa0j":[],"vaga":[],"xn--vg-yiab":[],"ostfold":{"valer":[]},"xn--stfold-9xa":{"xn--vler-qoa":[]}},"np":{"*":[]},"nr":{"biz":[],"info":[],"gov":[],"edu":[],"org":[],"net":[],"com":[]},"nu":[],"nz":{"ac":[],"co":[],"cri":[],"geek":[],"gen":[],"govt":[],"health":[],"iwi":[],"kiwi":[],"maori":[],"mil":[],"xn--mori-qsa":[],"net":[],"org":[],"parliament":[],"school":[]},"om":{"co":[],"com":[],"edu":[],"gov":[],"med":[],"museum":[],"net":[],"org":[],"pro":[]},"onion":[],"org":[],"pa":{"ac":[],"gob":[],"com":[],"org":[],"sld":[],"edu":[],"net":[],"ing":[],"abo":[],"med":[],"nom":[]},"pe":{"edu":[],"gob":[],"nom":[],"mil":[],"org":[],"com":[],"net":[]},"pf":{"com":[],"org":[],"edu":[]},"pg":{"*":[]},"ph":{"com":[],"net":[],"org":[],"gov":[],"edu":[],"ngo":[],"mil":[],"i":[]},"pk":{"com":[],"net":[],"edu":[],"org":[],"fam":[],"biz":[],"web":[],"gov":[],"gob":[],"gok":[],"gon":[],"gop":[],"gos":[],"info":[]},"pl":{"com":[],"net":[],"org":[],"aid":[],"agro":[],"atm":[],"auto":[],"biz":[],"edu":[],"gmina":[],"gsm":[],"info":[],"mail":[],"miasta":[],"media":[],"mil":[],"nieruchomosci":[],"nom":[],"pc":[],"powiat":[],"priv":[],"realestate":[],"rel":[],"sex":[],"shop":[],"sklep":[],"sos":[],"szkola":[],"targi":[],"tm":[],"tourism":[],"travel":[],"turystyka":[],"gov":{"ap":[],"ic":[],"is":[],"us":[],"kmpsp":[],"kppsp":[],"kwpsp":[],"psp":[],"wskr":[],"kwp":[],"mw":[],"ug":[],"um":[],"umig":[],"ugim":[],"upow":[],"uw":[],"starostwo":[],"pa":[],"po":[],"psse":[],"pup":[],"rzgw":[],"sa":[],"so":[],"sr":[],"wsa":[],"sko":[],"uzs":[],"wiih":[],"winb":[],"pinb":[],"wios":[],"witd":[],"wzmiuw":[],"piw":[],"wiw":[],"griw":[],"wif":[],"oum":[],"sdn":[],"zp":[],"uppo":[],"mup":[],"wuoz":[],"konsulat":[],"oirm":[]},"augustow":[],"babia-gora":[],"bedzin":[],"beskidy":[],"bialowieza":[],"bialystok":[],"bielawa":[],"bieszczady":[],"boleslawiec":[],"bydgoszcz":[],"bytom":[],"cieszyn":[],"czeladz":[],"czest":[],"dlugoleka":[],"elblag":[],"elk":[],"glogow":[],"gniezno":[],"gorlice":[],"grajewo":[],"ilawa":[],"jaworzno":[],"jelenia-gora":[],"jgora":[],"kalisz":[],"kazimierz-dolny":[],"karpacz":[],"kartuzy":[],"kaszuby":[],"katowice":[],"kepno":[],"ketrzyn":[],"klodzko":[],"kobierzyce":[],"kolobrzeg":[],"konin":[],"konskowola":[],"kutno":[],"lapy":[],"lebork":[],"legnica":[],"lezajsk":[],"limanowa":[],"lomza":[],"lowicz":[],"lubin":[],"lukow":[],"malbork":[],"malopolska":[],"mazowsze":[],"mazury":[],"mielec":[],"mielno":[],"mragowo":[],"naklo":[],"nowaruda":[],"nysa":[],"olawa":[],"olecko":[],"olkusz":[],"olsztyn":[],"opoczno":[],"opole":[],"ostroda":[],"ostroleka":[],"ostrowiec":[],"ostrowwlkp":[],"pila":[],"pisz":[],"podhale":[],"podlasie":[],"polkowice":[],"pomorze":[],"pomorskie":[],"prochowice":[],"pruszkow":[],"przeworsk":[],"pulawy":[],"radom":[],"rawa-maz":[],"rybnik":[],"rzeszow":[],"sanok":[],"sejny":[],"slask":[],"slupsk":[],"sosnowiec":[],"stalowa-wola":[],"skoczow":[],"starachowice":[],"stargard":[],"suwalki":[],"swidnica":[],"swiebodzin":[],"swinoujscie":[],"szczecin":[],"szczytno":[],"tarnobrzeg":[],"tgory":[],"turek":[],"tychy":[],"ustka":[],"walbrzych":[],"warmia":[],"warszawa":[],"waw":[],"wegrow":[],"wielun":[],"wlocl":[],"wloclawek":[],"wodzislaw":[],"wolomin":[],"wroclaw":[],"zachpomor":[],"zagan":[],"zarow":[],"zgora":[],"zgorzelec":[]},"pm":[],"pn":{"gov":[],"co":[],"org":[],"edu":[],"net":[]},"post":[],"pr":{"com":[],"net":[],"org":[],"gov":[],"edu":[],"isla":[],"pro":[],"biz":[],"info":[],"name":[],"est":[],"prof":[],"ac":[]},"pro":{"aaa":[],"aca":[],"acct":[],"avocat":[],"bar":[],"cpa":[],"eng":[],"jur":[],"law":[],"med":[],"recht":[]},"ps":{"edu":[],"gov":[],"sec":[],"plo":[],"com":[],"org":[],"net":[]},"pt":{"net":[],"gov":[],"org":[],"edu":[],"int":[],"publ":[],"com":[],"nome":[]},"pw":{"co":[],"ne":[],"or":[],"ed":[],"go":[],"belau":[]},"py":{"com":[],"coop":[],"edu":[],"gov":[],"mil":[],"net":[],"org":[]},"qa":{"com":[],"edu":[],"gov":[],"mil":[],"name":[],"net":[],"org":[],"sch":[]},"re":{"asso":[],"com":[],"nom":[]},"ro":{"arts":[],"com":[],"firm":[],"info":[],"nom":[],"nt":[],"org":[],"rec":[],"store":[],"tm":[],"www":[]},"rs":{"ac":[],"co":[],"edu":[],"gov":[],"in":[],"org":[]},"ru":{"ac":[],"edu":[],"gov":[],"int":[],"mil":[],"test":[]},"rw":{"gov":[],"net":[],"edu":[],"ac":[],"com":[],"co":[],"int":[],"mil":[],"gouv":[]},"sa":{"com":[],"net":[],"org":[],"gov":[],"med":[],"pub":[],"edu":[],"sch":[]},"sb":{"com":[],"edu":[],"gov":[],"net":[],"org":[]},"sc":{"com":[],"gov":[],"net":[],"org":[],"edu":[]},"sd":{"com":[],"net":[],"org":[],"edu":[],"med":[],"tv":[],"gov":[],"info":[]},"se":{"a":[],"ac":[],"b":[],"bd":[],"brand":[],"c":[],"d":[],"e":[],"f":[],"fh":[],"fhsk":[],"fhv":[],"g":[],"h":[],"i":[],"k":[],"komforb":[],"kommunalforbund":[],"komvux":[],"l":[],"lanbib":[],"m":[],"n":[],"naturbruksgymn":[],"o":[],"org":[],"p":[],"parti":[],"pp":[],"press":[],"r":[],"s":[],"t":[],"tm":[],"u":[],"w":[],"x":[],"y":[],"z":[]},"sg":{"com":[],"net":[],"org":[],"gov":[],"edu":[],"per":[]},"sh":{"com":[],"net":[],"gov":[],"org":[],"mil":[]},"si":[],"sj":[],"sk":[],"sl":{"com":[],"net":[],"edu":[],"gov":[],"org":[]},"sm":[],"sn":{"art":[],"com":[],"edu":[],"gouv":[],"org":[],"perso":[],"univ":[]},"so":{"com":[],"net":[],"org":[]},"sr":[],"st":{"co":[],"com":[],"consulado":[],"edu":[],"embaixada":[],"gov":[],"mil":[],"net":[],"org":[],"principe":[],"saotome":[],"store":[]},"su":[],"sv":{"com":[],"edu":[],"gob":[],"org":[],"red":[]},"sx":{"gov":[]},"sy":{"edu":[],"gov":[],"net":[],"mil":[],"com":[],"org":[]},"sz":{"co":[],"ac":[],"org":[]},"tc":[],"td":[],"tel":[],"tf":[],"tg":[],"th":{"ac":[],"co":[],"go":[],"in":[],"mi":[],"net":[],"or":[]},"tj":{"ac":[],"biz":[],"co":[],"com":[],"edu":[],"go":[],"gov":[],"int":[],"mil":[],"name":[],"net":[],"nic":[],"org":[],"test":[],"web":[]},"tk":[],"tl":{"gov":[]},"tm":{"com":[],"co":[],"org":[],"net":[],"nom":[],"gov":[],"mil":[],"edu":[]},"tn":{"com":[],"ens":[],"fin":[],"gov":[],"ind":[],"intl":[],"nat":[],"net":[],"org":[],"info":[],"perso":[],"tourism":[],"edunet":[],"rnrt":[],"rns":[],"rnu":[],"mincom":[],"agrinet":[],"defense":[],"turen":[]},"to":{"com":[],"gov":[],"net":[],"org":[],"edu":[],"mil":[]},"tr":{"com":[],"info":[],"biz":[],"net":[],"org":[],"web":[],"gen":[],"tv":[],"av":[],"dr":[],"bbs":[],"name":[],"tel":[],"gov":[],"bel":[],"pol":[],"mil":[],"k12":[],"edu":[],"kep":[],"nc":{"gov":[]}},"travel":[],"tt":{"co":[],"com":[],"org":[],"net":[],"biz":[],"info":[],"pro":[],"int":[],"coop":[],"jobs":[],"mobi":[],"travel":[],"museum":[],"aero":[],"name":[],"gov":[],"edu":[]},"tv":[],"tw":{"edu":[],"gov":[],"mil":[],"com":[],"net":[],"org":[],"idv":[],"game":[],"ebiz":[],"club":[],"xn--zf0ao64a":[],"xn--uc0atv":[],"xn--czrw28b":[]},"tz":{"ac":[],"co":[],"go":[],"hotel":[],"info":[],"me":[],"mil":[],"mobi":[],"ne":[],"or":[],"sc":[],"tv":[]},"ua":{"com":[],"edu":[],"gov":[],"in":[],"net":[],"org":[],"cherkassy":[],"cherkasy":[],"chernigov":[],"chernihiv":[],"chernivtsi":[],"chernovtsy":[],"ck":[],"cn":[],"cr":[],"crimea":[],"cv":[],"dn":[],"dnepropetrovsk":[],"dnipropetrovsk":[],"dominic":[],"donetsk":[],"dp":[],"if":[],"ivano-frankivsk":[],"kh":[],"kharkiv":[],"kharkov":[],"kherson":[],"khmelnitskiy":[],"khmelnytskyi":[],"kiev":[],"kirovograd":[],"km":[],"kr":[],"krym":[],"ks":[],"kv":[],"kyiv":[],"lg":[],"lt":[],"lugansk":[],"lutsk":[],"lv":[],"lviv":[],"mk":[],"mykolaiv":[],"nikolaev":[],"od":[],"odesa":[],"odessa":[],"pl":[],"poltava":[],"rivne":[],"rovno":[],"rv":[],"sb":[],"sebastopol":[],"sevastopol":[],"sm":[],"sumy":[],"te":[],"ternopil":[],"uz":[],"uzhgorod":[],"vinnica":[],"vinnytsia":[],"vn":[],"volyn":[],"yalta":[],"zaporizhzhe":[],"zaporizhzhia":[],"zhitomir":[],"zhytomyr":[],"zp":[],"zt":[]},"ug":{"co":[],"or":[],"ac":[],"sc":[],"go":[],"ne":[],"com":[],"org":[]},"uk":{"ac":[],"co":[],"gov":[],"ltd":[],"me":[],"net":[],"nhs":[],"org":[],"plc":[],"police":[],"sch":{"*":[]}},"us":{"dni":[],"fed":[],"isa":[],"kids":[],"nsn":[],"ak":{"k12":[],"cc":[],"lib":[]},"al":{"k12":[],"cc":[],"lib":[]},"ar":{"k12":[],"cc":[],"lib":[]},"as":{"k12":[],"cc":[],"lib":[]},"az":{"k12":[],"cc":[],"lib":[]},"ca":{"k12":[],"cc":[],"lib":[]},"co":{"k12":[],"cc":[],"lib":[]},"ct":{"k12":[],"cc":[],"lib":[]},"dc":{"k12":[],"cc":[],"lib":[]},"de":{"k12":[],"cc":[]},"fl":{"k12":[],"cc":[],"lib":[]},"ga":{"k12":[],"cc":[],"lib":[]},"gu":{"k12":[],"cc":[],"lib":[]},"hi":{"cc":[],"lib":[]},"ia":{"k12":[],"cc":[],"lib":[]},"id":{"k12":[],"cc":[],"lib":[]},"il":{"k12":[],"cc":[],"lib":[]},"in":{"k12":[],"cc":[],"lib":[]},"ks":{"k12":[],"cc":[],"lib":[]},"ky":{"k12":[],"cc":[],"lib":[]},"la":{"k12":[],"cc":[],"lib":[]},"ma":{"k12":{"pvt":[],"chtr":[],"paroch":[]},"cc":[],"lib":[]},"md":{"k12":[],"cc":[],"lib":[]},"me":{"k12":[],"cc":[],"lib":[]},"mi":{"k12":[],"cc":[],"lib":[],"ann-arbor":[],"cog":[],"dst":[],"eaton":[],"gen":[],"mus":[],"tec":[],"washtenaw":[]},"mn":{"k12":[],"cc":[],"lib":[]},"mo":{"k12":[],"cc":[],"lib":[]},"ms":{"k12":[],"cc":[],"lib":[]},"mt":{"k12":[],"cc":[],"lib":[]},"nc":{"k12":[],"cc":[],"lib":[]},"nd":{"cc":[],"lib":[]},"ne":{"k12":[],"cc":[],"lib":[]},"nh":{"k12":[],"cc":[],"lib":[]},"nj":{"k12":[],"cc":[],"lib":[]},"nm":{"k12":[],"cc":[],"lib":[]},"nv":{"k12":[],"cc":[],"lib":[]},"ny":{"k12":[],"cc":[],"lib":[]},"oh":{"k12":[],"cc":[],"lib":[]},"ok":{"k12":[],"cc":[],"lib":[]},"or":{"k12":[],"cc":[],"lib":[]},"pa":{"k12":[],"cc":[],"lib":[]},"pr":{"k12":[],"cc":[],"lib":[]},"ri":{"k12":[],"cc":[],"lib":[]},"sc":{"k12":[],"cc":[],"lib":[]},"sd":{"cc":[],"lib":[]},"tn":{"k12":[],"cc":[],"lib":[]},"tx":{"k12":[],"cc":[],"lib":[]},"ut":{"k12":[],"cc":[],"lib":[]},"vi":{"k12":[],"cc":[],"lib":[]},"vt":{"k12":[],"cc":[],"lib":[]},"va":{"k12":[],"cc":[],"lib":[]},"wa":{"k12":[],"cc":[],"lib":[]},"wi":{"k12":[],"cc":[],"lib":[]},"wv":{"cc":[]},"wy":{"k12":[],"cc":[],"lib":[]}},"uy":{"com":[],"edu":[],"gub":[],"mil":[],"net":[],"org":[]},"uz":{"co":[],"com":[],"net":[],"org":[]},"va":[],"vc":{"com":[],"net":[],"org":[],"gov":[],"mil":[],"edu":[]},"ve":{"arts":[],"co":[],"com":[],"e12":[],"edu":[],"firm":[],"gob":[],"gov":[],"info":[],"int":[],"mil":[],"net":[],"org":[],"rec":[],"store":[],"tec":[],"web":[]},"vg":[],"vi":{"co":[],"com":[],"k12":[],"net":[],"org":[]},"vn":{"com":[],"net":[],"org":[],"edu":[],"gov":[],"int":[],"ac":[],"biz":[],"info":[],"name":[],"pro":[],"health":[]},"vu":{"com":[],"edu":[],"net":[],"org":[]},"wf":[],"ws":{"com":[],"net":[],"org":[],"gov":[],"edu":[]},"yt":[],"xn--mgbaam7a8h":[],"xn--y9a3aq":[],"xn--54b7fta0cc":[],"xn--90ae":[],"xn--90ais":[],"xn--fiqs8s":[],"xn--fiqz9s":[],"xn--lgbbat1ad8j":[],"xn--wgbh1c":[],"xn--e1a4c":[],"xn--node":[],"xn--qxam":[],"xn--j6w193g":[],"xn--2scrj9c":[],"xn--3hcrj9c":[],"xn--45br5cyl":[],"xn--h2breg3eve":[],"xn--h2brj9c8c":[],"xn--mgbgu82a":[],"xn--rvc1e0am3e":[],"xn--h2brj9c":[],"xn--mgbbh1a71e":[],"xn--fpcrj9c3d":[],"xn--gecrj9c":[],"xn--s9brj9c":[],"xn--45brj9c":[],"xn--xkc2dl3a5ee0h":[],"xn--mgba3a4f16a":[],"xn--mgba3a4fra":[],"xn--mgbtx2b":[],"xn--mgbayh7gpa":[],"xn--3e0b707e":[],"xn--80ao21a":[],"xn--fzc2c9e2c":[],"xn--xkc2al3hye2a":[],"xn--mgbc0a9azcg":[],"xn--d1alf":[],"xn--l1acc":[],"xn--mix891f":[],"xn--mix082f":[],"xn--mgbx4cd0ab":[],"xn--mgb9awbf":[],"xn--mgbai9azgqp6j":[],"xn--mgbai9a5eva00b":[],"xn--ygbi2ammx":[],"xn--90a3ac":{"xn--o1ac":[],"xn--c1avg":[],"xn--90azh":[],"xn--d1at":[],"xn--o1ach":[],"xn--80au":[]},"xn--p1ai":[],"xn--wgbl6a":[],"xn--mgberp4a5d4ar":[],"xn--mgberp4a5d4a87g":[],"xn--mgbqly7c0a67fbc":[],"xn--mgbqly7cvafr":[],"xn--mgbpl2fh":[],"xn--yfro4i67o":[],"xn--clchc0ea0b2g2a9gcd":[],"xn--ogbpf8fl":[],"xn--mgbtf8fl":[],"xn--o3cw4h":{"xn--12c1fe0br":[],"xn--12co0c3b4eva":[],"xn--h3cuzk1di":[],"xn--o3cyx2a":[],"xn--m3ch0j3a":[],"xn--12cfi8ixb8l":[]},"xn--pgbs0dh":[],"xn--kpry57d":[],"xn--kprw13d":[],"xn--nnx388a":[],"xn--j1amh":[],"xn--mgb2ddes":[],"xxx":[],"ye":{"*":[]},"za":{"ac":[],"agric":[],"alt":[],"co":[],"edu":[],"gov":[],"grondar":[],"law":[],"mil":[],"net":[],"ngo":[],"nis":[],"nom":[],"org":[],"school":[],"tm":[],"web":[]},"zm":{"ac":[],"biz":[],"co":[],"com":[],"edu":[],"gov":[],"info":[],"mil":[],"net":[],"org":[],"sch":[]},"zw":{"ac":[],"co":[],"gov":[],"mil":[],"org":[]},"aaa":[],"aarp":[],"abarth":[],"abb":[],"abbott":[],"abbvie":[],"abc":[],"able":[],"abogado":[],"abudhabi":[],"academy":[],"accenture":[],"accountant":[],"accountants":[],"aco":[],"active":[],"actor":[],"adac":[],"ads":[],"adult":[],"aeg":[],"aetna":[],"afamilycompany":[],"afl":[],"africa":[],"agakhan":[],"agency":[],"aig":[],"aigo":[],"airbus":[],"airforce":[],"airtel":[],"akdn":[],"alfaromeo":[],"alibaba":[],"alipay":[],"allfinanz":[],"allstate":[],"ally":[],"alsace":[],"alstom":[],"americanexpress":[],"americanfamily":[],"amex":[],"amfam":[],"amica":[],"amsterdam":[],"analytics":[],"android":[],"anquan":[],"anz":[],"aol":[],"apartments":[],"app":[],"apple":[],"aquarelle":[],"arab":[],"aramco":[],"archi":[],"army":[],"art":[],"arte":[],"asda":[],"associates":[],"athleta":[],"attorney":[],"auction":[],"audi":[],"audible":[],"audio":[],"auspost":[],"author":[],"auto":[],"autos":[],"avianca":[],"aws":[],"axa":[],"azure":[],"baby":[],"baidu":[],"banamex":[],"bananarepublic":[],"band":[],"bank":[],"bar":[],"barcelona":[],"barclaycard":[],"barclays":[],"barefoot":[],"bargains":[],"baseball":[],"basketball":[],"bauhaus":[],"bayern":[],"bbc":[],"bbt":[],"bbva":[],"bcg":[],"bcn":[],"beats":[],"beauty":[],"beer":[],"bentley":[],"berlin":[],"best":[],"bestbuy":[],"bet":[],"bharti":[],"bible":[],"bid":[],"bike":[],"bing":[],"bingo":[],"bio":[],"black":[],"blackfriday":[],"blanco":[],"blockbuster":[],"blog":[],"bloomberg":[],"blue":[],"bms":[],"bmw":[],"bnl":[],"bnpparibas":[],"boats":[],"boehringer":[],"bofa":[],"bom":[],"bond":[],"boo":[],"book":[],"booking":[],"boots":[],"bosch":[],"bostik":[],"boston":[],"bot":[],"boutique":[],"box":[],"bradesco":[],"bridgestone":[],"broadway":[],"broker":[],"brother":[],"brussels":[],"budapest":[],"bugatti":[],"build":[],"builders":[],"business":[],"buy":[],"buzz":[],"bzh":[],"cab":[],"cafe":[],"cal":[],"call":[],"calvinklein":[],"cam":[],"camera":[],"camp":[],"cancerresearch":[],"canon":[],"capetown":[],"capital":[],"capitalone":[],"car":[],"caravan":[],"cards":[],"care":[],"career":[],"careers":[],"cars":[],"cartier":[],"casa":[],"case":[],"caseih":[],"cash":[],"casino":[],"catering":[],"catholic":[],"cba":[],"cbn":[],"cbre":[],"cbs":[],"ceb":[],"center":[],"ceo":[],"cern":[],"cfa":[],"cfd":[],"chanel":[],"channel":[],"chase":[],"chat":[],"cheap":[],"chintai":[],"christmas":[],"chrome":[],"chrysler":[],"church":[],"cipriani":[],"circle":[],"cisco":[],"citadel":[],"citi":[],"citic":[],"city":[],"cityeats":[],"claims":[],"cleaning":[],"click":[],"clinic":[],"clinique":[],"clothing":[],"cloud":[],"club":[],"clubmed":[],"coach":[],"codes":[],"coffee":[],"college":[],"cologne":[],"comcast":[],"commbank":[],"community":[],"company":[],"compare":[],"computer":[],"comsec":[],"condos":[],"construction":[],"consulting":[],"contact":[],"contractors":[],"cooking":[],"cookingchannel":[],"cool":[],"corsica":[],"country":[],"coupon":[],"coupons":[],"courses":[],"credit":[],"creditcard":[],"creditunion":[],"cricket":[],"crown":[],"crs":[],"cruise":[],"cruises":[],"csc":[],"cuisinella":[],"cymru":[],"cyou":[],"dabur":[],"dad":[],"dance":[],"data":[],"date":[],"dating":[],"datsun":[],"day":[],"dclk":[],"dds":[],"deal":[],"dealer":[],"deals":[],"degree":[],"delivery":[],"dell":[],"deloitte":[],"delta":[],"democrat":[],"dental":[],"dentist":[],"desi":[],"design":[],"dev":[],"dhl":[],"diamonds":[],"diet":[],"digital":[],"direct":[],"directory":[],"discount":[],"discover":[],"dish":[],"diy":[],"dnp":[],"docs":[],"doctor":[],"dodge":[],"dog":[],"doha":[],"domains":[],"dot":[],"download":[],"drive":[],"dtv":[],"dubai":[],"duck":[],"dunlop":[],"duns":[],"dupont":[],"durban":[],"dvag":[],"dvr":[],"earth":[],"eat":[],"eco":[],"edeka":[],"education":[],"email":[],"emerck":[],"energy":[],"engineer":[],"engineering":[],"enterprises":[],"epost":[],"epson":[],"equipment":[],"ericsson":[],"erni":[],"esq":[],"estate":[],"esurance":[],"etisalat":[],"eurovision":[],"eus":[],"events":[],"everbank":[],"exchange":[],"expert":[],"exposed":[],"express":[],"extraspace":[],"fage":[],"fail":[],"fairwinds":[],"faith":[],"family":[],"fan":[],"fans":[],"farm":[],"farmers":[],"fashion":[],"fast":[],"fedex":[],"feedback":[],"ferrari":[],"ferrero":[],"fiat":[],"fidelity":[],"fido":[],"film":[],"final":[],"finance":[],"financial":[],"fire":[],"firestone":[],"firmdale":[],"fish":[],"fishing":[],"fit":[],"fitness":[],"flickr":[],"flights":[],"flir":[],"florist":[],"flowers":[],"fly":[],"foo":[],"food":[],"foodnetwork":[],"football":[],"ford":[],"forex":[],"forsale":[],"forum":[],"foundation":[],"fox":[],"free":[],"fresenius":[],"frl":[],"frogans":[],"frontdoor":[],"frontier":[],"ftr":[],"fujitsu":[],"fujixerox":[],"fun":[],"fund":[],"furniture":[],"futbol":[],"fyi":[],"gal":[],"gallery":[],"gallo":[],"gallup":[],"game":[],"games":[],"gap":[],"garden":[],"gbiz":[],"gdn":[],"gea":[],"gent":[],"genting":[],"george":[],"ggee":[],"gift":[],"gifts":[],"gives":[],"giving":[],"glade":[],"glass":[],"gle":[],"global":[],"globo":[],"gmail":[],"gmbh":[],"gmo":[],"gmx":[],"godaddy":[],"gold":[],"goldpoint":[],"golf":[],"goo":[],"goodhands":[],"goodyear":[],"goog":[],"google":[],"gop":[],"got":[],"grainger":[],"graphics":[],"gratis":[],"green":[],"gripe":[],"grocery":[],"group":[],"guardian":[],"gucci":[],"guge":[],"guide":[],"guitars":[],"guru":[],"hair":[],"hamburg":[],"hangout":[],"haus":[],"hbo":[],"hdfc":[],"hdfcbank":[],"health":[],"healthcare":[],"help":[],"helsinki":[],"here":[],"hermes":[],"hgtv":[],"hiphop":[],"hisamitsu":[],"hitachi":[],"hiv":[],"hkt":[],"hockey":[],"holdings":[],"holiday":[],"homedepot":[],"homegoods":[],"homes":[],"homesense":[],"honda":[],"honeywell":[],"horse":[],"hospital":[],"host":[],"hosting":[],"hot":[],"hoteles":[],"hotels":[],"hotmail":[],"house":[],"how":[],"hsbc":[],"hughes":[],"hyatt":[],"hyundai":[],"ibm":[],"icbc":[],"ice":[],"icu":[],"ieee":[],"ifm":[],"ikano":[],"imamat":[],"imdb":[],"immo":[],"immobilien":[],"industries":[],"infiniti":[],"ing":[],"ink":[],"institute":[],"insurance":[],"insure":[],"intel":[],"international":[],"intuit":[],"investments":[],"ipiranga":[],"irish":[],"iselect":[],"ismaili":[],"ist":[],"istanbul":[],"itau":[],"itv":[],"iveco":[],"iwc":[],"jaguar":[],"java":[],"jcb":[],"jcp":[],"jeep":[],"jetzt":[],"jewelry":[],"jio":[],"jlc":[],"jll":[],"jmp":[],"jnj":[],"joburg":[],"jot":[],"joy":[],"jpmorgan":[],"jprs":[],"juegos":[],"juniper":[],"kaufen":[],"kddi":[],"kerryhotels":[],"kerrylogistics":[],"kerryproperties":[],"kfh":[],"kia":[],"kim":[],"kinder":[],"kindle":[],"kitchen":[],"kiwi":[],"koeln":[],"komatsu":[],"kosher":[],"kpmg":[],"kpn":[],"krd":[],"kred":[],"kuokgroup":[],"kyoto":[],"lacaixa":[],"ladbrokes":[],"lamborghini":[],"lamer":[],"lancaster":[],"lancia":[],"lancome":[],"land":[],"landrover":[],"lanxess":[],"lasalle":[],"lat":[],"latino":[],"latrobe":[],"law":[],"lawyer":[],"lds":[],"lease":[],"leclerc":[],"lefrak":[],"legal":[],"lego":[],"lexus":[],"lgbt":[],"liaison":[],"lidl":[],"life":[],"lifeinsurance":[],"lifestyle":[],"lighting":[],"like":[],"lilly":[],"limited":[],"limo":[],"lincoln":[],"linde":[],"link":[],"lipsy":[],"live":[],"living":[],"lixil":[],"loan":[],"loans":[],"locker":[],"locus":[],"loft":[],"lol":[],"london":[],"lotte":[],"lotto":[],"love":[],"lpl":[],"lplfinancial":[],"ltd":[],"ltda":[],"lundbeck":[],"lupin":[],"luxe":[],"luxury":[],"macys":[],"madrid":[],"maif":[],"maison":[],"makeup":[],"man":[],"management":[],"mango":[],"map":[],"market":[],"marketing":[],"markets":[],"marriott":[],"marshalls":[],"maserati":[],"mattel":[],"mba":[],"mckinsey":[],"med":[],"media":[],"meet":[],"melbourne":[],"meme":[],"memorial":[],"men":[],"menu":[],"meo":[],"merckmsd":[],"metlife":[],"miami":[],"microsoft":[],"mini":[],"mint":[],"mit":[],"mitsubishi":[],"mlb":[],"mls":[],"mma":[],"mobile":[],"mobily":[],"moda":[],"moe":[],"moi":[],"mom":[],"monash":[],"money":[],"monster":[],"mopar":[],"mormon":[],"mortgage":[],"moscow":[],"moto":[],"motorcycles":[],"mov":[],"movie":[],"movistar":[],"msd":[],"mtn":[],"mtpc":[],"mtr":[],"mutual":[],"nab":[],"nadex":[],"nagoya":[],"nationwide":[],"natura":[],"navy":[],"nba":[],"nec":[],"netbank":[],"netflix":[],"network":[],"neustar":[],"new":[],"newholland":[],"news":[],"next":[],"nextdirect":[],"nexus":[],"nfl":[],"ngo":[],"nhk":[],"nico":[],"nike":[],"nikon":[],"ninja":[],"nissan":[],"nissay":[],"nokia":[],"northwesternmutual":[],"norton":[],"now":[],"nowruz":[],"nowtv":[],"nra":[],"nrw":[],"ntt":[],"nyc":[],"obi":[],"observer":[],"off":[],"office":[],"okinawa":[],"olayan":[],"olayangroup":[],"oldnavy":[],"ollo":[],"omega":[],"one":[],"ong":[],"onl":[],"online":[],"onyourside":[],"ooo":[],"open":[],"oracle":[],"orange":[],"organic":[],"origins":[],"osaka":[],"otsuka":[],"ott":[],"ovh":[],"page":[],"panasonic":[],"panerai":[],"paris":[],"pars":[],"partners":[],"parts":[],"party":[],"passagens":[],"pay":[],"pccw":[],"pet":[],"pfizer":[],"pharmacy":[],"phd":[],"philips":[],"phone":[],"photo":[],"photography":[],"photos":[],"physio":[],"piaget":[],"pics":[],"pictet":[],"pictures":[],"pid":[],"pin":[],"ping":[],"pink":[],"pioneer":[],"pizza":[],"place":[],"play":[],"playstation":[],"plumbing":[],"plus":[],"pnc":[],"pohl":[],"poker":[],"politie":[],"porn":[],"pramerica":[],"praxi":[],"press":[],"prime":[],"prod":[],"productions":[],"prof":[],"progressive":[],"promo":[],"properties":[],"property":[],"protection":[],"pru":[],"prudential":[],"pub":[],"pwc":[],"qpon":[],"quebec":[],"quest":[],"qvc":[],"racing":[],"radio":[],"raid":[],"read":[],"realestate":[],"realtor":[],"realty":[],"recipes":[],"red":[],"redstone":[],"redumbrella":[],"rehab":[],"reise":[],"reisen":[],"reit":[],"reliance":[],"ren":[],"rent":[],"rentals":[],"repair":[],"report":[],"republican":[],"rest":[],"restaurant":[],"review":[],"reviews":[],"rexroth":[],"rich":[],"richardli":[],"ricoh":[],"rightathome":[],"ril":[],"rio":[],"rip":[],"rmit":[],"rocher":[],"rocks":[],"rodeo":[],"rogers":[],"room":[],"rsvp":[],"rugby":[],"ruhr":[],"run":[],"rwe":[],"ryukyu":[],"saarland":[],"safe":[],"safety":[],"sakura":[],"sale":[],"salon":[],"samsclub":[],"samsung":[],"sandvik":[],"sandvikcoromant":[],"sanofi":[],"sap":[],"sapo":[],"sarl":[],"sas":[],"save":[],"saxo":[],"sbi":[],"sbs":[],"sca":[],"scb":[],"schaeffler":[],"schmidt":[],"scholarships":[],"school":[],"schule":[],"schwarz":[],"science":[],"scjohnson":[],"scor":[],"scot":[],"search":[],"seat":[],"secure":[],"security":[],"seek":[],"select":[],"sener":[],"services":[],"ses":[],"seven":[],"sew":[],"sex":[],"sexy":[],"sfr":[],"shangrila":[],"sharp":[],"shaw":[],"shell":[],"shia":[],"shiksha":[],"shoes":[],"shop":[],"shopping":[],"shouji":[],"show":[],"showtime":[],"shriram":[],"silk":[],"sina":[],"singles":[],"site":[],"ski":[],"skin":[],"sky":[],"skype":[],"sling":[],"smart":[],"smile":[],"sncf":[],"soccer":[],"social":[],"softbank":[],"software":[],"sohu":[],"solar":[],"solutions":[],"song":[],"sony":[],"soy":[],"space":[],"spiegel":[],"spot":[],"spreadbetting":[],"srl":[],"srt":[],"stada":[],"staples":[],"star":[],"starhub":[],"statebank":[],"statefarm":[],"statoil":[],"stc":[],"stcgroup":[],"stockholm":[],"storage":[],"store":[],"stream":[],"studio":[],"study":[],"style":[],"sucks":[],"supplies":[],"supply":[],"support":[],"surf":[],"surgery":[],"suzuki":[],"swatch":[],"swiftcover":[],"swiss":[],"sydney":[],"symantec":[],"systems":[],"tab":[],"taipei":[],"talk":[],"taobao":[],"target":[],"tatamotors":[],"tatar":[],"tattoo":[],"tax":[],"taxi":[],"tci":[],"tdk":[],"team":[],"tech":[],"technology":[],"telecity":[],"telefonica":[],"temasek":[],"tennis":[],"teva":[],"thd":[],"theater":[],"theatre":[],"tiaa":[],"tickets":[],"tienda":[],"tiffany":[],"tips":[],"tires":[],"tirol":[],"tjmaxx":[],"tjx":[],"tkmaxx":[],"tmall":[],"today":[],"tokyo":[],"tools":[],"top":[],"toray":[],"toshiba":[],"total":[],"tours":[],"town":[],"toyota":[],"toys":[],"trade":[],"trading":[],"training":[],"travelchannel":[],"travelers":[],"travelersinsurance":[],"trust":[],"trv":[],"tube":[],"tui":[],"tunes":[],"tushu":[],"tvs":[],"ubank":[],"ubs":[],"uconnect":[],"unicom":[],"university":[],"uno":[],"uol":[],"ups":[],"vacations":[],"vana":[],"vanguard":[],"vegas":[],"ventures":[],"verisign":[],"versicherung":[],"vet":[],"viajes":[],"video":[],"vig":[],"viking":[],"villas":[],"vin":[],"vip":[],"virgin":[],"visa":[],"vision":[],"vista":[],"vistaprint":[],"viva":[],"vivo":[],"vlaanderen":[],"vodka":[],"volkswagen":[],"volvo":[],"vote":[],"voting":[],"voto":[],"voyage":[],"vuelos":[],"wales":[],"walmart":[],"walter":[],"wang":[],"wanggou":[],"warman":[],"watch":[],"watches":[],"weather":[],"weatherchannel":[],"webcam":[],"weber":[],"website":[],"wed":[],"wedding":[],"weibo":[],"weir":[],"whoswho":[],"wien":[],"wiki":[],"williamhill":[],"win":[],"windows":[],"wine":[],"winners":[],"wme":[],"wolterskluwer":[],"woodside":[],"work":[],"works":[],"world":[],"wow":[],"wtc":[],"wtf":[],"xbox":[],"xerox":[],"xfinity":[],"xihuan":[],"xin":[],"xn--11b4c3d":[],"xn--1ck2e1b":[],"xn--1qqw23a":[],"xn--30rr7y":[],"xn--3bst00m":[],"xn--3ds443g":[],"xn--3oq18vl8pn36a":[],"xn--3pxu8k":[],"xn--42c2d9a":[],"xn--45q11c":[],"xn--4gbrim":[],"xn--55qw42g":[],"xn--55qx5d":[],"xn--5su34j936bgsg":[],"xn--5tzm5g":[],"xn--6frz82g":[],"xn--6qq986b3xl":[],"xn--80adxhks":[],"xn--80aqecdr1a":[],"xn--80asehdb":[],"xn--80aswg":[],"xn--8y0a063a":[],"xn--9dbq2a":[],"xn--9et52u":[],"xn--9krt00a":[],"xn--b4w605ferd":[],"xn--bck1b9a5dre4c":[],"xn--c1avg":[],"xn--c2br7g":[],"xn--cck2b3b":[],"xn--cg4bki":[],"xn--czr694b":[],"xn--czrs0t":[],"xn--czru2d":[],"xn--d1acj3b":[],"xn--eckvdtc9d":[],"xn--efvy88h":[],"xn--estv75g":[],"xn--fct429k":[],"xn--fhbei":[],"xn--fiq228c5hs":[],"xn--fiq64b":[],"xn--fjq720a":[],"xn--flw351e":[],"xn--fzys8d69uvgm":[],"xn--g2xx48c":[],"xn--gckr3f0f":[],"xn--gk3at1e":[],"xn--hxt814e":[],"xn--i1b6b1a6a2e":[],"xn--imr513n":[],"xn--io0a7i":[],"xn--j1aef":[],"xn--jlq61u9w7b":[],"xn--jvr189m":[],"xn--kcrx77d1x4a":[],"xn--kpu716f":[],"xn--kput3i":[],"xn--mgba3a3ejt":[],"xn--mgba7c0bbn0a":[],"xn--mgbaakc7dvf":[],"xn--mgbab2bd":[],"xn--mgbb9fbpob":[],"xn--mgbca7dzdo":[],"xn--mgbi4ecexp":[],"xn--mgbt3dhd":[],"xn--mk1bu44c":[],"xn--mxtq1m":[],"xn--ngbc5azd":[],"xn--ngbe9e0a":[],"xn--ngbrx":[],"xn--nqv7f":[],"xn--nqv7fs00ema":[],"xn--nyqy26a":[],"xn--p1acf":[],"xn--pbt977c":[],"xn--pssy2u":[],"xn--q9jyb4c":[],"xn--qcka1pmc":[],"xn--rhqv96g":[],"xn--rovu88b":[],"xn--ses554g":[],"xn--t60b56a":[],"xn--tckwe":[],"xn--tiq49xqyj":[],"xn--unup4y":[],"xn--vermgensberater-ctb":[],"xn--vermgensberatung-pwb":[],"xn--vhquv":[],"xn--vuq861b":[],"xn--w4r85el8fhu5dnra":[],"xn--w4rs40l":[],"xn--xhq521b":[],"xn--zfr164b":[],"xperia":[],"xyz":[],"yachts":[],"yahoo":[],"yamaxun":[],"yandex":[],"yodobashi":[],"yoga":[],"yokohama":[],"you":[],"youtube":[],"yun":[],"zappos":[],"zara":[],"zero":[],"zip":[],"zippo":[],"zone":[],"zuerich":[]}"; -------------------------------------------------------------------------------- /src/Installer/ICANNSection.php: -------------------------------------------------------------------------------- 1 | 8 | * @license https://github.com/thephpleague/uri-hostname-parser/blob/master/LICENSE (MIT License) 9 | * @version 1.1.1 10 | * @link https://github.com/thephpleague/uri-hostname-parser 11 | * 12 | * For the full copyright and license information, please view the LICENSE 13 | * file that was distributed with this source code. 14 | */ 15 | declare(strict_types=1); 16 | 17 | namespace League\Uri\Installer; 18 | 19 | use Composer\Script\Event; 20 | use League\Uri\PublicSuffix\Cache; 21 | use League\Uri\PublicSuffix\CurlHttpClient; 22 | use League\Uri\PublicSuffix\ICANNSectionManager; 23 | use Throwable; 24 | 25 | /** 26 | * A class to manage PSL ICANN Section rules updates 27 | */ 28 | final class ICANNSection 29 | { 30 | /** 31 | * Script to update the local cache using composer hook 32 | * 33 | * @param Event $event 34 | */ 35 | public static function update(Event $event = null) 36 | { 37 | $io = static::getIO($event); 38 | $vendor = static::getVendorPath($event); 39 | if (null === $vendor) { 40 | $io->writeError([ 41 | 'You must set up the project dependencies using composer', 42 | 'see https://getcomposer.org', 43 | ]); 44 | die(1); 45 | } 46 | 47 | require $vendor.'/autoload.php'; 48 | 49 | $io->write('Updating your Public Suffix List ICANN Section local cache.'); 50 | if (!extension_loaded('curl')) { 51 | $io->writeError([ 52 | '😓 😓 😓 Your local cache could not be updated. 😓 😓 😓', 53 | 'The PHP cURL extension is missing.', 54 | ]); 55 | die(1); 56 | } 57 | 58 | try { 59 | $manager = new ICANNSectionManager(new Cache(), new CurlHttpClient()); 60 | if ($manager->refreshRules()) { 61 | $io->write([ 62 | '💪 💪 💪 Your local cache has been successfully updated. 💪 💪 💪', 63 | 'Have a nice day!', 64 | ]); 65 | die(0); 66 | } 67 | $io->writeError([ 68 | '😓 😓 😓 Your local cache could not be updated. 😓 😓 😓', 69 | 'Please verify you can write in your local cache directory.', 70 | ]); 71 | die(1); 72 | } catch (Throwable $e) { 73 | $io->writeError([ 74 | '😓 😓 😓 Your local cache could not be updated. 😓 😓 😓', 75 | 'An error occurred during the update.', 76 | '----- Error Trace ----', 77 | ]); 78 | $io->writeError($e->getMessage()); 79 | die(1); 80 | } 81 | } 82 | 83 | /** 84 | * Detect the vendor path 85 | * 86 | * @param Event $event 87 | * 88 | * @return string|null 89 | */ 90 | private static function getVendorPath(Event $event = null) 91 | { 92 | if ($event instanceof Event) { 93 | return $event->getComposer()->getConfig()->get('vendor-dir'); 94 | } 95 | 96 | if (is_dir($vendor = dirname(__DIR__, 2).'/vendor')) { 97 | return $vendor; 98 | } 99 | 100 | if (is_dir($vendor = dirname(__DIR__, 5).'/vendor')) { 101 | return $vendor; 102 | } 103 | 104 | return null; 105 | } 106 | 107 | /** 108 | * Detect the I/O interface to use 109 | * 110 | * @param Event|null $event 111 | * 112 | * @return object 113 | */ 114 | private static function getIO(Event $event = null) 115 | { 116 | if ($event instanceof Event) { 117 | return $event->getIO(); 118 | } 119 | 120 | return new class() { 121 | public function write($messages, bool $newline = true, int $verbosity = 2) 122 | { 123 | $this->doWrite($messages, $newline, false, $verbosity); 124 | } 125 | 126 | public function writeError($messages, bool $newline = true, int $verbosity = 2) 127 | { 128 | $this->doWrite($messages, $newline, true, $verbosity); 129 | } 130 | 131 | private function doWrite($messages, bool $newline, bool $stderr, int $verbosity) 132 | { 133 | fwrite( 134 | $stderr ? STDERR : STDOUT, 135 | implode($newline ? PHP_EOL : '', (array) $messages).PHP_EOL 136 | ); 137 | } 138 | }; 139 | } 140 | } 141 | -------------------------------------------------------------------------------- /src/PublicSuffix/Cache.php: -------------------------------------------------------------------------------- 1 | 8 | * @license https://github.com/thephpleague/uri-hostname-parser/blob/master/LICENSE (MIT License) 9 | * @version 1.1.1 10 | * @link https://github.com/thephpleague/uri-hostname-parser 11 | * 12 | * For the full copyright and license information, please view the LICENSE 13 | * file that was distributed with this source code. 14 | */ 15 | declare(strict_types=1); 16 | 17 | namespace League\Uri\PublicSuffix; 18 | 19 | use DateInterval; 20 | use FilesystemIterator; 21 | use Generator; 22 | use Psr\SimpleCache\CacheInterface; 23 | use Traversable; 24 | 25 | /** 26 | * A simple file-based PSR-16 cache implementation. 27 | * 28 | * This class is heavily based on the code found in 29 | * 30 | * @see https://github.com/kodus/file-cache/blob/master/src/FileCache.php 31 | */ 32 | final class Cache implements CacheInterface 33 | { 34 | /** 35 | * @var string control characters for keys, reserved by PSR-16 36 | */ 37 | const PSR16_RESERVED = '/\{|\}|\(|\)|\/|\\\\|\@|\:/u'; 38 | const FILE_PREFIX = 'leaguepsl-'; 39 | const FILE_EXTENSION = '.cache'; 40 | const CACHE_TTL = 86400 * 7; 41 | 42 | /** 43 | * @var string 44 | */ 45 | private $cache_path; 46 | 47 | /** 48 | * @var int 49 | */ 50 | private $dir_mode = 0775; 51 | 52 | /** 53 | * @var int 54 | */ 55 | private $file_mode = 0664; 56 | 57 | /** 58 | * @param string $cache_path absolute root path of cache-file folder 59 | */ 60 | public function __construct(string $cache_path = '') 61 | { 62 | if ('' === $cache_path) { 63 | $cache_path = realpath(dirname(__DIR__, 2).DIRECTORY_SEPARATOR.'data'); 64 | } 65 | 66 | if (!file_exists($cache_path) && file_exists(dirname($cache_path))) { 67 | $this->mkdir($cache_path); // ensure that the parent path exists 68 | } 69 | 70 | $this->cache_path = $cache_path; 71 | } 72 | 73 | /** 74 | * {@inheritdoc} 75 | */ 76 | public function get($key, $default = null) 77 | { 78 | $path = $this->getPath($key); 79 | $expires_at = @filemtime($path); 80 | if ($expires_at === false) { 81 | return $default; // file not found 82 | } 83 | 84 | if (time() >= $expires_at) { 85 | @unlink($path); // file expired 86 | 87 | return $default; 88 | } 89 | 90 | $data = @file_get_contents($path); 91 | if ($data === false) { 92 | return $default; // race condition: file not found 93 | } 94 | 95 | if ($data === 'b:0;') { 96 | return false; // because we can't otherwise distinguish a FALSE return-value from unserialize() 97 | } 98 | 99 | $value = @unserialize($data); 100 | if ($value === false) { 101 | return $default; // unserialize() failed 102 | } 103 | 104 | return $value; 105 | } 106 | 107 | /** 108 | * {@inheritdoc} 109 | */ 110 | public function set($key, $value, $ttl = null) 111 | { 112 | if (!is_writable($this->cache_path.DIRECTORY_SEPARATOR)) { 113 | return false; 114 | } 115 | 116 | $expires_at = $this->getExpireAt($ttl); 117 | $path = $this->getPath($key); 118 | $dir = dirname($path); 119 | 120 | if (!file_exists($dir)) { 121 | // ensure that the parent path exists: 122 | $this->mkdir($dir); 123 | } 124 | 125 | $temp_path = $this->cache_path.DIRECTORY_SEPARATOR.uniqid('', true); 126 | if (false === @file_put_contents($temp_path, serialize($value))) { 127 | return false; 128 | } 129 | 130 | if (false === @chmod($temp_path, $this->file_mode)) { 131 | return false; 132 | } 133 | 134 | if (@touch($temp_path, $expires_at) && @rename($temp_path, $path)) { 135 | return true; 136 | } 137 | 138 | @unlink($temp_path); 139 | 140 | return false; 141 | } 142 | 143 | /** 144 | * Returns the expiration time expressed in the number of seconds since the Unix Epoch. 145 | * 146 | * @param mixed $ttl 147 | * 148 | * @return int 149 | */ 150 | private function getExpireAt($ttl): int 151 | { 152 | if (is_int($ttl)) { 153 | return time() + $ttl; 154 | } 155 | 156 | if ($ttl instanceof DateInterval) { 157 | return date_create_immutable('@'.time())->add($ttl)->getTimestamp(); 158 | } 159 | 160 | if ($ttl === null) { 161 | return time() + self::CACHE_TTL; 162 | } 163 | 164 | throw new CacheException(sprintf('Expected TTL to be an int, a DateInterval or null; received "%s"', is_object($ttl) ? get_class($ttl) : gettype($ttl))); 165 | } 166 | 167 | /** 168 | * {@inheritdoc} 169 | */ 170 | public function delete($key) 171 | { 172 | return @unlink($this->getPath($key)); 173 | } 174 | 175 | /** 176 | * {@inheritdoc} 177 | */ 178 | public function clear() 179 | { 180 | $success = true; 181 | 182 | $paths = $this->listPaths(); 183 | foreach ($paths as $path) { 184 | if (!unlink($path)) { 185 | $success = false; 186 | } 187 | } 188 | 189 | return $success; 190 | } 191 | 192 | /** 193 | * {@inheritdoc} 194 | */ 195 | public function getMultiple($keys, $default = null) 196 | { 197 | if (!is_array($keys) && !$keys instanceof Traversable) { 198 | throw new CacheException('keys must be either of type array or Traversable'); 199 | } 200 | 201 | $values = []; 202 | foreach ($keys as $key) { 203 | $values[$key] = $this->get($key) ?: $default; 204 | } 205 | 206 | return $values; 207 | } 208 | 209 | /** 210 | * {@inheritdoc} 211 | */ 212 | public function setMultiple($values, $ttl = null) 213 | { 214 | if (!is_array($values) && !$values instanceof Traversable) { 215 | throw new CacheException('keys must be either of type array or Traversable'); 216 | } 217 | 218 | $ok = true; 219 | 220 | foreach ($values as $key => $value) { 221 | $this->validateKey($key); 222 | $ok = $this->set($key, $value, $ttl) && $ok; 223 | } 224 | 225 | return $ok; 226 | } 227 | 228 | /** 229 | * {@inheritdoc} 230 | */ 231 | public function deleteMultiple($keys) 232 | { 233 | if (!is_array($keys) && !$keys instanceof Traversable) { 234 | throw new CacheException('keys must be either of type array or Traversable'); 235 | } 236 | 237 | foreach ($keys as $key) { 238 | $this->validateKey($key); 239 | $this->delete($key); 240 | } 241 | } 242 | 243 | /** 244 | * {@inheritdoc} 245 | */ 246 | public function has($key) 247 | { 248 | return $this->get($key, $this) !== $this; 249 | } 250 | 251 | /** 252 | * For a given cache key, obtain the absolute file path. 253 | * 254 | * @param string $key 255 | * 256 | * @throws CacheException if the specified key contains a character reserved by PSR-16 257 | * 258 | * @return string absolute path to cache-file 259 | */ 260 | private function getPath($key): string 261 | { 262 | $this->validateKey($key); 263 | 264 | return $this->cache_path.DIRECTORY_SEPARATOR.self::FILE_PREFIX.$key.self::FILE_EXTENSION; 265 | } 266 | 267 | /** 268 | * @return Generator|string[] 269 | */ 270 | private function listPaths(): Generator 271 | { 272 | $iterator = new FilesystemIterator( 273 | $this->cache_path, 274 | FilesystemIterator::CURRENT_AS_PATHNAME | FilesystemIterator::SKIP_DOTS 275 | ); 276 | 277 | foreach ($iterator as $path) { 278 | if (!is_dir($path)) { 279 | yield $path; 280 | } 281 | } 282 | } 283 | 284 | /** 285 | * @param string $key 286 | * 287 | * @throws CacheException 288 | */ 289 | private function validateKey($key) 290 | { 291 | if (!is_string($key)) { 292 | throw new CacheException(sprintf('Expected key to be a string; received "%s"', is_object($key) ? get_class($key) : gettype($key))); 293 | } 294 | 295 | if (preg_match(self::PSR16_RESERVED, $key, $match) === 1) { 296 | throw new CacheException(sprintf('invalid character in key: %s', $match[0])); 297 | } 298 | } 299 | 300 | /** 301 | * Recursively create directories and apply permission mask. 302 | * 303 | * @param string $path absolute directory path 304 | */ 305 | private function mkdir($path) 306 | { 307 | $parent_path = dirname($path); 308 | 309 | if (!file_exists($parent_path)) { 310 | $this->mkdir($parent_path); // recursively create parent dirs first 311 | } 312 | 313 | mkdir($path); 314 | chmod($path, $this->dir_mode); 315 | } 316 | } 317 | -------------------------------------------------------------------------------- /src/PublicSuffix/CacheException.php: -------------------------------------------------------------------------------- 1 | 8 | * @license https://github.com/thephpleague/uri-hostname-parser/blob/master/LICENSE (MIT License) 9 | * @version 1.1.1 10 | * @link https://github.com/thephpleague/uri-hostname-parser 11 | * 12 | * For the full copyright and license information, please view the LICENSE 13 | * file that was distributed with this source code. 14 | */ 15 | declare(strict_types=1); 16 | 17 | namespace League\Uri\PublicSuffix; 18 | 19 | use Psr\SimpleCache\InvalidArgumentException as PsrCacheException; 20 | 21 | class CacheException extends \InvalidArgumentException implements PsrCacheException 22 | { 23 | } 24 | -------------------------------------------------------------------------------- /src/PublicSuffix/CurlHttpClient.php: -------------------------------------------------------------------------------- 1 | 8 | * @license https://github.com/thephpleague/uri-hostname-parser/blob/master/LICENSE (MIT License) 9 | * @version 1.1.1 10 | * @link https://github.com/thephpleague/uri-hostname-parser 11 | * 12 | * For the full copyright and license information, please view the LICENSE 13 | * file that was distributed with this source code. 14 | */ 15 | declare(strict_types=1); 16 | 17 | namespace League\Uri\PublicSuffix; 18 | 19 | /** 20 | * Simple cURL Http client 21 | * 22 | * Lifted pretty much completely from William Durand's excellent Geocoder 23 | * project 24 | * 25 | * @see https://github.com/willdurand/Geocoder Geocoder on GitHub 26 | * 27 | * @author William Durand 28 | * @author Jeremy Kendall 29 | * @author Ignace Nyamagana Butera 30 | */ 31 | final class CurlHttpClient implements HttpClient 32 | { 33 | /** 34 | * {@inheritdoc} 35 | */ 36 | public function getContent(string $url): string 37 | { 38 | $curl = curl_init(); 39 | curl_setopt_array($curl, [ 40 | CURLOPT_FAILONERROR => true, 41 | CURLOPT_FOLLOWLOCATION => true, 42 | CURLOPT_RETURNTRANSFER => true, 43 | CURLOPT_URL => $url, 44 | ]); 45 | $content = curl_exec($curl); 46 | if (CURLE_OK !== ($code = curl_errno($curl))) { 47 | $message = curl_error($curl); 48 | curl_close($curl); 49 | throw new HttpClientException($message, $code); 50 | } 51 | curl_close($curl); 52 | 53 | return $content; 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /src/PublicSuffix/Domain.php: -------------------------------------------------------------------------------- 1 | 8 | * @license https://github.com/thephpleague/uri-hostname-parser/blob/master/LICENSE (MIT License) 9 | * @version 1.1.1 10 | * @link https://github.com/thephpleague/uri-hostname-parser 11 | * 12 | * For the full copyright and license information, please view the LICENSE 13 | * file that was distributed with this source code. 14 | */ 15 | declare(strict_types=1); 16 | 17 | namespace League\Uri\PublicSuffix; 18 | 19 | use JsonSerializable; 20 | 21 | /** 22 | * Domain Value Object 23 | * 24 | * Lifted pretty much completely from Jeremy Kendall PDP 25 | * project 26 | * 27 | * @author Jeremy Kendall 28 | * @author Ignace Nyamagana Butera 29 | */ 30 | final class Domain implements JsonSerializable 31 | { 32 | /** 33 | * @var string|null 34 | */ 35 | private $domain; 36 | 37 | /** 38 | * @var string|null 39 | */ 40 | private $publicSuffix; 41 | 42 | /** 43 | * @var string|null 44 | */ 45 | private $registrableDomain; 46 | 47 | /** 48 | * @var string|null 49 | */ 50 | private $subDomain; 51 | 52 | /** 53 | * @var bool 54 | */ 55 | private $isValid = false; 56 | 57 | /** 58 | * New instance. 59 | * 60 | * @param string|null $domain 61 | * @param string|null $publicSuffix 62 | * @param bool $isValid 63 | */ 64 | public function __construct(string $domain = null, string $publicSuffix = null, bool $isValid = false) 65 | { 66 | $this->domain = $domain; 67 | $this->setPublicSuffix($publicSuffix); 68 | $this->setValidity($isValid); 69 | $this->setRegistrableDomain(); 70 | $this->setSubDomain(); 71 | } 72 | 73 | /** 74 | * Compute the public suffix part 75 | * 76 | * @param string|null $publicSuffix 77 | */ 78 | private function setPublicSuffix(string $publicSuffix = null) 79 | { 80 | if (null === $this->domain) { 81 | return; 82 | } 83 | 84 | $this->publicSuffix = $publicSuffix; 85 | } 86 | 87 | /** 88 | * Compute the domain validity 89 | * 90 | * @param bool $isValid 91 | */ 92 | private function setValidity(bool $isValid) 93 | { 94 | if (null === $this->publicSuffix) { 95 | return; 96 | } 97 | 98 | $this->isValid = $isValid; 99 | } 100 | 101 | /** 102 | * Compute the registrable domain part 103 | */ 104 | private function setRegistrableDomain() 105 | { 106 | if (!$this->hasRegistrableDomain()) { 107 | return; 108 | } 109 | 110 | $countLabelsToRemove = count(explode('.', $this->publicSuffix)) + 1; 111 | $domainLabels = explode('.', $this->domain); 112 | $domain = implode('.', array_slice($domainLabels, count($domainLabels) - $countLabelsToRemove)); 113 | $this->registrableDomain = $this->normalize($domain); 114 | } 115 | 116 | /** 117 | * Tells whether the domain has a registrable domain part. 118 | * 119 | * @return bool 120 | */ 121 | private function hasRegistrableDomain(): bool 122 | { 123 | return null !== $this->publicSuffix 124 | && strpos($this->domain, '.') > 0 125 | && $this->publicSuffix !== $this->domain; 126 | } 127 | 128 | /** 129 | * Normalize the domain according to its representation. 130 | * 131 | * @param string $domain 132 | * 133 | * @return string|null 134 | */ 135 | private function normalize(string $domain) 136 | { 137 | $func = 'idn_to_utf8'; 138 | if (strpos($domain, 'xn--') !== false) { 139 | $func = 'idn_to_ascii'; 140 | } 141 | 142 | $domain = $func($domain, 0, INTL_IDNA_VARIANT_UTS46); 143 | if (false === $domain) { 144 | return null; 145 | } 146 | 147 | return strtolower($domain); 148 | } 149 | 150 | /** 151 | * Compute the sub domain part 152 | */ 153 | private function setSubDomain() 154 | { 155 | if (!$this->hasRegistrableDomain()) { 156 | return; 157 | } 158 | 159 | $domainLabels = explode('.', $this->domain); 160 | $countLabels = count($domainLabels); 161 | $countLabelsToRemove = count(explode('.', $this->publicSuffix)) + 1; 162 | if ($countLabels === $countLabelsToRemove) { 163 | return; 164 | } 165 | 166 | $domain = implode('.', array_slice($domainLabels, 0, $countLabels - $countLabelsToRemove)); 167 | $this->subDomain = $this->normalize($domain); 168 | } 169 | 170 | /** 171 | * {@inheritdoc} 172 | */ 173 | public function jsonSerialize() 174 | { 175 | return [ 176 | 'domain' => $this->domain, 177 | 'registrableDomain' => $this->registrableDomain, 178 | 'subDomain' => $this->subDomain, 179 | 'publicSuffix' => $this->publicSuffix, 180 | 'isCANN' => $this->isValid, 181 | ]; 182 | } 183 | 184 | /** 185 | * {@inheritdoc} 186 | */ 187 | public function __debugInfo() 188 | { 189 | return $this->jsonSerialize(); 190 | } 191 | 192 | /** 193 | * {@inheritdoc} 194 | */ 195 | public static function __set_state(array $properties) 196 | { 197 | return new self($properties['domain'], $properties['publicSuffix'], $properties['isValid']); 198 | } 199 | 200 | /** 201 | * @return string|null 202 | */ 203 | public function getDomain() 204 | { 205 | return $this->domain; 206 | } 207 | 208 | /** 209 | * @return string|null 210 | */ 211 | public function getPublicSuffix() 212 | { 213 | return $this->publicSuffix; 214 | } 215 | 216 | /** 217 | * Does the domain have a matching rule in the Public Suffix List? 218 | * 219 | * WARNING: "Some people use the PSL to determine what is a valid domain name 220 | * and what isn't. This is dangerous, particularly in these days where new 221 | * gTLDs are arriving at a rapid pace, if your software does not regularly 222 | * receive PSL updates, because it will erroneously think new gTLDs are not 223 | * valid. The DNS is the proper source for this innormalizeion. If you must use 224 | * it for this purpose, please do not bake static copies of the PSL into your 225 | * software with no update mechanism." 226 | * 227 | * @see https://publicsuffix.org/learn/ 228 | * 229 | * @return bool 230 | */ 231 | public function isValid(): bool 232 | { 233 | return $this->isValid; 234 | } 235 | 236 | /** 237 | * Get registrable domain. 238 | * 239 | * Algorithm #7: The registered or registrable domain is the public suffix 240 | * plus one additional label. 241 | * 242 | * This method should return null if the domain provided is a public suffix, 243 | * per the test cases provided by Mozilla. 244 | * 245 | * @see https://publicsuffix.org/list/ 246 | * @see https://raw.githubusercontent.com/publicsuffix/list/master/tests/test_psl.txt 247 | * 248 | * @return string|null registrable domain 249 | */ 250 | public function getRegistrableDomain() 251 | { 252 | return $this->registrableDomain; 253 | } 254 | 255 | /** 256 | * Get the sub domain. 257 | * 258 | * This method should return null if 259 | * 260 | * - the registrable domain is null 261 | * - the registrable domain is the same as the public suffix 262 | * 263 | * @return string|null registrable domain 264 | */ 265 | public function getSubDomain() 266 | { 267 | return $this->subDomain; 268 | } 269 | } 270 | -------------------------------------------------------------------------------- /src/PublicSuffix/Exception.php: -------------------------------------------------------------------------------- 1 | 8 | * @license https://github.com/thephpleague/uri-hostname-parser/blob/master/LICENSE (MIT License) 9 | * @version 1.1.1 10 | * @link https://github.com/thephpleague/uri-hostname-parser 11 | * 12 | * For the full copyright and license information, please view the LICENSE 13 | * file that was distributed with this source code. 14 | */ 15 | declare(strict_types=1); 16 | 17 | namespace League\Uri\PublicSuffix; 18 | 19 | use RuntimeException; 20 | 21 | class Exception extends RuntimeException 22 | { 23 | } 24 | -------------------------------------------------------------------------------- /src/PublicSuffix/HttpClient.php: -------------------------------------------------------------------------------- 1 | 8 | * @license https://github.com/thephpleague/uri-hostname-parser/blob/master/LICENSE (MIT License) 9 | * @version 1.1.1 10 | * @link https://github.com/thephpleague/uri-hostname-parser 11 | * 12 | * For the full copyright and license information, please view the LICENSE 13 | * file that was distributed with this source code. 14 | */ 15 | 16 | namespace League\Uri\PublicSuffix; 17 | 18 | /** 19 | * Interface for http adapters. 20 | * 21 | * Lifted pretty much completely from William Durand's excellent Geocoder 22 | * project 23 | * 24 | * @see https://github.com/willdurand/Geocoder Geocoder on GitHub 25 | * 26 | * @author William Durand 27 | * @author Jeremy Kendall 28 | */ 29 | interface HttpClient 30 | { 31 | /** 32 | * Returns the content fetched from a given URL. 33 | * 34 | * @param string $url 35 | * 36 | * @throws HttpClientException If an errors occurs while fetching the content from a given URL 37 | * 38 | * @return string Retrieved content 39 | */ 40 | public function getContent(string $url): string; 41 | } 42 | -------------------------------------------------------------------------------- /src/PublicSuffix/HttpClientException.php: -------------------------------------------------------------------------------- 1 | 8 | * @license https://github.com/thephpleague/uri-hostname-parser/blob/master/LICENSE (MIT License) 9 | * @version 1.1.1 10 | * @link https://github.com/thephpleague/uri-hostname-parser 11 | * 12 | * For the full copyright and license information, please view the LICENSE 13 | * file that was distributed with this source code. 14 | */ 15 | declare(strict_types=1); 16 | 17 | namespace League\Uri\PublicSuffix; 18 | 19 | use RuntimeException; 20 | 21 | class HttpClientException extends RuntimeException 22 | { 23 | } 24 | -------------------------------------------------------------------------------- /src/PublicSuffix/ICANNSectionManager.php: -------------------------------------------------------------------------------- 1 | 8 | * @license https://github.com/thephpleague/uri-hostname-parser/blob/master/LICENSE (MIT License) 9 | * @version 1.1.1 10 | * @link https://github.com/thephpleague/uri-hostname-parser 11 | * 12 | * For the full copyright and license information, please view the LICENSE 13 | * file that was distributed with this source code. 14 | */ 15 | declare(strict_types=1); 16 | 17 | namespace League\Uri\PublicSuffix; 18 | 19 | use Psr\SimpleCache\CacheInterface; 20 | use SplTempFileObject; 21 | 22 | /** 23 | * Public Suffix List Manager. 24 | * 25 | * This class obtains, writes, caches, and returns PHP representations 26 | * of the Public Suffix List ICANN section 27 | */ 28 | final class ICANNSectionManager 29 | { 30 | const PSL_URL = 'https://publicsuffix.org/list/public_suffix_list.dat'; 31 | 32 | /** 33 | * @var CacheInterface 34 | */ 35 | private $cache; 36 | 37 | /** 38 | * @var HttpClient 39 | */ 40 | private $http; 41 | 42 | /** 43 | * new instance. 44 | * 45 | * @param CacheInterface $cache 46 | * @param HttpClient $http 47 | */ 48 | public function __construct(CacheInterface $cache, HttpClient $http) 49 | { 50 | $this->cache = $cache; 51 | $this->http = $http; 52 | } 53 | 54 | /** 55 | * Gets ICANN Public Suffix List Rules. 56 | * 57 | * @param string $source_url the Public Suffix List URL 58 | * 59 | * @return Rules 60 | */ 61 | public function getRules(string $source_url = self::PSL_URL): Rules 62 | { 63 | $cacheKey = $this->getCacheKey($source_url); 64 | $rules = $this->cache->get($cacheKey); 65 | if (null !== $rules) { 66 | return new Rules(json_decode($rules, true)); 67 | } 68 | 69 | if (!$this->refreshRules($source_url)) { 70 | throw new Exception(sprintf('Unable to load the public suffix list rules for %s', $source_url)); 71 | } 72 | 73 | $rules = $this->cache->get($cacheKey); 74 | 75 | return new Rules(json_decode($rules, true)); 76 | } 77 | 78 | /** 79 | * Returns the cache key according to the source URL. 80 | * 81 | * @param string $str 82 | * 83 | * @return string 84 | */ 85 | private function getCacheKey(string $str): string 86 | { 87 | static $cacheKeyPrefix = 'LEAGUE_URI_ICANN_SECTION'; 88 | 89 | return $cacheKeyPrefix.'-'.md5(strtolower($str)); 90 | } 91 | 92 | /** 93 | * Downloads Public Suffix List and writes text cache and PHP cache. If these files 94 | * already exist, they will be overwritten. 95 | * 96 | * Returns true if all list are correctly refreshed 97 | * 98 | * @param string $source_url the Public Suffix List URL 99 | * 100 | * @return bool 101 | */ 102 | public function refreshRules(string $source_url = self::PSL_URL): bool 103 | { 104 | $content = $this->http->getContent($source_url); 105 | $rules = $this->parse($content); 106 | if (empty($rules)) { 107 | return false; 108 | } 109 | 110 | return $this->cache->set($this->getCacheKey($source_url), json_encode($rules)); 111 | } 112 | 113 | /** 114 | * Parses text representation of list to associative, multidimensional array. 115 | * 116 | * @param string $content the Public SUffix List as a SplFileObject 117 | * 118 | * @return array Associative, multidimensional array representation of the 119 | * public suffx list 120 | */ 121 | private function parse(string $content): array 122 | { 123 | $status = false; 124 | $rules = []; 125 | $file = new SplTempFileObject(); 126 | $file->fwrite($content); 127 | $file->setFlags(SplTempFileObject::DROP_NEW_LINE | SplTempFileObject::READ_AHEAD | SplTempFileObject::SKIP_EMPTY); 128 | foreach ($file as $line) { 129 | $status = $this->isValidICANNSection($status, $line); 130 | if ($status && strpos($line, '//') === false) { 131 | $rules = $this->addRule($rules, explode('.', $line)); 132 | } 133 | } 134 | 135 | return $rules; 136 | } 137 | 138 | /** 139 | * Tell whether the line can be converted for a given domain. 140 | * 141 | * @param bool $previous_status the previous status 142 | * @param string $line the current file line 143 | * 144 | * @return bool 145 | */ 146 | private function isValidICANNSection(bool $previous_status, string $line): bool 147 | { 148 | if (!$previous_status && strpos($line, '// ===BEGIN ICANN DOMAINS===') === 0) { 149 | return true; 150 | } 151 | 152 | if ($previous_status && strpos($line, '// ===END ICANN DOMAINS===') === 0) { 153 | return false; 154 | } 155 | 156 | return $previous_status; 157 | } 158 | 159 | /** 160 | * Recursive method to build the array representation of the Public Suffix List. 161 | * 162 | * This method is based heavily on the code found in generateEffectiveTLDs.php 163 | * 164 | * @see https://github.com/usrflo/registered-domain-libs/blob/master/generateEffectiveTLDs.php 165 | * A copy of the Apache License, Version 2.0, is provided with this 166 | * distribution 167 | * 168 | * @param array $list Initially an empty array, this eventually 169 | * becomes the array representation of the Public Suffix List 170 | * @param array $rule_parts One line (rule) from the Public Suffix List 171 | * exploded on '.', or the remaining portion of that array during recursion 172 | * 173 | * @return array 174 | */ 175 | private function addRule(array $list, array $rule_parts): array 176 | { 177 | $part = array_pop($rule_parts); 178 | 179 | // Adheres to canonicalization rule from the "Formal Algorithm" section 180 | // of https://publicsuffix.org/list/ 181 | // "The domain and all rules must be canonicalized in the normal way 182 | // for hostnames - lower-case, Punycode (RFC 3492)." 183 | 184 | $part = idn_to_ascii($part, 0, INTL_IDNA_VARIANT_UTS46); 185 | $isDomain = true; 186 | if (strpos($part, '!') === 0) { 187 | $part = substr($part, 1); 188 | $isDomain = false; 189 | } 190 | 191 | if (!isset($list[$part])) { 192 | $list[$part] = $isDomain ? [] : ['!' => '']; 193 | } 194 | 195 | if ($isDomain && !empty($rule_parts)) { 196 | $list[$part] = $this->addRule($list[$part], $rule_parts); 197 | } 198 | 199 | return $list; 200 | } 201 | } 202 | -------------------------------------------------------------------------------- /src/PublicSuffix/Rules.php: -------------------------------------------------------------------------------- 1 | 8 | * @license https://github.com/thephpleague/uri-hostname-parser/blob/master/LICENSE (MIT License) 9 | * @version 1.1.1 10 | * @link https://github.com/thephpleague/uri-hostname-parser 11 | * 12 | * For the full copyright and license information, please view the LICENSE 13 | * file that was distributed with this source code. 14 | */ 15 | declare(strict_types=1); 16 | 17 | namespace League\Uri\PublicSuffix; 18 | 19 | final class Rules 20 | { 21 | /** 22 | * @var array 23 | */ 24 | private $rules; 25 | 26 | /** 27 | * {@inheritdoc} 28 | */ 29 | public static function __set_state(array $properties) 30 | { 31 | return new self($properties['rules']); 32 | } 33 | 34 | /** 35 | * new instance. 36 | * 37 | * @param array $rules 38 | */ 39 | public function __construct(array $rules) 40 | { 41 | $this->rules = $rules; 42 | } 43 | 44 | /** 45 | * Returns PSL ICANN public info for a given domain. 46 | * 47 | * @param string|null $domain 48 | * 49 | * @return Domain 50 | */ 51 | public function resolve(string $domain = null): Domain 52 | { 53 | if (!$this->isMatchable($domain)) { 54 | return new Domain(); 55 | } 56 | 57 | $isValid = true; 58 | $publicSuffix = $this->findPublicSuffix($domain); 59 | if (null === $publicSuffix) { 60 | $isValid = false; 61 | $labels = explode('.', $domain); 62 | $publicSuffix = array_pop($labels); 63 | } 64 | 65 | if (false === strpos($domain, 'xn--')) { 66 | $publicSuffix = idn_to_utf8($publicSuffix, 0, INTL_IDNA_VARIANT_UTS46); 67 | } 68 | 69 | return new Domain($domain, false !== $publicSuffix ? $publicSuffix : null, $isValid); 70 | } 71 | 72 | /** 73 | * Tells whether the given domain is valid. 74 | * 75 | * @param string|null $domain 76 | * 77 | * @return bool 78 | */ 79 | private function isMatchable($domain): bool 80 | { 81 | return $domain !== null 82 | && strpos($domain, '.') > 0 83 | && strlen($domain) === strcspn($domain, '][') 84 | && !filter_var($domain, FILTER_VALIDATE_IP); 85 | } 86 | 87 | /** 88 | * Returns the matched public suffix or null 89 | * if none found. 90 | * 91 | * @param string $domain 92 | * 93 | * @return string|null 94 | */ 95 | private function findPublicSuffix(string $domain) 96 | { 97 | $normalizedDomain = $this->normalize($domain); 98 | $reverseLabels = array_reverse(explode('.', $normalizedDomain)); 99 | $matches = []; 100 | $rules = $this->rules; 101 | foreach ($reverseLabels as $label) { 102 | //match exception rule 103 | if (isset($rules[$label], $rules[$label]['!'])) { 104 | break; 105 | } 106 | 107 | //match wildcard rule 108 | if (isset($rules['*'])) { 109 | $matches[] = $label; 110 | break; 111 | } 112 | 113 | //no match found 114 | if (!isset($rules[$label])) { 115 | break; 116 | } 117 | 118 | $matches[] = $label; 119 | $rules = $rules[$label]; 120 | } 121 | 122 | $foundLabels = array_reverse(array_filter($matches, 'strlen')); 123 | if (empty($foundLabels)) { 124 | return null; 125 | } 126 | 127 | return implode('.', $foundLabels); 128 | } 129 | 130 | /** 131 | * Normalize domain. 132 | * 133 | * "The domain must be canonicalized in the normal way for hostnames - lower-case, Punycode." 134 | * 135 | * @see http://www.ietf.org/rfc/rfc3492.txt 136 | * 137 | * @param string $domain 138 | * 139 | * @return string 140 | */ 141 | private function normalize(string $domain): string 142 | { 143 | if (false !== strpos($domain, '%')) { 144 | $domain = rawurldecode($domain); 145 | } 146 | 147 | $normalize = idn_to_ascii($domain, 0, INTL_IDNA_VARIANT_UTS46); 148 | if (false === $normalize) { 149 | return ''; 150 | } 151 | 152 | return strtolower($normalize); 153 | } 154 | } 155 | -------------------------------------------------------------------------------- /src/functions.php: -------------------------------------------------------------------------------- 1 | 8 | * @license https://github.com/thephpleague/uri-hostname-parser/blob/master/LICENSE (MIT License) 9 | * @version 1.1.1 10 | * @link https://github.com/thephpleague/uri-hostname-parser 11 | * 12 | * For the full copyright and license information, please view the LICENSE 13 | * file that was distributed with this source code. 14 | */ 15 | declare(strict_types=1); 16 | 17 | namespace League\Uri; 18 | 19 | use League\Uri\PublicSuffix\Cache; 20 | use League\Uri\PublicSuffix\CurlHttpClient; 21 | use League\Uri\PublicSuffix\Domain; 22 | use League\Uri\PublicSuffix\ICANNSectionManager; 23 | 24 | /** 25 | * Returns PSL ICANN section info for a given domain. 26 | * 27 | * @param string|null $domain 28 | * @param string $source_url 29 | * 30 | * @see League\Uri\PublicSuffix\Rules::resolve 31 | * 32 | * @return Domain 33 | */ 34 | function resolve_domain($domain, string $source_url = ICANNSectionManager::PSL_URL): Domain 35 | { 36 | static $manager; 37 | 38 | $manager = $manager ?? new ICANNSectionManager(new Cache(), new CurlHttpClient()); 39 | 40 | return $manager->getRules($source_url)->resolve($domain); 41 | } 42 | -------------------------------------------------------------------------------- /src/functions_include.php: -------------------------------------------------------------------------------- 1 |