email_data 1601156760
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.github/FUNDING.yml +3 -0
- data/.gitignore +10 -0
- data/.rubocop.yml +7 -0
- data/.travis.yml +6 -0
- data/CODE_OF_CONDUCT.md +74 -0
- data/Gemfile +6 -0
- data/LICENSE.txt +21 -0
- data/README.md +90 -0
- data/Rakefile +12 -0
- data/VERSION +1 -0
- data/bin/console +14 -0
- data/bin/helpers.rb +229 -0
- data/bin/setup +8 -0
- data/bin/sync +7 -0
- data/bin/sync-disposable-emails +213 -0
- data/bin/sync-tld +28 -0
- data/data/country_tlds.txt +235 -0
- data/data/disposable_domains.txt +111121 -0
- data/data/disposable_emails.txt +38 -0
- data/data/free_email_domains.txt +111 -0
- data/data/manual/disposable_domains.txt +0 -0
- data/data/manual/disposable_emails.txt +0 -0
- data/data/manual/free_email_domains.txt +111 -0
- data/data/tlds.txt +1508 -0
- data/email_data.gemspec +38 -0
- data/lib/email_data.rb +39 -0
- data/lib/email_data/version.rb +5 -0
- metadata +184 -0
    
        data/bin/setup
    ADDED
    
    
    
        data/bin/sync
    ADDED
    
    
| @@ -0,0 +1,213 @@ | |
| 1 | 
            +
            #!/usr/bin/env ruby
         | 
| 2 | 
            +
            # frozen_string_literal: true
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            require_relative "helpers"
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            def ten_minute_mail
         | 
| 7 | 
            +
              path = "disposable/10minutemail.txt"
         | 
| 8 | 
            +
              url = "https://10minutemail.com/session/address"
         | 
| 9 | 
            +
             | 
| 10 | 
            +
              20.times do
         | 
| 11 | 
            +
                refresh_list(url: url, path: path) do |response|
         | 
| 12 | 
            +
                  _account, host = response.data.fetch("address").split("@")
         | 
| 13 | 
            +
             | 
| 14 | 
            +
                  [host]
         | 
| 15 | 
            +
                end
         | 
| 16 | 
            +
             | 
| 17 | 
            +
                sleep random_timeout
         | 
| 18 | 
            +
              end
         | 
| 19 | 
            +
            end
         | 
| 20 | 
            +
             | 
| 21 | 
            +
            def temp_mail
         | 
| 22 | 
            +
              path = "disposable/tempmail.txt"
         | 
| 23 | 
            +
              url = "https://api4.temp-mail.org/request/domains/format/json"
         | 
| 24 | 
            +
             | 
| 25 | 
            +
              refresh_list(url: url, path: path) do |response|
         | 
| 26 | 
            +
                response.data.map {|domain| domain.tr("@", "") }
         | 
| 27 | 
            +
              end
         | 
| 28 | 
            +
            end
         | 
| 29 | 
            +
             | 
| 30 | 
            +
            def temp_mail_address
         | 
| 31 | 
            +
              path = "disposable/tempmailaddress.txt"
         | 
| 32 | 
            +
              url = "https://www.tempmailaddress.com/index/index"
         | 
| 33 | 
            +
             | 
| 34 | 
            +
              refresh_list(url: url, path: path) do |response|
         | 
