GeoIP Detection - Version 5.0.0

Version Description

If you are using AJAX mode, please read the changelog.

Download this release

Release Info

Developer benjamin4
Plugin Icon 128x128 GeoIP Detection
Version 5.0.0
Comparing to
See all releases

Code changes from version 4.2.3 to 5.0.0

Files changed (49) hide show
  1. admin-ui.php +18 -5
  2. ajax.php +1 -22
  3. api.php +24 -3
  4. composer.json +5 -3
  5. data-sources/auto.php +6 -3
  6. data-sources/header.php +48 -24
  7. data-sources/manual.php +3 -2
  8. data-sources/registry.php +1 -1
  9. filter.php +7 -2
  10. geoip-detect-lib.php +3 -1
  11. geoip-detect.php +4 -4
  12. js/body_classes.js +16 -3
  13. js/body_classes.test.js +69 -1
  14. js/dist/frontend.js +2 -0
  15. js/dist/frontend.js.map +1 -0
  16. js/frontend.js +5 -10
  17. js/lib/check-recursive.js +22 -0
  18. js/lib/events.js +21 -0
  19. js/lib/html.js +22 -17
  20. js/lib/localStorageAccess.js +5 -1
  21. js/lookup/get_info.js +98 -0
  22. js/lookup/get_info.test.js +11 -0
  23. js/lookup/override.js +117 -0
  24. js/lookup/override.test.js +87 -0
  25. js/lookup/storage.js +25 -0
  26. js/main.js +26 -0
  27. js/shortcodes/helpers.js +1 -1
  28. js/shortcodes/index.js +7 -2
  29. js/shortcodes/normal.js +13 -3
  30. js/shortcodes/onchange.js +48 -0
  31. js/shortcodes/show-if.js +10 -1
  32. js/shortcodes/show-if.test.js +6 -1
  33. lib/geonames/data/country-info.php +354 -354
  34. lib/geonames/data/country-names.php +266 -266
  35. package.json +24 -16
  36. readme.txt +30 -2
  37. shortcodes/_helpers.php +42 -2
  38. shortcodes/cf7.php +25 -2
  39. shortcodes/input.php +4 -1
  40. shortcodes/main.php +3 -1
  41. shortcodes/select.php +43 -11
  42. shortcodes/show_if.php +19 -9
  43. vendor/composer/ca-bundle/composer.json +1 -1
  44. vendor/composer/ca-bundle/res/cacert.pem +281 -484
  45. vendor/composer/ca-bundle/src/CaBundle.php +82 -4
  46. vendor/composer/installed.json +21 -7
  47. vendor/geoip2/geoip2/src/Model/AbstractModel.php +2 -0
  48. vendor/geoip2/geoip2/src/Record/AbstractRecord.php +1 -0
  49. views/lookup.php +15 -4
admin-ui.php CHANGED
@@ -59,6 +59,7 @@ function geoip_detect_lookup_page()
59
  $message = '';
60
  $action = isset($_POST['action']) ? sanitize_key($_POST['action']) : '';
61
  $ip = isset($_POST['ip']) ? sanitize_text_field($_POST['ip']) : '';
 
62
 
63
  if (geoip_detect_verify_nonce($action)) {
64
  switch($action) {
@@ -76,17 +77,16 @@ function geoip_detect_lookup_page()
76
  {
77
  $request_ip = geoip_detect_is_ip($ip) ? $ip : '';
78
  $request_skipCache = !empty($_POST['skip_cache']);
79
- $options = array('skipCache' => $request_skipCache);
 
80
 
81
  $request_locales = null;
82
  if (!empty($_POST['locales'])) {
83
  $request_locales = explode(',', sanitize_text_field($_POST['locales']));
84
  }
85
 
86
- $start = microtime(true);
87
- $ip_lookup_result = geoip_detect2_get_info_from_ip($request_ip, $request_locales, $options);
88
- $end = microtime(true);
89
- $ip_lookup_duration = $end - $start;
90
  }
91
  break;
92
  }
@@ -95,6 +95,19 @@ function geoip_detect_lookup_page()
95
  include_once(GEOIP_PLUGIN_DIR . '/views/lookup.php');
96
  }
97
 
 
 
 
 
 
 
 
 
 
 
 
 
 
98
  function geoip_detect_sanitize_option($opt_name, $opt_value, &$message = '') {
99
  $opt_value = sanitize_text_field($opt_value);
100
  switch($opt_name) {
59
  $message = '';
60
  $action = isset($_POST['action']) ? sanitize_key($_POST['action']) : '';
61
  $ip = isset($_POST['ip']) ? sanitize_text_field($_POST['ip']) : '';
62
+ $current_ip = geoip_detect2_get_client_ip();
63
 
64
  if (geoip_detect_verify_nonce($action)) {
65
  switch($action) {
77
  {
78
  $request_ip = geoip_detect_is_ip($ip) ? $ip : '';
79
  $request_skipCache = !empty($_POST['skip_cache']);
80
+ $request_skipLocalCache = !empty($_POST['skip_local_cache']);
81
+ $options = array('skipCache' => $request_skipCache, 'skipLocalCache' => $request_skipLocalCache);
82
 
83
  $request_locales = null;
84
  if (!empty($_POST['locales'])) {
85
  $request_locales = explode(',', sanitize_text_field($_POST['locales']));
86
  }
87
 
88
+ $ip_lookup_result = geoip_detect_lookup_page_timed_lookup($request_ip, $request_locales, $options, $current_ip, $ip_lookup_duration);
89
+ geoip_detect_lookup_page_timed_lookup($request_ip, $request_locales, $options, $current_ip, $ip_lookup_2nd_duration);
 
 
90
  }
91
  break;
92
  }
95
  include_once(GEOIP_PLUGIN_DIR . '/views/lookup.php');
96
  }
97
 
98
+ function geoip_detect_lookup_page_timed_lookup($request_ip, $request_locales, $options, $current_ip, &$ip_lookup_duration) {
99
+ $start = microtime(true);
100
+ if ($request_ip === $current_ip) {
101
+ $ip_lookup_result = geoip_detect2_get_info_from_current_ip($request_locales, $options);
102
+ } else {
103
+ $ip_lookup_result = geoip_detect2_get_info_from_ip($request_ip, $request_locales, $options);
104
+ }
105
+ $end = microtime(true);
106
+ $ip_lookup_duration = $end - $start;
107
+
108
+ return $ip_lookup_result;
109
+ }
110
+
111
  function geoip_detect_sanitize_option($opt_name, $opt_value, &$message = '') {
112
  $opt_value = sanitize_text_field($opt_value);
113
  switch($opt_name) {
ajax.php CHANGED
@@ -115,34 +115,13 @@ function _geoip_detect2_enqueue_javascript() {
115
  return true;
116
  }
117
 
118
- function _geoip_detect_parcel_get_dist_js($handle) {
119
- $urlFile = GEOIP_PLUGIN_DIR . '/js/dist/parcel.json';
120
- if (!is_readable($urlFile)) return false;
121
-
122
- $json = file_get_contents($urlFile);
123
- $urls = json_decode($json, true);
124
-
125
- if (isset($urls[$handle]))
126
- return '/js/dist/' .$urls[$handle];
127
- return false;
128
- }
129
-
130
  function _geoip_detect_register_javascript() {
131
  // What about CORS usage?
132
  // if (!get_option('geoip-detect-ajax_enabled')) {
133
  // return;
134
  // }
135
 
136
- $file_uri = _geoip_detect_parcel_get_dist_js('frontendJS');
137
- if (!$file_uri) {
138
- if (WP_DEBUG) {
139
- trigger_error('Warning by the geoip-detect-Plugin: the file frontend.js could not be found, JS API will not work.', E_USER_NOTICE);
140
- die();
141
- }
142
- return;
143
- }
144
-
145
- wp_register_script('geoip-detect-js', GEOIP_DETECT_PLUGIN_URI . $file_uri, array(), GEOIP_DETECT_VERSION, true);
146
  $data = [
147
  'ajaxurl' => admin_url('/admin-ajax.php'),
148
  'default_locales' => apply_filters('geoip_detect2_locales', null),
115
  return true;
116
  }
117
 
 
 
 
 
 
 
 
 
 
 
 
 
118
  function _geoip_detect_register_javascript() {
119
  // What about CORS usage?
120
  // if (!get_option('geoip-detect-ajax_enabled')) {
121
  // return;
122
  // }
123
 
124
+ wp_register_script('geoip-detect-js', GEOIP_DETECT_PLUGIN_URI . 'js/dist/frontend.js', array(), GEOIP_DETECT_VERSION, true);
 
 
 
 
 
 
 
 
 
125
  $data = [
126
  'ajaxurl' => admin_url('/admin-ajax.php'),
127
  'default_locales' => apply_filters('geoip_detect2_locales', null),
api.php CHANGED
@@ -132,19 +132,40 @@ function geoip_detect2_get_info_from_ip(string $ip, $locales = null, $options =
132
  * @param array(string) $locales List of locale codes to use in name property
133
  * from most preferred to least preferred. (Default: Site language, en)
134
  * @param array Property names with options.
135
- * @param boolean $skipCache TRUE: Do not use cache for this request. (Default: FALSE)
 
136
  * @param string $source Change the source for this request only. (Valid values: 'auto', 'manual', 'precision', 'header', 'hostinfo')
137
  * @param float $timeout Total transaction timeout in seconds (Precision+HostIP.info API only)
138
  * @param int $connectTimeout Initial connection timeout in seconds (Precision API only)
139
- * @return YellowTree\GeoipDetect\DataSources\City GeoInformation.
140
  *
141
  * @since 2.0.0
142
  * @since 2.4.0 New parameter $skipCache
143
  * @since 2.5.0 Parameter $skipCache has been renamed to $options with 'skipCache' property
144
  * @since 2.7.0 Parameter $options['source'] has been introduced
 
145
  */
146
  function geoip_detect2_get_info_from_current_ip($locales = null, $options = array()) {
147
- return geoip_detect2_get_info_from_ip(geoip_detect2_get_client_ip(), $locales, $options);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
148
  }
149
 
150
 
132
  * @param array(string) $locales List of locale codes to use in name property
133
  * from most preferred to least preferred. (Default: Site language, en)
134
  * @param array Property names with options.
135
+ * @param boolean $skipCache TRUE: Do not use persistent cache for this request. (Default: FALSE)
136
+ * @param boolean $skipLocalCache TRUE: Do not use caching in memory (Default: FALSE)
137
  * @param string $source Change the source for this request only. (Valid values: 'auto', 'manual', 'precision', 'header', 'hostinfo')
138
  * @param float $timeout Total transaction timeout in seconds (Precision+HostIP.info API only)
139
  * @param int $connectTimeout Initial connection timeout in seconds (Precision API only)
140
+ * @return \YellowTree\GeoipDetect\DataSources\City GeoInformation.
141
  *
142
  * @since 2.0.0
143
  * @since 2.4.0 New parameter $skipCache
144
  * @since 2.5.0 Parameter $skipCache has been renamed to $options with 'skipCache' property
145
  * @since 2.7.0 Parameter $options['source'] has been introduced
146
+ * @since 5.0.0 The result of this function is cached for the duration of the PHP execution (except if you use skipLocalCache)
147
  */
148
  function geoip_detect2_get_info_from_current_ip($locales = null, $options = array()) {
149
+ /** @var \YellowTree\GeoipDetect\DataSources\City */
150
+ static $cache = null;
151
+
152
+ if (empty($options['skipLocalCache'])) {
153
+ if (!is_null($cache)) {
154
+ $locales = apply_filters('geoip_detect2_locales', $locales);
155
+ $data = $cache->jsonSerialize();
156
+ $data = apply_filters('geoip_detect2_record_data_override_lookup', $data, $cache->traits->ipAddress, $options);
157
+ $data = apply_filters('geoip_detect2_record_data_after_cache', $data, $cache->traits->ipAddress);
158
+ $record = new \YellowTree\GeoipDetect\DataSources\City($data, $locales);
159
+ return $record;
160
+ }
161
+ }
162
+
163
+ $ret = geoip_detect2_get_info_from_ip(geoip_detect2_get_client_ip(), $locales, $options);
164
+ if (empty($options['skipLocalCache'])) {
165
+ $cache = $ret;
166
+ }
167
+
168
+ return $ret;
169
  }
170
 
171
 
composer.json CHANGED
@@ -22,10 +22,12 @@
22
  },
23
  "require-dev": {
24
  "phpunit/phpunit": "7.5.20",
25
- "roots/wordpress": "5.8",
26
- "wp-phpunit/wp-phpunit": "5.7.2"
 
27
  },
28
  "scripts": {
29
- "test": "phpunit"
 
30
  }
31
  }
22
  },
23
  "require-dev": {
24
  "phpunit/phpunit": "7.5.20",
25
+ "roots/wordpress": "5.8.2",
26
+ "wp-phpunit/wp-phpunit": "5.8.2",
27
+ "yoast/phpunit-polyfills": "1.0.3"
28
  },
29
  "scripts": {
30
+ "test": "phpunit",
31
+ "install-test": "composer install --ignore-platform-reqs"
32
  }
33
  }
data-sources/auto.php CHANGED
@@ -116,7 +116,7 @@ HTML;
116
 
117
  public function maxmindGetFilename() {
118
  $data_filename = $this->maxmindGetUploadFilename();
119
- if (!is_readable($data_filename))
120
  $data_filename = '';
121
 
122
  /**
@@ -215,6 +215,9 @@ HTML;
215
  if (!is_readable($outFile)) {
216
  return 'Error: Something went wrong: the unpacked file cannot be found.';
217
  }
 
 
 
218
 
219
  update_option('geoip-detect-auto_downloaded_file', '');
220
  unlink($tmpFile);
@@ -224,7 +227,7 @@ HTML;
224
 
225
  // Ungzip File
226
  protected function unpackArchive($downloadedFilename, $outFile) {
227
- if (!is_readable($downloadedFilename))
228
  return __('Downloaded file could not be opened for reading.', 'geoip-detect');
229
  if (!\is_writable(dirname($outFile)))
230
  return sprintf(__('Database could not be written (%s).', 'geoip-detect'), $outFile);
@@ -264,7 +267,7 @@ HTML;
264
  }
265
  }
266
 
267
- if (!\is_readable($inFile))
268
  return __('Downloaded file could not be opened for reading.', 'geoip-detect');
269
 
270
  $ret = copy($inFile, $outFile);
116
 
117
  public function maxmindGetFilename() {
118
  $data_filename = $this->maxmindGetUploadFilename();
119
+ if (!is_readable($data_filename) || !is_file($data_filename))
120
  $data_filename = '';
121
 
122
  /**
215
  if (!is_readable($outFile)) {
216
  return 'Error: Something went wrong: the unpacked file cannot be found.';
217
  }
218
+ if (!is_file($outFile)) {
219
+ return 'Error: Something went wrong: the unpacked file is a folder.';
220
+ }
221
 
222
  update_option('geoip-detect-auto_downloaded_file', '');
223
  unlink($tmpFile);
227
 
228
  // Ungzip File
229
  protected function unpackArchive($downloadedFilename, $outFile) {
230
+ if (!is_readable($downloadedFilename) || !is_file($downloadedFilename))
231
  return __('Downloaded file could not be opened for reading.', 'geoip-detect');
232
  if (!\is_writable(dirname($outFile)))
233
  return sprintf(__('Database could not be written (%s).', 'geoip-detect'), $outFile);
267
  }
268
  }
269
 
270
+ if (!\is_readable($inFile) || !\is_file($inFile))
271
  return __('Downloaded file could not be opened for reading.', 'geoip-detect');
272
 
273
  $ret = copy($inFile, $outFile);
data-sources/header.php CHANGED
@@ -30,28 +30,45 @@ class HeaderReader extends \YellowTree\GeoipDetect\DataSources\AbstractReader {
30
  );
31
 
32
  public function country($ip) {
33
-
34
- $r = array();
35
 
36
  $isoCode = '';
37
- switch ($this->options['provider']) {
38
- case 'aws':
39
- if (isset($_SERVER['CloudFront-Viewer-Country'])) {
40
- $isoCode = $_SERVER['CloudFront-Viewer-Country'];
41
- }
42
- break;
43
-
44
- case 'cloudflare';
45
- if (isset($_SERVER["HTTP_CF_IPCOUNTRY"])) {
46
- $isoCode = $_SERVER["HTTP_CF_IPCOUNTRY"];
47
- if ($isoCode == 'xx' /* not a country / unknown */)
48
- $isoCode = '';
49
- }
50
- break;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
51
  }
52
- $country = '';
53
  if (!$isoCode) {
54
- return _geoip_detect2_get_new_empty_record();
 
 
 
 
55
  }
56
 
57
  $r['country']['iso_code'] = strtoupper($isoCode);
@@ -67,9 +84,9 @@ class HeaderReader extends \YellowTree\GeoipDetect\DataSources\AbstractReader {
67
  class HeaderDataSource extends AbstractDataSource {
68
 
69
  public function getId() { return 'header'; }
70
- public function getLabel() { return __('Special Hosting Providers (Cloudflare, Amazon AWS CloudFront)', 'geoip-detect'); }
71
 
72
- public function getDescriptionHTML() { return __('These servers already do geodetection, but only of the visitor\'s country.', 'geoip-detect'); }
73
 
74
  public function getStatusInformationHTML() {
75
  $provider = get_option('geoip-detect-header-provider');
@@ -80,22 +97,28 @@ class HeaderDataSource extends AbstractDataSource {
80
  $link = 'https://support.cloudflare.com/hc/en-us/articles/200168236-What-does-CloudFlare-IP-Geolocation-do-';
81
  } elseif ($provider == 'aws') {
82
  $link = 'https://aws.amazon.com/blogs/aws/enhanced-cloudfront-customization/';
 
 
 
 
 
83
  }
84
- if ($link)
85
- $html = sprintf(__('This needs to be enabled in the admin panel: see <a href="%s">Help</a>.', 'geoip-detect'), $link);
86
  return $html;
87
  }
88
 
89
  public function getParameterHTML() {
90
  $provider = get_option('geoip-detect-header-provider');
91
- $checked_cloudflare = $provider == 'cloudflare' ? 'checked' : '';
92
- $checked_aws = $provider == 'aws' ? 'checked' : '';
 
93
 
94
  $label = __('Which Hosting Provider:', 'geoip-detect');
 
95
  $html = <<<HTML
96
  <p>$label<br>
97
  <label><input type="radio" name="options_header[provider]" value="cloudflare" $checked_cloudflare /> Cloudflare</label>
98
  <label><input type="radio" name="options_header[provider]" value="aws" $checked_aws /> Amazon AWS CloudFront</label>
 
99
  </p>
100
  <br />
101
  HTML;
@@ -120,6 +143,7 @@ HTML;
120
  '' => __('None', 'geoip-detect'),
121
  'aws' => 'Amazon AWS CloudFront',
122
  'cloudflare' => 'Cloudflare',
 
123
  );
124
  if (!isset($labels[$provider]))
125
  $provider = '';
30
  );
31
 
32
  public function country($ip) {
33
+ $r = [];
 
34
 
35
  $isoCode = '';
36
+
37
+ $provider = [
38
+ 'aws' => 'CloudFront-Viewer-Country',
39
+ 'cloudflare' => 'HTTP_CF_IPCOUNTRY',
40
+ ];
41
+
42
+ $httpKey = '';
43
+ if (isset($provider[ $this->options['provider'] ])) {
44
+ $httpKey = $provider[ $this->options['provider'] ];
45
+ };
46
+
47
+ /**
48
+ * Customize which key in the $_SERVER array (Request headers) should be used for Geo-Detection
49
+ * The country should be given in 2-letter ISO 3166-1 codes, uppercase (DE) or lowercase (de).
50
+ *
51
+ * @param string $httpKey
52
+ * @param string $selectedProvider
53
+ * @api
54
+ * @see https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2#Officially_assigned_code_elements
55
+ *
56
+ */
57
+ $httpKey = apply_filters('geoip_detect2_source_header_http_key', $httpKey, $this->options['provider'] );
58
+
59
+ if (isset($_SERVER[$httpKey])) {
60
+ $isoCode = $_SERVER[$httpKey];
61
+ if (strtoupper($isoCode) == 'XX' /* Not a country / unknown */) {
62
+ $isoCode = '';
63
+ }
64
  }
65
+
66
  if (!$isoCode) {
67
+ return _geoip_detect2_get_new_empty_record($ip);
68
+ }
69
+ if (mb_strlen($isoCode) !== 2) {
70
+ $errorMessage = 'Invalid country code' . (WP_DEBUG ? (': "' . $isoCode . '"') : '.');
71
+ return _geoip_detect2_get_new_empty_record($ip, $errorMessage);
72
  }
73
 
74
  $r['country']['iso_code'] = strtoupper($isoCode);
84
  class HeaderDataSource extends AbstractDataSource {
85
 
86
  public function getId() { return 'header'; }
87
+ public function getLabel() { return __('Special Hosting Providers (Cloudflare, Amazon AWS CloudFront, or other)', 'geoip-detect'); }
88
 
89
+ public function getDescriptionHTML() { return __('These servers already do a geodetection of the visitor\'s country.', 'geoip-detect'); }
90
 
91
  public function getStatusInformationHTML() {
92
  $provider = get_option('geoip-detect-header-provider');
97
  $link = 'https://support.cloudflare.com/hc/en-us/articles/200168236-What-does-CloudFlare-IP-Geolocation-do-';
98
  } elseif ($provider == 'aws') {
99
  $link = 'https://aws.amazon.com/blogs/aws/enhanced-cloudfront-customization/';
100
+ } elseif ($provider == 'other') {
101
+ $html = __('If your reverse proxy sends the detected country as a 2-letter ISO 3166-1 code, you can configure the name of the request header via the wordpress filter "geoip_detect2_source_header_http_key".', 'geoip-detect');
102
+ }
103
+ if ($link) {
104
+ $html = sprintf(__('This needs to be enabled in the admin panel: see <a href="%s">Help</a>.', 'geoip-detect'), $link);
105
  }
 
 
106
  return $html;
107
  }
108
 
109
  public function getParameterHTML() {
110
  $provider = get_option('geoip-detect-header-provider');
111
+ $checked_cloudflare = $provider === 'cloudflare' ? 'checked' : '';
112
+ $checked_aws = $provider === 'aws' ? 'checked' : '';
113
+ $checked_other = $provider === 'other' ? 'checked' : '';
114
 
115
  $label = __('Which Hosting Provider:', 'geoip-detect');
116
+ $label_other = __('Custom', 'geoip-detect');
117
  $html = <<<HTML
118
  <p>$label<br>
119
  <label><input type="radio" name="options_header[provider]" value="cloudflare" $checked_cloudflare /> Cloudflare</label>
120
  <label><input type="radio" name="options_header[provider]" value="aws" $checked_aws /> Amazon AWS CloudFront</label>
121
+ <label><input type="radio" name="options_header[provider]" value="other" $checked_other /> $label_other</label>
122
  </p>
123
  <br />
124
  HTML;
143
  '' => __('None', 'geoip-detect'),
144
  'aws' => 'Amazon AWS CloudFront',
145
  'cloudflare' => 'Cloudflare',
146
+ 'other' => __('Custom', 'geoip-detect'),
147
  );
148
  if (!isset($labels[$provider]))
149
  $provider = '';
data-sources/manual.php CHANGED
@@ -220,7 +220,7 @@ HTML;
220
 
221
  public function isWorking() {
222
  $filename = $this->maxmindGetFilename();
223
- if (!is_readable($filename))
224
  return false;
225
 
226
  return true;
@@ -249,8 +249,9 @@ HTML;
249
  if (file_exists(ABSPATH . $filename))
250
  $filename = ABSPATH . $filename;
251
 
252
- if (!is_readable($filename))
253
  return '';
 
254
 
255
  try {
256
  $reader = new \GeoIp2\Database\Reader($filename);
220
 
221
  public function isWorking() {
222
  $filename = $this->maxmindGetFilename();
223
+ if (!is_readable($filename) || !is_file($filename))
224
  return false;
225
 
226
  return true;
249
  if (file_exists(ABSPATH . $filename))
250
  $filename = ABSPATH . $filename;
251
 
252
+ if (!is_readable($filename) || !is_file($filename)) {
253
  return '';
254
+ }
255
 
256
  try {
257
  $reader = new \GeoIp2\Database\Reader($filename);
data-sources/registry.php CHANGED
@@ -71,7 +71,7 @@ class DataSourceRegistry {
71
  if (isset($this->sources[$id]))
72
  return $this->sources[$id];
73
 
74
- if (WP_DEBUG) {
75
  trigger_error('The source with id "' . $id . '" was requested, but no such source was found. Using default source instead.', E_USER_NOTICE);
76
  }
77
 
71
  if (isset($this->sources[$id]))
72
  return $this->sources[$id];
73
 
74
+ if (WP_DEBUG && $id !== '') {
75
  trigger_error('The source with id "' . $id . '" was requested, but no such source was found. Using default source instead.', E_USER_NOTICE);
76
  }
77
 
filter.php CHANGED
@@ -36,8 +36,13 @@ function geoip_detect2_get_body_classes() {
36
  if ($info->country->isoCode)
37
  $classes[] = 'geoip-country-' . $info->country->isoCode;
38
 
39
- if ($info->country->isInEuropeanUnion)
40
- $classes[] = 'geoip-country-is-in-european-union';
 
 
 
 
 
41
 
42
  if ($info->mostSpecificSubdivision->isoCode)
43
  $classes[] = 'geoip-province-' . $info->mostSpecificSubdivision->isoCode;
36
  if ($info->country->isoCode)
37
  $classes[] = 'geoip-country-' . $info->country->isoCode;
38
 
39
+ try {
40
+ // This attribute was added in later
41
+ if ($info->country->isInEuropeanUnion)
42
+ $classes[] = 'geoip-country-is-in-european-union';
43
+ } catch (\Exception $e) {
44
+ // ignore
45
+ }
46
 
47
  if ($info->mostSpecificSubdivision->isoCode)
48
  $classes[] = 'geoip-province-' . $info->mostSpecificSubdivision->isoCode;
geoip-detect-lib.php CHANGED
@@ -448,11 +448,13 @@ function _geoip_detect2_get_external_ip_services(int $nb = 3, bool $needsCORS =
448
  $ipservicesThatAllowCORS = array(
449
  'http://ipv4.icanhazip.com',
450
  'http://v4.ident.me',
 
451
  );
452
  $ipservicesWithoutCORS = array(
453
  'http://ipecho.net/plain',
454
- 'http://bot.whatismyipaddress.com',
455
  );
 
456
 
457
  $ipservices = $ipservicesThatAllowCORS;
458
  if (!$needsCORS) {
448
  $ipservicesThatAllowCORS = array(
449
  'http://ipv4.icanhazip.com',
450
  'http://v4.ident.me',
451
+ 'http://ipinfo.io/ip',
452
  );
453
  $ipservicesWithoutCORS = array(
454
  'http://ipecho.net/plain',
455
+ 'https://api.ipify.org',
456
  );
457
+ // Also possible with parsing: http://checkip.dyndns.org
458
 
459
  $ipservices = $ipservicesThatAllowCORS;
460
  if (!$needsCORS) {
geoip-detect.php CHANGED
@@ -5,18 +5,18 @@ Plugin URI: http://www.yellowtree.de
5
  Description: Retrieving Geo-Information using the Maxmind GeoIP (Lite) Database.
6
  Author: Yellow Tree (Benjamin Pick)
7
  Author URI: http://www.yellowtree.de
8
- Version: 4.2.3
9
  License: GPLv3 or later
10
  License URI: http://www.gnu.org/licenses/gpl-3.0.html
11
  Text Domain: geoip-detect
12
  Domain Path: /languages
13
  GitHub Plugin URI: https://github.com/yellowtree/geoip-detect
14
  GitHub Branch: master
15
- Requires WP: 5.0
16
  Requires PHP: 7.2.5
17
  */
18
 
19
- define('GEOIP_DETECT_VERSION', '4.2.3');
20
 
21
  /*
22
  Copyright 2013-2021 Yellow Tree, Siegen, Germany
@@ -39,7 +39,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
39
 
40
  define('GEOIP_REQUIRED_PHP_VERSION', '7.2.5');
41
 
42
- // In theory, it should still run in 3.5 . But officially supported is only WP 5.0 and above.
43
  define('GEOIP_REQUIRED_WP_VERSION', '3.5');
44
 
45
  // We need this requirement because WooCommerce hardcoded Maxmind code instead of using composer. This would result in an PHP fatal error when there is a lookup.
5
  Description: Retrieving Geo-Information using the Maxmind GeoIP (Lite) Database.
6
  Author: Yellow Tree (Benjamin Pick)
7
  Author URI: http://www.yellowtree.de
8
+ Version: 5.0.0
9
  License: GPLv3 or later
10
  License URI: http://www.gnu.org/licenses/gpl-3.0.html
11
  Text Domain: geoip-detect
12
  Domain Path: /languages
13
  GitHub Plugin URI: https://github.com/yellowtree/geoip-detect
14
  GitHub Branch: master
15
+ Requires WP: 5.4
16
  Requires PHP: 7.2.5
17
  */
18
 
19
+ define('GEOIP_DETECT_VERSION', '5.0.0');
20
 
21
  /*
22
  Copyright 2013-2021 Yellow Tree, Siegen, Germany
39
 
40
  define('GEOIP_REQUIRED_PHP_VERSION', '7.2.5');
41
 
42
+ // In theory, it should still run in 3.5 . But officially supported is only WP 5.4 and above.
43
  define('GEOIP_REQUIRED_WP_VERSION', '3.5');
44
 
45
  // We need this requirement because WooCommerce hardcoded Maxmind code instead of using composer. This would result in an PHP fatal error when there is a lookup.
js/body_classes.js CHANGED
@@ -1,5 +1,5 @@
1
  import { domReady } from './lib/html';
2
- import { get_info } from './lookup';
3
 
4
  export function calc_classes(record) {
5
  return {
@@ -10,6 +10,11 @@ export function calc_classes(record) {
10
  };
11
  }
12
 
 
 
 
 
 
13
  export async function add_body_classes() {
14
  const record = await get_info();
15
 
@@ -18,11 +23,19 @@ export async function add_body_classes() {
18
  return;
19
  }
20
 
21
- const css_classes = calc_classes(record);
22
-
23
  await domReady;
24
 
 
 
 
 
 
 
25
  const body = document.getElementsByTagName('body')[0];
 
 
 
 
26
  for (let key of Object.keys(css_classes)) {
27
  const value = css_classes[key];
28
  if (value) {
1
  import { domReady } from './lib/html';
2
+ import { get_info } from './lookup/get_info';
3
 
4
  export function calc_classes(record) {
5
  return {
10
  };
11
  }
12
 
13
+ function remove_css_classes_by_prefix(el, prefix) {
14
+ const classes = el.className.split(" ").filter(c => !c.startsWith(prefix));
15
+ el.className = classes.join(" ").trim();
16
+ }
17
+
18
  export async function add_body_classes() {
19
  const record = await get_info();
20
 
23
  return;
24
  }
25
 
 
 
26
  await domReady;
27
 
28
+ add_classes_to_body(record);
29
+ }
30
+
31
+ export function add_classes_to_body(record) {
32
+ const css_classes = calc_classes(record);
33
+
34
  const body = document.getElementsByTagName('body')[0];
35
+
36
+ // Remove old classes in case there are any
37
+ remove_css_classes_by_prefix(body, 'geoip-');
38
+
39
  for (let key of Object.keys(css_classes)) {
40
  const value = css_classes[key];
41
  if (value) {
js/body_classes.test.js CHANGED
@@ -3,8 +3,12 @@
3
  */
4
 
5
  import { getTestRecord, getTestRecordError } from "./test-lib/test-records";
6
- import { calc_classes } from "./body_classes";
7
  import Record from "./models/record";
 
 
 
 
8
 
9
  const emptyRecord = new Record();
10
  const defaultRecord = getTestRecord();
@@ -29,5 +33,69 @@ test('calc_classes', () => {
29
  "country-is-in-european-union": false,
30
  "province": "",
31
  });
 
32
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
33
  });
3
  */
4
 
5
  import { getTestRecord, getTestRecordError } from "./test-lib/test-records";
6
+ import { add_classes_to_body, calc_classes } from "./body_classes";
7
  import Record from "./models/record";
8
+ import { set_override_with_merge } from "./lookup/override";
9
+ import { options } from './lookup/get_info';
10
+ import { domReady, isUnitTesting } from "./lib/html";
11
+ import { get_info_stored_locally_record } from "./lookup/storage";
12
 
13
  const emptyRecord = new Record();
14
  const defaultRecord = getTestRecord();
33
  "country-is-in-european-union": false,
34
  "province": "",
35
  });
36
+ });
37
 
38
+ const waitSomeTime = time => new Promise(resolve => {
39
+ setTimeout(resolve, time);
40
+ });
41
+
42
+ test('body css_classes with override', async () => {
43
+ expect(isUnitTesting()).toBe(true);
44
+
45
+ const body = document.getElementsByTagName('body')[0];
46
+
47
+ add_classes_to_body(defaultRecord);
48
+
49
+ expect(body.classList.contains('geoip-country-DE')).toBe(true);
50
+ expect(body.classList.contains('geoip-country-FR')).toBe(false);
51
+
52
+ // No automatic body classes
53
+ options.do_body_classes = false;
54
+ set_override_with_merge('country.iso_code', 'FR');
55
+ await waitSomeTime(100);
56
+
57
+ let record = get_info_stored_locally_record();
58
+
59
+ expect(record.get_country_iso()).toBe('fr');
60
+ expect(body.classList.contains('geoip-country-DE')).toBe(true);
61
+ expect(body.classList.contains('geoip-country-FR')).toBe(false);
62
+
63
+ // Body classes should be automatic
64
+ options.do_body_classes = true;
65
+ set_override_with_merge('country.iso_code', 'IT');
66
+ await waitSomeTime(100);
67
+
68
+ record = get_info_stored_locally_record();
69
+ expect(record.get_country_iso()).toBe('it');
70
+
71
+ expect(body.classList.contains('geoip-country-DE')).toBe(false);
72
+ expect(body.classList.contains('geoip-country-FR')).toBe(false);
73
+ expect(body.classList.contains('geoip-country-IT')).toBe(true);
74
+ });
75
+
76
+ test('ddd body css_classes with reevaluate test', async () => {
77
+ const body = document.getElementsByTagName('body')[0];
78
+
79
+ add_classes_to_body(defaultRecord);
80
+
81
+ expect(body.classList.contains('geoip-country-DE')).toBe(true);
82
+ expect(body.classList.contains('geoip-country-FR')).toBe(false);
83
+
84
+ // Body classes should be skipped
85
+ set_override_with_merge('country.iso_code', 'CZ', { reevaluate: false });
86
+ await waitSomeTime(100);
87
+
88
+ let record = get_info_stored_locally_record();
89
+ expect(record.get_country_iso()).toBe('cz');
90
+ expect(body.classList.contains('geoip-country-DE')).toBe(true);
91
+ expect(body.classList.contains('geoip-country-CZ')).toBe(false);
92
+
93
+ // Body classes should now be evaluated even though there is no change in data (because the change of CZ was not applied yet)
94
+ set_override_with_merge('country.iso_code', 'CZ', { reevaluate: true });
95
+ await waitSomeTime(100);
96
+
97
+ record = get_info_stored_locally_record();
98
+ expect(record.get_country_iso()).toBe('cz');
99
+ expect(body.classList.contains('geoip-country-DE')).toBe(false);
100
+ expect(body.classList.contains('geoip-country-CZ')).toBe(true);
101
  });
js/dist/frontend.js ADDED
@@ -0,0 +1,2 @@
 
 
1
+ !function(){function t(t){return t&&t.__esModule?t.default:t}function e(t,e,r,n,o,i,a){try{var c=t[i](a),u=c.value}catch(t){return void r(t)}c.done?e(u):Promise.resolve(u).then(n,o)}function r(t){return function(){var r=this,n=arguments;return new Promise((function(o,i){var a=t.apply(r,n);function c(t){e(a,o,i,c,u,"next",t)}function u(t){e(a,o,i,c,u,"throw",t)}c(void 0)}))}}function n(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}function o(t,e,r){return e in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function i(t){return t&&t.constructor===Symbol?"symbol":typeof t}var a={},c=function(t){var e,r=Object.prototype,n=r.hasOwnProperty,o="function"==typeof Symbol?Symbol:{},i=o.iterator||"@@iterator",a=o.asyncIterator||"@@asyncIterator",c=o.toStringTag||"@@toStringTag";function u(t,e,r){return Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}),t[e]}try{u({},"")}catch(t){u=function(t,e,r){return t[e]=r}}function s(t,e,r,n){var o=e&&e.prototype instanceof y?e:y,i=Object.create(o.prototype),a=new A(n||[]);return i._invoke=function(t,e,r){var n=f;return function(o,i){if(n===d)throw new Error("Generator is already running");if(n===h){if("throw"===o)throw i;return T()}for(r.method=o,r.arg=i;;){var a=r.delegate;if(a){var c=L(a,r);if(c){if(c===v)continue;return c}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if(n===f)throw n=h,r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);n=d;var u=l(t,e,r);if("normal"===u.type){if(n=r.done?h:p,u.arg===v)continue;return{value:u.arg,done:r.done}}"throw"===u.type&&(n=h,r.method="throw",r.arg=u.arg)}}}(t,r,a),i}function l(t,e,r){try{return{type:"normal",arg:t.call(e,r)}}catch(t){return{type:"throw",arg:t}}}t.wrap=s;var f="suspendedStart",p="suspendedYield",d="executing",h="completed",v={};function y(){}function g(){}function m(){}var _={};u(_,i,(function(){return this}));var w=Object.getPrototypeOf,b=w&&w(w(O([])));b&&b!==r&&n.call(b,i)&&(_=b);var x=m.prototype=y.prototype=Object.create(_);function k(t){["next","throw","return"].forEach((function(e){u(t,e,(function(t){return this._invoke(e,t)}))}))}function E(t,e){function r(o,i,a,c){var u=l(t[o],t,i);if("throw"!==u.type){var s=u.arg,f=s.value;return f&&"object"==typeof f&&n.call(f,"__await")?e.resolve(f.__await).then((function(t){r("next",t,a,c)}),(function(t){r("throw",t,a,c)})):e.resolve(f).then((function(t){s.value=t,a(s)}),(function(t){return r("throw",t,a,c)}))}c(u.arg)}var o;this._invoke=function(t,n){function i(){return new e((function(e,o){r(t,n,e,o)}))}return o=o?o.then(i,i):i()}}function L(t,r){var n=t.iterator[r.method];if(n===e){if(r.delegate=null,"throw"===r.method){if(t.iterator.return&&(r.method="return",r.arg=e,L(t,r),"throw"===r.method))return v;r.method="throw",r.arg=new TypeError("The iterator does not provide a 'throw' method")}return v}var o=l(n,t.iterator,r.arg);if("throw"===o.type)return r.method="throw",r.arg=o.arg,r.delegate=null,v;var i=o.arg;return i?i.done?(r[t.resultName]=i.value,r.next=t.nextLoc,"return"!==r.method&&(r.method="next",r.arg=e),r.delegate=null,v):i:(r.method="throw",r.arg=new TypeError("iterator result is not an object"),r.delegate=null,v)}function j(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.finallyLoc=t[2],e.afterLoc=t[3]),this.tryEntries.push(e)}function S(t){var e=t.completion||{};e.type="normal",delete e.arg,t.completion=e}function A(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(j,this),this.reset(!0)}function O(t){if(t){var r=t[i];if(r)return r.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var o=-1,a=function r(){for(;++o<t.length;)if(n.call(t,o))return r.value=t[o],r.done=!1,r;return r.value=e,r.done=!0,r};return a.next=a}}return{next:T}}function T(){return{value:e,done:!0}}return g.prototype=m,u(x,"constructor",m),u(m,"constructor",g),g.displayName=u(m,c,"GeneratorFunction"),t.isGeneratorFunction=function(t){var e="function"==typeof t&&t.constructor;return!!e&&(e===g||"GeneratorFunction"===(e.displayName||e.name))},t.mark=function(t){return Object.setPrototypeOf?Object.setPrototypeOf(t,m):(t.__proto__=m,u(t,c,"GeneratorFunction")),t.prototype=Object.create(x),t},t.awrap=function(t){return{__await:t}},k(E.prototype),u(E.prototype,a,(function(){return this})),t.AsyncIterator=E,t.async=function(e,r,n,o,i){void 0===i&&(i=Promise);var a=new E(s(e,r,n,o),i);return t.isGeneratorFunction(r)?a:a.next().then((function(t){return t.done?t.value:a.next()}))},k(x),u(x,c,"Generator"),u(x,i,(function(){return this})),u(x,"toString",(function(){return"[object Generator]"})),t.keys=function(t){var e=[];for(var r in t)e.push(r);return e.reverse(),function r(){for(;e.length;){var n=e.pop();if(n in t)return r.value=n,r.done=!1,r}return r.done=!0,r}},t.values=O,A.prototype={constructor:A,reset:function(t){if(this.prev=0,this.next=0,this.sent=this._sent=e,this.done=!1,this.delegate=null,this.method="next",this.arg=e,this.tryEntries.forEach(S),!t)for(var r in this)"t"===r.charAt(0)&&n.call(this,r)&&!isNaN(+r.slice(1))&&(this[r]=e)},stop:function(){this.done=!0;var t=this.tryEntries[0].completion;if("throw"===t.type)throw t.arg;return this.rval},dispatchException:function(t){if(this.done)throw t;var r=this;function o(n,o){return c.type="throw",c.arg=t,r.next=n,o&&(r.method="next",r.arg=e),!!o}for(var i=this.tryEntries.length-1;i>=0;--i){var a=this.tryEntries[i],c=a.completion;if("root"===a.tryLoc)return o("end");if(a.tryLoc<=this.prev){var u=n.call(a,"catchLoc"),s=n.call(a,"finallyLoc");if(u&&s){if(this.prev<a.catchLoc)return o(a.catchLoc,!0);if(this.prev<a.finallyLoc)return o(a.finallyLoc)}else if(u){if(this.prev<a.catchLoc)return o(a.catchLoc,!0)}else{if(!s)throw new Error("try statement without catch or finally");if(this.prev<a.finallyLoc)return o(a.finallyLoc)}}}},abrupt:function(t,e){for(var r=this.tryEntries.length-1;r>=0;--r){var o=this.tryEntries[r];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev<o.finallyLoc){var i=o;break}}i&&("break"===t||"continue"===t)&&i.tryLoc<=e&&e<=i.finallyLoc&&(i=null);var a=i?i.completion:{};return a.type=t,a.arg=e,i?(this.method="next",this.next=i.finallyLoc,v):this.complete(a)},complete:function(t,e){if("throw"===t.type)throw t.arg;return"break"===t.type||"continue"===t.type?this.next=t.arg:"return"===t.type?(this.rval=this.arg=t.arg,this.method="return",this.next="end"):"normal"===t.type&&e&&(this.next=e),v},finish:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var r=this.tryEntries[e];if(r.finallyLoc===t)return this.complete(r.completion,r.afterLoc),S(r),v}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var r=this.tryEntries[e];if(r.tryLoc===t){var n=r.completion;if("throw"===n.type){var o=n.arg;S(r)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(t,r,n){return this.delegate={iterator:O(t),resultName:r,nextLoc:n},"next"===this.method&&(this.arg=e),v}},t}(a);try{regeneratorRuntime=c}catch(t){"object"==typeof globalThis?globalThis.regeneratorRuntime=c:Function("r","regeneratorRuntime = r")(c)}var u=function(t,e,r){if(!t)return r;var n,o;Array.isArray(e)&&(n=e.slice(0));"string"==typeof e&&(n=e.split("."));"symbol"==typeof e&&(n=[e]);if(!Array.isArray(n))throw new Error("props arg must be an array, a string or a symbol");for(;n.length;){if(o=n.shift(),!t)return r;if(void 0===(t=t[o]))return r}return t};var s=function(t){return t=t.split(".").map((function(t){return"string"!=typeof t||"string"!=typeof t[0]?"":t=(t=t[0].toLowerCase()+t.slice(1)).replace(/([A-Z])/g,"_$1").toLowerCase()})).join(".")},l=function(){"use strict";function t(e,r){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),o(this,"data",{}),o(this,"default_locales",[]),this.data=e||{is_empty:!0},this.default_locales=["en"],this.default_locales=this._process_locales(r)}var e,r,a;return e=t,(r=[{key:"get",value:function(t,e){return this.get_with_locales(t,null,e)}},{key:"get_raw",value:function(t){return t=s(t),u(this.data,t,null)}},{key:"has_property",value:function(t){return null!==this._lookup_with_locales(t,this.default_locales,null)}},{key:"_lookup_with_locales",value:function(t,e,r){var n=void 0===r?"":r;e=this._process_locales(e),".name"===t.substr(-5)&&(t=t.substr(0,t.length-5));var o=this.get_raw(t);return null!==(o=function(t,e){if("object"==typeof t&&null!==t){if("object"==typeof t.names&&"object"==typeof e)for(var r=0;r<e.length;r++){var n=e[r];if(t.names[n])return t.names[n]}return t.name?t.name:""}return t}(o,e))&&""!==o||(o=n),o}},{key:"_process_locales",value:function(t){return"string"==typeof t&&(t=[t]),Array.isArray(t)&&0!==t.length||(t=this.default_locales),t}},{key:"get_with_locales",value:function(t,e,r){var n=this._lookup_with_locales(t,e,r);return"object"==typeof n&&console.warn('Geolocation IP Detection: The property "'+t+'" is of type "'+(void 0===n?"undefined":i(n))+'", should be string or similar',n),void 0===n?(console.warn('Geolocation IP Detection: The property "'+t+'" is not defined, please check spelling or maybe you need a different data source',{data:this.data}),""):n}},{key:"get_country_iso",value:function(){var t=this.get("country.iso_code");return t&&(t=t.substr(0,2).toLowerCase()),t}},{key:"is_empty",value:function(){return this.get("is_empty",!1)}},{key:"error",value:function(){return this.get_raw("extra.error")||""}},{key:"serialize",value:function(){return this.data}}])&&n(e.prototype,r),a&&n(e,a),t}(),f=function(t,e){var r=void 0===e?"GET":e,n=new XMLHttpRequest;return new Promise((function(e,o){n.onreadystatechange=function(){4===n.readyState&&(n.status>=200&&n.status<300?e(n):o({status:n.status,statusText:n.statusText,request:n}))},n.open(r||"GET",t,!0),n.send()}))},p=function(t){try{return JSON.parse(t)}catch(e){return d("Invalid JSON: "+t)}};function d(t){return{is_empty:!0,extra:{error:t}}}var h,v=(h=r(t(a).mark((function e(r,n){var o,i;return t(a).wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return o=void 0===n?"GET":n,t.prev=1,t.next=4,f(r,o);case 4:if((i=t.sent).responseText&&"0"!==i.responseText){t.next=7;break}return t.abrupt("return",d("Got an empty response from server. Did you enable AJAX in the options?"));case 7:return t.abrupt("return",p(i.responseText));case 10:return t.prev=10,t.t0=t.catch(1),t.abrupt("return",p(t.t0.request.responseText));case 13:case"end":return t.stop()}}),e,null,[[1,10]])}))),function(){return h.apply(this,arguments)}),y=function(t,e,r){var n={value:e,expires_at:(new Date).getTime()+1e3*r/1};localStorage.setItem(t.toString(),JSON.stringify(n))};function g(){return function(t){var e=null;try{e=JSON.parse(localStorage.getItem(t.toString()))}catch(t){return null}if(null!==e){if(!(null!==e.expires_at&&e.expires_at<(new Date).getTime()))return e.value;localStorage.removeItem(t.toString())}return null}(b.cookie_name)}function m(t,e){y(b.cookie_name,t,e)}var _,w={};var b=(null===(_=window.geoip_detect)||void 0===_?void 0:_.options)||{ajaxurl:"/wp-admin/admin-ajax.php",default_locales:["en"],cookie_duration_in_days:7,cookie_name:"geoip-detect-result",do_body_classes:!1},x=null;function k(){if(!x){var t=b.ajaxurl+"?action=geoip_detect2_get_info_from_current_ip";(x=v(t)).then((function(t){var e;(null==t||null===(e=t.extra)||void 0===e?void 0:e.error)&&console.error("Geolocation IP Detection Error: Server returned an error: "+t.extra.error)}))}return x}function E(){return(E=r(t(a).mark((function e(){var r,n,o,i,c;return t(a).wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(r=!1,n=!1,!b.cookie_name){t.next=7;break}if(!(n=g())||!n.extra){t.next=7;break}return!0===n.extra.override?console.info("Geolocation IP Detection: Using cached response (override)"):console.info("Geolocation IP Detection: Using cached response"),t.abrupt("return",n);case 7:return t.prev=7,t.next=10,k();case 10:r=t.sent,t.next=17;break;case 13:t.prev=13,t.t0=t.catch(7),console.log("Weird: Uncaught error...",t.t0),r=t.t0.responseJSON||t.t0;case 17:if(!b.cookie_name){t.next=26;break}if(!0!==(null==(n=g())||null===(o=n.extra)||void 0===o?void 0:o.override)){t.next=23;break}return console.info("Geolocation IP Detection: Using cached response (override)"),t.abrupt("return",n);case 23:c=86400*b.cookie_duration_in_days,(null==r||null===(i=r.extra)||void 0===i?void 0:i.error)&&(c=60),m(r,c);case 26:return t.abrupt("return",r);case 27:case"end":return t.stop()}}),e,null,[[7,13]])})))).apply(this,arguments)}function L(){return E.apply(this,arguments)}function j(){return(j=r(t(a).mark((function e(){var r,n;return t(a).wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,L();case 2:return"object"!=typeof(r=t.sent)&&(console.error("Geolocation IP Detection Error: Record should be an object, not a "+(void 0===r?"undefined":i(r)),r),r={extra:{error:r||"Network error, look at the original server response ..."}}),n=new l(r,b.default_locales),t.abrupt("return",n);case 6:case"end":return t.stop()}}),e)})))).apply(this,arguments)}function S(){return j.apply(this,arguments)}var A=function(t,e,r){var n,o,i;Array.isArray(e)&&(n=e.slice(0));"string"==typeof e&&(n=e.split("."));"symbol"==typeof e&&(n=[e]);if(!Array.isArray(n))throw new Error("props arg must be an array, a string or a symbol");if(!(o=n.pop()))return!1;O(o);for(;i=n.shift();)if(O(i),void 0===t[i]&&(t[i]={}),!(t=t[i])||"object"!=typeof t)return!1;return t[o]=r,!0};function O(t){if("__proto__"===t||"constructor"===t||"prototype"===t)throw new Error("setting of prototype values not supported")}var T=P;function P(t,e){return t===e||(t!=t&&e!=e||{}.toString.call(t)=={}.toString.call(e)&&(t===Object(t)&&(!!t&&(Array.isArray(t)?G(t,e):"[object Set]"=={}.toString.call(t)?G(Array.from(t),Array.from(e)):"[object Object]"=={}.toString.call(t)?function(t,e){var r=Object.keys(t).sort(),n=Object.keys(e).sort(),o=r.length;if(o!=n.length)return!1;for(var i=0;i<o;i++){var a=r[i],c=n[i];if(a!=c||!P(t[a],e[c]))return!1}return!0}(t,e):function(t,e){return t.toString()===e.toString()}(t,e)))))}function G(t,e){var r=t.length;if(r!=e.length)return!1;for(var n=!0,o=0;o<r;o++)if(!P(t[o],e[o])){n=!1;break}return n}var I=new Promise((function(t){"loading"===document.readyState?document.addEventListener?document.addEventListener("DOMContentLoaded",t):document.attachEvent("onreadystatechange",(function(){"loading"!=document.readyState&&t()})):t()}));function N(t,e,r){for(var n=0;n<t.options.length;n++)if(t.options[n].getAttribute(e)===r)return t.selectedIndex=n,!0;return!1}function C(t){var e=t.getAttribute("data-options");try{return JSON.parse(e)}catch(t){return{}}}function D(){return(D=r(t(a).mark((function e(r,n,o){var i,c;return t(a).wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if((i=document.getElementsByClassName(r)).length){t.next=3;break}return t.abrupt("return");case 3:return t.next=5,S();case 5:if(!(c=t.sent).error()){t.next=9;break}return console.error("Geolocation IP Detection Error ("+n+"): "+c.error()),t.abrupt("return");case 9:Array.from(i).forEach((function(t){return o(t,c)}));case 10:case"end":return t.stop()}}),e)})))).apply(this,arguments)}function J(t,e,r){return D.apply(this,arguments)}function R(t,e,r){var n=void 0===r?null:r,o=C(t);return n=n||o.property,o.skip_cache&&console.warn("Geolocation IP Detection: The property 'skip_cache' is ignored in AJAX mode. You could disable the response caching on the server by setting the constant GEOIP_DETECT_READER_CACHE_TIME."),e.get_with_locales(n,o.lang,o.default)}var F=!1;function U(t,e,r){var n,o=void 0===r?null:r;F=!0,window.CustomEvent&&"function"==typeof window.CustomEvent?n=new CustomEvent(e,{detail:o}):(n=document.createEvent("CustomEvent")).initCustomEvent(e,!0,!0,o),t.dispatchEvent(n),F=!1}var M=!1,q=0;function z(t){if(!F){var e=t.target;(null==e?void 0:e.matches)&&e.matches(".js-geoip-detect-input-autosave")&&function(t){var e=C(t).property,r=t.value;if(q++,!(M||q>10?(console.warn("Error: Thats weird! autosave change detected a recursion ("+q+")! Please file a bug report about this and include the first 10 lines of the callstack below:"),console.trace(),0):(M=!0,1)))return;if(t.matches("select.js-geoip-detect-country-select")){var n=t.options[t.selectedIndex];ot("country.iso_code",(null==n?void 0:n.getAttribute("data-c")).toUpperCase(),{reevaluate:!1})}ot(e,r,{reevaluate:!0}),M=!1}(e)}}function W(t,e){t.innerText=R(t,e)}function X(t,e){var r=e.get_country_iso()||C(t).default;r&&t.classList.add("flag-icon-"+r)}function Y(t,e){(N(t,"data-c",e.get_country_iso())||N(t,"data-c",""))&&U(t,"change")}function B(t,e){t.value=R(t,e),U(t,"change")}var H=function(t,e){if(!Array.isArray(t)||!Array.isArray(e))throw new Error("expected both arguments to be arrays");for(var r=[],n=t.length,o=0;o<n;o++){var i=t[o];e.indexOf(i)>-1&&-1==r.indexOf(i)&&r.push(i)}return r};function Z(t,e){var r=C(t);(function(t,e,r){var n=["name","iso_code","iso_code3","code","geoname_id"],o="or"!==t.op;t.conditions.forEach((function(i){var a=!1,c=[],u=r.get_raw(i.p);null===u?a=!1:"object"==typeof u?n.forEach((function(t){u[t]?c.push(u[t]):"name"==t&&c.push(r.get_with_locales(i.p,e.lang))})):c=[u],a=function(t,e){!0===e[0]?e=["true","yes","y","1"]:!1===e[0]&&(e=["false","no","n","0",""]);if(e=e.map((function(t){return String(t).toLowerCase()})),-1!==(t=t.split(",")).indexOf("")&&0===e.length)return!0;return H(t,e).length>0}(i.v,c),i.not&&(a=!a),o="or"===t.op?o||a:o&&a})),t.not&&(o=!o);return o})(r.parsed,r,e)?(t.style.display="",t.classList.remove("geoip-hidden"),t.classList.add("geoip-shown")):(t.style.display="none",t.classList.add("geoip-hidden"),t.classList.remove("geoip-shown"))}var $,K=function(){document.addEventListener("change",z,!1)},Q=($=r(t(a).mark((function e(){return t(a).wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,I;case 2:J("js-geoip-detect-shortcode","could not execute shortcode(s) [geoip_detect2 ...]",W),J("js-geoip-detect-flag","could not configure the flag(s)",X),J("js-geoip-text-input","could not set the value of the text input field(s)",B),J("js-geoip-detect-country-select","could not set the value of the select field(s)",Y),J("js-geoip-detect-show-if","could not execute the show-if/hide-if conditions",Z);case 7:case"end":return t.stop()}}),e)}))),function(){return $.apply(this,arguments)});function V(){return(V=r(t(a).mark((function e(){var r;return t(a).wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,S();case 2:if(!(r=t.sent).error()){t.next=6;break}return console.error("Geolocation IP Detection Error (could not add CSS-classes to body): "+r.error()),t.abrupt("return");case 6:return t.next=8,I;case 8:tt(r);case 9:case"end":return t.stop()}}),e)})))).apply(this,arguments)}function tt(t){var e,r,n,o=function(t){return{country:t.get("country.iso_code"),"country-is-in-european-union":t.get("country.is_in_european_union",!1),continent:t.get("continent.code"),province:t.get("most_specific_subdivision.iso_code")}}(t),i=document.getElementsByTagName("body")[0];r="geoip-",n=(e=i).className.split(" ").filter((function(t){return!t.startsWith(r)})),e.className=n.join(" ").trim();var a=!0,c=!1,u=void 0;try{for(var s,l=Object.keys(o)[Symbol.iterator]();!(a=(s=l.next()).done);a=!0){var f=s.value,p=o[f];p&&("string"==typeof p?i.classList.add("geoip-".concat(f,"-").concat(p)):i.classList.add("geoip-".concat(f)))}}catch(t){c=!0,u=t}finally{try{a||null==l.return||l.return()}finally{if(c)throw u}}}var et=!0;function rt(){et&&(K(),et=!1),b.do_body_classes&&function(){V.apply(this,arguments)}(),Q(),w=g()}function nt(t){return"number"==typeof(t=t||{})&&(t={duration_in_days:t}),t.duration_in_days=t.duration_in_days||b.cookie_duration_in_days,t.duration_in_days<0?(console.warn("Geolocation IP Detection set_override_data() did nothing: A negative duration doesn't make sense. If you want to remove the override, use remove_override() instead."),!1):(void 0===t.reevaluate&&(t.reevaluate=!0),t)}function ot(t,e,r){var n=g();it(n=function(t,e,r){t=t||{},e=s(e=e||"");var n=u(t,e);return"object"==typeof n&&"object"==typeof n.names&&(e+=".name"),e.endsWith(".name")&&(e+="s",r={en:r}),A(t,e,r),t}(n,t,e),r)}function it(t,e){return e=nt(e),t&&"function"==typeof t.serialize&&(t=t.serialize()),function(t,e){if(A(t=t||{},"extra.override",!0),y(b.cookie_name,t,86400*e.duration_in_days),e.reevaluate&&!T(t,function(){return w}()))return rt(),!0;return!1}(t,e)}rt(),window.geoip_detect.get_info=S,window.geoip_detect.set_override=it,window.geoip_detect.remove_override=function(t){return t=nt(t),y(b.cookie_name,{},-1),t.reevaluate&&rt(),!0}}();
2
+ //# sourceMappingURL=frontend.js.map
js/dist/frontend.js.map ADDED
@@ -0,0 +1 @@
 
1
+ {"mappings":"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","sources":["node_modules/@swc/helpers/src/_async_to_generator.js","node_modules/@swc/helpers/src/_create_class.js","node_modules/@swc/helpers/src/_define_property.js","node_modules/@swc/helpers/src/_type_of.js","node_modules/regenerator-runtime/runtime.js","node_modules/just-safe-get/index.mjs","js/models/record.js","node_modules/@swc/helpers/src/_class_call_check.js","js/lib/xhr.js","js/lib/localStorageAccess.js","js/lookup/storage.js","js/lookup/get_info.js","node_modules/just-safe-set/index.mjs","node_modules/just-compare/index.mjs","js/lib/html.js","js/shortcodes/helpers.js","js/lib/events.js","js/lib/check-recursive.js","js/shortcodes/onchange.js","js/shortcodes/normal.js","node_modules/just-intersect/index.mjs","js/shortcodes/show-if.js","js/shortcodes/index.js","js/body_classes.js","js/main.js","js/lookup/override.js","js/frontend.js"],"sourcesContent":["function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n\n if (info.done) {\n resolve(value);\n } else {\n Promise.resolve(value).then(_next, _throw);\n }\n}\n\nexport default function _asyncToGenerator(fn) {\n return function () {\n var self = this,\n args = arguments;\n return new Promise(function (resolve, reject) {\n var gen = fn.apply(self, args);\n\n function _next(value) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);\n }\n\n function _throw(err) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);\n }\n\n _next(undefined);\n });\n };\n}\n","function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nexport default function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n","export default function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n","export default function _typeof(obj) {\n return obj && obj.constructor === Symbol ? \"symbol\" : typeof obj;\n};\n","/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar runtime = (function (exports) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n function define(obj, key, value) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n return obj[key];\n }\n try {\n // IE 8 has a broken Object.defineProperty that only works on DOM objects.\n define({}, \"\");\n } catch (err) {\n define = function(obj, key, value) {\n return obj[key] = value;\n };\n }\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n exports.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n define(IteratorPrototype, iteratorSymbol, function () {\n return this;\n });\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = GeneratorFunctionPrototype;\n define(Gp, \"constructor\", GeneratorFunctionPrototype);\n define(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction);\n GeneratorFunction.displayName = define(\n GeneratorFunctionPrototype,\n toStringTagSymbol,\n \"GeneratorFunction\"\n );\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n define(prototype, method, function(arg) {\n return this._invoke(method, arg);\n });\n });\n }\n\n exports.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n exports.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n define(genFun, toStringTagSymbol, \"GeneratorFunction\");\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n exports.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator, PromiseImpl) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return PromiseImpl.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return PromiseImpl.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration.\n result.value = unwrapped;\n resolve(result);\n }, function(error) {\n // If a rejected Promise was yielded, throw the rejection back\n // into the async generator function so it can be handled there.\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new PromiseImpl(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n define(AsyncIterator.prototype, asyncIteratorSymbol, function () {\n return this;\n });\n exports.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n exports.async = function(innerFn, outerFn, self, tryLocsList, PromiseImpl) {\n if (PromiseImpl === void 0) PromiseImpl = Promise;\n\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList),\n PromiseImpl\n );\n\n return exports.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n // Note: [\"return\"] must be used for ES3 parsing compatibility.\n if (delegate.iterator[\"return\"]) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n define(Gp, toStringTagSymbol, \"Generator\");\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n define(Gp, iteratorSymbol, function() {\n return this;\n });\n\n define(Gp, \"toString\", function() {\n return \"[object Generator]\";\n });\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n exports.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n exports.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n\n // Regardless of whether this script is executing as a CommonJS module\n // or not, return the runtime object so that we can declare the variable\n // regeneratorRuntime in the outer scope, which allows this module to be\n // injected easily by `bin/regenerator --include-runtime script.js`.\n return exports;\n\n}(\n // If this script is executing as a CommonJS module, use module.exports\n // as the regeneratorRuntime namespace. Otherwise create a new empty\n // object. Either way, the resulting object will be used to initialize\n // the regeneratorRuntime variable at the top of this file.\n typeof module === \"object\" ? module.exports : {}\n));\n\ntry {\n regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n // This module should not be running in strict mode, so the above\n // assignment should always work unless something is misconfigured. Just\n // in case runtime.js accidentally runs in strict mode, in modern engines\n // we can explicitly access globalThis. In older engines we can escape\n // strict mode using a global Function call. This could conceivably fail\n // if a Content Security Policy forbids using Function, but in that case\n // the proper solution is to fix the accidental strict mode problem. If\n // you've misconfigured your bundler to force strict mode and applied a\n // CSP to forbid Function, and you're not willing to fix either of those\n // problems, please detail your unique predicament in a GitHub issue.\n if (typeof globalThis === \"object\") {\n globalThis.regeneratorRuntime = runtime;\n } else {\n Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n }\n}\n","var objectSafeGet = get;\n\n/*\n const obj = {a: {aa: {aaa: 2}}, b: 4};\n\n get(obj, 'a.aa.aaa'); // 2\n get(obj, ['a', 'aa', 'aaa']); // 2\n\n get(obj, 'b.bb.bbb'); // undefined\n get(obj, ['b', 'bb', 'bbb']); // undefined\n\n get(obj.a, 'aa.aaa'); // 2\n get(obj.a, ['aa', 'aaa']); // 2\n\n get(obj.b, 'bb.bbb'); // undefined\n get(obj.b, ['bb', 'bbb']); // undefined\n\n get(obj.b, 'bb.bbb', 42); // 42\n get(obj.b, ['bb', 'bbb'], 42); // 42\n\n get(null, 'a'); // undefined\n get(undefined, ['a']); // undefined\n\n get(null, 'a', 42); // 42\n get(undefined, ['a'], 42); // 42\n\n const obj = {a: {}};\n const sym = Symbol();\n obj.a[sym] = 4;\n get(obj.a, sym); // 4\n*/\n\nfunction get(obj, propsArg, defaultValue) {\n if (!obj) {\n return defaultValue;\n }\n var props, prop;\n if (Array.isArray(propsArg)) {\n props = propsArg.slice(0);\n }\n if (typeof propsArg == 'string') {\n props = propsArg.split('.');\n }\n if (typeof propsArg == 'symbol') {\n props = [propsArg];\n }\n if (!Array.isArray(props)) {\n throw new Error('props arg must be an array, a string or a symbol');\n }\n while (props.length) {\n prop = props.shift();\n if (!obj) {\n return defaultValue;\n }\n obj = obj[prop];\n if (obj === undefined) {\n return defaultValue;\n }\n }\n return obj;\n}\n\nexport {objectSafeGet as default};\n","import _get from 'just-safe-get';\n\n\nconst _get_localized = function(ret, locales) {\n if (typeof(ret) === 'object' && ret !== null) {\n if (typeof (ret.names) === 'object' && typeof (locales) === 'object') {\n for (let i = 0 ; i < locales.length ; i++) {\n let locale = locales[i];\n\n if (ret.names[locale]) {\n return ret.names[locale];\n }\n }\n }\n\n if (ret.name) {\n return ret.name;\n }\n\n return '';\n }\n return ret;\n}\n\nexport const camelToUnderscore = function(key) {\n key = key.split('.').map((x) => {\n if (typeof (x) !== 'string' || typeof (x[0]) !== 'string') {\n return '';\n }\n x = x[0].toLowerCase() + x.slice(1); // to allow \"MostSpecificSubdivision\"\n x = x.replace(/([A-Z])/g, \"_$1\").toLowerCase();\n return x;\n }).join('.');\n\n return key;\n}\n\nclass Record {\n data = {};\n default_locales = [];\n\n constructor(data, default_locales) {\n this.data = data || { is_empty: true };\n \n this.default_locales = ['en']; \n this.default_locales = this._process_locales(default_locales);\n }\n\n get(prop, default_value) {\n return this.get_with_locales(prop, null, default_value);\n }\n\n get_raw(prop) {\n prop = camelToUnderscore(prop);\n return _get(this.data, prop, null);\n }\n \n has_property(prop) {\n const ret = this._lookup_with_locales(prop, this.default_locales, null)\n return ret !== null;\n }\n\n _lookup_with_locales(prop, locales, default_value = '') {\n locales = this._process_locales(locales);\n\n // Treat pseudo-property 'name' as if it never existed\n if (prop.substr(-5) === '.name') {\n prop = prop.substr(0, prop.length - 5);\n }\n\n let ret = this.get_raw(prop);\n \n // Localize property, if possible\n ret = _get_localized(ret, locales);\n \n if (ret === null || ret === '') {\n ret = default_value;\n }\n\n return ret;\n }\n \n _process_locales(locales) {\n if (typeof(locales) === 'string') {\n locales = [ locales ];\n }\n if (!Array.isArray(locales) || locales.length === 0) {\n locales = this.default_locales;\n }\n return locales;\n }\n\n get_with_locales(prop, locales, default_value) {\n const ret = this._lookup_with_locales(prop, locales, default_value);\n\n if (typeof(ret) === 'object') {\n console.warn('Geolocation IP Detection: The property \"' + prop + '\" is of type \"' + typeof (ret) + '\", should be string or similar', ret)\n }\n if (typeof(ret) === 'undefined') {\n console.warn('Geolocation IP Detection: The property \"' + prop + '\" is not defined, please check spelling or maybe you need a different data source', { data: this.data })\n return '';\n }\n\n return ret;\n }\n\n get_country_iso() {\n let country = this.get('country.iso_code');\n if(country) {\n country = country.substr(0, 2).toLowerCase();\n }\n return country;\n }\n\n /**\n * Check if there is information available for this IP\n * @returns boolean \n */\n is_empty() {\n return this.get('is_empty', false);\n }\n \n /**\n * Get error message, if any\n * @return string Error Message\n */\n error() {\n return this.get_raw('extra.error') || '';\n }\n\n /**\n * Get the raw data of this object\n * @returns object\n */\n serialize() {\n return this.data;\n }\n}\n\nexport default Record;","export default function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}","// @see https://gomakethings.com/promise-based-xhr/\n\nexport const makeRequest = function (url, method = 'GET') {\n\n // Create the XHR request\n var request = new XMLHttpRequest();\n\n // Return it as a Promise\n return new Promise(function (resolve, reject) {\n\n // Setup our listener to process compeleted requests\n request.onreadystatechange = function () {\n\n // Only run if the request is complete\n if (request.readyState !== 4) return;\n\n // Process the response\n if (request.status >= 200 && request.status < 300) {\n // If successful\n resolve(request);\n } else {\n // If failed\n reject({\n status: request.status,\n statusText: request.statusText,\n request: request\n });\n }\n\n };\n\n // Setup our HTTP request\n request.open(method || 'GET', url, true);\n\n // Send the request\n request.send();\n\n });\n};\n\nexport const jsonDecodeIfPossible = function(str) {\n try {\n return JSON.parse(str);\n } catch(e) {\n return createErrorObject('Invalid JSON: ' + str);\n }\n}\n\nfunction createErrorObject(errorMsg) {\n return {\n is_empty: true,\n extra: {\n error: errorMsg\n }\n };\n}\n\nexport const makeJSONRequest = async function(url, method = 'GET') {\n try {\n const request = await makeRequest(url, method);\n if (!request.responseText || request.responseText === '0') {\n return createErrorObject('Got an empty response from server. Did you enable AJAX in the options?');\n }\n return jsonDecodeIfPossible(request.responseText);\n } catch(e) {\n return jsonDecodeIfPossible(e.request.responseText);\n }\n}\n","export const setLocalStorage = function (variable, value, ttl_sec) {\n var data = {value: value, expires_at: new Date().getTime() + (ttl_sec * 1000) / 1 };\n localStorage.setItem(variable.toString(), JSON.stringify(data));\n};\n\nexport function removeLocalStorage(variable) {\n localStorage.removeItem(variable);\n}\n\nexport const getLocalStorage = function (variable) {\n let data = null;\n try {\n data = JSON.parse(localStorage.getItem(variable.toString()));\n } catch(e) {\n return null;\n }\n if (data !== null) {\n if (data.expires_at !== null && data.expires_at < new Date().getTime()) {\n localStorage.removeItem(variable.toString());\n } else {\n return data.value;\n }\n }\n return null;\n}","import { getLocalStorage, setLocalStorage } from '../lib/localStorageAccess';\nimport { options as globalOptions } from './get_info';\nimport Record from '../models/record';\n\n// Sync function in case it is known that no AJAX will occur\nexport function getRecordDataFromLocalStorage() {\n return getLocalStorage(globalOptions.cookie_name);\n}\n\nexport function setRecordDataToLocalStorage(data, cache_duration) {\n setLocalStorage(globalOptions.cookie_name, data, cache_duration);\n}\n\nlet lastEvaluated = {};\nexport function getRecordDataLastEvaluated() {\n return lastEvaluated;\n}\nexport function setRecordDataLastEvaluated() {\n lastEvaluated = getRecordDataFromLocalStorage();\n}\n\n\nexport function get_info_stored_locally_record() {\n return new Record(getRecordDataFromLocalStorage(), globalOptions.default_locales);\n}\n","import Record from '../models/record';\n\nimport { makeJSONRequest } from '../lib/xhr';\nimport { getRecordDataFromLocalStorage, setRecordDataToLocalStorage } from \"./storage\";\n\n\nexport const options = window.geoip_detect?.options || {\n ajaxurl: \"/wp-admin/admin-ajax.php\",\n default_locales: ['en'],\n cookie_duration_in_days: 7,\n cookie_name: 'geoip-detect-result',\n do_body_classes: false\n};\n\nlet ajaxPromise = null;\n\nfunction get_info_raw() {\n if (!ajaxPromise) {\n // Do Ajax Request only once per page load\n const url = options.ajaxurl + '?action=geoip_detect2_get_info_from_current_ip'\n\n ajaxPromise = makeJSONRequest(url);\n \n ajaxPromise.then((response) => {\n if (response?.extra?.error) {\n console.error('Geolocation IP Detection Error: Server returned an error: ' + response.extra.error);\n }\n })\n }\n\n return ajaxPromise;\n}\n\nasync function get_info_cached() {\n let response = false;\n let storedResponse = false;\n\n // 1) Load Info from localstorage cookie cache, if possible\n if (options.cookie_name) {\n storedResponse = getRecordDataFromLocalStorage()\n if (storedResponse && storedResponse.extra) {\n if (storedResponse.extra.override === true) {\n console.info('Geolocation IP Detection: Using cached response (override)');\n } else {\n console.info('Geolocation IP Detection: Using cached response');\n }\n return storedResponse;\n }\n }\n\n // 2) Get response\n try {\n response = await get_info_raw();\n } catch (err) {\n console.log('Weird: Uncaught error...', err);\n response = err.responseJSON || err;\n }\n\n // 3) Save info to localstorage cookie cache\n if (options.cookie_name) {\n\n // Check if Override has been set now\n storedResponse = getRecordDataFromLocalStorage()\n if (storedResponse?.extra?.override === true) {\n console.info('Geolocation IP Detection: Using cached response (override)');\n return storedResponse;\n }\n\n let cache_duration = options.cookie_duration_in_days * 24 * 60 * 60;\n if (response?.extra?.error)\n cache_duration = 60; // Cache errors only for 1 minute, then try again\n \n setRecordDataToLocalStorage(response, cache_duration);\n }\n\n return response;\n}\n\n\n/**\n * Load the data from the server\n * \n * (It can also be loaded from the browser localstorage, if the record data is present there already.)\n * \n * @api\n * @return Promise(Record)\n */\nexport async function get_info() {\n let response = await get_info_cached();\n\n if (typeof (response) !== 'object') {\n console.error('Geolocation IP Detection Error: Record should be an object, not a ' + typeof (response), response);\n response = { 'extra': { 'error': response || 'Network error, look at the original server response ...' } };\n }\n\n const record = new Record(response, options.default_locales);\n return record;\n}\n","var objectSafeSet = set;\n\n/*\n var obj1 = {};\n set(obj1, 'a.aa.aaa', 4); // true\n obj1; // {a: {aa: {aaa: 4}}}\n\n var obj2 = {};\n set(obj2, ['a', 'aa', 'aaa'], 4); // true\n obj2; // {a: {aa: {aaa: 4}}}\n\n var obj3 = {a: {aa: {aaa: 2}}};\n set(obj3, 'a.aa.aaa', 3); // true\n obj3; // {a: {aa: {aaa: 3}}}\n\n // don't clobber existing\n var obj4 = {a: {aa: {aaa: 2}}};\n set(obj4, 'a.aa', {bbb: 7}); // false\n\n const obj5 = {a: {}};\n const sym = Symbol();\n set(obj5.a, sym, 7); // true\n obj5; // {a: {Symbol(): 7}}\n*/\n\nfunction set(obj, propsArg, value) {\n var props, lastProp;\n if (Array.isArray(propsArg)) {\n props = propsArg.slice(0);\n }\n if (typeof propsArg == 'string') {\n props = propsArg.split('.');\n }\n if (typeof propsArg == 'symbol') {\n props = [propsArg];\n }\n if (!Array.isArray(props)) {\n throw new Error('props arg must be an array, a string or a symbol');\n }\n lastProp = props.pop();\n if (!lastProp) {\n return false;\n }\n prototypeCheck(lastProp);\n var thisProp;\n while ((thisProp = props.shift())) {\n prototypeCheck(thisProp);\n if (typeof obj[thisProp] == 'undefined') {\n obj[thisProp] = {};\n }\n obj = obj[thisProp];\n if (!obj || typeof obj != 'object') {\n return false;\n }\n }\n obj[lastProp] = value;\n return true;\n}\n\nfunction prototypeCheck(prop) {\n if (prop === '__proto__' || prop === 'constructor' || prop === 'prototype') {\n throw new Error('setting of prototype values not supported');\n }\n}\n\nexport {objectSafeSet as default};\n","var collectionCompare = compare;\n\n/*\n primitives: value1 === value2\n functions: value1.toString == value2.toString\n arrays: if length, sequence and values of properties are identical\n objects: if length, names and values of properties are identical\n compare([[1, [2, 3]], [[1, [2, 3]]); // true\n compare([[1, [2, 3], 4], [[1, [2, 3]]); // false\n compare({a: 2, b: 3}, {a: 2, b: 3}); // true\n compare({a: 2, b: 3}, {b: 3, a: 2}); // true\n compare({a: 2, b: 3, c: 4}, {a: 2, b: 3}); // false\n compare({a: 2, b: 3}, {a: 2, b: 3, c: 4}); // false\n compare([[1, [2, {a: 4}], 4], [[1, [2, {a: 4}]]); // true\n*/\n\nfunction compare(value1, value2) {\n if (value1 === value2) {\n return true;\n }\n /* eslint-disable no-self-compare */\n // if both values are NaNs return true\n if (value1 !== value1 && value2 !== value2) {\n return true;\n }\n if ({}.toString.call(value1) != {}.toString.call(value2)) {\n return false;\n }\n if (value1 !== Object(value1)) {\n // non equal primitives\n return false;\n }\n if (!value1) {\n return false;\n }\n if (Array.isArray(value1)) {\n return compareArrays(value1, value2);\n }\n if ({}.toString.call(value1) == '[object Set]') {\n return compareArrays(Array.from(value1), Array.from(value2));\n }\n if ({}.toString.call(value1) == '[object Object]') {\n return compareObjects(value1, value2);\n } else {\n return compareNativeSubtypes(value1, value2);\n }\n}\n\nfunction compareNativeSubtypes(value1, value2) {\n // e.g. Function, RegExp, Date\n return value1.toString() === value2.toString();\n}\n\nfunction compareArrays(value1, value2) {\n var len = value1.length;\n if (len != value2.length) {\n return false;\n }\n var alike = true;\n for (var i = 0; i < len; i++) {\n if (!compare(value1[i], value2[i])) {\n alike = false;\n break;\n }\n }\n return alike;\n}\n\nfunction compareObjects(value1, value2) {\n var keys1 = Object.keys(value1).sort();\n var keys2 = Object.keys(value2).sort();\n var len = keys1.length;\n if (len != keys2.length) {\n return false;\n }\n for (var i = 0; i < len; i++) {\n var key1 = keys1[i];\n var key2 = keys2[i];\n if (!(key1 == key2 && compare(value1[key1], value2[key2]))) {\n return false;\n }\n }\n return true;\n}\n\nexport {collectionCompare as default};\n","export function isUnitTesting() {\n return process.env.JEST_WORKER_ID !== undefined;\n}\n\nexport const domReady = new Promise(resolve => {\n if (isUnitTesting()) {\n resolve();\n }\n\n if (document.readyState === \"loading\") {\n if (document.addEventListener) {\n document.addEventListener('DOMContentLoaded', resolve);\n } else {\n document.attachEvent('onreadystatechange', function () {\n if (document.readyState != 'loading') {\n resolve();\n }\n });\n }\n } else {\n resolve();\n }\n});\n\nexport function selectItemByValue(el, value) {\n for (var i = 0; i < el.options.length; i++) {\n if (el.options[i].value === value) {\n el.selectedIndex = i;\n return true;\n }\n }\n return false;\n}\n\n/**\n * @param {*} el Select Tag\n * @param {string} attributeName HTML attribute name to search by\n * @param {string} attributeValue HTML attribute value to search by\n * @returns boolean TRUE if Value found in select tag\n */\nexport function selectItemByAttribute(el, attributeName, attributeValue) {\n for (let i = 0; i < el.options.length; i++) {\n if (el.options[i].getAttribute(attributeName) === attributeValue) {\n el.selectedIndex = i;\n return true;\n }\n }\n return false;\n}","import { get_info } from \"../lookup/get_info\";\n\n// Get Options from data-options and json parse them\nexport function get_options(el) {\n const raw = el.getAttribute('data-options');\n try {\n return JSON.parse(raw);\n } catch (e) {\n return {};\n }\n}\n\nexport async function action_on_elements(className, errorMessage, callback) {\n const elements = document.getElementsByClassName(className);\n if (!elements.length) return;\n\n const record = await get_info();\n\n if (record.error()) {\n console.error('Geolocation IP Detection Error (' + errorMessage + '): ' + record.error());\n return;\n }\n\n Array.from(elements)\n .forEach(el => callback(el, record));\n}\n\nexport function get_value_from_record(el, record, property = null) {\n const opt = get_options(el);\n property = property || opt.property;\n if (opt.skip_cache) {\n console.warn(\"Geolocation IP Detection: The property 'skip_cache' is ignored in AJAX mode. You could disable the response caching on the server by setting the constant GEOIP_DETECT_READER_CACHE_TIME.\");\n }\n\n return record.get_with_locales(property, opt.lang, opt.default);\n}","\nlet _internalEvent = false;\nexport function isInternalEvent() {\n return _internalEvent;\n}\n\nexport function triggerNativeEvent(el, eventName, options = null) {\n _internalEvent = true;\n\n let event;\n if (window.CustomEvent && typeof window.CustomEvent === 'function') {\n event = new CustomEvent(eventName, {detail : options});\n } else {\n // Compat for IE\n event = document.createEvent('CustomEvent');\n event.initCustomEvent(eventName, true, true, options);\n }\n el.dispatchEvent(event);\n\n _internalEvent = false;\n}","\nlet _listener_active = false; // for recursion detection (maybe remove later)\nlet _change_counter = 0; \n\nexport function check_recursive_before() {\n _change_counter++;\n if (_listener_active || _change_counter > 10) {\n console.warn('Error: Thats weird! autosave change detected a recursion (' + _change_counter + ')! Please file a bug report about this and include the first 10 lines of the callstack below:');\n console.trace();\n if (process.env.NODE_ENV !== 'production') {\n debugger;\n }\n return false;\n }\n _listener_active = true;\n return true;\n}\n\n\nexport function check_recursive_after() {\n _listener_active = false;\n}","\nimport { check_recursive_after, check_recursive_before } from \"../lib/check-recursive\";\nimport { isInternalEvent } from \"../lib/events\";\nimport { set_override_with_merge } from \"../lookup/override\";\nimport { get_options } from \"./helpers\";\n\nexport function init() {\n document.addEventListener('change', event_listener_autosave_on_change, false);\n}\n\nfunction event_listener_autosave_on_change(event) {\n if (isInternalEvent()) {\n return;\n }\n\n const target = event.target;\n if (target?.matches && target.matches('.js-geoip-detect-input-autosave')) {\n if (process.env.NODE_ENV !== 'production') {\n console.log('autosave on change', target);\n }\n\n autosave_element(target);\n }\n}\n\n/**\n * When calling this method, be very careful not to introduce an infinite loop!\n * @param {*} el \n */\nexport function autosave_element(el) {\n const property = get_options(el).property;\n const value = el.value;\n\n if (!check_recursive_before()) {\n return;\n }\n\n if (el.matches('select.js-geoip-detect-country-select')) {\n const selected = el.options[el.selectedIndex];\n const isoCode = selected?.getAttribute('data-c');\n\n set_override_with_merge('country.iso_code', isoCode.toUpperCase(), { reevaluate: false });\n }\n\n set_override_with_merge(property, value, { reevaluate: true }); // might call do_shortcodes etc.\n\n check_recursive_after();\n}","import { triggerNativeEvent } from \"../lib/events\";\nimport { selectItemByAttribute } from \"../lib/html\";\nimport { get_value_from_record, get_options } from \"./helpers\";\nimport { autosave_element } from \"./onchange\";\n\nexport function do_shortcode_normal(el, record) {\n el.innerText = get_value_from_record(el, record);\n}\n\nexport function do_shortcode_flags(el, record) {\n const country = record.get_country_iso() || get_options(el).default;\n if (country) {\n el.classList.add('flag-icon-' + country)\n }\n}\n\n\nexport function do_shortcode_country_select(el, record) {\n let country = record.get_country_iso();\n\n if (selectItemByAttribute(el, 'data-c', country)) {\n triggerNativeEvent(el, 'change');\n return;\n }\n\n // The country is not the list of countries - select empty option instead\n if (selectItemByAttribute(el, 'data-c', '')) {\n triggerNativeEvent(el, 'change');\n } \n}\n\nexport function do_shortcode_text_input(el, record) {\n el.value = get_value_from_record(el, record);\n triggerNativeEvent(el, 'change');\n}","var arrayIntersect = intersect;\n\n/*\n intersect([1, 2, 5, 6], [2, 3, 5, 6]); // [2, 5, 6]\n intersect([1, 2, 2, 4, 5], [3, 2, 2, 5, 7]); // [2, 5]\n*/\n\nfunction intersect(arr1, arr2) {\n if (!Array.isArray(arr1) || !Array.isArray(arr2)) {\n throw new Error('expected both arguments to be arrays');\n }\n var result = [];\n var len = arr1.length;\n for (var i = 0; i < len; i++) {\n var elem = arr1[i];\n if (arr2.indexOf(elem) > -1 && result.indexOf(elem) == -1) {\n result.push(elem);\n }\n }\n return result;\n}\n\nexport {arrayIntersect as default};\n","import { get_options } from './helpers';\nimport _intersect from 'just-intersect';\n\n\nexport function do_shortcode_show_if(el, record) {\n const opt = get_options(el);\n const evaluated = geoip_detect2_shortcode_evaluate_conditions(opt.parsed, opt, record);\n\n if (!evaluated) {\n el.style.display = \"none\";\n el.classList.add('geoip-hidden');\n el.classList.remove('geoip-shown');\n } else {\n el.style.display = '';\n el.classList.remove('geoip-hidden');\n el.classList.add('geoip-shown');\n }\n}\n\nexport function geoip_detect2_shortcode_evaluate_conditions(parsed, opt, record) {\n const alternativePropertyNames = [\n 'name',\n 'iso_code',\n 'iso_code3',\n 'code',\n 'geoname_id',\n ];\n\n let isConditionMatching = (parsed.op === 'or') ? false : true;\n\n parsed.conditions.forEach(c => {\n let subConditionMatching = false;\n let values = [];\n\n const raw_value = record.get_raw(c.p);\n\n if (raw_value === null) {\n subConditionMatching = false;\n } else {\n if (typeof (raw_value) === 'object') {\n alternativePropertyNames.forEach(name => {\n if (raw_value[name]) {\n values.push(raw_value[name]);\n } else if (name == 'name') {\n values.push(record.get_with_locales(c.p, opt.lang));\n }\n })\n } else {\n values = [raw_value]\n }\n }\n\n subConditionMatching = geoip_detect2_shortcode_check_subcondition(c.v, values);\n\n if (c.not) {\n subConditionMatching = !subConditionMatching;\n }\n\n if (parsed.op === 'or') {\n isConditionMatching = isConditionMatching || subConditionMatching;\n } else {\n isConditionMatching = isConditionMatching && subConditionMatching;\n }\n\n });\n\n if (parsed.not) {\n isConditionMatching = !isConditionMatching;\n }\n\n return isConditionMatching;\n}\n\nfunction geoip_detect2_shortcode_check_subcondition(expectedValues, actualValues) {\n if (actualValues[0] === true) {\n actualValues = ['true', 'yes', 'y', '1'];\n } else if (actualValues[0] === false) {\n actualValues = ['false', 'no', 'n', '0', ''];\n }\n\n actualValues = actualValues.map(x => String(x).toLowerCase())\n\n expectedValues = expectedValues.split(',');\n if (expectedValues.indexOf('') !== -1) {\n if (actualValues.length === 0) {\n return true;\n }\n }\n\n const intersect = _intersect(expectedValues, actualValues);\n\n return intersect.length > 0;\n}","import { domReady } from \"../lib/html\";\nimport { action_on_elements } from \"./helpers\";\nimport { do_shortcode_country_select, do_shortcode_flags, do_shortcode_normal, do_shortcode_text_input } from \"./normal\";\nimport { init as onchangeInit } from \"./onchange\";\nimport { do_shortcode_show_if } from \"./show-if\";\n\n\nexport const do_shortcodes_init = function () {\n onchangeInit();\n}\n\nexport const do_shortcodes = async function do_shortcodes() {\n // Before doing any of these, the DOM tree needs to be loaded\n await domReady;\n\n // These are called in parallel, as they are async functions\n action_on_elements('js-geoip-detect-shortcode',\n 'could not execute shortcode(s) [geoip_detect2 ...]', do_shortcode_normal);\n\n action_on_elements('js-geoip-detect-flag',\n 'could not configure the flag(s)', do_shortcode_flags);\n\n action_on_elements('js-geoip-text-input',\n 'could not set the value of the text input field(s)', do_shortcode_text_input);\n\n action_on_elements('js-geoip-detect-country-select',\n 'could not set the value of the select field(s)', do_shortcode_country_select);\n\n action_on_elements('js-geoip-detect-show-if',\n 'could not execute the show-if/hide-if conditions', do_shortcode_show_if);\n};\n","import { domReady } from './lib/html';\nimport { get_info } from './lookup/get_info';\n\nexport function calc_classes(record) {\n return {\n country: record.get('country.iso_code'),\n 'country-is-in-european-union': record.get('country.is_in_european_union', false),\n continent: record.get('continent.code'),\n province: record.get('most_specific_subdivision.iso_code'),\n };\n}\n\nfunction remove_css_classes_by_prefix(el, prefix) {\n const classes = el.className.split(\" \").filter(c => !c.startsWith(prefix));\n el.className = classes.join(\" \").trim();\n}\n\nexport async function add_body_classes() {\n const record = await get_info();\n\n if (record.error()) {\n console.error('Geolocation IP Detection Error (could not add CSS-classes to body): ' + record.error());\n return;\n }\n\n await domReady;\n\n add_classes_to_body(record);\n}\n\nexport function add_classes_to_body(record) {\n const css_classes = calc_classes(record);\n\n const body = document.getElementsByTagName('body')[0];\n \n // Remove old classes in case there are any\n remove_css_classes_by_prefix(body, 'geoip-');\n \n for (let key of Object.keys(css_classes)) {\n const value = css_classes[key];\n if (value) {\n if (typeof (value) == 'string') {\n body.classList.add(`geoip-${key}-${value}`);\n } else {\n body.classList.add(`geoip-${key}`);\n }\n }\n }\n}","import { do_shortcodes, do_shortcodes_init } from './shortcodes/index';\nimport { add_body_classes } from './body_classes';\nimport { options } from './lookup/get_info';\nimport { setRecordDataLastEvaluated } from \"./lookup/storage\";\n\nlet firstCall = true;\n\nexport function main() {\n if (process.env.NODE_ENV !== 'production') {\n console.log('Do Main');\n }\n\n if (firstCall) {\n do_shortcodes_init();\n firstCall = false; \n }\n\n if (options.do_body_classes) {\n add_body_classes();\n }\n\n // Do all the shortcodes that are in the HTML. Even if shortcodes is not enabled globally, they might be enabled for a specific shortcode.\n do_shortcodes();\n\n setRecordDataLastEvaluated();\n}","import { setLocalStorage } from '../lib/localStorageAccess';\nimport { options as globalOptions } from './get_info';\nimport { camelToUnderscore } from '../models/record';\nimport _set from 'just-safe-set';\nimport _get from 'just-safe-get';\nimport _is_object_content_equal from 'just-compare';\nimport { main } from '../main';\nimport { getRecordDataFromLocalStorage, getRecordDataLastEvaluated } from './storage';\n\nfunction processOptions(options) {\n options = options || {};\n if (typeof(options) == 'number') {\n options = {\n 'duration_in_days': options\n };\n }\n\n options.duration_in_days = options.duration_in_days || globalOptions.cookie_duration_in_days;\n if (options.duration_in_days < 0) {\n console.warn('Geolocation IP Detection set_override_data() did nothing: A negative duration doesn\\'t make sense. If you want to remove the override, use remove_override() instead.');\n return false;\n }\n\n if (typeof (options.reevaluate) == 'undefined' ) {\n options.reevaluate = true;\n }\n\n return options;\n}\n\nfunction changeRecord(record, property, value) {\n record = record || {};\n property = property || '';\n\n property = camelToUnderscore(property);\n\n const oldData = _get(record, property);\n if (typeof (oldData) == 'object' && typeof (oldData.names) == 'object') {\n property += '.name';\n }\n if (property.endsWith('.name')) {\n property += 's'; // e.g. country.name -> country.names\n value = { 'en': value };\n }\n\n _set(record, property, value);\n\n return record;\n}\n\n/**\n * Override only one property, leave the other properties as-is.\n * @param {string} property \n * @param {*} value \n */\nexport function set_override_with_merge(property, value, options) {\n let record = getRecordDataFromLocalStorage();\n\n record = changeRecord(record, property, value);\n\n set_override(record, options);\n\n if (process.env.NODE_ENV !== 'production') {\n console.log(\"Override is now: \", getRecordDataFromLocalStorage());\n }\n}\n\n/**\n * This functions allows to override the geodetected data manually (e.g. a country selector)\n * \n * @api\n * @param {*} record \n * @param {object} options\n * @param {number} duration_in_days When this override expires (default: 1 week later)\n * @param {boolean} reevaluate If the shortcodes etc. should be re-evaluated (default: true)\n * @return boolean TRUE if override data changed\n */\nexport function set_override(record, options) {\n options = processOptions(options);\n\n if (record && typeof (record.serialize) === 'function') {\n record = record.serialize();\n }\n\n return set_override_data(record, options);\n}\n\nfunction set_override_data(newData, options) {\n newData = newData || {};\n _set(newData, 'extra.override', true);\n\n setLocalStorage(globalOptions.cookie_name, newData, options.duration_in_days * 24 * 60 * 60);\n\n if (options.reevaluate && !_is_object_content_equal(newData, getRecordDataLastEvaluated())) {\n main();\n return true;\n }\n\n return false;\n}\n\n/**\n * Remove the override data.\n * On next page load, the record data will be loaded from the server again.\n * \n * @return boolean\n */\nexport function remove_override(options) {\n options = processOptions(options);\n setLocalStorage(globalOptions.cookie_name, {}, -1);\n if (options.reevaluate) {\n main();\n }\n return true;\n}\n\n\n","import { get_info } from './lookup/get_info';\nimport { remove_override, set_override } from './lookup/override';\nimport { main } from './main';\n\n// Evaluate shortcodes, body classes, etc.\nmain();\n\n\n// Extend window object \nwindow.geoip_detect.get_info = get_info;\n\nwindow.geoip_detect.set_override = set_override;\nwindow.geoip_detect.remove_override = remove_override;"],"names":["$477fda7effc3c7c2$var$asyncGeneratorStep","gen","resolve","reject","_next","_throw","key","arg","info","value","error","done","Promise","then","fn","self","this","args","arguments","apply","err","undefined","$cfcc435dea54e8da$var$_defineProperties","target","props","i","length","descriptor","enumerable","configurable","writable","Object","defineProperty","obj","constructor","Symbol","$d9ff7fa7a3f30499$var$runtime","exports","Op","prototype","hasOwn","hasOwnProperty","$Symbol","iteratorSymbol","iterator","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","toStringTag","define","err1","wrap","innerFn","outerFn","tryLocsList","protoGenerator","Generator","generator","create","context","Context","_invoke","state","GenStateSuspendedStart","method","GenStateExecuting","Error","GenStateCompleted","doneResult","delegate","delegateResult","maybeInvokeDelegate","ContinueSentinel","sent","_sent","dispatchException","abrupt","record","tryCatch","type","GenStateSuspendedYield","makeInvokeMethod","call","GeneratorFunction","GeneratorFunctionPrototype","IteratorPrototype","getProto","getPrototypeOf","NativeIteratorPrototype","values","Gp","defineIteratorMethods","forEach","AsyncIterator","PromiseImpl","invoke","result","value1","__await","unwrapped","previousPromise","callInvokeWithMethodAndArg","TypeError","resultName","next","nextLoc","pushTryEntry","locs","entry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","push","resetTryEntry","completion","reset","iterable","iteratorMethod","isNaN","next1","displayName","isGeneratorFunction","genFun","ctor","name","mark","setPrototypeOf","__proto__","awrap","async","iter","keys","object","key1","reverse","pop","skipTempReset","prev","charAt","slice","stop","rootRecord","rval","exception","handle","loc","caught","hasCatch","hasFinally","finallyEntry","complete","finish","catch","thrown","delegateYield","$d9ff7fa7a3f30499$exports","regeneratorRuntime","accidentalStrictMode","globalThis","Function","$4a4beb35e1398598$export$2e2bcd8739ae039","propsArg","defaultValue","prop","Array","isArray","split","shift","$a4c6bf567c1b63c8$export$13bc6c4afe8cd6ab","map","x","toLowerCase","replace","join","$a4c6bf567c1b63c8$export$2e2bcd8739ae039","$a4c6bf567c1b63c8$var$Record","data","default_locales","instance","Constructor","is_empty","_process_locales","protoProps","staticProps","default_value","get_with_locales","_lookup_with_locales","locales","param","substr","ret","get_raw","names","locale","$a4c6bf567c1b63c8$var$_get_localized","console","warn","$ad2ecac41bdb2824$export$2e2bcd8739ae039","country","get","$5115e01e50a35b95$export$699251e5611cc6db","url","request","XMLHttpRequest","onreadystatechange","readyState","status","statusText","open","send","$5115e01e50a35b95$export$8fe2eaa78e58529f","str","JSON","parse","e","$5115e01e50a35b95$var$createErrorObject","errorMsg","extra","$5115e01e50a35b95$export$49434baf33460b11","_callee","_ctx","responseText","t0","$9a0f598d59a61a3e$export$1f73f60bdb811cb1","variable","ttl_sec","expires_at","Date","getTime","localStorage","setItem","toString","stringify","$f422a70a3b9c8a83$export$c0c5a36406ccde34","getItem","removeItem","$9a0f598d59a61a3e$export$d3720feff416e85b","$b4ba9c8e7a201193$export$41c562ebe57d11e2","cookie_name","$f422a70a3b9c8a83$export$bfae0a1e3adc82ee","cache_duration","ref1","$f422a70a3b9c8a83$var$lastEvaluated","window","geoip_detect","options","ajaxurl","cookie_duration_in_days","do_body_classes","$b4ba9c8e7a201193$var$ajaxPromise","$b4ba9c8e7a201193$var$get_info_raw","response","ref","_get_info_cached","$477fda7effc3c7c2$export$2e2bcd8739ae039","$parcel$interopDefault","storedResponse","ref2","override","log","responseJSON","$b4ba9c8e7a201193$var$get_info_cached","_get_info","$b4ba9c8e7a201193$export$3697bcf53517e83c","$6451de512ae99d8a$export$2e2bcd8739ae039","lastProp","thisProp","$6451de512ae99d8a$var$prototypeCheck","$d73968d8a0a066f2$export$2e2bcd8739ae039","$d73968d8a0a066f2$var$compare","value2","$d73968d8a0a066f2$var$compareArrays","from","keys1","sort","keys2","len","key2","$d73968d8a0a066f2$var$compareObjects","$d73968d8a0a066f2$var$compareNativeSubtypes","alike","$b4d1c184cabe171a$export$d680cb6eec13a7c7","document","addEventListener","attachEvent","$b4d1c184cabe171a$export$212ec54c5d687e78","el","attributeName","attributeValue","getAttribute","selectedIndex","$e41b329f42db23c8$export$aafcad1af8162002","raw","_action_on_elements","className","errorMessage","callback","elements","getElementsByClassName","$e41b329f42db23c8$export$bb8a045c548d38f9","$e41b329f42db23c8$export$2bcc52ba6c088b4a","property","opt","skip_cache","lang","default","$3f68aa62fc033904$var$_internalEvent","$3f68aa62fc033904$export$f0ffca0e7194bd91","eventName","event","CustomEvent","detail","createEvent","initCustomEvent","dispatchEvent","$7944654ce2dd9d65$var$_listener_active","$7944654ce2dd9d65$var$_change_counter","$3bb001785c092908$var$event_listener_autosave_on_change","matches","trace","selected","$03d6c28e95082604$export$38a0b31e9febbbe1","toUpperCase","reevaluate","$3bb001785c092908$export$be51a27c79b931de","$ddb23fab3c6f4620$export$c5bfd938fb7f5403","innerText","$ddb23fab3c6f4620$export$67c46edf2422701b","get_country_iso","classList","add","$ddb23fab3c6f4620$export$8b2cf4a2576ea856","$ddb23fab3c6f4620$export$46eed00f10e80dd5","$599ea47da8784bdb$export$2e2bcd8739ae039","arr1","arr2","elem","indexOf","$34cfab0a14aff422$export$7f72d39cfa7a0f7a","parsed","alternativePropertyNames","isConditionMatching","op","conditions","c","subConditionMatching","raw_value","p","expectedValues","actualValues","String","$34cfab0a14aff422$var$geoip_detect2_shortcode_check_subcondition","v","not","$34cfab0a14aff422$export$626a13a1fe51c67a","style","display","remove","_do_shortcodes","$9cee2e12fa11ef69$export$7481777ea0ea965d","$9cee2e12fa11ef69$export$42610705290faf95","_add_body_classes","$73929a6ea3471960$export$4e7274a5cb77ccb6","prefix","classes","css_classes","continent","province","$73929a6ea3471960$export$fd37e2b9d7d82468","body","getElementsByTagName","filter","startsWith","trim","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_step","_iterator","concat","return","$b016e4ccc3c135fb$var$firstCall","$b016e4ccc3c135fb$export$f22da7240b7add18","$73929a6ea3471960$export$69cfbde487906451","$03d6c28e95082604$var$processOptions","duration_in_days","$03d6c28e95082604$export$c3c74383dfd15775","oldData","endsWith","en","$03d6c28e95082604$var$changeRecord","serialize","newData","$f422a70a3b9c8a83$export$88983ef80f4f72ac","$03d6c28e95082604$var$set_override_data","get_info","set_override","remove_override"],"version":3,"file":"frontend.js.map"}
js/frontend.js CHANGED
@@ -1,16 +1,11 @@
1
- import { get_info, options, remove_override, set_override } from './lookup';
2
- import { do_shortcodes } from './shortcodes/index';
3
- import { add_body_classes } from './body_classes';
4
 
 
 
5
 
6
 
7
- if (options.do_body_classes) {
8
- add_body_classes();
9
- }
10
-
11
- // Do all the shortcodes that are in the HTML. Even if shortcodes is not enabled globally, they might be enabled for a specific shortcode.
12
- do_shortcodes();
13
-
14
  // Extend window object
15
  window.geoip_detect.get_info = get_info;
16
 
1
+ import { get_info } from './lookup/get_info';
2
+ import { remove_override, set_override } from './lookup/override';
3
+ import { main } from './main';
4
 
5
+ // Evaluate shortcodes, body classes, etc.
6
+ main();
7
 
8
 
 
 
 
 
 
 
 
9
  // Extend window object
10
  window.geoip_detect.get_info = get_info;
11
 
js/lib/check-recursive.js ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ let _listener_active = false; // for recursion detection (maybe remove later)
3
+ let _change_counter = 0;
4
+
5
+ export function check_recursive_before() {
6
+ _change_counter++;
7
+ if (_listener_active || _change_counter > 10) {
8
+ console.warn('Error: Thats weird! autosave change detected a recursion (' + _change_counter + ')! Please file a bug report about this and include the first 10 lines of the callstack below:');
9
+ console.trace();
10
+ if (process.env.NODE_ENV !== 'production') {
11
+ debugger;
12
+ }
13
+ return false;
14
+ }
15
+ _listener_active = true;
16
+ return true;
17
+ }
18
+
19
+
20
+ export function check_recursive_after() {
21
+ _listener_active = false;
22
+ }
js/lib/events.js ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ let _internalEvent = false;
3
+ export function isInternalEvent() {
4
+ return _internalEvent;
5
+ }
6
+
7
+ export function triggerNativeEvent(el, eventName, options = null) {
8
+ _internalEvent = true;
9
+
10
+ let event;
11
+ if (window.CustomEvent && typeof window.CustomEvent === 'function') {
12
+ event = new CustomEvent(eventName, {detail : options});
13
+ } else {
14
+ // Compat for IE
15
+ event = document.createEvent('CustomEvent');
16
+ event.initCustomEvent(eventName, true, true, options);
17
+ }
18
+ el.dispatchEvent(event);
19
+
20
+ _internalEvent = false;
21
+ }
js/lib/html.js CHANGED
@@ -1,15 +1,23 @@
 
 
 
 
1
  export const domReady = new Promise(resolve => {
 
 
 
 
2
  if (document.readyState === "loading") {
3
  if (document.addEventListener) {
4
  document.addEventListener('DOMContentLoaded', resolve);
5
  } else {
6
  document.attachEvent('onreadystatechange', function () {
7
- if (document.readyState != 'loading')
8
  resolve();
 
9
  });
10
  }
11
- }
12
- else {
13
  resolve();
14
  }
15
  });
@@ -18,27 +26,24 @@ export function selectItemByValue(el, value) {
18
  for (var i = 0; i < el.options.length; i++) {
19
  if (el.options[i].value === value) {
20
  el.selectedIndex = i;
21
- break;
22
  }
23
  }
 
24
  }
25
 
 
 
 
 
 
 
26
  export function selectItemByAttribute(el, attributeName, attributeValue) {
27
- for (var i = 0; i < el.options.length; i++) {
28
  if (el.options[i].getAttribute(attributeName) === attributeValue) {
29
  el.selectedIndex = i;
30
- break;
31
  }
32
  }
33
- }
34
-
35
-
36
- export function triggerNativeEvent(el, name) {
37
- if (document.createEvent) {
38
- const event = document.createEvent('HTMLEvents');
39
- event.initEvent(name, true, false);
40
- el.dispatchEvent(event);
41
- } else {
42
- el.fireEvent('on' + name);
43
- }
44
  }
1
+ export function isUnitTesting() {
2
+ return process.env.JEST_WORKER_ID !== undefined;
3
+ }
4
+
5
  export const domReady = new Promise(resolve => {
6
+ if (isUnitTesting()) {
7
+ resolve();
8
+ }
9
+
10
  if (document.readyState === "loading") {
11
  if (document.addEventListener) {
12
  document.addEventListener('DOMContentLoaded', resolve);
13
  } else {
14
  document.attachEvent('onreadystatechange', function () {
15
+ if (document.readyState != 'loading') {
16
  resolve();
17
+ }
18
  });
19
  }
20
+ } else {
 
21
  resolve();
22
  }
23
  });
26
  for (var i = 0; i < el.options.length; i++) {
27
  if (el.options[i].value === value) {
28
  el.selectedIndex = i;
29
+ return true;
30
  }
31
  }
32
+ return false;
33
  }
34
 
35
+ /**
36
+ * @param {*} el Select Tag
37
+ * @param {string} attributeName HTML attribute name to search by
38
+ * @param {string} attributeValue HTML attribute value to search by
39
+ * @returns boolean TRUE if Value found in select tag
40
+ */
41
  export function selectItemByAttribute(el, attributeName, attributeValue) {
42
+ for (let i = 0; i < el.options.length; i++) {
43
  if (el.options[i].getAttribute(attributeName) === attributeValue) {
44
  el.selectedIndex = i;
45
+ return true;
46
  }
47
  }
48
+ return false;
 
 
 
 
 
 
 
 
 
 
49
  }
js/lib/localStorageAccess.js CHANGED
@@ -3,6 +3,10 @@ export const setLocalStorage = function (variable, value, ttl_sec) {
3
  localStorage.setItem(variable.toString(), JSON.stringify(data));
4
  };
5
 
 
 
 
 
6
  export const getLocalStorage = function (variable) {
7
  let data = null;
8
  try {
@@ -18,4 +22,4 @@ export const getLocalStorage = function (variable) {
18
  }
19
  }
20
  return null;
21
- }
3
  localStorage.setItem(variable.toString(), JSON.stringify(data));
4
  };
5
 
6
+ export function removeLocalStorage(variable) {
7
+ localStorage.removeItem(variable);
8
+ }
9
+
10
  export const getLocalStorage = function (variable) {
11
  let data = null;
12
  try {
22
  }
23
  }
24
  return null;
25
+ }
js/lookup/get_info.js ADDED
@@ -0,0 +1,98 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import Record from '../models/record';
2
+
3
+ import { makeJSONRequest } from '../lib/xhr';
4
+ import { getRecordDataFromLocalStorage, setRecordDataToLocalStorage } from "./storage";
5
+
6
+
7
+ export const options = window.geoip_detect?.options || {
8
+ ajaxurl: "/wp-admin/admin-ajax.php",
9
+ default_locales: ['en'],
10
+ cookie_duration_in_days: 7,
11
+ cookie_name: 'geoip-detect-result',
12
+ do_body_classes: false
13
+ };
14
+
15
+ let ajaxPromise = null;
16
+
17
+ function get_info_raw() {
18
+ if (!ajaxPromise) {
19
+ // Do Ajax Request only once per page load
20
+ const url = options.ajaxurl + '?action=geoip_detect2_get_info_from_current_ip'
21
+
22
+ ajaxPromise = makeJSONRequest(url);
23
+
24
+ ajaxPromise.then((response) => {
25
+ if (response?.extra?.error) {
26
+ console.error('Geolocation IP Detection Error: Server returned an error: ' + response.extra.error);
27
+ }
28
+ })
29
+ }
30
+
31
+ return ajaxPromise;
32
+ }
33
+
34
+ async function get_info_cached() {
35
+ let response = false;
36
+ let storedResponse = false;
37
+
38
+ // 1) Load Info from localstorage cookie cache, if possible
39
+ if (options.cookie_name) {
40
+ storedResponse = getRecordDataFromLocalStorage()
41
+ if (storedResponse && storedResponse.extra) {
42
+ if (storedResponse.extra.override === true) {
43
+ console.info('Geolocation IP Detection: Using cached response (override)');
44
+ } else {
45
+ console.info('Geolocation IP Detection: Using cached response');
46
+ }
47
+ return storedResponse;
48
+ }
49
+ }
50
+
51
+ // 2) Get response
52
+ try {
53
+ response = await get_info_raw();
54
+ } catch (err) {
55
+ console.log('Weird: Uncaught error...', err);
56
+ response = err.responseJSON || err;
57
+ }
58
+
59
+ // 3) Save info to localstorage cookie cache
60
+ if (options.cookie_name) {
61
+
62
+ // Check if Override has been set now
63
+ storedResponse = getRecordDataFromLocalStorage()
64
+ if (storedResponse?.extra?.override === true) {
65
+ console.info('Geolocation IP Detection: Using cached response (override)');
66
+ return storedResponse;
67
+ }
68
+
69
+ let cache_duration = options.cookie_duration_in_days * 24 * 60 * 60;
70
+ if (response?.extra?.error)
71
+ cache_duration = 60; // Cache errors only for 1 minute, then try again
72
+
73
+ setRecordDataToLocalStorage(response, cache_duration);
74
+ }
75
+
76
+ return response;
77
+ }
78
+
79
+
80
+ /**
81
+ * Load the data from the server
82
+ *
83
+ * (It can also be loaded from the browser localstorage, if the record data is present there already.)
84
+ *
85
+ * @api
86
+ * @return Promise(Record)
87
+ */
88
+ export async function get_info() {
89
+ let response = await get_info_cached();
90
+
91
+ if (typeof (response) !== 'object') {
92
+ console.error('Geolocation IP Detection Error: Record should be an object, not a ' + typeof (response), response);
93
+ response = { 'extra': { 'error': response || 'Network error, look at the original server response ...' } };
94
+ }
95
+
96
+ const record = new Record(response, options.default_locales);
97
+ return record;
98
+ }
js/lookup/get_info.test.js ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * @jest-environment jsdom
3
+ */
4
+
5
+ import { options } from "./get_info";
6
+
7
+ test('options', () => {
8
+ options
9
+
10
+ expect(options.do_body_classes).toBe(false);
11
+ });
js/lookup/override.js ADDED
@@ -0,0 +1,117 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import { setLocalStorage } from '../lib/localStorageAccess';
2
+ import { options as globalOptions } from './get_info';
3
+ import { camelToUnderscore } from '../models/record';
4
+ import _set from 'just-safe-set';
5
+ import _get from 'just-safe-get';
6
+ import _is_object_content_equal from 'just-compare';
7
+ import { main } from '../main';
8
+ import { getRecordDataFromLocalStorage, getRecordDataLastEvaluated } from './storage';
9
+
10
+ function processOptions(options) {
11
+ options = options || {};
12
+ if (typeof(options) == 'number') {
13
+ options = {
14
+ 'duration_in_days': options
15
+ };
16
+ }
17
+
18
+ options.duration_in_days = options.duration_in_days || globalOptions.cookie_duration_in_days;
19
+ if (options.duration_in_days < 0) {
20
+ console.warn('Geolocation IP Detection set_override_data() did nothing: A negative duration doesn\'t make sense. If you want to remove the override, use remove_override() instead.');
21
+ return false;
22
+ }
23
+
24
+ if (typeof (options.reevaluate) == 'undefined' ) {
25
+ options.reevaluate = true;
26
+ }
27
+
28
+ return options;
29
+ }
30
+
31
+ function changeRecord(record, property, value) {
32
+ record = record || {};
33
+ property = property || '';
34
+
35
+ property = camelToUnderscore(property);
36
+
37
+ const oldData = _get(record, property);
38
+ if (typeof (oldData) == 'object' && typeof (oldData.names) == 'object') {
39
+ property += '.name';
40
+ }
41
+ if (property.endsWith('.name')) {
42
+ property += 's'; // e.g. country.name -> country.names
43
+ value = { 'en': value };
44
+ }
45
+
46
+ _set(record, property, value);
47
+
48
+ return record;
49
+ }
50
+
51
+ /**
52
+ * Override only one property, leave the other properties as-is.
53
+ * @param {string} property
54
+ * @param {*} value
55
+ */
56
+ export function set_override_with_merge(property, value, options) {
57
+ let record = getRecordDataFromLocalStorage();
58
+
59
+ record = changeRecord(record, property, value);
60
+
61
+ set_override(record, options);
62
+
63
+ if (process.env.NODE_ENV !== 'production') {
64
+ console.log("Override is now: ", getRecordDataFromLocalStorage());
65
+ }
66
+ }
67
+
68
+ /**
69
+ * This functions allows to override the geodetected data manually (e.g. a country selector)
70
+ *
71
+ * @api
72
+ * @param {*} record
73
+ * @param {object} options
74
+ * @param {number} duration_in_days When this override expires (default: 1 week later)
75
+ * @param {boolean} reevaluate If the shortcodes etc. should be re-evaluated (default: true)
76
+ * @return boolean TRUE if override data changed
77
+ */
78
+ export function set_override(record, options) {
79
+ options = processOptions(options);
80
+
81
+ if (record && typeof (record.serialize) === 'function') {
82
+ record = record.serialize();
83
+ }
84
+
85
+ return set_override_data(record, options);
86
+ }
87
+
88
+ function set_override_data(newData, options) {
89
+ newData = newData || {};
90
+ _set(newData, 'extra.override', true);
91
+
92
+ setLocalStorage(globalOptions.cookie_name, newData, options.duration_in_days * 24 * 60 * 60);
93
+
94
+ if (options.reevaluate && !_is_object_content_equal(newData, getRecordDataLastEvaluated())) {
95
+ main();
96
+ return true;
97
+ }
98
+
99
+ return false;
100
+ }
101
+
102
+ /**
103
+ * Remove the override data.
104
+ * On next page load, the record data will be loaded from the server again.
105
+ *
106
+ * @return boolean
107
+ */
108
+ export function remove_override(options) {
109
+ options = processOptions(options);
110
+ setLocalStorage(globalOptions.cookie_name, {}, -1);
111
+ if (options.reevaluate) {
112
+ main();
113
+ }
114
+ return true;
115
+ }
116
+
117
+
js/lookup/override.test.js ADDED
@@ -0,0 +1,87 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * @jest-environment jsdom
3
+ */
4
+
5
+ import { set_override, set_override_with_merge } from "./override";
6
+ import { getTestRecord } from "../test-lib/test-records";
7
+ import Record from "../models/record";
8
+ import { get_info } from "./get_info";
9
+ import { options as globalOptions } from './get_info';
10
+ import { get_info_stored_locally_record } from "./storage";
11
+
12
+ const defaultRecord = getTestRecord();
13
+ const emptyRecord = new Record();
14
+
15
+ test('override', async () => {
16
+ let record;
17
+
18
+ set_override(defaultRecord);
19
+ record = await get_info();
20
+
21
+ expect(record.get_country_iso()).toBe('de');
22
+ expect(record.get('extra.override')).toBe(true);
23
+
24
+ set_override(emptyRecord);
25
+ record = await get_info();
26
+
27
+ expect(record.get_country_iso()).toBe('');
28
+
29
+ set_override({ country: { iso_code: 'fr' } });
30
+ record = get_info_stored_locally_record();
31
+
32
+ expect(record.get_country_iso()).toBe('fr');
33
+
34
+ set_override({});
35
+ record = get_info_stored_locally_record();
36
+
37
+ expect(record.get_country_iso()).toBe('');
38
+ })
39
+
40
+ test('override if empty', () => {
41
+ localStorage.removeItem(globalOptions.cookie_name);
42
+ set_override_with_merge('country.iso_code', 'FR');
43
+ let record = get_info_stored_locally_record();
44
+ expect(record.get_country_iso()).toBe('fr');
45
+ });
46
+
47
+ test('override data', () => {
48
+ let record;
49
+
50
+ set_override({ country: { iso_code: 'fr' } });
51
+ record = get_info_stored_locally_record();
52
+ expect(record.get_country_iso()).toBe('fr');
53
+
54
+ set_override({});
55
+ record = get_info_stored_locally_record();
56
+ expect(record.get_country_iso()).toBe('');
57
+
58
+ set_override({ country: { iso_code: 'ru' } });
59
+ record = get_info_stored_locally_record();
60
+ expect(record.get_country_iso()).toBe('ru');
61
+
62
+ set_override();
63
+ record = get_info_stored_locally_record();
64
+ expect(record.get_country_iso()).toBe('');
65
+
66
+ set_override_with_merge('country.iso_code', 'fr');
67
+ record = get_info_stored_locally_record();
68
+ expect(record.get_country_iso()).toBe('fr');
69
+ set_override_with_merge('city.name', 'Paris');
70
+ record = get_info_stored_locally_record();
71
+ expect(record.get_country_iso()).toBe('fr');
72
+ expect(record.get('city.name')).toBe('Paris');
73
+
74
+ set_override_with_merge('a.b.c', 'd');
75
+ record = get_info_stored_locally_record();
76
+ expect(record.get('a.b.c')).toBe('d');
77
+ });
78
+
79
+ test('warning if negative duration', () => {
80
+ const spy = jest.spyOn(console, 'warn').mockImplementation(() => { })
81
+
82
+ const ret = set_override({ country: { iso_code: 'fr' } }, -4);
83
+ expect(ret).toBe(false);
84
+
85
+ expect(spy).toHaveBeenCalled();
86
+ spy.mockRestore();
87
+ });
js/lookup/storage.js ADDED
@@ -0,0 +1,25 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import { getLocalStorage, setLocalStorage } from '../lib/localStorageAccess';
2
+ import { options as globalOptions } from './get_info';
3
+ import Record from '../models/record';
4
+
5
+ // Sync function in case it is known that no AJAX will occur
6
+ export function getRecordDataFromLocalStorage() {
7
+ return getLocalStorage(globalOptions.cookie_name);
8
+ }
9
+
10
+ export function setRecordDataToLocalStorage(data, cache_duration) {
11
+ setLocalStorage(globalOptions.cookie_name, data, cache_duration);
12
+ }
13
+
14
+ let lastEvaluated = {};
15
+ export function getRecordDataLastEvaluated() {
16
+ return lastEvaluated;
17
+ }
18
+ export function setRecordDataLastEvaluated() {
19
+ lastEvaluated = getRecordDataFromLocalStorage();
20
+ }
21
+
22
+
23
+ export function get_info_stored_locally_record() {
24
+ return new Record(getRecordDataFromLocalStorage(), globalOptions.default_locales);
25
+ }
js/main.js ADDED
@@ -0,0 +1,26 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import { do_shortcodes, do_shortcodes_init } from './shortcodes/index';
2
+ import { add_body_classes } from './body_classes';
3
+ import { options } from './lookup/get_info';
4
+ import { setRecordDataLastEvaluated } from "./lookup/storage";
5
+
6
+ let firstCall = true;
7
+
8
+ export function main() {
9
+ if (process.env.NODE_ENV !== 'production') {
10
+ console.log('Do Main');
11
+ }
12
+
13
+ if (firstCall) {
14
+ do_shortcodes_init();
15
+ firstCall = false;
16
+ }
17
+
18
+ if (options.do_body_classes) {
19
+ add_body_classes();
20
+ }
21
+
22
+ // Do all the shortcodes that are in the HTML. Even if shortcodes is not enabled globally, they might be enabled for a specific shortcode.
23
+ do_shortcodes();
24
+
25
+ setRecordDataLastEvaluated();
26
+ }
js/shortcodes/helpers.js CHANGED
@@ -1,4 +1,4 @@
1
- import { get_info } from "../lookup";
2
 
3
  // Get Options from data-options and json parse them
4
  export function get_options(el) {
1
+ import { get_info } from "../lookup/get_info";
2
 
3
  // Get Options from data-options and json parse them
4
  export function get_options(el) {
js/shortcodes/index.js CHANGED
@@ -1,10 +1,16 @@
1
  import { domReady } from "../lib/html";
2
  import { action_on_elements } from "./helpers";
3
  import { do_shortcode_country_select, do_shortcode_flags, do_shortcode_normal, do_shortcode_text_input } from "./normal";
 
4
  import { do_shortcode_show_if } from "./show-if";
5
 
6
 
 
 
 
 
7
  export const do_shortcodes = async function do_shortcodes() {
 
8
  await domReady;
9
 
10
  // These are called in parallel, as they are async functions
@@ -22,5 +28,4 @@ export const do_shortcodes = async function do_shortcodes() {
22
 
23
  action_on_elements('js-geoip-detect-show-if',
24
  'could not execute the show-if/hide-if conditions', do_shortcode_show_if);
25
-
26
- };
1
  import { domReady } from "../lib/html";
2
  import { action_on_elements } from "./helpers";
3
  import { do_shortcode_country_select, do_shortcode_flags, do_shortcode_normal, do_shortcode_text_input } from "./normal";
4
+ import { init as onchangeInit } from "./onchange";
5
  import { do_shortcode_show_if } from "./show-if";
6
 
7
 
8
+ export const do_shortcodes_init = function () {
9
+ onchangeInit();
10
+ }
11
+
12
  export const do_shortcodes = async function do_shortcodes() {
13
+ // Before doing any of these, the DOM tree needs to be loaded
14
  await domReady;
15
 
16
  // These are called in parallel, as they are async functions
28
 
29
  action_on_elements('js-geoip-detect-show-if',
30
  'could not execute the show-if/hide-if conditions', do_shortcode_show_if);
31
+ };
 
js/shortcodes/normal.js CHANGED
@@ -1,5 +1,7 @@
1
- import { selectItemByAttribute, triggerNativeEvent } from "../lib/html";
 
2
  import { get_value_from_record, get_options } from "./helpers";
 
3
 
4
  export function do_shortcode_normal(el, record) {
5
  el.innerText = get_value_from_record(el, record);
@@ -12,11 +14,19 @@ export function do_shortcode_flags(el, record) {
12
  }
13
  }
14
 
 
15
  export function do_shortcode_country_select(el, record) {
16
  let country = record.get_country_iso();
17
 
18
- selectItemByAttribute(el, 'data-c', country);
19
- triggerNativeEvent(el, 'change');
 
 
 
 
 
 
 
20
  }
21
 
22
  export function do_shortcode_text_input(el, record) {
1
+ import { triggerNativeEvent } from "../lib/events";
2
+ import { selectItemByAttribute } from "../lib/html";
3
  import { get_value_from_record, get_options } from "./helpers";
4
+ import { autosave_element } from "./onchange";
5
 
6
  export function do_shortcode_normal(el, record) {
7
  el.innerText = get_value_from_record(el, record);
14
  }
15
  }
16
 
17
+
18
  export function do_shortcode_country_select(el, record) {
19
  let country = record.get_country_iso();
20
 
21
+ if (selectItemByAttribute(el, 'data-c', country)) {
22
+ triggerNativeEvent(el, 'change');
23
+ return;
24
+ }
25
+
26
+ // The country is not the list of countries - select empty option instead
27
+ if (selectItemByAttribute(el, 'data-c', '')) {
28
+ triggerNativeEvent(el, 'change');
29
+ }
30
  }
31
 
32
  export function do_shortcode_text_input(el, record) {
js/shortcodes/onchange.js ADDED
@@ -0,0 +1,48 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ import { check_recursive_after, check_recursive_before } from "../lib/check-recursive";
3
+ import { isInternalEvent } from "../lib/events";
4
+ import { set_override_with_merge } from "../lookup/override";
5
+ import { get_options } from "./helpers";
6
+
7
+ export function init() {
8
+ document.addEventListener('change', event_listener_autosave_on_change, false);
9
+ }
10
+
11
+ function event_listener_autosave_on_change(event) {
12
+ if (isInternalEvent()) {
13
+ return;
14
+ }
15
+
16
+ const target = event.target;
17
+ if (target?.matches && target.matches('.js-geoip-detect-input-autosave')) {
18
+ if (process.env.NODE_ENV !== 'production') {
19
+ console.log('autosave on change', target);
20
+ }
21
+
22
+ autosave_element(target);
23
+ }
24
+ }
25
+
26
+ /**
27
+ * When calling this method, be very careful not to introduce an infinite loop!
28
+ * @param {*} el
29
+ */
30
+ export function autosave_element(el) {
31
+ const property = get_options(el).property;
32
+ const value = el.value;
33
+
34
+ if (!check_recursive_before()) {
35
+ return;
36
+ }
37
+
38
+ if (el.matches('select.js-geoip-detect-country-select')) {
39
+ const selected = el.options[el.selectedIndex];
40
+ const isoCode = selected?.getAttribute('data-c');
41
+
42
+ set_override_with_merge('country.iso_code', isoCode.toUpperCase(), { reevaluate: false });
43
+ }
44
+
45
+ set_override_with_merge(property, value, { reevaluate: true }); // might call do_shortcodes etc.
46
+
47
+ check_recursive_after();
48
+ }
js/shortcodes/show-if.js CHANGED
@@ -7,9 +7,13 @@ export function do_shortcode_show_if(el, record) {
7
  const evaluated = geoip_detect2_shortcode_evaluate_conditions(opt.parsed, opt, record);
8
 
9
  if (!evaluated) {
10
- el.style.display = "none !important";
 
 
11
  } else {
12
  el.style.display = '';
 
 
13
  }
14
  }
15
 
@@ -77,6 +81,11 @@ function geoip_detect2_shortcode_check_subcondition(expectedValues, actualValues
77
  actualValues = actualValues.map(x => String(x).toLowerCase())
78
 
79
  expectedValues = expectedValues.split(',');
 
 
 
 
 
80
 
81
  const intersect = _intersect(expectedValues, actualValues);
82
 
7
  const evaluated = geoip_detect2_shortcode_evaluate_conditions(opt.parsed, opt, record);
8
 
9
  if (!evaluated) {
10
+ el.style.display = "none";
11
+ el.classList.add('geoip-hidden');
12
+ el.classList.remove('geoip-shown');
13
  } else {
14
  el.style.display = '';
15
+ el.classList.remove('geoip-hidden');
16
+ el.classList.add('geoip-shown');
17
  }
18
  }
19
 
81
  actualValues = actualValues.map(x => String(x).toLowerCase())
82
 
83
  expectedValues = expectedValues.split(',');
84
+ if (expectedValues.indexOf('') !== -1) {
85
+ if (actualValues.length === 0) {
86
+ return true;
87
+ }
88
+ }
89
 
90
  const intersect = _intersect(expectedValues, actualValues);
91
 
js/shortcodes/show-if.test.js CHANGED
@@ -6,10 +6,15 @@ const { getTestRecordError, getTestRecord } = require("../test-lib/test-records"
6
  import { geoip_detect2_shortcode_evaluate_conditions } from './show-if';
7
 
8
  const testFixture = require('../../tests/fixture_shortcode_show_if.json');
9
-
10
  test.each(testFixture)('Show if Test #%d: %s', (nb, input, expected, parsed, opt) => {
11
  const record = getTestRecord(opt.lang);
12
  const result = geoip_detect2_shortcode_evaluate_conditions(parsed, opt, record);
13
  expect(result).toBe(expected);
14
  });
15
 
 
 
 
 
 
 
6
  import { geoip_detect2_shortcode_evaluate_conditions } from './show-if';
7
 
8
  const testFixture = require('../../tests/fixture_shortcode_show_if.json');
 
9
  test.each(testFixture)('Show if Test #%d: %s', (nb, input, expected, parsed, opt) => {
10
  const record = getTestRecord(opt.lang);
11
  const result = geoip_detect2_shortcode_evaluate_conditions(parsed, opt, record);
12
  expect(result).toBe(expected);
13
  });
14
 
15
+ const testFixtureEmpty = require('../../tests/fixture_shortcode_show_if_empty.json');
16
+ test.each(testFixtureEmpty)('Show if (empty) Test #%d: %s', (nb, input, expected, parsed, opt) => {
17
+ const record = getTestRecordError(opt.lang);
18
+ const result = geoip_detect2_shortcode_evaluate_conditions(parsed, opt, record);
19
+ expect(result).toBe(expected);
20
+ });
lib/geonames/data/country-info.php CHANGED
@@ -1,5 +1,5 @@
1
  <?php
2
- // Generated at Mon, 26 Oct 2020 11:17:35 +0100
3
  return array (
4
  'countries' =>
5
  array (
@@ -109,8 +109,8 @@ return array (
109
  'de' => 'Antigua und Barbuda',
110
  'it' => 'Antigua e Barbuda',
111
  'es' => 'Antigua y Barbuda',
112
- 'fr' => 'Antigua et Barbuda',
113
- 'ja' => 'アンティグアバブーダ',
114
  'pt-BR' => 'Antígua e Barbuda',
115
  'ru' => 'Антигуа и Барбуда',
116
  'zh-CN' => '安提瓜和巴布达',
@@ -172,7 +172,7 @@ return array (
172
  'it' => 'Albania',
173
  'es' => 'Albania',
174
  'fr' => 'Albanie',
175
- 'ja' => 'アルバニア共和国',
176
  'pt-BR' => 'Albânia',
177
  'ru' => 'Албания',
178
  'zh-CN' => '阿尔巴尼亚',
@@ -203,7 +203,7 @@ return array (
203
  'it' => 'Armenia',
204
  'es' => 'Armenia',
205
  'fr' => 'Arménie',
206
- 'ja' => 'アルメニア共和国',
207
  'pt-BR' => 'Armênia',
208
  'ru' => 'Армения',
209
  'zh-CN' => '亚美尼亚',
@@ -234,7 +234,7 @@ return array (
234
  'it' => 'Angola',
235
  'es' => 'Angola',
236
  'fr' => 'Angola',
237
- 'ja' => 'アンゴラ共和国',
238
  'pt-BR' => 'Angola',
239
  'ru' => 'Ангола',
240
  'zh-CN' => '安哥拉',
@@ -292,7 +292,7 @@ return array (
292
  'it' => 'Argentina',
293
  'es' => 'Argentina',
294
  'fr' => 'Argentine',
295
- 'ja' => 'アルゼンチン共和国',
296
  'pt-BR' => 'Argentina',
297
  'ru' => 'Аргентина',
298
  'zh-CN' => '阿根廷',
@@ -354,7 +354,7 @@ return array (
354
  'it' => 'Austria',
355
  'es' => 'Austria',
356
  'fr' => 'Autriche',
357
- 'ja' => 'オーストリア共和国',
358
  'pt-BR' => 'Áustria',
359
  'ru' => 'Австрия',
360
  'zh-CN' => '奥地利',
@@ -443,9 +443,9 @@ return array (
443
  'names' =>
444
  array (
445
  'en' => 'Åland',
446
- 'de' => 'Alandinseln',
447
  'it' => 'Isole Åland',
448
- 'es' => 'Islas de Åland',
449
  'fr' => 'Îles Åland',
450
  'ja' => 'オーランド諸島',
451
  'pt-BR' => 'Alanda',
@@ -478,7 +478,7 @@ return array (
478
  'it' => 'Azerbaigian',
479
  'es' => 'Azerbaiyán',
480
  'fr' => 'Azerbaïdjan',
481
- 'ja' => 'アゼルバイジャン共和国',
482
  'pt-BR' => 'Azerbaijão',
483
  'ru' => 'Азербайджан',
484
  'zh-CN' => '阿塞拜疆',
@@ -509,10 +509,10 @@ return array (
509
  'it' => 'Bosnia ed Erzegovina',
510
  'es' => 'Bosnia-Herzegovina',
511
  'fr' => 'Bosnie-Herzégovine',
512
- 'ja' => 'ボスニア・ヘルツェゴビナ共和国',
513
- 'pt-BR' => 'Bósnia-Herzegóvina',
514
- 'ru' => 'Босния',
515
- 'zh-CN' => '波斯尼亚和黑山共和国',
516
  ),
517
  ),
518
  'continent' => 'EU',
@@ -571,10 +571,10 @@ return array (
571
  'it' => 'Bangladesh',
572
  'es' => 'Bangladesh',
573
  'fr' => 'Bangladesh',
574
- 'ja' => 'バングラディッシュ人民共和国',
575
- 'pt-BR' => 'Bangladexe',
576
  'ru' => 'Бангладеш',
577
- 'zh-CN' => '孟加拉',
578
  ),
579
  ),
580
  'continent' => 'AS',
@@ -602,7 +602,7 @@ return array (
602
  'it' => 'Belgio',
603
  'es' => 'Bélgica',
604
  'fr' => 'Belgique',
605
- 'ja' => 'ベルギー王国',
606
  'pt-BR' => 'Bélgica',
607
  'ru' => 'Бельгия',
608
  'zh-CN' => '比利时',
@@ -634,8 +634,8 @@ return array (
634
  'es' => 'Burkina Faso',
635
  'fr' => 'Burkina Faso',
636
  'ja' => 'ブルキナファソ',
637
- 'pt-BR' => 'Burkina Fasso',
638
- 'ru' => 'Буркина Фасо',
639
  'zh-CN' => '布基纳法索',
640
  ),
641
  ),
@@ -664,7 +664,7 @@ return array (
664
  'it' => 'Bulgaria',
665
  'es' => 'Bulgaria',
666
  'fr' => 'Bulgarie',
667
- 'ja' => 'ブルガリア共和国',
668
  'pt-BR' => 'Bulgária',
669
  'ru' => 'Болгария',
670
  'zh-CN' => '保加利亚',
@@ -726,7 +726,7 @@ return array (
726
  'it' => 'Burundi',
727
  'es' => 'Burundi',
728
  'fr' => 'Burundi',
729
- 'ja' => 'ブルンジ共和国',
730
  'pt-BR' => 'Burundi',
731
  'ru' => 'Бурунди',
732
  'zh-CN' => '布隆迪',
@@ -757,7 +757,7 @@ return array (
757
  'it' => 'Benin',
758
  'es' => 'Benín',
759
  'fr' => 'Bénin',
760
- 'ja' => 'ベニン共和国',
761
  'pt-BR' => 'Benin',
762
  'ru' => 'Бенин',
763
  'zh-CN' => '贝宁',
@@ -785,7 +785,7 @@ return array (
785
  array (
786
  'en' => 'Saint Barthélemy',
787
  'de' => 'St. Barthélemy',
788
- 'it' => 'San Bartolomeo',
789
  'es' => 'San Bartolomé',
790
  'fr' => 'Saint-Barthélemy',
791
  'ja' => 'サン・バルテルミー',
@@ -849,10 +849,10 @@ return array (
849
  'de' => 'Brunei',
850
  'it' => 'Brunei',
851
  'es' => 'Brunéi',
852
- 'fr' => 'Brunéi Darussalam',
853
  'ja' => 'ブルネイ',
854
  'pt-BR' => 'Brunei',
855
- 'ru' => 'Бруней Даруссалам',
856
  'zh-CN' => '文莱',
857
  ),
858
  ),
@@ -881,7 +881,7 @@ return array (
881
  'it' => 'Bolivia',
882
  'es' => 'Bolivia',
883
  'fr' => 'Bolivie',
884
- 'ja' => 'ボリビア共和国',
885
  'pt-BR' => 'Bolívia',
886
  'ru' => 'Боливия',
887
  'zh-CN' => '玻利维亚',
@@ -908,10 +908,10 @@ return array (
908
  'names' =>
909
  array (
910
  'en' => 'Bonaire, Sint Eustatius, and Saba',
911
- 'de' => 'Bonaire',
912
- 'it' => 'Caraibi Olandesi',
913
  'es' => 'Bonaire',
914
- 'fr' => 'Bonaire, Saint-Eustache et Saba',
915
  'ja' => 'ボネール、シント・ユースタティウスおよびサバ',
916
  'pt-BR' => 'Bonaire',
917
  'ru' => 'Бонайре, Синт-Эстатиус и Саба',
@@ -943,7 +943,7 @@ return array (
943
  'it' => 'Brasile',
944
  'es' => 'Brasil',
945
  'fr' => 'Brésil',
946
- 'ja' => 'ブラジル連邦共和国',
947
  'pt-BR' => 'Brasil',
948
  'ru' => 'Бразилия',
949
  'zh-CN' => '巴西',
@@ -974,7 +974,7 @@ return array (
974
  'it' => 'Bahamas',
975
  'es' => 'Bahamas',
976
  'fr' => 'Bahamas',
977
- 'ja' => 'バハマ国',
978
  'pt-BR' => 'Bahamas',
979
  'ru' => 'Багамы',
980
  'zh-CN' => '巴哈马',
@@ -1005,7 +1005,7 @@ return array (
1005
  'it' => 'Bhutan',
1006
  'es' => 'Bután',
1007
  'fr' => 'Bhoutan',
1008
- 'ja' => 'ブータン王国',
1009
  'pt-BR' => 'Butão',
1010
  'ru' => 'Бутан',
1011
  'zh-CN' => '不丹',
@@ -1038,8 +1038,8 @@ return array (
1038
  'fr' => 'Île Bouvet',
1039
  'ja' => 'ブーベ島',
1040
  'pt-BR' => 'Ilha Bouvet',
1041
- 'ru' => 'Остров Буве',
1042
- 'zh-CN' => '布维特岛',
1043
  ),
1044
  ),
1045
  'continent' => 'AN',
@@ -1067,7 +1067,7 @@ return array (
1067
  'it' => 'Botswana',
1068
  'es' => 'Botsuana',
1069
  'fr' => 'Botswana',
1070
- 'ja' => 'ボツワナ共和国',
1071
  'pt-BR' => 'Botsuana',
1072
  'ru' => 'Ботсвана',
1073
  'zh-CN' => '博茨瓦纳',
@@ -1094,12 +1094,12 @@ return array (
1094
  'names' =>
1095
  array (
1096
  'en' => 'Belarus',
1097
- 'de' => 'Weißrussland',
1098
  'it' => 'Bielorussia',
1099
  'es' => 'Bielorrusia',
1100
  'fr' => 'Biélorussie',
1101
- 'ja' => 'ベラルーシ共和国',
1102
- 'pt-BR' => 'Bielo-Rússia',
1103
  'ru' => 'Беларусь',
1104
  'zh-CN' => '白俄罗斯',
1105
  ),
@@ -1186,15 +1186,15 @@ return array (
1186
  'geoname_id' => 1547376,
1187
  'names' =>
1188
  array (
1189
- 'en' => 'Cocos [Keeling] Islands',
1190
  'de' => 'Kokosinseln',
1191
- 'it' => 'Isole Cocos',
1192
  'es' => 'Islas Cocos',
1193
  'fr' => 'Îles Cocos',
1194
- 'ja' => 'ココス[キーリング]諸島',
1195
- 'pt-BR' => 'Ilhas Coco',
1196
  'ru' => 'Кокосовые о-ва',
1197
- 'zh-CN' => '科科斯群岛',
1198
  ),
1199
  ),
1200
  'continent' => 'AS',
@@ -1223,7 +1223,7 @@ return array (
1223
  'es' => 'Congo Democrático',
1224
  'fr' => 'RDC',
1225
  'ja' => 'コンゴ民主共和国',
1226
- 'pt-BR' => 'Congo-Kinshasa',
1227
  'ru' => 'Заир',
1228
  'zh-CN' => '扎伊尔',
1229
  ),
@@ -1255,7 +1255,7 @@ return array (
1255
  'fr' => 'Centrafrique',
1256
  'ja' => '中央アフリカ共和国',
1257
  'pt-BR' => 'República Centro-Africana',
1258
- 'ru' => 'ЦАР',
1259
  'zh-CN' => '中非共和国',
1260
  ),
1261
  ),
@@ -1281,13 +1281,13 @@ return array (
1281
  array (
1282
  'en' => 'Congo Republic',
1283
  'de' => 'Kongo (Republik Kongo)',
1284
- 'it' => 'Congo',
1285
- 'es' => 'Congo [República]',
1286
  'fr' => 'Congo-Brazzaville',
1287
- 'ja' => 'コンゴ',
1288
  'pt-BR' => 'Congo',
1289
- 'ru' => 'Конго',
1290
- 'zh-CN' => '刚果',
1291
  ),
1292
  ),
1293
  'continent' => 'AF',
@@ -1315,7 +1315,7 @@ return array (
1315
  'it' => 'Svizzera',
1316
  'es' => 'Suiza',
1317
  'fr' => 'Suisse',
1318
- 'ja' => 'スイス連邦',
1319
  'pt-BR' => 'Suíça',
1320
  'ru' => 'Швейцария',
1321
  'zh-CN' => '瑞士',
@@ -1343,12 +1343,12 @@ return array (
1343
  array (
1344
  'en' => 'Ivory Coast',
1345
  'de' => 'Elfenbeinküste',
1346
- 'it' => 'Costa d\'Avorio',
1347
- 'es' => 'Costa de Marfil',
1348
  'fr' => 'Côte d\'Ivoire',
1349
  'ja' => '象牙海岸',
1350
- 'pt-BR' => 'Costa do Marfim',
1351
- 'ru' => 'Кот-д\'Ивуар',
1352
  'zh-CN' => '象牙海岸',
1353
  ),
1354
  ),
@@ -1408,7 +1408,7 @@ return array (
1408
  'it' => 'Cile',
1409
  'es' => 'Chile',
1410
  'fr' => 'Chili',
1411
- 'ja' => 'チリ共和国',
1412
  'pt-BR' => 'Chile',
1413
  'ru' => 'Чили',
1414
  'zh-CN' => '智利',
@@ -1439,7 +1439,7 @@ return array (
1439
  'it' => 'Camerun',
1440
  'es' => 'Camerún',
1441
  'fr' => 'Cameroun',
1442
- 'ja' => 'カメルーン共和国',
1443
  'pt-BR' => 'Camarões',
1444
  'ru' => 'Камерун',
1445
  'zh-CN' => '喀麦隆',
@@ -1501,7 +1501,7 @@ return array (
1501
  'it' => 'Colombia',
1502
  'es' => 'Colombia',
1503
  'fr' => 'Colombie',
1504
- 'ja' => 'コロンビア共和国',
1505
  'pt-BR' => 'Colômbia',
1506
  'ru' => 'Колумбия',
1507
  'zh-CN' => '哥伦比亚',
@@ -1563,7 +1563,7 @@ return array (
1563
  'it' => 'Cuba',
1564
  'es' => 'Cuba',
1565
  'fr' => 'Cuba',
1566
- 'ja' => 'キューバ共和国',
1567
  'pt-BR' => 'Cuba',
1568
  'ru' => 'Куба',
1569
  'zh-CN' => '古巴',
@@ -1596,7 +1596,7 @@ return array (
1596
  'fr' => 'Cap-Vert',
1597
  'ja' => 'カーボベルデ',
1598
  'pt-BR' => 'Cabo Verde',
1599
- 'ru' => 'Острова Зеленого Мыса',
1600
  'zh-CN' => '佛得角',
1601
  ),
1602
  ),
@@ -1622,7 +1622,7 @@ return array (
1622
  array (
1623
  'en' => 'Curaçao',
1624
  'de' => 'Curaçao',
1625
- 'it' => 'Curacao',
1626
  'es' => 'Curazao',
1627
  'fr' => 'Curaçao',
1628
  'ja' => 'キュラソー',
@@ -1653,12 +1653,12 @@ return array (
1653
  array (
1654
  'en' => 'Christmas Island',
1655
  'de' => 'Weihnachtsinsel',
1656
- 'it' => 'Isola di Christmas',
1657
- 'es' => 'Isla Christmas',
1658
  'fr' => 'Île Christmas',
1659
  'ja' => 'クリスマス島',
1660
- 'pt-BR' => 'Ilhas Natal',
1661
- 'ru' => 'Остров Рождества',
1662
  'zh-CN' => '圣诞岛',
1663
  ),
1664
  ),
@@ -1687,7 +1687,7 @@ return array (
1687
  'it' => 'Cipro',
1688
  'es' => 'Chipre',
1689
  'fr' => 'Chypre',
1690
- 'ja' => 'キプロス共和国',
1691
  'pt-BR' => 'Chipre',
1692
  'ru' => 'Кипр',
1693
  'zh-CN' => '塞浦路斯',
@@ -1696,8 +1696,8 @@ return array (
1696
  'continent' => 'EU',
1697
  'location' =>
1698
  array (
1699
- 'latitude' => 35.1674058361454,
1700
- 'longitude' => 33.43549949999999,
1701
  ),
1702
  'extra' =>
1703
  array (
@@ -1716,12 +1716,12 @@ return array (
1716
  'en' => 'Czechia',
1717
  'de' => 'Tschechien',
1718
  'it' => 'Cechia',
1719
- 'es' => 'República Checa',
1720
- 'fr' => 'République tchèque',
1721
- 'ja' => 'チェコ共和国',
1722
- 'pt-BR' => 'Tchéquia',
1723
- 'ru' => 'Чешская Республика',
1724
- 'zh-CN' => '捷克共和国',
1725
  ),
1726
  ),
1727
  'continent' => 'EU',
@@ -1749,7 +1749,7 @@ return array (
1749
  'it' => 'Germania',
1750
  'es' => 'Alemania',
1751
  'fr' => 'Allemagne',
1752
- 'ja' => 'ドイツ連邦共和国',
1753
  'pt-BR' => 'Alemanha',
1754
  'ru' => 'Германия',
1755
  'zh-CN' => '德国',
@@ -1811,7 +1811,7 @@ return array (
1811
  'it' => 'Danimarca',
1812
  'es' => 'Dinamarca',
1813
  'fr' => 'Danemark',
1814
- 'ja' => 'デンマーク王国',
1815
  'pt-BR' => 'Dinamarca',
1816
  'ru' => 'Дания',
1817
  'zh-CN' => '丹麦',
@@ -1844,8 +1844,8 @@ return array (
1844
  'fr' => 'Dominique',
1845
  'ja' => 'ドミニカ国',
1846
  'pt-BR' => 'Dominica',
1847
- 'ru' => 'Остров Доминика',
1848
- 'zh-CN' => '多米尼加',
1849
  ),
1850
  ),
1851
  'continent' => 'NA',
@@ -1871,8 +1871,8 @@ return array (
1871
  'en' => 'Dominican Republic',
1872
  'de' => 'Dom. Republik',
1873
  'it' => 'Repubblica Dominicana',
1874
- 'es' => 'República Dominicana',
1875
- 'fr' => 'République Dominicaine',
1876
  'ja' => 'ドミニカ共和国',
1877
  'pt-BR' => 'República Dominicana',
1878
  'ru' => 'Доминиканская Республика',
@@ -1904,7 +1904,7 @@ return array (
1904
  'it' => 'Algeria',
1905
  'es' => 'Argelia',
1906
  'fr' => 'Algérie',
1907
- 'ja' => 'アルジェリア民主人民共和国',
1908
  'pt-BR' => 'Argélia',
1909
  'ru' => 'Алжир',
1910
  'zh-CN' => '阿尔及利亚',
@@ -1935,7 +1935,7 @@ return array (
1935
  'it' => 'Ecuador',
1936
  'es' => 'Ecuador',
1937
  'fr' => 'Équateur',
1938
- 'ja' => 'エクアドル共和国',
1939
  'pt-BR' => 'Equador',
1940
  'ru' => 'Эквадор',
1941
  'zh-CN' => '厄瓜多尔',
@@ -1966,7 +1966,7 @@ return array (
1966
  'it' => 'Estonia',
1967
  'es' => 'Estonia',
1968
  'fr' => 'Estonie',
1969
- 'ja' => 'エストニア共和国',
1970
  'pt-BR' => 'Estônia',
1971
  'ru' => 'Эстония',
1972
  'zh-CN' => '爱沙尼亚',
@@ -1997,7 +1997,7 @@ return array (
1997
  'it' => 'Egitto',
1998
  'es' => 'Egipto',
1999
  'fr' => 'Égypte',
2000
- 'ja' => 'エジプト・アラブ共和国',
2001
  'pt-BR' => 'Egito',
2002
  'ru' => 'Египет',
2003
  'zh-CN' => '埃及',
@@ -2068,8 +2068,8 @@ return array (
2068
  'continent' => 'AF',
2069
  'location' =>
2070
  array (
2071
- 'latitude' => 15.1813195,
2072
- 'longitude' => 39.786709,
2073
  ),
2074
  'extra' =>
2075
  array (
@@ -2152,7 +2152,7 @@ return array (
2152
  'it' => 'Finlandia',
2153
  'es' => 'Finlandia',
2154
  'fr' => 'Finlande',
2155
- 'ja' => 'フィンランド共和国',
2156
  'pt-BR' => 'Finlândia',
2157
  'ru' => 'Финляндия',
2158
  'zh-CN' => '芬兰',
@@ -2247,7 +2247,7 @@ return array (
2247
  'fr' => 'Micronésie',
2248
  'ja' => 'ミクロネシア連邦',
2249
  'pt-BR' => 'Micronésia',
2250
- 'ru' => 'Микронезия',
2251
  'zh-CN' => '密克罗尼西亚',
2252
  ),
2253
  ),
@@ -2272,12 +2272,12 @@ return array (
2272
  'names' =>
2273
  array (
2274
  'en' => 'Faroe Islands',
2275
- 'de' => 'Färöer-Inseln',
2276
  'it' => 'Isole Faroe',
2277
  'es' => 'Islas Feroe',
2278
  'fr' => 'Îles Féroé',
2279
  'ja' => 'フェロー諸島',
2280
- 'pt-BR' => 'Ilhas Faroe',
2281
  'ru' => 'Фарерские о-ва',
2282
  'zh-CN' => '法罗群岛',
2283
  ),
@@ -2307,7 +2307,7 @@ return array (
2307
  'it' => 'Francia',
2308
  'es' => 'Francia',
2309
  'fr' => 'France',
2310
- 'ja' => 'フランス共和国',
2311
  'pt-BR' => 'França',
2312
  'ru' => 'Франция',
2313
  'zh-CN' => '法国',
@@ -2338,7 +2338,7 @@ return array (
2338
  'it' => 'Gabon',
2339
  'es' => 'Gabón',
2340
  'fr' => 'Gabon',
2341
- 'ja' => 'ガボン共和国',
2342
  'pt-BR' => 'Gabão',
2343
  'ru' => 'Габон',
2344
  'zh-CN' => '加蓬',
@@ -2365,13 +2365,13 @@ return array (
2365
  'names' =>
2366
  array (
2367
  'en' => 'United Kingdom',
2368
- 'de' => 'Vereinigtes Königreich',
2369
- 'it' => 'Regno Unito',
2370
- 'es' => 'Reino Unido',
2371
- 'fr' => 'Royaume-Uni',
2372
- 'ja' => 'イギリス',
2373
  'pt-BR' => 'Reino Unido',
2374
- 'ru' => 'Великобритания',
2375
  'zh-CN' => '英国',
2376
  ),
2377
  ),
@@ -2409,8 +2409,8 @@ return array (
2409
  'continent' => 'NA',
2410
  'location' =>
2411
  array (
2412
- 'latitude' => 12.15258846408565,
2413
- 'longitude' => -61.68955685054016,
2414
  ),
2415
  'extra' =>
2416
  array (
@@ -2459,7 +2459,7 @@ return array (
2459
  array (
2460
  'en' => 'French Guiana',
2461
  'de' => 'Französisch-Guayana',
2462
- 'it' => 'Guiana Francese',
2463
  'es' => 'Guayana Francesa',
2464
  'fr' => 'Guyane',
2465
  'ja' => '仏領ギアナ',
@@ -2491,12 +2491,12 @@ return array (
2491
  'en' => 'Guernsey',
2492
  'de' => 'Guernsey',
2493
  'it' => 'Guernsey',
2494
- 'es' => 'Guernsey',
2495
  'fr' => 'Guernesey',
2496
  'ja' => 'ガーンジー',
2497
  'pt-BR' => 'Guernsey',
2498
  'ru' => 'Гернси',
2499
- 'zh-CN' => '格恩西岛',
2500
  ),
2501
  ),
2502
  'continent' => 'EU',
@@ -2524,7 +2524,7 @@ return array (
2524
  'it' => 'Ghana',
2525
  'es' => 'Ghana',
2526
  'fr' => 'Ghana',
2527
- 'ja' => 'ガーナ共和国',
2528
  'pt-BR' => 'Gana',
2529
  'ru' => 'Гана',
2530
  'zh-CN' => '加纳',
@@ -2558,7 +2558,7 @@ return array (
2558
  'ja' => 'ジブラルタル',
2559
  'pt-BR' => 'Gibraltar',
2560
  'ru' => 'Гибралтар',
2561
- 'zh-CN' => '直布羅陀',
2562
  ),
2563
  ),
2564
  'continent' => 'EU',
@@ -2587,7 +2587,7 @@ return array (
2587
  'es' => 'Groenlandia',
2588
  'fr' => 'Groenland',
2589
  'ja' => 'グリーンランド',
2590
- 'pt-BR' => 'Gronelândia',
2591
  'ru' => 'Гренландия',
2592
  'zh-CN' => '格陵兰',
2593
  ),
@@ -2612,12 +2612,12 @@ return array (
2612
  'geoname_id' => 2413451,
2613
  'names' =>
2614
  array (
2615
- 'en' => 'Gambia',
2616
  'de' => 'Gambia',
2617
  'it' => 'Gambia',
2618
  'es' => 'Gambia',
2619
  'fr' => 'Gambie',
2620
- 'ja' => 'ガンビア共和国',
2621
  'pt-BR' => 'Gâmbia',
2622
  'ru' => 'Гамбия',
2623
  'zh-CN' => '冈比亚',
@@ -2648,7 +2648,7 @@ return array (
2648
  'it' => 'Guinea',
2649
  'es' => 'Guinea',
2650
  'fr' => 'Guinée',
2651
- 'ja' => 'ギニア共和国',
2652
  'pt-BR' => 'Guiné',
2653
  'ru' => 'Гвинея',
2654
  'zh-CN' => '几内亚',
@@ -2682,7 +2682,7 @@ return array (
2682
  'ja' => 'グアドループ',
2683
  'pt-BR' => 'Guadalupe',
2684
  'ru' => 'Гваделупа',
2685
- 'zh-CN' => '瓜德罗普岛',
2686
  ),
2687
  ),
2688
  'continent' => 'NA',
@@ -2710,7 +2710,7 @@ return array (
2710
  'it' => 'Guinea Equatoriale',
2711
  'es' => 'Guinea Ecuatorial',
2712
  'fr' => 'Guinée équatoriale',
2713
- 'ja' => '赤道ギニア共和国',
2714
  'pt-BR' => 'Guiné Equatorial',
2715
  'ru' => 'Экваториальная Гвинея',
2716
  'zh-CN' => '赤道几内亚',
@@ -2719,8 +2719,8 @@ return array (
2719
  'continent' => 'AF',
2720
  'location' =>
2721
  array (
2722
- 'latitude' => 1.6339245,
2723
- 'longitude' => 10.3412945,
2724
  ),
2725
  'extra' =>
2726
  array (
@@ -2741,7 +2741,7 @@ return array (
2741
  'it' => 'Grecia',
2742
  'es' => 'Grecia',
2743
  'fr' => 'Grèce',
2744
- 'ja' => 'ギリシャ共和国',
2745
  'pt-BR' => 'Grécia',
2746
  'ru' => 'Греция',
2747
  'zh-CN' => '希腊',
@@ -2769,13 +2769,13 @@ return array (
2769
  array (
2770
  'en' => 'South Georgia and South Sandwich Islands',
2771
  'de' => 'Südgeorgien und die Südlichen Sandwichinseln',
2772
- 'it' => 'Georgia del Sud e isole Sandwich meridionali',
2773
  'es' => 'Islas Georgia del Sur y Sandwich del Sur',
2774
  'fr' => 'Géorgie du Sud-et-les îles Sandwich du Sud',
2775
- 'ja' => '南ジョージア島・南サンドイッチ諸島',
2776
- 'pt-BR' => 'Geórgia do Sul e Ilhas Sandwich do Sul',
2777
- 'ru' => 'Южная Джорджия и Южные Сандвичевы Острова',
2778
- 'zh-CN' => '南乔治亚岛和南桑威齐群岛',
2779
  ),
2780
  ),
2781
  'continent' => 'AN',
@@ -2865,9 +2865,9 @@ return array (
2865
  'it' => 'Guinea-Bissau',
2866
  'es' => 'Guinea-Bissáu',
2867
  'fr' => 'Guinée-Bissau',
2868
- 'ja' => 'ギニアビサウ共和国',
2869
- 'pt-BR' => 'República da Guiné-Bissau',
2870
- 'ru' => 'Гвинея-Биссау',
2871
  'zh-CN' => '几内亚比绍',
2872
  ),
2873
  ),
@@ -2953,15 +2953,15 @@ return array (
2953
  'geoname_id' => 1547314,
2954
  'names' =>
2955
  array (
2956
- 'en' => 'Heard Island and McDonald Islands',
2957
- 'de' => 'Heard- und McDonald-Inseln',
2958
  'it' => 'Isole Heard e McDonald',
2959
  'es' => 'Islas Heard y McDonald',
2960
  'fr' => 'Île Heard et îles McDonald',
2961
  'ja' => 'ハード島・マクドナルド諸島',
2962
- 'pt-BR' => 'Ilha Heard e Ilhas McDonald',
2963
- 'ru' => 'Острова Херд и Макдональд',
2964
- 'zh-CN' => '赫德与麦克唐纳群岛',
2965
  ),
2966
  ),
2967
  'continent' => 'AN',
@@ -2989,7 +2989,7 @@ return array (
2989
  'it' => 'Honduras',
2990
  'es' => 'Honduras',
2991
  'fr' => 'Honduras',
2992
- 'ja' => 'ホンジュラス共和国',
2993
  'pt-BR' => 'Honduras',
2994
  'ru' => 'Гондурас',
2995
  'zh-CN' => '洪都拉斯',
@@ -3020,7 +3020,7 @@ return array (
3020
  'it' => 'Croazia',
3021
  'es' => 'Croacia',
3022
  'fr' => 'Croatie',
3023
- 'ja' => 'クロアチア共和国',
3024
  'pt-BR' => 'Croácia',
3025
  'ru' => 'Хорватия',
3026
  'zh-CN' => '克罗地亚',
@@ -3051,7 +3051,7 @@ return array (
3051
  'it' => 'Haiti',
3052
  'es' => 'Haití',
3053
  'fr' => 'Haïti',
3054
- 'ja' => 'ハイチ共和国',
3055
  'pt-BR' => 'Haiti',
3056
  'ru' => 'Гаити',
3057
  'zh-CN' => '海地',
@@ -3082,7 +3082,7 @@ return array (
3082
  'it' => 'Ungheria',
3083
  'es' => 'Hungría',
3084
  'fr' => 'Hongrie',
3085
- 'ja' => 'ハンガリー共和国',
3086
  'pt-BR' => 'Hungria',
3087
  'ru' => 'Венгрия',
3088
  'zh-CN' => '匈牙利',
@@ -3113,7 +3113,7 @@ return array (
3113
  'it' => 'Indonesia',
3114
  'es' => 'Indonesia',
3115
  'fr' => 'Indonésie',
3116
- 'ja' => 'インドネシア共和国',
3117
  'pt-BR' => 'Indonésia',
3118
  'ru' => 'Индонезия',
3119
  'zh-CN' => '印度尼西亚',
@@ -3175,7 +3175,7 @@ return array (
3175
  'it' => 'Israele',
3176
  'es' => 'Israel',
3177
  'fr' => 'Israël',
3178
- 'ja' => 'イスラエル国',
3179
  'pt-BR' => 'Israel',
3180
  'ru' => 'Израиль',
3181
  'zh-CN' => '以色列',
@@ -3202,14 +3202,14 @@ return array (
3202
  'names' =>
3203
  array (
3204
  'en' => 'Isle of Man',
3205
- 'de' => 'Insel Man',
3206
  'it' => 'Isola di Man',
3207
  'es' => 'Isla de Man',
3208
  'fr' => 'Île de Man',
3209
  'ja' => 'マン島',
3210
  'pt-BR' => 'Ilha de Man',
3211
- 'ru' => 'Мэн, о-в',
3212
- 'zh-CN' => '曼岛',
3213
  ),
3214
  ),
3215
  'continent' => 'EU',
@@ -3299,7 +3299,7 @@ return array (
3299
  'it' => 'Iraq',
3300
  'es' => 'Irak',
3301
  'fr' => 'Irak',
3302
- 'ja' => 'イラク共和国',
3303
  'pt-BR' => 'Iraque',
3304
  'ru' => 'Ирак',
3305
  'zh-CN' => '伊拉克',
@@ -3326,14 +3326,14 @@ return array (
3326
  'names' =>
3327
  array (
3328
  'en' => 'Iran',
3329
- 'de' => 'Iran (Islamische Republik)',
3330
  'it' => 'Iran',
3331
  'es' => 'Irán',
3332
  'fr' => 'Iran',
3333
- 'ja' => 'イラン・イスラム共和国',
3334
  'pt-BR' => 'República Islâmica do Irã',
3335
  'ru' => 'Иран',
3336
- 'zh-CN' => '伊朗伊斯兰共和国',
3337
  ),
3338
  ),
3339
  'continent' => 'AS',
@@ -3361,7 +3361,7 @@ return array (
3361
  'it' => 'Islanda',
3362
  'es' => 'Islandia',
3363
  'fr' => 'Islande',
3364
- 'ja' => 'アイスランド共和国',
3365
  'pt-BR' => 'Islândia',
3366
  'ru' => 'Исландия',
3367
  'zh-CN' => '冰岛',
@@ -3392,7 +3392,7 @@ return array (
3392
  'it' => 'Italia',
3393
  'es' => 'Italia',
3394
  'fr' => 'Italie',
3395
- 'ja' => 'イタリア共和国',
3396
  'pt-BR' => 'Itália',
3397
  'ru' => 'Италия',
3398
  'zh-CN' => '意大利',
@@ -3485,7 +3485,7 @@ return array (
3485
  'it' => 'Giordania',
3486
  'es' => 'Jordania',
3487
  'fr' => 'Jordanie',
3488
- 'ja' => 'ヨルダン・ハシミテ王国',
3489
  'pt-BR' => 'Jordânia',
3490
  'ru' => 'Иордания',
3491
  'zh-CN' => '约旦',
@@ -3547,7 +3547,7 @@ return array (
3547
  'it' => 'Kenya',
3548
  'es' => 'Kenia',
3549
  'fr' => 'Kenya',
3550
- 'ja' => 'ケニア共和国',
3551
  'pt-BR' => 'Quênia',
3552
  'ru' => 'Кения',
3553
  'zh-CN' => '肯尼亚',
@@ -3574,14 +3574,14 @@ return array (
3574
  'names' =>
3575
  array (
3576
  'en' => 'Kyrgyzstan',
3577
- 'de' => 'Kirgistan',
3578
  'it' => 'Kirghizistan',
3579
  'es' => 'Kirguistán',
3580
- 'fr' => 'Kirghizistan',
3581
- 'ja' => 'キルギス共和国',
3582
  'pt-BR' => 'Quirguistão',
3583
  'ru' => 'Кыргызстан',
3584
- 'zh-CN' => '吉尔吉克斯坦',
3585
  ),
3586
  ),
3587
  'continent' => 'AS',
@@ -3609,7 +3609,7 @@ return array (
3609
  'it' => 'Cambogia',
3610
  'es' => 'Camboya',
3611
  'fr' => 'Cambodge',
3612
- 'ja' => 'カンボジア国',
3613
  'pt-BR' => 'Camboja',
3614
  'ru' => 'Камбоджа',
3615
  'zh-CN' => '柬埔寨',
@@ -3640,7 +3640,7 @@ return array (
3640
  'it' => 'Kiribati',
3641
  'es' => 'Kiribati',
3642
  'fr' => 'Kiribati',
3643
- 'ja' => 'キリバス共和国',
3644
  'pt-BR' => 'Quiribati',
3645
  'ru' => 'Кирибати',
3646
  'zh-CN' => '基里巴斯',
@@ -3671,8 +3671,8 @@ return array (
3671
  'it' => 'Comore',
3672
  'es' => 'Comoras',
3673
  'fr' => 'Comores',
3674
- 'ja' => 'コモロ・イスラム連邦共和国',
3675
- 'pt-BR' => 'Ilhas Comores',
3676
  'ru' => 'Коморские о-ва',
3677
  'zh-CN' => '科摩罗',
3678
  ),
@@ -3698,13 +3698,13 @@ return array (
3698
  'names' =>
3699
  array (
3700
  'en' => 'St Kitts and Nevis',
3701
- 'de' => 'Saint Kitts und Nevis',
3702
  'it' => 'Saint Kitts e Nevis',
3703
  'es' => 'San Cristóbal y Nieves',
3704
  'fr' => 'Saint-Christophe-et-Niévès',
3705
  'ja' => 'セントクリストファー・ネビス',
3706
  'pt-BR' => 'São Cristóvão e Névis',
3707
- 'ru' => 'Сент-Киттс и Невис',
3708
  'zh-CN' => '圣基茨和尼维斯',
3709
  ),
3710
  ),
@@ -3735,8 +3735,8 @@ return array (
3735
  'fr' => 'Corée du Nord',
3736
  'ja' => '韓国、朝鮮民主主義人民共和国',
3737
  'pt-BR' => 'Coreia do Norte',
3738
- 'ru' => 'Северная Корея',
3739
- 'zh-CN' => '朝鲜民主共和国',
3740
  ),
3741
  ),
3742
  'continent' => 'AS',
@@ -3766,8 +3766,8 @@ return array (
3766
  'fr' => 'Corée du Sud',
3767
  'ja' => '大韓民国',
3768
  'pt-BR' => 'Coreia do Sul',
3769
- 'ru' => 'Южная Корея',
3770
- 'zh-CN' => '大韩民国',
3771
  ),
3772
  ),
3773
  'continent' => 'AS',
@@ -3857,7 +3857,7 @@ return array (
3857
  'it' => 'Kazakistan',
3858
  'es' => 'Kazajstán',
3859
  'fr' => 'Kazakhstan',
3860
- 'ja' => 'カザフスタン共和国',
3861
  'pt-BR' => 'Cazaquistão',
3862
  'ru' => 'Казахстан',
3863
  'zh-CN' => '哈萨克斯坦',
@@ -3891,7 +3891,7 @@ return array (
3891
  'ja' => 'ラオス',
3892
  'pt-BR' => 'República Popular Democrática do Laos',
3893
  'ru' => 'Лаос',
3894
- 'zh-CN' => '老挝人民民主共和国',
3895
  ),
3896
  ),
3897
  'continent' => 'AS',
@@ -3919,7 +3919,7 @@ return array (
3919
  'it' => 'Libano',
3920
  'es' => 'Líbano',
3921
  'fr' => 'Liban',
3922
- 'ja' => 'レバノン共和国',
3923
  'pt-BR' => 'Líbano',
3924
  'ru' => 'Ливан',
3925
  'zh-CN' => '黎巴嫩',
@@ -3981,8 +3981,8 @@ return array (
3981
  'it' => 'Liechtenstein',
3982
  'es' => 'Liechtenstein',
3983
  'fr' => 'Liechtenstein',
3984
- 'ja' => 'リヒテンシュタイン公国',
3985
- 'pt-BR' => 'Lichtenstein',
3986
  'ru' => 'Лихтенштейн',
3987
  'zh-CN' => '列支敦士登',
3988
  ),
@@ -4012,7 +4012,7 @@ return array (
4012
  'it' => 'Sri Lanka',
4013
  'es' => 'Sri Lanka',
4014
  'fr' => 'Sri Lanka',
4015
- 'ja' => 'スリランカ民主社会主義共和国',
4016
  'pt-BR' => 'Sri Lanka',
4017
  'ru' => 'Шри-Ланка',
4018
  'zh-CN' => '斯里兰卡',
@@ -4043,7 +4043,7 @@ return array (
4043
  'it' => 'Liberia',
4044
  'es' => 'Liberia',
4045
  'fr' => 'Liberia',
4046
- 'ja' => 'リベリア共和国',
4047
  'pt-BR' => 'Libéria',
4048
  'ru' => 'Либерия',
4049
  'zh-CN' => '利比里亚',
@@ -4074,7 +4074,7 @@ return array (
4074
  'it' => 'Lesotho',
4075
  'es' => 'Lesotho',
4076
  'fr' => 'Lesotho',
4077
- 'ja' => 'レソト王国',
4078
  'pt-BR' => 'Lesoto',
4079
  'ru' => 'Лесото',
4080
  'zh-CN' => '莱索托',
@@ -4105,7 +4105,7 @@ return array (
4105
  'it' => 'Lituania',
4106
  'es' => 'Lituania',
4107
  'fr' => 'Lituanie',
4108
- 'ja' => 'リトアニア共和国',
4109
  'pt-BR' => 'Lituânia',
4110
  'ru' => 'Литва',
4111
  'zh-CN' => '立陶宛',
@@ -4136,7 +4136,7 @@ return array (
4136
  'it' => 'Lussemburgo',
4137
  'es' => 'Luxemburgo',
4138
  'fr' => 'Luxembourg',
4139
- 'ja' => 'ルクセンブルグ',
4140
  'pt-BR' => 'Luxemburgo',
4141
  'ru' => 'Люксембург',
4142
  'zh-CN' => '卢森堡',
@@ -4167,7 +4167,7 @@ return array (
4167
  'it' => 'Lettonia',
4168
  'es' => 'Letonia',
4169
  'fr' => 'Lettonie',
4170
- 'ja' => 'ラトビア共和国',
4171
  'pt-BR' => 'Letônia',
4172
  'ru' => 'Латвия',
4173
  'zh-CN' => '拉脱维亚',
@@ -4176,8 +4176,8 @@ return array (
4176
  'continent' => 'EU',
4177
  'location' =>
4178
  array (
4179
- 'latitude' => 56.880117861500054,
4180
- 'longitude' => 24.60525674450005,
4181
  ),
4182
  'extra' =>
4183
  array (
@@ -4194,14 +4194,14 @@ return array (
4194
  'names' =>
4195
  array (
4196
  'en' => 'Libya',
4197
- 'de' => 'Libysch-Arabische Dschamahirija',
4198
  'it' => 'Libia',
4199
  'es' => 'Libia',
4200
  'fr' => 'Libye',
4201
- 'ja' => '社会主義人民リビア・アラブ国',
4202
- 'pt-BR' => 'Líbia Árabe Jamahiriya',
4203
  'ru' => 'Ливия',
4204
- 'zh-CN' => '阿拉伯利比亚民众国',
4205
  ),
4206
  ),
4207
  'continent' => 'AF',
@@ -4229,7 +4229,7 @@ return array (
4229
  'it' => 'Marocco',
4230
  'es' => 'Marruecos',
4231
  'fr' => 'Maroc',
4232
- 'ja' => 'モロッコ王国',
4233
  'pt-BR' => 'Marrocos',
4234
  'ru' => 'Марокко',
4235
  'zh-CN' => '摩洛哥',
@@ -4287,14 +4287,14 @@ return array (
4287
  'names' =>
4288
  array (
4289
  'en' => 'Moldova',
4290
- 'de' => 'Moldau (Republik Moldau)',
4291
  'it' => 'Moldavia',
4292
  'es' => 'Moldavia',
4293
  'fr' => 'Moldavie',
4294
- 'ja' => 'モルドバ共和国',
4295
- 'pt-BR' => 'Moldova, República de',
4296
  'ru' => 'Молдова',
4297
- 'zh-CN' => '摩尔多瓦共和国',
4298
  ),
4299
  ),
4300
  'continent' => 'EU',
@@ -4325,7 +4325,7 @@ return array (
4325
  'ja' => 'モンテネグロ',
4326
  'pt-BR' => 'Montenegro',
4327
  'ru' => 'Черногория',
4328
- 'zh-CN' => '黑山共和国',
4329
  ),
4330
  ),
4331
  'continent' => 'EU',
@@ -4353,10 +4353,10 @@ return array (
4353
  'it' => 'Saint Martin',
4354
  'es' => 'San Martín',
4355
  'fr' => 'Saint-Martin',
4356
- 'ja' => '仏領サン・マルタン',
4357
  'pt-BR' => 'São Martinho',
4358
- 'ru' => 'Остров Святого Мартина',
4359
- 'zh-CN' => '圣马丁',
4360
  ),
4361
  ),
4362
  'continent' => 'NA',
@@ -4384,7 +4384,7 @@ return array (
4384
  'it' => 'Madagascar',
4385
  'es' => 'Madagascar',
4386
  'fr' => 'Madagascar',
4387
- 'ja' => 'マダガスカル共和国',
4388
  'pt-BR' => 'Madagascar',
4389
  'ru' => 'Мадагаскар',
4390
  'zh-CN' => '马达加斯加',
@@ -4411,13 +4411,13 @@ return array (
4411
  'names' =>
4412
  array (
4413
  'en' => 'Marshall Islands',
4414
- 'de' => 'Marshall-Inseln',
4415
  'it' => 'Isole Marshall',
4416
  'es' => 'Islas Marshall',
4417
  'fr' => 'Îles Marshall',
4418
- 'ja' => 'マーシャル諸島共和国',
4419
  'pt-BR' => 'Ilhas Marshall',
4420
- 'ru' => 'Маршалловы о-ва',
4421
  'zh-CN' => '马绍尔群岛',
4422
  ),
4423
  ),
@@ -4446,10 +4446,10 @@ return array (
4446
  'it' => 'Macedonia del Nord',
4447
  'es' => 'Macedonia del Norte',
4448
  'fr' => 'Macédoine du Nord',
4449
- 'ja' => 'マケドニア旧ユーゴスラビア共和国',
4450
  'pt-BR' => 'Macedônia',
4451
  'ru' => 'Северная Македония',
4452
- 'zh-CN' => '前南斯拉夫马其顿共和国',
4453
  ),
4454
  ),
4455
  'continent' => 'EU',
@@ -4504,13 +4504,13 @@ return array (
4504
  'names' =>
4505
  array (
4506
  'en' => 'Myanmar',
4507
- 'de' => 'Birma (Myanmar)',
4508
  'it' => 'Birmania',
4509
- 'es' => 'Myanmar [Birmania]',
4510
  'fr' => 'Myanmar',
4511
  'ja' => 'ミャンマー連邦',
4512
- 'pt-BR' => 'Mianmar [Birmânia]',
4513
- 'ru' => 'Мьянма',
4514
  'zh-CN' => '缅甸',
4515
  ),
4516
  ),
@@ -4571,7 +4571,7 @@ return array (
4571
  'es' => 'Macao',
4572
  'fr' => 'Macao',
4573
  'ja' => 'マカオ',
4574
- 'pt-BR' => 'Região Administrativa Especial de Macau',
4575
  'ru' => 'Макао',
4576
  'zh-CN' => '澳门',
4577
  ),
@@ -4598,7 +4598,7 @@ return array (
4598
  array (
4599
  'en' => 'Northern Mariana Islands',
4600
  'de' => 'Nördliche Marianen',
4601
- 'it' => 'Isole Marianne Settentrionali',
4602
  'es' => 'Islas Marianas del Norte',
4603
  'fr' => 'Îles Mariannes du Nord',
4604
  'ja' => '北マリアナ諸島',
@@ -4632,10 +4632,10 @@ return array (
4632
  'it' => 'Martinica',
4633
  'es' => 'Martinica',
4634
  'fr' => 'Martinique',
4635
- 'ja' => 'マルティニーク島',
4636
  'pt-BR' => 'Martinica',
4637
  'ru' => 'Мартиника',
4638
- 'zh-CN' => '马提尼克群岛',
4639
  ),
4640
  ),
4641
  'continent' => 'NA',
@@ -4663,7 +4663,7 @@ return array (
4663
  'it' => 'Mauritania',
4664
  'es' => 'Mauritania',
4665
  'fr' => 'Mauritanie',
4666
- 'ja' => 'モーリタニア・イスラム共和国',
4667
  'pt-BR' => 'Mauritânia',
4668
  'ru' => 'Мавритания',
4669
  'zh-CN' => '毛里塔尼亚',
@@ -4694,10 +4694,10 @@ return array (
4694
  'it' => 'Montserrat',
4695
  'es' => 'Montserrat',
4696
  'fr' => 'Montserrat',
4697
- 'ja' => 'モントセラト島',
4698
  'pt-BR' => 'Montserrat',
4699
- 'ru' => 'Монсеррат',
4700
- 'zh-CN' => '蒙塞拉特群岛',
4701
  ),
4702
  ),
4703
  'continent' => 'NA',
@@ -4787,9 +4787,9 @@ return array (
4787
  'it' => 'Maldive',
4788
  'es' => 'Maldivas',
4789
  'fr' => 'Maldives',
4790
- 'ja' => 'モルジブ',
4791
  'pt-BR' => 'Maldivas',
4792
- 'ru' => 'Мальдивские о-ва',
4793
  'zh-CN' => '马尔代夫',
4794
  ),
4795
  ),
@@ -4818,7 +4818,7 @@ return array (
4818
  'it' => 'Malawi',
4819
  'es' => 'Malaui',
4820
  'fr' => 'Malawi',
4821
- 'ja' => 'マラウイ共和国',
4822
  'pt-BR' => 'Malauí',
4823
  'ru' => 'Малави',
4824
  'zh-CN' => '马拉维',
@@ -4849,7 +4849,7 @@ return array (
4849
  'it' => 'Messico',
4850
  'es' => 'México',
4851
  'fr' => 'Mexique',
4852
- 'ja' => 'メキシコ合衆国',
4853
  'pt-BR' => 'México',
4854
  'ru' => 'Мексика',
4855
  'zh-CN' => '墨西哥',
@@ -4877,7 +4877,7 @@ return array (
4877
  array (
4878
  'en' => 'Malaysia',
4879
  'de' => 'Malaysia',
4880
- 'it' => 'Malesia',
4881
  'es' => 'Malasia',
4882
  'fr' => 'Malaisie',
4883
  'ja' => 'マレーシア',
@@ -4889,8 +4889,8 @@ return array (
4889
  'continent' => 'AS',
4890
  'location' =>
4891
  array (
4892
- 'latitude' => 4.1093195,
4893
- 'longitude' => 109.455475,
4894
  ),
4895
  'extra' =>
4896
  array (
@@ -4911,8 +4911,8 @@ return array (
4911
  'it' => 'Mozambico',
4912
  'es' => 'Mozambique',
4913
  'fr' => 'Mozambique',
4914
- 'ja' => 'モザンビーク共和国',
4915
- 'pt-BR' => 'República de Moçambique',
4916
  'ru' => 'Мозамбик',
4917
  'zh-CN' => '莫桑比克',
4918
  ),
@@ -4942,7 +4942,7 @@ return array (
4942
  'it' => 'Namibia',
4943
  'es' => 'Namibia',
4944
  'fr' => 'Namibie',
4945
- 'ja' => 'ナミビア共和国',
4946
  'pt-BR' => 'Namíbia',
4947
  'ru' => 'Намибия',
4948
  'zh-CN' => '纳米比亚',
@@ -5004,7 +5004,7 @@ return array (
5004
  'it' => 'Niger',
5005
  'es' => 'Níger',
5006
  'fr' => 'Niger',
5007
- 'ja' => 'ニジェール共和国',
5008
  'pt-BR' => 'Níger',
5009
  'ru' => 'Нигер',
5010
  'zh-CN' => '尼日尔',
@@ -5037,7 +5037,7 @@ return array (
5037
  'fr' => 'Île Norfolk',
5038
  'ja' => 'ノーフォーク島',
5039
  'pt-BR' => 'Ilha Norfolk',
5040
- 'ru' => 'Остров Норфолк',
5041
  'zh-CN' => '诺福克岛',
5042
  ),
5043
  ),
@@ -5066,7 +5066,7 @@ return array (
5066
  'it' => 'Nigeria',
5067
  'es' => 'Nigeria',
5068
  'fr' => 'Nigeria',
5069
- 'ja' => 'ナイジェリア連邦共和国',
5070
  'pt-BR' => 'Nigéria',
5071
  'ru' => 'Нигерия',
5072
  'zh-CN' => '尼日利亚',
@@ -5093,11 +5093,11 @@ return array (
5093
  'names' =>
5094
  array (
5095
  'en' => 'Nicaragua',
5096
- 'de' => 'Nikaragua',
5097
  'it' => 'Nicaragua',
5098
  'es' => 'Nicaragua',
5099
  'fr' => 'Nicaragua',
5100
- 'ja' => 'ニカラグア共和国',
5101
  'pt-BR' => 'Nicarágua',
5102
  'ru' => 'Никарагуа',
5103
  'zh-CN' => '尼加拉瓜',
@@ -5128,7 +5128,7 @@ return array (
5128
  'it' => 'Paesi Bassi',
5129
  'es' => 'Holanda',
5130
  'fr' => 'Pays-Bas',
5131
- 'ja' => 'オランダ王国',
5132
  'pt-BR' => 'Países Baixos',
5133
  'ru' => 'Нидерланды',
5134
  'zh-CN' => '荷兰',
@@ -5159,7 +5159,7 @@ return array (
5159
  'it' => 'Norvegia',
5160
  'es' => 'Noruega',
5161
  'fr' => 'Norvège',
5162
- 'ja' => 'ノルウェー王国',
5163
  'pt-BR' => 'Noruega',
5164
  'ru' => 'Норвегия',
5165
  'zh-CN' => '挪威',
@@ -5190,7 +5190,7 @@ return array (
5190
  'it' => 'Nepal',
5191
  'es' => 'Nepal',
5192
  'fr' => 'Népal',
5193
- 'ja' => 'ネパール王国',
5194
  'pt-BR' => 'Nepal',
5195
  'ru' => 'Непал',
5196
  'zh-CN' => '尼泊尔',
@@ -5250,11 +5250,11 @@ return array (
5250
  'en' => 'Niue',
5251
  'de' => 'Niue',
5252
  'it' => 'Niue',
5253
- 'es' => 'Isla Niue',
5254
- 'fr' => 'Nioué',
5255
- 'ja' => 'ニウエ島',
5256
  'pt-BR' => 'Niue',
5257
- 'ru' => 'Ниуе',
5258
  'zh-CN' => '纽埃',
5259
  ),
5260
  ),
@@ -5314,7 +5314,7 @@ return array (
5314
  'it' => 'Oman',
5315
  'es' => 'Omán',
5316
  'fr' => 'Oman',
5317
- 'ja' => 'オマーン国',
5318
  'pt-BR' => 'Omã',
5319
  'ru' => 'Оман',
5320
  'zh-CN' => '阿曼',
@@ -5376,7 +5376,7 @@ return array (
5376
  'it' => 'Perù',
5377
  'es' => 'Perú',
5378
  'fr' => 'Pérou',
5379
- 'ja' => 'ペルー共和国',
5380
  'pt-BR' => 'Peru',
5381
  'ru' => 'Перу',
5382
  'zh-CN' => '秘鲁',
@@ -5406,7 +5406,7 @@ return array (
5406
  'de' => 'Französisch-Polynesien',
5407
  'it' => 'Polinesia francese',
5408
  'es' => 'Polinesia Francesa',
5409
- 'fr' => 'Polynésie Française',
5410
  'ja' => '仏領ポリネシア',
5411
  'pt-BR' => 'Polinésia Francesa',
5412
  'ru' => 'Французская Полинезия',
@@ -5437,8 +5437,8 @@ return array (
5437
  'de' => 'Papua-Neuguinea',
5438
  'it' => 'Papua Nuova Guinea',
5439
  'es' => 'Papúa-Nueva Guinea',
5440
- 'fr' => 'Papouasie-Nouvelle Guinée',
5441
- 'ja' => 'パプア・ニューギニア',
5442
  'pt-BR' => 'Papua-Nova Guiné',
5443
  'ru' => 'Папуа – Новая Гвинея',
5444
  'zh-CN' => '巴布亚新几内亚',
@@ -5469,7 +5469,7 @@ return array (
5469
  'it' => 'Filippine',
5470
  'es' => 'Filipinas',
5471
  'fr' => 'Philippines',
5472
- 'ja' => 'フィリピン共和国',
5473
  'pt-BR' => 'Filipinas',
5474
  'ru' => 'Филиппины',
5475
  'zh-CN' => '菲律宾',
@@ -5500,7 +5500,7 @@ return array (
5500
  'it' => 'Pakistan',
5501
  'es' => 'Pakistán',
5502
  'fr' => 'Pakistan',
5503
- 'ja' => 'パキスタン・イスラム共和国',
5504
  'pt-BR' => 'Paquistão',
5505
  'ru' => 'Пакистан',
5506
  'zh-CN' => '巴基斯坦',
@@ -5531,7 +5531,7 @@ return array (
5531
  'it' => 'Polonia',
5532
  'es' => 'Polonia',
5533
  'fr' => 'Pologne',
5534
- 'ja' => 'ポーランド共和国',
5535
  'pt-BR' => 'Polônia',
5536
  'ru' => 'Польша',
5537
  'zh-CN' => '波兰',
@@ -5559,13 +5559,13 @@ return array (
5559
  array (
5560
  'en' => 'Saint Pierre and Miquelon',
5561
  'de' => 'St. Pierre und Miquelon',
5562
- 'it' => 'Saint Pierre e Miquelon',
5563
  'es' => 'San Pedro y Miquelón',
5564
  'fr' => 'Saint-Pierre et Miquelon',
5565
  'ja' => 'サンピエール島・ミクロン島',
5566
- 'pt-BR' => 'Saint Pierre e Miquelon',
5567
  'ru' => 'Сен-Пьер и Микелон',
5568
- 'zh-CN' => '圣皮埃尔和密克隆',
5569
  ),
5570
  ),
5571
  'continent' => 'NA',
@@ -5589,13 +5589,13 @@ return array (
5589
  'names' =>
5590
  array (
5591
  'en' => 'Pitcairn Islands',
5592
- 'de' => 'Pitcairn',
5593
- 'it' => 'Pitcairn',
5594
  'es' => 'Islas Pitcairn',
5595
  'fr' => 'Pitcairn',
5596
- 'ja' => 'ピトケアン島',
5597
- 'pt-BR' => 'Pitcairn',
5598
- 'ru' => 'Питкэрн',
5599
  'zh-CN' => '皮特凯恩群岛',
5600
  ),
5601
  ),
@@ -5651,14 +5651,14 @@ return array (
5651
  'names' =>
5652
  array (
5653
  'en' => 'Palestine',
5654
- 'de' => 'Palästinensische Autonomiegebiete',
5655
  'it' => 'Palestina',
5656
- 'es' => 'Territorios Palestinos',
5657
- 'fr' => 'Territoire palestinien',
5658
  'ja' => 'パレスチナ',
5659
- 'pt-BR' => 'Territórios palestinos',
5660
- 'ru' => 'Палестинские территории',
5661
- 'zh-CN' => '巴勒斯坦领土',
5662
  ),
5663
  ),
5664
  'continent' => 'AS',
@@ -5686,7 +5686,7 @@ return array (
5686
  'it' => 'Portogallo',
5687
  'es' => 'Portugal',
5688
  'fr' => 'Portugal',
5689
- 'ja' => 'ポルトガル共和国',
5690
  'pt-BR' => 'Portugal',
5691
  'ru' => 'Португалия',
5692
  'zh-CN' => '葡萄牙',
@@ -5748,7 +5748,7 @@ return array (
5748
  'it' => 'Paraguay',
5749
  'es' => 'Paraguay',
5750
  'fr' => 'Paraguay',
5751
- 'ja' => 'パラグアイ共和国',
5752
  'pt-BR' => 'Paraguai',
5753
  'ru' => 'Парагвай',
5754
  'zh-CN' => '巴拉圭',
@@ -5777,7 +5777,7 @@ return array (
5777
  'en' => 'Qatar',
5778
  'de' => 'Katar',
5779
  'it' => 'Qatar',
5780
- 'es' => 'Qatar',
5781
  'fr' => 'Qatar',
5782
  'ja' => 'カタール',
5783
  'pt-BR' => 'Catar',
@@ -5807,10 +5807,10 @@ return array (
5807
  array (
5808
  'en' => 'Réunion',
5809
  'de' => 'Réunion',
5810
- 'it' => 'Réunion',
5811
  'es' => 'Reunión',
5812
  'fr' => 'Réunion',
5813
- 'ja' => 'レユニオン島',
5814
  'pt-BR' => 'Reunião',
5815
  'ru' => 'Реюньон',
5816
  'zh-CN' => '留尼汪',
@@ -5965,7 +5965,7 @@ return array (
5965
  'it' => 'Arabia Saudita',
5966
  'es' => 'Arabia Saudí',
5967
  'fr' => 'Arabie saoudite',
5968
- 'ja' => 'サウジアラビア王国',
5969
  'pt-BR' => 'Arábia Saudita',
5970
  'ru' => 'Саудовская Аравия',
5971
  'zh-CN' => '沙特阿拉伯',
@@ -5992,13 +5992,13 @@ return array (
5992
  'names' =>
5993
  array (
5994
  'en' => 'Solomon Islands',
5995
- 'de' => 'Solomon-Inseln',
5996
  'it' => 'Isole Salomone',
5997
  'es' => 'Islas Salomón',
5998
  'fr' => 'Îles Salomon',
5999
  'ja' => 'ソロモン諸島',
6000
  'pt-BR' => 'Ilhas Salomão',
6001
- 'ru' => 'Соломонские острова',
6002
  'zh-CN' => '所罗门群岛',
6003
  ),
6004
  ),
@@ -6027,17 +6027,17 @@ return array (
6027
  'it' => 'Seychelles',
6028
  'es' => 'Seychelles',
6029
  'fr' => 'Seychelles',
6030
- 'ja' => 'セイシェル',
6031
  'pt-BR' => 'Ilhas Seychelles',
6032
  'ru' => 'Сейшельские о-ва',
6033
- 'zh-CN' => '塞舌尔群岛',
6034
  ),
6035
  ),
6036
  'continent' => 'AF',
6037
  'location' =>
6038
  array (
6039
- 'latitude' => -7.0187919999999995,
6040
- 'longitude' => 51.251235939686495,
6041
  ),
6042
  'extra' =>
6043
  array (
@@ -6058,7 +6058,7 @@ return array (
6058
  'it' => 'Sudan',
6059
  'es' => 'Sudán',
6060
  'fr' => 'Soudan',
6061
- 'ja' => 'スーダン共和国',
6062
  'pt-BR' => 'Sudão',
6063
  'ru' => 'Судан',
6064
  'zh-CN' => '苏丹',
@@ -6089,7 +6089,7 @@ return array (
6089
  'it' => 'Svezia',
6090
  'es' => 'Suecia',
6091
  'fr' => 'Suède',
6092
- 'ja' => 'スウェーデン王国',
6093
  'pt-BR' => 'Suécia',
6094
  'ru' => 'Швеция',
6095
  'zh-CN' => '瑞典',
@@ -6121,7 +6121,7 @@ return array (
6121
  'es' => 'Singapur',
6122
  'fr' => 'Singapour',
6123
  'ja' => 'シンガポール',
6124
- 'pt-BR' => 'Cingapura',
6125
  'ru' => 'Сингапур',
6126
  'zh-CN' => '新加坡',
6127
  ),
@@ -6153,7 +6153,7 @@ return array (
6153
  'fr' => 'Sainte-Hélène',
6154
  'ja' => 'セントヘレナ',
6155
  'pt-BR' => 'Santa Helena',
6156
- 'ru' => 'Остров Святой Елены',
6157
  'zh-CN' => '圣赫勒拿',
6158
  ),
6159
  ),
@@ -6209,14 +6209,14 @@ return array (
6209
  'names' =>
6210
  array (
6211
  'en' => 'Svalbard and Jan Mayen',
6212
- 'de' => 'Svalbard und Jan Mayen',
6213
  'it' => 'Svalbard e Jan Mayen',
6214
  'es' => 'Svalbard y Jan Mayen',
6215
  'fr' => 'Svalbard et Jan Mayen',
6216
  'ja' => 'スバールバル諸島・ヤンマイエン島',
6217
  'pt-BR' => 'Svalbard e Jan Mayen',
6218
- 'ru' => 'Свальбард и Ян-Майен',
6219
- 'zh-CN' => '斯瓦尔巴特和扬马延',
6220
  ),
6221
  ),
6222
  'continent' => 'EU',
@@ -6240,14 +6240,14 @@ return array (
6240
  'names' =>
6241
  array (
6242
  'en' => 'Slovakia',
6243
- 'de' => 'Slowakei (Slowakische Republik)',
6244
  'it' => 'Slovacchia',
6245
  'es' => 'Eslovaquia',
6246
  'fr' => 'Slovaquie',
6247
- 'ja' => 'スロバキア (スロバキア共和国)',
6248
  'pt-BR' => 'Eslováquia',
6249
  'ru' => 'Словакия',
6250
- 'zh-CN' => '斯洛伐克共和国',
6251
  ),
6252
  ),
6253
  'continent' => 'EU',
@@ -6306,7 +6306,7 @@ return array (
6306
  'it' => 'San Marino',
6307
  'es' => 'San Marino',
6308
  'fr' => 'Saint-Marin',
6309
- 'ja' => 'サンマリノ共和国',
6310
  'pt-BR' => 'San Marino',
6311
  'ru' => 'Сан-Марино',
6312
  'zh-CN' => '圣马力诺',
@@ -6337,7 +6337,7 @@ return array (
6337
  'it' => 'Senegal',
6338
  'es' => 'Senegal',
6339
  'fr' => 'Sénégal',
6340
- 'ja' => 'セネガル共和国',
6341
  'pt-BR' => 'Senegal',
6342
  'ru' => 'Сенегал',
6343
  'zh-CN' => '塞内加尔',
@@ -6398,8 +6398,8 @@ return array (
6398
  'de' => 'Suriname',
6399
  'it' => 'Suriname',
6400
  'es' => 'Surinam',
6401
- 'fr' => 'Surinam',
6402
- 'ja' => 'スリナム共和国',
6403
  'pt-BR' => 'Suriname',
6404
  'ru' => 'Суринам',
6405
  'zh-CN' => '苏里南',
@@ -6427,11 +6427,11 @@ return array (
6427
  array (
6428
  'en' => 'South Sudan',
6429
  'de' => 'Südsudan',
6430
- 'it' => 'Sudan del Sud',
6431
  'es' => 'Sudán del Sur',
6432
- 'fr' => 'Sud-Soudan',
6433
- 'ja' => '南スーダン',
6434
- 'pt-BR' => 'Sudão do Sul',
6435
  'ru' => 'Южный Судан',
6436
  'zh-CN' => '南苏丹',
6437
  ),
@@ -6457,13 +6457,13 @@ return array (
6457
  'names' =>
6458
  array (
6459
  'en' => 'São Tomé and Príncipe',
6460
- 'de' => 'Sao Tomé und Principe',
6461
  'it' => 'São Tomé e Príncipe',
6462
  'es' => 'Santo Tomé y Príncipe',
6463
- 'fr' => 'São Tomé-et-Príncipe',
6464
- 'ja' => 'サントメ プリンシペ',
6465
- 'pt-BR' => 'República Democrática de São Tomé e Príncipe',
6466
- 'ru' => 'Сан-Томе и Принсипе',
6467
  'zh-CN' => '圣多美和普林西比',
6468
  ),
6469
  ),
@@ -6521,7 +6521,7 @@ return array (
6521
  'en' => 'Sint Maarten',
6522
  'de' => 'Sint Maarten',
6523
  'it' => 'Sint Maarten',
6524
- 'es' => 'San Martín',
6525
  'fr' => 'Saint-Martin',
6526
  'ja' => 'シント・マールテン',
6527
  'pt-BR' => 'São Martinho',
@@ -6554,9 +6554,9 @@ return array (
6554
  'it' => 'Siria',
6555
  'es' => 'Siria',
6556
  'fr' => 'Syrie',
6557
- 'ja' => 'シリア・アラブ共和国',
6558
  'pt-BR' => 'Síria',
6559
- 'ru' => 'Сирийская Арабская Республика',
6560
  'zh-CN' => '叙利亚',
6561
  ),
6562
  ),
@@ -6581,13 +6581,13 @@ return array (
6581
  'names' =>
6582
  array (
6583
  'en' => 'Eswatini',
6584
- 'de' => 'Swasiland',
6585
  'it' => 'Swaziland',
6586
- 'es' => 'Suazilandia',
6587
  'fr' => 'Swaziland',
6588
- 'ja' => 'スワジランド王国',
6589
- 'pt-BR' => 'Suazilândia',
6590
- 'ru' => 'Свазиленд',
6591
  'zh-CN' => '斯威士兰',
6592
  ),
6593
  ),
@@ -6616,9 +6616,9 @@ return array (
6616
  'it' => 'Isole Turks e Caicos',
6617
  'es' => 'Islas Turcas y Caicos',
6618
  'fr' => 'Îles Turques-et-Caïques',
6619
- 'ja' => 'タークス諸島・カイコス諸島',
6620
- 'pt-BR' => 'Ilhas Turks e Caicos',
6621
- 'ru' => 'Острова Тёркс и Кайкос',
6622
  'zh-CN' => '特克斯和凯科斯群岛',
6623
  ),
6624
  ),
@@ -6647,7 +6647,7 @@ return array (
6647
  'it' => 'Ciad',
6648
  'es' => 'Chad',
6649
  'fr' => 'Tchad',
6650
- 'ja' => 'チャド共和国',
6651
  'pt-BR' => 'Chade',
6652
  'ru' => 'Чад',
6653
  'zh-CN' => '乍得',
@@ -6675,13 +6675,13 @@ return array (
6675
  array (
6676
  'en' => 'French Southern Territories',
6677
  'de' => 'Französische Süd- und Antarktisgebiete',
6678
- 'it' => 'Terre australi e antartiche francesi',
6679
  'es' => 'Territorios Australes Franceses',
6680
  'fr' => 'Terres australes françaises',
6681
  'ja' => '仏領極南諸島',
6682
  'pt-BR' => 'Territórios Franceses do Sul',
6683
- 'ru' => 'Французские Южные Территории',
6684
- 'zh-CN' => '法属南部领土',
6685
  ),
6686
  ),
6687
  'continent' => 'AN',
@@ -6709,7 +6709,7 @@ return array (
6709
  'it' => 'Togo',
6710
  'es' => 'Togo',
6711
  'fr' => 'Togo',
6712
- 'ja' => 'トーゴ共和国',
6713
  'pt-BR' => 'Togo',
6714
  'ru' => 'Того',
6715
  'zh-CN' => '多哥',
@@ -6742,7 +6742,7 @@ return array (
6742
  'fr' => 'Thaïlande',
6743
  'ja' => 'タイ',
6744
  'pt-BR' => 'Tailândia',
6745
- 'ru' => 'Тайланд',
6746
  'zh-CN' => '泰国',
6747
  ),
6748
  ),
@@ -6771,8 +6771,8 @@ return array (
6771
  'it' => 'Tagikistan',
6772
  'es' => 'Tayikistán',
6773
  'fr' => 'Tadjikistan',
6774
- 'ja' => 'タジキスタン共和国',
6775
- 'pt-BR' => 'Tajiquistão',
6776
  'ru' => 'Таджикистан',
6777
  'zh-CN' => '塔吉克斯坦',
6778
  ),
@@ -6802,7 +6802,7 @@ return array (
6802
  'it' => 'Tokelau',
6803
  'es' => 'Tokelau',
6804
  'fr' => 'Tokelau',
6805
- 'ja' => 'トケラウ諸島',
6806
  'pt-BR' => 'Tokelau',
6807
  'ru' => 'Токелау',
6808
  'zh-CN' => '托克劳',
@@ -6831,11 +6831,11 @@ return array (
6831
  'en' => 'Timor-Leste',
6832
  'de' => 'Timor-Leste',
6833
  'it' => 'Timor Est',
6834
- 'es' => 'Timor Oriental',
6835
  'fr' => 'Timor Oriental',
6836
  'ja' => '東ティモール共和国',
6837
- 'pt-BR' => 'República Democrática de Timor-Leste',
6838
- 'ru' => 'Восточный Тимор',
6839
  'zh-CN' => '东帝汶',
6840
  ),
6841
  ),
@@ -6895,7 +6895,7 @@ return array (
6895
  'it' => 'Tunisia',
6896
  'es' => 'Túnez',
6897
  'fr' => 'Tunisie',
6898
- 'ja' => 'チュニジア共和国',
6899
  'pt-BR' => 'Tunísia',
6900
  'ru' => 'Тунис',
6901
  'zh-CN' => '突尼斯',
@@ -6926,7 +6926,7 @@ return array (
6926
  'it' => 'Tonga',
6927
  'es' => 'Tonga',
6928
  'fr' => 'Tonga',
6929
- 'ja' => 'トンガ王国',
6930
  'pt-BR' => 'Tonga',
6931
  'ru' => 'Тонга',
6932
  'zh-CN' => '汤加',
@@ -6957,7 +6957,7 @@ return array (
6957
  'it' => 'Turchia',
6958
  'es' => 'Turquía',
6959
  'fr' => 'Turquie',
6960
- 'ja' => 'トルコ共和国',
6961
  'pt-BR' => 'Turquia',
6962
  'ru' => 'Турция',
6963
  'zh-CN' => '土耳其',
@@ -6987,9 +6987,9 @@ return array (
6987
  'de' => 'Trinidad und Tobago',
6988
  'it' => 'Trinidad e Tobago',
6989
  'es' => 'Trinidad y Tobago',
6990
- 'fr' => 'Trinidad et Tobago',
6991
- 'ja' => 'トリニダード・トバゴ共和国',
6992
- 'pt-BR' => 'Trindade e Tobago',
6993
  'ru' => 'Тринидад и Тобаго',
6994
  'zh-CN' => '特立尼达和多巴哥',
6995
  ),
@@ -7015,7 +7015,7 @@ return array (
7015
  'names' =>
7016
  array (
7017
  'en' => 'Tuvalu',
7018
- 'de' => 'Tuwalu',
7019
  'it' => 'Tuvalu',
7020
  'es' => 'Tuvalu',
7021
  'fr' => 'Tuvalu',
@@ -7050,10 +7050,10 @@ return array (
7050
  'it' => 'Taiwan',
7051
  'es' => 'Taiwán',
7052
  'fr' => 'Taïwan',
7053
- 'ja' => '中華民国',
7054
  'pt-BR' => 'Taiwan',
7055
  'ru' => 'Тайвань',
7056
- 'zh-CN' => '中华民国',
7057
  ),
7058
  ),
7059
  'continent' => 'AS',
@@ -7081,7 +7081,7 @@ return array (
7081
  'it' => 'Tanzania',
7082
  'es' => 'Tanzania',
7083
  'fr' => 'Tanzanie',
7084
- 'ja' => 'タンザニア連合共和国',
7085
  'pt-BR' => 'Tanzânia',
7086
  'ru' => 'Танзания',
7087
  'zh-CN' => '坦桑尼亚',
@@ -7112,7 +7112,7 @@ return array (
7112
  'it' => 'Ucraina',
7113
  'es' => 'Ucrania',
7114
  'fr' => 'Ukraine',
7115
- 'ja' => 'ウクライナ共和国',
7116
  'pt-BR' => 'Ucrânia',
7117
  'ru' => 'Украина',
7118
  'zh-CN' => '乌克兰',
@@ -7143,7 +7143,7 @@ return array (
7143
  'it' => 'Uganda',
7144
  'es' => 'Uganda',
7145
  'fr' => 'Ouganda',
7146
- 'ja' => 'ウガンダ共和国',
7147
  'pt-BR' => 'Uganda',
7148
  'ru' => 'Уганда',
7149
  'zh-CN' => '乌干达',
@@ -7169,15 +7169,15 @@ return array (
7169
  'geoname_id' => 5854968,
7170
  'names' =>
7171
  array (
7172
- 'en' => 'U.S. Minor Outlying Islands',
7173
- 'de' => 'Amerikanisch-Ozeanien',
7174
- 'it' => 'Isole minori esterne degli Stati Uniti',
7175
- 'es' => 'Islas menores alejadas de los Estados Unidos',
7176
  'fr' => 'Îles mineures éloignées des États-Unis',
7177
- 'ja' => '米領太平洋諸島',
7178
- 'pt-BR' => 'Ilhas Menores Distantes dos Estados Unidos',
7179
- 'ru' => 'Внешние малые острова (США)',
7180
- 'zh-CN' => '美国边远小岛',
7181
  ),
7182
  ),
7183
  'continent' => 'OC',
@@ -7202,11 +7202,11 @@ return array (
7202
  array (
7203
  'en' => 'United States',
7204
  'de' => 'USA',
7205
- 'it' => 'Stati Uniti',
7206
- 'es' => 'Estados Unidos',
7207
- 'fr' => 'États-Unis',
7208
- 'ja' => 'アメリカ合衆国',
7209
- 'pt-BR' => 'Estados Unidos',
7210
  'ru' => 'США',
7211
  'zh-CN' => '美国',
7212
  ),
@@ -7236,7 +7236,7 @@ return array (
7236
  'it' => 'Uruguay',
7237
  'es' => 'Uruguay',
7238
  'fr' => 'Uruguay',
7239
- 'ja' => 'ウルグアイ共和国',
7240
  'pt-BR' => 'Uruguai',
7241
  'ru' => 'Уругвай',
7242
  'zh-CN' => '乌拉圭',
@@ -7267,7 +7267,7 @@ return array (
7267
  'it' => 'Uzbekistan',
7268
  'es' => 'Uzbekistán',
7269
  'fr' => 'Ouzbékistan',
7270
- 'ja' => 'ウズベキスタン共和国',
7271
  'pt-BR' => 'Uzbequistão',
7272
  'ru' => 'Узбекистан',
7273
  'zh-CN' => '乌兹别克斯坦',
@@ -7294,14 +7294,14 @@ return array (
7294
  'names' =>
7295
  array (
7296
  'en' => 'Vatican City',
7297
- 'de' => 'Staat der Vatikanstadt',
7298
  'it' => 'Vaticano',
7299
  'es' => 'Ciudad del Vaticano',
7300
  'fr' => 'Vatican',
7301
  'ja' => 'ローマ法王庁 (バチカン市国)',
7302
  'pt-BR' => 'Vaticano',
7303
  'ru' => 'Ватикан',
7304
- 'zh-CN' => '圣座(梵蒂冈)',
7305
  ),
7306
  ),
7307
  'continent' => 'EU',
@@ -7329,8 +7329,8 @@ return array (
7329
  'it' => 'Saint Vincent e Grenadine',
7330
  'es' => 'San Vicente y las Granadinas',
7331
  'fr' => 'Saint-Vincent-et-les-Grenadines',
7332
- 'ja' => 'セントビンセント・グレナディーン諸島',
7333
- 'pt-BR' => 'São Vincente e Granadinas',
7334
  'ru' => 'Сент-Винсент и Гренадины',
7335
  'zh-CN' => '圣文森特和格林纳丁斯',
7336
  ),
@@ -7338,8 +7338,8 @@ return array (
7338
  'continent' => 'NA',
7339
  'location' =>
7340
  array (
7341
- 'latitude' => 12.983197636997994,
7342
- 'longitude' => -61.287127564044425,
7343
  ),
7344
  'extra' =>
7345
  array (
@@ -7360,7 +7360,7 @@ return array (
7360
  'it' => 'Venezuela',
7361
  'es' => 'Venezuela',
7362
  'fr' => 'Vénézuéla',
7363
- 'ja' => 'ベネズエラ共和国',
7364
  'pt-BR' => 'Venezuela',
7365
  'ru' => 'Венесуэла',
7366
  'zh-CN' => '委内瑞拉',
@@ -7393,8 +7393,8 @@ return array (
7393
  'fr' => 'Îles Vierges',
7394
  'ja' => '英領ヴァージン諸島',
7395
  'pt-BR' => 'Ilhas Virgens Britânicas',
7396
- 'ru' => 'Британские Виргинские о-ва',
7397
- 'zh-CN' => '英属维京群岛',
7398
  ),
7399
  ),
7400
  'continent' => 'NA',
@@ -7420,12 +7420,12 @@ return array (
7420
  'en' => 'U.S. Virgin Islands',
7421
  'de' => 'Amerikanische Jungferninseln',
7422
  'it' => 'Isole Vergini Americane',
7423
- 'es' => 'Islas Vírgenes de los Estados Unidos',
7424
  'fr' => 'Îles Vierges des États-Unis',
7425
  'ja' => '米領ヴァージン諸島',
7426
- 'pt-BR' => 'Ilhas Virgens dos EUA',
7427
  'ru' => 'Виргинские о-ва (США)',
7428
- 'zh-CN' => '美属维京群岛',
7429
  ),
7430
  ),
7431
  'continent' => 'NA',
@@ -7452,7 +7452,7 @@ return array (
7452
  'de' => 'Vietnam',
7453
  'it' => 'Vietnam',
7454
  'es' => 'Vietnam',
7455
- 'fr' => 'Vietnam',
7456
  'ja' => 'ベトナム',
7457
  'pt-BR' => 'Vietnã',
7458
  'ru' => 'Вьетнам',
@@ -7484,7 +7484,7 @@ return array (
7484
  'it' => 'Vanuatu',
7485
  'es' => 'Vanuatu',
7486
  'fr' => 'Vanuatu',
7487
- 'ja' => 'バヌアツ共和国',
7488
  'pt-BR' => 'Vanuatu',
7489
  'ru' => 'Вануату',
7490
  'zh-CN' => '瓦努阿图',
@@ -7515,8 +7515,8 @@ return array (
7515
  'it' => 'Wallis e Futuna',
7516
  'es' => 'Wallis y Futuna',
7517
  'fr' => 'Wallis-et-Futuna',
7518
- 'ja' => 'ワリー エ フトゥーナ諸島',
7519
- 'pt-BR' => 'Ilhas Wallis e Futuna',
7520
  'ru' => 'Уоллис и Футуна',
7521
  'zh-CN' => '瓦利斯和富图纳',
7522
  ),
@@ -7546,7 +7546,7 @@ return array (
7546
  'it' => 'Samoa',
7547
  'es' => 'Samoa',
7548
  'fr' => 'Samoa',
7549
- 'ja' => '西サモア',
7550
  'pt-BR' => 'Samoa',
7551
  'ru' => 'Самоа',
7552
  'zh-CN' => '萨摩亚',
@@ -7574,7 +7574,7 @@ return array (
7574
  array (
7575
  'en' => 'Kosovo',
7576
  'de' => 'Kosovo',
7577
- 'it' => 'Cossovo',
7578
  'es' => 'Kosovo',
7579
  'fr' => 'Kosovo',
7580
  'ja' => 'コソボ',
@@ -7608,7 +7608,7 @@ return array (
7608
  'it' => 'Yemen',
7609
  'es' => 'Yemen',
7610
  'fr' => 'Yémen',
7611
- 'ja' => 'イエメン共和国',
7612
  'pt-BR' => 'Iêmen',
7613
  'ru' => 'Йемен',
7614
  'zh-CN' => '也门',
@@ -7701,7 +7701,7 @@ return array (
7701
  'it' => 'Zambia',
7702
  'es' => 'Zambia',
7703
  'fr' => 'Zambie',
7704
- 'ja' => 'ザンビア共和国',
7705
  'pt-BR' => 'Zâmbia',
7706
  'ru' => 'Замбия',
7707
  'zh-CN' => '赞比亚',
@@ -7732,7 +7732,7 @@ return array (
7732
  'it' => 'Zimbabwe',
7733
  'es' => 'Zimbawe',
7734
  'fr' => 'Zimbabwe',
7735
- 'ja' => 'ジンバブエ共和国',
7736
  'pt-BR' => 'Zimbábue',
7737
  'ru' => 'Зимбабве',
7738
  'zh-CN' => '津巴布韦',
1
  <?php
2
+ // Generated at Mon, 08 Nov 2021 16:29:58 +0100
3
  return array (
4
  'countries' =>
5
  array (
109
  'de' => 'Antigua und Barbuda',
110
  'it' => 'Antigua e Barbuda',
111
  'es' => 'Antigua y Barbuda',
112
+ 'fr' => 'Antigua-et-Barbuda',
113
+ 'ja' => 'アンティグア・バーブーダ',
114
  'pt-BR' => 'Antígua e Barbuda',
115
  'ru' => 'Антигуа и Барбуда',
116
  'zh-CN' => '安提瓜和巴布达',
172
  'it' => 'Albania',
173
  'es' => 'Albania',
174
  'fr' => 'Albanie',
175
+ 'ja' => 'アルバニア',
176
  'pt-BR' => 'Albânia',
177
  'ru' => 'Албания',
178
  'zh-CN' => '阿尔巴尼亚',
203
  'it' => 'Armenia',
204
  'es' => 'Armenia',
205
  'fr' => 'Arménie',
206
+ 'ja' => 'アルメニア',
207
  'pt-BR' => 'Armênia',
208
  'ru' => 'Армения',
209
  'zh-CN' => '亚美尼亚',
234
  'it' => 'Angola',
235
  'es' => 'Angola',
236
  'fr' => 'Angola',
237
+ 'ja' => 'アンゴラ',
238
  'pt-BR' => 'Angola',
239
  'ru' => 'Ангола',
240
  'zh-CN' => '安哥拉',
292
  'it' => 'Argentina',
293
  'es' => 'Argentina',
294
  'fr' => 'Argentine',
295
+ 'ja' => 'アルゼンチン',
296
  'pt-BR' => 'Argentina',
297
  'ru' => 'Аргентина',
298
  'zh-CN' => '阿根廷',
354
  'it' => 'Austria',
355
  'es' => 'Austria',
356
  'fr' => 'Autriche',
357
+ 'ja' => 'オーストリア',
358
  'pt-BR' => 'Áustria',
359
  'ru' => 'Австрия',
360
  'zh-CN' => '奥地利',
443
  'names' =>
444
  array (
445
  'en' => 'Åland',
446
+ 'de' => 'Ålandinseln',
447
  'it' => 'Isole Åland',
448
+ 'es' => 'Islas Aland',
449
  'fr' => 'Îles Åland',
450
  'ja' => 'オーランド諸島',
451
  'pt-BR' => 'Alanda',
478
  'it' => 'Azerbaigian',
479
  'es' => 'Azerbaiyán',
480
  'fr' => 'Azerbaïdjan',
481
+ 'ja' => 'アゼルバイジャン',
482
  'pt-BR' => 'Azerbaijão',
483
  'ru' => 'Азербайджан',
484
  'zh-CN' => '阿塞拜疆',
509
  'it' => 'Bosnia ed Erzegovina',
510
  'es' => 'Bosnia-Herzegovina',
511
  'fr' => 'Bosnie-Herzégovine',
512
+ 'ja' => 'ボスニア・ヘルツェゴビナ',
513
+ 'pt-BR' => 'Bósnia e Herzegovina',
514
+ 'ru' => 'Босния и Герцеговина',
515
+ 'zh-CN' => '波斯尼亚和黑塞哥维那',
516
  ),
517
  ),
518
  'continent' => 'EU',
571
  'it' => 'Bangladesh',
572
  'es' => 'Bangladesh',
573
  'fr' => 'Bangladesh',
574
+ 'ja' => 'バングラデシュ',
575
+ 'pt-BR' => 'Bangladesh',
576
  'ru' => 'Бангладеш',
577
+ 'zh-CN' => '孟加拉国',
578
  ),
579
  ),
580
  'continent' => 'AS',
602
  'it' => 'Belgio',
603
  'es' => 'Bélgica',
604
  'fr' => 'Belgique',
605
+ 'ja' => 'ベルギー',
606
  'pt-BR' => 'Bélgica',
607
  'ru' => 'Бельгия',
608
  'zh-CN' => '比利时',
634
  'es' => 'Burkina Faso',
635
  'fr' => 'Burkina Faso',
636
  'ja' => 'ブルキナファソ',
637
+ 'pt-BR' => 'Burquina Faso',
638
+ 'ru' => 'Буркина-Фасо',
639
  'zh-CN' => '布基纳法索',
640
  ),
641
  ),
664
  'it' => 'Bulgaria',
665
  'es' => 'Bulgaria',
666
  'fr' => 'Bulgarie',
667
+ 'ja' => 'ブルガリア',
668
  'pt-BR' => 'Bulgária',
669
  'ru' => 'Болгария',
670
  'zh-CN' => '保加利亚',
726
  'it' => 'Burundi',
727
  'es' => 'Burundi',
728
  'fr' => 'Burundi',
729
+ 'ja' => 'ブルンジ',
730
  'pt-BR' => 'Burundi',
731
  'ru' => 'Бурунди',
732
  'zh-CN' => '布隆迪',
757
  'it' => 'Benin',
758
  'es' => 'Benín',
759
  'fr' => 'Bénin',
760
+ 'ja' => 'ベナン',
761
  'pt-BR' => 'Benin',
762
  'ru' => 'Бенин',
763
  'zh-CN' => '贝宁',
785
  array (
786
  'en' => 'Saint Barthélemy',
787
  'de' => 'St. Barthélemy',
788
+ 'it' => 'Saint-Barthélemy',
789
  'es' => 'San Bartolomé',
790
  'fr' => 'Saint-Barthélemy',
791
  'ja' => 'サン・バルテルミー',
849
  'de' => 'Brunei',
850
  'it' => 'Brunei',
851
  'es' => 'Brunéi',
852
+ 'fr' => 'Brunei',
853
  'ja' => 'ブルネイ',
854
  'pt-BR' => 'Brunei',
855
+ 'ru' => 'Бруней-Даруссалам',
856
  'zh-CN' => '文莱',
857
  ),
858
  ),
881
  'it' => 'Bolivia',
882
  'es' => 'Bolivia',
883
  'fr' => 'Bolivie',
884
+ 'ja' => 'ボリビア',
885
  'pt-BR' => 'Bolívia',
886
  'ru' => 'Боливия',
887
  'zh-CN' => '玻利维亚',
908
  'names' =>
909
  array (
910
  'en' => 'Bonaire, Sint Eustatius, and Saba',
911
+ 'de' => 'Karibische Niederlande',
912
+ 'it' => 'Caraibi olandesi',
913
  'es' => 'Bonaire',
914
+ 'fr' => 'Pays-Bas caribéens',
915
  'ja' => 'ボネール、シント・ユースタティウスおよびサバ',
916
  'pt-BR' => 'Bonaire',
917
  'ru' => 'Бонайре, Синт-Эстатиус и Саба',
943
  'it' => 'Brasile',
944
  'es' => 'Brasil',
945
  'fr' => 'Brésil',
946
+ 'ja' => 'ブラジル',
947
  'pt-BR' => 'Brasil',
948
  'ru' => 'Бразилия',
949
  'zh-CN' => '巴西',
974
  'it' => 'Bahamas',
975
  'es' => 'Bahamas',
976
  'fr' => 'Bahamas',
977
+ 'ja' => 'バハマ',
978
  'pt-BR' => 'Bahamas',
979
  'ru' => 'Багамы',
980
  'zh-CN' => '巴哈马',
1005
  'it' => 'Bhutan',
1006
  'es' => 'Bután',
1007
  'fr' => 'Bhoutan',
1008
+ 'ja' => 'ブータン',
1009
  'pt-BR' => 'Butão',
1010
  'ru' => 'Бутан',
1011
  'zh-CN' => '不丹',
1038
  'fr' => 'Île Bouvet',
1039
  'ja' => 'ブーベ島',
1040
  'pt-BR' => 'Ilha Bouvet',
1041
+ 'ru' => 'о-в Буве',
1042
+ 'zh-CN' => '布韦岛',
1043
  ),
1044
  ),
1045
  'continent' => 'AN',
1067
  'it' => 'Botswana',
1068
  'es' => 'Botsuana',
1069
  'fr' => 'Botswana',
1070
+ 'ja' => 'ボツワナ',
1071
  'pt-BR' => 'Botsuana',
1072
  'ru' => 'Ботсвана',
1073
  'zh-CN' => '博茨瓦纳',
1094
  'names' =>
1095
  array (
1096
  'en' => 'Belarus',
1097
+ 'de' => 'Belarus',
1098
  'it' => 'Bielorussia',
1099
  'es' => 'Bielorrusia',
1100
  'fr' => 'Biélorussie',
1101
+ 'ja' => 'ベラルーシ',
1102
+ 'pt-BR' => 'Bielorrússia',
1103
  'ru' => 'Беларусь',
1104
  'zh-CN' => '白俄罗斯',
1105
  ),
1186
  'geoname_id' => 1547376,
1187
  'names' =>
1188
  array (
1189
+ 'en' => 'Cocos (Keeling) Islands',
1190
  'de' => 'Kokosinseln',
1191
+ 'it' => 'Isole Cocos (Keeling)',
1192
  'es' => 'Islas Cocos',
1193
  'fr' => 'Îles Cocos',
1194
+ 'ja' => 'ココス(キーリング)諸島',
1195
+ 'pt-BR' => 'Ilhas Cocos (Keeling)',
1196
  'ru' => 'Кокосовые о-ва',
1197
+ 'zh-CN' => '科科斯(基林)群岛',
1198
  ),
1199
  ),
1200
  'continent' => 'AS',
1223
  'es' => 'Congo Democrático',
1224
  'fr' => 'RDC',
1225
  'ja' => 'コンゴ民主共和国',
1226
+ 'pt-BR' => 'Congo - Kinshasa',
1227
  'ru' => 'Заир',
1228
  'zh-CN' => '扎伊尔',
1229
  ),
1255
  'fr' => 'Centrafrique',
1256
  'ja' => '中央アフリカ共和国',
1257
  'pt-BR' => 'República Centro-Africana',
1258
+ 'ru' => 'Центрально-Африканская Республика',
1259
  'zh-CN' => '中非共和国',
1260
  ),
1261
  ),
1281
  array (
1282
  'en' => 'Congo Republic',
1283
  'de' => 'Kongo (Republik Kongo)',
1284
+ 'it' => 'Congo-Brazzaville',
1285
+ 'es' => 'Congo',
1286
  'fr' => 'Congo-Brazzaville',
1287
+ 'ja' => 'コンゴ共和国',
1288
  'pt-BR' => 'Congo',
1289
+ 'ru' => 'Республика Конго',
1290
+ 'zh-CN' => '刚果共和国',
1291
  ),
1292
  ),
1293
  'continent' => 'AF',
1315
  'it' => 'Svizzera',
1316
  'es' => 'Suiza',
1317
  'fr' => 'Suisse',
1318
+ 'ja' => 'スイス',
1319
  'pt-BR' => 'Suíça',
1320
  'ru' => 'Швейцария',
1321
  'zh-CN' => '瑞士',
1343
  array (
1344
  'en' => 'Ivory Coast',
1345
  'de' => 'Elfenbeinküste',
1346
+ 'it' => 'Côte d’Ivoire',
1347
+ 'es' => 'Côte d’Ivoire',
1348
  'fr' => 'Côte d\'Ivoire',
1349
  'ja' => '象牙海岸',
1350
+ 'pt-BR' => 'Côte d’Ivoire',
1351
+ 'ru' => 'Кот-д’Ивуар',
1352
  'zh-CN' => '象牙海岸',
1353
  ),
1354
  ),
1408
  'it' => 'Cile',
1409
  'es' => 'Chile',
1410
  'fr' => 'Chili',
1411
+ 'ja' => 'チリ',
1412
  'pt-BR' => 'Chile',
1413
  'ru' => 'Чили',
1414
  'zh-CN' => '智利',
1439
  'it' => 'Camerun',
1440
  'es' => 'Camerún',
1441
  'fr' => 'Cameroun',
1442
+ 'ja' => 'カメルーン',
1443
  'pt-BR' => 'Camarões',
1444
  'ru' => 'Камерун',
1445
  'zh-CN' => '喀麦隆',
1501
  'it' => 'Colombia',
1502
  'es' => 'Colombia',
1503
  'fr' => 'Colombie',
1504
+ 'ja' => 'コロンビア',
1505
  'pt-BR' => 'Colômbia',
1506
  'ru' => 'Колумбия',
1507
  'zh-CN' => '哥伦比亚',
1563
  'it' => 'Cuba',
1564
  'es' => 'Cuba',
1565
  'fr' => 'Cuba',
1566
+ 'ja' => 'キューバ',
1567
  'pt-BR' => 'Cuba',
1568
  'ru' => 'Куба',
1569
  'zh-CN' => '古巴',
1596
  'fr' => 'Cap-Vert',
1597
  'ja' => 'カーボベルデ',
1598
  'pt-BR' => 'Cabo Verde',
1599
+ 'ru' => 'Кабо-Верде',
1600
  'zh-CN' => '佛得角',
1601
  ),
1602
  ),
1622
  array (
1623
  'en' => 'Curaçao',
1624
  'de' => 'Curaçao',
1625
+ 'it' => 'Curaçao',
1626
  'es' => 'Curazao',
1627
  'fr' => 'Curaçao',
1628
  'ja' => 'キュラソー',
1653
  array (
1654
  'en' => 'Christmas Island',
1655
  'de' => 'Weihnachtsinsel',
1656
+ 'it' => 'Isola Christmas',
1657
+ 'es' => 'Isla de Navidad',
1658
  'fr' => 'Île Christmas',
1659
  'ja' => 'クリスマス島',
1660
+ 'pt-BR' => 'Ilha Christmas',
1661
+ 'ru' => 'о-в Рождества',
1662
  'zh-CN' => '圣诞岛',
1663
  ),
1664
  ),
1687
  'it' => 'Cipro',
1688
  'es' => 'Chipre',
1689
  'fr' => 'Chypre',
1690
+ 'ja' => 'キプロス',
1691
  'pt-BR' => 'Chipre',
1692
  'ru' => 'Кипр',
1693
  'zh-CN' => '塞浦路斯',
1696
  'continent' => 'EU',
1697
  'location' =>
1698
  array (
1699
+ 'latitude' => 35.16361872019715,
1700
+ 'longitude' => 33.4293630330958,
1701
  ),
1702
  'extra' =>
1703
  array (
1716
  'en' => 'Czechia',
1717
  'de' => 'Tschechien',
1718
  'it' => 'Cechia',
1719
+ 'es' => 'Chequia',
1720
+ 'fr' => 'Tchéquie',
1721
+ 'ja' => 'チェコ',
1722
+ 'pt-BR' => 'Chéquia',
1723
+ 'ru' => 'Чехия',
1724
+ 'zh-CN' => '捷克',
1725
  ),
1726
  ),
1727
  'continent' => 'EU',
1749
  'it' => 'Germania',
1750
  'es' => 'Alemania',
1751
  'fr' => 'Allemagne',
1752
+ 'ja' => 'ドイツ',
1753
  'pt-BR' => 'Alemanha',
1754
  'ru' => 'Германия',
1755
  'zh-CN' => '德国',
1811
  'it' => 'Danimarca',
1812
  'es' => 'Dinamarca',
1813
  'fr' => 'Danemark',
1814
+ 'ja' => 'デンマーク',
1815
  'pt-BR' => 'Dinamarca',
1816
  'ru' => 'Дания',
1817
  'zh-CN' => '丹麦',
1844
  'fr' => 'Dominique',
1845
  'ja' => 'ドミニカ国',
1846
  'pt-BR' => 'Dominica',
1847
+ 'ru' => 'Доминика',
1848
+ 'zh-CN' => '多米尼克',
1849
  ),
1850
  ),
1851
  'continent' => 'NA',
1871
  'en' => 'Dominican Republic',
1872
  'de' => 'Dom. Republik',
1873
  'it' => 'Repubblica Dominicana',
1874
+ 'es' => 'Santo Domingo',
1875
+ 'fr' => 'République dominicaine',
1876
  'ja' => 'ドミニカ共和国',
1877
  'pt-BR' => 'República Dominicana',
1878
  'ru' => 'Доминиканская Республика',
1904
  'it' => 'Algeria',
1905
  'es' => 'Argelia',
1906
  'fr' => 'Algérie',
1907
+ 'ja' => 'アルジェリア',
1908
  'pt-BR' => 'Argélia',
1909
  'ru' => 'Алжир',
1910
  'zh-CN' => '阿尔及利亚',
1935
  'it' => 'Ecuador',
1936
  'es' => 'Ecuador',
1937
  'fr' => 'Équateur',
1938
+ 'ja' => 'エクアドル',
1939
  'pt-BR' => 'Equador',
1940
  'ru' => 'Эквадор',
1941
  'zh-CN' => '厄瓜多尔',
1966
  'it' => 'Estonia',
1967
  'es' => 'Estonia',
1968
  'fr' => 'Estonie',
1969
+ 'ja' => 'エストニア',
1970
  'pt-BR' => 'Estônia',
1971
  'ru' => 'Эстония',
1972
  'zh-CN' => '爱沙尼亚',
1997
  'it' => 'Egitto',
1998
  'es' => 'Egipto',
1999
  'fr' => 'Égypte',
2000
+ 'ja' => 'エジプト',
2001
  'pt-BR' => 'Egito',
2002
  'ru' => 'Египет',
2003
  'zh-CN' => '埃及',
2068
  'continent' => 'AF',
2069
  'location' =>
2070
  array (
2071
+ 'latitude' => 15.17957158800005,
2072
+ 'longitude' => 39.785447160500055,
2073
  ),
2074
  'extra' =>
2075
  array (
2152
  'it' => 'Finlandia',
2153
  'es' => 'Finlandia',
2154
  'fr' => 'Finlande',
2155
+ 'ja' => 'フィンランド',
2156
  'pt-BR' => 'Finlândia',
2157
  'ru' => 'Финляндия',
2158
  'zh-CN' => '芬兰',
2247
  'fr' => 'Micronésie',
2248
  'ja' => 'ミクロネシア連邦',
2249
  'pt-BR' => 'Micronésia',
2250
+ 'ru' => 'Федеративные Штаты Микронезии',
2251
  'zh-CN' => '密克罗尼西亚',
2252
  ),
2253
  ),
2272
  'names' =>
2273
  array (
2274
  'en' => 'Faroe Islands',
2275
+ 'de' => 'Färöer',
2276
  'it' => 'Isole Faroe',
2277
  'es' => 'Islas Feroe',
2278
  'fr' => 'Îles Féroé',
2279
  'ja' => 'フェロー諸島',
2280
+ 'pt-BR' => 'Ilhas Faroé',
2281
  'ru' => 'Фарерские о-ва',
2282
  'zh-CN' => '法罗群岛',
2283
  ),
2307
  'it' => 'Francia',
2308
  'es' => 'Francia',
2309
  'fr' => 'France',
2310
+ 'ja' => 'フランス',
2311
  'pt-BR' => 'França',
2312
  'ru' => 'Франция',
2313
  'zh-CN' => '法国',
2338
  'it' => 'Gabon',
2339
  'es' => 'Gabón',
2340
  'fr' => 'Gabon',
2341
+ 'ja' => 'ガボン',
2342
  'pt-BR' => 'Gabão',
2343
  'ru' => 'Габон',
2344
  'zh-CN' => '加蓬',
2365
  'names' =>
2366
  array (
2367
  'en' => 'United Kingdom',
2368
+ 'de' => 'UK',
2369
+ 'it' => 'UK',
2370
+ 'es' => 'RU',
2371
+ 'fr' => 'R.-U.',
2372
+ 'ja' => '英国',
2373
  'pt-BR' => 'Reino Unido',
2374
+ 'ru' => 'Британия',
2375
  'zh-CN' => '英国',
2376
  ),
2377
  ),
2409
  'continent' => 'NA',
2410
  'location' =>
2411
  array (
2412
+ 'latitude' => 12.15261892566325,
2413
+ 'longitude' => -61.689622955355155,
2414
  ),
2415
  'extra' =>
2416
  array (
2459
  array (
2460
  'en' => 'French Guiana',
2461
  'de' => 'Französisch-Guayana',
2462
+ 'it' => 'Guyana francese',
2463
  'es' => 'Guayana Francesa',
2464
  'fr' => 'Guyane',
2465
  'ja' => '仏領ギアナ',
2491
  'en' => 'Guernsey',
2492
  'de' => 'Guernsey',
2493
  'it' => 'Guernsey',
2494
+ 'es' => 'Guernesey',
2495
  'fr' => 'Guernesey',
2496
  'ja' => 'ガーンジー',
2497
  'pt-BR' => 'Guernsey',
2498
  'ru' => 'Гернси',
2499
+ 'zh-CN' => '根西岛',
2500
  ),
2501
  ),
2502
  'continent' => 'EU',
2524
  'it' => 'Ghana',
2525
  'es' => 'Ghana',
2526
  'fr' => 'Ghana',
2527
+ 'ja' => 'ガーナ',
2528
  'pt-BR' => 'Gana',
2529
  'ru' => 'Гана',
2530
  'zh-CN' => '加纳',
2558
  'ja' => 'ジブラルタル',
2559
  'pt-BR' => 'Gibraltar',
2560
  'ru' => 'Гибралтар',
2561
+ 'zh-CN' => '直布罗陀',
2562
  ),
2563
  ),
2564
  'continent' => 'EU',
2587
  'es' => 'Groenlandia',
2588
  'fr' => 'Groenland',
2589
  'ja' => 'グリーンランド',
2590
+ 'pt-BR' => 'Groenlândia',
2591
  'ru' => 'Гренландия',
2592
  'zh-CN' => '格陵兰',
2593
  ),
2612
  'geoname_id' => 2413451,
2613
  'names' =>
2614
  array (
2615
+ 'en' => 'The Gambia',
2616
  'de' => 'Gambia',
2617
  'it' => 'Gambia',
2618
  'es' => 'Gambia',
2619
  'fr' => 'Gambie',
2620
+ 'ja' => 'ガンビア',
2621
  'pt-BR' => 'Gâmbia',
2622
  'ru' => 'Гамбия',
2623
  'zh-CN' => '冈比亚',
2648
  'it' => 'Guinea',
2649
  'es' => 'Guinea',
2650
  'fr' => 'Guinée',
2651
+ 'ja' => 'ギニア',
2652
  'pt-BR' => 'Guiné',
2653
  'ru' => 'Гвинея',
2654
  'zh-CN' => '几内亚',
2682
  'ja' => 'グアドループ',
2683
  'pt-BR' => 'Guadalupe',
2684
  'ru' => 'Гваделупа',
2685
+ 'zh-CN' => '瓜德罗普',
2686
  ),
2687
  ),
2688
  'continent' => 'NA',
2710
  'it' => 'Guinea Equatoriale',
2711
  'es' => 'Guinea Ecuatorial',
2712
  'fr' => 'Guinée équatoriale',
2713
+ 'ja' => '赤道ギニア',
2714
  'pt-BR' => 'Guiné Equatorial',
2715
  'ru' => 'Экваториальная Гвинея',
2716
  'zh-CN' => '赤道几内亚',
2719
  'continent' => 'AF',
2720
  'location' =>
2721
  array (
2722
+ 'latitude' => 1.634390595,
2723
+ 'longitude' => 10.339065555,
2724
  ),
2725
  'extra' =>
2726
  array (
2741
  'it' => 'Grecia',
2742
  'es' => 'Grecia',
2743
  'fr' => 'Grèce',
2744
+ 'ja' => 'ギリシャ',
2745
  'pt-BR' => 'Grécia',
2746
  'ru' => 'Греция',
2747
  'zh-CN' => '希腊',
2769
  array (
2770
  'en' => 'South Georgia and South Sandwich Islands',
2771
  'de' => 'Südgeorgien und die Südlichen Sandwichinseln',
2772
+ 'it' => 'Georgia del Sud e Sandwich australi',
2773
  'es' => 'Islas Georgia del Sur y Sandwich del Sur',
2774
  'fr' => 'Géorgie du Sud-et-les îles Sandwich du Sud',
2775
+ 'ja' => 'サウスジョージア・サウスサンドウィッチ諸島',
2776
+ 'pt-BR' => 'Ilhas Geórgia do Sul e Sandwich do Sul',
2777
+ 'ru' => 'Южная Георгия и Южные Сандвичевы о-ва',
2778
+ 'zh-CN' => '南乔治亚和南桑威奇群岛',
2779
  ),
2780
  ),
2781
  'continent' => 'AN',
2865
  'it' => 'Guinea-Bissau',
2866
  'es' => 'Guinea-Bissáu',
2867
  'fr' => 'Guinée-Bissau',
2868
+ 'ja' => 'ギニアビサウ',
2869
+ 'pt-BR' => 'Guiné-Bissau',
2870
+ 'ru' => 'Гвинея-Бисау',
2871
  'zh-CN' => '几内亚比绍',
2872
  ),
2873
  ),
2953
  'geoname_id' => 1547314,
2954
  'names' =>
2955
  array (
2956
+ 'en' => 'Heard and McDonald Islands',
2957
+ 'de' => 'Heard und McDonaldinseln',
2958
  'it' => 'Isole Heard e McDonald',
2959
  'es' => 'Islas Heard y McDonald',
2960
  'fr' => 'Île Heard et îles McDonald',
2961
  'ja' => 'ハード島・マクドナルド諸島',
2962
+ 'pt-BR' => 'Ilhas Heard e McDonald',
2963
+ 'ru' => 'о-ва Херд и Макдональд',
2964
+ 'zh-CN' => '赫德岛和麦克唐纳群岛',
2965
  ),
2966
  ),
2967
  'continent' => 'AN',
2989
  'it' => 'Honduras',
2990
  'es' => 'Honduras',
2991
  'fr' => 'Honduras',
2992
+ 'ja' => 'ホンジュラス',
2993
  'pt-BR' => 'Honduras',
2994
  'ru' => 'Гондурас',
2995
  'zh-CN' => '洪都拉斯',
3020
  'it' => 'Croazia',
3021
  'es' => 'Croacia',
3022
  'fr' => 'Croatie',
3023
+ 'ja' => 'クロアチア',
3024
  'pt-BR' => 'Croácia',
3025
  'ru' => 'Хорватия',
3026
  'zh-CN' => '克罗地亚',
3051
  'it' => 'Haiti',
3052
  'es' => 'Haití',
3053
  'fr' => 'Haïti',
3054
+ 'ja' => 'ハイチ',
3055
  'pt-BR' => 'Haiti',
3056
  'ru' => 'Гаити',
3057
  'zh-CN' => '海地',
3082
  'it' => 'Ungheria',
3083
  'es' => 'Hungría',
3084
  'fr' => 'Hongrie',
3085
+ 'ja' => 'ハンガリー',
3086
  'pt-BR' => 'Hungria',
3087
  'ru' => 'Венгрия',
3088
  'zh-CN' => '匈牙利',
3113
  'it' => 'Indonesia',
3114
  'es' => 'Indonesia',
3115
  'fr' => 'Indonésie',
3116
+ 'ja' => 'インドネシア',
3117
  'pt-BR' => 'Indonésia',
3118
  'ru' => 'Индонезия',
3119
  'zh-CN' => '印度尼西亚',
3175
  'it' => 'Israele',
3176
  'es' => 'Israel',
3177
  'fr' => 'Israël',
3178
+ 'ja' => 'イスラエル',
3179
  'pt-BR' => 'Israel',
3180
  'ru' => 'Израиль',
3181
  'zh-CN' => '以色列',
3202
  'names' =>
3203
  array (
3204
  'en' => 'Isle of Man',
3205
+ 'de' => 'Isle of Man',
3206
  'it' => 'Isola di Man',
3207
  'es' => 'Isla de Man',
3208
  'fr' => 'Île de Man',
3209
  'ja' => 'マン島',
3210
  'pt-BR' => 'Ilha de Man',
3211
+ 'ru' => 'о-в Мэн',
3212
+ 'zh-CN' => '马恩岛',
3213
  ),
3214
  ),
3215
  'continent' => 'EU',
3299
  'it' => 'Iraq',
3300
  'es' => 'Irak',
3301
  'fr' => 'Irak',
3302
+ 'ja' => 'イラク',
3303
  'pt-BR' => 'Iraque',
3304
  'ru' => 'Ирак',
3305
  'zh-CN' => '伊拉克',
3326
  'names' =>
3327
  array (
3328
  'en' => 'Iran',
3329
+ 'de' => 'Iran',
3330
  'it' => 'Iran',
3331
  'es' => 'Irán',
3332
  'fr' => 'Iran',
3333
+ 'ja' => 'イラン',
3334
  'pt-BR' => 'República Islâmica do Irã',
3335
  'ru' => 'Иран',
3336
+ 'zh-CN' => '伊朗',
3337
  ),
3338
  ),
3339
  'continent' => 'AS',
3361
  'it' => 'Islanda',
3362
  'es' => 'Islandia',
3363
  'fr' => 'Islande',
3364
+ 'ja' => 'アイスランド',
3365
  'pt-BR' => 'Islândia',
3366
  'ru' => 'Исландия',
3367
  'zh-CN' => '冰岛',
3392
  'it' => 'Italia',
3393
  'es' => 'Italia',
3394
  'fr' => 'Italie',
3395
+ 'ja' => 'イタリア',
3396
  'pt-BR' => 'Itália',
3397
  'ru' => 'Италия',
3398
  'zh-CN' => '意大利',
3485
  'it' => 'Giordania',
3486
  'es' => 'Jordania',
3487
  'fr' => 'Jordanie',
3488
+ 'ja' => 'ヨルダン',
3489
  'pt-BR' => 'Jordânia',
3490
  'ru' => 'Иордания',
3491
  'zh-CN' => '约旦',
3547
  'it' => 'Kenya',
3548
  'es' => 'Kenia',
3549
  'fr' => 'Kenya',
3550
+ 'ja' => 'ケニア',
3551
  'pt-BR' => 'Quênia',
3552
  'ru' => 'Кения',
3553
  'zh-CN' => '肯尼亚',
3574
  'names' =>
3575
  array (
3576
  'en' => 'Kyrgyzstan',
3577
+ 'de' => 'Kirgisistan',
3578
  'it' => 'Kirghizistan',
3579
  'es' => 'Kirguistán',
3580
+ 'fr' => 'Kirghizstan',
3581
+ 'ja' => 'キルギス',
3582
  'pt-BR' => 'Quirguistão',
3583
  'ru' => 'Кыргызстан',
3584
+ 'zh-CN' => '吉尔吉斯斯坦',
3585
  ),
3586
  ),
3587
  'continent' => 'AS',
3609
  'it' => 'Cambogia',
3610
  'es' => 'Camboya',
3611
  'fr' => 'Cambodge',
3612
+ 'ja' => 'カンボジア',
3613
  'pt-BR' => 'Camboja',
3614
  'ru' => 'Камбоджа',
3615
  'zh-CN' => '柬埔寨',
3640
  'it' => 'Kiribati',
3641
  'es' => 'Kiribati',
3642
  'fr' => 'Kiribati',
3643
+ 'ja' => 'キリバス',
3644
  'pt-BR' => 'Quiribati',
3645
  'ru' => 'Кирибати',
3646
  'zh-CN' => '基里巴斯',
3671
  'it' => 'Comore',
3672
  'es' => 'Comoras',
3673
  'fr' => 'Comores',
3674
+ 'ja' => 'コモロ',
3675
+ 'pt-BR' => 'Comores',
3676
  'ru' => 'Коморские о-ва',
3677
  'zh-CN' => '科摩罗',
3678
  ),
3698
  'names' =>
3699
  array (
3700
  'en' => 'St Kitts and Nevis',
3701
+ 'de' => 'St. Kitts und Nevis',
3702
  'it' => 'Saint Kitts e Nevis',
3703
  'es' => 'San Cristóbal y Nieves',
3704
  'fr' => 'Saint-Christophe-et-Niévès',
3705
  'ja' => 'セントクリストファー・ネビス',
3706
  'pt-BR' => 'São Cristóvão e Névis',
3707
+ 'ru' => 'Сент-Китс и Невис',
3708
  'zh-CN' => '圣基茨和尼维斯',
3709
  ),
3710
  ),
3735
  'fr' => 'Corée du Nord',
3736
  'ja' => '韓国、朝鮮民主主義人民共和国',
3737
  'pt-BR' => 'Coreia do Norte',
3738
+ 'ru' => 'КНДР',
3739
+ 'zh-CN' => '朝鲜',
3740
  ),
3741
  ),
3742
  'continent' => 'AS',
3766
  'fr' => 'Corée du Sud',
3767
  'ja' => '大韓民国',
3768
  'pt-BR' => 'Coreia do Sul',
3769
+ 'ru' => 'Республика Корея',
3770
+ 'zh-CN' => '韩国',
3771
  ),
3772
  ),
3773
  'continent' => 'AS',
3857
  'it' => 'Kazakistan',
3858
  'es' => 'Kazajstán',
3859
  'fr' => 'Kazakhstan',
3860
+ 'ja' => 'カザフスタン',
3861
  'pt-BR' => 'Cazaquistão',
3862
  'ru' => 'Казахстан',
3863
  'zh-CN' => '哈萨克斯坦',
3891
  'ja' => 'ラオス',
3892
  'pt-BR' => 'República Popular Democrática do Laos',
3893
  'ru' => 'Лаос',
3894
+ 'zh-CN' => '老挝',
3895
  ),
3896
  ),
3897
  'continent' => 'AS',
3919
  'it' => 'Libano',
3920
  'es' => 'Líbano',
3921
  'fr' => 'Liban',
3922
+ 'ja' => 'レバノン',
3923
  'pt-BR' => 'Líbano',
3924
  'ru' => 'Ливан',
3925
  'zh-CN' => '黎巴嫩',
3981
  'it' => 'Liechtenstein',
3982
  'es' => 'Liechtenstein',
3983
  'fr' => 'Liechtenstein',
3984
+ 'ja' => 'リヒテンシュタイン',
3985
+ 'pt-BR' => 'Liechtenstein',
3986
  'ru' => 'Лихтенштейн',
3987
  'zh-CN' => '列支敦士登',
3988
  ),
4012
  'it' => 'Sri Lanka',
4013
  'es' => 'Sri Lanka',
4014
  'fr' => 'Sri Lanka',
4015
+ 'ja' => 'スリランカ',
4016
  'pt-BR' => 'Sri Lanka',
4017
  'ru' => 'Шри-Ланка',
4018
  'zh-CN' => '斯里兰卡',
4043
  'it' => 'Liberia',
4044
  'es' => 'Liberia',
4045
  'fr' => 'Liberia',
4046
+ 'ja' => 'リベリア',
4047
  'pt-BR' => 'Libéria',
4048
  'ru' => 'Либерия',
4049
  'zh-CN' => '利比里亚',
4074
  'it' => 'Lesotho',
4075
  'es' => 'Lesotho',
4076
  'fr' => 'Lesotho',
4077
+ 'ja' => 'レソト',
4078
  'pt-BR' => 'Lesoto',
4079
  'ru' => 'Лесото',
4080
  'zh-CN' => '莱索托',
4105
  'it' => 'Lituania',
4106
  'es' => 'Lituania',
4107
  'fr' => 'Lituanie',
4108
+ 'ja' => 'リトアニア',
4109
  'pt-BR' => 'Lituânia',
4110
  'ru' => 'Литва',
4111
  'zh-CN' => '立陶宛',
4136
  'it' => 'Lussemburgo',
4137
  'es' => 'Luxemburgo',
4138
  'fr' => 'Luxembourg',
4139
+ 'ja' => 'ルクセンブルク',
4140
  'pt-BR' => 'Luxemburgo',
4141
  'ru' => 'Люксембург',
4142
  'zh-CN' => '卢森堡',
4167
  'it' => 'Lettonia',
4168
  'es' => 'Letonia',
4169
  'fr' => 'Lettonie',
4170
+ 'ja' => 'ラトビア',
4171
  'pt-BR' => 'Letônia',
4172
  'ru' => 'Латвия',
4173
  'zh-CN' => '拉脱维亚',
4176
  'continent' => 'EU',
4177
  'location' =>
4178
  array (
4179
+ 'latitude' => 56.8801250823077,
4180
+ 'longitude' => 24.60180649830315,
4181
  ),
4182
  'extra' =>
4183
  array (
4194
  'names' =>
4195
  array (
4196
  'en' => 'Libya',
4197
+ 'de' => 'Libyen',
4198
  'it' => 'Libia',
4199
  'es' => 'Libia',
4200
  'fr' => 'Libye',
4201
+ 'ja' => 'リビア',
4202
+ 'pt-BR' => 'Líbia',
4203
  'ru' => 'Ливия',
4204
+ 'zh-CN' => '利比亚',
4205
  ),
4206
  ),
4207
  'continent' => 'AF',
4229
  'it' => 'Marocco',
4230
  'es' => 'Marruecos',
4231
  'fr' => 'Maroc',
4232
+ 'ja' => 'モロッコ',
4233
  'pt-BR' => 'Marrocos',
4234
  'ru' => 'Марокко',
4235
  'zh-CN' => '摩洛哥',
4287
  'names' =>
4288
  array (
4289
  'en' => 'Moldova',
4290
+ 'de' => 'Republik Moldau',
4291
  'it' => 'Moldavia',
4292
  'es' => 'Moldavia',
4293
  'fr' => 'Moldavie',
4294
+ 'ja' => 'モルドバ',
4295
+ 'pt-BR' => 'Moldávia',
4296
  'ru' => 'Молдова',
4297
+ 'zh-CN' => '摩尔多瓦',
4298
  ),
4299
  ),
4300
  'continent' => 'EU',
4325
  'ja' => 'モンテネグロ',
4326
  'pt-BR' => 'Montenegro',
4327
  'ru' => 'Черногория',
4328
+ 'zh-CN' => '黑山',
4329
  ),
4330
  ),
4331
  'continent' => 'EU',
4353
  'it' => 'Saint Martin',
4354
  'es' => 'San Martín',
4355
  'fr' => 'Saint-Martin',
4356
+ 'ja' => 'サン・マルタン',
4357
  'pt-BR' => 'São Martinho',
4358
+ 'ru' => 'Сен-Мартен',
4359
+ 'zh-CN' => '法属圣马丁',
4360
  ),
4361
  ),
4362
  'continent' => 'NA',
4384
  'it' => 'Madagascar',
4385
  'es' => 'Madagascar',
4386
  'fr' => 'Madagascar',
4387
+ 'ja' => 'マダガスカル',
4388
  'pt-BR' => 'Madagascar',
4389
  'ru' => 'Мадагаскар',
4390
  'zh-CN' => '马达加斯加',
4411
  'names' =>
4412
  array (
4413
  'en' => 'Marshall Islands',
4414
+ 'de' => 'Marshallinseln',
4415
  'it' => 'Isole Marshall',
4416
  'es' => 'Islas Marshall',
4417
  'fr' => 'Îles Marshall',
4418
+ 'ja' => 'マーシャル諸島',
4419
  'pt-BR' => 'Ilhas Marshall',
4420
+ 'ru' => 'Маршалловы Острова',
4421
  'zh-CN' => '马绍尔群岛',
4422
  ),
4423
  ),
4446
  'it' => 'Macedonia del Nord',
4447
  'es' => 'Macedonia del Norte',
4448
  'fr' => 'Macédoine du Nord',
4449
+ 'ja' => '北マケドニア',
4450
  'pt-BR' => 'Macedônia',
4451
  'ru' => 'Северная Македония',
4452
+ 'zh-CN' => '北马其顿',
4453
  ),
4454
  ),
4455
  'continent' => 'EU',
4504
  'names' =>
4505
  array (
4506
  'en' => 'Myanmar',
4507
+ 'de' => 'Myanmar',
4508
  'it' => 'Birmania',
4509
+ 'es' => 'Myanmar (Birmania)',
4510
  'fr' => 'Myanmar',
4511
  'ja' => 'ミャンマー連邦',
4512
+ 'pt-BR' => 'Mianmar (Birmânia)',
4513
+ 'ru' => 'Мьянма (Бирма)',
4514
  'zh-CN' => '缅甸',
4515
  ),
4516
  ),
4571
  'es' => 'Macao',
4572
  'fr' => 'Macao',
4573
  'ja' => 'マカオ',
4574
+ 'pt-BR' => 'Macau',
4575
  'ru' => 'Макао',
4576
  'zh-CN' => '澳门',
4577
  ),
4598
  array (
4599
  'en' => 'Northern Mariana Islands',
4600
  'de' => 'Nördliche Marianen',
4601
+ 'it' => 'Isole Marianne settentrionali',
4602
  'es' => 'Islas Marianas del Norte',
4603
  'fr' => 'Îles Mariannes du Nord',
4604
  'ja' => '北マリアナ諸島',
4632
  'it' => 'Martinica',
4633
  'es' => 'Martinica',
4634
  'fr' => 'Martinique',
4635
+ 'ja' => 'マルティニーク',
4636
  'pt-BR' => 'Martinica',
4637
  'ru' => 'Мартиника',
4638
+ 'zh-CN' => '马提尼克',
4639
  ),
4640
  ),
4641
  'continent' => 'NA',
4663
  'it' => 'Mauritania',
4664
  'es' => 'Mauritania',
4665
  'fr' => 'Mauritanie',
4666
+ 'ja' => 'モーリタニア',
4667
  'pt-BR' => 'Mauritânia',
4668
  'ru' => 'Мавритания',
4669
  'zh-CN' => '毛里塔尼亚',
4694
  'it' => 'Montserrat',
4695
  'es' => 'Montserrat',
4696
  'fr' => 'Montserrat',
4697
+ 'ja' => 'モントセラト',
4698
  'pt-BR' => 'Montserrat',
4699
+ 'ru' => 'Монтсеррат',
4700
+ 'zh-CN' => '蒙特塞拉特',
4701
  ),
4702
  ),
4703
  'continent' => 'NA',
4787
  'it' => 'Maldive',
4788
  'es' => 'Maldivas',
4789
  'fr' => 'Maldives',
4790
+ 'ja' => 'モルディブ',
4791
  'pt-BR' => 'Maldivas',
4792
+ 'ru' => 'Мальдивы',
4793
  'zh-CN' => '马尔代夫',
4794
  ),
4795
  ),
4818
  'it' => 'Malawi',
4819
  'es' => 'Malaui',
4820
  'fr' => 'Malawi',
4821
+ 'ja' => 'マラウイ',
4822
  'pt-BR' => 'Malauí',
4823
  'ru' => 'Малави',
4824
  'zh-CN' => '马拉维',
4849
  'it' => 'Messico',
4850
  'es' => 'México',
4851
  'fr' => 'Mexique',
4852
+ 'ja' => 'メキシコ',
4853
  'pt-BR' => 'México',
4854
  'ru' => 'Мексика',
4855
  'zh-CN' => '墨西哥',
4877
  array (
4878
  'en' => 'Malaysia',
4879
  'de' => 'Malaysia',
4880
+ 'it' => 'Malaysia',
4881
  'es' => 'Malasia',
4882
  'fr' => 'Malaisie',
4883
  'ja' => 'マレーシア',
4889
  'continent' => 'AS',
4890
  'location' =>
4891
  array (
4892
+ 'latitude' => 4.109168052500024,
4893
+ 'longitude' => 109.45521926850006,
4894
  ),
4895
  'extra' =>
4896
  array (
4911
  'it' => 'Mozambico',
4912
  'es' => 'Mozambique',
4913
  'fr' => 'Mozambique',
4914
+ 'ja' => 'モザンビーク',
4915
+ 'pt-BR' => 'Moçambique',
4916
  'ru' => 'Мозамбик',
4917
  'zh-CN' => '莫桑比克',
4918
  ),
4942
  'it' => 'Namibia',
4943
  'es' => 'Namibia',
4944
  'fr' => 'Namibie',
4945
+ 'ja' => 'ナミビア',
4946
  'pt-BR' => 'Namíbia',
4947
  'ru' => 'Намибия',
4948
  'zh-CN' => '纳米比亚',
5004
  'it' => 'Niger',
5005
  'es' => 'Níger',
5006
  'fr' => 'Niger',
5007
+ 'ja' => 'ニジェール',
5008
  'pt-BR' => 'Níger',
5009
  'ru' => 'Нигер',
5010
  'zh-CN' => '尼日尔',
5037
  'fr' => 'Île Norfolk',
5038
  'ja' => 'ノーフォーク島',
5039
  'pt-BR' => 'Ilha Norfolk',
5040
+ 'ru' => 'о-в Норфолк',
5041
  'zh-CN' => '诺福克岛',
5042
  ),
5043
  ),
5066
  'it' => 'Nigeria',
5067
  'es' => 'Nigeria',
5068
  'fr' => 'Nigeria',
5069
+ 'ja' => 'ナイジェリア',
5070
  'pt-BR' => 'Nigéria',
5071
  'ru' => 'Нигерия',
5072
  'zh-CN' => '尼日利亚',
5093
  'names' =>
5094
  array (
5095
  'en' => 'Nicaragua',
5096
+ 'de' => 'Nicaragua',
5097
  'it' => 'Nicaragua',
5098
  'es' => 'Nicaragua',
5099
  'fr' => 'Nicaragua',
5100
+ 'ja' => 'ニカラグア',
5101
  'pt-BR' => 'Nicarágua',
5102
  'ru' => 'Никарагуа',
5103
  'zh-CN' => '尼加拉瓜',
5128
  'it' => 'Paesi Bassi',
5129
  'es' => 'Holanda',
5130
  'fr' => 'Pays-Bas',
5131
+ 'ja' => 'オランダ',
5132
  'pt-BR' => 'Países Baixos',
5133
  'ru' => 'Нидерланды',
5134
  'zh-CN' => '荷兰',
5159
  'it' => 'Norvegia',
5160
  'es' => 'Noruega',
5161
  'fr' => 'Norvège',
5162
+ 'ja' => 'ノルウェー',
5163
  'pt-BR' => 'Noruega',
5164
  'ru' => 'Норвегия',
5165
  'zh-CN' => '挪威',
5190
  'it' => 'Nepal',
5191
  'es' => 'Nepal',
5192
  'fr' => 'Népal',
5193
+ 'ja' => 'ネパール',
5194
  'pt-BR' => 'Nepal',
5195
  'ru' => 'Непал',
5196
  'zh-CN' => '尼泊尔',
5250
  'en' => 'Niue',
5251
  'de' => 'Niue',
5252
  'it' => 'Niue',
5253
+ 'es' => 'Niue',
5254
+ 'fr' => 'Niue',
5255
+ 'ja' => 'ニウエ',
5256
  'pt-BR' => 'Niue',
5257
+ 'ru' => 'Ниуэ',
5258
  'zh-CN' => '纽埃',
5259
  ),
5260
  ),
5314
  'it' => 'Oman',
5315
  'es' => 'Omán',
5316
  'fr' => 'Oman',
5317
+ 'ja' => 'オマーン',
5318
  'pt-BR' => 'Omã',
5319
  'ru' => 'Оман',
5320
  'zh-CN' => '阿曼',
5376
  'it' => 'Perù',
5377
  'es' => 'Perú',
5378
  'fr' => 'Pérou',
5379
+ 'ja' => 'ペルー',
5380
  'pt-BR' => 'Peru',
5381
  'ru' => 'Перу',
5382
  'zh-CN' => '秘鲁',
5406
  'de' => 'Französisch-Polynesien',
5407
  'it' => 'Polinesia francese',
5408
  'es' => 'Polinesia Francesa',
5409
+ 'fr' => 'Polynésie française',
5410
  'ja' => '仏領ポリネシア',
5411
  'pt-BR' => 'Polinésia Francesa',
5412
  'ru' => 'Французская Полинезия',
5437
  'de' => 'Papua-Neuguinea',
5438
  'it' => 'Papua Nuova Guinea',
5439
  'es' => 'Papúa-Nueva Guinea',
5440
+ 'fr' => 'Papouasie-Nouvelle-Guinée',
5441
+ 'ja' => 'パプアニューギニア',
5442
  'pt-BR' => 'Papua-Nova Guiné',
5443
  'ru' => 'Папуа – Новая Гвинея',
5444
  'zh-CN' => '巴布亚新几内亚',
5469
  'it' => 'Filippine',
5470
  'es' => 'Filipinas',
5471
  'fr' => 'Philippines',
5472
+ 'ja' => 'フィリピン',
5473
  'pt-BR' => 'Filipinas',
5474
  'ru' => 'Филиппины',
5475
  'zh-CN' => '菲律宾',
5500
  'it' => 'Pakistan',
5501
  'es' => 'Pakistán',
5502
  'fr' => 'Pakistan',
5503
+ 'ja' => 'パキスタン',
5504
  'pt-BR' => 'Paquistão',
5505
  'ru' => 'Пакистан',
5506
  'zh-CN' => '巴基斯坦',
5531
  'it' => 'Polonia',
5532
  'es' => 'Polonia',
5533
  'fr' => 'Pologne',
5534
+ 'ja' => 'ポーランド',
5535
  'pt-BR' => 'Polônia',
5536
  'ru' => 'Польша',
5537
  'zh-CN' => '波兰',
5559
  array (
5560
  'en' => 'Saint Pierre and Miquelon',
5561
  'de' => 'St. Pierre und Miquelon',
5562
+ 'it' => 'Saint-Pierre e Miquelon',
5563
  'es' => 'San Pedro y Miquelón',
5564
  'fr' => 'Saint-Pierre et Miquelon',
5565
  'ja' => 'サンピエール島・ミクロン島',
5566
+ 'pt-BR' => 'São Pedro e Miquelão',
5567
  'ru' => 'Сен-Пьер и Микелон',
5568
+ 'zh-CN' => '圣皮埃尔和密克隆群岛',
5569
  ),
5570
  ),
5571
  'continent' => 'NA',
5589
  'names' =>
5590
  array (
5591
  'en' => 'Pitcairn Islands',
5592
+ 'de' => 'Pitcairninseln',
5593
+ 'it' => 'Isole Pitcairn',
5594
  'es' => 'Islas Pitcairn',
5595
  'fr' => 'Pitcairn',
5596
+ 'ja' => 'ピトケアン諸島',
5597
+ 'pt-BR' => 'Ilhas Pitcairn',
5598
+ 'ru' => 'о-ва Питкэрн',
5599
  'zh-CN' => '皮特凯恩群岛',
5600
  ),
5601
  ),
5651
  'names' =>
5652
  array (
5653
  'en' => 'Palestine',
5654
+ 'de' => 'Palästina',
5655
  'it' => 'Palestina',
5656
+ 'es' => 'Palestina',
5657
+ 'fr' => 'Palestine',
5658
  'ja' => 'パレスチナ',
5659
+ 'pt-BR' => 'Palestina',
5660
+ 'ru' => 'Палестина',
5661
+ 'zh-CN' => '巴勒斯坦',
5662
  ),
5663
  ),
5664
  'continent' => 'AS',
5686
  'it' => 'Portogallo',
5687
  'es' => 'Portugal',
5688
  'fr' => 'Portugal',
5689
+ 'ja' => 'ポルトガル',
5690
  'pt-BR' => 'Portugal',
5691
  'ru' => 'Португалия',
5692
  'zh-CN' => '葡萄牙',
5748
  'it' => 'Paraguay',
5749
  'es' => 'Paraguay',
5750
  'fr' => 'Paraguay',
5751
+ 'ja' => 'パラグアイ',
5752
  'pt-BR' => 'Paraguai',
5753
  'ru' => 'Парагвай',
5754
  'zh-CN' => '巴拉圭',
5777
  'en' => 'Qatar',
5778
  'de' => 'Katar',
5779
  'it' => 'Qatar',
5780
+ 'es' => 'Catar',
5781
  'fr' => 'Qatar',
5782
  'ja' => 'カタール',
5783
  'pt-BR' => 'Catar',
5807
  array (
5808
  'en' => 'Réunion',
5809
  'de' => 'Réunion',
5810
+ 'it' => 'Riunione',
5811
  'es' => 'Reunión',
5812
  'fr' => 'Réunion',
5813
+ 'ja' => 'レユニオン',
5814
  'pt-BR' => 'Reunião',
5815
  'ru' => 'Реюньон',
5816
  'zh-CN' => '留尼汪',
5965
  'it' => 'Arabia Saudita',
5966
  'es' => 'Arabia Saudí',
5967
  'fr' => 'Arabie saoudite',
5968
+ 'ja' => 'サウジアラビア',
5969
  'pt-BR' => 'Arábia Saudita',
5970
  'ru' => 'Саудовская Аравия',
5971
  'zh-CN' => '沙特阿拉伯',
5992
  'names' =>
5993
  array (
5994
  'en' => 'Solomon Islands',
5995
+ 'de' => 'Salomonen',
5996
  'it' => 'Isole Salomone',
5997
  'es' => 'Islas Salomón',
5998
  'fr' => 'Îles Salomon',
5999
  'ja' => 'ソロモン諸島',
6000
  'pt-BR' => 'Ilhas Salomão',
6001
+ 'ru' => 'Соломоновы Острова',
6002
  'zh-CN' => '所罗门群岛',
6003
  ),
6004
  ),
6027
  'it' => 'Seychelles',
6028
  'es' => 'Seychelles',
6029
  'fr' => 'Seychelles',
6030
+ 'ja' => 'セーシェル',
6031
  'pt-BR' => 'Ilhas Seychelles',
6032
  'ru' => 'Сейшельские о-ва',
6033
+ 'zh-CN' => '塞舌尔',
6034
  ),
6035
  ),
6036
  'continent' => 'AF',
6037
  'location' =>
6038
  array (
6039
+ 'latitude' => -7.021279360999955,
6040
+ 'longitude' => 51.2513359835,
6041
  ),
6042
  'extra' =>
6043
  array (
6058
  'it' => 'Sudan',
6059
  'es' => 'Sudán',
6060
  'fr' => 'Soudan',
6061
+ 'ja' => 'スーダン',
6062
  'pt-BR' => 'Sudão',
6063
  'ru' => 'Судан',
6064
  'zh-CN' => '苏丹',
6089
  'it' => 'Svezia',
6090
  'es' => 'Suecia',
6091
  'fr' => 'Suède',
6092
+ 'ja' => 'スウェーデン',
6093
  'pt-BR' => 'Suécia',
6094
  'ru' => 'Швеция',
6095
  'zh-CN' => '瑞典',
6121
  'es' => 'Singapur',
6122
  'fr' => 'Singapour',
6123
  'ja' => 'シンガポール',
6124
+ 'pt-BR' => 'Singapura',
6125
  'ru' => 'Сингапур',
6126
  'zh-CN' => '新加坡',
6127
  ),
6153
  'fr' => 'Sainte-Hélène',
6154
  'ja' => 'セントヘレナ',
6155
  'pt-BR' => 'Santa Helena',
6156
+ 'ru' => 'о-в Св. Елены',
6157
  'zh-CN' => '圣赫勒拿',
6158
  ),
6159
  ),
6209
  'names' =>
6210
  array (
6211
  'en' => 'Svalbard and Jan Mayen',
6212
+ 'de' => 'Spitzbergen und Jan Mayen',
6213
  'it' => 'Svalbard e Jan Mayen',
6214
  'es' => 'Svalbard y Jan Mayen',
6215
  'fr' => 'Svalbard et Jan Mayen',
6216
  'ja' => 'スバールバル諸島・ヤンマイエン島',
6217
  'pt-BR' => 'Svalbard e Jan Mayen',
6218
+ 'ru' => 'Шпицберген и Ян-Майен',
6219
+ 'zh-CN' => '斯瓦尔巴和扬马延',
6220
  ),
6221
  ),
6222
  'continent' => 'EU',
6240
  'names' =>
6241
  array (
6242
  'en' => 'Slovakia',
6243
+ 'de' => 'Slowakei',
6244
  'it' => 'Slovacchia',
6245
  'es' => 'Eslovaquia',
6246
  'fr' => 'Slovaquie',
6247
+ 'ja' => 'スロバキア',
6248
  'pt-BR' => 'Eslováquia',
6249
  'ru' => 'Словакия',
6250
+ 'zh-CN' => '斯洛伐克',
6251
  ),
6252
  ),
6253
  'continent' => 'EU',
6306
  'it' => 'San Marino',
6307
  'es' => 'San Marino',
6308
  'fr' => 'Saint-Marin',
6309
+ 'ja' => 'サンマリノ',
6310
  'pt-BR' => 'San Marino',
6311
  'ru' => 'Сан-Марино',
6312
  'zh-CN' => '圣马力诺',
6337
  'it' => 'Senegal',
6338
  'es' => 'Senegal',
6339
  'fr' => 'Sénégal',
6340
+ 'ja' => 'セネガル',
6341
  'pt-BR' => 'Senegal',
6342
  'ru' => 'Сенегал',
6343
  'zh-CN' => '塞内加尔',
6398
  'de' => 'Suriname',
6399
  'it' => 'Suriname',
6400
  'es' => 'Surinam',
6401
+ 'fr' => 'Suriname',
6402
+ 'ja' => 'スリナム',
6403
  'pt-BR' => 'Suriname',
6404
  'ru' => 'Суринам',
6405
  'zh-CN' => '苏里南',
6427
  array (
6428
  'en' => 'South Sudan',
6429
  'de' => 'Südsudan',
6430
+ 'it' => 'Sud Sudan',
6431
  'es' => 'Sudán del Sur',
6432
+ 'fr' => 'Soudan du Sud',
6433
+ 'ja' => '南スーダン共和国',
6434
+ 'pt-BR' => 'República do Sudão do Sul',
6435
  'ru' => 'Южный Судан',
6436
  'zh-CN' => '南苏丹',
6437
  ),
6457
  'names' =>
6458
  array (
6459
  'en' => 'São Tomé and Príncipe',
6460
+ 'de' => 'São Tomé und Príncipe',
6461
  'it' => 'São Tomé e Príncipe',
6462
  'es' => 'Santo Tomé y Príncipe',
6463
+ 'fr' => 'Sao Tomé-et-Principe',
6464
+ 'ja' => 'サントメ・プリンシペ',
6465
+ 'pt-BR' => 'São Tomé e Príncipe',
6466
+ 'ru' => 'Сан-Томе и Принсипи',
6467
  'zh-CN' => '圣多美和普林西比',
6468
  ),
6469
  ),
6521
  'en' => 'Sint Maarten',
6522
  'de' => 'Sint Maarten',
6523
  'it' => 'Sint Maarten',
6524
+ 'es' => 'Isla de San Martín',
6525
  'fr' => 'Saint-Martin',
6526
  'ja' => 'シント・マールテン',
6527
  'pt-BR' => 'São Martinho',
6554
  'it' => 'Siria',
6555
  'es' => 'Siria',
6556
  'fr' => 'Syrie',
6557
+ 'ja' => 'シリア',
6558
  'pt-BR' => 'Síria',
6559
+ 'ru' => 'Сирия',
6560
  'zh-CN' => '叙利亚',
6561
  ),
6562
  ),
6581
  'names' =>
6582
  array (
6583
  'en' => 'Eswatini',
6584
+ 'de' => 'Eswatini',
6585
  'it' => 'Swaziland',
6586
+ 'es' => 'Esuatini',
6587
  'fr' => 'Swaziland',
6588
+ 'ja' => 'スワジランド',
6589
+ 'pt-BR' => 'Essuatíni',
6590
+ 'ru' => 'Эсватини',
6591
  'zh-CN' => '斯威士兰',
6592
  ),
6593
  ),
6616
  'it' => 'Isole Turks e Caicos',
6617
  'es' => 'Islas Turcas y Caicos',
6618
  'fr' => 'Îles Turques-et-Caïques',
6619
+ 'ja' => 'タークス・カイコス諸島',
6620
+ 'pt-BR' => 'Ilhas Turcas e Caicos',
6621
+ 'ru' => 'о-ва Тёркс и Кайкос',
6622
  'zh-CN' => '特克斯和凯科斯群岛',
6623
  ),
6624
  ),
6647
  'it' => 'Ciad',
6648
  'es' => 'Chad',
6649
  'fr' => 'Tchad',
6650
+ 'ja' => 'チャド',
6651
  'pt-BR' => 'Chade',
6652
  'ru' => 'Чад',
6653
  'zh-CN' => '乍得',
6675
  array (
6676
  'en' => 'French Southern Territories',
6677
  'de' => 'Französische Süd- und Antarktisgebiete',
6678
+ 'it' => 'Terre australi francesi',
6679
  'es' => 'Territorios Australes Franceses',
6680
  'fr' => 'Terres australes françaises',
6681
  'ja' => '仏領極南諸島',
6682
  'pt-BR' => 'Territórios Franceses do Sul',
6683
+ 'ru' => 'Французские Южные территории',
6684
+ 'zh-CN' => '法属南部领地',
6685
  ),
6686
  ),
6687
  'continent' => 'AN',
6709
  'it' => 'Togo',
6710
  'es' => 'Togo',
6711
  'fr' => 'Togo',
6712
+ 'ja' => 'トーゴ',
6713
  'pt-BR' => 'Togo',
6714
  'ru' => 'Того',
6715
  'zh-CN' => '多哥',
6742
  'fr' => 'Thaïlande',
6743
  'ja' => 'タイ',
6744
  'pt-BR' => 'Tailândia',
6745
+ 'ru' => 'Таиланд',
6746
  'zh-CN' => '泰国',
6747
  ),
6748
  ),
6771
  'it' => 'Tagikistan',
6772
  'es' => 'Tayikistán',
6773
  'fr' => 'Tadjikistan',
6774
+ 'ja' => 'タジキスタン',
6775
+ 'pt-BR' => 'Tadjiquistão',
6776
  'ru' => 'Таджикистан',
6777
  'zh-CN' => '塔吉克斯坦',
6778
  ),
6802
  'it' => 'Tokelau',
6803
  'es' => 'Tokelau',
6804
  'fr' => 'Tokelau',
6805
+ 'ja' => 'トケラウ',
6806
  'pt-BR' => 'Tokelau',
6807
  'ru' => 'Токелау',
6808
  'zh-CN' => '托克劳',
6831
  'en' => 'Timor-Leste',
6832
  'de' => 'Timor-Leste',
6833
  'it' => 'Timor Est',
6834
+ 'es' => 'Timor-Leste',
6835
  'fr' => 'Timor Oriental',
6836
  'ja' => '東ティモール共和国',
6837
+ 'pt-BR' => 'Timor-Leste',
6838
+ 'ru' => 'Тимор-Лесте',
6839
  'zh-CN' => '东帝汶',
6840
  ),
6841
  ),
6895
  'it' => 'Tunisia',
6896
  'es' => 'Túnez',
6897
  'fr' => 'Tunisie',
6898
+ 'ja' => 'チュニジア',
6899
  'pt-BR' => 'Tunísia',
6900
  'ru' => 'Тунис',
6901
  'zh-CN' => '突尼斯',
6926
  'it' => 'Tonga',
6927
  'es' => 'Tonga',
6928
  'fr' => 'Tonga',
6929
+ 'ja' => 'トンガ',
6930
  'pt-BR' => 'Tonga',
6931
  'ru' => 'Тонга',
6932
  'zh-CN' => '汤加',
6957
  'it' => 'Turchia',
6958
  'es' => 'Turquía',
6959
  'fr' => 'Turquie',
6960
+ 'ja' => 'トルコ',
6961
  'pt-BR' => 'Turquia',
6962
  'ru' => 'Турция',
6963
  'zh-CN' => '土耳其',
6987
  'de' => 'Trinidad und Tobago',
6988
  'it' => 'Trinidad e Tobago',
6989
  'es' => 'Trinidad y Tobago',
6990
+ 'fr' => 'Trinité-et-Tobago',
6991
+ 'ja' => 'トリニダード・トバゴ',
6992
+ 'pt-BR' => 'Trinidad e Tobago',
6993
  'ru' => 'Тринидад и Тобаго',
6994
  'zh-CN' => '特立尼达和多巴哥',
6995
  ),
7015
  'names' =>
7016
  array (
7017
  'en' => 'Tuvalu',
7018
+ 'de' => 'Tuvalu',
7019
  'it' => 'Tuvalu',
7020
  'es' => 'Tuvalu',
7021
  'fr' => 'Tuvalu',
7050
  'it' => 'Taiwan',
7051
  'es' => 'Taiwán',
7052
  'fr' => 'Taïwan',
7053
+ 'ja' => '台湾',
7054
  'pt-BR' => 'Taiwan',
7055
  'ru' => 'Тайвань',
7056
+ 'zh-CN' => '台湾',
7057
  ),
7058
  ),
7059
  'continent' => 'AS',
7081
  'it' => 'Tanzania',
7082
  'es' => 'Tanzania',
7083
  'fr' => 'Tanzanie',
7084
+ 'ja' => 'タンザニア',
7085
  'pt-BR' => 'Tanzânia',
7086
  'ru' => 'Танзания',
7087
  'zh-CN' => '坦桑尼亚',
7112
  'it' => 'Ucraina',
7113
  'es' => 'Ucrania',
7114
  'fr' => 'Ukraine',
7115
+ 'ja' => 'ウクライナ',
7116
  'pt-BR' => 'Ucrânia',
7117
  'ru' => 'Украина',
7118
  'zh-CN' => '乌克兰',
7143
  'it' => 'Uganda',
7144
  'es' => 'Uganda',
7145
  'fr' => 'Ouganda',
7146
+ 'ja' => 'ウガンダ',
7147
  'pt-BR' => 'Uganda',
7148
  'ru' => 'Уганда',
7149
  'zh-CN' => '乌干达',
7169
  'geoname_id' => 5854968,
7170
  'names' =>
7171
  array (
7172
+ 'en' => 'U.S. Outlying Islands',
7173
+ 'de' => 'Amerikanische Überseeinseln',
7174
+ 'it' => 'Altre isole americane del Pacifico',
7175
+ 'es' => 'Islas menores alejadas de EE. UU.',
7176
  'fr' => 'Îles mineures éloignées des États-Unis',
7177
+ 'ja' => '合衆国領有小離島',
7178
+ 'pt-BR' => 'Ilhas Menores Distantes dos EUA',
7179
+ 'ru' => 'Внешние малые о-ва (США)',
7180
+ 'zh-CN' => '美国本土外小岛屿',
7181
  ),
7182
  ),
7183
  'continent' => 'OC',
7202
  array (
7203
  'en' => 'United States',
7204
  'de' => 'USA',
7205
+ 'it' => 'USA',
7206
+ 'es' => 'EE. UU.',
7207
+ 'fr' => 'É.-U.',
7208
+ 'ja' => 'アメリカ',
7209
+ 'pt-BR' => 'EUA',
7210
  'ru' => 'США',
7211
  'zh-CN' => '美国',
7212
  ),
7236
  'it' => 'Uruguay',
7237
  'es' => 'Uruguay',
7238
  'fr' => 'Uruguay',
7239
+ 'ja' => 'ウルグアイ',
7240
  'pt-BR' => 'Uruguai',
7241
  'ru' => 'Уругвай',
7242
  'zh-CN' => '乌拉圭',
7267
  'it' => 'Uzbekistan',
7268
  'es' => 'Uzbekistán',
7269
  'fr' => 'Ouzbékistan',
7270
+ 'ja' => 'ウズベキスタン',
7271
  'pt-BR' => 'Uzbequistão',
7272
  'ru' => 'Узбекистан',
7273
  'zh-CN' => '乌兹别克斯坦',
7294
  'names' =>
7295
  array (
7296
  'en' => 'Vatican City',
7297
+ 'de' => 'Vatikanstadt',
7298
  'it' => 'Vaticano',
7299
  'es' => 'Ciudad del Vaticano',
7300
  'fr' => 'Vatican',
7301
  'ja' => 'ローマ法王庁 (バチカン市国)',
7302
  'pt-BR' => 'Vaticano',
7303
  'ru' => 'Ватикан',
7304
+ 'zh-CN' => '梵蒂冈',
7305
  ),
7306
  ),
7307
  'continent' => 'EU',
7329
  'it' => 'Saint Vincent e Grenadine',
7330
  'es' => 'San Vicente y las Granadinas',
7331
  'fr' => 'Saint-Vincent-et-les-Grenadines',
7332
+ 'ja' => 'セントビンセント及びグレナディーン諸島',
7333
+ 'pt-BR' => 'São Vicente e Granadinas',
7334
  'ru' => 'Сент-Винсент и Гренадины',
7335
  'zh-CN' => '圣文森特和格林纳丁斯',
7336
  ),
7338
  'continent' => 'NA',
7339
  'location' =>
7340
  array (
7341
+ 'latitude' => 12.9835792697409,
7342
+ 'longitude' => -61.28788722957805,
7343
  ),
7344
  'extra' =>
7345
  array (
7360
  'it' => 'Venezuela',
7361
  'es' => 'Venezuela',
7362
  'fr' => 'Vénézuéla',
7363
+ 'ja' => 'ベネズエラ',
7364
  'pt-BR' => 'Venezuela',
7365
  'ru' => 'Венесуэла',
7366
  'zh-CN' => '委内瑞拉',
7393
  'fr' => 'Îles Vierges',
7394
  'ja' => '英領ヴァージン諸島',
7395
  'pt-BR' => 'Ilhas Virgens Britânicas',
7396
+ 'ru' => 'Виргинские о-ва (Великобритания)',
7397
+ 'zh-CN' => '英属维尔京群岛',
7398
  ),
7399
  ),
7400
  'continent' => 'NA',
7420
  'en' => 'U.S. Virgin Islands',
7421
  'de' => 'Amerikanische Jungferninseln',
7422
  'it' => 'Isole Vergini Americane',
7423
+ 'es' => 'Islas Vírgenes de EE. UU.',
7424
  'fr' => 'Îles Vierges des États-Unis',
7425
  'ja' => '米領ヴァージン諸島',
7426
+ 'pt-BR' => 'Ilhas Virgens Americanas',
7427
  'ru' => 'Виргинские о-ва (США)',
7428
+ 'zh-CN' => '美属维尔京群岛',
7429
  ),
7430
  ),
7431
  'continent' => 'NA',
7452
  'de' => 'Vietnam',
7453
  'it' => 'Vietnam',
7454
  'es' => 'Vietnam',
7455
+ 'fr' => 'Viêt Nam',
7456
  'ja' => 'ベトナム',
7457
  'pt-BR' => 'Vietnã',
7458
  'ru' => 'Вьетнам',
7484
  'it' => 'Vanuatu',
7485
  'es' => 'Vanuatu',
7486
  'fr' => 'Vanuatu',
7487
+ 'ja' => 'バヌアツ',
7488
  'pt-BR' => 'Vanuatu',
7489
  'ru' => 'Вануату',
7490
  'zh-CN' => '瓦努阿图',
7515
  'it' => 'Wallis e Futuna',
7516
  'es' => 'Wallis y Futuna',
7517
  'fr' => 'Wallis-et-Futuna',
7518
+ 'ja' => 'ウォリス・フツナ',
7519
+ 'pt-BR' => 'Wallis e Futuna',
7520
  'ru' => 'Уоллис и Футуна',
7521
  'zh-CN' => '瓦利斯和富图纳',
7522
  ),
7546
  'it' => 'Samoa',
7547
  'es' => 'Samoa',
7548
  'fr' => 'Samoa',
7549
+ 'ja' => 'サモア',
7550
  'pt-BR' => 'Samoa',
7551
  'ru' => 'Самоа',
7552
  'zh-CN' => '萨摩亚',
7574
  array (
7575
  'en' => 'Kosovo',
7576
  'de' => 'Kosovo',
7577
+ 'it' => 'Kosovo',
7578
  'es' => 'Kosovo',
7579
  'fr' => 'Kosovo',
7580
  'ja' => 'コソボ',
7608
  'it' => 'Yemen',
7609
  'es' => 'Yemen',
7610
  'fr' => 'Yémen',
7611
+ 'ja' => 'イエメン',
7612
  'pt-BR' => 'Iêmen',
7613
  'ru' => 'Йемен',
7614
  'zh-CN' => '也门',
7701
  'it' => 'Zambia',
7702
  'es' => 'Zambia',
7703
  'fr' => 'Zambie',
7704
+ 'ja' => 'ザンビア',
7705
  'pt-BR' => 'Zâmbia',
7706
  'ru' => 'Замбия',
7707
  'zh-CN' => '赞比亚',
7732
  'it' => 'Zimbabwe',
7733
  'es' => 'Zimbawe',
7734
  'fr' => 'Zimbabwe',
7735
+ 'ja' => 'ジンバブエ',
7736
  'pt-BR' => 'Zimbábue',
7737
  'ru' => 'Зимбабве',
7738
  'zh-CN' => '津巴布韦',
lib/geonames/data/country-names.php CHANGED
@@ -1,5 +1,5 @@
1
  <?php
2
- // Generated at Mon, 26 Oct 2020 11:17:35 +0100
3
  return array (
4
  'en' =>
5
  array (
@@ -50,7 +50,7 @@ return array (
50
  'CL' => 'Chile',
51
  'CN' => 'China',
52
  'CX' => 'Christmas Island',
53
- 'CC' => 'Cocos [Keeling] Islands',
54
  'CO' => 'Colombia',
55
  'KM' => 'Comoros',
56
  'CG' => 'Congo Republic',
@@ -83,7 +83,6 @@ return array (
83
  'PF' => 'French Polynesia',
84
  'TF' => 'French Southern Territories',
85
  'GA' => 'Gabon',
86
- 'GM' => 'Gambia',
87
  'GE' => 'Georgia',
88
  'DE' => 'Germany',
89
  'GH' => 'Ghana',
@@ -99,7 +98,7 @@ return array (
99
  'GW' => 'Guinea-Bissau',
100
  'GY' => 'Guyana',
101
  'HT' => 'Haiti',
102
- 'HM' => 'Heard Island and McDonald Islands',
103
  'HN' => 'Honduras',
104
  'HK' => 'Hong Kong',
105
  'HU' => 'Hungary',
@@ -224,6 +223,7 @@ return array (
224
  'TJ' => 'Tajikistan',
225
  'TZ' => 'Tanzania',
226
  'TH' => 'Thailand',
 
227
  'TL' => 'Timor-Leste',
228
  'TG' => 'Togo',
229
  'TK' => 'Tokelau',
@@ -234,7 +234,7 @@ return array (
234
  'TM' => 'Turkmenistan',
235
  'TC' => 'Turks and Caicos Islands',
236
  'TV' => 'Tuvalu',
237
- 'UM' => 'U.S. Minor Outlying Islands',
238
  'VI' => 'U.S. Virgin Islands',
239
  'UG' => 'Uganda',
240
  'UA' => 'Ukraine',
@@ -257,12 +257,11 @@ return array (
257
  'de' =>
258
  array (
259
  'AF' => 'Afghanistan',
260
- 'AX' => 'Alandinseln',
261
  'AL' => 'Albanien',
262
  'DZ' => 'Algerien',
263
- 'UM' => 'Amerikanisch-Ozeanien',
264
  'AS' => 'Amerikanisch-Samoa',
265
  'VI' => 'Amerikanische Jungferninseln',
 
266
  'AD' => 'Andorra',
267
  'AO' => 'Angola',
268
  'AI' => 'Anguilla',
@@ -277,14 +276,13 @@ return array (
277
  'BH' => 'Bahrain',
278
  'BD' => 'Bangladesch',
279
  'BB' => 'Barbados',
 
280
  'BE' => 'Belgien',
281
  'BZ' => 'Belize',
282
  'BJ' => 'Benin',
283
  'BM' => 'Bermuda',
284
  'BT' => 'Bhutan',
285
- 'MM' => 'Birma (Myanmar)',
286
  'BO' => 'Bolivien',
287
- 'BQ' => 'Bonaire',
288
  'BA' => 'Bosnien und Herzegowina',
289
  'BW' => 'Botswana',
290
  'BV' => 'Bouvetinsel',
@@ -310,6 +308,7 @@ return array (
310
  'CI' => 'Elfenbeinküste',
311
  'ER' => 'Eritrea',
312
  'EE' => 'Estland',
 
313
  'FK' => 'Falklandinseln',
314
  'FJ' => 'Fidschi',
315
  'FI' => 'Finnland',
@@ -317,7 +316,7 @@ return array (
317
  'GF' => 'Französisch-Guayana',
318
  'PF' => 'Französisch-Polynesien',
319
  'TF' => 'Französische Süd- und Antarktisgebiete',
320
- 'FO' => 'Färöer-Inseln',
321
  'GA' => 'Gabun',
322
  'GM' => 'Gambia',
323
  'GE' => 'Georgien',
@@ -334,16 +333,16 @@ return array (
334
  'GW' => 'Guinea-Bissau',
335
  'GY' => 'Guyana',
336
  'HT' => 'Haiti',
337
- 'HM' => 'Heard- und McDonald-Inseln',
338
  'HN' => 'Honduras',
339
  'HK' => 'Hongkong',
340
  'IN' => 'Indien',
341
  'ID' => 'Indonesien',
342
- 'IM' => 'Insel Man',
343
  'IQ' => 'Irak',
344
- 'IR' => 'Iran (Islamische Republik)',
345
  'IE' => 'Irland',
346
  'IS' => 'Island',
 
347
  'IL' => 'Israel',
348
  'IT' => 'Italien',
349
  'JM' => 'Jamaika',
@@ -356,10 +355,11 @@ return array (
356
  'CM' => 'Kamerun',
357
  'CA' => 'Kanada',
358
  'CV' => 'Kapverden',
 
359
  'KZ' => 'Kasachstan',
360
  'QA' => 'Katar',
361
  'KE' => 'Kenia',
362
- 'KG' => 'Kirgistan',
363
  'KI' => 'Kiribati',
364
  'CC' => 'Kokosinseln',
365
  'CO' => 'Kolumbien',
@@ -375,7 +375,7 @@ return array (
375
  'LV' => 'Lettland',
376
  'LB' => 'Libanon',
377
  'LR' => 'Liberia',
378
- 'LY' => 'Libysch-Arabische Dschamahirija',
379
  'LI' => 'Liechtenstein',
380
  'LT' => 'Litauen',
381
  'LU' => 'Luxemburg',
@@ -387,28 +387,28 @@ return array (
387
  'ML' => 'Mali',
388
  'MT' => 'Malta',
389
  'MA' => 'Marokko',
390
- 'MH' => 'Marshall-Inseln',
391
  'MQ' => 'Martinique',
392
  'MR' => 'Mauretanien',
393
  'MU' => 'Mauritius',
394
  'YT' => 'Mayotte',
395
  'MX' => 'Mexiko',
396
  'FM' => 'Mikronesien',
397
- 'MD' => 'Moldau (Republik Moldau)',
398
  'MC' => 'Monaco',
399
  'MN' => 'Mongolei',
400
  'ME' => 'Montenegro',
401
  'MS' => 'Montserrat',
402
  'MZ' => 'Mosambik',
 
403
  'NA' => 'Namibia',
404
  'NR' => 'Nauru',
405
  'NP' => 'Nepal',
406
  'NC' => 'Neukaledonien',
407
  'NZ' => 'Neuseeland',
 
408
  'NL' => 'Niederlande',
409
  'NE' => 'Niger',
410
  'NG' => 'Nigeria',
411
- 'NI' => 'Nikaragua',
412
  'NU' => 'Niue',
413
  'KP' => 'Nordkorea',
414
  'MK' => 'Nordmazedonien',
@@ -418,25 +418,25 @@ return array (
418
  'OM' => 'Oman',
419
  'PK' => 'Pakistan',
420
  'PW' => 'Palau',
421
- 'PS' => 'Palästinensische Autonomiegebiete',
422
  'PA' => 'Panama',
423
  'PG' => 'Papua-Neuguinea',
424
  'PY' => 'Paraguay',
425
  'PE' => 'Peru',
426
  'PH' => 'Philippinen',
427
- 'PN' => 'Pitcairn',
428
  'PL' => 'Polen',
429
  'PT' => 'Portugal',
430
  'PR' => 'Puerto Rico',
 
431
  'RW' => 'Ruanda',
432
  'RO' => 'Rumänien',
433
  'RU' => 'Russland',
434
  'RE' => 'Réunion',
435
- 'KN' => 'Saint Kitts und Nevis',
436
  'ZM' => 'Sambia',
437
  'WS' => 'Samoa',
438
  'SM' => 'San Marino',
439
- 'ST' => 'Sao Tomé und Principe',
440
  'SA' => 'Saudi-Arabien',
441
  'SE' => 'Schweden',
442
  'CH' => 'Schweiz',
@@ -447,24 +447,23 @@ return array (
447
  'ZW' => 'Simbabwe',
448
  'SG' => 'Singapur',
449
  'SX' => 'Sint Maarten',
450
- 'SK' => 'Slowakei (Slowakische Republik)',
451
  'SI' => 'Slowenien',
452
- 'SB' => 'Solomon-Inseln',
453
  'SO' => 'Somalia',
454
  'ES' => 'Spanien',
 
455
  'LK' => 'Sri Lanka',
456
  'BL' => 'St. Barthélemy',
457
  'SH' => 'St. Helena',
 
458
  'LC' => 'St. Lucia',
459
  'MF' => 'St. Martin',
460
  'PM' => 'St. Pierre und Miquelon',
461
  'VC' => 'St. Vincent und die Grenadinen',
462
- 'VA' => 'Staat der Vatikanstadt',
463
  'SD' => 'Sudan',
464
  'SR' => 'Suriname',
465
- 'SJ' => 'Svalbard und Jan Mayen',
466
- 'SZ' => 'Swasiland',
467
  'SY' => 'Syrien',
 
468
  'ZA' => 'Südafrika',
469
  'GS' => 'Südgeorgien und die Südlichen Sandwichinseln',
470
  'KR' => 'Südkorea',
@@ -483,8 +482,9 @@ return array (
483
  'TN' => 'Tunesien',
484
  'TM' => 'Turkmenistan',
485
  'TC' => 'Turks- und Caicosinseln',
486
- 'TV' => 'Tuwalu',
487
  'TR' => 'Türkei',
 
488
  'US' => 'USA',
489
  'UG' => 'Uganda',
490
  'UA' => 'Ukraine',
@@ -492,19 +492,19 @@ return array (
492
  'UY' => 'Uruguay',
493
  'UZ' => 'Usbekistan',
494
  'VU' => 'Vanuatu',
 
495
  'VE' => 'Venezuela',
496
  'AE' => 'Vereinigte Arabische Emirate',
497
- 'GB' => 'Vereinigtes Königreich',
498
  'VN' => 'Vietnam',
499
  'WF' => 'Wallis und Futuna',
500
  'CX' => 'Weihnachtsinsel',
501
- 'BY' => 'Weißrussland',
502
  'EH' => 'Westsahara',
503
  'CF' => 'Zentralafrikanische Republik',
504
  'CY' => 'Zypern',
505
  'EG' => 'Ägypten',
506
  'GQ' => 'Äquatorialguinea',
507
  'ET' => 'Äthiopien',
 
508
  'AT' => 'Österreich',
509
  ),
510
  'it' =>
@@ -512,6 +512,7 @@ return array (
512
  'AF' => 'Afghanistan',
513
  'AL' => 'Albania',
514
  'DZ' => 'Algeria',
 
515
  'AD' => 'Andorra',
516
  'AO' => 'Angola',
517
  'AI' => 'Anguilla',
@@ -547,7 +548,7 @@ return array (
547
  'CM' => 'Camerun',
548
  'CA' => 'Canada',
549
  'CV' => 'Capo Verde',
550
- 'BQ' => 'Caraibi Olandesi',
551
  'CZ' => 'Cechia',
552
  'TD' => 'Ciad',
553
  'CL' => 'Cile',
@@ -555,15 +556,14 @@ return array (
555
  'CY' => 'Cipro',
556
  'CO' => 'Colombia',
557
  'KM' => 'Comore',
558
- 'CG' => 'Congo',
559
  'KP' => 'Corea del Nord',
560
  'KR' => 'Corea del Sud',
561
- 'XK' => 'Cossovo',
562
  'CR' => 'Costa Rica',
563
- 'CI' => 'Costa d\'Avorio',
564
  'HR' => 'Croazia',
565
  'CU' => 'Cuba',
566
- 'CW' => 'Curacao',
 
567
  'DK' => 'Danimarca',
568
  'DM' => 'Dominica',
569
  'EC' => 'Ecuador',
@@ -580,7 +580,7 @@ return array (
580
  'GA' => 'Gabon',
581
  'GM' => 'Gambia',
582
  'GE' => 'Georgia',
583
- 'GS' => 'Georgia del Sud e isole Sandwich meridionali',
584
  'DE' => 'Germania',
585
  'GH' => 'Ghana',
586
  'JM' => 'Giamaica',
@@ -595,11 +595,11 @@ return array (
595
  'GU' => 'Guam',
596
  'GT' => 'Guatemala',
597
  'GG' => 'Guernsey',
598
- 'GF' => 'Guiana Francese',
599
  'GN' => 'Guinea',
600
  'GQ' => 'Guinea Equatoriale',
601
  'GW' => 'Guinea-Bissau',
602
  'GY' => 'Guyana',
 
603
  'HT' => 'Haiti',
604
  'HN' => 'Honduras',
605
  'HK' => 'Hong Kong',
@@ -610,22 +610,22 @@ return array (
610
  'IE' => 'Irlanda',
611
  'IS' => 'Islanda',
612
  'BV' => 'Isola Bouvet',
 
613
  'NF' => 'Isola Norfolk',
614
- 'CX' => 'Isola di Christmas',
615
  'IM' => 'Isola di Man',
616
  'KY' => 'Isole Cayman',
617
- 'CC' => 'Isole Cocos',
618
  'CK' => 'Isole Cook',
619
  'FK' => 'Isole Falkland',
620
  'FO' => 'Isole Faroe',
621
  'HM' => 'Isole Heard e McDonald',
622
- 'MP' => 'Isole Marianne Settentrionali',
623
  'MH' => 'Isole Marshall',
 
624
  'SB' => 'Isole Salomone',
625
  'TC' => 'Isole Turks e Caicos',
626
  'VI' => 'Isole Vergini Americane',
627
  'VG' => 'Isole Vergini Britanniche',
628
- 'UM' => 'Isole minori esterne degli Stati Uniti',
629
  'AX' => 'Isole Åland',
630
  'IL' => 'Israele',
631
  'IT' => 'Italia',
@@ -634,6 +634,7 @@ return array (
634
  'KE' => 'Kenya',
635
  'KG' => 'Kirghizistan',
636
  'KI' => 'Kiribati',
 
637
  'KW' => 'Kuwait',
638
  'LA' => 'Laos',
639
  'LS' => 'Lesotho',
@@ -648,8 +649,8 @@ return array (
648
  'MK' => 'Macedonia del Nord',
649
  'MG' => 'Madagascar',
650
  'MW' => 'Malawi',
 
651
  'MV' => 'Maldive',
652
- 'MY' => 'Malesia',
653
  'ML' => 'Mali',
654
  'MT' => 'Malta',
655
  'MA' => 'Marocco',
@@ -684,28 +685,26 @@ return array (
684
  'PG' => 'Papua Nuova Guinea',
685
  'PY' => 'Paraguay',
686
  'PE' => 'Perù',
687
- 'PN' => 'Pitcairn',
688
  'PF' => 'Polinesia francese',
689
  'PL' => 'Polonia',
690
  'PT' => 'Portogallo',
691
  'PR' => 'Portorico',
692
  'QA' => 'Qatar',
693
- 'GB' => 'Regno Unito',
694
  'CF' => 'Repubblica Centrafricana',
695
  'CD' => 'Repubblica Democratica del Congo',
696
  'DO' => 'Repubblica Dominicana',
 
697
  'RO' => 'Romania',
698
  'RW' => 'Ruanda',
699
  'RU' => 'Russia',
700
- 'RE' => 'Réunion',
701
  'EH' => 'Sahara Occidentale',
702
  'KN' => 'Saint Kitts e Nevis',
703
  'MF' => 'Saint Martin',
704
- 'PM' => 'Saint Pierre e Miquelon',
705
  'VC' => 'Saint Vincent e Grenadine',
 
 
706
  'WS' => 'Samoa',
707
  'AS' => 'Samoa Americane',
708
- 'BL' => 'San Bartolomeo',
709
  'SM' => 'San Marino',
710
  'LC' => 'Santa Lucia',
711
  'SH' => 'Sant’Elena',
@@ -721,10 +720,9 @@ return array (
721
  'SO' => 'Somalia',
722
  'ES' => 'Spagna',
723
  'LK' => 'Sri Lanka',
724
- 'US' => 'Stati Uniti',
725
  'ZA' => 'Sudafrica',
726
  'SD' => 'Sudan',
727
- 'SS' => 'Sudan del Sud',
728
  'SR' => 'Suriname',
729
  'SJ' => 'Svalbard e Jan Mayen',
730
  'SE' => 'Svezia',
@@ -734,7 +732,7 @@ return array (
734
  'TJ' => 'Tagikistan',
735
  'TW' => 'Taiwan',
736
  'TZ' => 'Tanzania',
737
- 'TF' => 'Terre australi e antartiche francesi',
738
  'IO' => 'Territorio Britannico dell’Oceano Indiano',
739
  'TH' => 'Thailandia',
740
  'TL' => 'Timor Est',
@@ -746,6 +744,8 @@ return array (
746
  'TR' => 'Turchia',
747
  'TM' => 'Turkmenistan',
748
  'TV' => 'Tuvalu',
 
 
749
  'UA' => 'Ucraina',
750
  'UG' => 'Uganda',
751
  'HU' => 'Ungheria',
@@ -801,24 +801,27 @@ return array (
801
  'KH' => 'Camboya',
802
  'CM' => 'Camerún',
803
  'CA' => 'Canadá',
 
804
  'TD' => 'Chad',
 
805
  'CL' => 'Chile',
806
  'CN' => 'China',
807
  'CY' => 'Chipre',
808
  'VA' => 'Ciudad del Vaticano',
809
  'CO' => 'Colombia',
810
  'KM' => 'Comoras',
 
811
  'CD' => 'Congo Democrático',
812
- 'CG' => 'Congo [República]',
813
  'KP' => 'Corea del Norte',
814
  'KR' => 'Corea del Sur',
815
  'CR' => 'Costa Rica',
816
- 'CI' => 'Costa de Marfil',
817
  'HR' => 'Croacia',
818
  'CU' => 'Cuba',
819
  'CW' => 'Curazao',
 
820
  'DK' => 'Dinamarca',
821
  'DM' => 'Dominica',
 
822
  'EC' => 'Ecuador',
823
  'EG' => 'Egipto',
824
  'SV' => 'El Salvador',
@@ -827,8 +830,8 @@ return array (
827
  'SK' => 'Eslovaquia',
828
  'SI' => 'Eslovenia',
829
  'ES' => 'España',
830
- 'US' => 'Estados Unidos',
831
  'EE' => 'Estonia',
 
832
  'ET' => 'Etiopía',
833
  'PH' => 'Filipinas',
834
  'FI' => 'Finlandia',
@@ -846,7 +849,7 @@ return array (
846
  'GU' => 'Guam',
847
  'GT' => 'Guatemala',
848
  'GF' => 'Guayana Francesa',
849
- 'GG' => 'Guernsey',
850
  'GN' => 'Guinea',
851
  'GQ' => 'Guinea Ecuatorial',
852
  'GW' => 'Guinea-Bissáu',
@@ -862,11 +865,12 @@ return array (
862
  'IE' => 'Irlanda',
863
  'IR' => 'Irán',
864
  'BV' => 'Isla Bouvet',
865
- 'CX' => 'Isla Christmas',
866
- 'NU' => 'Isla Niue',
867
  'NF' => 'Isla Norfolk',
868
  'IM' => 'Isla de Man',
 
 
869
  'IS' => 'Islandia',
 
870
  'KY' => 'Islas Caimán',
871
  'CC' => 'Islas Cocos',
872
  'CK' => 'Islas Cook',
@@ -880,9 +884,8 @@ return array (
880
  'SB' => 'Islas Salomón',
881
  'TC' => 'Islas Turcas y Caicos',
882
  'VG' => 'Islas Vírgenes',
883
- 'VI' => 'Islas Vírgenes de los Estados Unidos',
884
- 'AX' => 'Islas de Åland',
885
- 'UM' => 'Islas menores alejadas de los Estados Unidos',
886
  'IL' => 'Israel',
887
  'IT' => 'Italia',
888
  'JM' => 'Jamaica',
@@ -923,7 +926,7 @@ return array (
923
  'ME' => 'Montenegro',
924
  'MS' => 'Montserrat',
925
  'MZ' => 'Mozambique',
926
- 'MM' => 'Myanmar [Birmania]',
927
  'MX' => 'México',
928
  'MC' => 'Mónaco',
929
  'NA' => 'Namibia',
@@ -931,6 +934,7 @@ return array (
931
  'NP' => 'Nepal',
932
  'NI' => 'Nicaragua',
933
  'NG' => 'Nigeria',
 
934
  'NO' => 'Noruega',
935
  'NC' => 'Nueva Caledonia',
936
  'NZ' => 'Nueva Zelanda',
@@ -938,6 +942,7 @@ return array (
938
  'OM' => 'Omán',
939
  'PK' => 'Pakistán',
940
  'PW' => 'Palaos',
 
941
  'PA' => 'Panamá',
942
  'PG' => 'Papúa-Nueva Guinea',
943
  'PY' => 'Paraguay',
@@ -946,11 +951,8 @@ return array (
946
  'PL' => 'Polonia',
947
  'PT' => 'Portugal',
948
  'PR' => 'Puerto Rico',
949
- 'QA' => 'Qatar',
950
- 'GB' => 'Reino Unido',
951
  'CF' => 'República Centroafricana',
952
- 'CZ' => 'República Checa',
953
- 'DO' => 'República Dominicana',
954
  'RE' => 'Reunión',
955
  'RW' => 'Ruanda',
956
  'RO' => 'Rumanía',
@@ -960,12 +962,12 @@ return array (
960
  'BL' => 'San Bartolomé',
961
  'KN' => 'San Cristóbal y Nieves',
962
  'SM' => 'San Marino',
963
- 'SX' => 'San Martín',
964
  'MF' => 'San Martín',
965
  'PM' => 'San Pedro y Miquelón',
966
  'VC' => 'San Vicente y las Granadinas',
967
  'SH' => 'Santa Elena',
968
  'LC' => 'Santa Lucía',
 
969
  'ST' => 'Santo Tomé y Príncipe',
970
  'SN' => 'Senegal',
971
  'RS' => 'Serbia',
@@ -975,7 +977,6 @@ return array (
975
  'SY' => 'Siria',
976
  'SO' => 'Somalia',
977
  'LK' => 'Sri Lanka',
978
- 'SZ' => 'Suazilandia',
979
  'ZA' => 'Sudáfrica',
980
  'SD' => 'Sudán',
981
  'SS' => 'Sudán del Sur',
@@ -990,8 +991,7 @@ return array (
990
  'TJ' => 'Tayikistán',
991
  'IO' => 'Territorio Británico del Océano Índico',
992
  'TF' => 'Territorios Australes Franceses',
993
- 'PS' => 'Territorios Palestinos',
994
- 'TL' => 'Timor Oriental',
995
  'TG' => 'Togo',
996
  'TK' => 'Tokelau',
997
  'TO' => 'Tonga',
@@ -1024,7 +1024,7 @@ return array (
1024
  'AO' => 'Angola',
1025
  'AI' => 'Anguilla',
1026
  'AQ' => 'Antarctique',
1027
- 'AG' => 'Antigua et Barbuda',
1028
  'SA' => 'Arabie saoudite',
1029
  'AR' => 'Argentine',
1030
  'AM' => 'Arménie',
@@ -1042,10 +1042,9 @@ return array (
1042
  'BT' => 'Bhoutan',
1043
  'BY' => 'Biélorussie',
1044
  'BO' => 'Bolivie',
1045
- 'BQ' => 'Bonaire, Saint-Eustache et Saba',
1046
  'BA' => 'Bosnie-Herzégovine',
1047
  'BW' => 'Botswana',
1048
- 'BN' => 'Brunéi Darussalam',
1049
  'BR' => 'Brésil',
1050
  'BG' => 'Bulgarie',
1051
  'BF' => 'Burkina Faso',
@@ -1113,7 +1112,7 @@ return array (
1113
  'JO' => 'Jordanie',
1114
  'KZ' => 'Kazakhstan',
1115
  'KE' => 'Kenya',
1116
- 'KG' => 'Kirghizistan',
1117
  'KI' => 'Kiribati',
1118
  'XK' => 'Kosovo',
1119
  'KW' => 'Koweït',
@@ -1153,7 +1152,7 @@ return array (
1153
  'NI' => 'Nicaragua',
1154
  'NE' => 'Niger',
1155
  'NG' => 'Nigeria',
1156
- 'NU' => 'Nioué',
1157
  'NO' => 'Norvège',
1158
  'NC' => 'Nouvelle-Calédonie',
1159
  'NZ' => 'Nouvelle-Zélande',
@@ -1163,32 +1162,33 @@ return array (
1163
  'UZ' => 'Ouzbékistan',
1164
  'PK' => 'Pakistan',
1165
  'PW' => 'Palaos',
 
1166
  'PA' => 'Panama',
1167
- 'PG' => 'Papouasie-Nouvelle Guinée',
1168
  'PY' => 'Paraguay',
1169
  'NL' => 'Pays-Bas',
 
1170
  'PH' => 'Philippines',
1171
  'PN' => 'Pitcairn',
1172
  'PL' => 'Pologne',
1173
- 'PF' => 'Polynésie Française',
1174
  'PR' => 'Porto Rico',
1175
  'PT' => 'Portugal',
1176
  'PE' => 'Pérou',
1177
  'QA' => 'Qatar',
 
1178
  'CD' => 'RDC',
1179
  'RO' => 'Roumanie',
1180
- 'GB' => 'Royaume-Uni',
1181
  'RU' => 'Russie',
1182
  'RW' => 'Rwanda',
1183
- 'DO' => 'République Dominicaine',
1184
- 'CZ' => 'République tchèque',
1185
  'RE' => 'Réunion',
1186
  'EH' => 'Sahara Occidental',
1187
  'BL' => 'Saint-Barthélemy',
1188
  'KN' => 'Saint-Christophe-et-Niévès',
1189
  'SM' => 'Saint-Marin',
1190
- 'MF' => 'Saint-Martin',
1191
  'SX' => 'Saint-Martin',
 
1192
  'PM' => 'Saint-Pierre et Miquelon',
1193
  'VC' => 'Saint-Vincent-et-les-Grenadines',
1194
  'SH' => 'Sainte-Hélène',
@@ -1196,6 +1196,7 @@ return array (
1196
  'SV' => 'Salvador',
1197
  'WS' => 'Samoa',
1198
  'AS' => 'Samoa américaines',
 
1199
  'RS' => 'Serbie',
1200
  'SC' => 'Seychelles',
1201
  'SL' => 'Sierra Leone',
@@ -1204,29 +1205,28 @@ return array (
1204
  'SI' => 'Slovénie',
1205
  'SO' => 'Somalie',
1206
  'SD' => 'Soudan',
 
1207
  'LK' => 'Sri Lanka',
1208
- 'SS' => 'Sud-Soudan',
1209
  'CH' => 'Suisse',
1210
- 'SR' => 'Surinam',
1211
  'SE' => 'Suède',
1212
  'SJ' => 'Svalbard et Jan Mayen',
1213
  'SZ' => 'Swaziland',
1214
  'SY' => 'Syrie',
1215
- 'ST' => 'São Tomé-et-Príncipe',
1216
  'SN' => 'Sénégal',
1217
  'TJ' => 'Tadjikistan',
1218
  'TZ' => 'Tanzanie',
1219
  'TW' => 'Taïwan',
1220
  'TD' => 'Tchad',
 
1221
  'TF' => 'Terres australes françaises',
1222
  'IO' => 'Territoire britannique de l\'océan Indien',
1223
- 'PS' => 'Territoire palestinien',
1224
  'TH' => 'Thaïlande',
1225
  'TL' => 'Timor Oriental',
1226
  'TG' => 'Togo',
1227
  'TK' => 'Tokelau',
1228
  'TO' => 'Tonga',
1229
- 'TT' => 'Trinidad et Tobago',
1230
  'TN' => 'Tunisie',
1231
  'TM' => 'Turkménistan',
1232
  'TR' => 'Turquie',
@@ -1235,17 +1235,17 @@ return array (
1235
  'UY' => 'Uruguay',
1236
  'VU' => 'Vanuatu',
1237
  'VA' => 'Vatican',
1238
- 'VN' => 'Vietnam',
1239
  'VE' => 'Vénézuéla',
1240
  'WF' => 'Wallis-et-Futuna',
1241
  'YE' => 'Yémen',
1242
  'ZM' => 'Zambie',
1243
  'ZW' => 'Zimbabwe',
 
1244
  'EG' => 'Égypte',
1245
  'AE' => 'Émirats Arabes Unis',
1246
  'EC' => 'Équateur',
1247
  'ER' => 'Érythrée',
1248
- 'US' => 'États-Unis',
1249
  'ET' => 'Éthiopie',
1250
  'BV' => 'Île Bouvet',
1251
  'CX' => 'Île Christmas',
@@ -1268,67 +1268,67 @@ return array (
1268
  ),
1269
  'ja' =>
1270
  array (
1271
- 'IS' => 'アイスランド共和国',
1272
  'IE' => 'アイルランド',
1273
- 'AZ' => 'アゼルバイジャン共和国',
1274
  'AF' => 'アフガニスタン',
1275
- 'US' => 'アメリカ合衆国',
1276
  'AE' => 'アラブ首長国連邦',
1277
- 'DZ' => 'アルジェリア民主人民共和国',
1278
- 'AR' => 'アルゼンチン共和国',
1279
- 'AL' => 'アルバニア共和国',
1280
  'AW' => 'アルバ島',
1281
- 'AM' => 'アルメニア共和国',
1282
  'AI' => 'アンギラ',
1283
- 'AO' => 'アンゴラ共和国',
1284
- 'AG' => 'アンティグアバブーダ',
1285
  'AD' => 'アンドラ',
1286
- 'YE' => 'イエメン共和国',
1287
- 'GB' => 'イギリス',
1288
- 'IL' => 'イスラエル国',
1289
- 'IT' => 'イタリア共和国',
1290
- 'IQ' => 'イラク共和国',
1291
- 'IR' => 'イラン・イスラム共和国',
1292
  'IN' => 'インド',
1293
- 'ID' => 'インドネシア共和国',
1294
- 'UG' => 'ウガンダ共和国',
1295
- 'UA' => 'ウクライナ共和国',
1296
- 'UZ' => 'ウズベキスタン共和国',
1297
- 'UY' => 'ウルグアイ共和国',
1298
- 'EC' => 'エクアドル共和国',
1299
- 'EG' => 'エジプト・アラブ共和国',
1300
- 'EE' => 'エストニア共和国',
 
1301
  'ET' => 'エチオピア',
1302
  'ER' => 'エリトリア',
1303
  'SV' => 'エルサルバドル',
1304
- 'OM' => 'オマーン国',
1305
- 'NL' => 'オランダ王国',
1306
  'AU' => 'オーストラリア',
1307
- 'AT' => 'オーストリア共和国',
1308
  'AX' => 'オーランド諸島',
1309
- 'KZ' => 'カザフスタン共和国',
1310
  'QA' => 'カタール',
1311
  'CA' => 'カナダ',
1312
- 'CM' => 'カメルーン共和国',
1313
- 'KH' => 'カンボジア国',
1314
  'CV' => 'カーボベルデ',
1315
  'GY' => 'ガイアナ',
1316
- 'GA' => 'ガボン共和国',
1317
- 'GM' => 'ガンビア共和国',
1318
- 'GH' => 'ガーナ共和国',
1319
  'GG' => 'ガーンジー',
1320
- 'CY' => 'キプロス共和国',
1321
  'CW' => 'キュラソー',
1322
- 'CU' => 'キューバ共和国',
1323
- 'KI' => 'キリバス共和国',
1324
- 'KG' => 'キルギス共和国',
1325
- 'GW' => 'ギニアビサウ共和国',
1326
- 'GN' => 'ギニア共和国',
1327
- 'GR' => 'ギリシャ共和国',
1328
  'KW' => 'クウェート',
1329
  'CK' => 'クック諸島',
1330
  'CX' => 'クリスマス島',
1331
- 'HR' => 'クロアチア共和国',
1332
  'GT' => 'グアテマラ',
1333
  'GP' => 'グアドループ',
1334
  'GU' => 'グアム',
@@ -1336,186 +1336,186 @@ return array (
1336
  'GE' => 'グルジア共和国',
1337
  'GD' => 'グレナダ',
1338
  'KY' => 'ケイマン諸島',
1339
- 'KE' => 'ケニア共和国',
1340
- 'CC' => 'ココス[キーリング]諸島',
1341
  'CR' => 'コスタリカ',
1342
  'XK' => 'コソボ',
1343
- 'KM' => 'コモロ・イスラム連邦共和国',
1344
- 'CO' => 'コロンビア共和国',
1345
- 'CG' => 'コンゴ',
1346
  'CD' => 'コンゴ民主共和国',
1347
- 'SA' => 'サウジアラビア王国',
1348
- 'ST' => 'サントメ プリンシペ',
 
 
1349
  'PM' => 'サンピエール島・ミクロン島',
1350
- 'SM' => 'サンマリノ共和国',
1351
  'BL' => 'サン・バルテルミー',
1352
- 'ZM' => 'ザンビア共和国',
 
1353
  'SL' => 'シエラレオネ',
1354
- 'SY' => 'シリア・アラブ共和国',
1355
  'SG' => 'シンガポール',
1356
  'SX' => 'シント・マールテン',
1357
  'DJ' => 'ジブチ',
1358
  'GI' => 'ジブラルタル',
1359
  'JM' => 'ジャマイカ',
1360
  'JE' => 'ジャージー',
1361
- 'ZW' => 'ジンバブエ共和国',
1362
- 'CH' => 'スイス連邦',
1363
- 'SE' => 'スウェーデン王国',
1364
  'SJ' => 'スバールバル諸島・ヤンマイエン島',
1365
  'ES' => 'スペイン',
1366
- 'SR' => 'スリナム共和国',
1367
- 'LK' => 'スリランカ民主社会主義共和国',
1368
- 'SK' => 'スロバキア (スロバキア共和国)',
1369
  'SI' => 'スロベニア',
1370
- 'SZ' => 'スワジランド王国',
1371
- 'SD' => 'スーダン共和国',
1372
- 'SC' => 'セイシェル',
1373
- 'SN' => 'セネガル共和国',
1374
  'RS' => 'セルビア',
1375
  'KN' => 'セントクリストファー・ネビス',
1376
- 'VC' => 'セントビンセント・グレナディーン諸島',
1377
  'SH' => 'セントヘレナ',
1378
  'LC' => 'セントルシア',
 
1379
  'SO' => 'ソマリア',
1380
  'SB' => 'ソロモン諸島',
1381
  'TH' => 'タイ',
1382
- 'TJ' => 'タジキスタン共和国',
1383
- 'TZ' => 'タンザニア連合共和国',
1384
- 'TC' => 'タークス諸島・カイコス諸島',
1385
- 'CZ' => 'チェコ共和国',
1386
- 'TD' => 'チャド共和国',
1387
- 'TN' => 'チュニジア共和国',
1388
- 'CL' => 'チリ共和国',
1389
  'TV' => 'ツバル',
1390
- 'DK' => 'デンマーク王国',
1391
- 'TK' => 'トケラウ諸島',
1392
- 'TT' => 'トリニダード・トバゴ共和国',
1393
  'TM' => 'トルクメニスタン',
1394
- 'TR' => 'トルコ共和国',
1395
- 'TO' => 'トンガ王国',
1396
- 'TG' => 'トーゴ共和国',
1397
- 'DE' => 'ドイツ連邦共和国',
1398
  'DO' => 'ドミニカ共和国',
1399
  'DM' => 'ドミニカ国',
1400
- 'NG' => 'ナイジェリア連邦共和国',
1401
  'NR' => 'ナウル',
1402
- 'NA' => 'ナミビア共和国',
1403
- 'NU' => 'ニウエ島',
1404
- 'NI' => 'ニカラグア共和国',
1405
- 'NE' => 'ニジェール共和国',
1406
  'NC' => 'ニューカレドニア',
1407
  'NZ' => 'ニュージーランド',
1408
- 'NP' => 'ネパール王国',
1409
- 'NO' => 'ノルウェー王国',
1410
  'NF' => 'ノーフォーク島',
1411
- 'HT' => 'ハイチ共和国',
1412
- 'HU' => 'ハンガリー共和国',
1413
  'HM' => 'ハード島・マクドナルド諸島',
1414
- 'VU' => 'バヌアツ共和国',
1415
- 'BS' => 'バハマ国',
1416
  'BM' => 'バミューダ',
1417
  'BB' => 'バルバドス',
1418
- 'BD' => 'バングラディッシュ人民共和国',
1419
  'BH' => 'バーレーン',
1420
- 'PK' => 'パキスタン・イスラム共和国',
1421
  'PA' => 'パナマ',
1422
- 'PG' => 'パプア・ニューギニア',
1423
  'PW' => 'パラオ',
1424
- 'PY' => 'パラグアイ共和国',
1425
  'PS' => 'パレスチナ',
1426
- 'PN' => 'ピトケアン島',
1427
  'FJ' => 'フィジー',
1428
- 'PH' => 'フィリピン共和国',
1429
- 'FI' => 'フィンランド共和国',
1430
  'FO' => 'フェロー諸島',
1431
  'FK' => 'フォークランド諸島',
1432
- 'FR' => 'フランス共和国',
1433
- 'BR' => 'ブラジル連邦共和国',
1434
- 'BG' => 'ブルガリア共和国',
1435
  'BF' => 'ブルキナファソ',
1436
  'BN' => 'ブルネイ',
1437
- 'BI' => 'ブルンジ共和国',
1438
- 'BT' => 'ブータン王国',
1439
  'BV' => 'ブーベ島',
1440
  'PR' => 'プエルトリコ',
1441
  'VN' => 'ベトナム',
1442
- 'BJ' => 'ベニン共和国',
1443
- 'VE' => 'ベネズエラ共和国',
1444
- 'BY' => 'ベラルーシ共和国',
1445
  'BZ' => 'ベリーズ',
1446
- 'BE' => 'ベルギー王国',
1447
- 'PE' => 'ペルー共和国',
1448
- 'HN' => 'ホンジュラス共和国',
1449
- 'BA' => 'ボスニア・ヘルツェゴビナ共和国',
1450
- 'BW' => 'ボツワナ共和国',
1451
  'BQ' => 'ボネール、シント・ユースタティウスおよびサバ',
1452
- 'BO' => 'ボリビア共和国',
1453
- 'PT' => 'ポルトガル共和国',
1454
- 'PL' => 'ポーランド共和国',
1455
  'MO' => 'マカオ',
1456
- 'MK' => 'マケドニア旧ユーゴスラビア共和国',
1457
- 'MG' => 'マダガスカル共和国',
1458
  'YT' => 'マヨット島',
1459
- 'MW' => 'マラウイ共和国',
1460
  'ML' => 'マリ',
1461
  'MT' => 'マルタ',
1462
- 'MQ' => 'マルティニーク島',
1463
  'MY' => 'マレーシア',
1464
  'IM' => 'マン島',
1465
- 'MH' => 'マーシャル諸島共和国',
1466
  'FM' => 'ミクロネシア連邦',
1467
  'MM' => 'ミャンマー連邦',
1468
- 'MX' => 'メキシコ合衆国',
1469
- 'MZ' => 'モザンビーク共和国',
1470
  'MC' => 'モナコ',
1471
- 'MV' => 'モルジブ',
1472
- 'MD' => 'モルドバ共和国',
1473
- 'MA' => 'モロッコ王国',
1474
  'MN' => 'モンゴル',
1475
  'ME' => 'モンテネグロ',
1476
- 'MS' => 'モントセラト島',
1477
  'MU' => 'モーリシャス',
1478
- 'MR' => 'モーリタニア・イスラム共和国',
1479
- 'JO' => 'ヨルダン・ハシミテ王国',
1480
  'LA' => 'ラオス',
1481
- 'LV' => 'ラトビア共和国',
1482
- 'LT' => 'リトアニア共和国',
1483
- 'LI' => 'リヒテンシュタイン公国',
1484
- 'LR' => 'リベリア共和国',
1485
- 'LU' => 'ルクセンブルグ',
 
1486
  'RW' => 'ルワンダ',
1487
  'RO' => 'ルーマニア',
1488
- 'LS' => 'レソト王国',
1489
- 'LB' => 'レバノン共和国',
1490
- 'RE' => 'レユニオン島',
1491
  'RU' => 'ロシア',
1492
  'VA' => 'ローマ法王庁 (バチカン市国)',
1493
- 'WF' => 'ワリー エ フトゥーナ諸島',
1494
  'CN' => '中国',
1495
  'CF' => '中央アフリカ共和国',
1496
- 'TW' => '中華民国',
1497
  'GF' => '仏領ギアナ',
1498
- 'MF' => '仏領サン・マルタン',
1499
  'PF' => '仏領ポリネシア',
1500
  'TF' => '仏領極南諸島',
 
1501
  'MP' => '北マリアナ諸島',
1502
  'ZA' => '南アフリカ',
1503
- 'GS' => '南ジョージア島・南サンドイッチ諸島',
1504
- 'SS' => '南スーダン',
1505
  'AQ' => '南極',
 
 
1506
  'KR' => '大韓民国',
1507
  'JP' => '日本',
1508
  'TL' => '東ティモール共和国',
1509
- 'LY' => '社会主義人民リビア・アラブ国',
1510
  'AS' => '米領サモア',
1511
  'VI' => '米領ヴァージン諸島',
1512
- 'UM' => '米領太平洋諸島',
1513
  'IO' => '英領インド洋地域',
1514
  'VG' => '英領ヴァージン諸島',
1515
  'EH' => '西サハラ',
1516
- 'WS' => '西サモア',
1517
  'CI' => '象牙海岸',
1518
- 'GQ' => '赤道ギニア共和国',
1519
  'KP' => '韓国、朝鮮民主主義人民共和国',
1520
  'HK' => '香港',
1521
  ),
@@ -1549,23 +1549,22 @@ return array (
1549
  'BG' => 'Болгария',
1550
  'BO' => 'Боливия',
1551
  'BQ' => 'Бонайре, Синт-Эстатиус и Саба',
1552
- 'BA' => 'Босния',
1553
  'BW' => 'Ботсвана',
1554
  'BR' => 'Бразилия',
 
1555
  'IO' => 'Британская территория в Индийском океане',
1556
- 'VG' => 'Британские Виргинские о-ва',
1557
- 'BN' => 'Бруней Даруссалам',
1558
- 'BF' => 'Буркина Фасо',
1559
  'BI' => 'Бурунди',
1560
  'BT' => 'Бутан',
1561
  'VU' => 'Вануату',
1562
  'VA' => 'Ватикан',
1563
- 'GB' => 'Великобритания',
1564
  'HU' => 'Венгрия',
1565
  'VE' => 'Венесуэла',
 
1566
  'VI' => 'Виргинские о-ва (США)',
1567
- 'UM' => 'Внешние малые острова (США)',
1568
- 'TL' => 'Восточный Тимор',
1569
  'VN' => 'Вьетнам',
1570
  'GA' => 'Габон',
1571
  'HT' => 'Гаити',
@@ -1575,7 +1574,7 @@ return array (
1575
  'GP' => 'Гваделупа',
1576
  'GT' => 'Гватемала',
1577
  'GN' => 'Гвинея',
1578
- 'GW' => 'Гвинея-Биссау',
1579
  'DE' => 'Германия',
1580
  'GG' => 'Гернси',
1581
  'GI' => 'Гибралтар',
@@ -1589,6 +1588,7 @@ return array (
1589
  'DK' => 'Дания',
1590
  'JE' => 'Джерси',
1591
  'DJ' => 'Джибути',
 
1592
  'DO' => 'Доминиканская Республика',
1593
  'EG' => 'Египет',
1594
  'CD' => 'Заир',
@@ -1606,6 +1606,8 @@ return array (
1606
  'ES' => 'Испания',
1607
  'IT' => 'Италия',
1608
  'YE' => 'Йемен',
 
 
1609
  'KZ' => 'Казахстан',
1610
  'KY' => 'Каймановы Острова',
1611
  'KH' => 'Камбоджа',
@@ -1619,10 +1621,9 @@ return array (
1619
  'CC' => 'Кокосовые о-ва',
1620
  'CO' => 'Колумбия',
1621
  'KM' => 'Коморские о-ва',
1622
- 'CG' => 'Конго',
1623
  'XK' => 'Косово',
1624
  'CR' => 'Коста-Рика',
1625
- 'CI' => 'Кот-д\'Ивуар',
1626
  'CU' => 'Куба',
1627
  'KW' => 'Кувейт',
1628
  'KG' => 'Кыргызстан',
@@ -1644,20 +1645,18 @@ return array (
1644
  'MW' => 'Малави',
1645
  'MY' => 'Малайзия',
1646
  'ML' => 'Мали',
1647
- 'MV' => 'Мальдивские о-ва',
1648
  'MT' => 'Мальта',
1649
  'MA' => 'Марокко',
1650
  'MQ' => 'Мартиника',
1651
- 'MH' => 'Маршалловы о-ва',
1652
  'MX' => 'Мексика',
1653
- 'FM' => 'Микронезия',
1654
  'MZ' => 'Мозамбик',
1655
  'MD' => 'Молдова',
1656
  'MC' => 'Монако',
1657
  'MN' => 'Монголия',
1658
- 'MS' => 'Монсеррат',
1659
- 'MM' => 'Мьянма',
1660
- 'IM' => 'Мэн, о-в',
1661
  'NA' => 'Намибия',
1662
  'NR' => 'Науру',
1663
  'NP' => 'Непал',
@@ -1665,34 +1664,26 @@ return array (
1665
  'NG' => 'Нигерия',
1666
  'NL' => 'Нидерланды',
1667
  'NI' => 'Никарагуа',
1668
- 'NU' => 'Ниуе',
1669
  'NZ' => 'Новая Зеландия',
1670
  'NC' => 'Новая Каледония',
1671
  'NO' => 'Норвегия',
1672
  'AE' => 'ОАЭ',
1673
  'OM' => 'Оман',
1674
- 'BV' => 'Остров Буве',
1675
- 'DM' => 'Остров Доминика',
1676
- 'NF' => 'Остров Норфолк',
1677
- 'CX' => 'Остров Рождества',
1678
  'BL' => 'Остров Святого Бартоломея',
1679
- 'MF' => 'Остров Святого Мартина',
1680
- 'SH' => 'Остров Святой Елены',
1681
- 'CV' => 'Острова Зеленого Мыса',
1682
  'CK' => 'Острова Кука',
1683
- 'TC' => 'Острова Тёркс и Кайкос',
1684
- 'HM' => 'Острова Херд и Макдональд',
1685
  'PK' => 'Пакистан',
1686
  'PW' => 'Палау',
1687
- 'PS' => 'Палестинские территории',
1688
  'PA' => 'Панама',
1689
  'PG' => 'Папуа – Новая Гвинея',
1690
  'PY' => 'Парагвай',
1691
  'PE' => 'Перу',
1692
- 'PN' => 'Питкэрн',
1693
  'PL' => 'Польша',
1694
  'PT' => 'Португалия',
1695
  'PR' => 'Пуэрто-Рико',
 
 
1696
  'RE' => 'Реюньон',
1697
  'RU' => 'Россия',
1698
  'RW' => 'Руанда',
@@ -1701,34 +1692,33 @@ return array (
1701
  'SV' => 'Сальвадор',
1702
  'WS' => 'Самоа',
1703
  'SM' => 'Сан-Марино',
1704
- 'ST' => 'Сан-Томе и Принсипе',
1705
  'SA' => 'Саудовская Аравия',
1706
- 'SZ' => 'Свазиленд',
1707
- 'SJ' => 'Свальбард и Ян-Майен',
1708
- 'KP' => 'Северная Корея',
1709
  'MK' => 'Северная Македония',
1710
  'MP' => 'Северные Марианские о-ва',
1711
  'SC' => 'Сейшельские о-ва',
 
1712
  'PM' => 'Сен-Пьер и Микелон',
1713
  'SN' => 'Сенегал',
1714
  'VC' => 'Сент-Винсент и Гренадины',
1715
- 'KN' => 'Сент-Киттс и Невис',
1716
  'LC' => 'Сент-Люсия',
1717
  'RS' => 'Сербия',
1718
  'SG' => 'Сингапур',
1719
  'SX' => 'Синт-Мартен',
1720
- 'SY' => 'Сирийская Арабская Республика',
1721
  'SK' => 'Словакия',
1722
  'SI' => 'Словения',
1723
- 'SB' => 'Соломонские острова',
1724
  'SO' => 'Сомали',
1725
  'SD' => 'Судан',
1726
  'SR' => 'Суринам',
1727
  'SL' => 'Сьерра-Леоне',
1728
  'TJ' => 'Таджикистан',
 
1729
  'TW' => 'Тайвань',
1730
- 'TH' => 'Тайланд',
1731
  'TZ' => 'Танзания',
 
1732
  'TG' => 'Того',
1733
  'TK' => 'Токелау',
1734
  'TO' => 'Тонга',
@@ -1743,6 +1733,7 @@ return array (
1743
  'WF' => 'Уоллис и Футуна',
1744
  'UY' => 'Уругвай',
1745
  'FO' => 'Фарерские о-ва',
 
1746
  'FJ' => 'Фиджи',
1747
  'PH' => 'Филиппины',
1748
  'FI' => 'Финляндия',
@@ -1750,26 +1741,35 @@ return array (
1750
  'FR' => 'Франция',
1751
  'GF' => 'Французская Гвиана',
1752
  'PF' => 'Французская Полинезия',
1753
- 'TF' => 'Французские Южные Территории',
1754
  'HR' => 'Хорватия',
1755
- 'CF' => 'ЦАР',
1756
  'TD' => 'Чад',
1757
  'ME' => 'Черногория',
1758
- 'CZ' => 'Чешская Республика',
1759
  'CL' => 'Чили',
1760
  'CH' => 'Швейцария',
1761
  'SE' => 'Швеция',
 
1762
  'LK' => 'Шри-Ланка',
1763
  'EC' => 'Эквадор',
1764
  'GQ' => 'Экваториальная Гвинея',
1765
  'ER' => 'Эритрея',
 
1766
  'EE' => 'Эстония',
1767
  'ET' => 'Эфиопия',
1768
  'ZA' => 'ЮАР',
1769
- 'GS' => 'Южная Джорджия и Южные Сандвичевы Острова',
1770
- 'KR' => 'Южная Корея',
1771
  'SS' => 'Южный Судан',
1772
  'JM' => 'Ямайка',
1773
  'JP' => 'Япония',
 
 
 
 
 
 
 
 
1774
  ),
1775
  );
1
  <?php
2
+ // Generated at Mon, 08 Nov 2021 16:29:58 +0100
3
  return array (
4
  'en' =>
5
  array (
50
  'CL' => 'Chile',
51
  'CN' => 'China',
52
  'CX' => 'Christmas Island',
53
+ 'CC' => 'Cocos (Keeling) Islands',
54
  'CO' => 'Colombia',
55
  'KM' => 'Comoros',
56
  'CG' => 'Congo Republic',
83
  'PF' => 'French Polynesia',
84
  'TF' => 'French Southern Territories',
85
  'GA' => 'Gabon',
 
86
  'GE' => 'Georgia',
87
  'DE' => 'Germany',
88
  'GH' => 'Ghana',
98
  'GW' => 'Guinea-Bissau',
99
  'GY' => 'Guyana',
100
  'HT' => 'Haiti',
101
+ 'HM' => 'Heard and McDonald Islands',
102
  'HN' => 'Honduras',
103
  'HK' => 'Hong Kong',
104
  'HU' => 'Hungary',
223
  'TJ' => 'Tajikistan',
224
  'TZ' => 'Tanzania',
225
  'TH' => 'Thailand',
226
+ 'GM' => 'The Gambia',
227
  'TL' => 'Timor-Leste',
228
  'TG' => 'Togo',
229
  'TK' => 'Tokelau',
234
  'TM' => 'Turkmenistan',
235
  'TC' => 'Turks and Caicos Islands',
236
  'TV' => 'Tuvalu',
237
+ 'UM' => 'U.S. Outlying Islands',
238
  'VI' => 'U.S. Virgin Islands',
239
  'UG' => 'Uganda',
240
  'UA' => 'Ukraine',
257
  'de' =>
258
  array (
259
  'AF' => 'Afghanistan',
 
260
  'AL' => 'Albanien',
261
  'DZ' => 'Algerien',
 
262
  'AS' => 'Amerikanisch-Samoa',
263
  'VI' => 'Amerikanische Jungferninseln',
264
+ 'UM' => 'Amerikanische Überseeinseln',
265
  'AD' => 'Andorra',
266
  'AO' => 'Angola',
267
  'AI' => 'Anguilla',
276
  'BH' => 'Bahrain',
277
  'BD' => 'Bangladesch',
278
  'BB' => 'Barbados',
279
+ 'BY' => 'Belarus',
280
  'BE' => 'Belgien',
281
  'BZ' => 'Belize',
282
  'BJ' => 'Benin',
283
  'BM' => 'Bermuda',
284
  'BT' => 'Bhutan',
 
285
  'BO' => 'Bolivien',
 
286
  'BA' => 'Bosnien und Herzegowina',
287
  'BW' => 'Botswana',
288
  'BV' => 'Bouvetinsel',
308
  'CI' => 'Elfenbeinküste',
309
  'ER' => 'Eritrea',
310
  'EE' => 'Estland',
311
+ 'SZ' => 'Eswatini',
312
  'FK' => 'Falklandinseln',
313
  'FJ' => 'Fidschi',
314
  'FI' => 'Finnland',
316
  'GF' => 'Französisch-Guayana',
317
  'PF' => 'Französisch-Polynesien',
318
  'TF' => 'Französische Süd- und Antarktisgebiete',
319
+ 'FO' => 'Färöer',
320
  'GA' => 'Gabun',
321
  'GM' => 'Gambia',
322
  'GE' => 'Georgien',
333
  'GW' => 'Guinea-Bissau',
334
  'GY' => 'Guyana',
335
  'HT' => 'Haiti',
336
+ 'HM' => 'Heard und McDonaldinseln',
337
  'HN' => 'Honduras',
338
  'HK' => 'Hongkong',
339
  'IN' => 'Indien',
340
  'ID' => 'Indonesien',
 
341
  'IQ' => 'Irak',
342
+ 'IR' => 'Iran',
343
  'IE' => 'Irland',
344
  'IS' => 'Island',
345
+ 'IM' => 'Isle of Man',
346
  'IL' => 'Israel',
347
  'IT' => 'Italien',
348
  'JM' => 'Jamaika',
355
  'CM' => 'Kamerun',
356
  'CA' => 'Kanada',
357
  'CV' => 'Kapverden',
358
+ 'BQ' => 'Karibische Niederlande',
359
  'KZ' => 'Kasachstan',
360
  'QA' => 'Katar',
361
  'KE' => 'Kenia',
362
+ 'KG' => 'Kirgisistan',
363
  'KI' => 'Kiribati',
364
  'CC' => 'Kokosinseln',
365
  'CO' => 'Kolumbien',
375
  'LV' => 'Lettland',
376
  'LB' => 'Libanon',
377
  'LR' => 'Liberia',
378
+ 'LY' => 'Libyen',
379
  'LI' => 'Liechtenstein',
380
  'LT' => 'Litauen',
381
  'LU' => 'Luxemburg',
387
  'ML' => 'Mali',
388
  'MT' => 'Malta',
389
  'MA' => 'Marokko',
390
+ 'MH' => 'Marshallinseln',
391
  'MQ' => 'Martinique',
392
  'MR' => 'Mauretanien',
393
  'MU' => 'Mauritius',
394
  'YT' => 'Mayotte',
395
  'MX' => 'Mexiko',
396
  'FM' => 'Mikronesien',
 
397
  'MC' => 'Monaco',
398
  'MN' => 'Mongolei',
399
  'ME' => 'Montenegro',
400
  'MS' => 'Montserrat',
401
  'MZ' => 'Mosambik',
402
+ 'MM' => 'Myanmar',
403
  'NA' => 'Namibia',
404
  'NR' => 'Nauru',
405
  'NP' => 'Nepal',
406
  'NC' => 'Neukaledonien',
407
  'NZ' => 'Neuseeland',
408
+ 'NI' => 'Nicaragua',
409
  'NL' => 'Niederlande',
410
  'NE' => 'Niger',
411
  'NG' => 'Nigeria',
 
412
  'NU' => 'Niue',
413
  'KP' => 'Nordkorea',
414
  'MK' => 'Nordmazedonien',
418
  'OM' => 'Oman',
419
  'PK' => 'Pakistan',
420
  'PW' => 'Palau',
421
+ 'PS' => 'Palästina',
422
  'PA' => 'Panama',
423
  'PG' => 'Papua-Neuguinea',
424
  'PY' => 'Paraguay',
425
  'PE' => 'Peru',
426
  'PH' => 'Philippinen',
427
+ 'PN' => 'Pitcairninseln',
428
  'PL' => 'Polen',
429
  'PT' => 'Portugal',
430
  'PR' => 'Puerto Rico',
431
+ 'MD' => 'Republik Moldau',
432
  'RW' => 'Ruanda',
433
  'RO' => 'Rumänien',
434
  'RU' => 'Russland',
435
  'RE' => 'Réunion',
436
+ 'SB' => 'Salomonen',
437
  'ZM' => 'Sambia',
438
  'WS' => 'Samoa',
439
  'SM' => 'San Marino',
 
440
  'SA' => 'Saudi-Arabien',
441
  'SE' => 'Schweden',
442
  'CH' => 'Schweiz',
447
  'ZW' => 'Simbabwe',
448
  'SG' => 'Singapur',
449
  'SX' => 'Sint Maarten',
450
+ 'SK' => 'Slowakei',
451
  'SI' => 'Slowenien',
 
452
  'SO' => 'Somalia',
453
  'ES' => 'Spanien',
454
+ 'SJ' => 'Spitzbergen und Jan Mayen',
455
  'LK' => 'Sri Lanka',
456
  'BL' => 'St. Barthélemy',
457
  'SH' => 'St. Helena',
458
+ 'KN' => 'St. Kitts und Nevis',
459
  'LC' => 'St. Lucia',
460
  'MF' => 'St. Martin',
461
  'PM' => 'St. Pierre und Miquelon',
462
  'VC' => 'St. Vincent und die Grenadinen',
 
463
  'SD' => 'Sudan',
464
  'SR' => 'Suriname',
 
 
465
  'SY' => 'Syrien',
466
+ 'ST' => 'São Tomé und Príncipe',
467
  'ZA' => 'Südafrika',
468
  'GS' => 'Südgeorgien und die Südlichen Sandwichinseln',
469
  'KR' => 'Südkorea',
482
  'TN' => 'Tunesien',
483
  'TM' => 'Turkmenistan',
484
  'TC' => 'Turks- und Caicosinseln',
485
+ 'TV' => 'Tuvalu',
486
  'TR' => 'Türkei',
487
+ 'GB' => 'UK',
488
  'US' => 'USA',
489
  'UG' => 'Uganda',
490
  'UA' => 'Ukraine',
492
  'UY' => 'Uruguay',
493
  'UZ' => 'Usbekistan',
494
  'VU' => 'Vanuatu',
495
+ 'VA' => 'Vatikanstadt',
496
  'VE' => 'Venezuela',
497
  'AE' => 'Vereinigte Arabische Emirate',
 
498
  'VN' => 'Vietnam',
499
  'WF' => 'Wallis und Futuna',
500
  'CX' => 'Weihnachtsinsel',
 
501
  'EH' => 'Westsahara',
502
  'CF' => 'Zentralafrikanische Republik',
503
  'CY' => 'Zypern',
504
  'EG' => 'Ägypten',
505
  'GQ' => 'Äquatorialguinea',
506
  'ET' => 'Äthiopien',
507
+ 'AX' => 'Ålandinseln',
508
  'AT' => 'Österreich',
509
  ),
510
  'it' =>
512
  'AF' => 'Afghanistan',
513
  'AL' => 'Albania',
514
  'DZ' => 'Algeria',
515
+ 'UM' => 'Altre isole americane del Pacifico',
516
  'AD' => 'Andorra',
517
  'AO' => 'Angola',
518
  'AI' => 'Anguilla',
548
  'CM' => 'Camerun',
549
  'CA' => 'Canada',
550
  'CV' => 'Capo Verde',
551
+ 'BQ' => 'Caraibi olandesi',
552
  'CZ' => 'Cechia',
553
  'TD' => 'Ciad',
554
  'CL' => 'Cile',
556
  'CY' => 'Cipro',
557
  'CO' => 'Colombia',
558
  'KM' => 'Comore',
559
+ 'CG' => 'Congo-Brazzaville',
560
  'KP' => 'Corea del Nord',
561
  'KR' => 'Corea del Sud',
 
562
  'CR' => 'Costa Rica',
 
563
  'HR' => 'Croazia',
564
  'CU' => 'Cuba',
565
+ 'CW' => 'Curaçao',
566
+ 'CI' => 'Côte d’Ivoire',
567
  'DK' => 'Danimarca',
568
  'DM' => 'Dominica',
569
  'EC' => 'Ecuador',
580
  'GA' => 'Gabon',
581
  'GM' => 'Gambia',
582
  'GE' => 'Georgia',
583
+ 'GS' => 'Georgia del Sud e Sandwich australi',
584
  'DE' => 'Germania',
585
  'GH' => 'Ghana',
586
  'JM' => 'Giamaica',
595
  'GU' => 'Guam',
596
  'GT' => 'Guatemala',
597
  'GG' => 'Guernsey',
 
598
  'GN' => 'Guinea',
599
  'GQ' => 'Guinea Equatoriale',
600
  'GW' => 'Guinea-Bissau',
601
  'GY' => 'Guyana',
602
+ 'GF' => 'Guyana francese',
603
  'HT' => 'Haiti',
604
  'HN' => 'Honduras',
605
  'HK' => 'Hong Kong',
610
  'IE' => 'Irlanda',
611
  'IS' => 'Islanda',
612
  'BV' => 'Isola Bouvet',
613
+ 'CX' => 'Isola Christmas',
614
  'NF' => 'Isola Norfolk',
 
615
  'IM' => 'Isola di Man',
616
  'KY' => 'Isole Cayman',
617
+ 'CC' => 'Isole Cocos (Keeling)',
618
  'CK' => 'Isole Cook',
619
  'FK' => 'Isole Falkland',
620
  'FO' => 'Isole Faroe',
621
  'HM' => 'Isole Heard e McDonald',
622
+ 'MP' => 'Isole Marianne settentrionali',
623
  'MH' => 'Isole Marshall',
624
+ 'PN' => 'Isole Pitcairn',
625
  'SB' => 'Isole Salomone',
626
  'TC' => 'Isole Turks e Caicos',
627
  'VI' => 'Isole Vergini Americane',
628
  'VG' => 'Isole Vergini Britanniche',
 
629
  'AX' => 'Isole Åland',
630
  'IL' => 'Israele',
631
  'IT' => 'Italia',
634
  'KE' => 'Kenya',
635
  'KG' => 'Kirghizistan',
636
  'KI' => 'Kiribati',
637
+ 'XK' => 'Kosovo',
638
  'KW' => 'Kuwait',
639
  'LA' => 'Laos',
640
  'LS' => 'Lesotho',
649
  'MK' => 'Macedonia del Nord',
650
  'MG' => 'Madagascar',
651
  'MW' => 'Malawi',
652
+ 'MY' => 'Malaysia',
653
  'MV' => 'Maldive',
 
654
  'ML' => 'Mali',
655
  'MT' => 'Malta',
656
  'MA' => 'Marocco',
685
  'PG' => 'Papua Nuova Guinea',
686
  'PY' => 'Paraguay',
687
  'PE' => 'Perù',
 
688
  'PF' => 'Polinesia francese',
689
  'PL' => 'Polonia',
690
  'PT' => 'Portogallo',
691
  'PR' => 'Portorico',
692
  'QA' => 'Qatar',
 
693
  'CF' => 'Repubblica Centrafricana',
694
  'CD' => 'Repubblica Democratica del Congo',
695
  'DO' => 'Repubblica Dominicana',
696
+ 'RE' => 'Riunione',
697
  'RO' => 'Romania',
698
  'RW' => 'Ruanda',
699
  'RU' => 'Russia',
 
700
  'EH' => 'Sahara Occidentale',
701
  'KN' => 'Saint Kitts e Nevis',
702
  'MF' => 'Saint Martin',
 
703
  'VC' => 'Saint Vincent e Grenadine',
704
+ 'BL' => 'Saint-Barthélemy',
705
+ 'PM' => 'Saint-Pierre e Miquelon',
706
  'WS' => 'Samoa',
707
  'AS' => 'Samoa Americane',
 
708
  'SM' => 'San Marino',
709
  'LC' => 'Santa Lucia',
710
  'SH' => 'Sant’Elena',
720
  'SO' => 'Somalia',
721
  'ES' => 'Spagna',
722
  'LK' => 'Sri Lanka',
723
+ 'SS' => 'Sud Sudan',
724
  'ZA' => 'Sudafrica',
725
  'SD' => 'Sudan',
 
726
  'SR' => 'Suriname',
727
  'SJ' => 'Svalbard e Jan Mayen',
728
  'SE' => 'Svezia',
732
  'TJ' => 'Tagikistan',
733
  'TW' => 'Taiwan',
734
  'TZ' => 'Tanzania',
735
+ 'TF' => 'Terre australi francesi',
736
  'IO' => 'Territorio Britannico dell’Oceano Indiano',
737
  'TH' => 'Thailandia',
738
  'TL' => 'Timor Est',
744
  'TR' => 'Turchia',
745
  'TM' => 'Turkmenistan',
746
  'TV' => 'Tuvalu',
747
+ 'GB' => 'UK',
748
+ 'US' => 'USA',
749
  'UA' => 'Ucraina',
750
  'UG' => 'Uganda',
751
  'HU' => 'Ungheria',
801
  'KH' => 'Camboya',
802
  'CM' => 'Camerún',
803
  'CA' => 'Canadá',
804
+ 'QA' => 'Catar',
805
  'TD' => 'Chad',
806
+ 'CZ' => 'Chequia',
807
  'CL' => 'Chile',
808
  'CN' => 'China',
809
  'CY' => 'Chipre',
810
  'VA' => 'Ciudad del Vaticano',
811
  'CO' => 'Colombia',
812
  'KM' => 'Comoras',
813
+ 'CG' => 'Congo',
814
  'CD' => 'Congo Democrático',
 
815
  'KP' => 'Corea del Norte',
816
  'KR' => 'Corea del Sur',
817
  'CR' => 'Costa Rica',
 
818
  'HR' => 'Croacia',
819
  'CU' => 'Cuba',
820
  'CW' => 'Curazao',
821
+ 'CI' => 'Côte d’Ivoire',
822
  'DK' => 'Dinamarca',
823
  'DM' => 'Dominica',
824
+ 'US' => 'EE. UU.',
825
  'EC' => 'Ecuador',
826
  'EG' => 'Egipto',
827
  'SV' => 'El Salvador',
830
  'SK' => 'Eslovaquia',
831
  'SI' => 'Eslovenia',
832
  'ES' => 'España',
 
833
  'EE' => 'Estonia',
834
+ 'SZ' => 'Esuatini',
835
  'ET' => 'Etiopía',
836
  'PH' => 'Filipinas',
837
  'FI' => 'Finlandia',
849
  'GU' => 'Guam',
850
  'GT' => 'Guatemala',
851
  'GF' => 'Guayana Francesa',
852
+ 'GG' => 'Guernesey',
853
  'GN' => 'Guinea',
854
  'GQ' => 'Guinea Ecuatorial',
855
  'GW' => 'Guinea-Bissáu',
865
  'IE' => 'Irlanda',
866
  'IR' => 'Irán',
867
  'BV' => 'Isla Bouvet',
 
 
868
  'NF' => 'Isla Norfolk',
869
  'IM' => 'Isla de Man',
870
+ 'CX' => 'Isla de Navidad',
871
+ 'SX' => 'Isla de San Martín',
872
  'IS' => 'Islandia',
873
+ 'AX' => 'Islas Aland',
874
  'KY' => 'Islas Caimán',
875
  'CC' => 'Islas Cocos',
876
  'CK' => 'Islas Cook',
884
  'SB' => 'Islas Salomón',
885
  'TC' => 'Islas Turcas y Caicos',
886
  'VG' => 'Islas Vírgenes',
887
+ 'VI' => 'Islas Vírgenes de EE. UU.',
888
+ 'UM' => 'Islas menores alejadas de EE. UU.',
 
889
  'IL' => 'Israel',
890
  'IT' => 'Italia',
891
  'JM' => 'Jamaica',
926
  'ME' => 'Montenegro',
927
  'MS' => 'Montserrat',
928
  'MZ' => 'Mozambique',
929
+ 'MM' => 'Myanmar (Birmania)',
930
  'MX' => 'México',
931
  'MC' => 'Mónaco',
932
  'NA' => 'Namibia',
934
  'NP' => 'Nepal',
935
  'NI' => 'Nicaragua',
936
  'NG' => 'Nigeria',
937
+ 'NU' => 'Niue',
938
  'NO' => 'Noruega',
939
  'NC' => 'Nueva Caledonia',
940
  'NZ' => 'Nueva Zelanda',
942
  'OM' => 'Omán',
943
  'PK' => 'Pakistán',
944
  'PW' => 'Palaos',
945
+ 'PS' => 'Palestina',
946
  'PA' => 'Panamá',
947
  'PG' => 'Papúa-Nueva Guinea',
948
  'PY' => 'Paraguay',
951
  'PL' => 'Polonia',
952
  'PT' => 'Portugal',
953
  'PR' => 'Puerto Rico',
954
+ 'GB' => 'RU',
 
955
  'CF' => 'República Centroafricana',
 
 
956
  'RE' => 'Reunión',
957
  'RW' => 'Ruanda',
958
  'RO' => 'Rumanía',
962
  'BL' => 'San Bartolomé',
963
  'KN' => 'San Cristóbal y Nieves',
964
  'SM' => 'San Marino',
 
965
  'MF' => 'San Martín',
966
  'PM' => 'San Pedro y Miquelón',
967
  'VC' => 'San Vicente y las Granadinas',
968
  'SH' => 'Santa Elena',
969
  'LC' => 'Santa Lucía',
970
+ 'DO' => 'Santo Domingo',
971
  'ST' => 'Santo Tomé y Príncipe',
972
  'SN' => 'Senegal',
973
  'RS' => 'Serbia',
977
  'SY' => 'Siria',
978
  'SO' => 'Somalia',
979
  'LK' => 'Sri Lanka',
 
980
  'ZA' => 'Sudáfrica',
981
  'SD' => 'Sudán',
982
  'SS' => 'Sudán del Sur',
991
  'TJ' => 'Tayikistán',
992
  'IO' => 'Territorio Británico del Océano Índico',
993
  'TF' => 'Territorios Australes Franceses',
994
+ 'TL' => 'Timor-Leste',
 
995
  'TG' => 'Togo',
996
  'TK' => 'Tokelau',
997
  'TO' => 'Tonga',
1024
  'AO' => 'Angola',
1025
  'AI' => 'Anguilla',
1026
  'AQ' => 'Antarctique',
1027
+ 'AG' => 'Antigua-et-Barbuda',
1028
  'SA' => 'Arabie saoudite',
1029
  'AR' => 'Argentine',
1030
  'AM' => 'Arménie',
1042
  'BT' => 'Bhoutan',
1043
  'BY' => 'Biélorussie',
1044
  'BO' => 'Bolivie',
 
1045
  'BA' => 'Bosnie-Herzégovine',
1046
  'BW' => 'Botswana',
1047
+ 'BN' => 'Brunei',
1048
  'BR' => 'Brésil',
1049
  'BG' => 'Bulgarie',
1050
  'BF' => 'Burkina Faso',
1112
  'JO' => 'Jordanie',
1113
  'KZ' => 'Kazakhstan',
1114
  'KE' => 'Kenya',
1115
+ 'KG' => 'Kirghizstan',
1116
  'KI' => 'Kiribati',
1117
  'XK' => 'Kosovo',
1118
  'KW' => 'Koweït',
1152
  'NI' => 'Nicaragua',
1153
  'NE' => 'Niger',
1154
  'NG' => 'Nigeria',
1155
+ 'NU' => 'Niue',
1156
  'NO' => 'Norvège',
1157
  'NC' => 'Nouvelle-Calédonie',
1158
  'NZ' => 'Nouvelle-Zélande',
1162
  'UZ' => 'Ouzbékistan',
1163
  'PK' => 'Pakistan',
1164
  'PW' => 'Palaos',
1165
+ 'PS' => 'Palestine',
1166
  'PA' => 'Panama',
1167
+ 'PG' => 'Papouasie-Nouvelle-Guinée',
1168
  'PY' => 'Paraguay',
1169
  'NL' => 'Pays-Bas',
1170
+ 'BQ' => 'Pays-Bas caribéens',
1171
  'PH' => 'Philippines',
1172
  'PN' => 'Pitcairn',
1173
  'PL' => 'Pologne',
1174
+ 'PF' => 'Polynésie française',
1175
  'PR' => 'Porto Rico',
1176
  'PT' => 'Portugal',
1177
  'PE' => 'Pérou',
1178
  'QA' => 'Qatar',
1179
+ 'GB' => 'R.-U.',
1180
  'CD' => 'RDC',
1181
  'RO' => 'Roumanie',
 
1182
  'RU' => 'Russie',
1183
  'RW' => 'Rwanda',
1184
+ 'DO' => 'République dominicaine',
 
1185
  'RE' => 'Réunion',
1186
  'EH' => 'Sahara Occidental',
1187
  'BL' => 'Saint-Barthélemy',
1188
  'KN' => 'Saint-Christophe-et-Niévès',
1189
  'SM' => 'Saint-Marin',
 
1190
  'SX' => 'Saint-Martin',
1191
+ 'MF' => 'Saint-Martin',
1192
  'PM' => 'Saint-Pierre et Miquelon',
1193
  'VC' => 'Saint-Vincent-et-les-Grenadines',
1194
  'SH' => 'Sainte-Hélène',
1196
  'SV' => 'Salvador',
1197
  'WS' => 'Samoa',
1198
  'AS' => 'Samoa américaines',
1199
+ 'ST' => 'Sao Tomé-et-Principe',
1200
  'RS' => 'Serbie',
1201
  'SC' => 'Seychelles',
1202
  'SL' => 'Sierra Leone',
1205
  'SI' => 'Slovénie',
1206
  'SO' => 'Somalie',
1207
  'SD' => 'Soudan',
1208
+ 'SS' => 'Soudan du Sud',
1209
  'LK' => 'Sri Lanka',
 
1210
  'CH' => 'Suisse',
1211
+ 'SR' => 'Suriname',
1212
  'SE' => 'Suède',
1213
  'SJ' => 'Svalbard et Jan Mayen',
1214
  'SZ' => 'Swaziland',
1215
  'SY' => 'Syrie',
 
1216
  'SN' => 'Sénégal',
1217
  'TJ' => 'Tadjikistan',
1218
  'TZ' => 'Tanzanie',
1219
  'TW' => 'Taïwan',
1220
  'TD' => 'Tchad',
1221
+ 'CZ' => 'Tchéquie',
1222
  'TF' => 'Terres australes françaises',
1223
  'IO' => 'Territoire britannique de l\'océan Indien',
 
1224
  'TH' => 'Thaïlande',
1225
  'TL' => 'Timor Oriental',
1226
  'TG' => 'Togo',
1227
  'TK' => 'Tokelau',
1228
  'TO' => 'Tonga',
1229
+ 'TT' => 'Trinité-et-Tobago',
1230
  'TN' => 'Tunisie',
1231
  'TM' => 'Turkménistan',
1232
  'TR' => 'Turquie',
1235
  'UY' => 'Uruguay',
1236
  'VU' => 'Vanuatu',
1237
  'VA' => 'Vatican',
1238
+ 'VN' => 'Viêt Nam',
1239
  'VE' => 'Vénézuéla',
1240
  'WF' => 'Wallis-et-Futuna',
1241
  'YE' => 'Yémen',
1242
  'ZM' => 'Zambie',
1243
  'ZW' => 'Zimbabwe',
1244
+ 'US' => 'É.-U.',
1245
  'EG' => 'Égypte',
1246
  'AE' => 'Émirats Arabes Unis',
1247
  'EC' => 'Équateur',
1248
  'ER' => 'Érythrée',
 
1249
  'ET' => 'Éthiopie',
1250
  'BV' => 'Île Bouvet',
1251
  'CX' => 'Île Christmas',
1268
  ),
1269
  'ja' =>
1270
  array (
1271
+ 'IS' => 'アイスランド',
1272
  'IE' => 'アイルランド',
1273
+ 'AZ' => 'アゼルバイジャン',
1274
  'AF' => 'アフガニスタン',
1275
+ 'US' => 'アメリカ',
1276
  'AE' => 'アラブ首長国連邦',
1277
+ 'DZ' => 'アルジェリア',
1278
+ 'AR' => 'アルゼンチン',
1279
+ 'AL' => 'アルバニア',
1280
  'AW' => 'アルバ島',
1281
+ 'AM' => 'アルメニア',
1282
  'AI' => 'アンギラ',
1283
+ 'AO' => 'アンゴラ',
1284
+ 'AG' => 'アンティグア・バーブーダ',
1285
  'AD' => 'アンドラ',
1286
+ 'YE' => 'イエメン',
1287
+ 'IL' => 'イスラエル',
1288
+ 'IT' => 'イタリア',
1289
+ 'IQ' => 'イラク',
1290
+ 'IR' => 'イラン',
 
1291
  'IN' => 'インド',
1292
+ 'ID' => 'インドネシア',
1293
+ 'WF' => 'ウォリス・フツナ',
1294
+ 'UG' => 'ウガンダ',
1295
+ 'UA' => 'ウクライナ',
1296
+ 'UZ' => 'ウズベキスタン',
1297
+ 'UY' => 'ウルグアイ',
1298
+ 'EC' => 'エクアドル',
1299
+ 'EG' => 'エジプト',
1300
+ 'EE' => 'エストニア',
1301
  'ET' => 'エチオピア',
1302
  'ER' => 'エリトリア',
1303
  'SV' => 'エルサルバドル',
1304
+ 'OM' => 'オマーン',
1305
+ 'NL' => 'オランダ',
1306
  'AU' => 'オーストラリア',
1307
+ 'AT' => 'オーストリア',
1308
  'AX' => 'オーランド諸島',
1309
+ 'KZ' => 'カザフスタン',
1310
  'QA' => 'カタール',
1311
  'CA' => 'カナダ',
1312
+ 'CM' => 'カメルーン',
1313
+ 'KH' => 'カンボジア',
1314
  'CV' => 'カーボベルデ',
1315
  'GY' => 'ガイアナ',
1316
+ 'GA' => 'ガボン',
1317
+ 'GM' => 'ガンビア',
1318
+ 'GH' => 'ガーナ',
1319
  'GG' => 'ガーンジー',
1320
+ 'CY' => 'キプロス',
1321
  'CW' => 'キュラソー',
1322
+ 'CU' => 'キューバ',
1323
+ 'KI' => 'キリバス',
1324
+ 'KG' => 'キルギス',
1325
+ 'GN' => 'ギニア',
1326
+ 'GW' => 'ギニアビサウ',
1327
+ 'GR' => 'ギリシャ',
1328
  'KW' => 'クウェート',
1329
  'CK' => 'クック諸島',
1330
  'CX' => 'クリスマス島',
1331
+ 'HR' => 'クロアチア',
1332
  'GT' => 'グアテマラ',
1333
  'GP' => 'グアドループ',
1334
  'GU' => 'グアム',
1336
  'GE' => 'グルジア共和国',
1337
  'GD' => 'グレナダ',
1338
  'KY' => 'ケイマン諸島',
1339
+ 'KE' => 'ケニア',
1340
+ 'CC' => 'ココス(キーリング)諸島',
1341
  'CR' => 'コスタリカ',
1342
  'XK' => 'コソボ',
1343
+ 'KM' => 'コモロ',
1344
+ 'CO' => 'コロンビア',
1345
+ 'CG' => 'コンゴ共和国',
1346
  'CD' => 'コンゴ民主共和国',
1347
+ 'SA' => 'サウジアラビア',
1348
+ 'GS' => 'サウスジョージア・サウスサンドウィッチ諸島',
1349
+ 'WS' => 'サモア',
1350
+ 'ST' => 'サントメ・プリンシペ',
1351
  'PM' => 'サンピエール島・ミクロン島',
1352
+ 'SM' => 'サンマリノ',
1353
  'BL' => 'サン・バルテルミー',
1354
+ 'MF' => 'サン・マルタン',
1355
+ 'ZM' => 'ザンビア',
1356
  'SL' => 'シエラレオネ',
1357
+ 'SY' => 'シリア',
1358
  'SG' => 'シンガポール',
1359
  'SX' => 'シント・マールテン',
1360
  'DJ' => 'ジブチ',
1361
  'GI' => 'ジブラルタル',
1362
  'JM' => 'ジャマイカ',
1363
  'JE' => 'ジャージー',
1364
+ 'ZW' => 'ジンバブエ',
1365
+ 'CH' => 'スイス',
1366
+ 'SE' => 'スウェーデン',
1367
  'SJ' => 'スバールバル諸島・ヤンマイエン島',
1368
  'ES' => 'スペイン',
1369
+ 'SR' => 'スリナム',
1370
+ 'LK' => 'スリランカ',
1371
+ 'SK' => 'スロバキア',
1372
  'SI' => 'スロベニア',
1373
+ 'SZ' => 'スワジランド',
1374
+ 'SD' => 'スーダン',
1375
+ 'SN' => 'セネガル',
 
1376
  'RS' => 'セルビア',
1377
  'KN' => 'セントクリストファー・ネビス',
1378
+ 'VC' => 'セントビンセント及びグレナディーン諸島',
1379
  'SH' => 'セントヘレナ',
1380
  'LC' => 'セントルシア',
1381
+ 'SC' => 'セーシェル',
1382
  'SO' => 'ソマリア',
1383
  'SB' => 'ソロモン諸島',
1384
  'TH' => 'タイ',
1385
+ 'TJ' => 'タジキスタン',
1386
+ 'TZ' => 'タンザニア',
1387
+ 'TC' => 'タークス・カイコス諸島',
1388
+ 'CZ' => 'チェコ',
1389
+ 'TD' => 'チャド',
1390
+ 'TN' => 'チュニジア',
1391
+ 'CL' => 'チリ',
1392
  'TV' => 'ツバル',
1393
+ 'DK' => 'デンマーク',
1394
+ 'TK' => 'トケラウ',
1395
+ 'TT' => 'トリニダード・トバゴ',
1396
  'TM' => 'トルクメニスタン',
1397
+ 'TR' => 'トルコ',
1398
+ 'TO' => 'トンガ',
1399
+ 'TG' => 'トーゴ',
1400
+ 'DE' => 'ドイツ',
1401
  'DO' => 'ドミニカ共和国',
1402
  'DM' => 'ドミニカ国',
1403
+ 'NG' => 'ナイジェリア',
1404
  'NR' => 'ナウル',
1405
+ 'NA' => 'ナミビア',
1406
+ 'NU' => 'ニウエ',
1407
+ 'NI' => 'ニカラグア',
1408
+ 'NE' => 'ニジェール',
1409
  'NC' => 'ニューカレドニア',
1410
  'NZ' => 'ニュージーランド',
1411
+ 'NP' => 'ネパール',
1412
+ 'NO' => 'ノルウェー',
1413
  'NF' => 'ノーフォーク島',
1414
+ 'HT' => 'ハイチ',
1415
+ 'HU' => 'ハンガリー',
1416
  'HM' => 'ハード島・マクドナルド諸島',
1417
+ 'VU' => 'バヌアツ',
1418
+ 'BS' => 'バハマ',
1419
  'BM' => 'バミューダ',
1420
  'BB' => 'バルバドス',
1421
+ 'BD' => 'バングラデシュ',
1422
  'BH' => 'バーレーン',
1423
+ 'PK' => 'パキスタン',
1424
  'PA' => 'パナマ',
1425
+ 'PG' => 'パプアニューギニア',
1426
  'PW' => 'パラオ',
1427
+ 'PY' => 'パラグアイ',
1428
  'PS' => 'パレスチナ',
1429
+ 'PN' => 'ピトケアン諸島',
1430
  'FJ' => 'フィジー',
1431
+ 'PH' => 'フィリピン',
1432
+ 'FI' => 'フィンランド',
1433
  'FO' => 'フェロー諸島',
1434
  'FK' => 'フォークランド諸島',
1435
+ 'FR' => 'フランス',
1436
+ 'BR' => 'ブラジル',
1437
+ 'BG' => 'ブルガリア',
1438
  'BF' => 'ブルキナファソ',
1439
  'BN' => 'ブルネイ',
1440
+ 'BI' => 'ブルンジ',
1441
+ 'BT' => 'ブータン',
1442
  'BV' => 'ブーベ島',
1443
  'PR' => 'プエルトリコ',
1444
  'VN' => 'ベトナム',
1445
+ 'BJ' => 'ベナン',
1446
+ 'VE' => 'ベネズエラ',
1447
+ 'BY' => 'ベラルーシ',
1448
  'BZ' => 'ベリーズ',
1449
+ 'BE' => 'ベルギー',
1450
+ 'PE' => 'ペルー',
1451
+ 'HN' => 'ホンジュラス',
1452
+ 'BA' => 'ボスニア・ヘルツェゴビナ',
1453
+ 'BW' => 'ボツワナ',
1454
  'BQ' => 'ボネール、シント・ユースタティウスおよびサバ',
1455
+ 'BO' => 'ボリビア',
1456
+ 'PT' => 'ポルトガル',
1457
+ 'PL' => 'ポーランド',
1458
  'MO' => 'マカオ',
1459
+ 'MG' => 'マダガスカル',
 
1460
  'YT' => 'マヨット島',
1461
+ 'MW' => 'マラウイ',
1462
  'ML' => 'マリ',
1463
  'MT' => 'マルタ',
1464
+ 'MQ' => 'マルティニーク',
1465
  'MY' => 'マレーシア',
1466
  'IM' => 'マン島',
1467
+ 'MH' => 'マーシャル諸島',
1468
  'FM' => 'ミクロネシア連邦',
1469
  'MM' => 'ミャンマー連邦',
1470
+ 'MX' => 'メキシコ',
1471
+ 'MZ' => 'モザンビーク',
1472
  'MC' => 'モナコ',
1473
+ 'MV' => 'モルディブ',
1474
+ 'MD' => 'モルドバ',
1475
+ 'MA' => 'モロッコ',
1476
  'MN' => 'モンゴル',
1477
  'ME' => 'モンテネグロ',
1478
+ 'MS' => 'モントセラト',
1479
  'MU' => 'モーリシャス',
1480
+ 'MR' => 'モーリタニア',
1481
+ 'JO' => 'ヨルダン',
1482
  'LA' => 'ラオス',
1483
+ 'LV' => 'ラトビア',
1484
+ 'LT' => 'リトアニア',
1485
+ 'LI' => 'リヒテンシュタイン',
1486
+ 'LY' => 'リビア',
1487
+ 'LR' => 'リベリア',
1488
+ 'LU' => 'ルクセンブルク',
1489
  'RW' => 'ルワンダ',
1490
  'RO' => 'ルーマニア',
1491
+ 'LS' => 'レソト',
1492
+ 'LB' => 'レバノン',
1493
+ 'RE' => 'レユニオン',
1494
  'RU' => 'ロシア',
1495
  'VA' => 'ローマ法王庁 (バチカン市国)',
 
1496
  'CN' => '中国',
1497
  'CF' => '中央アフリカ共和国',
 
1498
  'GF' => '仏領ギアナ',
 
1499
  'PF' => '仏領ポリネシア',
1500
  'TF' => '仏領極南諸島',
1501
+ 'MK' => '北マケドニア',
1502
  'MP' => '北マリアナ諸島',
1503
  'ZA' => '南アフリカ',
1504
+ 'SS' => '南スーダン共和国',
 
1505
  'AQ' => '南極',
1506
+ 'TW' => '台湾',
1507
+ 'UM' => '合衆国領有小離島',
1508
  'KR' => '大韓民国',
1509
  'JP' => '日本',
1510
  'TL' => '東ティモール共和国',
 
1511
  'AS' => '米領サモア',
1512
  'VI' => '米領ヴァージン諸島',
1513
+ 'GB' => '英国',
1514
  'IO' => '英領インド洋地域',
1515
  'VG' => '英領ヴァージン諸島',
1516
  'EH' => '西サハラ',
 
1517
  'CI' => '象牙海岸',
1518
+ 'GQ' => '赤道ギニア',
1519
  'KP' => '韓国、朝鮮民主主義人民共和国',
1520
  'HK' => '香港',
1521
  ),
1549
  'BG' => 'Болгария',
1550
  'BO' => 'Боливия',
1551
  'BQ' => 'Бонайре, Синт-Эстатиус и Саба',
1552
+ 'BA' => 'Босния и Герцеговина',
1553
  'BW' => 'Ботсвана',
1554
  'BR' => 'Бразилия',
1555
+ 'GB' => 'Британия',
1556
  'IO' => 'Британская территория в Индийском океане',
1557
+ 'BN' => 'Бруней-Даруссалам',
1558
+ 'BF' => 'Буркина-Фасо',
 
1559
  'BI' => 'Бурунди',
1560
  'BT' => 'Бутан',
1561
  'VU' => 'Вануату',
1562
  'VA' => 'Ватикан',
 
1563
  'HU' => 'Венгрия',
1564
  'VE' => 'Венесуэла',
1565
+ 'VG' => 'Виргинские о-ва (Великобритания)',
1566
  'VI' => 'Виргинские о-ва (США)',
1567
+ 'UM' => 'Внешние малые о-ва (США)',
 
1568
  'VN' => 'Вьетнам',
1569
  'GA' => 'Габон',
1570
  'HT' => 'Гаити',
1574
  'GP' => 'Гваделупа',
1575
  'GT' => 'Гватемала',
1576
  'GN' => 'Гвинея',
1577
+ 'GW' => 'Гвинея-Бисау',
1578
  'DE' => 'Германия',
1579
  'GG' => 'Гернси',
1580
  'GI' => 'Гибралтар',
1588
  'DK' => 'Дания',
1589
  'JE' => 'Джерси',
1590
  'DJ' => 'Джибути',
1591
+ 'DM' => 'Доминика',
1592
  'DO' => 'Доминиканская Республика',
1593
  'EG' => 'Египет',
1594
  'CD' => 'Заир',
1606
  'ES' => 'Испания',
1607
  'IT' => 'Италия',
1608
  'YE' => 'Йемен',
1609
+ 'KP' => 'КНДР',
1610
+ 'CV' => 'Кабо-Верде',
1611
  'KZ' => 'Казахстан',
1612
  'KY' => 'Каймановы Острова',
1613
  'KH' => 'Камбоджа',
1621
  'CC' => 'Кокосовые о-ва',
1622
  'CO' => 'Колумбия',
1623
  'KM' => 'Коморские о-ва',
 
1624
  'XK' => 'Косово',
1625
  'CR' => 'Коста-Рика',
1626
+ 'CI' => 'Кот-д’Ивуар',
1627
  'CU' => 'Куба',
1628
  'KW' => 'Кувейт',
1629
  'KG' => 'Кыргызстан',
1645
  'MW' => 'Малави',
1646
  'MY' => 'Малайзия',
1647
  'ML' => 'Мали',
1648
+ 'MV' => 'Мальдивы',
1649
  'MT' => 'Мальта',
1650
  'MA' => 'Марокко',
1651
  'MQ' => 'Мартиника',
1652
+ 'MH' => 'Маршалловы Острова',
1653
  'MX' => 'Мексика',
 
1654
  'MZ' => 'Мозамбик',
1655
  'MD' => 'Молдова',
1656
  'MC' => 'Монако',
1657
  'MN' => 'Монголия',
1658
+ 'MS' => 'Монтсеррат',
1659
+ 'MM' => 'Мьянма (Бирма)',
 
1660
  'NA' => 'Намибия',
1661
  'NR' => 'Науру',
1662
  'NP' => 'Непал',
1664
  'NG' => 'Нигерия',
1665
  'NL' => 'Нидерланды',
1666
  'NI' => 'Никарагуа',
1667
+ 'NU' => 'Ниуэ',
1668
  'NZ' => 'Новая Зеландия',
1669
  'NC' => 'Новая Каледония',
1670
  'NO' => 'Норвегия',
1671
  'AE' => 'ОАЭ',
1672
  'OM' => 'Оман',
 
 
 
 
1673
  'BL' => 'Остров Святого Бартоломея',
 
 
 
1674
  'CK' => 'Острова Кука',
 
 
1675
  'PK' => 'Пакистан',
1676
  'PW' => 'Палау',
1677
+ 'PS' => 'Палестина',
1678
  'PA' => 'Панама',
1679
  'PG' => 'Папуа – Новая Гвинея',
1680
  'PY' => 'Парагвай',
1681
  'PE' => 'Перу',
 
1682
  'PL' => 'Польша',
1683
  'PT' => 'Португалия',
1684
  'PR' => 'Пуэрто-Рико',
1685
+ 'CG' => 'Республика Конго',
1686
+ 'KR' => 'Республика Корея',
1687
  'RE' => 'Реюньон',
1688
  'RU' => 'Россия',
1689
  'RW' => 'Руанда',
1692
  'SV' => 'Сальвадор',
1693
  'WS' => 'Самоа',
1694
  'SM' => 'Сан-Марино',
1695
+ 'ST' => 'Сан-Томе и Принсипи',
1696
  'SA' => 'Саудовская Аравия',
 
 
 
1697
  'MK' => 'Северная Македония',
1698
  'MP' => 'Северные Марианские о-ва',
1699
  'SC' => 'Сейшельские о-ва',
1700
+ 'MF' => 'Сен-Мартен',
1701
  'PM' => 'Сен-Пьер и Микелон',
1702
  'SN' => 'Сенегал',
1703
  'VC' => 'Сент-Винсент и Гренадины',
1704
+ 'KN' => 'Сент-Китс и Невис',
1705
  'LC' => 'Сент-Люсия',
1706
  'RS' => 'Сербия',
1707
  'SG' => 'Сингапур',
1708
  'SX' => 'Синт-Мартен',
1709
+ 'SY' => 'Сирия',
1710
  'SK' => 'Словакия',
1711
  'SI' => 'Словения',
1712
+ 'SB' => 'Соломоновы Острова',
1713
  'SO' => 'Сомали',
1714
  'SD' => 'Судан',
1715
  'SR' => 'Суринам',
1716
  'SL' => 'Сьерра-Леоне',
1717
  'TJ' => 'Таджикистан',
1718
+ 'TH' => 'Таиланд',
1719
  'TW' => 'Тайвань',
 
1720
  'TZ' => 'Танзания',
1721
+ 'TL' => 'Тимор-Лесте',
1722
  'TG' => 'Того',
1723
  'TK' => 'Токелау',
1724
  'TO' => 'Тонга',
1733
  'WF' => 'Уоллис и Футуна',
1734
  'UY' => 'Уругвай',
1735
  'FO' => 'Фарерские о-ва',
1736
+ 'FM' => 'Федеративные Штаты Микронезии',
1737
  'FJ' => 'Фиджи',
1738
  'PH' => 'Филиппины',
1739
  'FI' => 'Финляндия',
1741
  'FR' => 'Франция',
1742
  'GF' => 'Французская Гвиана',
1743
  'PF' => 'Французская Полинезия',
1744
+ 'TF' => 'Французские Южные территории',
1745
  'HR' => 'Хорватия',
1746
+ 'CF' => 'Центрально-Африканская Республика',
1747
  'TD' => 'Чад',
1748
  'ME' => 'Черногория',
1749
+ 'CZ' => 'Чехия',
1750
  'CL' => 'Чили',
1751
  'CH' => 'Швейцария',
1752
  'SE' => 'Швеция',
1753
+ 'SJ' => 'Шпицберген и Ян-Майен',
1754
  'LK' => 'Шри-Ланка',
1755
  'EC' => 'Эквадор',
1756
  'GQ' => 'Экваториальная Гвинея',
1757
  'ER' => 'Эритрея',
1758
+ 'SZ' => 'Эсватини',
1759
  'EE' => 'Эстония',
1760
  'ET' => 'Эфиопия',
1761
  'ZA' => 'ЮАР',
1762
+ 'GS' => 'Южная Георгия и Южные Сандвичевы о-ва',
 
1763
  'SS' => 'Южный Судан',
1764
  'JM' => 'Ямайка',
1765
  'JP' => 'Япония',
1766
+ 'BV' => 'о-в Буве',
1767
+ 'IM' => 'о-в Мэн',
1768
+ 'NF' => 'о-в Норфолк',
1769
+ 'CX' => 'о-в Рождества',
1770
+ 'SH' => 'о-в Св. Елены',
1771
+ 'PN' => 'о-ва Питкэрн',
1772
+ 'TC' => 'о-ва Тёркс и Кайкос',
1773
+ 'HM' => 'о-ва Херд и Макдональд',
1774
  ),
1775
  );
package.json CHANGED
@@ -2,32 +2,40 @@
2
  "name": "geoip-detect",
3
  "version": "2.11.0",
4
  "description": "Geolocation IP Detection - Wordpress Plugin (JS)",
5
- "main": "index.js",
6
  "repository": "git@github.com:yellowtree/geoip-detect.git",
7
  "author": "Benjamin Pick <benjaminpick@github.com>",
8
  "license": "GPL-3.0-or-later",
9
  "scripts": {
10
- "clean": "rm -rf .cache",
11
- "start": "rm -rf js/dist && parcel parcel.urls --out-dir js/dist --public-url .",
12
- "build": "rm -rf js/dist && parcel build parcel.urls --out-dir js/dist --public-url .",
13
- "test": "jest --coverage"
 
 
14
  },
15
  "private": false,
16
  "dependencies": {
17
- "@babel/runtime": ">=7.12.0",
18
  "emoji-flags": "1.3.0",
19
- "just-intersect": "3.1.0",
20
- "just-safe-get": "2.1.2"
 
 
21
  },
22
  "devDependencies": {
23
- "@babel/core": "7.13.8",
24
- "@babel/plugin-transform-runtime": "7.13.9",
25
- "@babel/preset-env": "7.13.9",
26
- "babel-jest": "27.0.6",
27
  "babel-plugin-transform-class-properties": "6.24.1",
28
- "eslint": "7.31.0",
29
- "jest": "27.0.6",
30
- "parcel-bundler": "1.12.5",
31
- "parcel-plugin-assets-list": "1.7.1"
 
 
 
 
 
32
  }
33
  }
2
  "name": "geoip-detect",
3
  "version": "2.11.0",
4
  "description": "Geolocation IP Detection - Wordpress Plugin (JS)",
 
5
  "repository": "git@github.com:yellowtree/geoip-detect.git",
6
  "author": "Benjamin Pick <benjaminpick@github.com>",
7
  "license": "GPL-3.0-or-later",
8
  "scripts": {
9
+ "clean": "rm -rf .parcel-cache",
10
+ "start": "parcel js/frontend.js --port 1234 --hmr-port 1236 --dist-dir js/dist --public-url .",
11
+ "build": "rm -f babel.config.json ; rm -rf js/dist && parcel build js/frontend.js --dist-dir js/dist --public-url .",
12
+ "test": "cp tests/babel.config.json . && jest --coverage ; rm babel.config.json",
13
+ "test-ddd": "cp tests/babel.config.json . && jest -t ddd ; rm babel.config.json",
14
+ "update-browserlist": "browserslist --update-db"
15
  },
16
  "private": false,
17
  "dependencies": {
18
+ "@babel/runtime": "7.16.7",
19
  "emoji-flags": "1.3.0",
20
+ "just-compare": "2.0.1",
21
+ "just-intersect": "4.0.2",
22
+ "just-safe-get": "4.0.1",
23
+ "just-safe-set": "4.0.1"
24
  },
25
  "devDependencies": {
26
+ "@babel/core": "7.16.7",
27
+ "@babel/plugin-transform-runtime": "7.16.7",
28
+ "@babel/preset-env": "7.16.7",
29
+ "babel-jest": "27.3.1",
30
  "babel-plugin-transform-class-properties": "6.24.1",
31
+ "eslint": "7.32.0",
32
+ "jest": "27.3.1",
33
+ "parcel": "2.0.1"
34
+ },
35
+ "browserslist": "> 0.2%, last 2 versions, Firefox ESR, not dead",
36
+ "jest": {
37
+ "transform": {
38
+ "^.+\\.js$": "babel-jest"
39
+ }
40
  }
41
  }
readme.txt CHANGED
@@ -2,7 +2,7 @@
2
  Contributors: benjaminpick
3
  Tags: geolocation, locator, geoip, maxmind, ipstack
4
  Requires at least: 5.0
5
- Tested up to: 5.8
6
  Requires PHP: 7.2
7
  Stable tag: trunk
8
  License: GPLv3 or later
@@ -119,6 +119,10 @@ See [Documentation](https://github.com/yellowtree/geoip-detect/wiki) for more in
119
 
120
  == Upgrade Notice ==
121
 
 
 
 
 
122
  = 4.0.1 =
123
 
124
  Hotfix - avoid fatal erros if another plugin also has the Maxmind library included
@@ -165,6 +169,30 @@ If you use Maxmind "Automatic download" then you need to upgrade to this plugin
165
 
166
  == Changelog ==
167
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
168
  = 4.2.3 =
169
  * FIX: Further improve the Maxmind admin notice UI
170
  * Update some smaller libraries
@@ -179,7 +207,7 @@ If you use Maxmind "Automatic download" then you need to upgrade to this plugin
179
  * NEW: Show a warning on the options page when there are incompatibilities with other plugins that also use the Maxmind libraries.
180
  * FIX: Remove an incompatibility of the libraries with Toolset or other Laravel-based plugins
181
  * NEW: In CF7, you can now add any property to the mail body with a special syntax, e.g. `[geoip_detect2_property_country__iso_code]`
182
- * FIX (JS): Replace the internally used library 'lodash' with 'just' to reduce the total file size
183
  * FIX (JS): Improve error handling in AJAX mode
184
  * FIX: Port numbers in reverse proxies are ignored now (removes incompatibility with Azure reverse proxies)
185
  * FIX: Prevent Cloudflare APO from caching when using AJAX mode or page caching is disabled in the plugin options
2
  Contributors: benjaminpick
3
  Tags: geolocation, locator, geoip, maxmind, ipstack
4
  Requires at least: 5.0
5
+ Tested up to: 5.9
6
  Requires PHP: 7.2
7
  Stable tag: trunk
8
  License: GPLv3 or later
119
 
120
  == Upgrade Notice ==
121
 
122
+ = 5.0.0 =
123
+
124
+ If you are using AJAX mode, please read the changelog.
125
+
126
  = 4.0.1 =
127
 
128
  Hotfix - avoid fatal erros if another plugin also has the Maxmind library included
169
 
170
  == Changelog ==
171
 
172
+ = 5.0.0 =
173
+ In this release, there a small breaking changes marked by [!].
174
+
175
+ AJAX mode:
176
+ * FIX [!]: Empty attribute values such as `[geoip_detect2_show_if country=""]Country was not detected[/geoip_detect2_show_if]` are now working (they were ignored before)
177
+ * FIX [!]: Shortcodes that have an invalid value for the property `ajax` (e.g. `[geoip_detect2_text_input ajax="invalid"]`) are now using the AJAX option instead of always disabling AJAX
178
+ * FIX: In CF7, the country selector can now be used in AJAX mode
179
+ * FIX: In AJAX mode, the shortcode `[geoip_detect2_show_if]` renders as a `<div>` if it detects that the containing content has HTML block level elements
180
+ * NEW (Beta): In AJAX mode, the new property `autosave` saves the user input as local override for this browser. `[geoip_detect2_countries mycountry autosave]` and `[geoip_detect2_text_input city property:city autosave]`. (Please give feedback if this works as expected!)
181
+ * FIX: In AJAX mode, calling the method `set_override(record, duration_in_days)` now refreshes the AJAX shortcodes and CSS body classes.
182
+ -> Thus, it is now possible to quickly implement different content for different countries with an autodetected default country, see (TODO example)
183
+
184
+ Other changes:
185
+ * NEW: Drastically improving performance if the the lookup is performed for the current IP more than once (e.g. because of shortcodes without AJAX mode)
186
+ * UI: Showing the time for the subsequent lookup on the Test Lookup page
187
+ * FIX: Maxmind Datasource: Check if the database file is really a file, not a directory
188
+ * NEW: Header Datasource: Now a custom HTTP header can be used via the wordpress filter `geoip_detect2_source_header_http_key`
189
+
190
+ Other minor changes:
191
+ * Update the list of available APIs for getting the external IP (as whatismyip went down)
192
+ * Minimum Wordpress version is 5.4 now.
193
+ * Update some internal libraries & dev tools
194
+ * Checked compatibility with PHP 8.1
195
+
196
  = 4.2.3 =
197
  * FIX: Further improve the Maxmind admin notice UI
198
  * Update some smaller libraries
207
  * NEW: Show a warning on the options page when there are incompatibilities with other plugins that also use the Maxmind libraries.
208
  * FIX: Remove an incompatibility of the libraries with Toolset or other Laravel-based plugins
209
  * NEW: In CF7, you can now add any property to the mail body with a special syntax, e.g. `[geoip_detect2_property_country__iso_code]`
210
+ * FIX (JS): Replace the internally used library 'lodash' with 'just' to reduce the JS file size
211
  * FIX (JS): Improve error handling in AJAX mode
212
  * FIX: Port numbers in reverse proxies are ignored now (removes incompatibility with Azure reverse proxies)
213
  * FIX: Prevent Cloudflare APO from caching when using AJAX mode or page caching is disabled in the plugin options
shortcodes/_helpers.php CHANGED
@@ -34,6 +34,7 @@ function _geoip_detect2_shortcode_options($attr) {
34
  if (isset($attr['property'])) {
35
  $opt['property'] = $attr['property'];
36
  }
 
37
  return $opt;
38
  }
39
 
@@ -58,8 +59,10 @@ function _geoip_detect_flatten_html_attr($attr) {
58
  */
59
  function geoip_detect2_shortcode_is_ajax_mode($attr) {
60
  if (isset($attr['ajax'])) {
61
- $value = filter_var($attr['ajax'], FILTER_VALIDATE_BOOLEAN );
62
- return $value;
 
 
63
  }
64
 
65
  if (get_option('geoip-detect-ajax_enabled') && get_option('geoip-detect-ajax_shortcodes')) {
@@ -68,8 +71,45 @@ function geoip_detect2_shortcode_is_ajax_mode($attr) {
68
  return false;
69
  }
70
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
71
 
72
  function _geoip_detect2_create_placeholder($tag = "span", $attr = [], $data = null, $innerHTML = '') {
 
 
 
 
73
  $tag = sanitize_key($tag);
74
  $html = "<$tag";
75
 
34
  if (isset($attr['property'])) {
35
  $opt['property'] = $attr['property'];
36
  }
37
+
38
  return $opt;
39
  }
40
 
59
  */
60
  function geoip_detect2_shortcode_is_ajax_mode($attr) {
61
  if (isset($attr['ajax'])) {
62
+ $value = filter_var($attr['ajax'], FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE );
63
+ if (is_bool($value)) {
64
+ return $value;
65
+ }
66
  }
67
 
68
  if (get_option('geoip-detect-ajax_enabled') && get_option('geoip-detect-ajax_shortcodes')) {
71
  return false;
72
  }
73
 
74
+ function _geoip_detect2_html_contains_block_elements($html) {
75
+ if (!$html) {
76
+ return false;
77
+ }
78
+ $html = mb_strtolower($html);
79
+
80
+ // There are more. But these are most common
81
+ $blocklevelElements = [
82
+ 'div',
83
+ 'p',
84
+ 'blockquote',
85
+ 'figure',
86
+ 'form',
87
+ 'h1',
88
+ 'h2',
89
+ 'h3',
90
+ 'h4',
91
+ 'h5',
92
+ 'h6',
93
+ 'ul',
94
+ 'ol',
95
+ 'pre',
96
+ 'table',
97
+ ];
98
+ foreach ($blocklevelElements as $element) {
99
+ if (strpos($html, '<' . $element) !== false) {
100
+ if (preg_match('#<' . $element . '[\s/>]#', $html)) {
101
+ return true;
102
+ }
103
+ }
104
+ }
105
+ return false;
106
+ }
107
 
108
  function _geoip_detect2_create_placeholder($tag = "span", $attr = [], $data = null, $innerHTML = '') {
109
+ if ($tag === 'span' && _geoip_detect2_html_contains_block_elements($innerHTML)) {
110
+ $tag = 'div';
111
+ }
112
+
113
  $tag = sanitize_key($tag);
114
  $html = "<$tag";
115
 
shortcodes/cf7.php CHANGED
@@ -35,6 +35,13 @@ function geoip_detect2_add_wpcf7_shortcodes() {
35
  *
36
  * `[geoip_detect2_countries mycountry default:US]`
37
  * Visitor's country is preselected, but in case the country is unknown, use "United States"
 
 
 
 
 
 
 
38
  *
39
  */
40
  function geoip_detect2_shortcode_country_select_wpcf7($tag) {
@@ -46,8 +53,9 @@ function geoip_detect2_shortcode_country_select_wpcf7($tag) {
46
 
47
  $class = wpcf7_form_controls_class( $tag->type );
48
  $validation_error = wpcf7_get_validation_error( $tag->name );
49
- if ($validation_error)
50
  $class .= ' wpcf7-not-valid';
 
51
 
52
  $attr = array(
53
  'name' => $tag->name,
@@ -61,8 +69,17 @@ function geoip_detect2_shortcode_country_select_wpcf7($tag) {
61
  'default' => $tag->get_option('default', '', true),
62
  'flag' => $tag->has_option('flag'),
63
  'tel' => $tag->has_option('tel'),
 
 
 
64
  );
65
-
 
 
 
 
 
 
66
  $html = geoip_detect2_shortcode_country_select($attr);
67
 
68
  $html = sprintf(
@@ -112,7 +129,13 @@ function geoip_detect2_shortcode_text_input_wpcf7($tag) {
112
  'lang' => $tag->get_option('lang', '', true),
113
  'property' => $tag->get_option('property', '', true),
114
  'default' => $tag->get_option('default', '', true),
 
 
115
  );
 
 
 
 
116
  $html = geoip_detect2_shortcode_text_input($attr);
117
 
118
  $html = sprintf(
35
  *
36
  * `[geoip_detect2_countries mycountry default:US]`
37
  * Visitor's country is preselected, but in case the country is unknown, use "United States"
38
+ *
39
+ * `[geoip_detect2_countries mycountry autosave]`
40
+ * Visitor's country is preselected, but when the visitor changes the country, his choice is saved in his browser (in AJAX-mode only)
41
+ *
42
+ * `[geoip_detect2_countries mycountry default:US country:US country:IT country:FR]`
43
+ * Visitor's country is preselected, only show US/IT/FR as possible selections,
44
+ * but in case the country is unknown or not in the list, use "United States"
45
  *
46
  */
47
  function geoip_detect2_shortcode_country_select_wpcf7($tag) {
53
 
54
  $class = wpcf7_form_controls_class( $tag->type );
55
  $validation_error = wpcf7_get_validation_error( $tag->name );
56
+ if ($validation_error) {
57
  $class .= ' wpcf7-not-valid';
58
+ }
59
 
60
  $attr = array(
61
  'name' => $tag->name,
69
  'default' => $tag->get_option('default', '', true),
70
  'flag' => $tag->has_option('flag'),
71
  'tel' => $tag->has_option('tel'),
72
+ 'list' => implode(',', (array) $tag->get_option('country', '[a-zA-Z]+', false)),
73
+ 'ajax' => $tag->get_option('ajax', '', true),
74
+ 'autosave' => $tag->has_option( 'autosave' ),
75
  );
76
+ if ($attr['ajax'] === false /* option not given */) {
77
+ unset($attr['ajax']);
78
+ }
79
+ if (empty($attr['selected'])) {
80
+ unset($attr['selected']);
81
+ }
82
+
83
  $html = geoip_detect2_shortcode_country_select($attr);
84
 
85
  $html = sprintf(
129
  'lang' => $tag->get_option('lang', '', true),
130
  'property' => $tag->get_option('property', '', true),
131
  'default' => $tag->get_option('default', '', true),
132
+ 'ajax' => $tag->get_option('ajax', '', true),
133
+ 'autosave' => $tag->has_option( 'autosave' ),
134
  );
135
+ if ($attr['ajax'] === false /* option not given */) {
136
+ unset($attr['ajax']);
137
+ }
138
+
139
  $html = geoip_detect2_shortcode_text_input($attr);
140
 
141
  $html = sprintf(
shortcodes/input.php CHANGED
@@ -48,7 +48,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
48
  * @param string $ip Lookup the data of a specific IP instead of the current client IP (this parameter does not work in AJAX mode)
49
  * @param string $placeholder HZML attribute "plaecholer"
50
  * @param bool $ajax 1: Execute this shortcode as AJAX | 0: Execute this shortcode on the server | Unset: Use the global settings (execute as AJAX if both 'AJAX' and 'Resolve shortcodes (via Ajax)' are enabled)
51
-
52
  *
53
  * @return string The generated HTML
54
  */
@@ -68,6 +68,9 @@ function geoip_detect2_shortcode_text_input($attr) {
68
  if (geoip_detect2_shortcode_is_ajax_mode($attr)) {
69
  geoip_detect2_enqueue_javascript('shortcode');
70
  $html_attrs['class'] .= ' js-geoip-text-input';
 
 
 
71
  $html_attrs['data-options'] = wp_json_encode(_geoip_detect2_shortcode_options($attr));
72
  } else {
73
  $html_attrs['value'] = geoip_detect2_shortcode($attr + array('add_error' => false));
48
  * @param string $ip Lookup the data of a specific IP instead of the current client IP (this parameter does not work in AJAX mode)
49
  * @param string $placeholder HZML attribute "plaecholer"
50
  * @param bool $ajax 1: Execute this shortcode as AJAX | 0: Execute this shortcode on the server | Unset: Use the global settings (execute as AJAX if both 'AJAX' and 'Resolve shortcodes (via Ajax)' are enabled)
51
+ * @param bool $autosave 1: In Ajax mode, when the user changes the country, save his choice in his browser. (optional, Ajax mode only)
52
  *
53
  * @return string The generated HTML
54
  */
68
  if (geoip_detect2_shortcode_is_ajax_mode($attr)) {
69
  geoip_detect2_enqueue_javascript('shortcode');
70
  $html_attrs['class'] .= ' js-geoip-text-input';
71
+ if (!empty($attr['autosave'])) {
72
+ $html_attrs['class'] .= ' js-geoip-detect-input-autosave';
73
+ }
74
  $html_attrs['data-options'] = wp_json_encode(_geoip_detect2_shortcode_options($attr));
75
  } else {
76
  $html_attrs['value'] = geoip_detect2_shortcode($attr + array('add_error' => false));
shortcodes/main.php CHANGED
@@ -55,7 +55,9 @@ function geoip_detect2_shortcode($orig_attr, $content = '', $shortcodeName = 'ge
55
 
56
  if (geoip_detect2_shortcode_is_ajax_mode($orig_attr) && !$attr['ip']) {
57
  geoip_detect2_enqueue_javascript('shortcode');
58
- return _geoip_detect2_create_placeholder('span', [ 'class' => 'js-geoip-detect-shortcode' ], $shortcode_options);
 
 
59
  }
60
 
61
  $options = array('skipCache' => $shortcode_options['skip_cache']);
55
 
56
  if (geoip_detect2_shortcode_is_ajax_mode($orig_attr) && !$attr['ip']) {
57
  geoip_detect2_enqueue_javascript('shortcode');
58
+ return _geoip_detect2_create_placeholder('span', [
59
+ 'class' => 'js-geoip-detect-shortcode'
60
+ ], $shortcode_options);
61
  }
62
 
63
  $options = array('skipCache' => $shortcode_options['skip_cache']);
shortcodes/select.php CHANGED
@@ -48,31 +48,37 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
48
  * @param bool $required If the field is required or not
49
  * @param string $class CSS Class of element
50
  * @param string $lang Language(s) (optional. If not set, current site language is used.)
51
- * @param string $selected Which country to select by default (2-letter ISO code.) (optional. If not set, the country will be detected by client ip.) (This parameter does not work with AJAX mode.)
52
  * @param string $default Default Value that will be used if country cannot be detected (optional)
53
  * @param string $include_blank If this value contains 'true', a empty value will be prepended ('---', i.e. no country) (optional)
54
  * @param bool $flag If a flag should be added before the country name (In Windows, there are no flags, ISO-Country codes instead. This is a design choice by Windows.)
55
  * @param bool $tel If the international code should be added after the country name
56
  * @param bool $ajax 1: Execute this shortcode as AJAX | 0: Execute this shortcode on the server | Unset: Use the global settings (execute as AJAX if both 'AJAX' and 'Resolve shortcodes (via Ajax)' are enabled)
 
 
57
  *
58
  * @return string The generated HTML
59
  */
60
  function geoip_detect2_shortcode_country_select($attr) {
 
61
  $shortcode_options = _geoip_detect2_shortcode_options($attr);
62
 
63
- $select_attrs = array(
64
- 'name' => !empty($attr['name']) ? $attr['name'] : 'geoip-countries',
65
- 'id' => !empty($attr['id']) ? $attr['id'] : '',
66
- 'class' => !empty($attr['class']) ? $attr['class'] : 'geoip_detect2_countries',
67
- 'aria-required' => !empty($attr['required']) ? 'required' : '',
68
- 'aria-invalid' => !empty($attr['invalid']) ? $attr['invalid'] : '',
69
  'autocomplete' => 'off',
70
- );
71
 
72
  $selected = '';
73
  if (geoip_detect2_shortcode_is_ajax_mode($attr) && !isset($attr['selected']) ) {
74
  geoip_detect2_enqueue_javascript('shortcode');
75
  $select_attrs['class'] .= ' js-geoip-detect-country-select';
 
 
 
76
  $select_attrs['data-options'] = wp_json_encode($shortcode_options);
77
  } else {
78
  if (!empty($attr['selected'])) {
@@ -91,6 +97,30 @@ function geoip_detect2_shortcode_country_select($attr) {
91
 
92
  $countryInfo = new YellowTree\GeoipDetect\Geonames\CountryInformation();
93
  $countries = $countryInfo->getAllCountries($shortcode_options['lang']);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
94
 
95
  if (!empty($attr['flag'])) {
96
  array_walk($countries, function(&$value, $key) use($countryInfo) {
@@ -122,16 +152,18 @@ function geoip_detect2_shortcode_country_select($attr) {
122
  $countries = apply_filters('geoip_detect2_shortcode_country_select_countries', $countries, $attr);
123
 
124
  $html = '<select ' . _geoip_detect_flatten_html_attr($select_attrs) . '>';
125
- if (!empty($attr['include_blank']) && $attr['include_blank'] !== 'false')
126
  $html .= '<option value="">---</option>';
 
127
  foreach ($countries as $code => $label) {
128
- if (substr($code, 0, 6) == 'blank_')
 
129
  {
130
  $html .= '<option data-c="" value="">' . esc_html($label) . '</option>';
131
  }
132
  else
133
  {
134
- $html .= '<option data-c="' . esc_attr(mb_strtolower($code)). '"' . ($code == $selected ? ' selected="selected"' : '') . '>' . esc_html($label) . '</option>';
135
  }
136
  }
137
  $html .= '</select>';
48
  * @param bool $required If the field is required or not
49
  * @param string $class CSS Class of element
50
  * @param string $lang Language(s) (optional. If not set, current site language is used.)
51
+ * @param string $selected Which country to select by default (2-letter ISO code.) (optional. If not set, the country will be detected by client ip.) (This parameter does not work with AJAX mode.)
52
  * @param string $default Default Value that will be used if country cannot be detected (optional)
53
  * @param string $include_blank If this value contains 'true', a empty value will be prepended ('---', i.e. no country) (optional)
54
  * @param bool $flag If a flag should be added before the country name (In Windows, there are no flags, ISO-Country codes instead. This is a design choice by Windows.)
55
  * @param bool $tel If the international code should be added after the country name
56
  * @param bool $ajax 1: Execute this shortcode as AJAX | 0: Execute this shortcode on the server | Unset: Use the global settings (execute as AJAX if both 'AJAX' and 'Resolve shortcodes (via Ajax)' are enabled)
57
+ * @param bool $autosave 1: In Ajax mode, when the user changes the country, save his choice in his browser. (optional, Ajax mode only)
58
+ * @param string $list If used, only these countries will be shown. E.g. "it,de,uk" (optional)
59
  *
60
  * @return string The generated HTML
61
  */
62
  function geoip_detect2_shortcode_country_select($attr) {
63
+ $attr['property'] = 'country.name';
64
  $shortcode_options = _geoip_detect2_shortcode_options($attr);
65
 
66
+ $select_attrs = [
67
+ 'name' => !empty($attr['name']) ? $attr['name'] : 'geoip-countries',
68
+ 'id' => !empty($attr['id']) ? $attr['id'] : '',
69
+ 'class' => !empty($attr['class']) ? $attr['class'] : 'geoip_detect2_countries',
70
+ 'aria-required' => !empty($attr['required']) ? 'required' : '',
71
+ 'aria-invalid' => !empty($attr['invalid']) ? $attr['invalid'] : '',
72
  'autocomplete' => 'off',
73
+ ];
74
 
75
  $selected = '';
76
  if (geoip_detect2_shortcode_is_ajax_mode($attr) && !isset($attr['selected']) ) {
77
  geoip_detect2_enqueue_javascript('shortcode');
78
  $select_attrs['class'] .= ' js-geoip-detect-country-select';
79
+ if (!empty($attr['autosave'])) {
80
+ $select_attrs['class'] .= ' js-geoip-detect-input-autosave';
81
+ }
82
  $select_attrs['data-options'] = wp_json_encode($shortcode_options);
83
  } else {
84
  if (!empty($attr['selected'])) {
97
 
98
  $countryInfo = new YellowTree\GeoipDetect\Geonames\CountryInformation();
99
  $countries = $countryInfo->getAllCountries($shortcode_options['lang']);
100
+
101
+ if (!empty($attr['list'])) {
102
+ $list = wp_parse_list($attr['list']);
103
+
104
+ $allCountries = $countries;
105
+
106
+ $countries = [];
107
+ foreach($list as $key) {
108
+ if (str_starts_with($key,'blank_')) {
109
+ $countries[$key] = str_replace('_', ' ', mb_substr($key, 6));
110
+ } else {
111
+ $key = mb_strtoupper($key);
112
+ if (isset($allCountries[$key])) {
113
+ $countries[$key] = $allCountries[$key];
114
+ }
115
+ }
116
+ }
117
+
118
+ if ($selected && !isset($countries[$selected])) {
119
+ if (isset($attr['default'])) {
120
+ $selected = '';
121
+ }
122
+ }
123
+ }
124
 
125
  if (!empty($attr['flag'])) {
126
  array_walk($countries, function(&$value, $key) use($countryInfo) {
152
  $countries = apply_filters('geoip_detect2_shortcode_country_select_countries', $countries, $attr);
153
 
154
  $html = '<select ' . _geoip_detect_flatten_html_attr($select_attrs) . '>';
155
+ if (!empty($attr['include_blank']) && $attr['include_blank'] !== 'false') {
156
  $html .= '<option value="">---</option>';
157
+ }
158
  foreach ($countries as $code => $label) {
159
+ $code = mb_strtolower($code);
160
+ if (str_starts_with($code,'blank_'))
161
  {
162
  $html .= '<option data-c="" value="">' . esc_html($label) . '</option>';
163
  }
164
  else
165
  {
166
+ $html .= '<option data-c="' . esc_attr($code). '"' . ($code == mb_strtolower($selected) ? ' selected="selected"' : '') . '>' . esc_html($label) . '</option>';
167
  }
168
  }
169
  $html .= '</select>';
shortcodes/show_if.php CHANGED
@@ -64,6 +64,9 @@
64
  *
65
  * Show TEXT if the visitor is from Berlin, otherwise show OTHER (since 4.1.0)
66
  * `[geoip_detect2_show_if city="Berlin"]TEXT[else]OTHER[/geoip_detect2_show_if]`
 
 
 
67
  *
68
  * LIMITATIONS:
69
  * - You cannot nest several of these shortcodes within one another. Instead, seperate them into several blocks of shortcodes.
@@ -90,12 +93,11 @@ function geoip_detect2_shortcode_show_if($attr, $content = '', $shortcodeName =
90
 
91
  $shortcode_options['parsed'] = $parsed;
92
  $span_attributes = [ 'class' => 'js-geoip-detect-show-if', 'style' => 'display: none !important' ];
93
- $span_tagname = 'span'; // TODO: Should be 'div' under certain cirumstances, to test
94
 
95
- $span_if = _geoip_detect2_create_placeholder($span_tagname, $span_attributes, $shortcode_options, do_shortcode($content_if));
96
 
97
  $shortcode_options['parsed']['not'] = ($shortcode_options['parsed']['not'] === 1 ? 0 : 1); // negate
98
- $span_else = _geoip_detect2_create_placeholder($span_tagname, $span_attributes, $shortcode_options, do_shortcode($content_else));
99
 
100
  return $span_if . $span_else;
101
  } else {
@@ -153,7 +155,7 @@ function geoip_detect2_shortcode_parse_conditions_from_attributes(array $attr, b
153
 
154
 
155
  foreach ($attributeNames as $shortcodeParamName => $maxmindName) {
156
- if (!empty($attr[$shortcodeParamName])) {
157
  $condition = [
158
  'p' => $maxmindName,
159
  'v' => geoip_detect2_shortcode_prepare_values($attr[$shortcodeParamName]),
@@ -166,14 +168,14 @@ function geoip_detect2_shortcode_parse_conditions_from_attributes(array $attr, b
166
  }
167
 
168
  // Custom property
169
- if (!empty($attr['property'])) {
170
- if (!empty($attr['property_value'])) {
171
  $condition = [
172
  'p' => $attr['property'],
173
  'v' => geoip_detect2_shortcode_prepare_values($attr['property_value']),
174
  ];
175
  $conditions[] = $condition;
176
- } else if (!empty($attr['not_property_value'])) {
177
  $condition = [
178
  'p' => $attr['property'],
179
  'v' => geoip_detect2_shortcode_prepare_values($attr['not_property_value']),
@@ -191,6 +193,7 @@ function geoip_detect2_shortcode_parse_conditions_from_attributes(array $attr, b
191
  function geoip_detect2_shortcode_prepare_values(string $value) : string {
192
  // Parse User Input Values of Attribute
193
  $attributeValuesArray = explode(',', $value);
 
194
  $attributeValuesArray = array_map('trim', $attributeValuesArray);
195
  $attributeValuesArray = array_map('mb_strtolower', $attributeValuesArray);
196
 
@@ -230,7 +233,7 @@ function geoip_detect2_shortcode_evaluate_conditions(array $parsed, \GeoIp2\Mode
230
  } else {
231
  $values = [ $value ];
232
  }
233
-
234
  $subConditionMatching = geoip_detect2_shortcode_check_subcondition($condition['v'], $values);
235
 
236
  } catch (\Exception $e) {
@@ -270,9 +273,16 @@ function geoip_detect2_shortcode_check_subcondition(string $expectedValues, arra
270
  $actualValues = ['false', 'no', 'n', '0', ''];
271
  }
272
  }
273
-
274
  $expectedValues = explode(',', $expectedValues);
275
 
 
 
 
 
 
 
 
276
  // Compare case-insensitively
277
  $actualValues = array_map('mb_strtolower', $actualValues);
278
 
64
  *
65
  * Show TEXT if the visitor is from Berlin, otherwise show OTHER (since 4.1.0)
66
  * `[geoip_detect2_show_if city="Berlin"]TEXT[else]OTHER[/geoip_detect2_show_if]`
67
+ *
68
+ * Show NO COUNTRY if no country was detected (since 4.3.0)
69
+ * `[geoip_detect2_show_if country=""]NO COUNTRY[/geoip_detect2_show_if]`
70
  *
71
  * LIMITATIONS:
72
  * - You cannot nest several of these shortcodes within one another. Instead, seperate them into several blocks of shortcodes.
93
 
94
  $shortcode_options['parsed'] = $parsed;
95
  $span_attributes = [ 'class' => 'js-geoip-detect-show-if', 'style' => 'display: none !important' ];
 
96
 
97
+ $span_if = _geoip_detect2_create_placeholder('span', $span_attributes, $shortcode_options, do_shortcode($content_if));
98
 
99
  $shortcode_options['parsed']['not'] = ($shortcode_options['parsed']['not'] === 1 ? 0 : 1); // negate
100
+ $span_else = _geoip_detect2_create_placeholder('span', $span_attributes, $shortcode_options, do_shortcode($content_else));
101
 
102
  return $span_if . $span_else;
103
  } else {
155
 
156
 
157
  foreach ($attributeNames as $shortcodeParamName => $maxmindName) {
158
+ if (isset($attr[$shortcodeParamName])) {
159
  $condition = [
160
  'p' => $maxmindName,
161
  'v' => geoip_detect2_shortcode_prepare_values($attr[$shortcodeParamName]),
168
  }
169
 
170
  // Custom property
171
+ if (isset($attr['property'])) {
172
+ if (isset($attr['property_value'])) {
173
  $condition = [
174
  'p' => $attr['property'],
175
  'v' => geoip_detect2_shortcode_prepare_values($attr['property_value']),
176
  ];
177
  $conditions[] = $condition;
178
+ } else if (isset($attr['not_property_value'])) {
179
  $condition = [
180
  'p' => $attr['property'],
181
  'v' => geoip_detect2_shortcode_prepare_values($attr['not_property_value']),
193
  function geoip_detect2_shortcode_prepare_values(string $value) : string {
194
  // Parse User Input Values of Attribute
195
  $attributeValuesArray = explode(',', $value);
196
+
197
  $attributeValuesArray = array_map('trim', $attributeValuesArray);
198
  $attributeValuesArray = array_map('mb_strtolower', $attributeValuesArray);
199
 
233
  } else {
234
  $values = [ $value ];
235
  }
236
+
237
  $subConditionMatching = geoip_detect2_shortcode_check_subcondition($condition['v'], $values);
238
 
239
  } catch (\Exception $e) {
273
  $actualValues = ['false', 'no', 'n', '0', ''];
274
  }
275
  }
276
+
277
  $expectedValues = explode(',', $expectedValues);
278
 
279
+ if (in_array("", $expectedValues)) {
280
+ // Value is not defined in record?
281
+ if (count($actualValues) === 0) {
282
+ return true;
283
+ }
284
+ }
285
+
286
  // Compare case-insensitively
287
  $actualValues = array_map('mb_strtolower', $actualValues);
288
 
vendor/composer/ca-bundle/composer.json CHANGED
@@ -30,7 +30,7 @@
30
  "symfony/phpunit-bridge": "^4.2 || ^5",
31
  "phpstan/phpstan": "^0.12.55",
32
  "psr/log": "^1.0",
33
- "symfony/process": "^2.5 || ^3.0 || ^4.0 || ^5.0"
34
  },
35
  "autoload": {
36
  "psr-4": {
30
  "symfony/phpunit-bridge": "^4.2 || ^5",
31
  "phpstan/phpstan": "^0.12.55",
32
  "psr/log": "^1.0",
33
+ "symfony/process": "^2.5 || ^3.0 || ^4.0 || ^5.0 || ^6.0"
34
  },
35
  "autoload": {
36
  "psr-4": {
vendor/composer/ca-bundle/res/cacert.pem CHANGED
@@ -1,7 +1,7 @@
1
  ##
2
  ## Bundle of CA Root Certificates
3
  ##
4
- ## Certificate data from Mozilla as of: Tue Dec 8 04:12:05 2020 GMT
5
  ##
6
  ## This is a bundle of X.509 certificates of public Certificate Authorities
7
  ## (CA). These were automatically extracted from Mozilla's root certificates
@@ -14,7 +14,7 @@
14
  ## Just configure this file as the SSLCACertificateFile.
15
  ##
16
  ## Conversion done with mk-ca-bundle.pl version 1.28.
17
- ## SHA256: d820b8696d8ffe42064a1384a56a8981cdc7e7e198036bbb5fa04a6c282dd9a2
18
  ##
19
 
20
 
@@ -132,87 +132,6 @@ W3iDVuycNsMm4hH2Z0kdkquM++v/eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0
132
  tHuu2guQOHXvgR1m0vdXcDazv/wor3ElhVsT/h5/WrQ8
133
  -----END CERTIFICATE-----
134
 
135
- GeoTrust Global CA
136
- ==================
137
- -----BEGIN CERTIFICATE-----
138
- MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVTMRYwFAYDVQQK
139
- Ew1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9iYWwgQ0EwHhcNMDIwNTIxMDQw
140
- MDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5j
141
- LjEbMBkGA1UEAxMSR2VvVHJ1c3QgR2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
142
- CgKCAQEA2swYYzD99BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9mOSm9BXiLnTjo
143
- BbdqfnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIuT8rxh0PBFpVXLVDviS2Aelet
144
- 8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6cJmTM386DGXHKTubU1XupGc1V3sjs0l44U+Vc
145
- T4wt/lAjNvxm5suOpDkZALeVAjmRCw7+OC7RHQWa9k0+bw8HHa8sHo9gOeL6NlMTOdReJivbPagU
146
- vTLrGAMoUgRx5aszPeE4uwc2hGKceeoWMPRfwCvocWvk+QIDAQABo1MwUTAPBgNVHRMBAf8EBTAD
147
- AQH/MB0GA1UdDgQWBBTAephojYn7qwVkDBF9qn1luMrMTjAfBgNVHSMEGDAWgBTAephojYn7qwVk
148
- DBF9qn1luMrMTjANBgkqhkiG9w0BAQUFAAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCpilKInZ57Q
149
- zxpeR+nBsqTP3UEaBU6bS+5Kb1VSsyShNwrrZHYqLizz/Tt1kL/6cdjHPTfStQWVYrmm3ok9Nns4
150
- d0iXrKYgjy6myQzCsplFAMfOEVEiIuCl6rYVSAlk6l5PdPcFPseKUgzbFbS9bZvlxrFUaKnjaZC2
151
- mqUPuLk/IH2uSrW4nOQdtqvmlKXBx4Ot2/Unhw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6p
152
- XE0zX5IJL4hmXXeXxx12E6nV5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvm
153
- Mw==
154
- -----END CERTIFICATE-----
155
-
156
- GeoTrust Universal CA
157
- =====================
158
- -----BEGIN CERTIFICATE-----
159
- MIIFaDCCA1CgAwIBAgIBATANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN
160
- R2VvVHJ1c3QgSW5jLjEeMBwGA1UEAxMVR2VvVHJ1c3QgVW5pdmVyc2FsIENBMB4XDTA0MDMwNDA1
161
- MDAwMFoXDTI5MDMwNDA1MDAwMFowRTELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IElu
162
- Yy4xHjAcBgNVBAMTFUdlb1RydXN0IFVuaXZlcnNhbCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIP
163
- ADCCAgoCggIBAKYVVaCjxuAfjJ0hUNfBvitbtaSeodlyWL0AG0y/YckUHUWCq8YdgNY96xCcOq9t
164
- JPi8cQGeBvV8Xx7BDlXKg5pZMK4ZyzBIle0iN430SppyZj6tlcDgFgDgEB8rMQ7XlFTTQjOgNB0e
165
- RXbdT8oYN+yFFXoZCPzVx5zw8qkuEKmS5j1YPakWaDwvdSEYfyh3peFhF7em6fgemdtzbvQKoiFs
166
- 7tqqhZJmr/Z6a4LauiIINQ/PQvE1+mrufislzDoR5G2vc7J2Ha3QsnhnGqQ5HFELZ1aD/ThdDc7d
167
- 8Lsrlh/eezJS/R27tQahsiFepdaVaH/wmZ7cRQg+59IJDTWU3YBOU5fXtQlEIGQWFwMCTFMNaN7V
168
- qnJNk22CDtucvc+081xdVHppCZbW2xHBjXWotM85yM48vCR85mLK4b19p71XZQvk/iXttmkQ3Cga
169
- Rr0BHdCXteGYO8A3ZNY9lO4L4fUorgtWv3GLIylBjobFS1J72HGrH4oVpjuDWtdYAVHGTEHZf9hB
170
- Z3KiKN9gg6meyHv8U3NyWfWTehd2Ds735VzZC1U0oqpbtWpU5xPKV+yXbfReBi9Fi1jUIxaS5BZu
171
- KGNZMN9QAZxjiRqf2xeUgnA3wySemkfWWspOqGmJch+RbNt+nhutxx9z3SxPGWX9f5NAEC7S8O08
172
- ni4oPmkmM8V7AgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNq7LqqwDLiIJlF0
173
- XG0D08DYj3rWMB8GA1UdIwQYMBaAFNq7LqqwDLiIJlF0XG0D08DYj3rWMA4GA1UdDwEB/wQEAwIB
174
- hjANBgkqhkiG9w0BAQUFAAOCAgEAMXjmx7XfuJRAyXHEqDXsRh3ChfMoWIawC/yOsjmPRFWrZIRc
175
- aanQmjg8+uUfNeVE44B5lGiku8SfPeE0zTBGi1QrlaXv9z+ZhP015s8xxtxqv6fXIwjhmF7DWgh2
176
- qaavdy+3YL1ERmrvl/9zlcGO6JP7/TG37FcREUWbMPEaiDnBTzynANXH/KttgCJwpQzgXQQpAvvL
177
- oJHRfNbDflDVnVi+QTjruXU8FdmbyUqDWcDaU/0zuzYYm4UPFd3uLax2k7nZAY1IEKj79TiG8dsK
178
- xr2EoyNB3tZ3b4XUhRxQ4K5RirqNPnbiucon8l+f725ZDQbYKxek0nxru18UGkiPGkzns0ccjkxF
179
- KyDuSN/n3QmOGKjaQI2SJhFTYXNd673nxE0pN2HrrDktZy4W1vUAg4WhzH92xH3kt0tm7wNFYGm2
180
- DFKWkoRepqO1pD4r2czYG0eq8kTaT/kD6PAUyz/zg97QwVTjt+gKN02LIFkDMBmhLMi9ER/frslK
181
- xfMnZmaGrGiR/9nmUxwPi1xpZQomyB40w11Re9epnAahNt3ViZS82eQtDF4JbAiXfKM9fJP/P6EU
182
- p8+1Xevb2xzEdt+Iub1FBZUbrvxGakyvSOPOrg/SfuvmbJxPgWp6ZKy7PtXny3YuxadIwVyQD8vI
183
- P/rmMuGNG2+k5o7Y+SlIis5z/iw=
184
- -----END CERTIFICATE-----
185
-
186
- GeoTrust Universal CA 2
187
- =======================
188
- -----BEGIN CERTIFICATE-----
189
- MIIFbDCCA1SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBHMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN
190
- R2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVyc2FsIENBIDIwHhcNMDQwMzA0
191
- MDUwMDAwWhcNMjkwMzA0MDUwMDAwWjBHMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3Qg
192
- SW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVyc2FsIENBIDIwggIiMA0GCSqGSIb3DQEBAQUA
193
- A4ICDwAwggIKAoICAQCzVFLByT7y2dyxUxpZKeexw0Uo5dfR7cXFS6GqdHtXr0om/Nj1XqduGdt0
194
- DE81WzILAePb63p3NeqqWuDW6KFXlPCQo3RWlEQwAx5cTiuFJnSCegx2oG9NzkEtoBUGFF+3Qs17
195
- j1hhNNwqCPkuwwGmIkQcTAeC5lvO0Ep8BNMZcyfwqph/Lq9O64ceJHdqXbboW0W63MOhBW9Wjo8Q
196
- JqVJwy7XQYci4E+GymC16qFjwAGXEHm9ADwSbSsVsaxLse4YuU6W3Nx2/zu+z18DwPw76L5GG//a
197
- QMJS9/7jOvdqdzXQ2o3rXhhqMcceujwbKNZrVMaqW9eiLBsZzKIC9ptZvTdrhrVtgrrY6slWvKk2
198
- WP0+GfPtDCapkzj4T8FdIgbQl+rhrcZV4IErKIM6+vR7IVEAvlI4zs1meaj0gVbi0IMJR1FbUGrP
199
- 20gaXT73y/Zl92zxlfgCOzJWgjl6W70viRu/obTo/3+NjN8D8WBOWBFM66M/ECuDmgFz2ZRthAAn
200
- ZqzwcEAJQpKtT5MNYQlRJNiS1QuUYbKHsu3/mjX/hVTK7URDrBs8FmtISgocQIgfksILAAX/8sgC
201
- SqSqqcyZlpwvWOB94b67B9xfBHJcMTTD7F8t4D1kkCLm0ey4Lt1ZrtmhN79UNdxzMk+MBB4zsslG
202
- 8dhcyFVQyWi9qLo2CQIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBR281Xh+qQ2
203
- +/CfXGJx7Tz0RzgQKzAfBgNVHSMEGDAWgBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAOBgNVHQ8BAf8E
204
- BAMCAYYwDQYJKoZIhvcNAQEFBQADggIBAGbBxiPz2eAubl/oz66wsCVNK/g7WJtAJDday6sWSf+z
205
- dXkzoS9tcBc0kf5nfo/sm+VegqlVHy/c1FEHEv6sFj4sNcZj/NwQ6w2jqtB8zNHQL1EuxBRa3ugZ
206
- 4T7GzKQp5y6EqgYweHZUcyiYWTjgAA1i00J9IZ+uPTqM1fp3DRgrFg5fNuH8KrUwJM/gYwx7WBr+
207
- mbpCErGR9Hxo4sjoryzqyX6uuyo9DRXcNJW2GHSoag/HtPQTxORb7QrSpJdMKu0vbBKJPfEncKpq
208
- A1Ihn0CoZ1Dy81of398j9tx4TuaYT1U6U+Pv8vSfx3zYWK8pIpe44L2RLrB27FcRz+8pRPPphXpg
209
- Y+RdM4kX2TGq2tbzGDVyz4crL2MjhF2EjD9XoIj8mZEoJmmZ1I+XRL6O1UixpCgp8RW04eWe3fiP
210
- pm8m1wk8OhwRDqZsN/etRIcsKMfYdIKz0G9KV7s1KSegi+ghp4dkNl3M2Basx7InQJJVOCiNUW7d
211
- FGdTbHFcJoRNdVq2fmBWqU2t+5sel/MN2dKXVHfaPRK34B7vCAas+YWH6aLcr34YEoP9VhdBLtUp
212
- gn2Z9DH2canPLAEnpQW5qrJITirvn5NSUZU8UnOOVkwXQMAJKOSLakhT2+zNVVXxxvjpoixMptEm
213
- X36vWkzaH6byHCx+rgIW0lbQL1dTR+iS
214
- -----END CERTIFICATE-----
215
-
216
  Comodo AAA Services root
217
  ========================
218
  -----BEGIN CERTIFICATE-----
@@ -237,38 +156,6 @@ Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2G9w84FoVxp7Z
237
  12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg==
238
  -----END CERTIFICATE-----
239
 
240
- QuoVadis Root CA
241
- ================
242
- -----BEGIN CERTIFICATE-----
243
- MIIF0DCCBLigAwIBAgIEOrZQizANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJCTTEZMBcGA1UE
244
- ChMQUXVvVmFkaXMgTGltaXRlZDElMCMGA1UECxMcUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0
245
- eTEuMCwGA1UEAxMlUXVvVmFkaXMgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMTAz
246
- MTkxODMzMzNaFw0yMTAzMTcxODMzMzNaMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRp
247
- cyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYDVQQD
248
- EyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEF
249
- AAOCAQ8AMIIBCgKCAQEAv2G1lVO6V/z68mcLOhrfEYBklbTRvM16z/Ypli4kVEAkOPcahdxYTMuk
250
- J0KX0J+DisPkBgNbAKVRHnAEdOLB1Dqr1607BxgFjv2DrOpm2RgbaIr1VxqYuvXtdj182d6UajtL
251
- F8HVj71lODqV0D1VNk7feVcxKh7YWWVJWCCYfqtffp/p1k3sg3Spx2zY7ilKhSoGFPlU5tPaZQeL
252
- YzcS19Dsw3sgQUSj7cugF+FxZc4dZjH3dgEZyH0DWLaVSR2mEiboxgx24ONmy+pdpibu5cxfvWen
253
- AScOospUxbF6lR1xHkopigPcakXBpBlebzbNw6Kwt/5cOOJSvPhEQ+aQuwIDAQABo4ICUjCCAk4w
254
- PQYIKwYBBQUHAQEEMTAvMC0GCCsGAQUFBzABhiFodHRwczovL29jc3AucXVvdmFkaXNvZmZzaG9y
255
- ZS5jb20wDwYDVR0TAQH/BAUwAwEB/zCCARoGA1UdIASCAREwggENMIIBCQYJKwYBBAG+WAABMIH7
256
- MIHUBggrBgEFBQcCAjCBxxqBxFJlbGlhbmNlIG9uIHRoZSBRdW9WYWRpcyBSb290IENlcnRpZmlj
257
- YXRlIGJ5IGFueSBwYXJ0eSBhc3N1bWVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJs
258
- ZSBzdGFuZGFyZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGNlcnRpZmljYXRpb24gcHJh
259
- Y3RpY2VzLCBhbmQgdGhlIFF1b1ZhZGlzIENlcnRpZmljYXRlIFBvbGljeS4wIgYIKwYBBQUHAgEW
260
- Fmh0dHA6Ly93d3cucXVvdmFkaXMuYm0wHQYDVR0OBBYEFItLbe3TKbkGGew5Oanwl4Rqy+/fMIGu
261
- BgNVHSMEgaYwgaOAFItLbe3TKbkGGew5Oanwl4Rqy+/foYGEpIGBMH8xCzAJBgNVBAYTAkJNMRkw
262
- FwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0
263
- aG9yaXR5MS4wLAYDVQQDEyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggQ6
264
- tlCLMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAitQUtf70mpKnGdSkfnIYj9lo
265
- fFIk3WdvOXrEql494liwTXCYhGHoG+NpGA7O+0dQoE7/8CQfvbLO9Sf87C9TqnN7Az10buYWnuul
266
- LsS/VidQK2K6vkscPFVcQR0kvoIgR13VRH56FmjffU1RcHhXHTMe/QKZnAzNCgVPx7uOpHX6Sm2x
267
- gI4JVrmcGmD+XcHXetwReNDWXcG31a0ymQM6isxUJTkxgXsTIlG6Rmyhu576BGxJJnSP0nPrzDCi
268
- 5upZIof4l/UO/erMkqQWxFIY6iHOsfHmhIHluqmGKPJDWl0Snawe2ajlCmqnf6CHKc/yiU3U7MXi
269
- 5nrQNiOKSnQ2+Q==
270
- -----END CERTIFICATE-----
271
-
272
  QuoVadis Root CA 2
273
  ==================
274
  -----BEGIN CERTIFICATE-----
@@ -356,26 +243,6 @@ s58+OmJYxUmtYg5xpTKqL8aJdkNAExNnPaJUJRDL8Try2frbSVa7pv6nQTXD4IhhyYjH3zYQIphZ
356
  FL39vmwLAw==
357
  -----END CERTIFICATE-----
358
 
359
- Sonera Class 2 Root CA
360
- ======================
361
- -----BEGIN CERTIFICATE-----
362
- MIIDIDCCAgigAwIBAgIBHTANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEPMA0GA1UEChMG
363
- U29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MyIENBMB4XDTAxMDQwNjA3Mjk0MFoXDTIxMDQw
364
- NjA3Mjk0MFowOTELMAkGA1UEBhMCRkkxDzANBgNVBAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJh
365
- IENsYXNzMiBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJAXSjWdyvANlsdE+hY3
366
- /Ei9vX+ALTU74W+oZ6m/AxxNjG8yR9VBaKQTBME1DJqEQ/xcHf+Js+gXGM2RX/uJ4+q/Tl18GybT
367
- dXnt5oTjV+WtKcT0OijnpXuENmmz/V52vaMtmdOQTiMofRhj8VQ7Jp12W5dCsv+u8E7s3TmVToMG
368
- f+dJQMjFAbJUWmYdPfz56TwKnoG4cPABi+QjVHzIrviQHgCWctRUz2EjvOr7nQKV0ba5cTppCD8P
369
- tOFCx4j1P5iop7oc4HFx71hXgVB6XGt0Rg6DA5jDjqhu8nYybieDwnPz3BjotJPqdURrBGAgcVeH
370
- nfO+oJAjPYok4doh28MCAwEAAaMzMDEwDwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQISqCqWITT
371
- XjwwCwYDVR0PBAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQBazof5FnIVV0sd2ZvnoiYw7JNn39Yt
372
- 0jSv9zilzqsWuasvfDXLrNAPtEwr/IDva4yRXzZ299uzGxnq9LIR/WFxRL8oszodv7ND6J+/3DEI
373
- cbCdjdY0RzKQxmUk96BKfARzjzlvF4xytb1LyHr4e4PDKE6cCepnP7JnBBvDFNr450kkkdAdavph
374
- Oe9r5yF1BgfYErQhIHBCcYHaPJo2vqZbDWpsmh+Re/n570K6Tk6ezAyNlNzZRZxe7EJQY670XcSx
375
- EtzKO6gunRRaBXW37Ndj4ro1tgQIkejanZz2ZrUYrAqmVCY0M9IbwdR/GjqOC6oybtv8TyWf2TLH
376
- llpwrN9M
377
- -----END CERTIFICATE-----
378
-
379
  XRamp Global CA Root
380
  ====================
381
  -----BEGIN CERTIFICATE-----
@@ -514,26 +381,6 @@ mNEVX58Svnw2Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe
514
  vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep+OkuE6N36B9K
515
  -----END CERTIFICATE-----
516
 
517
- DST Root CA X3
518
- ==============
519
- -----BEGIN CERTIFICATE-----
520
- MIIDSjCCAjKgAwIBAgIQRK+wgNajJ7qJMDmGLvhAazANBgkqhkiG9w0BAQUFADA/MSQwIgYDVQQK
521
- ExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMTDkRTVCBSb290IENBIFgzMB4X
522
- DTAwMDkzMDIxMTIxOVoXDTIxMDkzMDE0MDExNVowPzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1
523
- cmUgVHJ1c3QgQ28uMRcwFQYDVQQDEw5EU1QgUm9vdCBDQSBYMzCCASIwDQYJKoZIhvcNAQEBBQAD
524
- ggEPADCCAQoCggEBAN+v6ZdQCINXtMxiZfaQguzH0yxrMMpb7NnDfcdAwRgUi+DoM3ZJKuM/IUmT
525
- rE4Orz5Iy2Xu/NMhD2XSKtkyj4zl93ewEnu1lcCJo6m67XMuegwGMoOifooUMM0RoOEqOLl5CjH9
526
- UL2AZd+3UWODyOKIYepLYYHsUmu5ouJLGiifSKOeDNoJjj4XLh7dIN9bxiqKqy69cK3FCxolkHRy
527
- xXtqqzTWMIn/5WgTe1QLyNau7Fqckh49ZLOMxt+/yUFw7BZy1SbsOFU5Q9D8/RhcQPGX69Wam40d
528
- utolucbY38EVAjqr2m7xPi71XAicPNaDaeQQmxkqtilX4+U9m5/wAl0CAwEAAaNCMEAwDwYDVR0T
529
- AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMSnsaR7LHH62+FLkHX/xBVghYkQ
530
- MA0GCSqGSIb3DQEBBQUAA4IBAQCjGiybFwBcqR7uKGY3Or+Dxz9LwwmglSBd49lZRNI+DT69ikug
531
- dB/OEIKcdBodfpga3csTS7MgROSR6cz8faXbauX+5v3gTt23ADq1cEmv8uXrAvHRAosZy5Q6XkjE
532
- GB5YGV8eAlrwDPGxrancWYaLbumR9YbK+rlmM6pZW87ipxZzR8srzJmwN0jP41ZL9c8PDHIyh8bw
533
- RLtTcm1D9SZImlJnt1ir/md2cXjbDaJWFBM5JDGFoqgCWjBH4d1QB7wCCZAA62RjYJsWvIjJEubS
534
- fZGL+T0yjWW06XyxV3bqxbYoOb8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ
535
- -----END CERTIFICATE-----
536
-
537
  SwissSign Gold CA - G2
538
  ======================
539
  -----BEGIN CERTIFICATE-----
@@ -596,78 +443,6 @@ DIm6uNO5wJOKMPqN5ZprFQFOZ6raYlY+hAhm0sQ2fac+EPyI4NSA5QC9qvNOBqN6avlicuMJT+ub
596
  DgEj8Z+7fNzcbBGXJbLytGMU0gYqZ4yD9c7qB9iaah7s5Aq7KkzrCWA5zspi2C5u
597
  -----END CERTIFICATE-----
598
 
599
- GeoTrust Primary Certification Authority
600
- ========================================
601
- -----BEGIN CERTIFICATE-----
602
- MIIDfDCCAmSgAwIBAgIQGKy1av1pthU6Y2yv2vrEoTANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQG
603
- EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjExMC8GA1UEAxMoR2VvVHJ1c3QgUHJpbWFyeSBD
604
- ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjExMjcwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMFgx
605
- CzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTEwLwYDVQQDEyhHZW9UcnVzdCBQ
606
- cmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
607
- CgKCAQEAvrgVe//UfH1nrYNke8hCUy3f9oQIIGHWAVlqnEQRr+92/ZV+zmEwu3qDXwK9AWbK7hWN
608
- b6EwnL2hhZ6UOvNWiAAxz9juapYC2e0DjPt1befquFUWBRaa9OBesYjAZIVcFU2Ix7e64HXprQU9
609
- nceJSOC7KMgD4TCTZF5SwFlwIjVXiIrxlQqD17wxcwE07e9GceBrAqg1cmuXm2bgyxx5X9gaBGge
610
- RwLmnWDiNpcB3841kt++Z8dtd1k7j53WkBWUvEI0EME5+bEnPn7WinXFsq+W06Lem+SYvn3h6YGt
611
- tm/81w7a4DSwDRp35+MImO9Y+pyEtzavwt+s0vQQBnBxNQIDAQABo0IwQDAPBgNVHRMBAf8EBTAD
612
- AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQULNVQQZcVi/CPNmFbSvtr2ZnJM5IwDQYJKoZI
613
- hvcNAQEFBQADggEBAFpwfyzdtzRP9YZRqSa+S7iq8XEN3GHHoOo0Hnp3DwQ16CePbJC/kRYkRj5K
614
- Ts4rFtULUh38H2eiAkUxT87z+gOneZ1TatnaYzr4gNfTmeGl4b7UVXGYNTq+k+qurUKykG/g/CFN
615
- NWMziUnWm07Kx+dOCQD32sfvmWKZd7aVIl6KoKv0uHiYyjgZmclynnjNS6yvGaBzEi38wkG6gZHa
616
- Floxt/m0cYASSJlyc1pZU8FjUjPtp8nSOQJw+uCxQmYpqptR7TBUIhRf2asdweSU8Pj1K/fqynhG
617
- 1riR/aYNKxoUAT6A8EKglQdebc3MS6RFjasS6LPeWuWgfOgPIh1a6Vk=
618
- -----END CERTIFICATE-----
619
-
620
- thawte Primary Root CA
621
- ======================
622
- -----BEGIN CERTIFICATE-----
623
- MIIEIDCCAwigAwIBAgIQNE7VVyDV7exJ9C/ON9srbTANBgkqhkiG9w0BAQUFADCBqTELMAkGA1UE
624
- BhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2
625
- aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhv
626
- cml6ZWQgdXNlIG9ubHkxHzAdBgNVBAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwHhcNMDYxMTE3
627
- MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCBqTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwg
628
- SW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMv
629
- KGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNVBAMT
630
- FnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCs
631
- oPD7gFnUnMekz52hWXMJEEUMDSxuaPFsW0hoSVk3/AszGcJ3f8wQLZU0HObrTQmnHNK4yZc2AreJ
632
- 1CRfBsDMRJSUjQJib+ta3RGNKJpchJAQeg29dGYvajig4tVUROsdB58Hum/u6f1OCyn1PoSgAfGc
633
- q/gcfomk6KHYcWUNo1F77rzSImANuVud37r8UVsLr5iy6S7pBOhih94ryNdOwUxkHt3Ph1i6Sk/K
634
- aAcdHJ1KxtUvkcx8cXIcxcBn6zL9yZJclNqFwJu/U30rCfSMnZEfl2pSy94JNqR32HuHUETVPm4p
635
- afs5SSYeCaWAe0At6+gnhcn+Yf1+5nyXHdWdAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYD
636
- VR0PAQH/BAQDAgEGMB0GA1UdDgQWBBR7W0XPr87Lev0xkhpqtvNG61dIUDANBgkqhkiG9w0BAQUF
637
- AAOCAQEAeRHAS7ORtvzw6WfUDW5FvlXok9LOAz/t2iWwHVfLHjp2oEzsUHboZHIMpKnxuIvW1oeE
638
- uzLlQRHAd9mzYJ3rG9XRbkREqaYB7FViHXe4XI5ISXycO1cRrK1zN44veFyQaEfZYGDm/Ac9IiAX
639
- xPcW6cTYcvnIc3zfFi8VqT79aie2oetaupgf1eNNZAqdE8hhuvU5HIe6uL17In/2/qxAeeWsEG89
640
- jxt5dovEN7MhGITlNgDrYyCZuen+MwS7QcjBAvlEYyCegc5C09Y/LHbTY5xZ3Y+m4Q6gLkH3LpVH
641
- z7z9M/P2C2F+fpErgUfCJzDupxBdN49cOSvkBPB7jVaMaA==
642
- -----END CERTIFICATE-----
643
-
644
- VeriSign Class 3 Public Primary Certification Authority - G5
645
- ============================================================
646
- -----BEGIN CERTIFICATE-----
647
- MIIE0zCCA7ugAwIBAgIQGNrRniZ96LtKIVjNzGs7SjANBgkqhkiG9w0BAQUFADCByjELMAkGA1UE
648
- BhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBO
649
- ZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVk
650
- IHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRp
651
- ZmljYXRpb24gQXV0aG9yaXR5IC0gRzUwHhcNMDYxMTA4MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCB
652
- yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2ln
653
- biBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2lnbiwgSW5jLiAtIEZvciBh
654
- dXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmlt
655
- YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
656
- ggEKAoIBAQCvJAgIKXo1nmAMqudLO07cfLw8RRy7K+D+KQL5VwijZIUVJ/XxrcgxiV0i6CqqpkKz
657
- j/i5Vbext0uz/o9+B1fs70PbZmIVYc9gDaTY3vjgw2IIPVQT60nKWVSFJuUrjxuf6/WhkcIzSdhD
658
- Y2pSS9KP6HBRTdGJaXvHcPaz3BJ023tdS1bTlr8Vd6Gw9KIl8q8ckmcY5fQGBO+QueQA5N06tRn/
659
- Arr0PO7gi+s3i+z016zy9vA9r911kTMZHRxAy3QkGSGT2RT+rCpSx4/VBEnkjWNHiDxpg8v+R70r
660
- fk/Fla4OndTRQ8Bnc+MUCH7lP59zuDMKz10/NIeWiu5T6CUVAgMBAAGjgbIwga8wDwYDVR0TAQH/
661
- BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2Uv
662
- Z2lmMCEwHzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVy
663
- aXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFH/TZafC3ey78DAJ80M5+gKvMzEzMA0GCSqG
664
- SIb3DQEBBQUAA4IBAQCTJEowX2LP2BqYLz3q3JktvXf2pXkiOOzEp6B4Eq1iDkVwZMXnl2YtmAl+
665
- X6/WzChl8gGqCBpH3vn5fJJaCGkgDdk+bW48DW7Y5gaRQBi5+MHt39tBquCWIMnNZBU4gcmU7qKE
666
- KQsTb47bDN0lAtukixlE0kF6BWlKWE9gyn6CagsCqiUXObXbf+eEZSqVir2G3l6BFoMtEMze/aiC
667
- Km0oHw0LxOXnGiYZ4fQRbxC1lfznQgUy286dUV4otp6F01vvpX1FQHKOtw5rDgb7MzVIcbidJ4vE
668
- ZV8NhnacRHr2lVz2XTIIM6RUthg/aFzyQkqFOFSDX9HoLPKsEdao7WNq
669
- -----END CERTIFICATE-----
670
-
671
  SecureTrust CA
672
  ==============
673
  -----BEGIN CERTIFICATE-----
@@ -871,136 +646,6 @@ vBTjD4au8as+x6AJzKNI0eDbZOeStc+vckNwi/nDhDwTqn6Sm1dTk/pwwpEOMfmbZ13pljheX7Nz
871
  TogVZ96edhBiIL5VaZVDADlN9u6wWk5JRFRYX0KD
872
  -----END CERTIFICATE-----
873
 
874
- GeoTrust Primary Certification Authority - G3
875
- =============================================
876
- -----BEGIN CERTIFICATE-----
877
- MIID/jCCAuagAwIBAgIQFaxulBmyeUtB9iepwxgPHzANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UE
878
- BhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChjKSAyMDA4IEdlb1RydXN0
879
- IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFy
880
- eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEczMB4XDTA4MDQwMjAwMDAwMFoXDTM3MTIwMTIz
881
- NTk1OVowgZgxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAo
882
- YykgMjAwOCBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNVBAMT
883
- LUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZI
884
- hvcNAQEBBQADggEPADCCAQoCggEBANziXmJYHTNXOTIz+uvLh4yn1ErdBojqZI4xmKU4kB6Yzy5j
885
- K/BGvESyiaHAKAxJcCGVn2TAppMSAmUmhsalifD614SgcK9PGpc/BkTVyetyEH3kMSj7HGHmKAdE
886
- c5IiaacDiGydY8hS2pgn5whMcD60yRLBxWeDXTPzAxHsatBT4tG6NmCUgLthY2xbF37fQJQeqw3C
887
- IShwiP/WJmxsYAQlTlV+fe+/lEjetx3dcI0FX4ilm/LC7urRQEFtYjgdVgbFA0dRIBn8exALDmKu
888
- dlW/X3e+PkkBUz2YJQN2JFodtNuJ6nnltrM7P7pMKEF/BqxqjsHQ9gUdfeZChuOl1UcCAwEAAaNC
889
- MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMR5yo6hTgMdHNxr
890
- 2zFblD4/MH8tMA0GCSqGSIb3DQEBCwUAA4IBAQAtxRPPVoB7eni9n64smefv2t+UXglpp+duaIy9
891
- cr5HqQ6XErhK8WTTOd8lNNTBzU6B8A8ExCSzNJbGpqow32hhc9f5joWJ7w5elShKKiePEI4ufIbE
892
- Ap7aDHdlDkQNkv39sxY2+hENHYwOB4lqKVb3cvTdFZx3NWZXqxNT2I7BQMXXExZacse3aQHEerGD
893
- AWh9jUGhlBjBJVz88P6DAod8DQ3PLghcSkANPuyBYeYk28rgDi0Hsj5W3I31QYUHSJsMC8tJP33s
894
- t/3LjWeJGqvtux6jAAgIFyqCXDFdRootD4abdNlF+9RAsXqqaC2Gspki4cErx5z481+oghLrGREt
895
- -----END CERTIFICATE-----
896
-
897
- thawte Primary Root CA - G2
898
- ===========================
899
- -----BEGIN CERTIFICATE-----
900
- MIICiDCCAg2gAwIBAgIQNfwmXNmET8k9Jj1Xm67XVjAKBggqhkjOPQQDAzCBhDELMAkGA1UEBhMC
901
- VVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjE4MDYGA1UECxMvKGMpIDIwMDcgdGhhd3RlLCBJbmMu
902
- IC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAiBgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3Qg
903
- Q0EgLSBHMjAeFw0wNzExMDUwMDAwMDBaFw0zODAxMTgyMzU5NTlaMIGEMQswCQYDVQQGEwJVUzEV
904
- MBMGA1UEChMMdGhhd3RlLCBJbmMuMTgwNgYDVQQLEy8oYykgMjAwNyB0aGF3dGUsIEluYy4gLSBG
905
- b3IgYXV0aG9yaXplZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAt
906
- IEcyMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEotWcgnuVnfFSeIf+iha/BebfowJPDQfGAFG6DAJS
907
- LSKkQjnE/o/qycG+1E3/n3qe4rF8mq2nhglzh9HnmuN6papu+7qzcMBniKI11KOasf2twu8x+qi5
908
- 8/sIxpHR+ymVo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQU
909
- mtgAMADna3+FGO6Lts6KDPgR4bswCgYIKoZIzj0EAwMDaQAwZgIxAN344FdHW6fmCsO99YCKlzUN
910
- G4k8VIZ3KMqh9HneteY4sPBlcIx/AlTCv//YoT7ZzwIxAMSNlPzcU9LcnXgWHxUzI1NS41oxXZ3K
911
- rr0TKUQNJ1uo52icEvdYPy5yAlejj6EULg==
912
- -----END CERTIFICATE-----
913
-
914
- thawte Primary Root CA - G3
915
- ===========================
916
- -----BEGIN CERTIFICATE-----
917
- MIIEKjCCAxKgAwIBAgIQYAGXt0an6rS0mtZLL/eQ+zANBgkqhkiG9w0BAQsFADCBrjELMAkGA1UE
918
- BhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2
919
- aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIwMDggdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhv
920
- cml6ZWQgdXNlIG9ubHkxJDAiBgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMzAeFw0w
921
- ODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIGuMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhh
922
- d3RlLCBJbmMuMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9uIFNlcnZpY2VzIERpdmlzaW9uMTgwNgYD
923
- VQQLEy8oYykgMjAwOCB0aGF3dGUsIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTEkMCIG
924
- A1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAtIEczMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
925
- MIIBCgKCAQEAsr8nLPvb2FvdeHsbnndmgcs+vHyu86YnmjSjaDFxODNi5PNxZnmxqWWjpYvVj2At
926
- P0LMqmsywCPLLEHd5N/8YZzic7IilRFDGF/Eth9XbAoFWCLINkw6fKXRz4aviKdEAhN0cXMKQlkC
927
- +BsUa0Lfb1+6a4KinVvnSr0eAXLbS3ToO39/fR8EtCab4LRarEc9VbjXsCZSKAExQGbY2SS99irY
928
- 7CFJXJv2eul/VTV+lmuNk5Mny5K76qxAwJ/C+IDPXfRa3M50hqY+bAtTyr2SzhkGcuYMXDhpxwTW
929
- vGzOW/b3aJzcJRVIiKHpqfiYnODz1TEoYRFsZ5aNOZnLwkUkOQIDAQABo0IwQDAPBgNVHRMBAf8E
930
- BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUrWyqlGCc7eT/+j4KdCtjA/e2Wb8wDQYJ
931
- KoZIhvcNAQELBQADggEBABpA2JVlrAmSicY59BDlqQ5mU1143vokkbvnRFHfxhY0Cu9qRFHqKweK
932
- A3rD6z8KLFIWoCtDuSWQP3CpMyVtRRooOyfPqsMpQhvfO0zAMzRbQYi/aytlryjvsvXDqmbOe1bu
933
- t8jLZ8HJnBoYuMTDSQPxYA5QzUbF83d597YV4Djbxy8ooAw/dyZ02SUS2jHaGh7cKUGRIjxpp7sC
934
- 8rZcJwOJ9Abqm+RyguOhCcHpABnTPtRwa7pxpqpYrvS76Wy274fMm7v/OeZWYdMKp8RcTGB7BXcm
935
- er/YB1IsYvdwY9k5vG8cwnncdimvzsUsZAReiDZuMdRAGmI0Nj81Aa6sY6A=
936
- -----END CERTIFICATE-----
937
-
938
- GeoTrust Primary Certification Authority - G2
939
- =============================================
940
- -----BEGIN CERTIFICATE-----
941
- MIICrjCCAjWgAwIBAgIQPLL0SAoA4v7rJDteYD7DazAKBggqhkjOPQQDAzCBmDELMAkGA1UEBhMC
942
- VVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChjKSAyMDA3IEdlb1RydXN0IElu
943
- Yy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBD
944
- ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMB4XDTA3MTEwNTAwMDAwMFoXDTM4MDExODIzNTk1
945
- OVowgZgxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykg
946
- MjAwNyBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNVBAMTLUdl
947
- b1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjB2MBAGByqGSM49AgEG
948
- BSuBBAAiA2IABBWx6P0DFUPlrOuHNxFi79KDNlJ9RVcLSo17VDs6bl8VAsBQps8lL33KSLjHUGMc
949
- KiEIfJo22Av+0SbFWDEwKCXzXV2juLaltJLtbCyf691DiaI8S0iRHVDsJt/WYC69IaNCMEAwDwYD
950
- VR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBVfNVdRVfslsq0DafwBo/q+
951
- EVXVMAoGCCqGSM49BAMDA2cAMGQCMGSWWaboCd6LuvpaiIjwH5HTRqjySkwCY/tsXzjbLkGTqQ7m
952
- ndwxHLKgpxgceeHHNgIwOlavmnRs9vuD4DPTCF+hnMJbn0bWtsuRBmOiBuczrD6ogRLQy7rQkgu2
953
- npaqBA+K
954
- -----END CERTIFICATE-----
955
-
956
- VeriSign Universal Root Certification Authority
957
- ===============================================
958
- -----BEGIN CERTIFICATE-----
959
- MIIEuTCCA6GgAwIBAgIQQBrEZCGzEyEDDrvkEhrFHTANBgkqhkiG9w0BAQsFADCBvTELMAkGA1UE
960
- BhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBO
961
- ZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwOCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVk
962
- IHVzZSBvbmx5MTgwNgYDVQQDEy9WZXJpU2lnbiBVbml2ZXJzYWwgUm9vdCBDZXJ0aWZpY2F0aW9u
963
- IEF1dGhvcml0eTAeFw0wODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIG9MQswCQYDVQQGEwJV
964
- UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv
965
- cmsxOjA4BgNVBAsTMShjKSAyMDA4IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl
966
- IG9ubHkxODA2BgNVBAMTL1ZlcmlTaWduIFVuaXZlcnNhbCBSb290IENlcnRpZmljYXRpb24gQXV0
967
- aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx2E3XrEBNNti1xWb/1hajCMj
968
- 1mCOkdeQmIN65lgZOIzF9uVkhbSicfvtvbnazU0AtMgtc6XHaXGVHzk8skQHnOgO+k1KxCHfKWGP
969
- MiJhgsWHH26MfF8WIFFE0XBPV+rjHOPMee5Y2A7Cs0WTwCznmhcrewA3ekEzeOEz4vMQGn+HLL72
970
- 9fdC4uW/h2KJXwBL38Xd5HVEMkE6HnFuacsLdUYI0crSK5XQz/u5QGtkjFdN/BMReYTtXlT2NJ8I
971
- AfMQJQYXStrxHXpma5hgZqTZ79IugvHw7wnqRMkVauIDbjPTrJ9VAMf2CGqUuV/c4DPxhGD5WycR
972
- tPwW8rtWaoAljQIDAQABo4GyMIGvMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMG0G
973
- CCsGAQUFBwEMBGEwX6FdoFswWTBXMFUWCWltYWdlL2dpZjAhMB8wBwYFKw4DAhoEFI/l0xqGrI2O
974
- a8PPgGrUSBgsexkuMCUWI2h0dHA6Ly9sb2dvLnZlcmlzaWduLmNvbS92c2xvZ28uZ2lmMB0GA1Ud
975
- DgQWBBS2d/ppSEefUxLVwuoHMnYH0ZcHGTANBgkqhkiG9w0BAQsFAAOCAQEASvj4sAPmLGd75JR3
976
- Y8xuTPl9Dg3cyLk1uXBPY/ok+myDjEedO2Pzmvl2MpWRsXe8rJq+seQxIcaBlVZaDrHC1LGmWazx
977
- Y8u4TB1ZkErvkBYoH1quEPuBUDgMbMzxPcP1Y+Oz4yHJJDnp/RVmRvQbEdBNc6N9Rvk97ahfYtTx
978
- P/jgdFcrGJ2BtMQo2pSXpXDrrB2+BxHw1dvd5Yzw1TKwg+ZX4o+/vqGqvz0dtdQ46tewXDpPaj+P
979
- wGZsY6rp2aQW9IHRlRQOfc2VNNnSj3BzgXucfr2YYdhFh5iQxeuGMMY1v/D/w1WIg0vvBZIGcfK4
980
- mJO37M2CYfE45k+XmCpajQ==
981
- -----END CERTIFICATE-----
982
-
983
- VeriSign Class 3 Public Primary Certification Authority - G4
984
- ============================================================
985
- -----BEGIN CERTIFICATE-----
986
- MIIDhDCCAwqgAwIBAgIQL4D+I4wOIg9IZxIokYesszAKBggqhkjOPQQDAzCByjELMAkGA1UEBhMC
987
- VVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3
988
- b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVz
989
- ZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmlj
990
- YXRpb24gQXV0aG9yaXR5IC0gRzQwHhcNMDcxMTA1MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCByjEL
991
- MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBU
992
- cnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRo
993
- b3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5
994
- IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzQwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAASnVnp8
995
- Utpkmw4tXNherJI9/gHmGUo9FANL+mAnINmDiWn6VMaaGF5VKmTeBvaNSjutEDxlPZCIBIngMGGz
996
- rl0Bp3vefLK+ymVhAIau2o970ImtTR1ZmkGxvEeA3J5iw/mjgbIwga8wDwYDVR0TAQH/BAUwAwEB
997
- /zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2UvZ2lmMCEw
998
- HzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVyaXNpZ24u
999
- Y29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFLMWkf3upm7ktS5Jj4d4gYDs5bG1MAoGCCqGSM49BAMD
1000
- A2gAMGUCMGYhDBgmYFo4e1ZC4Kf8NoRRkSAsdk1DPcQdhCPQrNZ8NQbOzWm9kA3bbEhCHQ6qQgIx
1001
- AJw9SDkjOVgaFRJZap7v1VmyHVIsmXHNxynfGyphe3HR3vPA5Q06Sqotp9iGKt0uEA==
1002
- -----END CERTIFICATE-----
1003
-
1004
  NetLock Arany (Class Gold) Főtanúsítvány
1005
  ========================================
1006
  -----BEGIN CERTIFICATE-----
@@ -1176,82 +821,6 @@ Q0iy2+tzJOeRf1SktoA+naM8THLCV8Sg1Mw4J87VBp6iSNnpn86CcDaTmjvfliHjWbcM2pE38P1Z
1176
  WrOZyGlsQyYBNWNgVYkDOnXYukrZVP/u3oDYLdE41V4tC5h9Pmzb/CaIxw==
1177
  -----END CERTIFICATE-----
1178
 
1179
- Chambers of Commerce Root - 2008
1180
- ================================
1181
- -----BEGIN CERTIFICATE-----
1182
- MIIHTzCCBTegAwIBAgIJAKPaQn6ksa7aMA0GCSqGSIb3DQEBBQUAMIGuMQswCQYDVQQGEwJFVTFD
1183
- MEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNv
1184
- bS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMu
1185
- QS4xKTAnBgNVBAMTIENoYW1iZXJzIG9mIENvbW1lcmNlIFJvb3QgLSAyMDA4MB4XDTA4MDgwMTEy
1186
- Mjk1MFoXDTM4MDczMTEyMjk1MFowga4xCzAJBgNVBAYTAkVVMUMwQQYDVQQHEzpNYWRyaWQgKHNl
1187
- ZSBjdXJyZW50IGFkZHJlc3MgYXQgd3d3LmNhbWVyZmlybWEuY29tL2FkZHJlc3MpMRIwEAYDVQQF
1188
- EwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENhbWVyZmlybWEgUy5BLjEpMCcGA1UEAxMgQ2hhbWJl
1189
- cnMgb2YgQ29tbWVyY2UgUm9vdCAtIDIwMDgwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC
1190
- AQCvAMtwNyuAWko6bHiUfaN/Gh/2NdW928sNRHI+JrKQUrpjOyhYb6WzbZSm891kDFX29ufyIiKA
1191
- XuFixrYp4YFs8r/lfTJqVKAyGVn+H4vXPWCGhSRv4xGzdz4gljUha7MI2XAuZPeEklPWDrCQiorj
1192
- h40G072QDuKZoRuGDtqaCrsLYVAGUvGef3bsyw/QHg3PmTA9HMRFEFis1tPo1+XqxQEHd9ZR5gN/
1193
- ikilTWh1uem8nk4ZcfUyS5xtYBkL+8ydddy/Js2Pk3g5eXNeJQ7KXOt3EgfLZEFHcpOrUMPrCXZk
1194
- NNI5t3YRCQ12RcSprj1qr7V9ZS+UWBDsXHyvfuK2GNnQm05aSd+pZgvMPMZ4fKecHePOjlO+Bd5g
1195
- D2vlGts/4+EhySnB8esHnFIbAURRPHsl18TlUlRdJQfKFiC4reRB7noI/plvg6aRArBsNlVq5331
1196
- lubKgdaX8ZSD6e2wsWsSaR6s+12pxZjptFtYer49okQ6Y1nUCyXeG0+95QGezdIp1Z8XGQpvvwyQ
1197
- 0wlf2eOKNcx5Wk0ZN5K3xMGtr/R5JJqyAQuxr1yW84Ay+1w9mPGgP0revq+ULtlVmhduYJ1jbLhj
1198
- ya6BXBg14JC7vjxPNyK5fuvPnnchpj04gftI2jE9K+OJ9dC1vX7gUMQSibMjmhAxhduub+84Mxh2
1199
- EQIDAQABo4IBbDCCAWgwEgYDVR0TAQH/BAgwBgEB/wIBDDAdBgNVHQ4EFgQU+SSsD7K1+HnA+mCI
1200
- G8TZTQKeFxkwgeMGA1UdIwSB2zCB2IAU+SSsD7K1+HnA+mCIG8TZTQKeFxmhgbSkgbEwga4xCzAJ
1201
- BgNVBAYTAkVVMUMwQQYDVQQHEzpNYWRyaWQgKHNlZSBjdXJyZW50IGFkZHJlc3MgYXQgd3d3LmNh
1202
- bWVyZmlybWEuY29tL2FkZHJlc3MpMRIwEAYDVQQFEwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENh
1203
- bWVyZmlybWEgUy5BLjEpMCcGA1UEAxMgQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdCAtIDIwMDiC
1204
- CQCj2kJ+pLGu2jAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRVHSAAMCowKAYIKwYBBQUH
1205
- AgEWHGh0dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20wDQYJKoZIhvcNAQEFBQADggIBAJASryI1
1206
- wqM58C7e6bXpeHxIvj99RZJe6dqxGfwWPJ+0W2aeaufDuV2I6A+tzyMP3iU6XsxPpcG1Lawk0lgH
1207
- 3qLPaYRgM+gQDROpI9CF5Y57pp49chNyM/WqfcZjHwj0/gF/JM8rLFQJ3uIrbZLGOU8W6jx+ekbU
1208
- RWpGqOt1glanq6B8aBMz9p0w8G8nOSQjKpD9kCk18pPfNKXG9/jvjA9iSnyu0/VU+I22mlaHFoI6
1209
- M6taIgj3grrqLuBHmrS1RaMFO9ncLkVAO+rcf+g769HsJtg1pDDFOqxXnrN2pSB7+R5KBWIBpih1
1210
- YJeSDW4+TTdDDZIVnBgizVGZoCkaPF+KMjNbMMeJL0eYD6MDxvbxrN8y8NmBGuScvfaAFPDRLLmF
1211
- 9dijscilIeUcE5fuDr3fKanvNFNb0+RqE4QGtjICxFKuItLcsiFCGtpA8CnJ7AoMXOLQusxI0zcK
1212
- zBIKinmwPQN/aUv0NCB9szTqjktk9T79syNnFQ0EuPAtwQlRPLJsFfClI9eDdOTlLsn+mCdCxqvG
1213
- nrDQWzilm1DefhiYtUU79nm06PcaewaD+9CL2rvHvRirCG88gGtAPxkZumWK5r7VXNM21+9AUiRg
1214
- OGcEMeyP84LG3rlV8zsxkVrctQgVrXYlCg17LofiDKYGvCYQbTed7N14jHyAxfDZd0jQ
1215
- -----END CERTIFICATE-----
1216
-
1217
- Global Chambersign Root - 2008
1218
- ==============================
1219
- -----BEGIN CERTIFICATE-----
1220
- MIIHSTCCBTGgAwIBAgIJAMnN0+nVfSPOMA0GCSqGSIb3DQEBBQUAMIGsMQswCQYDVQQGEwJFVTFD
1221
- MEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNv
1222
- bS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMu
1223
- QS4xJzAlBgNVBAMTHkdsb2JhbCBDaGFtYmVyc2lnbiBSb290IC0gMjAwODAeFw0wODA4MDExMjMx
1224
- NDBaFw0zODA3MzExMjMxNDBaMIGsMQswCQYDVQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUg
1225
- Y3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAGA1UEBRMJ
1226
- QTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xJzAlBgNVBAMTHkdsb2JhbCBD
1227
- aGFtYmVyc2lnbiBSb290IC0gMjAwODCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMDf
1228
- VtPkOpt2RbQT2//BthmLN0EYlVJH6xedKYiONWwGMi5HYvNJBL99RDaxccy9Wglz1dmFRP+RVyXf
1229
- XjaOcNFccUMd2drvXNL7G706tcuto8xEpw2uIRU/uXpbknXYpBI4iRmKt4DS4jJvVpyR1ogQC7N0
1230
- ZJJ0YPP2zxhPYLIj0Mc7zmFLmY/CDNBAspjcDahOo7kKrmCgrUVSY7pmvWjg+b4aqIG7HkF4ddPB
1231
- /gBVsIdU6CeQNR1MM62X/JcumIS/LMmjv9GYERTtY/jKmIhYF5ntRQOXfjyGHoiMvvKRhI9lNNgA
1232
- TH23MRdaKXoKGCQwoze1eqkBfSbW+Q6OWfH9GzO1KTsXO0G2Id3UwD2ln58fQ1DJu7xsepeY7s2M
1233
- H/ucUa6LcL0nn3HAa6x9kGbo1106DbDVwo3VyJ2dwW3Q0L9R5OP4wzg2rtandeavhENdk5IMagfe
1234
- Ox2YItaswTXbo6Al/3K1dh3ebeksZixShNBFks4c5eUzHdwHU1SjqoI7mjcv3N2gZOnm3b2u/GSF
1235
- HTynyQbehP9r6GsaPMWis0L7iwk+XwhSx2LE1AVxv8Rk5Pihg+g+EpuoHtQ2TS9x9o0o9oOpE9Jh
1236
- wZG7SMA0j0GMS0zbaRL/UJScIINZc+18ofLx/d33SdNDWKBWY8o9PeU1VlnpDsogzCtLkykPAgMB
1237
- AAGjggFqMIIBZjASBgNVHRMBAf8ECDAGAQH/AgEMMB0GA1UdDgQWBBS5CcqcHtvTbDprru1U8VuT
1238
- BjUuXjCB4QYDVR0jBIHZMIHWgBS5CcqcHtvTbDprru1U8VuTBjUuXqGBsqSBrzCBrDELMAkGA1UE
1239
- BhMCRVUxQzBBBgNVBAcTOk1hZHJpZCAoc2VlIGN1cnJlbnQgYWRkcmVzcyBhdCB3d3cuY2FtZXJm
1240
- aXJtYS5jb20vYWRkcmVzcykxEjAQBgNVBAUTCUE4Mjc0MzI4NzEbMBkGA1UEChMSQUMgQ2FtZXJm
1241
- aXJtYSBTLkEuMScwJQYDVQQDEx5HbG9iYWwgQ2hhbWJlcnNpZ24gUm9vdCAtIDIwMDiCCQDJzdPp
1242
- 1X0jzjAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRVHSAAMCowKAYIKwYBBQUHAgEWHGh0
1243
- dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20wDQYJKoZIhvcNAQEFBQADggIBAICIf3DekijZBZRG
1244
- /5BXqfEv3xoNa/p8DhxJJHkn2EaqbylZUohwEurdPfWbU1Rv4WCiqAm57OtZfMY18dwY6fFn5a+6
1245
- ReAJ3spED8IXDneRRXozX1+WLGiLwUePmJs9wOzL9dWCkoQ10b42OFZyMVtHLaoXpGNR6woBrX/s
1246
- dZ7LoR/xfxKxueRkf2fWIyr0uDldmOghp+G9PUIadJpwr2hsUF1Jz//7Dl3mLEfXgTpZALVza2Mg
1247
- 9jFFCDkO9HB+QHBaP9BrQql0PSgvAm11cpUJjUhjxsYjV5KTXjXBjfkK9yydYhz2rXzdpjEetrHH
1248
- foUm+qRqtdpjMNHvkzeyZi99Bffnt0uYlDXA2TopwZ2yUDMdSqlapskD7+3056huirRXhOukP9Du
1249
- qqqHW2Pok+JrqNS4cnhrG+055F3Lm6qH1U9OAP7Zap88MQ8oAgF9mOinsKJknnn4SPIVqczmyETr
1250
- P3iZ8ntxPjzxmKfFGBI/5rsoM0LpRQp8bfKGeS/Fghl9CYl8slR2iK7ewfPM4W7bMdaTrpmg7yVq
1251
- c5iJWzouE4gev8CSlDQb4ye3ix5vQv/n6TebUB0tovkC7stYWDpxvGjjqsGvHCgfotwjZT+B6q6Z
1252
- 09gwzxMNTxXJhLynSC34MCN32EZLeW32jO06f2ARePTpm67VVMB0gNELQp/B
1253
- -----END CERTIFICATE-----
1254
-
1255
  Go Daddy Root Certificate Authority - G2
1256
  ========================================
1257
  -----BEGIN CERTIFICATE-----
@@ -1553,27 +1122,6 @@ OR/qnuOf0GZvBeyqdn6/axag67XH/JJULysRJyU3eExRarDzzFhdFPFqSBX/wge2sY0PjlxQRrM9
1553
  vwGYT7JZVEc+NHt4bVaTLnPqZih4zR0Uv6CPLy64Lo7yFIrM6bV8+2ydDKXhlg==
1554
  -----END CERTIFICATE-----
1555
 
1556
- Trustis FPS Root CA
1557
- ===================
1558
- -----BEGIN CERTIFICATE-----
1559
- MIIDZzCCAk+gAwIBAgIQGx+ttiD5JNM2a/fH8YygWTANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQG
1560
- EwJHQjEYMBYGA1UEChMPVHJ1c3RpcyBMaW1pdGVkMRwwGgYDVQQLExNUcnVzdGlzIEZQUyBSb290
1561
- IENBMB4XDTAzMTIyMzEyMTQwNloXDTI0MDEyMTExMzY1NFowRTELMAkGA1UEBhMCR0IxGDAWBgNV
1562
- BAoTD1RydXN0aXMgTGltaXRlZDEcMBoGA1UECxMTVHJ1c3RpcyBGUFMgUm9vdCBDQTCCASIwDQYJ
1563
- KoZIhvcNAQEBBQADggEPADCCAQoCggEBAMVQe547NdDfxIzNjpvto8A2mfRC6qc+gIMPpqdZh8mQ
1564
- RUN+AOqGeSoDvT03mYlmt+WKVoaTnGhLaASMk5MCPjDSNzoiYYkchU59j9WvezX2fihHiTHcDnlk
1565
- H5nSW7r+f2C/revnPDgpai/lkQtV/+xvWNUtyd5MZnGPDNcE2gfmHhjjvSkCqPoc4Vu5g6hBSLwa
1566
- cY3nYuUtsuvffM/bq1rKMfFMIvMFE/eC+XN5DL7XSxzA0RU8k0Fk0ea+IxciAIleH2ulrG6nS4zt
1567
- o3Lmr2NNL4XSFDWaLk6M6jKYKIahkQlBOrTh4/L68MkKokHdqeMDx4gVOxzUGpTXn2RZEm0CAwEA
1568
- AaNTMFEwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBS6+nEleYtXQSUhhgtx67JkDoshZzAd
1569
- BgNVHQ4EFgQUuvpxJXmLV0ElIYYLceuyZA6LIWcwDQYJKoZIhvcNAQEFBQADggEBAH5Y//01GX2c
1570
- GE+esCu8jowU/yyg2kdbw++BLa8F6nRIW/M+TgfHbcWzk88iNVy2P3UnXwmWzaD+vkAMXBJV+JOC
1571
- yinpXj9WV4s4NvdFGkwozZ5BuO1WTISkQMi4sKUraXAEasP41BIy+Q7DsdwyhEQsb8tGD+pmQQ9P
1572
- 8Vilpg0ND2HepZ5dfWWhPBfnqFVO76DH7cZEf1T1o+CP8HxVIo8ptoGj4W1OLBuAZ+ytIJ8MYmHV
1573
- l/9D7S3B2l0pKoU/rGXuhg8FjZBf3+6f9L/uHfuY5H+QK4R4EA5sSVPvFVtlRkpdr7r7OnIdzfYl
1574
- iB6XzCGcKQENZetX2fNXlrtIzYE=
1575
- -----END CERTIFICATE-----
1576
-
1577
  Buypass Class 2 Root CA
1578
  =======================
1579
  -----BEGIN CERTIFICATE-----
@@ -2218,36 +1766,6 @@ uglB4Zf4+/2a4n0Sye18ZNPLBSWLVtmg515dTguDnFt2KaAJJiFqYgIwcdK1j1zqO+F4CYWodZI7
2218
  yFz9SO8NdCKoCOJuxUnOxwy8p2Fp8fc74SrL+SvzZpA3
2219
  -----END CERTIFICATE-----
2220
 
2221
- Staat der Nederlanden Root CA - G3
2222
- ==================================
2223
- -----BEGIN CERTIFICATE-----
2224
- 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
- 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
- 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
- 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
- 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
- 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
- x1ueKt6c/DrGlaf1F2cY5y9JCAxcz+bMNO14+1Cx3Gsy8KL+tjzk7FqXxz8ecAgwoNzFs21v0IJy
2231
- EavSgWhZghe3eJJg+szeP4TrjTgzkApyI/o1zCZxMdFyKJLZWyNtZrVtB0LrpjPOktvA9mxjeM3K
2232
- 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
- mkVLoR9BvUhTFXFkC4az5S6+zqQbwSmEorXLCCN2QyIkHxcE1G6cxvx/K2Ya7Irl1s9N9WMJtxU5
2234
- 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
- 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
- FxcHErVc0qsgk7TmgoNwNsXNo42ti+yjwUOH5kPiNL6VizXtBznaqB16nzaeErAMZRKQFWDZJkBE
2237
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
2249
- -----END CERTIFICATE-----
2250
-
2251
  Staat der Nederlanden EV Root CA
2252
  ================================
2253
  -----BEGIN CERTIFICATE-----
@@ -3433,3 +2951,282 @@ HQ8BAf8EBQMDBwYAMB0GA1UdDgQWBBRVqYSJ0sEyvRjLbKYHTsjnnb6CkDAKBggqhkjOPQQDAwNn
3433
  ADBkAjA3AZKXRRJ+oPM+rRk6ct30UJMDEr5E0k9BpIycnR+j9sKS50gU/k6bpZFXrsY3crsCMGcl
3434
  CrEMXu6pY5Jv5ZAL/mYiykf9ijH3g/56vxC+GCsej/YpHpRZ744hN8tRmKVuSw==
3435
  -----END CERTIFICATE-----
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  ##
2
  ## Bundle of CA Root Certificates
3
  ##
4
+ ## Certificate data from Mozilla as of: Tue Oct 26 03:12:05 2021 GMT
5
  ##
6
  ## This is a bundle of X.509 certificates of public Certificate Authorities
7
  ## (CA). These were automatically extracted from Mozilla's root certificates
14
  ## Just configure this file as the SSLCACertificateFile.
15
  ##
16
  ## Conversion done with mk-ca-bundle.pl version 1.28.
17
+ ## SHA256: bb36818a81feaa4cca61101e6d6276cd09e972efcb08112dfed846918ca41d7f
18
  ##
19
 
20
 
132
  tHuu2guQOHXvgR1m0vdXcDazv/wor3ElhVsT/h5/WrQ8
133
  -----END CERTIFICATE-----
134
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
135
  Comodo AAA Services root
136
  ========================
137
  -----BEGIN CERTIFICATE-----
156
  12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg==
157
  -----END CERTIFICATE-----
158
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
159
  QuoVadis Root CA 2
160
  ==================
161
  -----BEGIN CERTIFICATE-----
243
  FL39vmwLAw==
244
  -----END CERTIFICATE-----
245
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
246
  XRamp Global CA Root
247
  ====================
248
  -----BEGIN CERTIFICATE-----
381
  vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep+OkuE6N36B9K
382
  -----END CERTIFICATE-----
383
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
384
  SwissSign Gold CA - G2
385
  ======================
386
  -----BEGIN CERTIFICATE-----
443
  DgEj8Z+7fNzcbBGXJbLytGMU0gYqZ4yD9c7qB9iaah7s5Aq7KkzrCWA5zspi2C5u
444
  -----END CERTIFICATE-----
445
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
446
  SecureTrust CA
447
  ==============
448
  -----BEGIN CERTIFICATE-----
646
  TogVZ96edhBiIL5VaZVDADlN9u6wWk5JRFRYX0KD
647
  -----END CERTIFICATE-----
648
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
649
  NetLock Arany (Class Gold) Főtanúsítvány
650
  ========================================
651
  -----BEGIN CERTIFICATE-----
821
  WrOZyGlsQyYBNWNgVYkDOnXYukrZVP/u3oDYLdE41V4tC5h9Pmzb/CaIxw==
822
  -----END CERTIFICATE-----
823
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
824
  Go Daddy Root Certificate Authority - G2
825
  ========================================
826
  -----BEGIN CERTIFICATE-----
1122
  vwGYT7JZVEc+NHt4bVaTLnPqZih4zR0Uv6CPLy64Lo7yFIrM6bV8+2ydDKXhlg==
1123
  -----END CERTIFICATE-----
1124
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1125
  Buypass Class 2 Root CA
1126
  =======================
1127
  -----BEGIN CERTIFICATE-----
1766
  yFz9SO8NdCKoCOJuxUnOxwy8p2Fp8fc74SrL+SvzZpA3
1767
  -----END CERTIFICATE-----
1768
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1769
  Staat der Nederlanden EV Root CA
1770
  ================================
1771
  -----BEGIN CERTIFICATE-----
2951
  ADBkAjA3AZKXRRJ+oPM+rRk6ct30UJMDEr5E0k9BpIycnR+j9sKS50gU/k6bpZFXrsY3crsCMGcl
2952
  CrEMXu6pY5Jv5ZAL/mYiykf9ijH3g/56vxC+GCsej/YpHpRZ744hN8tRmKVuSw==
2953
  -----END CERTIFICATE-----
2954
+
2955
+ NAVER Global Root Certification Authority
2956
+ =========================================
2957
+ -----BEGIN CERTIFICATE-----
2958
+ MIIFojCCA4qgAwIBAgIUAZQwHqIL3fXFMyqxQ0Rx+NZQTQ0wDQYJKoZIhvcNAQEMBQAwaTELMAkG
2959
+ A1UEBhMCS1IxJjAkBgNVBAoMHU5BVkVSIEJVU0lORVNTIFBMQVRGT1JNIENvcnAuMTIwMAYDVQQD
2960
+ DClOQVZFUiBHbG9iYWwgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0xNzA4MTgwODU4
2961
+ NDJaFw0zNzA4MTgyMzU5NTlaMGkxCzAJBgNVBAYTAktSMSYwJAYDVQQKDB1OQVZFUiBCVVNJTkVT
2962
+ UyBQTEFURk9STSBDb3JwLjEyMDAGA1UEAwwpTkFWRVIgR2xvYmFsIFJvb3QgQ2VydGlmaWNhdGlv
2963
+ biBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC21PGTXLVAiQqrDZBb
2964
+ UGOukJR0F0Vy1ntlWilLp1agS7gvQnXp2XskWjFlqxcX0TM62RHcQDaH38dq6SZeWYp34+hInDEW
2965
+ +j6RscrJo+KfziFTowI2MMtSAuXaMl3Dxeb57hHHi8lEHoSTGEq0n+USZGnQJoViAbbJAh2+g1G7
2966
+ XNr4rRVqmfeSVPc0W+m/6imBEtRTkZazkVrd/pBzKPswRrXKCAfHcXLJZtM0l/aM9BhK4dA9WkW2
2967
+ aacp+yPOiNgSnABIqKYPszuSjXEOdMWLyEz59JuOuDxp7W87UC9Y7cSw0BwbagzivESq2M0UXZR4
2968
+ Yb8ObtoqvC8MC3GmsxY/nOb5zJ9TNeIDoKAYv7vxvvTWjIcNQvcGufFt7QSUqP620wbGQGHfnZ3z
2969
+ VHbOUzoBppJB7ASjjw2i1QnK1sua8e9DXcCrpUHPXFNwcMmIpi3Ua2FzUCaGYQ5fG8Ir4ozVu53B
2970
+ A0K6lNpfqbDKzE0K70dpAy8i+/Eozr9dUGWokG2zdLAIx6yo0es+nPxdGoMuK8u180SdOqcXYZai
2971
+ cdNwlhVNt0xz7hlcxVs+Qf6sdWA7G2POAN3aCJBitOUt7kinaxeZVL6HSuOpXgRM6xBtVNbv8ejy
2972
+ YhbLgGvtPe31HzClrkvJE+2KAQHJuFFYwGY6sWZLxNUxAmLpdIQM201GLQIDAQABo0IwQDAdBgNV
2973
+ HQ4EFgQU0p+I36HNLL3s9TsBAZMzJ7LrYEswDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMB
2974
+ Af8wDQYJKoZIhvcNAQEMBQADggIBADLKgLOdPVQG3dLSLvCkASELZ0jKbY7gyKoNqo0hV4/GPnrK
2975
+ 21HUUrPUloSlWGB/5QuOH/XcChWB5Tu2tyIvCZwTFrFsDDUIbatjcu3cvuzHV+YwIHHW1xDBE1UB
2976
+ jCpD5EHxzzp6U5LOogMFDTjfArsQLtk70pt6wKGm+LUx5vR1yblTmXVHIloUFcd4G7ad6Qz4G3bx
2977
+ hYTeodoS76TiEJd6eN4MUZeoIUCLhr0N8F5OSza7OyAfikJW4Qsav3vQIkMsRIz75Sq0bBwcupTg
2978
+ E34h5prCy8VCZLQelHsIJchxzIdFV4XTnyliIoNRlwAYl3dqmJLJfGBs32x9SuRwTMKeuB330DTH
2979
+ D8z7p/8Dvq1wkNoL3chtl1+afwkyQf3NosxabUzyqkn+Zvjp2DXrDige7kgvOtB5CTh8piKCk5XQ
2980
+ A76+AqAF3SAi428diDRgxuYKuQl1C/AH6GmWNcf7I4GOODm4RStDeKLRLBT/DShycpWbXgnbiUSY
2981
+ qqFJu3FS8r/2/yehNq+4tneI3TqkbZs0kNwUXTC/t+sX5Ie3cdCh13cV1ELX8vMxmV2b3RZtP+oG
2982
+ I/hGoiLtk/bdmuYqh7GYVPEi92tF4+KOdh2ajcQGjTa3FPOdVGm3jjzVpG2Tgbet9r1ke8LJaDmg
2983
+ kpzNNIaRkPpkUZ3+/uul9XXeifdy
2984
+ -----END CERTIFICATE-----
2985
+
2986
+ AC RAIZ FNMT-RCM SERVIDORES SEGUROS
2987
+ ===================================
2988
+ -----BEGIN CERTIFICATE-----
2989
+ MIICbjCCAfOgAwIBAgIQYvYybOXE42hcG2LdnC6dlTAKBggqhkjOPQQDAzB4MQswCQYDVQQGEwJF
2990
+ UzERMA8GA1UECgwIRk5NVC1SQ00xDjAMBgNVBAsMBUNlcmVzMRgwFgYDVQRhDA9WQVRFUy1RMjgy
2991
+ NjAwNEoxLDAqBgNVBAMMI0FDIFJBSVogRk5NVC1SQ00gU0VSVklET1JFUyBTRUdVUk9TMB4XDTE4
2992
+ MTIyMDA5MzczM1oXDTQzMTIyMDA5MzczM1oweDELMAkGA1UEBhMCRVMxETAPBgNVBAoMCEZOTVQt
2993
+ UkNNMQ4wDAYDVQQLDAVDZXJlczEYMBYGA1UEYQwPVkFURVMtUTI4MjYwMDRKMSwwKgYDVQQDDCNB
2994
+ QyBSQUlaIEZOTVQtUkNNIFNFUlZJRE9SRVMgU0VHVVJPUzB2MBAGByqGSM49AgEGBSuBBAAiA2IA
2995
+ BPa6V1PIyqvfNkpSIeSX0oNnnvBlUdBeh8dHsVnyV0ebAAKTRBdp20LHsbI6GA60XYyzZl2hNPk2
2996
+ LEnb80b8s0RpRBNm/dfF/a82Tc4DTQdxz69qBdKiQ1oKUm8BA06Oi6NCMEAwDwYDVR0TAQH/BAUw
2997
+ AwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFAG5L++/EYZg8k/QQW6rcx/n0m5JMAoGCCqG
2998
+ SM49BAMDA2kAMGYCMQCuSuMrQMN0EfKVrRYj3k4MGuZdpSRea0R7/DjiT8ucRRcRTBQnJlU5dUoD
2999
+ zBOQn5ICMQD6SmxgiHPz7riYYqnOK8LZiqZwMR2vsJRM60/G49HzYqc8/5MuB1xJAWdpEgJyv+c=
3000
+ -----END CERTIFICATE-----
3001
+
3002
+ GlobalSign Root R46
3003
+ ===================
3004
+ -----BEGIN CERTIFICATE-----
3005
+ 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
3029
+ QEUxeCp6
3030
+ -----END CERTIFICATE-----
3031
+
3032
+ GlobalSign Root E46
3033
+ ===================
3034
+ -----BEGIN CERTIFICATE-----
3035
+ MIICCzCCAZGgAwIBAgISEdK7ujNu1LzmJGjFDYQdmOhDMAoGCCqGSM49BAMDMEYxCzAJBgNVBAYT
3036
+ AkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRwwGgYDVQQDExNHbG9iYWxTaWduIFJvb3Qg
3037
+ RTQ2MB4XDTE5MDMyMDAwMDAwMFoXDTQ2MDMyMDAwMDAwMFowRjELMAkGA1UEBhMCQkUxGTAXBgNV
3038
+ BAoTEEdsb2JhbFNpZ24gbnYtc2ExHDAaBgNVBAMTE0dsb2JhbFNpZ24gUm9vdCBFNDYwdjAQBgcq
3039
+ hkjOPQIBBgUrgQQAIgNiAAScDrHPt+ieUnd1NPqlRqetMhkytAepJ8qUuwzSChDH2omwlwxwEwkB
3040
+ jtjqR+q+soArzfwoDdusvKSGN+1wCAB16pMLey5SnCNoIwZD7JIvU4Tb+0cUB+hflGddyXqBPCCj
3041
+ QjBAMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBQxCpCPtsad0kRL
3042
+ gLWi5h+xEk8blTAKBggqhkjOPQQDAwNoADBlAjEA31SQ7Zvvi5QCkxeCmb6zniz2C5GMn0oUsfZk
3043
+ vLtoURMMA/cVi4RguYv/Uo7njLwcAjA8+RHUjE7AwWHCFUyqqx0LMV87HOIAl0Qx5v5zli/altP+
3044
+ CAezNIm8BZ/3Hobui3A=
3045
+ -----END CERTIFICATE-----
3046
+
3047
+ GLOBALTRUST 2020
3048
+ ================
3049
+ -----BEGIN CERTIFICATE-----
3050
+ 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
3075
+ -----END CERTIFICATE-----
3076
+
3077
+ ANF Secure Server Root CA
3078
+ =========================
3079
+ -----BEGIN CERTIFICATE-----
3080
+ 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
3107
+ -----END CERTIFICATE-----
3108
+
3109
+ Certum EC-384 CA
3110
+ ================
3111
+ -----BEGIN CERTIFICATE-----
3112
+ MIICZTCCAeugAwIBAgIQeI8nXIESUiClBNAt3bpz9DAKBggqhkjOPQQDAzB0MQswCQYDVQQGEwJQ
3113
+ TDEhMB8GA1UEChMYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2Vy
3114
+ dGlmaWNhdGlvbiBBdXRob3JpdHkxGTAXBgNVBAMTEENlcnR1bSBFQy0zODQgQ0EwHhcNMTgwMzI2
3115
+ MDcyNDU0WhcNNDMwMzI2MDcyNDU0WjB0MQswCQYDVQQGEwJQTDEhMB8GA1UEChMYQXNzZWNvIERh
3116
+ dGEgU3lzdGVtcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkx
3117
+ GTAXBgNVBAMTEENlcnR1bSBFQy0zODQgQ0EwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAATEKI6rGFtq
3118
+ vm5kN2PkzeyrOvfMobgOgknXhimfoZTy42B4mIF4Bk3y7JoOV2CDn7TmFy8as10CW4kjPMIRBSqn
3119
+ iBMY81CE1700LCeJVf/OTOffph8oxPBUw7l8t1Ot68KjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYD
3120
+ VR0OBBYEFI0GZnQkdjrzife81r1HfS+8EF9LMA4GA1UdDwEB/wQEAwIBBjAKBggqhkjOPQQDAwNo
3121
+ ADBlAjADVS2m5hjEfO/JUG7BJw+ch69u1RsIGL2SKcHvlJF40jocVYli5RsJHrpka/F2tNQCMQC0
3122
+ QoSZ/6vnnvuRlydd3LBbMHHOXjgaatkl5+r3YZJW+OraNsKHZZYuciUvf9/DE8k=
3123
+ -----END CERTIFICATE-----
3124
+
3125
+ Certum Trusted Root CA
3126
+ ======================
3127
+ -----BEGIN CERTIFICATE-----
3128
+ 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
3154
+ -----END CERTIFICATE-----
3155
+
3156
+ TunTrust Root CA
3157
+ ================
3158
+ -----BEGIN CERTIFICATE-----
3159
+ MIIFszCCA5ugAwIBAgIUEwLV4kBMkkaGFmddtLu7sms+/BMwDQYJKoZIhvcNAQELBQAwYTELMAkG
3160
+ A1UEBhMCVE4xNzA1BgNVBAoMLkFnZW5jZSBOYXRpb25hbGUgZGUgQ2VydGlmaWNhdGlvbiBFbGVj
3161
+ dHJvbmlxdWUxGTAXBgNVBAMMEFR1blRydXN0IFJvb3QgQ0EwHhcNMTkwNDI2MDg1NzU2WhcNNDQw
3162
+ NDI2MDg1NzU2WjBhMQswCQYDVQQGEwJUTjE3MDUGA1UECgwuQWdlbmNlIE5hdGlvbmFsZSBkZSBD
3163
+ ZXJ0aWZpY2F0aW9uIEVsZWN0cm9uaXF1ZTEZMBcGA1UEAwwQVHVuVHJ1c3QgUm9vdCBDQTCCAiIw
3164
+ DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMPN0/y9BFPdDCA61YguBUtB9YOCfvdZn56eY+hz
3165
+ 2vYGqU8ftPkLHzmMmiDQfgbU7DTZhrx1W4eI8NLZ1KMKsmwb60ksPqxd2JQDoOw05TDENX37Jk0b
3166
+ bjBU2PWARZw5rZzJJQRNmpA+TkBuimvNKWfGzC3gdOgFVwpIUPp6Q9p+7FuaDmJ2/uqdHYVy7BG7
3167
+ NegfJ7/Boce7SBbdVtfMTqDhuazb1YMZGoXRlJfXyqNlC/M4+QKu3fZnz8k/9YosRxqZbwUN/dAd
3168
+ gjH8KcwAWJeRTIAAHDOFli/LQcKLEITDCSSJH7UP2dl3RxiSlGBcx5kDPP73lad9UKGAwqmDrViW
3169
+ VSHbhlnUr8a83YFuB9tgYv7sEG7aaAH0gxupPqJbI9dkxt/con3YS7qC0lH4Zr8GRuR5KiY2eY8f
3170
+ Tpkdso8MDhz/yV3A/ZAQprE38806JG60hZC/gLkMjNWb1sjxVj8agIl6qeIbMlEsPvLfe/ZdeikZ
3171
+ juXIvTZxi11Mwh0/rViizz1wTaZQmCXcI/m4WEEIcb9PuISgjwBUFfyRbVinljvrS5YnzWuioYas
3172
+ DXxU5mZMZl+QviGaAkYt5IPCgLnPSz7ofzwB7I9ezX/SKEIBlYrilz0QIX32nRzFNKHsLA4KUiwS
3173
+ VXAkPcvCFDVDXSdOvsC9qnyW5/yeYa1E0wCXAgMBAAGjYzBhMB0GA1UdDgQWBBQGmpsfU33x9aTI
3174
+ 04Y+oXNZtPdEITAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFAaamx9TffH1pMjThj6hc1m0
3175
+ 90QhMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAqgVutt0Vyb+zxiD2BkewhpMl
3176
+ 0425yAA/l/VSJ4hxyXT968pk21vvHl26v9Hr7lxpuhbI87mP0zYuQEkHDVneixCwSQXi/5E/S7fd
3177
+ Ao74gShczNxtr18UnH1YeA32gAm56Q6XKRm4t+v4FstVEuTGfbvE7Pi1HE4+Z7/FXxttbUcoqgRY
3178
+ YdZ2vyJ/0Adqp2RT8JeNnYA/u8EH22Wv5psymsNUk8QcCMNE+3tjEUPRahphanltkE8pjkcFwRJp
3179
+ adbGNjHh/PqAulxPxOu3Mqz4dWEX1xAZufHSCe96Qp1bWgvUxpVOKs7/B9dPfhgGiPEZtdmYu65x
3180
+ xBzndFlY7wyJz4sfdZMaBBSSSFCp61cpABbjNhzI+L/wM9VBD8TMPN3pM0MBkRArHtG5Xc0yGYuP
3181
+ jCB31yLEQtyEFpslbei0VXF/sHyz03FJuc9SpAQ/3D2gu68zngowYI7bnV2UqL1g52KAdoGDDIzM
3182
+ MEZJ4gzSqK/rYXHv5yJiqfdcZGyfFoxnNidF9Ql7v/YQCvGwjVRDjAS6oz/v4jXH+XTgbzRB0L9z
3183
+ ZVcg+ZtnemZoJE6AZb0QmQZZ8mWvuMZHu/2QeItBcy6vVR/cO5JyboTT0GFMDcx2V+IthSIVNg3r
3184
+ AZ3r2OvEhJn7wAzMMujjd9qDRIueVSjAi1jTkD5OGwDxFa2DK5o=
3185
+ -----END CERTIFICATE-----
3186
+
3187
+ HARICA TLS RSA Root CA 2021
3188
+ ===========================
3189
+ -----BEGIN CERTIFICATE-----
3190
+ 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
3215
+ kf3/W9b3raYvAwtt41dU63ZTGI0RmLo=
3216
+ -----END CERTIFICATE-----
3217
+
3218
+ HARICA TLS ECC Root CA 2021
3219
+ ===========================
3220
+ -----BEGIN CERTIFICATE-----
3221
+ MIICVDCCAdugAwIBAgIQZ3SdjXfYO2rbIvT/WeK/zjAKBggqhkjOPQQDAzBsMQswCQYDVQQGEwJH
3222
+ UjE3MDUGA1UECgwuSGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9ucyBD
3223
+ QTEkMCIGA1UEAwwbSEFSSUNBIFRMUyBFQ0MgUm9vdCBDQSAyMDIxMB4XDTIxMDIxOTExMDExMFoX
3224
+ DTQ1MDIxMzExMDEwOVowbDELMAkGA1UEBhMCR1IxNzA1BgNVBAoMLkhlbGxlbmljIEFjYWRlbWlj
3225
+ IGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ0ExJDAiBgNVBAMMG0hBUklDQSBUTFMgRUNDIFJv
3226
+ b3QgQ0EgMjAyMTB2MBAGByqGSM49AgEGBSuBBAAiA2IABDgI/rGgltJ6rK9JOtDA4MM7KKrxcm1l
3227
+ AEeIhPyaJmuqS7psBAqIXhfyVYf8MLA04jRYVxqEU+kw2anylnTDUR9YSTHMmE5gEYd103KUkE+b
3228
+ ECUqqHgtvpBBWJAVcqeht6NCMEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUyRtTgRL+BNUW
3229
+ 0aq8mm+3oJUZbsowDgYDVR0PAQH/BAQDAgGGMAoGCCqGSM49BAMDA2cAMGQCMBHervjcToiwqfAi
3230
+ rcJRQO9gcS3ujwLEXQNwSaSS6sUUiHCm0w2wqsosQJz76YJumgIwK0eaB8bRwoF8yguWGEEbo/Qw
3231
+ CZ61IygNnxS2PFOiTAZpffpskcYqSUXm7LcT4Tps
3232
+ -----END CERTIFICATE-----
vendor/composer/ca-bundle/src/CaBundle.php CHANGED
@@ -108,7 +108,7 @@ class CaBundle
108
  return self::$caPath = $caBundle;
109
  }
110
 
111
- if ($caBundle && self::caDirUsable($caBundle)) {
112
  return self::$caPath = $caBundle;
113
  }
114
  }
@@ -335,19 +335,97 @@ EOT;
335
 
336
  /**
337
  * @param string|false $certFile
 
338
  * @return bool
339
  */
340
  private static function caFileUsable($certFile, LoggerInterface $logger = null)
341
  {
342
- return $certFile && @is_file($certFile) && @is_readable($certFile) && static::validateCaFile($certFile, $logger);
 
 
 
343
  }
344
 
345
  /**
346
  * @param string|false $certDir
 
347
  * @return bool
348
  */
349
- private static function caDirUsable($certDir)
350
  {
351
- return $certDir && @is_dir($certDir) && @is_readable($certDir) && glob($certDir . '/*');
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
352
  }
353
  }
108
  return self::$caPath = $caBundle;
109
  }
110
 
111
+ if ($caBundle && self::caDirUsable($caBundle, $logger)) {
112
  return self::$caPath = $caBundle;
113
  }
114
  }
335
 
336
  /**
337
  * @param string|false $certFile
338
+ * @param LoggerInterface|null $logger
339
  * @return bool
340
  */
341
  private static function caFileUsable($certFile, LoggerInterface $logger = null)
342
  {
343
+ return $certFile
344
+ && static::isFile($certFile, $logger)
345
+ && static::isReadable($certFile, $logger)
346
+ && static::validateCaFile($certFile, $logger);
347
  }
348
 
349
  /**
350
  * @param string|false $certDir
351
+ * @param LoggerInterface|null $logger
352
  * @return bool
353
  */
354
+ private static function caDirUsable($certDir, LoggerInterface $logger = null)
355
  {
356
+ return $certDir
357
+ && static::isDir($certDir, $logger)
358
+ && static::isReadable($certDir, $logger)
359
+ && static::glob($certDir . '/*', $logger);
360
+ }
361
+
362
+ /**
363
+ * @param string $certFile
364
+ * @param LoggerInterface|null $logger
365
+ * @return bool
366
+ */
367
+ private static function isFile($certFile, LoggerInterface $logger = null)
368
+ {
369
+ $isFile = @is_file($certFile);
370
+ if (!$isFile && $logger) {
371
+ $logger->debug(sprintf('Checked CA file %s does not exist or it is not a file.', $certFile));
372
+ }
373
+
374
+ return $isFile;
375
+ }
376
+
377
+ /**
378
+ * @param string $certDir
379
+ * @param LoggerInterface|null $logger
380
+ * @return bool
381
+ */
382
+ private static function isDir($certDir, LoggerInterface $logger = null)
383
+ {
384
+ $isDir = @is_dir($certDir);
385
+ if (!$isDir && $logger) {
386
+ $logger->debug(sprintf('Checked directory %s does not exist or it is not a directory.', $certDir));
387
+ }
388
+
389
+ return $isDir;
390
+ }
391
+
392
+ /**
393
+ * @param string $certFileOrDir
394
+ * @param LoggerInterface|null $logger
395
+ * @return bool
396
+ */
397
+ private static function isReadable($certFileOrDir, LoggerInterface $logger = null)
398
+ {
399
+ $isReadable = @is_readable($certFileOrDir);
400
+ if (!$isReadable && $logger) {
401
+ $logger->debug(sprintf('Checked file or directory %s is not readable.', $certFileOrDir));
402
+ }
403
+
404
+ return $isReadable;
405
+ }
406
+
407
+ /**
408
+ * @param string $pattern
409
+ * @param LoggerInterface|null $logger
410
+ * @return bool
411
+ */
412
+ private static function glob($pattern, LoggerInterface $logger = null)
413
+ {
414
+ $certs = glob($pattern);
415
+ if ($certs === false) {
416
+ if ($logger) {
417
+ $logger->debug(sprintf("An error occurred while trying to find certificates for pattern: %s", $pattern));
418
+ }
419
+ return false;
420
+ }
421
+
422
+ if (count($certs) === 0) {
423
+ if ($logger) {
424
+ $logger->debug(sprintf("No CA files found for pattern: %s", $pattern));
425
+ }
426
+ return false;
427
+ }
428
+
429
+ return true;
430
  }
431
  }
vendor/composer/installed.json CHANGED
@@ -1,17 +1,17 @@
1
  [
2
  {
3
  "name": "composer/ca-bundle",
4
- "version": "1.2.9",
5
- "version_normalized": "1.2.9.0",
6
  "source": {
7
  "type": "git",
8
  "url": "https://github.com/composer/ca-bundle.git",
9
- "reference": "78a0e288fdcebf92aa2318a8d3656168da6ac1a5"
10
  },
11
  "dist": {
12
  "type": "zip",
13
- "url": "https://api.github.com/repos/composer/ca-bundle/zipball/78a0e288fdcebf92aa2318a8d3656168da6ac1a5",
14
- "reference": "78a0e288fdcebf92aa2318a8d3656168da6ac1a5",
15
  "shasum": ""
16
  },
17
  "require": {
@@ -23,9 +23,9 @@
23
  "phpstan/phpstan": "^0.12.55",
24
  "psr/log": "^1.0",
25
  "symfony/phpunit-bridge": "^4.2 || ^5",
26
- "symfony/process": "^2.5 || ^3.0 || ^4.0 || ^5.0"
27
  },
28
- "time": "2021-01-12T12:10:35+00:00",
29
  "type": "library",
30
  "extra": {
31
  "branch-alias": {
@@ -56,6 +56,20 @@
56
  "certificate",
57
  "ssl",
58
  "tls"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
59
  ]
60
  },
61
  {
1
  [
2
  {
3
  "name": "composer/ca-bundle",
4
+ "version": "1.3.1",
5
+ "version_normalized": "1.3.1.0",
6
  "source": {
7
  "type": "git",
8
  "url": "https://github.com/composer/ca-bundle.git",
9
+ "reference": "4c679186f2aca4ab6a0f1b0b9cf9252decb44d0b"
10
  },
11
  "dist": {
12
  "type": "zip",
13
+ "url": "https://api.github.com/repos/composer/ca-bundle/zipball/4c679186f2aca4ab6a0f1b0b9cf9252decb44d0b",
14
+ "reference": "4c679186f2aca4ab6a0f1b0b9cf9252decb44d0b",
15
  "shasum": ""
16
  },
17
  "require": {
23
  "phpstan/phpstan": "^0.12.55",
24
  "psr/log": "^1.0",
25
  "symfony/phpunit-bridge": "^4.2 || ^5",
26
+ "symfony/process": "^2.5 || ^3.0 || ^4.0 || ^5.0 || ^6.0"
27
  },
28
+ "time": "2021-10-28T20:44:15+00:00",
29
  "type": "library",
30
  "extra": {
31
  "branch-alias": {
56
  "certificate",
57
  "ssl",
58
  "tls"
59
+ ],
60
+ "funding": [
61
+ {
62
+ "url": "https://packagist.com",
63
+ "type": "custom"
64
+ },
65
+ {
66
+ "url": "https://github.com/composer",
67
+ "type": "github"
68
+ },
69
+ {
70
+ "url": "https://tidelift.com/funding/github/packagist/composer/composer",
71
+ "type": "tidelift"
72
+ }
73
  ]
74
  },
75
  {
vendor/geoip2/geoip2/src/Model/AbstractModel.php CHANGED
@@ -60,6 +60,8 @@ abstract class AbstractModel implements \JsonSerializable
60
  return $attr !== 'instance' && isset($this->$attr);
61
  }
62
 
 
 
63
  public function jsonSerialize()
64
  {
65
  return $this->raw;
60
  return $attr !== 'instance' && isset($this->$attr);
61
  }
62
 
63
+ // PHP 8.1 : jsonSerialize(): mixed
64
+ #[\ReturnTypeWillChange]
65
  public function jsonSerialize()
66
  {
67
  return $this->raw;
vendor/geoip2/geoip2/src/Record/AbstractRecord.php CHANGED
@@ -54,6 +54,7 @@ abstract class AbstractRecord implements \JsonSerializable
54
  return \in_array($attr, $this->validAttributes, true);
55
  }
56
 
 
57
  public function jsonSerialize()
58
  {
59
  return $this->record;
54
  return \in_array($attr, $this->validAttributes, true);
55
  }
56
 
57
+ #[\ReturnTypeWillChange]
58
  public function jsonSerialize()
59
  {
60
  return $this->record;
views/lookup.php CHANGED
@@ -6,6 +6,15 @@ $registry = DataSourceRegistry::getInstance();
6
  $current_source = $registry->getCurrentSource();
7
  $can_be_cached = $registry->isSourceCachable($current_source->getId());
8
 
 
 
 
 
 
 
 
 
 
9
 
10
  $is_ajax_enabled = !!get_option('geoip-detect-ajax_enabled');
11
 
@@ -57,7 +66,7 @@ function var_export_short($data, $return=true)
57
  </p>
58
 
59
  <p>
60
- <b><?= __('Your current IP:', 'geoip-detect');?></b> <?php echo geoip_detect2_get_client_ip(); ?>
61
  <a href="options-general.php?page=<?php echo GEOIP_PLUGIN_BASENAME ?>&geoip_detect_part=client-ip">(<?= __('Not correct?', 'geoip-detect');?>)</a>
62
  <?php if (geoip_detect_is_internal_ip(geoip_detect2_get_client_ip())) : ?>
63
  <br><i>(<?php printf(__('This is an IP internal to your network. When looking up this IP, it will use the external IP of the server instead: %s', 'geoip-detect'), geoip_detect2_get_external_ip_adress()); ?>)</i>
@@ -84,6 +93,7 @@ function var_export_short($data, $return=true)
84
  </select>
85
  </label><br>
86
  <label><input type="checkbox" name="skip_cache" value="1" <?php if (!empty($_POST['skip_cache'])) echo 'checked="checked"'?>/><?= __('Skip cache', 'geoip-detect')?></label><br />
 
87
  <br />
88
  <input type="submit" class="button button-primary" value="<?= __('Lookup', 'geoip-detect'); ?>" />
89
  </form>
@@ -109,7 +119,7 @@ function var_export_short($data, $return=true)
109
  <?php endif; ?>
110
  <p>
111
  <?php if ($_POST['syntax'] == 'php') : ?>
112
- <?php printf(__('The function %s returns an object:', 'geoip-detect'), "<code>\$record = geoip_detect2_get_info_from_ip('" . esc_html($request_ip) . "', " . var_export_short($request_locales, true) . ($request_skipCache ? ', [ \'skipCache\' => TRUE ]' : '') .");</code>"); ?><br />
113
  <?= sprintf(__('See %s for more information.', 'geoip-detect'), '<a href="https://github.com/yellowtree/geoip-detect/wiki/API:-PHP">API: PHP</a>'); ?>
114
  <?php elseif ($_POST['syntax'] == 'shortcode') : ?>
115
  <?= sprintf(__('You can use the following shortcodes.', 'geoip-detect')); ?><br />
@@ -120,8 +130,9 @@ function var_export_short($data, $return=true)
120
  <?php endif; ?>
121
  </p>
122
  <p>
123
- <?php printf(__('Lookup duration: %.5f s', 'geoip-detect'), $ip_lookup_duration); ?>
124
- <?php if ($record->extra->cached) : ?><i><?= __('(From cache.)', 'geoip-detect');?></i><?php endif; ?>
 
125
  </p>
126
  <?php if ($record->isEmpty) : ?>
127
  <p class="geoip_detect_error">
6
  $current_source = $registry->getCurrentSource();
7
  $can_be_cached = $registry->isSourceCachable($current_source->getId());
8
 
9
+ if (!empty($request_ip)) {
10
+ $code = "<code>\$record = ";
11
+ if ($request_ip == $current_ip) {
12
+ $code .= "geoip_detect2_get_info_from_current_ip(";
13
+ } else {
14
+ $code .= "geoip_detect2_get_info_from_ip('" . esc_html($request_ip) . "', ";
15
+ }
16
+ $code .= var_export_short($request_locales, true) . ($request_skipCache ? ', [ \'skipCache\' => TRUE ]' : '') .");</code>";
17
+ }
18
 
19
  $is_ajax_enabled = !!get_option('geoip-detect-ajax_enabled');
20
 
66
  </p>
67
 
68
  <p>
69
+ <b><?= __('Your current IP:', 'geoip-detect');?></b> <?php echo $current_ip; ?>
70
  <a href="options-general.php?page=<?php echo GEOIP_PLUGIN_BASENAME ?>&geoip_detect_part=client-ip">(<?= __('Not correct?', 'geoip-detect');?>)</a>
71
  <?php if (geoip_detect_is_internal_ip(geoip_detect2_get_client_ip())) : ?>
72
  <br><i>(<?php printf(__('This is an IP internal to your network. When looking up this IP, it will use the external IP of the server instead: %s', 'geoip-detect'), geoip_detect2_get_external_ip_adress()); ?>)</i>
93
  </select>
94
  </label><br>
95
  <label><input type="checkbox" name="skip_cache" value="1" <?php if (!empty($_POST['skip_cache'])) echo 'checked="checked"'?>/><?= __('Skip cache', 'geoip-detect')?></label><br />
96
+ <label><input type="checkbox" name="skip_local_cache" value="1" <?php if (!empty($_POST['skip_local_cache'])) echo 'checked="checked"'?>/><?= __('Skip local cache (only works for <code>geoip_detect2_get_info_from_current_ip</code>)', 'geoip-detect')?></label><br />
97
  <br />
98
  <input type="submit" class="button button-primary" value="<?= __('Lookup', 'geoip-detect'); ?>" />
99
  </form>
119
  <?php endif; ?>
120
  <p>
121
  <?php if ($_POST['syntax'] == 'php') : ?>
122
+ <?php printf(__('The function %s returns an object:', 'geoip-detect'), $code); ?><br />
123
  <?= sprintf(__('See %s for more information.', 'geoip-detect'), '<a href="https://github.com/yellowtree/geoip-detect/wiki/API:-PHP">API: PHP</a>'); ?>
124
  <?php elseif ($_POST['syntax'] == 'shortcode') : ?>
125
  <?= sprintf(__('You can use the following shortcodes.', 'geoip-detect')); ?><br />
130
  <?php endif; ?>
131
  </p>
132
  <p>
133
+ <?php printf(__('Lookup duration: %.2f ms', 'geoip-detect'), $ip_lookup_duration * 1000); ?>
134
+ <?php if ($record->extra->cached) : ?><i><?= __('(From cache.)', 'geoip-detect');?></i><?php endif; ?><br>
135
+ <?php printf(__('Lookup duration when called for the second time in the same request: %.4f ms', 'geoip-detect'), $ip_lookup_2nd_duration * 1000); ?>
136
  </p>
137
  <?php if ($record->isEmpty) : ?>
138
  <p class="geoip_detect_error">