@vezham/docs-core 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (201) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +5 -0
  3. package/dist/advanced-Ct13khZr.js +79 -0
  4. package/dist/algolia-C0E5qQhM.d.ts +66 -0
  5. package/dist/breadcrumb.d.ts +46 -0
  6. package/dist/breadcrumb.js +59 -0
  7. package/dist/build-doc-4OvfjVN2.js +85 -0
  8. package/dist/client-kQ39Ub0-.d.ts +247 -0
  9. package/dist/codeblock-utils-CyP8qsYv.d.ts +29 -0
  10. package/dist/content/github.d.ts +41 -0
  11. package/dist/content/github.js +28 -0
  12. package/dist/content/md/frontmatter.d.ts +15 -0
  13. package/dist/content/md/frontmatter.js +24 -0
  14. package/dist/content/md.d.ts +24 -0
  15. package/dist/content/md.js +43 -0
  16. package/dist/content/mdx/preset-bundler.d.ts +29 -0
  17. package/dist/content/mdx/preset-bundler.js +39 -0
  18. package/dist/content/mdx/preset-runtime.d.ts +26 -0
  19. package/dist/content/mdx/preset-runtime.js +36 -0
  20. package/dist/content/toc.d.ts +19 -0
  21. package/dist/content/toc.js +14 -0
  22. package/dist/definitions-CFOhwE1k.d.ts +72 -0
  23. package/dist/dynamic-CTsodhTH.js +905 -0
  24. package/dist/dynamic-link.d.ts +12 -0
  25. package/dist/dynamic-link.js +31 -0
  26. package/dist/endpoint-MyoBU5IC.js +28 -0
  27. package/dist/framework/astro.d.ts +21 -0
  28. package/dist/framework/astro.js +52 -0
  29. package/dist/framework/index.d.ts +40 -0
  30. package/dist/framework/index.js +66 -0
  31. package/dist/framework/next.d.ts +10 -0
  32. package/dist/framework/next.js +19 -0
  33. package/dist/framework/react-router.d.ts +10 -0
  34. package/dist/framework/react-router.js +43 -0
  35. package/dist/framework/tanstack.d.ts +13 -0
  36. package/dist/framework/tanstack.js +54 -0
  37. package/dist/framework/waku.d.ts +10 -0
  38. package/dist/framework/waku.js +46 -0
  39. package/dist/highlight/client.d.ts +11 -0
  40. package/dist/highlight/client.js +15 -0
  41. package/dist/highlight/index.d.ts +31 -0
  42. package/dist/highlight/index.js +30 -0
  43. package/dist/highlight/shiki/full.d.ts +7 -0
  44. package/dist/highlight/shiki/full.js +23 -0
  45. package/dist/highlight/shiki/index.d.ts +2 -0
  46. package/dist/highlight/shiki/index.js +27 -0
  47. package/dist/highlight/shiki/react.d.ts +23 -0
  48. package/dist/highlight/shiki/react.js +50 -0
  49. package/dist/i18n/index.d.ts +2 -0
  50. package/dist/i18n/index.js +63 -0
  51. package/dist/i18n/middleware.d.ts +34 -0
  52. package/dist/i18n/middleware.js +3855 -0
  53. package/dist/icon-BILaoXeg.js +17 -0
  54. package/dist/index-B-0R0VbS.d.ts +18 -0
  55. package/dist/index-BM36H-xw.d.ts +36 -0
  56. package/dist/index-BMEUQz-F.d.ts +21 -0
  57. package/dist/index-DAYtLGbx.d.ts +16 -0
  58. package/dist/index-DIwKCYOz.d.ts +513 -0
  59. package/dist/index-DydiXvgS.d.ts +90 -0
  60. package/dist/index-E8Qh_yQs.d.ts +49 -0
  61. package/dist/is-equal-LdLqRs0o.js +8 -0
  62. package/dist/link.d.ts +17 -0
  63. package/dist/link.js +23 -0
  64. package/dist/mdx-plugins/codeblock-utils.d.ts +2 -0
  65. package/dist/mdx-plugins/codeblock-utils.js +68 -0
  66. package/dist/mdx-plugins/index.d.ts +20 -0
  67. package/dist/mdx-plugins/index.js +18 -0
  68. package/dist/mdx-plugins/rehype-code.core.d.ts +3 -0
  69. package/dist/mdx-plugins/rehype-code.core.js +3 -0
  70. package/dist/mdx-plugins/rehype-code.d.ts +4 -0
  71. package/dist/mdx-plugins/rehype-code.js +24 -0
  72. package/dist/mdx-plugins/rehype-toc.d.ts +2 -0
  73. package/dist/mdx-plugins/rehype-toc.js +139 -0
  74. package/dist/mdx-plugins/remark-admonition.d.ts +2 -0
  75. package/dist/mdx-plugins/remark-admonition.js +71 -0
  76. package/dist/mdx-plugins/remark-block-id.d.ts +37 -0
  77. package/dist/mdx-plugins/remark-block-id.js +41 -0
  78. package/dist/mdx-plugins/remark-code-tab.d.ts +2 -0
  79. package/dist/mdx-plugins/remark-code-tab.js +190 -0
  80. package/dist/mdx-plugins/remark-directive-admonition.d.ts +2 -0
  81. package/dist/mdx-plugins/remark-directive-admonition.js +57 -0
  82. package/dist/mdx-plugins/remark-feedback-block.d.ts +2 -0
  83. package/dist/mdx-plugins/remark-feedback-block.js +54 -0
  84. package/dist/mdx-plugins/remark-gfm.d.ts +2 -0
  85. package/dist/mdx-plugins/remark-gfm.js +2 -0
  86. package/dist/mdx-plugins/remark-heading.d.ts +2 -0
  87. package/dist/mdx-plugins/remark-heading.js +46 -0
  88. package/dist/mdx-plugins/remark-image.d.ts +2 -0
  89. package/dist/mdx-plugins/remark-image.js +167 -0
  90. package/dist/mdx-plugins/remark-llms.d.ts +2 -0
  91. package/dist/mdx-plugins/remark-llms.js +338 -0
  92. package/dist/mdx-plugins/remark-llms.runtime.d.ts +10 -0
  93. package/dist/mdx-plugins/remark-llms.runtime.js +24 -0
  94. package/dist/mdx-plugins/remark-mdx-files.d.ts +2 -0
  95. package/dist/mdx-plugins/remark-mdx-files.js +182 -0
  96. package/dist/mdx-plugins/remark-mdx-mermaid.d.ts +2 -0
  97. package/dist/mdx-plugins/remark-mdx-mermaid.js +28 -0
  98. package/dist/mdx-plugins/remark-npm.d.ts +2 -0
  99. package/dist/mdx-plugins/remark-npm.js +76 -0
  100. package/dist/mdx-plugins/remark-steps.d.ts +2 -0
  101. package/dist/mdx-plugins/remark-steps.js +93 -0
  102. package/dist/mdx-plugins/remark-structure.d.ts +2 -0
  103. package/dist/mdx-plugins/remark-structure.js +118 -0
  104. package/dist/mdx-plugins/stringifier.d.ts +2 -0
  105. package/dist/mdx-plugins/stringifier.js +91 -0
  106. package/dist/mdx-plugins/transformer-icon.d.ts +2 -0
  107. package/dist/mdx-plugins/transformer-icon.js +145 -0
  108. package/dist/negotiation/index.d.ts +17 -0
  109. package/dist/negotiation/index.js +378 -0
  110. package/dist/page-tree/index.d.ts +3 -0
  111. package/dist/page-tree/index.js +2 -0
  112. package/dist/path-1H5VzYiT.js +75 -0
  113. package/dist/rehype-code-D-RFJb9W.d.ts +14 -0
  114. package/dist/rehype-code.core-BUwNuchP.js +548 -0
  115. package/dist/rehype-code.core-BjH1uHWj.d.ts +115 -0
  116. package/dist/rehype-toc-K51AGb5U.d.ts +43 -0
  117. package/dist/remark-admonition-BwTcmI_S.d.ts +20 -0
  118. package/dist/remark-code-tab-DE_4bdnu.d.ts +34 -0
  119. package/dist/remark-directive-admonition-BLiJ5l43.d.ts +27 -0
  120. package/dist/remark-feedback-block-BxtINXN-.d.ts +45 -0
  121. package/dist/remark-gfm-DpVfAX1x.d.ts +2 -0
  122. package/dist/remark-heading-DEIzTkU5.d.ts +33 -0
  123. package/dist/remark-image-BI2S9LOb.d.ts +57 -0
  124. package/dist/remark-llms-bD3WvU2V.d.ts +73 -0
  125. package/dist/remark-mdx-files-Buvxc-sa.d.ts +54 -0
  126. package/dist/remark-mdx-mermaid-C1bCHHc6.d.ts +15 -0
  127. package/dist/remark-npm-BbpvkJaT.d.ts +31 -0
  128. package/dist/remark-steps-DqVEo0iq.d.ts +23 -0
  129. package/dist/remark-structure-CnHwvNZr.d.ts +87 -0
  130. package/dist/remove-markdown-DfKNMl9w.js +40 -0
  131. package/dist/remove-undefined-CzMSKybq.js +24 -0
  132. package/dist/rolldown-runtime-DC62tzP2.js +33 -0
  133. package/dist/search/algolia.d.ts +2 -0
  134. package/dist/search/algolia.js +75 -0
  135. package/dist/search/client/algolia.d.ts +2 -0
  136. package/dist/search/client/algolia.js +53 -0
  137. package/dist/search/client/fetch.d.ts +2 -0
  138. package/dist/search/client/fetch.js +28 -0
  139. package/dist/search/client/flexsearch-static.d.ts +2 -0
  140. package/dist/search/client/flexsearch-static.js +42 -0
  141. package/dist/search/client/mixedbread.d.ts +2 -0
  142. package/dist/search/client/mixedbread.js +65 -0
  143. package/dist/search/client/orama-cloud-legacy.d.ts +2 -0
  144. package/dist/search/client/orama-cloud-legacy.js +84 -0
  145. package/dist/search/client/orama-cloud.d.ts +2 -0
  146. package/dist/search/client/orama-cloud.js +86 -0
  147. package/dist/search/client/orama-static.d.ts +2 -0
  148. package/dist/search/client/orama-static.js +75 -0
  149. package/dist/search/client.d.ts +2 -0
  150. package/dist/search/client.js +97 -0
  151. package/dist/search/flexsearch.d.ts +56 -0
  152. package/dist/search/flexsearch.js +128 -0
  153. package/dist/search/index.d.ts +2 -0
  154. package/dist/search/index.js +74 -0
  155. package/dist/search/mixedbread.d.ts +49 -0
  156. package/dist/search/mixedbread.js +77 -0
  157. package/dist/search/orama-cloud-legacy.d.ts +75 -0
  158. package/dist/search/orama-cloud-legacy.js +48 -0
  159. package/dist/search/orama-cloud.d.ts +75 -0
  160. package/dist/search/orama-cloud.js +50 -0
  161. package/dist/search/server.d.ts +2 -0
  162. package/dist/search/server.js +237 -0
  163. package/dist/server-CCqACwlF.d.ts +165 -0
  164. package/dist/server.browser.d.ts +13 -0
  165. package/dist/server.browser.js +22 -0
  166. package/dist/server.d.ts +42 -0
  167. package/dist/server.js +398 -0
  168. package/dist/source/client/index.d.ts +2 -0
  169. package/dist/source/client/index.js +37 -0
  170. package/dist/source/dynamic.d.ts +2 -0
  171. package/dist/source/dynamic.js +2 -0
  172. package/dist/source/index.d.ts +2 -0
  173. package/dist/source/index.js +5 -0
  174. package/dist/source/llms.d.ts +2 -0
  175. package/dist/source/llms.js +74 -0
  176. package/dist/source/plugins/lucide-icons.d.ts +11 -0
  177. package/dist/source/plugins/lucide-icons.js +21 -0
  178. package/dist/source/plugins/slugs.d.ts +2 -0
  179. package/dist/source/plugins/slugs.js +75 -0
  180. package/dist/source/plugins/status-badges.d.ts +50 -0
  181. package/dist/source/plugins/status-badges.js +52 -0
  182. package/dist/source/schema.d.ts +30 -0
  183. package/dist/source/schema.js +28 -0
  184. package/dist/stringifier-B_QUcUyo.d.ts +63 -0
  185. package/dist/toc-CtW5lwA1.d.ts +64 -0
  186. package/dist/toc.d.ts +2 -0
  187. package/dist/toc.js +245 -0
  188. package/dist/transformer-icon-DlrneIS3.d.ts +17 -0
  189. package/dist/types-D89QoQR-.d.ts +4 -0
  190. package/dist/url-BVHvi3_K.js +29 -0
  191. package/dist/util-BDsqOxh3.d.ts +6 -0
  192. package/dist/util-DjBr9b3w.js +8 -0
  193. package/dist/utils/use-media-query.d.ts +4 -0
  194. package/dist/utils/use-media-query.js +20 -0
  195. package/dist/utils/use-on-change.d.ts +9 -0
  196. package/dist/utils/use-on-change.js +17 -0
  197. package/dist/utils-Bvy3V-fv.js +59 -0
  198. package/dist/utils-Cgs-6U-z.js +39 -0
  199. package/dist/utils-DEVq3cEC.js +151 -0
  200. package/dist/utils-Yx0IL9eW.js +48 -0
  201. package/package.json +251 -0