| 35 | 
            +
                data = JSON.parse(
         | 
| 36 | 
            +
                  response.body.gsub(/[^-,:\w@.{}"]/, ""),
         | 
| 37 | 
            +
                  symbolize_names: true
         | 
| 38 | 
            +
                )
         | 
| 39 | 
            +
                [data[:email].split("@").last]
         | 
| 40 | 
            +
              end
         | 
| 41 | 
            +
            end
         | 
| 42 | 
            +
             | 
| 43 | 
            +
            def tempmail_io
         | 
| 44 | 
            +
              path = "disposable/tempmail_io.txt"
         | 
| 45 | 
            +
              url = "https://api.internal.temp-mail.io/api/v2/domains"
         | 
| 46 | 
            +
             | 
| 47 | 
            +
              refresh_list(url: url, path: path) do |response|
         | 
| 48 | 
            +
                response.data["domains"]
         | 
| 49 | 
            +
              end
         | 
| 50 | 
            +
            end
         | 
| 51 | 
            +
             | 
| 52 | 
            +
            def gmailnator
         | 
| 53 | 
            +
              emails = []
         | 
| 54 | 
            +
             | 
| 55 | 
            +
              5.times do
         | 
| 56 | 
            +
                url = "https://gmailnator.com/bulk-emails"
         | 
| 57 | 
            +
                default_headers = {"user-agent" => USER_AGENT.sample}
         | 
| 58 | 
            +
             | 
| 59 | 
            +
                response = Aitch.get(url: url, headers: default_headers)
         | 
| 60 | 
            +
             | 
| 61 | 
            +
                unless response.ok?
         | 
| 62 | 
            +
                  throw "Received #{response.status} when getting CSRF token"
         | 
| 63 | 
            +
                end
         | 
| 64 | 
            +
             | 
| 65 | 
            +
                cookie_header = response.headers["set-cookie"]
         | 
| 66 | 
            +
                attr = response.data.css("#csrf_token").first
         | 
| 67 | 
            +
                csrf_token = attr[:value]
         | 
| 68 | 
            +
                csrf_field = attr[:name]
         | 
| 69 | 
            +
             | 
| 70 | 
            +
                response = Aitch.post(
         | 
| 71 | 
            +
                  url: url,
         | 
| 72 | 
            +
                  params: {email_list: "1000", email: [3], csrf_field => csrf_token},
         | 
| 73 | 
            +
                  headers: default_headers.merge({"cookie" => cookie_header})
         | 
| 74 | 
            +
                )
         | 
| 75 | 
            +
             | 
| 76 | 
            +
                throw "Received #{response.status} when fetching list" unless response.ok?
         | 
| 77 | 
            +
             | 
| 78 | 
            +
                emails += response.data.css("#email-list-message a").map do |node|
         | 
| 79 | 
            +
                  mailbox, domain = node.text.gsub(/\+[^@]+/, "").split("@")
         | 
| 80 | 
            +
                  mailbox = mailbox.gsub(/\./m, "")
         | 
| 81 | 
            +
                  "#{mailbox}@#{domain}"
         | 
| 82 | 
            +
                end
         | 
| 83 | 
            +
             | 
| 84 | 
            +
                sleep random_timeout
         | 
| 85 | 
            +
              end
         | 
| 86 | 
            +
             | 
| 87 | 
            +
              append_to_file("disposable/gmailnator.txt", emails)
         | 
| 88 | 
            +
            end
         | 
| 89 | 
            +
             | 
| 90 | 
            +
            def domain_scraping(name, url, selector)
         | 
| 91 | 
            +
              timeout(10) do
         | 
| 92 | 
            +
                puts "=> Scraping #{url}"
         | 
| 93 | 
            +
             | 
| 94 | 
            +
                selector, value_selector = selector.split("::")
         | 
| 95 | 
            +
                path = "disposable/#{name}.txt"
         | 
| 96 | 
            +
                host_regex = /@?(.*?(\.[^.]+)+)/
         | 
| 97 | 
            +
             | 
| 98 | 
            +
                refresh_list(url: url, path: path) do |response|
         | 
| 99 | 
            +
                  new_domains = response
         | 
| 100 | 
            +
                                .data
         | 
| 101 | 
            +
                                .css(selector)
         | 
| 102 | 
            +
                                .map {|element| process_scraping(element, value_selector) }
         | 
| 103 | 
            +
             | 
| 104 | 
            +
                  new_domains = new_domains
         | 
| 105 | 
            +
                                .map(&:squish)
         | 
| 106 | 
            +
                                .reject(&:empty?)
         | 
| 107 | 
            +
                                .map {|domain| domain[host_regex, 1]&.squish&.tr("@", "") }
         | 
| 108 | 
            +
                                .reject(&:nil?)
         | 
| 109 | 
            +
                                .reject(&:empty?)
         | 
| 110 | 
            +
                                .map {|domain| domain.gsub(/\s*\((.*?)\)/, "") }
         | 
| 111 | 
            +
             | 
| 112 | 
            +
                  raise "No #{name} hosts found" if new_domains.empty?
         | 
| 113 | 
            +
             | 
| 114 | 
            +
                  new_domains
         | 
| 115 | 
            +
                end
         | 
| 116 | 
            +
              end
         | 
| 117 | 
            +
            rescue StandardError => error
         | 
| 118 | 
            +
              puts "=> [ERROR] Unable to scrape #{url}; #{error.class}: #{error.message}"
         | 
| 119 | 
            +
              []
         | 
| 120 | 
            +
            end
         | 
| 121 | 
            +
             | 
| 122 | 
            +
            def process_scraping(element, value_selector)
         | 
| 123 | 
            +
              value = nil
         | 
| 124 | 
            +
             | 
| 125 | 
            +
              case value_selector
         | 
| 126 | 
            +
              when "text()"
         | 
| 127 | 
            +
                value = element.text
         | 
| 128 | 
            +
              when /^attr\((.*?)\)/
         | 
| 129 | 
            +
                value = element[Regexp.last_match(1)]
         | 
| 130 | 
            +
              else
         | 
| 131 | 
            +
                element.attributes.each do |_name, attr|
         | 
| 132 | 
            +
                  attr = attr.value.to_s
         | 
| 133 | 
            +
                  value = attr if attr =~ host_regex
         | 
| 134 | 
            +
                end
         | 
| 135 | 
            +
              end
         | 
| 136 | 
            +
             | 
| 137 | 
            +
              unless value
         | 
| 138 | 
            +
                raise "no value found: #{element} (value_selector: #{value_selector})"
         | 
| 139 | 
            +
              end
         | 
| 140 | 
            +
             | 
| 141 | 
            +
              value
         | 
| 142 | 
            +
            end
         | 
| 143 | 
            +
             | 
| 144 | 
            +
            threads = []
         | 
| 145 | 
            +
             | 
| 146 | 
            +
            threads << thread { load_github_url("https://raw.githubusercontent.com/ivolo/disposable-email-domains/master/index.json") }
         | 
| 147 | 
            +
            threads << thread { load_github_url("https://raw.githubusercontent.com/andreis/disposable-email-domains/master/domains.json") }
         | 
| 148 | 
            +
            threads << thread { load_github_url("https://raw.githubusercontent.com/FGRibreau/mailchecker/master/list.txt") }
         | 
| 149 | 
            +
            threads << thread { load_github_url("https://raw.githubusercontent.com/willwhite/freemail/master/data/disposable.txt") }
         | 
| 150 | 
            +
            threads << thread { load_github_url("https://raw.githubusercontent.com/maxmalysh/disposable-emails/master/disposable_emails/data/domains.txt") }
         | 
| 151 | 
            +
            threads << thread { load_github_url("https://raw.githubusercontent.com/jespernissen/disposable-maildomain-list/master/disposable-maildomain-list.txt") }
         | 
| 152 | 
            +
            threads << thread { load_github_url("https://raw.githubusercontent.com/wesbos/burner-email-providers/master/emails.txt") }
         | 
| 153 | 
            +
            threads << thread { load_github_url("https://gist.github.com/fnando/dafe542cac13f831bbf5521a55248116/raw/disposable.txt") }
         | 
| 154 | 
            +
            threads << thread { ten_minute_mail }
         | 
| 155 | 
            +
            threads << thread { temp_mail }
         | 
| 156 | 
            +
            threads << thread { temp_mail_address }
         | 
| 157 | 
            +
            threads << thread { tempmail_io }
         | 
| 158 | 
            +
            threads << thread { load_file("disposable/disposable_manually_added.txt") }
         | 
| 159 | 
            +
            threads << thread { domain_scraping("guerrillamail", "https://www.guerrillamail.com/", "select option::attr(value)") }
         | 
| 160 | 
            +
            threads << thread { domain_scraping("moakt", "https://www.moakt.com", "select option::attr(value)") }
         | 
| 161 | 
            +
            threads << thread { domain_scraping("tempr", "https://tempr.email/", "select[name=DomainId] option::text()") }
         | 
| 162 | 
            +
            threads << thread { domain_scraping("yepmail", "https://yepmail.co/", "select[name=domain] option::text()") }
         | 
| 163 | 
            +
            threads << thread { domain_scraping("fake_email_generator", "https://fakemailgenerator.net", "[data-mailhost]::attr(data-mailhost)") }
         | 
| 164 | 
            +
            threads << thread { domain_scraping("tempemails", "https://www.tempemails.net/", "select[name=domain] option::attr(value)") }
         | 
| 165 | 
            +
            threads << thread { domain_scraping("clipmails", "https://clipmails.com/", "select[name=domain] option::attr(value)") }
         | 
| 166 | 
            +
            threads << thread { domain_scraping("1secmail", "https://www.1secmail.com/", "select[id=domain] option::attr(value)") }
         | 
| 167 | 
            +
            threads << thread { domain_scraping("emailfake", "https://generator.email", ".tt-suggestion p::text()") }
         | 
| 168 | 
            +
            threads << thread { domain_scraping("emailfake", "https://emailfake.com/", ".tt-suggestion p::text()") }
         | 
| 169 | 
            +
            threads << thread { domain_scraping("emailfake", "https://email-fake.com/", ".tt-suggestion p::text()") }
         | 
| 170 | 
            +
            threads << thread { domain_scraping("receivemail", "https://www.receivemail.org/", "select[name=domain] option::text()") }
         | 
| 171 | 
            +
            threads << thread { domain_scraping("itemp", "https://itemp.email", "select[name=domain] option::text()") }
         | 
| 172 | 
            +
            threads << thread { domain_scraping("cs", "https://www.cs.email", "select[id=gm-host-select] option::text()") }
         | 
| 173 | 
            +
            threads << thread { domain_scraping("tempmail", "https://tempmail.io/settings/", "select[id=domain] option::text()") }
         | 
| 174 | 
            +
            threads << thread { domain_scraping("tempemail", "https://tempemail.co", "select[name=email_domain] option::text()") }
         | 
| 175 | 
            +
            threads << thread { domain_scraping("tmail", "https://mytemp-email.com/", "a.domain-selector::text()") }
         | 
| 176 | 
            +
             | 
| 177 | 
            +
            threads.each_slice(5) do |slice|
         | 
| 178 | 
            +
              slice.each(&:join)
         | 
| 179 | 
            +
            end
         | 
| 180 | 
            +
             | 
| 181 | 
            +
            threads.clear
         | 
| 182 | 
            +
             | 
| 183 | 
            +
            domains = []
         | 
| 184 | 
            +
             | 
| 185 | 
            +
            puts "=> Loading disposable_domains.txt"
         | 
| 186 | 
            +
            domains += normalize_list(File.read("#{__dir__}/../data/disposable_domains.txt").lines)
         | 
| 187 | 
            +
             | 
| 188 | 
            +
            puts "=> Loading manual/disposable_domains.txt"
         | 
| 189 | 
            +
            domains += normalize_list(File.read("#{__dir__}/../data/manual/disposable_domains.txt").lines)
         | 
| 190 | 
            +
             | 
| 191 | 
            +
            puts "=> Loading disposable/*.txt"
         | 
| 192 | 
            +
            Dir["./data/disposable/**/*.txt"].map do |file|
         | 
| 193 | 
            +
              file = File.expand_path(file)
         | 
| 194 | 
            +
              domains += normalize_list(File.read(file).lines)
         | 
| 195 | 
            +
            end
         | 
| 196 | 
            +
             | 
| 197 | 
            +
            ignore_domains = %w[gmail.com hotmail.com]
         | 
| 198 | 
            +
             | 
| 199 | 
            +
            puts "=> Normalize domains (count: #{domains.size})"
         | 
| 200 | 
            +
            domains = domains
         | 
| 201 | 
            +
                      .uniq
         | 
| 202 | 
            +
                      .map {|domain| RootDomain.call(domain.split("@").last.downcase) }
         | 
| 203 | 
            +
                      .compact
         | 
| 204 | 
            +
                      .uniq
         | 
| 205 | 
            +
                      .reject {|domain| ignore_domains.include?(domain) }
         | 
| 206 | 
            +
             | 
| 207 | 
            +
            puts "=> Saving domains (count: #{domains.size})"
         | 
| 208 | 
            +
            save_file("disposable_domains.txt", domains)
         | 
| 209 | 
            +
             | 
| 210 | 
            +
            emails = gmailnator
         | 
| 211 | 
            +
            emails += normalize_list(File.read("#{__dir__}/../data/manual/disposable_emails.txt").lines)
         | 
| 212 | 
            +
            puts "=> Saving email proxies (count: #{emails.size})"
         | 
| 213 | 
            +
            save_file("disposable_emails.txt", emails)
         | 
    
        data/bin/sync-tld
    ADDED
    
    | @@ -0,0 +1,28 @@ | |
| 1 | 
            +
            #!/usr/bin/env ruby
         | 
| 2 | 
            +
            # frozen_string_literal: true
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            require_relative "helpers"
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            puts "=> Fetching tld list"
         | 
| 7 | 
            +
            tlds = http_request(:get, "https://data.iana.org/TLD/tlds-alpha-by-domain.txt").body.lines
         | 
| 8 | 
            +
            tlds.shift # remove update notice
         | 
| 9 | 
            +
             | 
| 10 | 
            +
            tlds = tlds
         | 
| 11 | 
            +
                   .map(&:downcase)
         | 
| 12 | 
            +
                   .map(&:strip)
         | 
| 13 | 
            +
                   .map {|tld| SimpleIDN.to_ascii(tld) }
         | 
| 14 | 
            +
             | 
| 15 | 
            +
            puts "=> Saving tlds.txt"
         | 
| 16 | 
            +
            save_file("tlds.txt", normalize_list(tlds))
         | 
| 17 | 
            +
             | 
| 18 | 
            +
            puts "=> Fetching country tld list"
         | 
| 19 | 
            +
            country_tlds = JSON.parse(
         | 
| 20 | 
            +
              http_request(:get, "https://github.com/samayo/country-json/raw/master/src/country-by-domain-tld.json").body,
         | 
| 21 | 
            +
              symbolize_names: true
         | 
| 22 | 
            +
            )
         | 
| 23 | 
            +
            country_tlds = country_tlds
         | 
| 24 | 
            +
                           .reject {|info| info[:tld].nil? }
         | 
| 25 | 
            +
                           .map {|info| info[:tld].gsub(/^\./, "") }
         | 
| 26 | 
            +
             | 
| 27 | 
            +
            puts "=> Saving country_tlds.txt"
         | 
| 28 | 
            +
            save_file("country_tlds.txt", normalize_list(country_tlds))
         | 
| @@ -0,0 +1,235 @@ | |
| 1 | 
            +
            ad
         | 
| 2 | 
            +
            ae
         | 
| 3 | 
            +
            af
         | 
| 4 | 
            +
            ag
         | 
| 5 | 
            +
            ai
         | 
| 6 | 
            +
            al
         | 
| 7 | 
            +
            am
         | 
| 8 | 
            +
            an
         | 
| 9 | 
            +
            ao
         | 
| 10 | 
            +
            aq
         | 
| 11 | 
            +
            ar
         | 
| 12 | 
            +
            as
         | 
| 13 | 
            +
            at
         | 
| 14 | 
            +
            au
         | 
| 15 | 
            +
            aw
         | 
| 16 | 
            +
            az
         | 
| 17 | 
            +
            ba
         | 
| 18 | 
            +
            bb
         | 
| 19 | 
            +
            bd
         | 
| 20 | 
            +
            be
         | 
| 21 | 
            +
            bf
         | 
| 22 | 
            +
            bg
         | 
| 23 | 
            +
            bh
         | 
| 24 | 
            +
            bi
         | 
| 25 | 
            +
            bj
         | 
| 26 | 
            +
            bm
         | 
| 27 | 
            +
            bn
         | 
| 28 | 
            +
            bo
         | 
| 29 | 
            +
            br
         | 
| 30 | 
            +
            bs
         | 
| 31 | 
            +
            bt
         | 
| 32 | 
            +
            bv
         | 
| 33 | 
            +
            bw
         | 
| 34 | 
            +
            by
         | 
| 35 | 
            +
            bz
         | 
| 36 | 
            +
            ca
         | 
| 37 | 
            +
            cc
         | 
| 38 | 
            +
            cd
         | 
| 39 | 
            +
            cf
         | 
| 40 | 
            +
            cg
         | 
| 41 | 
            +
            ch
         | 
| 42 | 
            +
            ci
         | 
| 43 | 
            +
            ck
         | 
| 44 | 
            +
            cl
         | 
| 45 | 
            +
            cm
         | 
| 46 | 
            +
            cn
         | 
| 47 | 
            +
            co
         | 
| 48 | 
            +
            cr
         | 
| 49 | 
            +
            cu
         | 
| 50 | 
            +
            cv
         | 
| 51 | 
            +
            cx
         | 
| 52 | 
            +
            cy
         | 
| 53 | 
            +
            cz
         | 
| 54 | 
            +
            de
         | 
| 55 | 
            +
            dj
         | 
| 56 | 
            +
            dk
         | 
| 57 | 
            +
            dm
         | 
| 58 | 
            +
            do
         | 
| 59 | 
            +
            dz
         | 
| 60 | 
            +
            ec
         | 
| 61 | 
            +
            ee
         | 
| 62 | 
            +
            eg
         | 
| 63 | 
            +
            eh
         | 
| 64 | 
            +
            er
         | 
| 65 | 
            +
            es
         | 
| 66 | 
            +
            et
         | 
| 67 | 
            +
            fi
         | 
| 68 | 
            +
            fj
         | 
| 69 | 
            +
            fk
         | 
| 70 | 
            +
            fr
         | 
| 71 | 
            +
            ga
         | 
| 72 | 
            +
            gb
         | 
| 73 | 
            +
            gd
         | 
| 74 | 
            +
            ge
         | 
| 75 | 
            +
            gf
         | 
| 76 | 
            +
            gh
         | 
| 77 | 
            +
            gi
         | 
| 78 | 
            +
            gl
         | 
| 79 | 
            +
            gm
         | 
| 80 | 
            +
            gn
         | 
| 81 | 
            +
            gp
         | 
| 82 | 
            +
            gq
         | 
| 83 | 
            +
            gr
         | 
| 84 | 
            +
            gs
         | 
| 85 | 
            +
            gt
         | 
| 86 | 
            +
            gu
         | 
| 87 | 
            +
            gw
         | 
| 88 | 
            +
            gy
         | 
| 89 | 
            +
            hk
         | 
| 90 | 
            +
            hm
         | 
| 91 | 
            +
            hn
         | 
| 92 | 
            +
            hr
         | 
| 93 | 
            +
            ht
         | 
| 94 | 
            +
            hu
         | 
| 95 | 
            +
            id
         | 
| 96 | 
            +
            ie
         | 
| 97 | 
            +
            il
         | 
| 98 | 
            +
            in
         | 
| 99 | 
            +
            io
         | 
| 100 | 
            +
            iq
         | 
| 101 | 
            +
            ir
         | 
| 102 | 
            +
            is
         | 
| 103 | 
            +
            it
         | 
| 104 | 
            +
            jm
         | 
| 105 | 
            +
            jo
         | 
| 106 | 
            +
            jp
         | 
| 107 | 
            +
            ke
         | 
| 108 | 
            +
            kg
         | 
| 109 | 
            +
            kh
         | 
| 110 | 
            +
            ki
         | 
| 111 | 
            +
            km
         | 
| 112 | 
            +
            kn
         | 
| 113 | 
            +
            kp
         | 
| 114 | 
            +
            kr
         | 
| 115 | 
            +
            kw
         | 
| 116 | 
            +
            ky
         | 
| 117 | 
            +
            kz
         | 
| 118 | 
            +
            la
         | 
| 119 | 
            +
            lb
         | 
| 120 | 
            +
            lc
         | 
| 121 | 
            +
            li
         | 
| 122 | 
            +
            lk
         | 
| 123 | 
            +
            lr
         | 
| 124 | 
            +
            ls
         | 
| 125 | 
            +
            lt
         | 
| 126 | 
            +
            lu
         | 
| 127 | 
            +
            lv
         | 
| 128 | 
            +
            ly
         | 
| 129 | 
            +
            ma
         | 
| 130 | 
            +
            mc
         | 
| 131 | 
            +
            md
         | 
| 132 | 
            +
            mg
         | 
| 133 | 
            +
            mh
         | 
| 134 | 
            +
            mk
         | 
| 135 | 
            +
            ml
         | 
| 136 | 
            +
            mm
         | 
| 137 | 
            +
            mn
         | 
| 138 | 
            +
            mo
         | 
| 139 | 
            +
            mp
         | 
| 140 | 
            +
            mq
         | 
| 141 | 
            +
            mr
         | 
| 142 | 
            +
            ms
         | 
| 143 | 
            +
            mt
         | 
| 144 | 
            +
            mu
         | 
| 145 | 
            +
            mv
         | 
| 146 | 
            +
            mw
         | 
| 147 | 
            +
            mx
         | 
| 148 | 
            +
            my
         | 
| 149 | 
            +
            mz
         | 
| 150 | 
            +
            na
         | 
| 151 | 
            +
            nc
         | 
| 152 | 
            +
            ne
         | 
| 153 | 
            +
            nf
         | 
| 154 | 
            +
            ng
         | 
| 155 | 
            +
            ni
         | 
| 156 | 
            +
            nl
         | 
| 157 | 
            +
            no
         | 
| 158 | 
            +
            np
         | 
| 159 | 
            +
            nr
         | 
| 160 | 
            +
            nu
         | 
| 161 | 
            +
            nz
         | 
| 162 | 
            +
            om
         | 
| 163 | 
            +
            pa
         | 
| 164 | 
            +
            pe
         | 
| 165 | 
            +
            pf
         | 
| 166 | 
            +
            pg
         | 
| 167 | 
            +
            ph
         | 
| 168 | 
            +
            pk
         | 
| 169 | 
            +
            pl
         | 
| 170 | 
            +
            pm
         | 
| 171 | 
            +
            pn
         | 
| 172 | 
            +
            pr
         | 
| 173 | 
            +
            ps
         | 
| 174 | 
            +
            pt
         | 
| 175 | 
            +
            pw
         | 
| 176 | 
            +
            py
         | 
| 177 | 
            +
            qa
         | 
| 178 | 
            +
            re
         | 
| 179 | 
            +
            ro
         | 
| 180 | 
            +
            ru
         | 
| 181 | 
            +
            rw
         | 
| 182 | 
            +
            sa
         | 
| 183 | 
            +
            sb
         | 
| 184 | 
            +
            sc
         | 
| 185 | 
            +
            sd
         | 
| 186 | 
            +
            se
         | 
| 187 | 
            +
            sg
         | 
| 188 | 
            +
            sh
         | 
| 189 | 
            +
            si
         | 
| 190 | 
            +
            sj
         | 
| 191 | 
            +
            sk
         | 
| 192 | 
            +
            sl
         | 
| 193 | 
            +
            sm
         | 
| 194 | 
            +
            sn
         | 
| 195 | 
            +
            so
         | 
| 196 | 
            +
            sr
         | 
| 197 | 
            +
            ss
         | 
| 198 | 
            +
            st
         | 
| 199 | 
            +
            sv
         | 
| 200 | 
            +
            sy
         | 
| 201 | 
            +
            sz
         | 
| 202 | 
            +
            tc
         | 
| 203 | 
            +
            td
         | 
| 204 | 
            +
            tf
         | 
| 205 | 
            +
            tg
         | 
| 206 | 
            +
            th
         | 
| 207 | 
            +
            tj
         | 
| 208 | 
            +
            tk
         | 
| 209 | 
            +
            tl
         | 
| 210 | 
            +
            tm
         | 
| 211 | 
            +
            tn
         | 
| 212 | 
            +
            to
         | 
| 213 | 
            +
            tr
         | 
| 214 | 
            +
            tt
         | 
| 215 | 
            +
            tv
         | 
| 216 | 
            +
            tz
         | 
| 217 | 
            +
            ua
         | 
| 218 | 
            +
            ug
         | 
| 219 | 
            +
            us
         | 
| 220 | 
            +
            uy
         | 
| 221 | 
            +
            uz
         | 
| 222 | 
            +
            va
         | 
| 223 | 
            +
            vc
         | 
| 224 | 
            +
            ve
         | 
| 225 | 
            +
            vg
         | 
| 226 | 
            +
            vi
         | 
| 227 | 
            +
            vn
         | 
| 228 | 
            +
            vu
         | 
| 229 | 
            +
            wf
         | 
| 230 | 
            +
            ws
         | 
| 231 | 
            +
            ye
         | 
| 232 | 
            +
            yt
         | 
| 233 | 
            +
            za
         | 
| 234 | 
            +
            zm
         | 
| 235 | 
            +
            zw
         |