@@ -0,0 +1,3855 @@
1
+ import { NextResponse } from "next/server.js";
2
+ //#region ../../node_modules/.pnpm/@formatjs+fast-memoize@3.1.7/node_modules/@formatjs/fast-memoize/index.js
3
+ function memoize(fn, options) {
4
+ const cache = options && options.cache ? options.cache : cacheDefault;
5
+ const serializer = options && options.serializer ? options.serializer : serializerDefault;
6
+ return (options && options.strategy ? options.strategy : strategyDefault)(fn, {
7
+ cache,
8
+ serializer
9
+ });
10
+ }
11
+ function isPrimitive(value) {
12
+ return value == null || typeof value === "number" || typeof value === "boolean";
13
+ }
14
+ function monadic(fn, cache, serializer, arg) {
15
+ const cacheKey = isPrimitive(arg) ? arg : serializer(arg);
16
+ let computedValue = cache.get(cacheKey);
17
+ if (typeof computedValue === "undefined") {
18
+ computedValue = fn.call(this, arg);
19
+ cache.set(cacheKey, computedValue);
20
+ }
21
+ return computedValue;
22
+ }
23
+ function variadic(fn, cache, serializer) {
24
+ const args = Array.prototype.slice.call(arguments, 3);
25
+ const cacheKey = serializer(args);
26
+ let computedValue = cache.get(cacheKey);
27
+ if (typeof computedValue === "undefined") {
28
+ computedValue = fn.apply(this, args);
29
+ cache.set(cacheKey, computedValue);
30
+ }
31
+ return computedValue;
32
+ }
33
+ function assemble(fn, context, strategy, cache, serialize) {
34
+ return strategy.bind(context, fn, cache, serialize);
35
+ }
36
+ function strategyDefault(fn, options) {
37
+ const strategy = fn.length === 1 ? monadic : variadic;
38
+ return assemble(fn, this, strategy, options.cache.create(), options.serializer);
39
+ }
40
+ const serializerDefault = function() {
41
+ return JSON.stringify(arguments);
42
+ };
43
+ var ObjectWithoutPrototypeCache = class {
44
+ constructor() {
45
+ this.cache = Object.create(null);
46
+ }
47
+ get(key) {
48
+ return this.cache[key];
49
+ }
50
+ set(key, value) {
51
+ this.cache[key] = value;
52
+ }
53
+ };
54
+ const cacheDefault = { create: function create() {
55
+ return new ObjectWithoutPrototypeCache();
56
+ } };
57
+ //#endregion
58
+ //#region ../../node_modules/.pnpm/@formatjs+intl-localematcher@0.8.13/node_modules/@formatjs/intl-localematcher/index.js
59
+ /**
60
+ * http://ecma-international.org/ecma-402/7.0/index.html#sec-canonicalizelocalelist
61
+ * @param locales
62
+ */
63
+ function CanonicalizeLocaleList(locales) {
64
+ return Intl.getCanonicalLocales(locales);
65
+ }
66
+ const data = { supplemental: { languageMatching: { "written-new": [
67
+ { paradigmLocales: { _locales: "en en_GB es es_419 pt_BR pt_PT" } },
68
+ { $enUS: { _value: "AS+CA+GU+MH+MP+PH+PR+UM+US+VI" } },
69
+ { $cnsar: { _value: "HK+MO" } },
70
+ { $americas: { _value: "019" } },
71
+ { $maghreb: { _value: "MA+DZ+TN+LY+MR+EH" } },
72
+ { no: {
73
+ _desired: "nb",
74
+ _distance: "1"
75
+ } },
76
+ { bs: {
77
+ _desired: "hr",
78
+ _distance: "4"
79
+ } },
80
+ { bs: {
81
+ _desired: "sh",
82
+ _distance: "4"
83
+ } },
84
+ { hr: {
85
+ _desired: "sh",
86
+ _distance: "4"
87
+ } },
88
+ { sr: {
89
+ _desired: "sh",
90
+ _distance: "4"
91
+ } },
92
+ { aa: {
93
+ _desired: "ssy",
94
+ _distance: "4"
95
+ } },
96
+ { de: {
97
+ _desired: "gsw",
98
+ _distance: "4",
99
+ _oneway: "true"
100
+ } },
101
+ { de: {
102
+ _desired: "lb",
103
+ _distance: "4",
104
+ _oneway: "true"
105
+ } },
106
+ { no: {
107
+ _desired: "da",
108
+ _distance: "8"
109
+ } },
110
+ { nb: {
111
+ _desired: "da",
112
+ _distance: "8"
113
+ } },
114
+ { ru: {
115
+ _desired: "ab",
116
+ _distance: "30",
117
+ _oneway: "true"
118
+ } },
119
+ { en: {
120
+ _desired: "ach",
121
+ _distance: "30",
122
+ _oneway: "true"
123
+ } },
124
+ { nl: {
125
+ _desired: "af",
126
+ _distance: "20",
127
+ _oneway: "true"
128
+ } },
129
+ { en: {
130
+ _desired: "ak",
131
+ _distance: "30",
132
+ _oneway: "true"
133
+ } },
134
+ { en: {
135
+ _desired: "am",
136
+ _distance: "30",
137
+ _oneway: "true"
138
+ } },
139
+ { es: {
140
+ _desired: "ay",
141
+ _distance: "20",
142
+ _oneway: "true"
143
+ } },
144
+ { ru: {
145
+ _desired: "az",
146
+ _distance: "30",
147
+ _oneway: "true"
148
+ } },
149
+ { ur: {
150
+ _desired: "bal",
151
+ _distance: "20",
152
+ _oneway: "true"
153
+ } },
154
+ { ru: {
155
+ _desired: "be",
156
+ _distance: "20",
157
+ _oneway: "true"
158
+ } },
159
+ { en: {
160
+ _desired: "bem",
161
+ _distance: "30",
162
+ _oneway: "true"
163
+ } },
164
+ { hi: {
165
+ _desired: "bh",
166
+ _distance: "30",
167
+ _oneway: "true"
168
+ } },
169
+ { en: {
170
+ _desired: "bn",
171
+ _distance: "30",
172
+ _oneway: "true"
173
+ } },
174
+ { zh: {
175
+ _desired: "bo",
176
+ _distance: "20",
177
+ _oneway: "true"
178
+ } },
179
+ { fr: {
180
+ _desired: "br",
181
+ _distance: "20",
182
+ _oneway: "true"
183
+ } },
184
+ { es: {
185
+ _desired: "ca",
186
+ _distance: "20",
187
+ _oneway: "true"
188
+ } },
189
+ { fil: {
190
+ _desired: "ceb",
191
+ _distance: "30",
192
+ _oneway: "true"
193
+ } },
194
+ { en: {
195
+ _desired: "chr",
196
+ _distance: "20",
197
+ _oneway: "true"
198
+ } },
199
+ { ar: {
200
+ _desired: "ckb",
201
+ _distance: "30",
202
+ _oneway: "true"
203
+ } },
204
+ { fr: {
205
+ _desired: "co",
206
+ _distance: "20",
207
+ _oneway: "true"
208
+ } },
209
+ { fr: {
210
+ _desired: "crs",
211
+ _distance: "20",
212
+ _oneway: "true"
213
+ } },
214
+ { sk: {
215
+ _desired: "cs",
216
+ _distance: "20"
217
+ } },
218
+ { en: {
219
+ _desired: "cy",
220
+ _distance: "20",
221
+ _oneway: "true"
222
+ } },
223
+ { en: {
224
+ _desired: "ee",
225
+ _distance: "30",
226
+ _oneway: "true"
227
+ } },
228
+ { en: {
229
+ _desired: "eo",
230
+ _distance: "30",
231
+ _oneway: "true"
232
+ } },
233
+ { es: {
234
+ _desired: "eu",
235
+ _distance: "20",
236
+ _oneway: "true"
237
+ } },
238
+ { da: {
239
+ _desired: "fo",
240
+ _distance: "20",
241
+ _oneway: "true"
242
+ } },
243
+ { nl: {
244
+ _desired: "fy",
245
+ _distance: "20",
246
+ _oneway: "true"
247
+ } },
248
+ { en: {
249
+ _desired: "ga",
250
+ _distance: "20",
251
+ _oneway: "true"
252
+ } },
253
+ { en: {
254
+ _desired: "gaa",
255
+ _distance: "30",
256
+ _oneway: "true"
257
+ } },
258
+ { en: {
259
+ _desired: "gd",
260
+ _distance: "20",
261
+ _oneway: "true"
262
+ } },
263
+ { es: {
264
+ _desired: "gl",
265
+ _distance: "20",
266
+ _oneway: "true"
267
+ } },
268
+ { es: {
269
+ _desired: "gn",
270
+ _distance: "20",
271
+ _oneway: "true"
272
+ } },
273
+ { hi: {
274
+ _desired: "gu",
275
+ _distance: "30",
276
+ _oneway: "true"
277
+ } },
278
+ { en: {
279
+ _desired: "ha",
280
+ _distance: "30",
281
+ _oneway: "true"
282
+ } },
283
+ { en: {
284
+ _desired: "haw",
285
+ _distance: "20",
286
+ _oneway: "true"
287
+ } },
288
+ { fr: {
289
+ _desired: "ht",
290
+ _distance: "20",
291
+ _oneway: "true"
292
+ } },
293
+ { ru: {
294
+ _desired: "hy",
295
+ _distance: "30",
296
+ _oneway: "true"
297
+ } },
298
+ { en: {
299
+ _desired: "ia",
300
+ _distance: "30",
301
+ _oneway: "true"
302
+ } },
303
+ { en: {
304
+ _desired: "ig",
305
+ _distance: "30",
306
+ _oneway: "true"
307
+ } },
308
+ { en: {
309
+ _desired: "is",
310
+ _distance: "20",
311
+ _oneway: "true"
312
+ } },
313
+ { id: {
314
+ _desired: "jv",
315
+ _distance: "20",
316
+ _oneway: "true"
317
+ } },
318
+ { en: {
319
+ _desired: "ka",
320
+ _distance: "30",
321
+ _oneway: "true"
322
+ } },
323
+ { fr: {
324
+ _desired: "kg",
325
+ _distance: "30",
326
+ _oneway: "true"
327
+ } },
328
+ { ru: {
329
+ _desired: "kk",
330
+ _distance: "30",
331
+ _oneway: "true"
332
+ } },
333
+ { en: {
334
+ _desired: "km",
335
+ _distance: "30",
336
+ _oneway: "true"
337
+ } },
338
+ { en: {
339
+ _desired: "kn",
340
+ _distance: "30",
341
+ _oneway: "true"
342
+ } },
343
+ { en: {
344
+ _desired: "kri",
345
+ _distance: "30",
346
+ _oneway: "true"
347
+ } },
348
+ { tr: {
349
+ _desired: "ku",
350
+ _distance: "30",
351
+ _oneway: "true"
352
+ } },
353
+ { ru: {
354
+ _desired: "ky",
355
+ _distance: "30",
356
+ _oneway: "true"
357
+ } },
358
+ { it: {
359
+ _desired: "la",
360
+ _distance: "20",
361
+ _oneway: "true"
362
+ } },
363
+ { en: {
364
+ _desired: "lg",
365
+ _distance: "30",
366
+ _oneway: "true"
367
+ } },
368
+ { fr: {
369
+ _desired: "ln",
370
+ _distance: "30",
371
+ _oneway: "true"
372
+ } },
373
+ { en: {
374
+ _desired: "lo",
375
+ _distance: "30",
376
+ _oneway: "true"
377
+ } },
378
+ { en: {
379
+ _desired: "loz",
380
+ _distance: "30",
381
+ _oneway: "true"
382
+ } },
383
+ { fr: {
384
+ _desired: "lua",
385
+ _distance: "30",
386
+ _oneway: "true"
387
+ } },
388
+ { hi: {
389
+ _desired: "mai",
390
+ _distance: "20",
391
+ _oneway: "true"
392
+ } },
393
+ { en: {
394
+ _desired: "mfe",
395
+ _distance: "30",
396
+ _oneway: "true"
397
+ } },
398
+ { fr: {
399
+ _desired: "mg",
400
+ _distance: "30",
401
+ _oneway: "true"
402
+ } },
403
+ { en: {
404
+ _desired: "mi",
405
+ _distance: "20",
406
+ _oneway: "true"
407
+ } },
408
+ { en: {
409
+ _desired: "ml",
410
+ _distance: "30",
411
+ _oneway: "true"
412
+ } },
413
+ { ru: {
414
+ _desired: "mn",
415
+ _distance: "30",
416
+ _oneway: "true"
417
+ } },
418
+ { hi: {
419
+ _desired: "mr",
420
+ _distance: "30",
421
+ _oneway: "true"
422
+ } },
423
+ { id: {
424
+ _desired: "ms",
425
+ _distance: "30",
426
+ _oneway: "true"
427
+ } },
428
+ { en: {
429
+ _desired: "mt",
430
+ _distance: "30",
431
+ _oneway: "true"
432
+ } },
433
+ { en: {
434
+ _desired: "my",
435
+ _distance: "30",
436
+ _oneway: "true"
437
+ } },
438
+ { en: {
439
+ _desired: "ne",
440
+ _distance: "30",
441
+ _oneway: "true"
442
+ } },
443
+ { nb: {
444
+ _desired: "nn",
445
+ _distance: "20"
446
+ } },
447
+ { no: {
448
+ _desired: "nn",
449
+ _distance: "20"
450
+ } },
451
+ { en: {
452
+ _desired: "nso",
453
+ _distance: "30",
454
+ _oneway: "true"
455
+ } },
456
+ { en: {
457
+ _desired: "ny",
458
+ _distance: "30",
459
+ _oneway: "true"
460
+ } },
461
+ { en: {
462
+ _desired: "nyn",
463
+ _distance: "30",
464
+ _oneway: "true"
465
+ } },
466
+ { fr: {
467
+ _desired: "oc",
468
+ _distance: "20",
469
+ _oneway: "true"
470
+ } },
471
+ { en: {
472
+ _desired: "om",
473
+ _distance: "30",
474
+ _oneway: "true"
475
+ } },
476
+ { en: {
477
+ _desired: "or",
478
+ _distance: "30",
479
+ _oneway: "true"
480
+ } },
481
+ { en: {
482
+ _desired: "pa",
483
+ _distance: "30",
484
+ _oneway: "true"
485
+ } },
486
+ { en: {
487
+ _desired: "pcm",
488
+ _distance: "20",
489
+ _oneway: "true"
490
+ } },
491
+ { en: {
492
+ _desired: "ps",
493
+ _distance: "30",
494
+ _oneway: "true"
495
+ } },
496
+ { es: {
497
+ _desired: "qu",
498
+ _distance: "30",
499
+ _oneway: "true"
500
+ } },
501
+ { de: {
502
+ _desired: "rm",
503
+ _distance: "20",
504
+ _oneway: "true"
505
+ } },
506
+ { en: {
507
+ _desired: "rn",
508
+ _distance: "30",
509
+ _oneway: "true"
510
+ } },
511
+ { fr: {
512
+ _desired: "rw",
513
+ _distance: "30",
514
+ _oneway: "true"
515
+ } },
516
+ { hi: {
517
+ _desired: "sa",
518
+ _distance: "30",
519
+ _oneway: "true"
520
+ } },
521
+ { en: {
522
+ _desired: "sd",
523
+ _distance: "30",
524
+ _oneway: "true"
525
+ } },
526
+ { en: {
527
+ _desired: "si",
528
+ _distance: "30",
529
+ _oneway: "true"
530
+ } },
531
+ { en: {
532
+ _desired: "sn",
533
+ _distance: "30",
534
+ _oneway: "true"
535
+ } },
536
+ { en: {
537
+ _desired: "so",
538
+ _distance: "30",
539
+ _oneway: "true"
540
+ } },
541
+ { en: {
542
+ _desired: "sq",
543
+ _distance: "30",
544
+ _oneway: "true"
545
+ } },
546
+ { en: {
547
+ _desired: "st",
548
+ _distance: "30",
549
+ _oneway: "true"
550
+ } },
551
+ { id: {
552
+ _desired: "su",
553
+ _distance: "20",
554
+ _oneway: "true"
555
+ } },
556
+ { en: {
557
+ _desired: "sw",
558
+ _distance: "30",
559
+ _oneway: "true"
560
+ } },
561
+ { en: {
562
+ _desired: "ta",
563
+ _distance: "30",
564
+ _oneway: "true"
565
+ } },
566
+ { en: {
567
+ _desired: "te",
568
+ _distance: "30",
569
+ _oneway: "true"
570
+ } },
571
+ { ru: {
572
+ _desired: "tg",
573
+ _distance: "30",
574
+ _oneway: "true"
575
+ } },
576
+ { en: {
577
+ _desired: "ti",
578
+ _distance: "30",
579
+ _oneway: "true"
580
+ } },
581
+ { ru: {
582
+ _desired: "tk",
583
+ _distance: "30",
584
+ _oneway: "true"
585
+ } },
586
+ { en: {
587
+ _desired: "tlh",
588
+ _distance: "30",
589
+ _oneway: "true"
590
+ } },
591
+ { en: {
592
+ _desired: "tn",
593
+ _distance: "30",
594
+ _oneway: "true"
595
+ } },
596
+ { en: {
597
+ _desired: "to",
598
+ _distance: "30",
599
+ _oneway: "true"
600
+ } },
601
+ { ru: {
602
+ _desired: "tt",
603
+ _distance: "30",
604
+ _oneway: "true"
605
+ } },
606
+ { en: {
607
+ _desired: "tum",
608
+ _distance: "30",
609
+ _oneway: "true"
610
+ } },
611
+ { zh: {
612
+ _desired: "ug",
613
+ _distance: "20",
614
+ _oneway: "true"
615
+ } },
616
+ { ru: {
617
+ _desired: "uk",
618
+ _distance: "20",
619
+ _oneway: "true"
620
+ } },
621
+ { en: {
622
+ _desired: "ur",
623
+ _distance: "30",
624
+ _oneway: "true"
625
+ } },
626
+ { ru: {
627
+ _desired: "uz",
628
+ _distance: "30",
629
+ _oneway: "true"
630
+ } },
631
+ { fr: {
632
+ _desired: "wo",
633
+ _distance: "30",
634
+ _oneway: "true"
635
+ } },
636
+ { en: {
637
+ _desired: "xh",
638
+ _distance: "30",
639
+ _oneway: "true"
640
+ } },
641
+ { en: {
642
+ _desired: "yi",
643
+ _distance: "30",
644
+ _oneway: "true"
645
+ } },
646
+ { en: {
647
+ _desired: "yo",
648
+ _distance: "30",
649
+ _oneway: "true"
650
+ } },
651
+ { zh: {
652
+ _desired: "za",
653
+ _distance: "20",
654
+ _oneway: "true"
655
+ } },
656
+ { en: {
657
+ _desired: "zu",
658
+ _distance: "30",
659
+ _oneway: "true"
660
+ } },
661
+ { ar: {
662
+ _desired: "aao",
663
+ _distance: "10",
664
+ _oneway: "true"
665
+ } },
666
+ { ar: {
667
+ _desired: "abh",
668
+ _distance: "10",
669
+ _oneway: "true"
670
+ } },
671
+ { ar: {
672
+ _desired: "abv",
673
+ _distance: "10",
674
+ _oneway: "true"
675
+ } },
676
+ { ar: {
677
+ _desired: "acm",
678
+ _distance: "10",
679
+ _oneway: "true"
680
+ } },
681
+ { ar: {
682
+ _desired: "acq",
683
+ _distance: "10",
684
+ _oneway: "true"
685
+ } },
686
+ { ar: {
687
+ _desired: "acw",
688
+ _distance: "10",
689
+ _oneway: "true"
690
+ } },
691
+ { ar: {
692
+ _desired: "acx",
693
+ _distance: "10",
694
+ _oneway: "true"
695
+ } },
696
+ { ar: {
697
+ _desired: "acy",
698
+ _distance: "10",
699
+ _oneway: "true"
700
+ } },
701
+ { ar: {
702
+ _desired: "adf",
703
+ _distance: "10",
704
+ _oneway: "true"
705
+ } },
706
+ { ar: {
707
+ _desired: "aeb",
708
+ _distance: "10",
709
+ _oneway: "true"
710
+ } },
711
+ { ar: {
712
+ _desired: "aec",
713
+ _distance: "10",
714
+ _oneway: "true"
715
+ } },
716
+ { ar: {
717
+ _desired: "afb",
718
+ _distance: "10",
719
+ _oneway: "true"
720
+ } },
721
+ { ar: {
722
+ _desired: "ajp",
723
+ _distance: "10",
724
+ _oneway: "true"
725
+ } },
726
+ { ar: {
727
+ _desired: "apc",
728
+ _distance: "10",
729
+ _oneway: "true"
730
+ } },
731
+ { ar: {
732
+ _desired: "apd",
733
+ _distance: "10",
734
+ _oneway: "true"
735
+ } },
736
+ { ar: {
737
+ _desired: "arq",
738
+ _distance: "10",
739
+ _oneway: "true"
740
+ } },
741
+ { ar: {
742
+ _desired: "ars",
743
+ _distance: "10",
744
+ _oneway: "true"
745
+ } },
746
+ { ar: {
747
+ _desired: "ary",
748
+ _distance: "10",
749
+ _oneway: "true"
750
+ } },
751
+ { ar: {
752
+ _desired: "arz",
753
+ _distance: "10",
754
+ _oneway: "true"
755
+ } },
756
+ { ar: {
757
+ _desired: "auz",
758
+ _distance: "10",
759
+ _oneway: "true"
760
+ } },
761
+ { ar: {
762
+ _desired: "avl",
763
+ _distance: "10",
764
+ _oneway: "true"
765
+ } },
766
+ { ar: {
767
+ _desired: "ayh",
768
+ _distance: "10",
769
+ _oneway: "true"
770
+ } },
771
+ { ar: {
772
+ _desired: "ayl",
773
+ _distance: "10",
774
+ _oneway: "true"
775
+ } },
776
+ { ar: {
777
+ _desired: "ayn",
778
+ _distance: "10",
779
+ _oneway: "true"
780
+ } },
781
+ { ar: {
782
+ _desired: "ayp",
783
+ _distance: "10",
784
+ _oneway: "true"
785
+ } },
786
+ { ar: {
787
+ _desired: "bbz",
788
+ _distance: "10",
789
+ _oneway: "true"
790
+ } },
791
+ { ar: {
792
+ _desired: "pga",
793
+ _distance: "10",
794
+ _oneway: "true"
795
+ } },
796
+ { ar: {
797
+ _desired: "shu",
798
+ _distance: "10",
799
+ _oneway: "true"
800
+ } },
801
+ { ar: {
802
+ _desired: "ssh",
803
+ _distance: "10",
804
+ _oneway: "true"
805
+ } },
806
+ { az: {
807
+ _desired: "azb",
808
+ _distance: "10",
809
+ _oneway: "true"
810
+ } },
811
+ { et: {
812
+ _desired: "vro",
813
+ _distance: "10",
814
+ _oneway: "true"
815
+ } },
816
+ { ff: {
817
+ _desired: "ffm",
818
+ _distance: "10",
819
+ _oneway: "true"
820
+ } },
821
+ { ff: {
822
+ _desired: "fub",
823
+ _distance: "10",
824
+ _oneway: "true"
825
+ } },
826
+ { ff: {
827
+ _desired: "fue",
828
+ _distance: "10",
829
+ _oneway: "true"
830
+ } },
831
+ { ff: {
832
+ _desired: "fuf",
833
+ _distance: "10",
834
+ _oneway: "true"
835
+ } },
836
+ { ff: {
837
+ _desired: "fuh",
838
+ _distance: "10",
839
+ _oneway: "true"
840
+ } },
841
+ { ff: {
842
+ _desired: "fui",
843
+ _distance: "10",
844
+ _oneway: "true"
845
+ } },
846
+ { ff: {
847
+ _desired: "fuq",
848
+ _distance: "10",
849
+ _oneway: "true"
850
+ } },
851
+ { ff: {
852
+ _desired: "fuv",
853
+ _distance: "10",
854
+ _oneway: "true"
855
+ } },
856
+ { gn: {
857
+ _desired: "gnw",
858
+ _distance: "10",
859
+ _oneway: "true"
860
+ } },
861
+ { gn: {
862
+ _desired: "gui",
863
+ _distance: "10",
864
+ _oneway: "true"
865
+ } },
866
+ { gn: {
867
+ _desired: "gun",
868
+ _distance: "10",
869
+ _oneway: "true"
870
+ } },
871
+ { gn: {
872
+ _desired: "nhd",
873
+ _distance: "10",
874
+ _oneway: "true"
875
+ } },
876
+ { iu: {
877
+ _desired: "ikt",
878
+ _distance: "10",
879
+ _oneway: "true"
880
+ } },
881
+ { kln: {
882
+ _desired: "enb",
883
+ _distance: "10",
884
+ _oneway: "true"
885
+ } },
886
+ { kln: {
887
+ _desired: "eyo",
888
+ _distance: "10",
889
+ _oneway: "true"
890
+ } },
891
+ { kln: {
892
+ _desired: "niq",
893
+ _distance: "10",
894
+ _oneway: "true"
895
+ } },
896
+ { kln: {
897
+ _desired: "oki",
898
+ _distance: "10",
899
+ _oneway: "true"
900
+ } },
901
+ { kln: {
902
+ _desired: "pko",
903
+ _distance: "10",
904
+ _oneway: "true"
905
+ } },
906
+ { kln: {
907
+ _desired: "sgc",
908
+ _distance: "10",
909
+ _oneway: "true"
910
+ } },
911
+ { kln: {
912
+ _desired: "tec",
913
+ _distance: "10",
914
+ _oneway: "true"
915
+ } },
916
+ { kln: {
917
+ _desired: "tuy",
918
+ _distance: "10",
919
+ _oneway: "true"
920
+ } },
921
+ { kok: {
922
+ _desired: "gom",
923
+ _distance: "10",
924
+ _oneway: "true"
925
+ } },
926
+ { kpe: {
927
+ _desired: "gkp",
928
+ _distance: "10",
929
+ _oneway: "true"
930
+ } },
931
+ { luy: {
932
+ _desired: "ida",
933
+ _distance: "10",
934
+ _oneway: "true"
935
+ } },
936
+ { luy: {
937
+ _desired: "lkb",
938
+ _distance: "10",
939
+ _oneway: "true"
940
+ } },
941
+ { luy: {
942
+ _desired: "lko",
943
+ _distance: "10",
944
+ _oneway: "true"
945
+ } },
946
+ { luy: {
947
+ _desired: "lks",
948
+ _distance: "10",
949
+ _oneway: "true"
950
+ } },
951
+ { luy: {
952
+ _desired: "lri",
953
+ _distance: "10",
954
+ _oneway: "true"
955
+ } },
956
+ { luy: {
957
+ _desired: "lrm",
958
+ _distance: "10",
959
+ _oneway: "true"
960
+ } },
961
+ { luy: {
962
+ _desired: "lsm",
963
+ _distance: "10",
964
+ _oneway: "true"
965
+ } },
966
+ { luy: {
967
+ _desired: "lto",
968
+ _distance: "10",
969
+ _oneway: "true"
970
+ } },
971
+ { luy: {
972
+ _desired: "lts",
973
+ _distance: "10",
974
+ _oneway: "true"
975
+ } },
976
+ { luy: {
977
+ _desired: "lwg",
978
+ _distance: "10",
979
+ _oneway: "true"
980
+ } },
981
+ { luy: {
982
+ _desired: "nle",
983
+ _distance: "10",
984
+ _oneway: "true"
985
+ } },
986
+ { luy: {
987
+ _desired: "nyd",
988
+ _distance: "10",
989
+ _oneway: "true"
990
+ } },
991
+ { luy: {
992
+ _desired: "rag",
993
+ _distance: "10",
994
+ _oneway: "true"
995
+ } },
996
+ { lv: {
997
+ _desired: "ltg",
998
+ _distance: "10",
999
+ _oneway: "true"
1000
+ } },
1001
+ { mg: {
1002
+ _desired: "bhr",
1003
+ _distance: "10",
1004
+ _oneway: "true"
1005
+ } },
1006
+ { mg: {
1007
+ _desired: "bjq",
1008
+ _distance: "10",
1009
+ _oneway: "true"
1010
+ } },
1011
+ { mg: {
1012
+ _desired: "bmm",
1013
+ _distance: "10",
1014
+ _oneway: "true"
1015
+ } },
1016
+ { mg: {
1017
+ _desired: "bzc",
1018
+ _distance: "10",
1019
+ _oneway: "true"
1020
+ } },
1021
+ { mg: {
1022
+ _desired: "msh",
1023
+ _distance: "10",
1024
+ _oneway: "true"
1025
+ } },
1026
+ { mg: {
1027
+ _desired: "skg",
1028
+ _distance: "10",
1029
+ _oneway: "true"
1030
+ } },
1031
+ { mg: {
1032
+ _desired: "tdx",
1033
+ _distance: "10",
1034
+ _oneway: "true"
1035
+ } },
1036
+ { mg: {
1037
+ _desired: "tkg",
1038
+ _distance: "10",
1039
+ _oneway: "true"
1040
+ } },
1041
+ { mg: {
1042
+ _desired: "txy",
1043
+ _distance: "10",
1044
+ _oneway: "true"
1045
+ } },
1046
+ { mg: {
1047
+ _desired: "xmv",
1048
+ _distance: "10",
1049
+ _oneway: "true"
1050
+ } },
1051
+ { mg: {
1052
+ _desired: "xmw",
1053
+ _distance: "10",
1054
+ _oneway: "true"
1055
+ } },
1056
+ { mn: {
1057
+ _desired: "mvf",
1058
+ _distance: "10",
1059
+ _oneway: "true"
1060
+ } },
1061
+ { ms: {
1062
+ _desired: "bjn",
1063
+ _distance: "10",
1064
+ _oneway: "true"
1065
+ } },
1066
+ { ms: {
1067
+ _desired: "btj",
1068
+ _distance: "10",
1069
+ _oneway: "true"
1070
+ } },
1071
+ { ms: {
1072
+ _desired: "bve",
1073
+ _distance: "10",
1074
+ _oneway: "true"
1075
+ } },
1076
+ { ms: {
1077
+ _desired: "bvu",
1078
+ _distance: "10",
1079
+ _oneway: "true"
1080
+ } },
1081
+ { ms: {
1082
+ _desired: "coa",
1083
+ _distance: "10",
1084
+ _oneway: "true"
1085
+ } },
1086
+ { ms: {
1087
+ _desired: "dup",
1088
+ _distance: "10",
1089
+ _oneway: "true"
1090
+ } },
1091
+ { ms: {
1092
+ _desired: "hji",
1093
+ _distance: "10",
1094
+ _oneway: "true"
1095
+ } },
1096
+ { ms: {
1097
+ _desired: "id",
1098
+ _distance: "10",
1099
+ _oneway: "true"
1100
+ } },
1101
+ { ms: {
1102
+ _desired: "jak",
1103
+ _distance: "10",
1104
+ _oneway: "true"
1105
+ } },
1106
+ { ms: {
1107
+ _desired: "jax",
1108
+ _distance: "10",
1109
+ _oneway: "true"
1110
+ } },
1111
+ { ms: {
1112
+ _desired: "kvb",
1113
+ _distance: "10",
1114
+ _oneway: "true"
1115
+ } },
1116
+ { ms: {
1117
+ _desired: "kvr",
1118
+ _distance: "10",
1119
+ _oneway: "true"
1120
+ } },
1121
+ { ms: {
1122
+ _desired: "kxd",
1123
+ _distance: "10",
1124
+ _oneway: "true"
1125
+ } },
1126
+ { ms: {
1127
+ _desired: "lce",
1128
+ _distance: "10",
1129
+ _oneway: "true"
1130
+ } },
1131
+ { ms: {
1132
+ _desired: "lcf",
1133
+ _distance: "10",
1134
+ _oneway: "true"
1135
+ } },
1136
+ { ms: {
1137
+ _desired: "liw",
1138
+ _distance: "10",
1139
+ _oneway: "true"
1140
+ } },
1141
+ { ms: {
1142
+ _desired: "max",
1143
+ _distance: "10",
1144
+ _oneway: "true"
1145
+ } },
1146
+ { ms: {
1147
+ _desired: "meo",
1148
+ _distance: "10",
1149
+ _oneway: "true"
1150
+ } },
1151
+ { ms: {
1152
+ _desired: "mfa",
1153
+ _distance: "10",
1154
+ _oneway: "true"
1155
+ } },
1156
+ { ms: {
1157
+ _desired: "mfb",
1158
+ _distance: "10",
1159
+ _oneway: "true"
1160
+ } },
1161
+ { ms: {
1162
+ _desired: "min",
1163
+ _distance: "10",
1164
+ _oneway: "true"
1165
+ } },
1166
+ { ms: {
1167
+ _desired: "mqg",
1168
+ _distance: "10",
1169
+ _oneway: "true"
1170
+ } },
1171
+ { ms: {
1172
+ _desired: "msi",
1173
+ _distance: "10",
1174
+ _oneway: "true"
1175
+ } },
1176
+ { ms: {
1177
+ _desired: "mui",
1178
+ _distance: "10",
1179
+ _oneway: "true"
1180
+ } },
1181
+ { ms: {
1182
+ _desired: "orn",
1183
+ _distance: "10",
1184
+ _oneway: "true"
1185
+ } },
1186
+ { ms: {
1187
+ _desired: "ors",
1188
+ _distance: "10",
1189
+ _oneway: "true"
1190
+ } },
1191
+ { ms: {
1192
+ _desired: "pel",
1193
+ _distance: "10",
1194
+ _oneway: "true"
1195
+ } },
1196
+ { ms: {
1197
+ _desired: "pse",
1198
+ _distance: "10",
1199
+ _oneway: "true"
1200
+ } },
1201
+ { ms: {
1202
+ _desired: "tmw",
1203
+ _distance: "10",
1204
+ _oneway: "true"
1205
+ } },
1206
+ { ms: {
1207
+ _desired: "urk",
1208
+ _distance: "10",
1209
+ _oneway: "true"
1210
+ } },
1211
+ { ms: {
1212
+ _desired: "vkk",
1213
+ _distance: "10",
1214
+ _oneway: "true"
1215
+ } },
1216
+ { ms: {
1217
+ _desired: "vkt",
1218
+ _distance: "10",
1219
+ _oneway: "true"
1220
+ } },
1221
+ { ms: {
1222
+ _desired: "xmm",
1223
+ _distance: "10",
1224
+ _oneway: "true"
1225
+ } },
1226
+ { ms: {
1227
+ _desired: "zlm",
1228
+ _distance: "10",
1229
+ _oneway: "true"
1230
+ } },
1231
+ { ms: {
1232
+ _desired: "zmi",
1233
+ _distance: "10",
1234
+ _oneway: "true"
1235
+ } },
1236
+ { ne: {
1237
+ _desired: "dty",
1238
+ _distance: "10",
1239
+ _oneway: "true"
1240
+ } },
1241
+ { om: {
1242
+ _desired: "gax",
1243
+ _distance: "10",
1244
+ _oneway: "true"
1245
+ } },
1246
+ { om: {
1247
+ _desired: "hae",
1248
+ _distance: "10",
1249
+ _oneway: "true"
1250
+ } },
1251
+ { om: {
1252
+ _desired: "orc",
1253
+ _distance: "10",
1254
+ _oneway: "true"
1255
+ } },
1256
+ { or: {
1257
+ _desired: "spv",
1258
+ _distance: "10",
1259
+ _oneway: "true"
1260
+ } },
1261
+ { ps: {
1262
+ _desired: "pbt",
1263
+ _distance: "10",
1264
+ _oneway: "true"
1265
+ } },
1266
+ { ps: {
1267
+ _desired: "pst",
1268
+ _distance: "10",
1269
+ _oneway: "true"
1270
+ } },
1271
+ { qu: {
1272
+ _desired: "qub",
1273
+ _distance: "10",
1274
+ _oneway: "true"
1275
+ } },
1276
+ { qu: {
1277
+ _desired: "qud",
1278
+ _distance: "10",
1279
+ _oneway: "true"
1280
+ } },
1281
+ { qu: {
1282
+ _desired: "quf",
1283
+ _distance: "10",
1284
+ _oneway: "true"
1285
+ } },
1286
+ { qu: {
1287
+ _desired: "qug",
1288
+ _distance: "10",
1289
+ _oneway: "true"
1290
+ } },
1291
+ { qu: {
1292
+ _desired: "quh",
1293
+ _distance: "10",
1294
+ _oneway: "true"
1295
+ } },
1296
+ { qu: {
1297
+ _desired: "quk",
1298
+ _distance: "10",
1299
+ _oneway: "true"
1300
+ } },
1301
+ { qu: {
1302
+ _desired: "qul",
1303
+ _distance: "10",
1304
+ _oneway: "true"
1305
+ } },
1306
+ { qu: {
1307
+ _desired: "qup",
1308
+ _distance: "10",
1309
+ _oneway: "true"
1310
+ } },
1311
+ { qu: {
1312
+ _desired: "qur",
1313
+ _distance: "10",
1314
+ _oneway: "true"
1315
+ } },
1316
+ { qu: {
1317
+ _desired: "qus",
1318
+ _distance: "10",
1319
+ _oneway: "true"
1320
+ } },
1321
+ { qu: {
1322
+ _desired: "quw",
1323
+ _distance: "10",
1324
+ _oneway: "true"
1325
+ } },
1326
+ { qu: {
1327
+ _desired: "qux",
1328
+ _distance: "10",
1329
+ _oneway: "true"
1330
+ } },
1331
+ { qu: {
1332
+ _desired: "quy",
1333
+ _distance: "10",
1334
+ _oneway: "true"
1335
+ } },
1336
+ { qu: {
1337
+ _desired: "qva",
1338
+ _distance: "10",
1339
+ _oneway: "true"
1340
+ } },
1341
+ { qu: {
1342
+ _desired: "qvc",
1343
+ _distance: "10",
1344
+ _oneway: "true"
1345
+ } },
1346
+ { qu: {
1347
+ _desired: "qve",
1348
+ _distance: "10",
1349
+ _oneway: "true"
1350
+ } },
1351
+ { qu: {
1352
+ _desired: "qvh",
1353
+ _distance: "10",
1354
+ _oneway: "true"
1355
+ } },
1356
+ { qu: {
1357
+ _desired: "qvi",
1358
+ _distance: "10",
1359
+ _oneway: "true"
1360
+ } },
1361
+ { qu: {
1362
+ _desired: "qvj",
1363
+ _distance: "10",
1364
+ _oneway: "true"
1365
+ } },
1366
+ { qu: {
1367
+ _desired: "qvl",
1368
+ _distance: "10",
1369
+ _oneway: "true"
1370
+ } },
1371
+ { qu: {
1372
+ _desired: "qvm",
1373
+ _distance: "10",
1374
+ _oneway: "true"
1375
+ } },
1376
+ { qu: {
1377
+ _desired: "qvn",
1378
+ _distance: "10",
1379
+ _oneway: "true"
1380
+ } },
1381
+ { qu: {
1382
+ _desired: "qvo",
1383
+ _distance: "10",
1384
+ _oneway: "true"
1385
+ } },
1386
+ { qu: {
1387
+ _desired: "qvp",
1388
+ _distance: "10",
1389
+ _oneway: "true"
1390
+ } },
1391
+ { qu: {
1392
+ _desired: "qvs",
1393
+ _distance: "10",
1394
+ _oneway: "true"
1395
+ } },
1396
+ { qu: {
1397
+ _desired: "qvw",
1398
+ _distance: "10",
1399
+ _oneway: "true"
1400
+ } },
1401
+ { qu: {
1402
+ _desired: "qvz",
1403
+ _distance: "10",
1404
+ _oneway: "true"
1405
+ } },
1406
+ { qu: {
1407
+ _desired: "qwa",
1408
+ _distance: "10",
1409
+ _oneway: "true"
1410
+ } },
1411
+ { qu: {
1412
+ _desired: "qwc",
1413
+ _distance: "10",
1414
+ _oneway: "true"
1415
+ } },
1416
+ { qu: {
1417
+ _desired: "qwh",
1418
+ _distance: "10",
1419
+ _oneway: "true"
1420
+ } },
1421
+ { qu: {
1422
+ _desired: "qws",
1423
+ _distance: "10",
1424
+ _oneway: "true"
1425
+ } },
1426
+ { qu: {
1427
+ _desired: "qxa",
1428
+ _distance: "10",
1429
+ _oneway: "true"
1430
+ } },
1431
+ { qu: {
1432
+ _desired: "qxc",
1433
+ _distance: "10",
1434
+ _oneway: "true"
1435
+ } },
1436
+ { qu: {
1437
+ _desired: "qxh",
1438
+ _distance: "10",
1439
+ _oneway: "true"
1440
+ } },
1441
+ { qu: {
1442
+ _desired: "qxl",
1443
+ _distance: "10",
1444
+ _oneway: "true"
1445
+ } },
1446
+ { qu: {
1447
+ _desired: "qxn",
1448
+ _distance: "10",
1449
+ _oneway: "true"
1450
+ } },
1451
+ { qu: {
1452
+ _desired: "qxo",
1453
+ _distance: "10",
1454
+ _oneway: "true"
1455
+ } },
1456
+ { qu: {
1457
+ _desired: "qxp",
1458
+ _distance: "10",
1459
+ _oneway: "true"
1460
+ } },
1461
+ { qu: {
1462
+ _desired: "qxr",
1463
+ _distance: "10",
1464
+ _oneway: "true"
1465
+ } },
1466
+ { qu: {
1467
+ _desired: "qxt",
1468
+ _distance: "10",
1469
+ _oneway: "true"
1470
+ } },
1471
+ { qu: {
1472
+ _desired: "qxu",
1473
+ _distance: "10",
1474
+ _oneway: "true"
1475
+ } },
1476
+ { qu: {
1477
+ _desired: "qxw",
1478
+ _distance: "10",
1479
+ _oneway: "true"
1480
+ } },
1481
+ { sc: {
1482
+ _desired: "sdc",
1483
+ _distance: "10",
1484
+ _oneway: "true"
1485
+ } },
1486
+ { sc: {
1487
+ _desired: "sdn",
1488
+ _distance: "10",
1489
+ _oneway: "true"
1490
+ } },
1491
+ { sc: {
1492
+ _desired: "sro",
1493
+ _distance: "10",
1494
+ _oneway: "true"
1495
+ } },
1496
+ { sq: {
1497
+ _desired: "aae",
1498
+ _distance: "10",
1499
+ _oneway: "true"
1500
+ } },
1501
+ { sq: {
1502
+ _desired: "aat",
1503
+ _distance: "10",
1504
+ _oneway: "true"
1505
+ } },
1506
+ { sq: {
1507
+ _desired: "aln",
1508
+ _distance: "10",
1509
+ _oneway: "true"
1510
+ } },
1511
+ { syr: {
1512
+ _desired: "aii",
1513
+ _distance: "10",
1514
+ _oneway: "true"
1515
+ } },
1516
+ { uz: {
1517
+ _desired: "uzs",
1518
+ _distance: "10",
1519
+ _oneway: "true"
1520
+ } },
1521
+ { yi: {
1522
+ _desired: "yih",
1523
+ _distance: "10",
1524
+ _oneway: "true"
1525
+ } },
1526
+ { zh: {
1527
+ _desired: "cdo",
1528
+ _distance: "10",
1529
+ _oneway: "true"
1530
+ } },
1531
+ { zh: {
1532
+ _desired: "cjy",
1533
+ _distance: "10",
1534
+ _oneway: "true"
1535
+ } },
1536
+ { zh: {
1537
+ _desired: "cpx",
1538
+ _distance: "10",
1539
+ _oneway: "true"
1540
+ } },
1541
+ { zh: {
1542
+ _desired: "czh",
1543
+ _distance: "10",
1544
+ _oneway: "true"
1545
+ } },
1546
+ { zh: {
1547
+ _desired: "czo",
1548
+ _distance: "10",
1549
+ _oneway: "true"
1550
+ } },
1551
+ { zh: {
1552
+ _desired: "gan",
1553
+ _distance: "10",
1554
+ _oneway: "true"
1555
+ } },
1556
+ { zh: {
1557
+ _desired: "hak",
1558
+ _distance: "10",
1559
+ _oneway: "true"
1560
+ } },
1561
+ { zh: {
1562
+ _desired: "hsn",
1563
+ _distance: "10",
1564
+ _oneway: "true"
1565
+ } },
1566
+ { zh: {
1567
+ _desired: "lzh",
1568
+ _distance: "10",
1569
+ _oneway: "true"
1570
+ } },
1571
+ { zh: {
1572
+ _desired: "mnp",
1573
+ _distance: "10",
1574
+ _oneway: "true"
1575
+ } },
1576
+ { zh: {
1577
+ _desired: "nan",
1578
+ _distance: "10",
1579
+ _oneway: "true"
1580
+ } },
1581
+ { zh: {
1582
+ _desired: "wuu",
1583
+ _distance: "10",
1584
+ _oneway: "true"
1585
+ } },
1586
+ { zh: {
1587
+ _desired: "yue",
1588
+ _distance: "10",
1589
+ _oneway: "true"
1590
+ } },
1591
+ { "*": {
1592
+ _desired: "*",
1593
+ _distance: "80"
1594
+ } },
1595
+ { "en-Latn": {
1596
+ _desired: "am-Ethi",
1597
+ _distance: "10",
1598
+ _oneway: "true"
1599
+ } },
1600
+ { "ru-Cyrl": {
1601
+ _desired: "az-Latn",
1602
+ _distance: "10",
1603
+ _oneway: "true"
1604
+ } },
1605
+ { "en-Latn": {
1606
+ _desired: "bn-Beng",
1607
+ _distance: "10",
1608
+ _oneway: "true"
1609
+ } },
1610
+ { "zh-Hans": {
1611
+ _desired: "bo-Tibt",
1612
+ _distance: "10",
1613
+ _oneway: "true"
1614
+ } },
1615
+ { "ru-Cyrl": {
1616
+ _desired: "hy-Armn",
1617
+ _distance: "10",
1618
+ _oneway: "true"
1619
+ } },
1620
+ { "en-Latn": {
1621
+ _desired: "ka-Geor",
1622
+ _distance: "10",
1623
+ _oneway: "true"
1624
+ } },
1625
+ { "en-Latn": {
1626
+ _desired: "km-Khmr",
1627
+ _distance: "10",
1628
+ _oneway: "true"
1629
+ } },
1630
+ { "en-Latn": {
1631
+ _desired: "kn-Knda",
1632
+ _distance: "10",
1633
+ _oneway: "true"
1634
+ } },
1635
+ { "en-Latn": {
1636
+ _desired: "lo-Laoo",
1637
+ _distance: "10",
1638
+ _oneway: "true"
1639
+ } },
1640
+ { "en-Latn": {
1641
+ _desired: "ml-Mlym",
1642
+ _distance: "10",
1643
+ _oneway: "true"
1644
+ } },
1645
+ { "en-Latn": {
1646
+ _desired: "my-Mymr",
1647
+ _distance: "10",
1648
+ _oneway: "true"
1649
+ } },
1650
+ { "en-Latn": {
1651
+ _desired: "ne-Deva",
1652
+ _distance: "10",
1653
+ _oneway: "true"
1654
+ } },
1655
+ { "en-Latn": {
1656
+ _desired: "or-Orya",
1657
+ _distance: "10",
1658
+ _oneway: "true"
1659
+ } },
1660
+ { "en-Latn": {
1661
+ _desired: "pa-Guru",
1662
+ _distance: "10",
1663
+ _oneway: "true"
1664
+ } },
1665
+ { "en-Latn": {
1666
+ _desired: "ps-Arab",
1667
+ _distance: "10",
1668
+ _oneway: "true"
1669
+ } },
1670
+ { "en-Latn": {
1671
+ _desired: "sd-Arab",
1672
+ _distance: "10",
1673
+ _oneway: "true"
1674
+ } },
1675
+ { "en-Latn": {
1676
+ _desired: "si-Sinh",
1677
+ _distance: "10",
1678
+ _oneway: "true"
1679
+ } },
1680
+ { "en-Latn": {
1681
+ _desired: "ta-Taml",
1682
+ _distance: "10",
1683
+ _oneway: "true"
1684
+ } },
1685
+ { "en-Latn": {
1686
+ _desired: "te-Telu",
1687
+ _distance: "10",
1688
+ _oneway: "true"
1689
+ } },
1690
+ { "en-Latn": {
1691
+ _desired: "ti-Ethi",
1692
+ _distance: "10",
1693
+ _oneway: "true"
1694
+ } },
1695
+ { "ru-Cyrl": {
1696
+ _desired: "tk-Latn",
1697
+ _distance: "10",
1698
+ _oneway: "true"
1699
+ } },
1700
+ { "en-Latn": {
1701
+ _desired: "ur-Arab",
1702
+ _distance: "10",
1703
+ _oneway: "true"
1704
+ } },
1705
+ { "ru-Cyrl": {
1706
+ _desired: "uz-Latn",
1707
+ _distance: "10",
1708
+ _oneway: "true"
1709
+ } },
1710
+ { "en-Latn": {
1711
+ _desired: "yi-Hebr",
1712
+ _distance: "10",
1713
+ _oneway: "true"
1714
+ } },
1715
+ { "sr-Cyrl": {
1716
+ _desired: "sr-Latn",
1717
+ _distance: "5"
1718
+ } },
1719
+ { "zh-Hans": {
1720
+ _desired: "za-Latn",
1721
+ _distance: "10",
1722
+ _oneway: "true"
1723
+ } },
1724
+ { "zh-Hans": {
1725
+ _desired: "zh-Hani",
1726
+ _distance: "20",
1727
+ _oneway: "true"
1728
+ } },
1729
+ { "zh-Hant": {
1730
+ _desired: "zh-Hani",
1731
+ _distance: "20",
1732
+ _oneway: "true"
1733
+ } },
1734
+ { "ar-Arab": {
1735
+ _desired: "ar-Latn",
1736
+ _distance: "20",
1737
+ _oneway: "true"
1738
+ } },
1739
+ { "bn-Beng": {
1740
+ _desired: "bn-Latn",
1741
+ _distance: "20",
1742
+ _oneway: "true"
1743
+ } },
1744
+ { "gu-Gujr": {
1745
+ _desired: "gu-Latn",
1746
+ _distance: "20",
1747
+ _oneway: "true"
1748
+ } },
1749
+ { "hi-Deva": {
1750
+ _desired: "hi-Latn",
1751
+ _distance: "20",
1752
+ _oneway: "true"
1753
+ } },
1754
+ { "kn-Knda": {
1755
+ _desired: "kn-Latn",
1756
+ _distance: "20",
1757
+ _oneway: "true"
1758
+ } },
1759
+ { "ml-Mlym": {
1760
+ _desired: "ml-Latn",
1761
+ _distance: "20",
1762
+ _oneway: "true"
1763
+ } },
1764
+ { "mr-Deva": {
1765
+ _desired: "mr-Latn",
1766
+ _distance: "20",
1767
+ _oneway: "true"
1768
+ } },
1769
+ { "ta-Taml": {
1770
+ _desired: "ta-Latn",
1771
+ _distance: "20",
1772
+ _oneway: "true"
1773
+ } },
1774
+ { "te-Telu": {
1775
+ _desired: "te-Latn",
1776
+ _distance: "20",
1777
+ _oneway: "true"
1778
+ } },
1779
+ { "zh-Hans": {
1780
+ _desired: "zh-Latn",
1781
+ _distance: "20",
1782
+ _oneway: "true"
1783
+ } },
1784
+ { "ja-Jpan": {
1785
+ _desired: "ja-Latn",
1786
+ _distance: "5",
1787
+ _oneway: "true"
1788
+ } },
1789
+ { "ja-Jpan": {
1790
+ _desired: "ja-Hani",
1791
+ _distance: "5",
1792
+ _oneway: "true"
1793
+ } },
1794
+ { "ja-Jpan": {
1795
+ _desired: "ja-Hira",
1796
+ _distance: "5",
1797
+ _oneway: "true"
1798
+ } },
1799
+ { "ja-Jpan": {
1800
+ _desired: "ja-Kana",
1801
+ _distance: "5",
1802
+ _oneway: "true"
1803
+ } },
1804
+ { "ja-Jpan": {
1805
+ _desired: "ja-Hrkt",
1806
+ _distance: "5",
1807
+ _oneway: "true"
1808
+ } },
1809
+ { "ja-Hrkt": {
1810
+ _desired: "ja-Hira",
1811
+ _distance: "5",
1812
+ _oneway: "true"
1813
+ } },
1814
+ { "ja-Hrkt": {
1815
+ _desired: "ja-Kana",
1816
+ _distance: "5",
1817
+ _oneway: "true"
1818
+ } },
1819
+ { "ko-Kore": {
1820
+ _desired: "ko-Hani",
1821
+ _distance: "5",
1822
+ _oneway: "true"
1823
+ } },
1824
+ { "ko-Kore": {
1825
+ _desired: "ko-Hang",
1826
+ _distance: "5",
1827
+ _oneway: "true"
1828
+ } },
1829
+ { "ko-Kore": {
1830
+ _desired: "ko-Jamo",
1831
+ _distance: "5",
1832
+ _oneway: "true"
1833
+ } },
1834
+ { "ko-Hang": {
1835
+ _desired: "ko-Jamo",
1836
+ _distance: "5",
1837
+ _oneway: "true"
1838
+ } },
1839
+ { "*-*": {
1840
+ _desired: "*-*",
1841
+ _distance: "50"
1842
+ } },
1843
+ { "ar-*-$maghreb": {
1844
+ _desired: "ar-*-$maghreb",
1845
+ _distance: "4"
1846
+ } },
1847
+ { "ar-*-$!maghreb": {
1848
+ _desired: "ar-*-$!maghreb",
1849
+ _distance: "4"
1850
+ } },
1851
+ { "ar-*-*": {
1852
+ _desired: "ar-*-*",
1853
+ _distance: "5"
1854
+ } },
1855
+ { "en-*-$enUS": {
1856
+ _desired: "en-*-$enUS",
1857
+ _distance: "4"
1858
+ } },
1859
+ { "en-*-GB": {
1860
+ _desired: "en-*-$!enUS",
1861
+ _distance: "3"
1862
+ } },
1863
+ { "en-*-$!enUS": {
1864
+ _desired: "en-*-$!enUS",
1865
+ _distance: "4"
1866
+ } },
1867
+ { "en-*-*": {
1868
+ _desired: "en-*-*",
1869
+ _distance: "5"
1870
+ } },
1871
+ { "es-*-$americas": {
1872
+ _desired: "es-*-$americas",
1873
+ _distance: "4"
1874
+ } },
1875
+ { "es-*-$!americas": {
1876
+ _desired: "es-*-$!americas",
1877
+ _distance: "4"
1878
+ } },
1879
+ { "es-*-*": {
1880
+ _desired: "es-*-*",
1881
+ _distance: "5"
1882
+ } },
1883
+ { "pt-*-$americas": {
1884
+ _desired: "pt-*-$americas",
1885
+ _distance: "4"
1886
+ } },
1887
+ { "pt-*-$!americas": {
1888
+ _desired: "pt-*-$!americas",
1889
+ _distance: "4"
1890
+ } },
1891
+ { "pt-*-*": {
1892
+ _desired: "pt-*-*",
1893
+ _distance: "5"
1894
+ } },
1895
+ { "zh-Hant-$cnsar": {
1896
+ _desired: "zh-Hant-$cnsar",
1897
+ _distance: "4"
1898
+ } },
1899
+ { "zh-Hant-$!cnsar": {
1900
+ _desired: "zh-Hant-$!cnsar",
1901
+ _distance: "4"
1902
+ } },
1903
+ { "zh-Hant-*": {
1904
+ _desired: "zh-Hant-*",
1905
+ _distance: "5"
1906
+ } },
1907
+ { "*-*-*": {
1908
+ _desired: "*-*-*",
1909
+ _distance: "4"
1910
+ } }
1911
+ ] } } };
1912
+ const regions = {
1913
+ "001": [
1914
+ "001",
1915
+ "001-status-grouping",
1916
+ "002",
1917
+ "005",
1918
+ "009",
1919
+ "011",
1920
+ "013",
1921
+ "014",
1922
+ "015",
1923
+ "017",
1924
+ "018",
1925
+ "019",
1926
+ "021",
1927
+ "029",
1928
+ "030",
1929
+ "034",
1930
+ "035",
1931
+ "039",
1932
+ "053",
1933
+ "054",
1934
+ "057",
1935
+ "061",
1936
+ "142",
1937
+ "143",
1938
+ "145",
1939
+ "150",
1940
+ "151",
1941
+ "154",
1942
+ "155",
1943
+ "AC",
1944
+ "AD",
1945
+ "AE",
1946
+ "AF",
1947
+ "AG",
1948
+ "AI",
1949
+ "AL",
1950
+ "AM",
1951
+ "AO",
1952
+ "AQ",
1953
+ "AR",
1954
+ "AS",
1955
+ "AT",
1956
+ "AU",
1957
+ "AW",
1958
+ "AX",
1959
+ "AZ",
1960
+ "BA",
1961
+ "BB",
1962
+ "BD",
1963
+ "BE",
1964
+ "BF",
1965
+ "BG",
1966
+ "BH",
1967
+ "BI",
1968
+ "BJ",
1969
+ "BL",
1970
+ "BM",
1971
+ "BN",
1972
+ "BO",
1973
+ "BQ",
1974
+ "BR",
1975
+ "BS",
1976
+ "BT",
1977
+ "BV",
1978
+ "BW",
1979
+ "BY",
1980
+ "BZ",
1981
+ "CA",
1982
+ "CC",
1983
+ "CD",
1984
+ "CF",
1985
+ "CG",
1986
+ "CH",
1987
+ "CI",
1988
+ "CK",
1989
+ "CL",
1990
+ "CM",
1991
+ "CN",
1992
+ "CO",
1993
+ "CP",
1994
+ "CQ",
1995
+ "CR",
1996
+ "CU",
1997
+ "CV",
1998
+ "CW",
1999
+ "CX",
2000
+ "CY",
2001
+ "CZ",
2002
+ "DE",
2003
+ "DG",
2004
+ "DJ",
2005
+ "DK",
2006
+ "DM",
2007
+ "DO",
2008
+ "DZ",
2009
+ "EA",
2010
+ "EC",
2011
+ "EE",
2012
+ "EG",
2013
+ "EH",
2014
+ "ER",
2015
+ "ES",
2016
+ "ET",
2017
+ "EU",
2018
+ "EZ",
2019
+ "FI",
2020
+ "FJ",
2021
+ "FK",
2022
+ "FM",
2023
+ "FO",
2024
+ "FR",
2025
+ "GA",
2026
+ "GB",
2027
+ "GD",
2028
+ "GE",
2029
+ "GF",
2030
+ "GG",
2031
+ "GH",
2032
+ "GI",
2033
+ "GL",
2034
+ "GM",
2035
+ "GN",
2036
+ "GP",
2037
+ "GQ",
2038
+ "GR",
2039
+ "GS",
2040
+ "GT",
2041
+ "GU",
2042
+ "GW",
2043
+ "GY",
2044
+ "HK",
2045
+ "HM",
2046
+ "HN",
2047
+ "HR",
2048
+ "HT",
2049
+ "HU",
2050
+ "IC",
2051
+ "ID",
2052
+ "IE",
2053
+ "IL",
2054
+ "IM",
2055
+ "IN",
2056
+ "IO",
2057
+ "IQ",
2058
+ "IR",
2059
+ "IS",
2060
+ "IT",
2061
+ "JE",
2062
+ "JM",
2063
+ "JO",
2064
+ "JP",
2065
+ "KE",
2066
+ "KG",
2067
+ "KH",
2068
+ "KI",
2069
+ "KM",
2070
+ "KN",
2071
+ "KP",
2072
+ "KR",
2073
+ "KW",
2074
+ "KY",
2075
+ "KZ",
2076
+ "LA",
2077
+ "LB",
2078
+ "LC",
2079
+ "LI",
2080
+ "LK",
2081
+ "LR",
2082
+ "LS",
2083
+ "LT",
2084
+ "LU",
2085
+ "LV",
2086
+ "LY",
2087
+ "MA",
2088
+ "MC",
2089
+ "MD",
2090
+ "ME",
2091
+ "MF",
2092
+ "MG",
2093
+ "MH",
2094
+ "MK",
2095
+ "ML",
2096
+ "MM",
2097
+ "MN",
2098
+ "MO",
2099
+ "MP",
2100
+ "MQ",
2101
+ "MR",
2102
+ "MS",
2103
+ "MT",
2104
+ "MU",
2105
+ "MV",
2106
+ "MW",
2107
+ "MX",
2108
+ "MY",
2109
+ "MZ",
2110
+ "NA",
2111
+ "NC",
2112
+ "NE",
2113
+ "NF",
2114
+ "NG",
2115
+ "NI",
2116
+ "NL",
2117
+ "NO",
2118
+ "NP",
2119
+ "NR",
2120
+ "NU",
2121
+ "NZ",
2122
+ "OM",
2123
+ "PA",
2124
+ "PE",
2125
+ "PF",
2126
+ "PG",
2127
+ "PH",
2128
+ "PK",
2129
+ "PL",
2130
+ "PM",
2131
+ "PN",
2132
+ "PR",
2133
+ "PS",
2134
+ "PT",
2135
+ "PW",
2136
+ "PY",
2137
+ "QA",
2138
+ "QO",
2139
+ "RE",
2140
+ "RO",
2141
+ "RS",
2142
+ "RU",
2143
+ "RW",
2144
+ "SA",
2145
+ "SB",
2146
+ "SC",
2147
+ "SD",
2148
+ "SE",
2149
+ "SG",
2150
+ "SH",
2151
+ "SI",
2152
+ "SJ",
2153
+ "SK",
2154
+ "SL",
2155
+ "SM",
2156
+ "SN",
2157
+ "SO",
2158
+ "SR",
2159
+ "SS",
2160
+ "ST",
2161
+ "SV",
2162
+ "SX",
2163
+ "SY",
2164
+ "SZ",
2165
+ "TA",
2166
+ "TC",
2167
+ "TD",
2168
+ "TF",
2169
+ "TG",
2170
+ "TH",
2171
+ "TJ",
2172
+ "TK",
2173
+ "TL",
2174
+ "TM",
2175
+ "TN",
2176
+ "TO",
2177
+ "TR",
2178
+ "TT",
2179
+ "TV",
2180
+ "TW",
2181
+ "TZ",
2182
+ "UA",
2183
+ "UG",
2184
+ "UM",
2185
+ "UN",
2186
+ "US",
2187
+ "UY",
2188
+ "UZ",
2189
+ "VA",
2190
+ "VC",
2191
+ "VE",
2192
+ "VG",
2193
+ "VI",
2194
+ "VN",
2195
+ "VU",
2196
+ "WF",
2197
+ "WS",
2198
+ "XK",
2199
+ "YE",
2200
+ "YT",
2201
+ "ZA",
2202
+ "ZM",
2203
+ "ZW"
2204
+ ],
2205
+ "002": [
2206
+ "002",
2207
+ "002-status-grouping",
2208
+ "011",
2209
+ "014",
2210
+ "015",
2211
+ "017",
2212
+ "018",
2213
+ "202",
2214
+ "AO",
2215
+ "BF",
2216
+ "BI",
2217
+ "BJ",
2218
+ "BW",
2219
+ "CD",
2220
+ "CF",
2221
+ "CG",
2222
+ "CI",
2223
+ "CM",
2224
+ "CV",
2225
+ "DJ",
2226
+ "DZ",
2227
+ "EA",
2228
+ "EG",
2229
+ "EH",
2230
+ "ER",
2231
+ "ET",
2232
+ "GA",
2233
+ "GH",
2234
+ "GM",
2235
+ "GN",
2236
+ "GQ",
2237
+ "GW",
2238
+ "IC",
2239
+ "IO",
2240
+ "KE",
2241
+ "KM",
2242
+ "LR",
2243
+ "LS",
2244
+ "LY",
2245
+ "MA",
2246
+ "MG",
2247
+ "ML",
2248
+ "MR",
2249
+ "MU",
2250
+ "MW",
2251
+ "MZ",
2252
+ "NA",
2253
+ "NE",
2254
+ "NG",
2255
+ "RE",
2256
+ "RW",
2257
+ "SC",
2258
+ "SD",
2259
+ "SH",
2260
+ "SL",
2261
+ "SN",
2262
+ "SO",
2263
+ "SS",
2264
+ "ST",
2265
+ "SZ",
2266
+ "TD",
2267
+ "TF",
2268
+ "TG",
2269
+ "TN",
2270
+ "TZ",
2271
+ "UG",
2272
+ "YT",
2273
+ "ZA",
2274
+ "ZM",
2275
+ "ZW"
2276
+ ],
2277
+ "003": [
2278
+ "003",
2279
+ "013",
2280
+ "021",
2281
+ "029",
2282
+ "AG",
2283
+ "AI",
2284
+ "AW",
2285
+ "BB",
2286
+ "BL",
2287
+ "BM",
2288
+ "BQ",
2289
+ "BS",
2290
+ "BZ",
2291
+ "CA",
2292
+ "CR",
2293
+ "CU",
2294
+ "CW",
2295
+ "DM",
2296
+ "DO",
2297
+ "GD",
2298
+ "GL",
2299
+ "GP",
2300
+ "GT",
2301
+ "HN",
2302
+ "HT",
2303
+ "JM",
2304
+ "KN",
2305
+ "KY",
2306
+ "LC",
2307
+ "MF",
2308
+ "MQ",
2309
+ "MS",
2310
+ "MX",
2311
+ "NI",
2312
+ "PA",
2313
+ "PM",
2314
+ "PR",
2315
+ "SV",
2316
+ "SX",
2317
+ "TC",
2318
+ "TT",
2319
+ "US",
2320
+ "VC",
2321
+ "VG",
2322
+ "VI"
2323
+ ],
2324
+ "005": [
2325
+ "005",
2326
+ "AR",
2327
+ "BO",
2328
+ "BR",
2329
+ "BV",
2330
+ "CL",
2331
+ "CO",
2332
+ "EC",
2333
+ "FK",
2334
+ "GF",
2335
+ "GS",
2336
+ "GY",
2337
+ "PE",
2338
+ "PY",
2339
+ "SR",
2340
+ "UY",
2341
+ "VE"
2342
+ ],
2343
+ "009": [
2344
+ "009",
2345
+ "053",
2346
+ "054",
2347
+ "057",
2348
+ "061",
2349
+ "AC",
2350
+ "AQ",
2351
+ "AS",
2352
+ "AU",
2353
+ "CC",
2354
+ "CK",
2355
+ "CP",
2356
+ "CX",
2357
+ "DG",
2358
+ "FJ",
2359
+ "FM",
2360
+ "GU",
2361
+ "HM",
2362
+ "KI",
2363
+ "MH",
2364
+ "MP",
2365
+ "NC",
2366
+ "NF",
2367
+ "NR",
2368
+ "NU",
2369
+ "NZ",
2370
+ "PF",
2371
+ "PG",
2372
+ "PN",
2373
+ "PW",
2374
+ "QO",
2375
+ "SB",
2376
+ "TA",
2377
+ "TK",
2378
+ "TO",
2379
+ "TV",
2380
+ "UM",
2381
+ "VU",
2382
+ "WF",
2383
+ "WS"
2384
+ ],
2385
+ "011": [
2386
+ "011",
2387
+ "BF",
2388
+ "BJ",
2389
+ "CI",
2390
+ "CV",
2391
+ "GH",
2392
+ "GM",
2393
+ "GN",
2394
+ "GW",
2395
+ "LR",
2396
+ "ML",
2397
+ "MR",
2398
+ "NE",
2399
+ "NG",
2400
+ "SH",
2401
+ "SL",
2402
+ "SN",
2403
+ "TG"
2404
+ ],
2405
+ "013": [
2406
+ "013",
2407
+ "BZ",
2408
+ "CR",
2409
+ "GT",
2410
+ "HN",
2411
+ "MX",
2412
+ "NI",
2413
+ "PA",
2414
+ "SV"
2415
+ ],
2416
+ "014": [
2417
+ "014",
2418
+ "BI",
2419
+ "DJ",
2420
+ "ER",
2421
+ "ET",
2422
+ "IO",
2423
+ "KE",
2424
+ "KM",
2425
+ "MG",
2426
+ "MU",
2427
+ "MW",
2428
+ "MZ",
2429
+ "RE",
2430
+ "RW",
2431
+ "SC",
2432
+ "SO",
2433
+ "SS",
2434
+ "TF",
2435
+ "TZ",
2436
+ "UG",
2437
+ "YT",
2438
+ "ZM",
2439
+ "ZW"
2440
+ ],
2441
+ "015": [
2442
+ "015",
2443
+ "DZ",
2444
+ "EA",
2445
+ "EG",
2446
+ "EH",
2447
+ "IC",
2448
+ "LY",
2449
+ "MA",
2450
+ "SD",
2451
+ "TN"
2452
+ ],
2453
+ "017": [
2454
+ "017",
2455
+ "AO",
2456
+ "CD",
2457
+ "CF",
2458
+ "CG",
2459
+ "CM",
2460
+ "GA",
2461
+ "GQ",
2462
+ "ST",
2463
+ "TD"
2464
+ ],
2465
+ "018": [
2466
+ "018",
2467
+ "BW",
2468
+ "LS",
2469
+ "NA",
2470
+ "SZ",
2471
+ "ZA"
2472
+ ],
2473
+ "019": [
2474
+ "003",
2475
+ "005",
2476
+ "013",
2477
+ "019",
2478
+ "019-status-grouping",
2479
+ "021",
2480
+ "029",
2481
+ "419",
2482
+ "AG",
2483
+ "AI",
2484
+ "AR",
2485
+ "AW",
2486
+ "BB",
2487
+ "BL",
2488
+ "BM",
2489
+ "BO",
2490
+ "BQ",
2491
+ "BR",
2492
+ "BS",
2493
+ "BV",
2494
+ "BZ",
2495
+ "CA",
2496
+ "CL",
2497
+ "CO",
2498
+ "CR",
2499
+ "CU",
2500
+ "CW",
2501
+ "DM",
2502
+ "DO",
2503
+ "EC",
2504
+ "FK",
2505
+ "GD",
2506
+ "GF",
2507
+ "GL",
2508
+ "GP",
2509
+ "GS",
2510
+ "GT",
2511
+ "GY",
2512
+ "HN",
2513
+ "HT",
2514
+ "JM",
2515
+ "KN",
2516
+ "KY",
2517
+ "LC",
2518
+ "MF",
2519
+ "MQ",
2520
+ "MS",
2521
+ "MX",
2522
+ "NI",
2523
+ "PA",
2524
+ "PE",
2525
+ "PM",
2526
+ "PR",
2527
+ "PY",
2528
+ "SR",
2529
+ "SV",
2530
+ "SX",
2531
+ "TC",
2532
+ "TT",
2533
+ "US",
2534
+ "UY",
2535
+ "VC",
2536
+ "VE",
2537
+ "VG",
2538
+ "VI"
2539
+ ],
2540
+ "021": [
2541
+ "021",
2542
+ "BM",
2543
+ "CA",
2544
+ "GL",
2545
+ "PM",
2546
+ "US"
2547
+ ],
2548
+ "029": [
2549
+ "029",
2550
+ "AG",
2551
+ "AI",
2552
+ "AW",
2553
+ "BB",
2554
+ "BL",
2555
+ "BQ",
2556
+ "BS",
2557
+ "CU",
2558
+ "CW",
2559
+ "DM",
2560
+ "DO",
2561
+ "GD",
2562
+ "GP",
2563
+ "HT",
2564
+ "JM",
2565
+ "KN",
2566
+ "KY",
2567
+ "LC",
2568
+ "MF",
2569
+ "MQ",
2570
+ "MS",
2571
+ "PR",
2572
+ "SX",
2573
+ "TC",
2574
+ "TT",
2575
+ "VC",
2576
+ "VG",
2577
+ "VI"
2578
+ ],
2579
+ "030": [
2580
+ "030",
2581
+ "CN",
2582
+ "HK",
2583
+ "JP",
2584
+ "KP",
2585
+ "KR",
2586
+ "MN",
2587
+ "MO",
2588
+ "TW"
2589
+ ],
2590
+ "034": [
2591
+ "034",
2592
+ "AF",
2593
+ "BD",
2594
+ "BT",
2595
+ "IN",
2596
+ "IR",
2597
+ "LK",
2598
+ "MV",
2599
+ "NP",
2600
+ "PK"
2601
+ ],
2602
+ "035": [
2603
+ "035",
2604
+ "BN",
2605
+ "ID",
2606
+ "KH",
2607
+ "LA",
2608
+ "MM",
2609
+ "MY",
2610
+ "PH",
2611
+ "SG",
2612
+ "TH",
2613
+ "TL",
2614
+ "VN"
2615
+ ],
2616
+ "039": [
2617
+ "039",
2618
+ "AD",
2619
+ "AL",
2620
+ "BA",
2621
+ "ES",
2622
+ "GI",
2623
+ "GR",
2624
+ "HR",
2625
+ "IT",
2626
+ "ME",
2627
+ "MK",
2628
+ "MT",
2629
+ "PT",
2630
+ "RS",
2631
+ "SI",
2632
+ "SM",
2633
+ "VA",
2634
+ "XK"
2635
+ ],
2636
+ "053": [
2637
+ "053",
2638
+ "AU",
2639
+ "CC",
2640
+ "CX",
2641
+ "HM",
2642
+ "NF",
2643
+ "NZ"
2644
+ ],
2645
+ "054": [
2646
+ "054",
2647
+ "FJ",
2648
+ "NC",
2649
+ "PG",
2650
+ "SB",
2651
+ "VU"
2652
+ ],
2653
+ "057": [
2654
+ "057",
2655
+ "FM",
2656
+ "GU",
2657
+ "KI",
2658
+ "MH",
2659
+ "MP",
2660
+ "NR",
2661
+ "PW",
2662
+ "UM"
2663
+ ],
2664
+ "061": [
2665
+ "061",
2666
+ "AS",
2667
+ "CK",
2668
+ "NU",
2669
+ "PF",
2670
+ "PN",
2671
+ "TK",
2672
+ "TO",
2673
+ "TV",
2674
+ "WF",
2675
+ "WS"
2676
+ ],
2677
+ "142": [
2678
+ "030",
2679
+ "034",
2680
+ "035",
2681
+ "142",
2682
+ "143",
2683
+ "145",
2684
+ "AE",
2685
+ "AF",
2686
+ "AM",
2687
+ "AZ",
2688
+ "BD",
2689
+ "BH",
2690
+ "BN",
2691
+ "BT",
2692
+ "CN",
2693
+ "CY",
2694
+ "GE",
2695
+ "HK",
2696
+ "ID",
2697
+ "IL",
2698
+ "IN",
2699
+ "IQ",
2700
+ "IR",
2701
+ "JO",
2702
+ "JP",
2703
+ "KG",
2704
+ "KH",
2705
+ "KP",
2706
+ "KR",
2707
+ "KW",
2708
+ "KZ",
2709
+ "LA",
2710
+ "LB",
2711
+ "LK",
2712
+ "MM",
2713
+ "MN",
2714
+ "MO",
2715
+ "MV",
2716
+ "MY",
2717
+ "NP",
2718
+ "OM",
2719
+ "PH",
2720
+ "PK",
2721
+ "PS",
2722
+ "QA",
2723
+ "SA",
2724
+ "SG",
2725
+ "SY",
2726
+ "TH",
2727
+ "TJ",
2728
+ "TL",
2729
+ "TM",
2730
+ "TR",
2731
+ "TW",
2732
+ "UZ",
2733
+ "VN",
2734
+ "YE"
2735
+ ],
2736
+ "143": [
2737
+ "143",
2738
+ "KG",
2739
+ "KZ",
2740
+ "TJ",
2741
+ "TM",
2742
+ "UZ"
2743
+ ],
2744
+ "145": [
2745
+ "145",
2746
+ "AE",
2747
+ "AM",
2748
+ "AZ",
2749
+ "BH",
2750
+ "CY",
2751
+ "GE",
2752
+ "IL",
2753
+ "IQ",
2754
+ "JO",
2755
+ "KW",
2756
+ "LB",
2757
+ "OM",
2758
+ "PS",
2759
+ "QA",
2760
+ "SA",
2761
+ "SY",
2762
+ "TR",
2763
+ "YE"
2764
+ ],
2765
+ "150": [
2766
+ "039",
2767
+ "150",
2768
+ "151",
2769
+ "154",
2770
+ "155",
2771
+ "AD",
2772
+ "AL",
2773
+ "AT",
2774
+ "AX",
2775
+ "BA",
2776
+ "BE",
2777
+ "BG",
2778
+ "BY",
2779
+ "CH",
2780
+ "CQ",
2781
+ "CZ",
2782
+ "DE",
2783
+ "DK",
2784
+ "EE",
2785
+ "ES",
2786
+ "FI",
2787
+ "FO",
2788
+ "FR",
2789
+ "GB",
2790
+ "GG",
2791
+ "GI",
2792
+ "GR",
2793
+ "HR",
2794
+ "HU",
2795
+ "IE",
2796
+ "IM",
2797
+ "IS",
2798
+ "IT",
2799
+ "JE",
2800
+ "LI",
2801
+ "LT",
2802
+ "LU",
2803
+ "LV",
2804
+ "MC",
2805
+ "MD",
2806
+ "ME",
2807
+ "MK",
2808
+ "MT",
2809
+ "NL",
2810
+ "NO",
2811
+ "PL",
2812
+ "PT",
2813
+ "RO",
2814
+ "RS",
2815
+ "RU",
2816
+ "SE",
2817
+ "SI",
2818
+ "SJ",
2819
+ "SK",
2820
+ "SM",
2821
+ "UA",
2822
+ "VA",
2823
+ "XK"
2824
+ ],
2825
+ "151": [
2826
+ "151",
2827
+ "BG",
2828
+ "BY",
2829
+ "CZ",
2830
+ "HU",
2831
+ "MD",
2832
+ "PL",
2833
+ "RO",
2834
+ "RU",
2835
+ "SK",
2836
+ "UA"
2837
+ ],
2838
+ "154": [
2839
+ "154",
2840
+ "AX",
2841
+ "CQ",
2842
+ "DK",
2843
+ "EE",
2844
+ "FI",
2845
+ "FO",
2846
+ "GB",
2847
+ "GG",
2848
+ "IE",
2849
+ "IM",
2850
+ "IS",
2851
+ "JE",
2852
+ "LT",
2853
+ "LV",
2854
+ "NO",
2855
+ "SE",
2856
+ "SJ"
2857
+ ],
2858
+ "155": [
2859
+ "155",
2860
+ "AT",
2861
+ "BE",
2862
+ "CH",
2863
+ "DE",
2864
+ "FR",
2865
+ "LI",
2866
+ "LU",
2867
+ "MC",
2868
+ "NL"
2869
+ ],
2870
+ "202": [
2871
+ "011",
2872
+ "014",
2873
+ "017",
2874
+ "018",
2875
+ "202",
2876
+ "AO",
2877
+ "BF",
2878
+ "BI",
2879
+ "BJ",
2880
+ "BW",
2881
+ "CD",
2882
+ "CF",
2883
+ "CG",
2884
+ "CI",
2885
+ "CM",
2886
+ "CV",
2887
+ "DJ",
2888
+ "ER",
2889
+ "ET",
2890
+ "GA",
2891
+ "GH",
2892
+ "GM",
2893
+ "GN",
2894
+ "GQ",
2895
+ "GW",
2896
+ "IO",
2897
+ "KE",
2898
+ "KM",
2899
+ "LR",
2900
+ "LS",
2901
+ "MG",
2902
+ "ML",
2903
+ "MR",
2904
+ "MU",
2905
+ "MW",
2906
+ "MZ",
2907
+ "NA",
2908
+ "NE",
2909
+ "NG",
2910
+ "RE",
2911
+ "RW",
2912
+ "SC",
2913
+ "SH",
2914
+ "SL",
2915
+ "SN",
2916
+ "SO",
2917
+ "SS",
2918
+ "ST",
2919
+ "SZ",
2920
+ "TD",
2921
+ "TF",
2922
+ "TG",
2923
+ "TZ",
2924
+ "UG",
2925
+ "YT",
2926
+ "ZA",
2927
+ "ZM",
2928
+ "ZW"
2929
+ ],
2930
+ "419": [
2931
+ "005",
2932
+ "013",
2933
+ "029",
2934
+ "419",
2935
+ "AG",
2936
+ "AI",
2937
+ "AR",
2938
+ "AW",
2939
+ "BB",
2940
+ "BL",
2941
+ "BO",
2942
+ "BQ",
2943
+ "BR",
2944
+ "BS",
2945
+ "BV",
2946
+ "BZ",
2947
+ "CL",
2948
+ "CO",
2949
+ "CR",
2950
+ "CU",
2951
+ "CW",
2952
+ "DM",
2953
+ "DO",
2954
+ "EC",
2955
+ "FK",
2956
+ "GD",
2957
+ "GF",
2958
+ "GP",
2959
+ "GS",
2960
+ "GT",
2961
+ "GY",
2962
+ "HN",
2963
+ "HT",
2964
+ "JM",
2965
+ "KN",
2966
+ "KY",
2967
+ "LC",
2968
+ "MF",
2969
+ "MQ",
2970
+ "MS",
2971
+ "MX",
2972
+ "NI",
2973
+ "PA",
2974
+ "PE",
2975
+ "PR",
2976
+ "PY",
2977
+ "SR",
2978
+ "SV",
2979
+ "SX",
2980
+ "TC",
2981
+ "TT",
2982
+ "UY",
2983
+ "VC",
2984
+ "VE",
2985
+ "VG",
2986
+ "VI"
2987
+ ],
2988
+ "EU": [
2989
+ "AT",
2990
+ "BE",
2991
+ "BG",
2992
+ "CY",
2993
+ "CZ",
2994
+ "DE",
2995
+ "DK",
2996
+ "EE",
2997
+ "ES",
2998
+ "EU",
2999
+ "FI",
3000
+ "FR",
3001
+ "GR",
3002
+ "HR",
3003
+ "HU",
3004
+ "IE",
3005
+ "IT",
3006
+ "LT",
3007
+ "LU",
3008
+ "LV",
3009
+ "MT",
3010
+ "NL",
3011
+ "PL",
3012
+ "PT",
3013
+ "RO",
3014
+ "SE",
3015
+ "SI",
3016
+ "SK"
3017
+ ],
3018
+ "EZ": [
3019
+ "AT",
3020
+ "BE",
3021
+ "CY",
3022
+ "DE",
3023
+ "EE",
3024
+ "ES",
3025
+ "EZ",
3026
+ "FI",
3027
+ "FR",
3028
+ "GR",
3029
+ "IE",
3030
+ "IT",
3031
+ "LT",
3032
+ "LU",
3033
+ "LV",
3034
+ "MT",
3035
+ "NL",
3036
+ "PT",
3037
+ "SI",
3038
+ "SK"
3039
+ ],
3040
+ "QO": [
3041
+ "AC",
3042
+ "AQ",
3043
+ "CP",
3044
+ "DG",
3045
+ "QO",
3046
+ "TA"
3047
+ ],
3048
+ "UN": [
3049
+ "AD",
3050
+ "AE",
3051
+ "AF",
3052
+ "AG",
3053
+ "AL",
3054
+ "AM",
3055
+ "AO",
3056
+ "AR",
3057
+ "AT",
3058
+ "AU",
3059
+ "AZ",
3060
+ "BA",
3061
+ "BB",
3062
+ "BD",
3063
+ "BE",
3064
+ "BF",
3065
+ "BG",
3066
+ "BH",
3067
+ "BI",
3068
+ "BJ",
3069
+ "BN",
3070
+ "BO",
3071
+ "BR",
3072
+ "BS",
3073
+ "BT",
3074
+ "BW",
3075
+ "BY",
3076
+ "BZ",
3077
+ "CA",
3078
+ "CD",
3079
+ "CF",
3080
+ "CG",
3081
+ "CH",
3082
+ "CI",
3083
+ "CL",
3084
+ "CM",
3085
+ "CN",
3086
+ "CO",
3087
+ "CR",
3088
+ "CU",
3089
+ "CV",
3090
+ "CY",
3091
+ "CZ",
3092
+ "DE",
3093
+ "DJ",
3094
+ "DK",
3095
+ "DM",
3096
+ "DO",
3097
+ "DZ",
3098
+ "EC",
3099
+ "EE",
3100
+ "EG",
3101
+ "ER",
3102
+ "ES",
3103
+ "ET",
3104
+ "FI",
3105
+ "FJ",
3106
+ "FM",
3107
+ "FR",
3108
+ "GA",
3109
+ "GB",
3110
+ "GD",
3111
+ "GE",
3112
+ "GH",
3113
+ "GM",
3114
+ "GN",
3115
+ "GQ",
3116
+ "GR",
3117
+ "GT",
3118
+ "GW",
3119
+ "GY",
3120
+ "HN",
3121
+ "HR",
3122
+ "HT",
3123
+ "HU",
3124
+ "ID",
3125
+ "IE",
3126
+ "IL",
3127
+ "IN",
3128
+ "IQ",
3129
+ "IR",
3130
+ "IS",
3131
+ "IT",
3132
+ "JM",
3133
+ "JO",
3134
+ "JP",
3135
+ "KE",
3136
+ "KG",
3137
+ "KH",
3138
+ "KI",
3139
+ "KM",
3140
+ "KN",
3141
+ "KP",
3142
+ "KR",
3143
+ "KW",
3144
+ "KZ",
3145
+ "LA",
3146
+ "LB",
3147
+ "LC",
3148
+ "LI",
3149
+ "LK",
3150
+ "LR",
3151
+ "LS",
3152
+ "LT",
3153
+ "LU",
3154
+ "LV",
3155
+ "LY",
3156
+ "MA",
3157
+ "MC",
3158
+ "MD",
3159
+ "ME",
3160
+ "MG",
3161
+ "MH",
3162
+ "MK",
3163
+ "ML",
3164
+ "MM",
3165
+ "MN",
3166
+ "MR",
3167
+ "MT",
3168
+ "MU",
3169
+ "MV",
3170
+ "MW",
3171
+ "MX",
3172
+ "MY",
3173
+ "MZ",
3174
+ "NA",
3175
+ "NE",
3176
+ "NG",
3177
+ "NI",
3178
+ "NL",
3179
+ "NO",
3180
+ "NP",
3181
+ "NR",
3182
+ "NZ",
3183
+ "OM",
3184
+ "PA",
3185
+ "PE",
3186
+ "PG",
3187
+ "PH",
3188
+ "PK",
3189
+ "PL",
3190
+ "PT",
3191
+ "PW",
3192
+ "PY",
3193
+ "QA",
3194
+ "RO",
3195
+ "RS",
3196
+ "RU",
3197
+ "RW",
3198
+ "SA",
3199
+ "SB",
3200
+ "SC",
3201
+ "SD",
3202
+ "SE",
3203
+ "SG",
3204
+ "SI",
3205
+ "SK",
3206
+ "SL",
3207
+ "SM",
3208
+ "SN",
3209
+ "SO",
3210
+ "SR",
3211
+ "SS",
3212
+ "ST",
3213
+ "SV",
3214
+ "SY",
3215
+ "SZ",
3216
+ "TD",
3217
+ "TG",
3218
+ "TH",
3219
+ "TJ",
3220
+ "TL",
3221
+ "TM",
3222
+ "TN",
3223
+ "TO",
3224
+ "TR",
3225
+ "TT",
3226
+ "TV",
3227
+ "TZ",
3228
+ "UA",
3229
+ "UG",
3230
+ "UN",
3231
+ "US",
3232
+ "UY",
3233
+ "UZ",
3234
+ "VC",
3235
+ "VE",
3236
+ "VN",
3237
+ "VU",
3238
+ "WS",
3239
+ "YE",
3240
+ "ZA",
3241
+ "ZM",
3242
+ "ZW"
3243
+ ]
3244
+ };
3245
+ const UNICODE_EXTENSION_SEQUENCE_REGEX = /-u(?:-[0-9a-z]{2,8})+/gi;
3246
+ /**
3247
+ * Asserts that a condition is true, throwing an error if it is not.
3248
+ * Used for runtime validation and type narrowing.
3249
+ *
3250
+ * @param condition - The condition to check
3251
+ * @param message - Error message if condition is false
3252
+ * @param Err - Error constructor to use (defaults to Error)
3253
+ * @throws {Error} When condition is false
3254
+ *
3255
+ * @example
3256
+ * ```ts
3257
+ * invariant(locale !== undefined, 'Locale must be defined')
3258
+ * // locale is now narrowed to non-undefined type
3259
+ * ```
3260
+ */
3261
+ function invariant(condition, message, Err = Error) {
3262
+ if (!condition) throw new Err(message);
3263
+ }
3264
+ const DEFAULT_MATCHING_THRESHOLD = 838;
3265
+ let PROCESSED_DATA;
3266
+ function processData() {
3267
+ if (!PROCESSED_DATA) {
3268
+ const paradigmLocales = data.supplemental.languageMatching["written-new"][0]?.paradigmLocales?._locales.split(" ");
3269
+ const matchVariables = data.supplemental.languageMatching["written-new"].slice(1, 5);
3270
+ PROCESSED_DATA = {
3271
+ matches: data.supplemental.languageMatching["written-new"].slice(5).map((d) => {
3272
+ const key = Object.keys(d)[0];
3273
+ const value = d[key];
3274
+ return {
3275
+ supported: key,
3276
+ desired: value._desired,
3277
+ distance: +value._distance,
3278
+ oneway: value.oneway === "true" ? true : false
3279
+ };
3280
+ }, {}),
3281
+ matchVariables: matchVariables.reduce((all, d) => {
3282
+ const key = Object.keys(d)[0];
3283
+ const value = d[key];
3284
+ all[key.slice(1)] = value._value.split("+");
3285
+ return all;
3286
+ }, {}),
3287
+ paradigmLocales: [...paradigmLocales, ...paradigmLocales.map((l) => new Intl.Locale(l.replace(/_/g, "-")).maximize().toString())]
3288
+ };
3289
+ }
3290
+ return PROCESSED_DATA;
3291
+ }
3292
+ function isMatched(locale, languageMatchInfoLocale, matchVariables) {
3293
+ const [language, script, region] = languageMatchInfoLocale.split("-");
3294
+ let matches = true;
3295
+ if (region && region[0] === "$") {
3296
+ const shouldInclude = region[1] !== "!";
3297
+ const expandedMatchedRegions = (shouldInclude ? matchVariables[region.slice(1)] : matchVariables[region.slice(2)]).map((r) => regions[r] || [r]).reduce((all, list) => [...all, ...list], []);
3298
+ matches &&= !(expandedMatchedRegions.indexOf(locale.region || "") > -1 != shouldInclude);
3299
+ } else matches &&= locale.region ? region === "*" || region === locale.region : true;
3300
+ matches &&= locale.script ? script === "*" || script === locale.script : true;
3301
+ matches &&= locale.language ? language === "*" || language === locale.language : true;
3302
+ return matches;
3303
+ }
3304
+ function serializeLSR(lsr) {
3305
+ return [
3306
+ lsr.language,
3307
+ lsr.script,
3308
+ lsr.region
3309
+ ].filter(Boolean).join("-");
3310
+ }
3311
+ function findMatchingDistanceForLSR(desired, supported, data) {
3312
+ for (const d of data.matches) {
3313
+ let matches = isMatched(desired, d.desired, data.matchVariables) && isMatched(supported, d.supported, data.matchVariables);
3314
+ if (!d.oneway && !matches) matches = isMatched(desired, d.supported, data.matchVariables) && isMatched(supported, d.desired, data.matchVariables);
3315
+ if (matches) {
3316
+ const distance = d.distance * 10;
3317
+ if (data.paradigmLocales.indexOf(serializeLSR(desired)) > -1 != data.paradigmLocales.indexOf(serializeLSR(supported)) > -1) return distance - 1;
3318
+ return distance;
3319
+ }
3320
+ }
3321
+ throw new Error("No matching distance found");
3322
+ }
3323
+ function findMatchingDistanceImpl(desired, supported) {
3324
+ const desiredLocale = new Intl.Locale(desired).maximize();
3325
+ const supportedLocale = new Intl.Locale(supported).maximize();
3326
+ const desiredLSR = {
3327
+ language: desiredLocale.language,
3328
+ script: desiredLocale.script || "",
3329
+ region: desiredLocale.region || ""
3330
+ };
3331
+ const supportedLSR = {
3332
+ language: supportedLocale.language,
3333
+ script: supportedLocale.script || "",
3334
+ region: supportedLocale.region || ""
3335
+ };
3336
+ let matchingDistance = 0;
3337
+ const data = processData();
3338
+ if (desiredLSR.language !== supportedLSR.language) matchingDistance += findMatchingDistanceForLSR({
3339
+ language: desiredLocale.language,
3340
+ script: "",
3341
+ region: ""
3342
+ }, {
3343
+ language: supportedLocale.language,
3344
+ script: "",
3345
+ region: ""
3346
+ }, data);
3347
+ if (desiredLSR.script !== supportedLSR.script) matchingDistance += findMatchingDistanceForLSR({
3348
+ language: desiredLocale.language,
3349
+ script: desiredLSR.script,
3350
+ region: ""
3351
+ }, {
3352
+ language: supportedLocale.language,
3353
+ script: supportedLSR.script,
3354
+ region: ""
3355
+ }, data);
3356
+ if (desiredLSR.region !== supportedLSR.region) matchingDistance += findMatchingDistanceForLSR(desiredLSR, supportedLSR, data);
3357
+ return matchingDistance;
3358
+ }
3359
+ /**
3360
+ * Calculates the matching distance between two locales using the CLDR Enhanced Language Matching algorithm.
3361
+ * This function is memoized for performance, as distance calculations are expensive.
3362
+ *
3363
+ * The distance represents how "far apart" two locales are, with 0 being identical (after maximization).
3364
+ * Distances are calculated based on Language-Script-Region (LSR) differences using CLDR data.
3365
+ *
3366
+ * @param desired - The desired locale (e.g., "en-US")
3367
+ * @param supported - The supported locale to compare against (e.g., "en-GB")
3368
+ * @returns The calculated distance between the locales
3369
+ *
3370
+ * @example
3371
+ * ```ts
3372
+ * findMatchingDistance('en-US', 'en-US') // 0 - identical
3373
+ * findMatchingDistance('en-US', 'en-GB') // 40 - same language/script, different region
3374
+ * findMatchingDistance('es-CO', 'es-419') // 39 - regional variant
3375
+ * findMatchingDistance('en', 'fr') // 840 - completely different languages
3376
+ * ```
3377
+ *
3378
+ * @see https://unicode.org/reports/tr35/#EnhancedLanguageMatching
3379
+ */
3380
+ const findMatchingDistance = memoize(findMatchingDistanceImpl, { serializer: (args) => `${args[0]}|${args[1]}` });
3381
+ /**
3382
+ * Generates fallback candidates by progressively removing subtags
3383
+ * e.g., "en-US" -> ["en-US", "en"]
3384
+ * "zh-Hans-CN" -> ["zh-Hans-CN", "zh-Hans", "zh"]
3385
+ */
3386
+ function getFallbackCandidates(locale) {
3387
+ const candidates = [];
3388
+ let current = locale;
3389
+ while (current) {
3390
+ candidates.push(current);
3391
+ const lastDash = current.lastIndexOf("-");
3392
+ if (lastDash === -1) break;
3393
+ current = current.substring(0, lastDash);
3394
+ }
3395
+ return candidates;
3396
+ }
3397
+ /**
3398
+ * Finds the best locale match using a three-tier optimization hierarchy.
3399
+ *
3400
+ * ## Three-Tier Matching Algorithm:
3401
+ *
3402
+ * **Tier 1 - Fast Path** (O(n)): Exact string matching via Set lookup
3403
+ * - Example: 'en' matches 'en' exactly → distance 0
3404
+ * - Solves #4936: 48x faster than baseline (12ms vs 610ms with 700+ locales)
3405
+ *
3406
+ * **Tier 2 - Fallback Path** (O(k×n)): Maximization + progressive subtag removal
3407
+ * - Maximizes requested locale, then removes subtags right-to-left
3408
+ * - Example: "zh-TW" → "zh-Hant-TW" → ["zh-Hant-TW", "zh-Hant", "zh"]
3409
+ * - Distance: 0 for maximized match, 10 per removed subtag + position penalty
3410
+ * - 40-50x faster than full UTS #35, handles 99% of real-world cases correctly
3411
+ *
3412
+ * **Tier 3 - Slow Path** (O(n×m), memoized): Full UTS #35 CLDR matching
3413
+ * - Calculates Language-Script-Region distances using CLDR data
3414
+ * - Handles complex cases like cross-script matching (sr-Cyrl ↔ sr-Latn)
3415
+ * - Only used when Tiers 1 & 2 find no match
3416
+ * - Still 6x faster than baseline due to memoization
3417
+ *
3418
+ * ## Performance Impact of Maximization:
3419
+ *
3420
+ * While Tier 2 now calls `Intl.Locale().maximize()` once per requested locale,
3421
+ * this is still much faster than Tier 3's full distance calculation:
3422
+ * - Tier 1: ~12ms (exact match, no maximization)
3423
+ * - Tier 2: ~13-15ms (maximization + fallback)
3424
+ * - Tier 3: ~100ms+ (full UTS #35 with all supported locales)
3425
+ *
3426
+ * @param requestedLocales - Locale identifiers in preference order
3427
+ * @param supportedLocales - Available locale identifiers
3428
+ * @param threshold - Maximum distance (default: 838, from CLDR)
3429
+ * @returns Matching result with distances
3430
+ *
3431
+ * @example
3432
+ * ```ts
3433
+ * // Tier 1: Exact match
3434
+ * findBestMatch(['en'], ['en', 'fr'])
3435
+ * // → { matchedSupportedLocale: 'en', distances: { en: { en: 0 } } }
3436
+ *
3437
+ * // Tier 2: Fallback with maximization
3438
+ * findBestMatch(['zh-TW'], ['zh-Hant'])
3439
+ * // → zh-TW maximizes to zh-Hant-TW, falls back to zh-Hant (distance 0)
3440
+ *
3441
+ * findBestMatch(['en-US'], ['en'])
3442
+ * // → en-US maximizes to en-Latn-US, falls back to en (distance 10)
3443
+ *
3444
+ * // Tier 3: Full calculation
3445
+ * findBestMatch(['en-XZ'], ['ja', 'ko'])
3446
+ * // → No fallback match, uses UTS #35 to find closest match
3447
+ * ```
3448
+ *
3449
+ * @see https://unicode.org/reports/tr35/#EnhancedLanguageMatching
3450
+ * @see https://github.com/formatjs/formatjs/issues/4936
3451
+ */
3452
+ const canonicalizedSupportedCache = /* @__PURE__ */ new WeakMap();
3453
+ function findBestMatch(requestedLocales, supportedLocales, threshold = DEFAULT_MATCHING_THRESHOLD) {
3454
+ let lowestDistance = Infinity;
3455
+ let result = {
3456
+ matchedDesiredLocale: "",
3457
+ distances: {}
3458
+ };
3459
+ let canonicalizedSupportedLocales = canonicalizedSupportedCache.get(supportedLocales);
3460
+ if (!canonicalizedSupportedLocales) {
3461
+ canonicalizedSupportedLocales = supportedLocales.map((locale) => {
3462
+ try {
3463
+ return Intl.getCanonicalLocales([locale])[0] || locale;
3464
+ } catch {
3465
+ return locale;
3466
+ }
3467
+ });
3468
+ canonicalizedSupportedCache.set(supportedLocales, canonicalizedSupportedLocales);
3469
+ }
3470
+ const supportedSet = new Set(canonicalizedSupportedLocales);
3471
+ for (let i = 0; i < requestedLocales.length; i++) {
3472
+ const desired = requestedLocales[i];
3473
+ if (supportedSet.has(desired)) {
3474
+ const distance = 0 + i * 40;
3475
+ result.distances[desired] = { [desired]: distance };
3476
+ if (distance < lowestDistance) {
3477
+ lowestDistance = distance;
3478
+ result.matchedDesiredLocale = desired;
3479
+ result.matchedSupportedLocale = desired;
3480
+ }
3481
+ if (i === 0) return result;
3482
+ }
3483
+ }
3484
+ for (let i = 0; i < requestedLocales.length; i++) {
3485
+ const desired = requestedLocales[i];
3486
+ try {
3487
+ const maximized = new Intl.Locale(desired).maximize().toString();
3488
+ if (maximized !== desired) {
3489
+ const maximizedCandidates = getFallbackCandidates(maximized);
3490
+ for (let j = 0; j < maximizedCandidates.length; j++) {
3491
+ const candidate = maximizedCandidates[j];
3492
+ if (candidate === desired) continue;
3493
+ if (supportedSet.has(candidate)) {
3494
+ let distance;
3495
+ try {
3496
+ distance = new Intl.Locale(candidate).maximize().toString() === maximized ? 0 + i * 40 : j * 10 + i * 40;
3497
+ } catch {
3498
+ distance = j * 10 + i * 40;
3499
+ }
3500
+ if (!result.distances[desired]) result.distances[desired] = {};
3501
+ result.distances[desired][candidate] = distance;
3502
+ if (distance < lowestDistance) {
3503
+ lowestDistance = distance;
3504
+ result.matchedDesiredLocale = desired;
3505
+ result.matchedSupportedLocale = candidate;
3506
+ }
3507
+ break;
3508
+ }
3509
+ }
3510
+ }
3511
+ } catch {}
3512
+ }
3513
+ if (result.matchedSupportedLocale && lowestDistance === 0) return result;
3514
+ lowestDistance = Infinity;
3515
+ requestedLocales.forEach((desired, i) => {
3516
+ if (!result.distances[desired]) result.distances[desired] = {};
3517
+ canonicalizedSupportedLocales.forEach((canonicalLocale, supportedIndex) => {
3518
+ const originalSupported = supportedLocales[supportedIndex];
3519
+ const finalDistance = findMatchingDistance(desired, canonicalLocale) + 0 + i * 40;
3520
+ result.distances[desired][originalSupported] = finalDistance;
3521
+ if (finalDistance < lowestDistance) {
3522
+ lowestDistance = finalDistance;
3523
+ result.matchedDesiredLocale = desired;
3524
+ result.matchedSupportedLocale = originalSupported;
3525
+ }
3526
+ });
3527
+ });
3528
+ if (lowestDistance >= threshold) {
3529
+ result.matchedDesiredLocale = void 0;
3530
+ result.matchedSupportedLocale = void 0;
3531
+ }
3532
+ return result;
3533
+ }
3534
+ /**
3535
+ * https://tc39.es/ecma402/#sec-bestfitmatcher
3536
+ * @param availableLocales
3537
+ * @param requestedLocales
3538
+ * @param getDefaultLocale
3539
+ */
3540
+ function BestFitMatcher(availableLocales, requestedLocales, getDefaultLocale) {
3541
+ let foundLocale;
3542
+ let extension;
3543
+ const noExtensionLocales = [];
3544
+ const noExtensionLocaleMap = requestedLocales.reduce((all, l) => {
3545
+ const noExtensionLocale = l.replace(UNICODE_EXTENSION_SEQUENCE_REGEX, "");
3546
+ noExtensionLocales.push(noExtensionLocale);
3547
+ all[noExtensionLocale] = l;
3548
+ return all;
3549
+ }, {});
3550
+ const result = findBestMatch(noExtensionLocales, availableLocales);
3551
+ if (result.matchedSupportedLocale && result.matchedDesiredLocale) {
3552
+ foundLocale = result.matchedSupportedLocale;
3553
+ extension = noExtensionLocaleMap[result.matchedDesiredLocale].slice(result.matchedDesiredLocale.length) || void 0;
3554
+ }
3555
+ if (!foundLocale) return { locale: getDefaultLocale() };
3556
+ return {
3557
+ locale: foundLocale,
3558
+ extension
3559
+ };
3560
+ }
3561
+ function CanonicalizeUValue(ukey, uvalue) {
3562
+ let lowerValue = uvalue.toLowerCase();
3563
+ invariant(ukey !== void 0, `ukey must be defined`);
3564
+ return lowerValue;
3565
+ }
3566
+ function CanonicalizeUnicodeLocaleId(locale) {
3567
+ return Intl.getCanonicalLocales(locale)[0];
3568
+ }
3569
+ function InsertUnicodeExtensionAndCanonicalize(locale, attributes, keywords) {
3570
+ invariant(locale.indexOf("-u-") === -1, "Expected locale to not have a Unicode locale extension");
3571
+ let extension = "-u";
3572
+ for (const attr of attributes) extension += `-${attr}`;
3573
+ for (const kw of keywords) {
3574
+ const { key, value } = kw;
3575
+ extension += `-${key}`;
3576
+ if (value !== "") extension += `-${value}`;
3577
+ }
3578
+ if (extension === "-u") return CanonicalizeUnicodeLocaleId(locale);
3579
+ let privateIndex = locale.indexOf("-x-");
3580
+ let newLocale;
3581
+ if (privateIndex === -1) newLocale = locale + extension;
3582
+ else {
3583
+ let preExtension = locale.slice(0, privateIndex);
3584
+ let postExtension = locale.slice(privateIndex);
3585
+ newLocale = preExtension + extension + postExtension;
3586
+ }
3587
+ return CanonicalizeUnicodeLocaleId(newLocale);
3588
+ }
3589
+ const availableLocalesSetCache = /* @__PURE__ */ new WeakMap();
3590
+ /**
3591
+ * https://tc39.es/ecma402/#sec-bestavailablelocale
3592
+ * @param availableLocales
3593
+ * @param locale
3594
+ */
3595
+ function BestAvailableLocale(availableLocales, locale) {
3596
+ let availableSet = availableLocalesSetCache.get(availableLocales);
3597
+ if (!availableSet) {
3598
+ availableSet = new Set(availableLocales);
3599
+ availableLocalesSetCache.set(availableLocales, availableSet);
3600
+ }
3601
+ let candidate = locale;
3602
+ while (true) {
3603
+ if (availableSet.has(candidate)) return candidate;
3604
+ let pos = candidate.lastIndexOf("-");
3605
+ if (!~pos) return;
3606
+ if (pos >= 2 && candidate[pos - 2] === "-") pos -= 2;
3607
+ candidate = candidate.slice(0, pos);
3608
+ }
3609
+ }
3610
+ /**
3611
+ * https://tc39.es/ecma402/#sec-lookupmatcher
3612
+ * @param availableLocales
3613
+ * @param requestedLocales
3614
+ * @param getDefaultLocale
3615
+ */
3616
+ function LookupMatcher(availableLocales, requestedLocales, getDefaultLocale) {
3617
+ const result = { locale: "" };
3618
+ for (const locale of requestedLocales) {
3619
+ const noExtensionLocale = locale.replace(UNICODE_EXTENSION_SEQUENCE_REGEX, "");
3620
+ const availableLocale = BestAvailableLocale(availableLocales, noExtensionLocale);
3621
+ if (availableLocale) {
3622
+ result.locale = availableLocale;
3623
+ if (locale !== noExtensionLocale) result.extension = locale.slice(noExtensionLocale.length, locale.length);
3624
+ return result;
3625
+ }
3626
+ }
3627
+ result.locale = getDefaultLocale();
3628
+ return result;
3629
+ }
3630
+ function UnicodeExtensionComponents(extension) {
3631
+ invariant(extension === extension.toLowerCase(), "Expected extension to be lowercase");
3632
+ invariant(extension.slice(0, 3) === "-u-", "Expected extension to be a Unicode locale extension");
3633
+ const attributes = [];
3634
+ const keywords = [];
3635
+ let keyword;
3636
+ let size = extension.length;
3637
+ let k = 3;
3638
+ while (k < size) {
3639
+ let e = extension.indexOf("-", k);
3640
+ let len;
3641
+ if (e === -1) len = size - k;
3642
+ else len = e - k;
3643
+ let subtag = extension.slice(k, k + len);
3644
+ invariant(len >= 2, "Expected a subtag to have at least 2 characters");
3645
+ if (keyword === void 0 && len != 2) {
3646
+ if (attributes.indexOf(subtag) === -1) attributes.push(subtag);
3647
+ } else if (len === 2) {
3648
+ keyword = {
3649
+ key: subtag,
3650
+ value: ""
3651
+ };
3652
+ if (keywords.find((k) => k.key === keyword?.key) === void 0) keywords.push(keyword);
3653
+ } else if (keyword?.value === "") keyword.value = subtag;
3654
+ else {
3655
+ invariant(keyword !== void 0, "Expected keyword to be defined");
3656
+ keyword.value += "-" + subtag;
3657
+ }
3658
+ k += len + 1;
3659
+ }
3660
+ return {
3661
+ attributes,
3662
+ keywords
3663
+ };
3664
+ }
3665
+ /**
3666
+ * https://tc39.es/ecma402/#sec-resolvelocale
3667
+ */
3668
+ function ResolveLocale(availableLocales, requestedLocales, options, relevantExtensionKeys, localeData, getDefaultLocale) {
3669
+ const matcher = options.localeMatcher;
3670
+ let r;
3671
+ if (matcher === "lookup") r = LookupMatcher(Array.from(availableLocales), requestedLocales, getDefaultLocale);
3672
+ else r = BestFitMatcher(Array.from(availableLocales), requestedLocales, getDefaultLocale);
3673
+ if (r == null) r = {
3674
+ locale: getDefaultLocale(),
3675
+ extension: ""
3676
+ };
3677
+ let foundLocale = r.locale;
3678
+ let foundLocaleData = localeData[foundLocale];
3679
+ const result = {
3680
+ locale: "en",
3681
+ dataLocale: foundLocale
3682
+ };
3683
+ let components;
3684
+ let keywords;
3685
+ if (r.extension) {
3686
+ components = UnicodeExtensionComponents(r.extension);
3687
+ keywords = components.keywords;
3688
+ } else keywords = [];
3689
+ let supportedKeywords = [];
3690
+ for (const key of relevantExtensionKeys) {
3691
+ let keyLocaleData = foundLocaleData?.[key] ?? [];
3692
+ invariant(Array.isArray(keyLocaleData), `keyLocaleData for ${key} must be an array`);
3693
+ let value = keyLocaleData[0];
3694
+ invariant(value === void 0 || typeof value === "string", `value must be a string or undefined`);
3695
+ let supportedKeyword;
3696
+ let entry = keywords.find((k) => k.key === key);
3697
+ if (entry) {
3698
+ let requestedValue = entry.value;
3699
+ if (requestedValue !== "") {
3700
+ if (keyLocaleData.indexOf(requestedValue) > -1) {
3701
+ value = requestedValue;
3702
+ supportedKeyword = {
3703
+ key,
3704
+ value
3705
+ };
3706
+ }
3707
+ } else if (keyLocaleData.indexOf("true") > -1) {
3708
+ value = "true";
3709
+ supportedKeyword = {
3710
+ key,
3711
+ value
3712
+ };
3713
+ }
3714
+ }
3715
+ let optionsValue = options[key];
3716
+ invariant(optionsValue == null || typeof optionsValue === "string", `optionsValue must be a string or undefined`);
3717
+ if (typeof optionsValue === "string") {
3718
+ optionsValue = CanonicalizeUValue(key.toLowerCase(), optionsValue);
3719
+ if (optionsValue === "") optionsValue = "true";
3720
+ }
3721
+ if (optionsValue !== value && keyLocaleData.indexOf(optionsValue) > -1) {
3722
+ value = optionsValue;
3723
+ supportedKeyword = void 0;
3724
+ }
3725
+ if (supportedKeyword) supportedKeywords.push(supportedKeyword);
3726
+ result[key] = value;
3727
+ }
3728
+ let supportedAttributes = [];
3729
+ if (supportedKeywords.length > 0) {
3730
+ supportedAttributes = [];
3731
+ foundLocale = InsertUnicodeExtensionAndCanonicalize(foundLocale, supportedAttributes, supportedKeywords);
3732
+ }
3733
+ result.locale = foundLocale;
3734
+ return result;
3735
+ }
3736
+ function match(requestedLocales, availableLocales, defaultLocale, opts) {
3737
+ return ResolveLocale(availableLocales, CanonicalizeLocaleList(requestedLocales), { localeMatcher: opts?.algorithm || "best fit" }, [], {}, () => defaultLocale).locale;
3738
+ }
3739
+ //#endregion
3740
+ //#region src/utils/accept-language.ts
3741
+ function parseAcceptLanguage(header) {
3742
+ const specs = [];
3743
+ for (const section of header.split(",")) {
3744
+ const [rawTag, ...params] = section.split(";");
3745
+ const full = rawTag.trim().toLowerCase();
3746
+ if (full.length === 0) continue;
3747
+ let quality = 1;
3748
+ for (const param of params) {
3749
+ const separator = param.indexOf("=");
3750
+ if (separator === -1 || param.slice(0, separator).trim().toLowerCase() !== "q") continue;
3751
+ const parsed = Number.parseFloat(param.slice(separator + 1));
3752
+ if (!Number.isNaN(parsed)) quality = parsed;
3753
+ }
3754
+ const dash = full.indexOf("-");
3755
+ specs.push({
3756
+ prefix: dash === -1 ? full : full.slice(0, dash),
3757
+ full,
3758
+ quality,
3759
+ order: specs.length
3760
+ });
3761
+ }
3762
+ return specs;
3763
+ }
3764
+ function matchLanguage(language, specs) {
3765
+ const full = language.trim().toLowerCase();
3766
+ const dash = full.indexOf("-");
3767
+ const prefix = dash === -1 ? full : full.slice(0, dash);
3768
+ const best = {
3769
+ language,
3770
+ quality: 0,
3771
+ specificity: 0,
3772
+ order: -1
3773
+ };
3774
+ for (const spec of specs) {
3775
+ let specificity;
3776
+ if (spec.full === full) specificity = 4;
3777
+ else if (spec.prefix === full) specificity = 2;
3778
+ else if (spec.full === prefix) specificity = 1;
3779
+ else if (spec.full === "*") specificity = 0;
3780
+ else continue;
3781
+ if ((specificity - best.specificity || spec.quality - best.quality || spec.order - best.order) > 0) {
3782
+ best.quality = spec.quality;
3783
+ best.specificity = specificity;
3784
+ best.order = spec.order;
3785
+ }
3786
+ }
3787
+ if (best.quality > 0) return best;
3788
+ }
3789
+ /**
3790
+ * Filter `available` down to the languages the `Accept-Language` header accepts, ordered by
3791
+ * client preference. A missing (`null`) header accepts everything.
3792
+ */
3793
+ function negotiateLanguages(header, available) {
3794
+ const specs = parseAcceptLanguage(header ?? "*");
3795
+ const matches = [];
3796
+ for (const language of available) {
3797
+ const match = matchLanguage(language, specs);
3798
+ if (match) matches.push(match);
3799
+ }
3800
+ matches.sort((a, b) => b.quality - a.quality || b.specificity - a.specificity || a.order - b.order);
3801
+ return matches.map((match) => match.language);
3802
+ }
3803
+ //#endregion
3804
+ //#region src/i18n/middleware.ts
3805
+ const DefaultFormatter = {
3806
+ get(url) {
3807
+ const segs = url.pathname.split("/");
3808
+ if (segs.length > 1 && segs[1]) return segs[1];
3809
+ },
3810
+ add(url, locale) {
3811
+ const next = new URL(url);
3812
+ next.pathname = `${url.basePath}/${locale}/${url.pathname}`.replaceAll(/\/+/g, "/");
3813
+ return next;
3814
+ },
3815
+ remove(url) {
3816
+ const next = new URL(url);
3817
+ const pathname = url.pathname.split("/").slice(2).join("/");
3818
+ next.pathname = `${url.basePath}/${pathname}`.replaceAll(/\/+/g, "/");
3819
+ return next;
3820
+ }
3821
+ };
3822
+ function createI18nMiddleware({ languages, defaultLanguage, format = DefaultFormatter, cookieName = "FD_LOCALE", hideLocale = "never" }) {
3823
+ let formatter;
3824
+ if (typeof format === "function") formatter = {
3825
+ ...DefaultFormatter,
3826
+ add(url, locale) {
3827
+ const next = new URL(url);
3828
+ next.pathname = format(locale, url.pathname);
3829
+ return next;
3830
+ }
3831
+ };
3832
+ else formatter = format;
3833
+ return (request) => {
3834
+ const url = request.nextUrl;
3835
+ let pathLocale = formatter.get(url);
3836
+ if (pathLocale && !languages.includes(pathLocale)) pathLocale = void 0;
3837
+ if (!pathLocale) {
3838
+ if (hideLocale === "default-locale") return NextResponse.rewrite(formatter.add(url, defaultLanguage));
3839
+ const preferred = match(negotiateLanguages(request.headers.get("accept-language"), languages), languages, defaultLanguage);
3840
+ if (hideLocale === "always") {
3841
+ const locale = request.cookies.get(cookieName)?.value ?? preferred;
3842
+ return NextResponse.rewrite(formatter.add(url, locale));
3843
+ }
3844
+ return NextResponse.redirect(formatter.add(url, preferred));
3845
+ }
3846
+ if (hideLocale === "always" || hideLocale === "default-locale" && pathLocale === defaultLanguage) {
3847
+ const res = NextResponse.redirect(formatter.remove(url));
3848
+ res.cookies.set(cookieName, pathLocale);
3849
+ return res;
3850
+ }
3851
+ return NextResponse.next();
3852
+ };
3853
+ }
3854
+ //#endregion
3855
+ export { DefaultFormatter, createI18nMiddleware };