adapi 0.0.7 → 0.0.8

Sign up to get free protection for your applications and to get access to all the features.
@@ -159,10 +159,12 @@ Adapi::Config.set(:sandbox)
159
159
 
160
160
  ## API Version Support ##
161
161
 
162
- Adapi 0.0.5 and higher supports only the latest version of Google AdWords API: *v201109*
162
+ Adapi does not support several AdWords API versions at the same time, only the
163
+ latest version: *v201109_1* at the moment.
163
164
 
164
- Older versions of adapi supporting older versions of AdWords API will still be
165
- available (adapi 0.0.4 supports only v201101), marked by AdWords API version tag.
165
+ However, support for the older versions is still available in earlier versions
166
+ of adapi (adapi 0.0.7 for *v201109*). Latest revision for specific AdWords API
167
+ version is marked by a tag.
166
168
 
167
169
  ## Unsupported AdWords services ##
168
170
 
@@ -188,21 +190,235 @@ they will be implemented (this also serves as TODO list):
188
190
 
189
191
  ## Examples ##
190
192
 
191
- Example are available in [examples directory](./master/examples/). For now, they
193
+ Examples are available in [examples directory](./master/examples/). For now, they
192
194
  are mostly just uninspired rewrites of examples from `google-adwords-api` gem,
193
195
  but that's going to change when proper UI to AdWords models will be implemented.
194
196
 
197
+ ### Getting started ###
198
+
199
+ Here are some examples to get you started with adapi. (All this is also
200
+ available in [examples directory](./master/examples/).)
201
+
202
+ #### Create complete campaign ###
203
+
204
+ Creates a campaign with ad_groups and ad_texts from hash - by single method call.
205
+
206
+ ```ruby
207
+ campaign = Adapi::Campaign.create(
208
+ :name => "Campaign #%d" % (Time.new.to_f * 1000).to_i,
209
+ :status => 'PAUSED',
210
+ :bidding_strategy => {
211
+ :xsi_type => 'BudgetOptimizer',
212
+ :bid_ceiling => 100
213
+ },
214
+ :budget => {
215
+ :amount => 50,
216
+ :delivery_method => 'STANDARD'
217
+ },
218
+
219
+ :criteria => {
220
+ :language => [ :en, :cs ],
221
+ :location => {
222
+ # PS: province and country codes are now obsolete in AdWords API,
223
+ # but they still work in adapi
224
+ :name => { :city => 'Prague', :region => 'CZ-PR', :country => 'CZ' }
225
+ }
226
+ },
227
+
228
+ :ad_groups => [
229
+ {
230
+ :name => "AdGroup #%d" % (Time.new.to_f * 1000).to_i,
231
+ :status => 'ENABLED',
232
+
233
+ :keywords => [ 'dem codez', '"top coder"', "[-code]" ],
234
+
235
+ :ads => [
236
+ {
237
+ :headline => "Code like Neo",
238
+ :description1 => 'Need mad coding skills?',
239
+ :description2 => 'Check out my new blog!',
240
+ :url => 'http://www.demcodez.com',
241
+ :display_url => 'http://www.demcodez.com'
242
+ }
243
+ ]
244
+ }
245
+ ]
246
+ )
247
+ ```
248
+
249
+ #### Create campaign step by step ###
250
+
251
+ Creates a campaign with ad_groups and ad_texts step by step.
252
+
253
+ ```ruby
254
+ campaign = Adapi::Campaign.create(
255
+ :name => "Campaign #%d" % (Time.new.to_f * 1000).to_i,
256
+ :status => 'PAUSED',
257
+ :bidding_strategy => { :xsi_type => 'BudgetOptimizer', :bid_ceiling => 100 },
258
+ :budget => { :amount => 50, :delivery_method => 'STANDARD' }
259
+ )
260
+
261
+ Adapi::CampaignCriterion.create(
262
+ :campaign_id => campaign.id,
263
+ :criteria => {
264
+ :language => %w{ en cs },
265
+ :location => {
266
+ :name => { :city => 'Prague', :region => 'CZ-PR', :country => 'CZ' }
267
+ }
268
+ }
269
+ )
270
+
271
+ ad_group = Adapi::AdGroup.create(
272
+ :campaign_id => campaign.id,
273
+ :name => "AdGroup #%d" % (Time.new.to_f * 1000).to_i,
274
+ :status => 'ENABLED'
275
+ )
276
+
277
+ Adapi::Keyword.create(
278
+ :ad_group_id => ad_group.id,
279
+ :keywords => [ 'dem codez', '"top coder"', '[-code]' ]
280
+ )
281
+
282
+ Adapi::Ad::TextAd.create(
283
+ :ad_group_id => ad_group.id,
284
+ :headline => "Code like Neo",
285
+ :description1 => 'Need mad coding skills?',
286
+ :description2 => 'Check out my new blog!',
287
+ :url => 'http://www.demcodez.com',
288
+ :display_url => 'http://www.demcodez.com'
289
+ )
290
+
291
+ # find complete campaign
292
+ new_campaign = Adapi::Campaign.find_complete(campaign.id)
293
+
294
+ # display campaign as hash
295
+ puts new_campaign.to_hash.inspect
296
+ ```
297
+
298
+ #### Create campaign criteria ###
299
+
300
+ Campaign criteria (formerly targets) have been rewritten from the scratch for
301
+ *v201109*. The goal is to provide a simple DSL for criteria so user doesn't have
302
+ to deal with somewhat convoluted AdWords API syntax made for machines, not
303
+ humans. So far, this has been done only for *language* and *location* criterion.
304
+ You can use any other criteria, you just have to enter them in AdWords format.
305
+
306
+ ##### Language #####
307
+
308
+ ```ruby
309
+ Adapi::CampaignCriterion.create(
310
+ :campaign_id => campaign.id,
311
+ :criteria => {
312
+ :language => %w{ en cs },
313
+ }
314
+ )
315
+ ```
316
+
317
+ `:language` parameter accepts string or symbols for single language target or
318
+ array of strings/symbols for several language targets.
319
+
320
+ ##### Location #####
321
+
322
+ ```ruby
323
+ Adapi::CampaignCriterion.create(
324
+ :campaign_id => campaign.id,
325
+ :criteria => {
326
+ :location => {
327
+ :name => { :city => 'Prague', :region => 'CZ-PR', :country => 'CZ' }
328
+ }
329
+ )
330
+
331
+ ```
332
+
333
+ This criterion has been heavily customized in adapi to comply with legacy
334
+ interfaces (pre-v201109). In other words, you don't have to enter locations as
335
+ ids (although you can). `:location` accepts following parameters:
336
+
337
+ * `:id` - this is standard location interface of AdWords `v201109_1`
338
+
339
+ ```ruby
340
+ :location => location_id
341
+ :location => { :id => location_id }
342
+ :location => { :id => [ location_id ] }
343
+ ```
344
+
345
+ * `:proximity`
346
+ * `:geo_point`: "longitude,lattitude"
347
+ * `:radius`: "radius_in_units radius_units"
348
+
349
+ ```ruby
350
+ :location => { :proximity => { :geo_point => '50.083333,14.366667', :radius => '50 km' } }
351
+ ```
352
+
353
+ * `:name` - hash with parameters specifying location name:
354
+ * `:city`
355
+ * `:region` (also `:province`) - as name (`"New York"`) or code (`"US-NY"`)
356
+ * `:country` - as name (`"Czech Republic"`) or code (`"CZ"`)
357
+
358
+ ```ruby
359
+ :location => { :name => { :country => 'Czech Republic' } }
360
+ :location => { :name => { :city => 'Prague' } }
361
+ :location => { :name => { :city => 'Prague', :region => 'CZ-PR', :country => 'CZ' } }
362
+ ```
363
+
364
+ Unfortunately, at the moment you can't target more locations in one
365
+ CampaignCriterion request. This is going to be fixed in the next version, but
366
+ for now please use following workaround - call CampaignCriterion several times:
367
+
368
+ ```ruby
369
+ Adapi::CampaignCriterion.create(
370
+ :campaign_id => campaign.id,
371
+ :criteria => {
372
+ :location => {
373
+ :name => { :city => 'Prague', :region => 'CZ-PR', :country => 'CZ' }
374
+ }
375
+ )
376
+
377
+ Adapi::CampaignCriterion.create(
378
+ :campaign_id => campaign.id,
379
+ :criteria => {
380
+ :location => {
381
+ :name => { :city => 'Brno', :region => 'CZ-JM', :country => 'CZ' }
382
+ }
383
+ }
384
+ )
385
+ ```
386
+
387
+ ##### Criterion in AdWords format #####
388
+
389
+ Convenient shortcuts for other criteria besides *language* and *location* are
390
+ not yet implemented. However, you can use any other criteria, you just have to
391
+ enter them as ids.
392
+
393
+ ```ruby
394
+ Adapi::CampaignCriterion.create(
395
+ :campaign_id => campaign.id,
396
+ :criteria => {
397
+ :platform => [ { :id => 30001} ]
398
+ }
399
+ )
400
+ ```
401
+
195
402
  ## Logging ##
196
403
 
197
- *STILL IN BETA* By default, nothing is logged. If you set `library/log_level` in
198
- configuration, SOAP messages will be logged to `~/adapi.log` file according to
199
- give log level.
404
+ By default, communication with AdWords API is not logged. In order to log
405
+ messages of certain log level or above, set `library/log_level` in configuration
406
+ (INFO or DEBUG setting is recommended for local development).
407
+
408
+ Default log path is "~/adapi.log". You can set custom log path in:
409
+ `library/log_path`.
410
+
411
+ By default, SOAP messages are logged in ugly format - everything fits on single
412
+ line. It's fast, but quite difficult to read. To log SOAP requests and responses
413
+ in pretty format, set `library/log_pretty_format` in configuration to `true`.
200
414
 
201
415
  Example of logger configuration:
202
416
 
203
417
  ```
204
418
  :library:
205
419
  :log_level: DEBUG
420
+ :log_path: /home/username/log/adapi.log
421
+ :log_pretty_format: true
206
422
  ```
207
423
 
208
424
  ## Author ##
@@ -27,20 +27,20 @@ Gem::Specification.new do |s|
27
27
  # PS: versions are freezed because both of these gems change a lot and
28
28
  # automatic updates through '~>' can (and already did) break something
29
29
  #
30
- s.add_dependency "google-ads-common", "0.6.3"
31
- s.add_dependency "google-adwords-api", "0.5.2"
30
+ s.add_dependency "google-ads-common", "0.7.0"
31
+ s.add_dependency "google-adwords-api", "0.6.0"
32
32
 
33
33
  s.add_dependency "activemodel", "~> 3.1"
34
34
  s.add_dependency "activesupport", "~> 3.1"
35
35
  s.add_dependency "rake", "~> 0.9.2"
36
- s.add_dependency "curb", "~> 0.7"
36
+ s.add_dependency "curb", "~> 0.8.0"
37
37
 
38
38
  s.add_development_dependency "yard", "~> 0.7"
39
39
  s.add_development_dependency "rcov", "~> 0.9"
40
40
  s.add_development_dependency "turn", "0.8.2" # PS: 0.8.3 is broken
41
41
  s.add_development_dependency "shoulda"
42
42
  s.add_development_dependency "fakeweb"
43
- s.add_development_dependency "factory_girl"
43
+ s.add_development_dependency "factory_girl", "~> 3.3.0"
44
44
  s.add_development_dependency "minitest"
45
45
 
46
46
  end
@@ -25,20 +25,23 @@ require 'adapi/ad_param'
25
25
  require 'adapi/constant_data'
26
26
  require 'adapi/constant_data/language'
27
27
  require 'adapi/constant_data/country'
28
+ require 'adapi/constant_data/province'
28
29
  require 'adapi/location'
29
30
 
30
- # monkeypatch HTTPI - important, check the file!
31
- require 'httpi_request_monkeypatch'
31
+ # monkeypatch that hardcodes HTTP timeout to 5 minutes
32
+ require 'httpi_monkeypatch'
32
33
 
33
- # I can haz hack?! This hotfixes OAuth
34
- # will be removed when new version of ads-common is released
35
- require 'ads_common_monkeypatch'
34
+ # optional monkeypatch that saves SOAP in Savon log in pretty format
35
+ # doesn't save SOAP in pretty format by default (it's faster)
36
+ if (Adapi::Config.read[:library][:log_pretty_format] rescue false)
37
+ require 'savon_monkeypatch'
38
+ end
36
39
 
37
40
  HTTPI.adapter = :curb
38
41
  HTTPI.log = false # supress HTTPI output
39
42
 
40
43
  module Adapi
41
- API_VERSION = :v201109
44
+ API_VERSION = :v201109_1
42
45
  end
43
46
 
44
47
  if RUBY_VERSION < '1.9'
@@ -8,6 +8,8 @@ module Adapi
8
8
  include ActiveModel::Conversion
9
9
  # TODO include ActiveModel::Dirty
10
10
 
11
+ LOGGER = Config.setup_logger
12
+
11
13
  attr_accessor :adwords, :service, :version, :params,
12
14
  :id, :status, :xsi_type
13
15
 
@@ -20,22 +22,13 @@ module Adapi
20
22
 
21
23
  raise "Missing Service Name" unless params[:service_name]
22
24
 
23
- puts "\n\nEXISTING INSTANCE USED\n\n" if params[:adwords_api_instance]
24
-
25
25
  # if params[:api_login] in nil, default login data are used
26
26
  # from ~/adwords_api.yml
27
27
  @adwords = params[:adwords_api_instance] || AdwordsApi::Api.new(Adapi::Config.read)
28
+ @adwords.logger = LOGGER if LOGGER
28
29
  @version = API_VERSION
29
30
  @service = @adwords.service(params[:service_name].to_sym, @version)
30
31
  @params = params
31
-
32
- # TODO add switched for logging (true/false) and log location
33
- log_level = Adapi::Config.read[:library][:log_level] rescue nil
34
- if log_level
35
- logger = Logger.new( File.join(ENV['HOME'], (params[:logfile] || 'adapi.log')) )
36
- logger.level = eval("Logger::%s" % Adapi::Config.read[:library][:log_level].to_s.upcase)
37
- @adwords.logger = logger
38
- end
39
32
  end
40
33
 
41
34
  def to_param
@@ -47,7 +47,7 @@ module Adapi
47
47
  @criteria.each_pair do |criterion_type, criterion_settings|
48
48
  case criterion_type
49
49
  when :language
50
- criterion_settings.each do |value|
50
+ Array(criterion_settings).each do |value|
51
51
  criteria_array << [criterion_type, value]
52
52
  end
53
53
 
@@ -14,6 +14,8 @@ module Adapi
14
14
  self.dir = ENV['HOME']
15
15
  self.filename = 'adapi.yml'
16
16
 
17
+ DEFAULT_LOG_PATH = File.join(ENV['HOME'], 'adapi.log')
18
+
17
19
  # display hash of all account settings
18
20
  #
19
21
  def self.settings(reload = false)
@@ -70,5 +72,26 @@ module Adapi
70
72
 
71
73
  @settings
72
74
  end
75
+
76
+ # Returns complete path to log file - both directory and file name.
77
+ #
78
+ def self.log_path
79
+ (Adapi::Config.read[:library][:log_path] rescue nil) || DEFAULT_LOG_PATH
80
+ end
81
+
82
+ # Returns freshly initialized logger object (or nil, if not available)
83
+ #
84
+ def self.setup_logger
85
+ log_level = self.read[:library][:log_level] rescue nil
86
+
87
+ if log_level
88
+ logger = Logger.new(self.log_path)
89
+ logger.level = eval("Logger::%s" % log_level.to_s.upcase)
90
+ logger
91
+ else
92
+ nil
93
+ end
94
+ end
95
+
73
96
  end
74
97
  end
@@ -0,0 +1,1128 @@
1
+ # encoding: utf-8
2
+
3
+ # this is hack for backward compatibility with old province names
4
+ # should be temporary, until I figure out better solution
5
+
6
+ module Adapi
7
+ class ConstantData::Location < ConstantData
8
+ class Province
9
+
10
+ PROVINCES = [
11
+ ["Buenos Aires","AR-B","20009"],
12
+ ["Capital Federal","AR-C","20010"],
13
+ ["Catamarca","AR-K","20015"],
14
+ ["Chaco","AR-H","20013"],
15
+ ["Chubut","AR-U","20023"],
16
+ ["Cordoba","AR-X","20026"],
17
+ ["Corrientes","AR-W","20025"],
18
+ ["Entre Rios","AR-E","20011"],
19
+ ["Formosa","AR-P","21299"],
20
+ ["Jujuy","AR-Y","20027"],
21
+ ["La Pampa","AR-L","20016"],
22
+ ["La Rioja","AR-F","20012"],
23
+ ["Mendoza","AR-M","20017"],
24
+ ["Misiones","AR-N","20018"],
25
+ ["Neuquen","AR-Q","20019"],
26
+ ["Rio Negro","AR-R","20020"],
27
+ ["Salta","AR-A","20008"],
28
+ ["San Juan","AR-J","20014"],
29
+ ["San Luis","AR-D","21297"],
30
+ ["Santa Cruz","AR-Z","20028"],
31
+ ["Santa Fe","AR-S","20021"],
32
+ ["Santiago del Estero","AR-G","21298"],
33
+ ["Tierra del Fuego","AR-V","20024"],
34
+ ["Tucuman","AR-T","20022"],
35
+ ["Australian Capital Territory","AU-ACT","20034"],
36
+ ["New South Wales","AU-NSW","20035"],
37
+ ["Northern Territory","AU-NT","20036"],
38
+ ["Queensland","AU-QLD","20037"],
39
+ ["South Australia","AU-SA","20038"],
40
+ ["Tasmania","AU-TAS","20039"],
41
+ ["Victoria","AU-VIC","20040"],
42
+ ["Western Australia","AU-WA","20041"],
43
+ ["Burgenland","AT-1","20042"],
44
+ ["Carinthia","AT-2","20043"],
45
+ ["Lower Austria","AT-3","20044"],
46
+ ["Salzburg","AT-5","20046"],
47
+ ["Styria","AT-6","20047"],
48
+ ["Tyrol","AT-7","20048"],
49
+ ["Upper Austria","AT-4","20045"],
50
+ ["Vienna","AT-9","20050"],
51
+ ["Vorarlberg","AT-8","20049"],
52
+ ["Antwerp","BE-VAN","20053"],
53
+ ["Brussels","BE-BRX","20052"],
54
+ ["East Flanders","BE-VOV","20056"],
55
+ ["Flemish Brabant","BE-VBR","20054"],
56
+ ["Hainaut","BE-WHT","20059"],
57
+ ["Liege","BE-WLG","20060"],
58
+ ["Limburg","BE-VLI","20055"],
59
+ ["Luxembourg","BE-WLX","20061"],
60
+ ["Namur","BE-WNA","20062"],
61
+ ["Walloon Brabant","BE-WBR","20058"],
62
+ ["West Flanders","BE-VWV","20057"],
63
+ ["Acre","BR-AC","21232"],
64
+ ["Alagoas","BR-AL","20086"],
65
+ ["Amapa","BR-AP","21226"],
66
+ ["Amazonas","BR-AM","20087"],
67
+ ["Bahia","BR-BA","20088"],
68
+ ["Ceara","BR-CE","20089"],
69
+ ["Espirito Santo","BR-ES","20091"],
70
+ ["Federal District","BR-DF","20090"],
71
+ ["Goias","BR-GO","20092"],
72
+ ["Maranhao","BR-MA","20093"],
73
+ ["Mato Grosso","BR-MT","20096"],
74
+ ["Mato Grosso do Sul","BR-MS","20095"],
75
+ ["Minas Gerais","BR-MG","20094"],
76
+ ["Para","BR-PA","20097"],
77
+ ["Paraiba","BR-PB","20098"],
78
+ ["Parana","BR-PR","20101"],
79
+ ["Pernambuco","BR-PE","20099"],
80
+ ["Piaui","BR-PI","20100"],
81
+ ["Rio de Janeiro","BR-RJ","20102"],
82
+ ["Rio Grande do Norte","BR-RN","20103"],
83
+ ["Rio Grande do Sul","BR-RS","20104"],
84
+ ["Rondonia","BR-RO","21227"],
85
+ ["Roraima","BR-RR","21228"],
86
+ ["Santa Catarina","BR-SC","20105"],
87
+ ["Sao Paulo","BR-SP","20106"],
88
+ ["Sergipe","BR-SE","21229"],
89
+ ["Tocantins","BR-TO","21230"],
90
+ ["Alberta","CA-AB","20113"],
91
+ ["British Columbia","CA-BC","20114"],
92
+ ["Manitoba","CA-MB","20115"],
93
+ ["New Brunswick","CA-NB","20116"],
94
+ ["Newfoundland","CA-NF","20117"],
95
+ ["Northwest Territories","CA-NT","20119"],
96
+ ["Nova Scotia","CA-NS","20118"],
97
+ ["Nunavut","CA-NU","20120"],
98
+ ["Ontario","CA-ON","20121"],
99
+ ["Prince Edward Island","CA-PE","20122"],
100
+ ["Quebec","CA-QC","20123"],
101
+ ["Saskatchewan","CA-SK","20124"],
102
+ ["Yukon Territory","CA-YT","20125"],
103
+ ["Antofagasta","CL-AN","20152"],
104
+ ["Araucanía","CL-AR","20153"],
105
+ ["Bío-Bío","CL-BI","20154"],
106
+ ["Coquimbo","CL-CO","20155"],
107
+ ["Libertador General Bernardo O'Higgins","CL-LI","20156"],
108
+ ["Los Lagos","CL-LL","20157"],
109
+ ["Magallanes","CL-MA","20158"],
110
+ ["Maule","CL-ML","20159"],
111
+ ["Region Metropolitana de Santiago","CL-RM","20160"],
112
+ ["Tarapacá","CL-TA","20161"],
113
+ ["Valparaíso","CL-VS","20162"],
114
+ ["Anhui","CN-34","20174"],
115
+ ["Beijing","CN-11","20163"],
116
+ ["Chongqing","CN-50","20184"],
117
+ ["Fujian","CN-35","20175"],
118
+ ["Gansu","CN-62","20190"],
119
+ ["Guangdong","CN-44","20181"],
120
+ ["Guangxi","CN-45","20182"],
121
+ ["Guizhou","CN-52","20186"],
122
+ ["Hainan","CN-46","20183"],
123
+ ["Hebei","CN-13","20165"],
124
+ ["Heilongjiang","CN-23","20170"],
125
+ ["Henan","CN-41","20178"],
126
+ ["Hubei","CN-42","20179"],
127
+ ["Hunan","CN-43","20180"],
128
+ ["Jiangsu","CN-32","20172"],
129
+ ["Jiangxi","CN-36","20176"],
130
+ ["Jilin","CN-22","20169"],
131
+ ["Liaoning","CN-21","20168"],
132
+ ["Nei Monggol","CN-15","20167"],
133
+ ["Ningxia","CN-64","20192"],
134
+ ["Qinghai","CN-63","20191"],
135
+ ["Shaanxi","CN-61","20189"],
136
+ ["Shandong","CN-37","20177"],
137
+ ["Shanghai","CN-31","20171"],
138
+ ["Shanxi","CN-14","20166"],
139
+ ["Sichuan","CN-51","20185"],
140
+ ["Tianjin","CN-12","20164"],
141
+ ["Xinjiang","CN-65","20193"],
142
+ ["Xizang","CN-54","20188"],
143
+ ["Yunnan","CN-53","20187"],
144
+ ["Zhejiang","CN-33","20173"],
145
+ ["Amazonas","CO-AMA","21506"],
146
+ ["Antioquia","CO-ANT","20198"],
147
+ ["Arauca","CO-ARA","21507"],
148
+ ["Atlantico","CO-ATL","20199"],
149
+ ["Bogota","CO-DC","20203"],
150
+ ["Bolivar","CO-BOL","20200"],
151
+ ["Boyaca","CO-BOY","21508"],
152
+ ["Caldas","CO-CAL","20201"],
153
+ ["Caqueta","CO-CAQ","21509"],
154
+ ["Casanare","CO-CAS","21510"],
155
+ ["Cauca","CO-CAU","21511"],
156
+ ["Cesar","CO-CES","21512"],
157
+ ["Choco","CO-CHO","21513"],
158
+ ["Cordoba","CO-COR","21514"],
159
+ ["Cundinamarca","CO-CUN","20202"],
160
+ ["Guainia","CO-GUA","21515"],
161
+ ["Guaviare","CO-GUV","21516"],
162
+ ["Huila","CO-HUI","20204"],
163
+ ["La Guajira","CO-LAG","21517"],
164
+ ["Magdalena","CO-MAG","21290"],
165
+ ["Meta","CO-MET","20205"],
166
+ ["Narino","CO-NAR","20206"],
167
+ ["Norte de Santander","CO-NSA","21518"],
168
+ ["Putumayo","CO-PUT","20207"],
169
+ ["Quindio","CO-QUI","21519"],
170
+ ["Risaralda","CO-RIS","20208"],
171
+ ["San Andres y Providencia","CO-SAP","21520"],
172
+ ["Santander","CO-SAN","20209"],
173
+ ["Sucre","CO-SUC","21521"],
174
+ ["Tolima","CO-TOL","20210"],
175
+ ["Valle del Cauca","CO-VAC","20211"],
176
+ ["Vaupes","CO-VAU","21522"],
177
+ ["Vichada","CO-VID","21523"],
178
+ ["Bjelovar and Bilogora","HR-07","21440"],
179
+ ["Dubrovnik and Neretva","HR-19","20413"],
180
+ ["Grad Zagreb","HR-21","21493"],
181
+ ["Istria","HR-18","21443"],
182
+ ["Karlovac","HR-04","21441"],
183
+ ["Koprivnica and Krizevaci","HR-06","21274"],
184
+ ["Krapina and Zagorje","HR-02","21489"],
185
+ ["Lika and Senj","HR-09","21490"],
186
+ ["Medjimurje","HR-20","21492"],
187
+ ["Osijek and Baranja","HR-14","20410"],
188
+ ["Pozega and Slavonia","HR-11","21442"],
189
+ ["Sibenik and Knin","HR-15","21444"],
190
+ ["Sisak and Moslavina","HR-03","21445"],
191
+ ["Slavonski Brod and Posavina","HR-12","21446"],
192
+ ["Split and Dalmatia","HR-17","20412"],
193
+ ["The Coast and Gorski Kotar","HR-08","20408"],
194
+ ["Varazdin","HR-05","21447"],
195
+ ["Virovitica and Podravina","HR-10","21491"],
196
+ ["Vukovar and Srijem","HR-16","20411"],
197
+ ["Zadar","HR-13","20409"],
198
+ ["Zagreb","HR-01","20407"],
199
+ ["Central Bohemia","CZ-ST","21494"],
200
+ ["Hradec Kralove","CZ-KR","21495"],
201
+ ["Karlovy Vary","CZ-KA","21496"],
202
+ ["Liberec","CZ-LI","21497"],
203
+ ["Moravian-Silesia","CZ-MO","21498"],
204
+ ["Olomouc","CZ-OL","21499"],
205
+ ["Pardubice","CZ-PA","21500"],
206
+ ["Pilsen","CZ-PL","21501"],
207
+ ["Prague","CZ-PR","21502"],
208
+ ["South Bohemia","CZ-JC","20218"],
209
+ ["South Moravia","CZ-JM","20219"],
210
+ ["Usti nad Labem","CZ-US","21503"],
211
+ ["Vysocina","CZ-VY","21504"],
212
+ ["Zlinsky","CZ-ZL","21505"],
213
+ ["Aarhus","DK-070","20254"],
214
+ ["Bornholm","DK-040","20248"],
215
+ ["Copenhagen","DK-015","20243"],
216
+ ["Frederiksberg","DK-147","20257"],
217
+ ["Frederiksborg","DK-020","20244"],
218
+ ["Fyn","DK-042","20249"],
219
+ ["Nordjylland","DK-080","20256"],
220
+ ["Ribe","DK-055","20251"],
221
+ ["Ringkoebing","DK-065","20253"],
222
+ ["Roskilde","DK-025","20245"],
223
+ ["Soenderjylland","DK-050","20250"],
224
+ ["Storstroem","DK-035","20247"],
225
+ ["Vejle","DK-060","20252"],
226
+ ["Vestsjaelland","DK-030","20246"],
227
+ ["Viborg","DK-076","20255"],
228
+ ["Ad Daqahliyah","EG-DK","21458"],
229
+ ["Al Bahr al Ahmar","EG-BA","21459"],
230
+ ["Al Buhayrah","EG-BH","21460"],
231
+ ["Al Fayyum","EG-FYM","21461"],
232
+ ["Al Gharbiyah","EG-GH","21462"],
233
+ ["Al Iskandariyah","EG-ALX","21463"],
234
+ ["Al Ismailiyah","EG-IS","21464"],
235
+ ["Al Jizah","EG-GZ","21465"],
236
+ ["Al Minufiyah","EG-MNF","21466"],
237
+ ["Al Minya","EG-MN","21467"],
238
+ ["Al Qahirah","EG-C","21468"],
239
+ ["Al Qalyubiyah","EG-KB","21469"],
240
+ ["Al Uqsur","EG-LX","21470"],
241
+ ["Al Wadi al Jadid","EG-WAD","21472"],
242
+ ["As Suways","EG-SUZ","21473"],
243
+ ["Ash Sharqiyah","EG-SHR","21474"],
244
+ ["Aswan","EG-ASN","21475"],
245
+ ["Asyut","EG-AST","21476"],
246
+ ["Bani Suwayf","EG-BNS","21477"],
247
+ ["Bur Said","EG-PTS","21478"],
248
+ ["Dumyat","EG-DT","21479"],
249
+ ["Janub Sina","EG-JS","21480"],
250
+ ["Kafr ash Shaykh","EG-KFS","21481"],
251
+ ["Matruh","EG-MT","21482"],
252
+ ["Qina","EG-KN","21483"],
253
+ ["Shamal Sina","EG-SIN","21484"],
254
+ ["Suhaj","EG-SHG","21485"],
255
+ ["The Province of Åland","FI-AL","20304"],
256
+ ["The Province of Eastern Finland","FI-IS","20306"],
257
+ ["The Province of Lapland","FI-LL","20307"],
258
+ ["The Province of Oulu","FI-OL","20309"],
259
+ ["The Province of Southern Finland","FI-ES","20305"],
260
+ ["The Province of Western Finland","FI-LS","20308"],
261
+ ["Alsace","FR-A","20311"],
262
+ ["Aquitaine","FR-B","20313"],
263
+ ["Auvergne","FR-C","20314"],
264
+ ["Brittany","FR-E","20316"],
265
+ ["Burgundy","FR-D","20315"],
266
+ ["Centre","FR-F","20317"],
267
+ ["Champagne-Ardenne","FR-G","20318"],
268
+ ["Corsica","FR-H","20319"],
269
+ ["Franche-Comte","FR-I","20320"],
270
+ ["Ile-de-France","FR-J","20321"],
271
+ ["Languedoc-Roussillon","FR-K","20322"],
272
+ ["Limousin","FR-L","20323"],
273
+ ["Lorraine","FR-M","20324"],
274
+ ["Midi-Pyrenees","FR-N","20325"],
275
+ ["Nord-Pas-de-Calais","FR-O","20326"],
276
+ ["Normandy - Lower","FR-P","20327"],
277
+ ["Normandy - Upper","FR-Q","20328"],
278
+ ["Pays de la Loire","FR-R","20329"],
279
+ ["Picardie","FR-S","20330"],
280
+ ["Poitou-Charentes","FR-T","20331"],
281
+ ["Provence-Alpes-Cote d'Azur","FR-U","20332"],
282
+ ["Rhône-Alpes","FR-V","20333"],
283
+ ["Baden-Württemberg","DE-BW","20228"],
284
+ ["Bayern","DE-BY","20229"],
285
+ ["Berlin","DE-BE","20226"],
286
+ ["Brandenburg","DE-BR","20227"],
287
+ ["Bremen","DE-HB","20230"],
288
+ ["Hamburg","DE-HH","20232"],
289
+ ["Hessen","DE-HE","20231"],
290
+ ["Mecklenburg-Vorpommern","DE-MV","20233"],
291
+ ["Niedersachsen","DE-NI","20234"],
292
+ ["Nordrhein-Westfalen","DE-NW","20235"],
293
+ ["Rheinland-Pfalz","DE-RP","20236"],
294
+ ["Saarland","DE-SL","20238"],
295
+ ["Sachsen","DE-SN","20239"],
296
+ ["Sachsen-Anhalt","DE-ST","20240"],
297
+ ["Schleswig-Holstein","DE-SH","20237"],
298
+ ["Thüringen","DE-TH","20241"],
299
+ ["Bacs-Kiskun","HU-BK","20417"],
300
+ ["Baranya","HU-BA","20415"],
301
+ ["Bekes","HU-BE","20416"],
302
+ ["Borsod-Abauj-Zemplen","HU-BZ","20419"],
303
+ ["Budapest","HU-BU","20418"],
304
+ ["Csongrad","HU-CS","20420"],
305
+ ["Fejer","HU-FE","20421"],
306
+ ["Gyor-Moson-Sopron","HU-GS","20422"],
307
+ ["Hajdu-Bihar","HU-HB","20424"],
308
+ ["Heves","HU-HE","20425"],
309
+ ["Jasz-Nagykun-Szolnok","HU-JN","20426"],
310
+ ["Komarom-Esztergom","HU-KE","20427"],
311
+ ["Nograd","HU-NO","20428"],
312
+ ["Pest","HU-PE","20429"],
313
+ ["Somogy","HU-SO","20430"],
314
+ ["Szabolcs-Szatmar-Bereg","HU-SZ","20431"],
315
+ ["Tolna","HU-TO","20432"],
316
+ ["Vas","HU-VA","20433"],
317
+ ["Veszprem","HU-VE","20434"],
318
+ ["Zala","HU-ZA","20435"],
319
+ ["Andaman and Nicobar Islands","IN-AN","20452"],
320
+ ["Andhra Pradesh","IN-AP","20453"],
321
+ ["Arunachal Pradesh","IN-AR","21289"],
322
+ ["Assam","IN-AS","20454"],
323
+ ["Bihar","IN-BR","20455"],
324
+ ["Chandigarh","IN-CH","21342"],
325
+ ["Chhattisgarh","IN-CT","21334"],
326
+ ["Dadar and Nagar Haveli","IN-DN","21343"],
327
+ ["Daman and Diu","IN-DD","21344"],
328
+ ["Delhi","IN-DL","20456"],
329
+ ["Goa","IN-GA","21268"],
330
+ ["Gujarat","IN-GJ","20457"],
331
+ ["Haryana","IN-HR","20458"],
332
+ ["Himachal Pradesh","IN-HP","21335"],
333
+ ["Jammu and Kashmir","IN-JK","20459"],
334
+ ["Jharkhand","IN-JH","21336"],
335
+ ["Karnataka","IN-KA","20460"],
336
+ ["Kerala","IN-KL","20461"],
337
+ ["Lakshadweep","IN-LD","21345"],
338
+ ["Madhya Pradesh","IN-MP","20464"],
339
+ ["Maharashtra","IN-MH","20462"],
340
+ ["Manipur","IN-MN","21337"],
341
+ ["Meghalaya","IN-ML","20463"],
342
+ ["Mizoram","IN-MZ","21338"],
343
+ ["Nagaland","IN-NL","21339"],
344
+ ["Orissa","IN-OR","20465"],
345
+ ["Pondicherry","IN-PY","20467"],
346
+ ["Punjab","IN-PB","20466"],
347
+ ["Rajasthan","IN-RJ","20468"],
348
+ ["Sikkim","IN-SK","21340"],
349
+ ["Tamil Nadu","IN-TN","20469"],
350
+ ["Tripura","IN-TR","20470"],
351
+ ["Uttar Pradesh","IN-UP","20471"],
352
+ ["Uttaranchal","IN-UL","21341"],
353
+ ["West Bengal","IN-WB","20472"],
354
+ ["Carlow","IE-CW","20477"],
355
+ ["Cavan","IE-CN","20476"],
356
+ ["Clare","IE-CE","20475"],
357
+ ["Cork","IE-C","20474"],
358
+ ["Donegal","IE-DL","20479"],
359
+ ["Dublin","IE-D","20478"],
360
+ ["Galway","IE-G","20480"],
361
+ ["Kerry","IE-KY","20483"],
362
+ ["Kildare","IE-KE","20481"],
363
+ ["Kilkenny","IE-KK","20482"],
364
+ ["Laois","IE-LS","20486"],
365
+ ["Leitrim","IE-LM","21317"],
366
+ ["Limerick","IE-LK","20485"],
367
+ ["Longford","IE-LD","21316"],
368
+ ["Louth","IE-LH","20484"],
369
+ ["Mayo","IE-MO","20489"],
370
+ ["Meath","IE-MH","20487"],
371
+ ["Monaghan","IE-MN","20488"],
372
+ ["Offaly","IE-OY","20490"],
373
+ ["Roscommon","IE-RN","20491"],
374
+ ["Sligo","IE-SO","20492"],
375
+ ["Tipperary","IE-TA","20493"],
376
+ ["Waterford","IE-WD","20494"],
377
+ ["Westmeath","IE-WH","20495"],
378
+ ["Wexford","IE-WX","20497"],
379
+ ["Wicklow","IE-WW","20496"],
380
+ ["HaDarom","IL-D","20514"],
381
+ ["HaMerkaz","IL-M","20517"],
382
+ ["HaZafon","IL-Z","20519"],
383
+ ["Hefa","IL-HA","20515"],
384
+ ["Tel-Aviv","IL-TA","20518"],
385
+ ["Yerushalayim Al Quds","IL-JM","20516"],
386
+ ["Agrigento","IT-AG","20520"],
387
+ ["Alessandria","IT-AL","20521"],
388
+ ["Ancona","IT-AN","20522"],
389
+ ["Aosta","IT-AO","20523"],
390
+ ["Arezzo","IT-AR","20526"],
391
+ ["Ascoli Piceno","IT-AP","20524"],
392
+ ["Asti","IT-AT","20527"],
393
+ ["Avellino","IT-AV","20528"],
394
+ ["Bari","IT-BA","20529"],
395
+ ["Belluno","IT-BL","20532"],
396
+ ["Benevento","IT-BN","20533"],
397
+ ["Bergamo","IT-BG","20530"],
398
+ ["Biella","IT-BI","20531"],
399
+ ["Bologna","IT-BO","20534"],
400
+ ["Bolzano","IT-BZ","20537"],
401
+ ["Brescia","IT-BS","20536"],
402
+ ["Brindisi","IT-BR","20535"],
403
+ ["Cagliari","IT-CA","20538"],
404
+ ["Caltanissetta","IT-CL","20542"],
405
+ ["Campobasso","IT-CB","20539"],
406
+ ["Caserta","IT-CE","20540"],
407
+ ["Catania","IT-CT","20547"],
408
+ ["Catanzaro","IT-CZ","20548"],
409
+ ["Chieti","IT-CH","20541"],
410
+ ["Como","IT-CO","20544"],
411
+ ["Cosenza","IT-CS","20546"],
412
+ ["Cremona","IT-CR","20545"],
413
+ ["Crotone","IT-KR","20560"],
414
+ ["Cuneo","IT-CN","20543"],
415
+ ["Enna","IT-EN","20549"],
416
+ ["Ferrara","IT-FE","20550"],
417
+ ["Florence","IT-FI","20552"],
418
+ ["Foggia","IT-FG","20551"],
419
+ ["Forlì-Cesena","IT-FO","20553"],
420
+ ["Frosinone","IT-FR","20554"],
421
+ ["Genoa","IT-GE","20555"],
422
+ ["Gorizia","IT-GO","20556"],
423
+ ["Grosseto","IT-GR","20557"],
424
+ ["Imperia","IT-IM","20558"],
425
+ ["Isernia","IT-IS","20559"],
426
+ ["L'Aquila","IT-AQ","20525"],
427
+ ["La Spezia","IT-SP","20602"],
428
+ ["Latina","IT-LT","20565"],
429
+ ["Lecce","IT-LE","20562"],
430
+ ["Lecco","IT-LC","20561"],
431
+ ["Livorno","IT-LI","20563"],
432
+ ["Lodi","IT-LO","20564"],
433
+ ["Lucca","IT-LU","20566"],
434
+ ["Macerata","IT-MC","20567"],
435
+ ["Mantua","IT-MN","20570"],
436
+ ["Massa","IT-MS","20572"],
437
+ ["Matera","IT-MT","20573"],
438
+ ["Messina","IT-ME","20568"],
439
+ ["Milan","IT-MI","20569"],
440
+ ["Modena","IT-MO","20571"],
441
+ ["Naples","IT-NA","20574"],
442
+ ["Novara","IT-NO","20575"],
443
+ ["Nuoro","IT-NU","20576"],
444
+ ["Oristano","IT-OR","20577"],
445
+ ["Padua","IT-PD","20580"],
446
+ ["Palermo","IT-PA","20578"],
447
+ ["Parma","IT-PR","20586"],
448
+ ["Pavia","IT-PV","20589"],
449
+ ["Perugia","IT-PG","20582"],
450
+ ["Pesaro","IT-PS","20587"],
451
+ ["Pescara","IT-PE","20581"],
452
+ ["Piacenza","IT-PC","20579"],
453
+ ["Pisa","IT-PI","20583"],
454
+ ["Pistoia","IT-PT","20588"],
455
+ ["Pordenone","IT-PN","20584"],
456
+ ["Potenza","IT-PZ","20590"],
457
+ ["Prato","IT-PO","20585"],
458
+ ["Ragusa","IT-RG","20594"],
459
+ ["Ravenna","IT-RA","20591"],
460
+ ["Reggio Calabria","IT-RC","20592"],
461
+ ["Reggio Emilia","IT-RE","20593"],
462
+ ["Rieti","IT-RI","20595"],
463
+ ["Rimini","IT-RN","20597"],
464
+ ["Rome","IT-RM","20596"],
465
+ ["Rovigo","IT-RO","20598"],
466
+ ["Salerno","IT-SA","20599"],
467
+ ["Sassari","IT-SS","20604"],
468
+ ["Savona","IT-SV","20605"],
469
+ ["Siena","IT-SI","20600"],
470
+ ["Siracusa","IT-SR","20603"],
471
+ ["Sondrio","IT-SO","20601"],
472
+ ["Taranto","IT-TA","20606"],
473
+ ["Teramo","IT-TE","20607"],
474
+ ["Terni","IT-TR","20611"],
475
+ ["Torino","IT-TO","20609"],
476
+ ["Trapani","IT-TP","20610"],
477
+ ["Trento","IT-TN","20608"],
478
+ ["Treviso","IT-TV","20613"],
479
+ ["Trieste","IT-TS","20612"],
480
+ ["Udine","IT-UD","20614"],
481
+ ["Varese","IT-VA","20615"],
482
+ ["Venice","IT-VE","20618"],
483
+ ["Verbano-Cusio-Ossola","IT-VB","20616"],
484
+ ["Vercelli","IT-VC","20617"],
485
+ ["Verona","IT-VR","20620"],
486
+ ["Vibo Valentia","IT-VV","21233"],
487
+ ["Vicenza","IT-VI","20619"],
488
+ ["Viterbo","IT-VT","20621"],
489
+ ["Aichi","JP-23","20646"],
490
+ ["Akita","JP-05","20628"],
491
+ ["Aomori","JP-02","20625"],
492
+ ["Chiba","JP-12","20635"],
493
+ ["Ehime","JP-38","20661"],
494
+ ["Fukui","JP-18","20641"],
495
+ ["Fukuoka","JP-40","20663"],
496
+ ["Fukushima","JP-07","20630"],
497
+ ["Gifu","JP-21","20644"],
498
+ ["Gunma","JP-10","20633"],
499
+ ["Hiroshima","JP-34","20657"],
500
+ ["Hokkaido","JP-01","20624"],
501
+ ["Hyogo","JP-28","20651"],
502
+ ["Ibaraki","JP-08","20631"],
503
+ ["Ishikawa","JP-17","20640"],
504
+ ["Iwate","JP-03","20626"],
505
+ ["Kagawa","JP-37","20660"],
506
+ ["Kagoshima","JP-46","20669"],
507
+ ["Kanagawa","JP-14","20637"],
508
+ ["Kochi","JP-39","20662"],
509
+ ["Kumamoto","JP-43","20666"],
510
+ ["Kyoto","JP-26","20649"],
511
+ ["Mie","JP-24","20647"],
512
+ ["Miyagi","JP-04","20627"],
513
+ ["Miyazaki","JP-45","20668"],
514
+ ["Nagano","JP-20","20643"],
515
+ ["Nagasaki","JP-42","20665"],
516
+ ["Nara","JP-29","20652"],
517
+ ["Niigata","JP-15","20638"],
518
+ ["Oita","JP-44","20667"],
519
+ ["Okayama","JP-33","20656"],
520
+ ["Okinawa","JP-47","20670"],
521
+ ["Osaka","JP-27","20650"],
522
+ ["Saga","JP-41","20664"],
523
+ ["Saitama","JP-11","20634"],
524
+ ["Shiga","JP-25","20648"],
525
+ ["Shimane","JP-32","20655"],
526
+ ["Shizuoka","JP-22","20645"],
527
+ ["Tochigi","JP-09","20632"],
528
+ ["Tokushima","JP-36","20659"],
529
+ ["Tokyo","JP-13","20636"],
530
+ ["Tottori","JP-31","20654"],
531
+ ["Toyama","JP-16","20639"],
532
+ ["Wakayama","JP-30","20653"],
533
+ ["Yamagata","JP-06","20629"],
534
+ ["Yamaguchi","JP-35","20658"],
535
+ ["Yamanashi","JP-19","20642"],
536
+ ["Federal Territory of Kuala Lumpur","MY-14","20751"],
537
+ ["Federal Territory of Putrajaya","MY-16","21539"],
538
+ ["Johor","MY-01","20741"],
539
+ ["Kedah","MY-02","20742"],
540
+ ["Kelantan","MY-03","20740"],
541
+ ["Melaka","MY-04","20744"],
542
+ ["Negeri Sembilan","MY-05","20745"],
543
+ ["Pahang","MY-06","20739"],
544
+ ["Perak","MY-08","20737"],
545
+ ["Perlis","MY-09","20747"],
546
+ ["Pulau Pinang","MY-07","20746"],
547
+ ["Sabah","MY-12","20748"],
548
+ ["Sarawak","MY-13","20749"],
549
+ ["Selangor","MY-10","20738"],
550
+ ["Terengganu","MY-11","20750"],
551
+ ["Wilayah Persekutuan Labuan","MY-15","20743"],
552
+ ["Aguascalientes","MX-AGU","20694"],
553
+ ["Baja California","MX-BCN","20696"],
554
+ ["Baja California Sur","MX-BCS","20697"],
555
+ ["Campeche","MX-CAM","20698"],
556
+ ["Chiapas","MX-CHP","20700"],
557
+ ["Chihuahua","MX-CHH","20699"],
558
+ ["Coahuila","MX-COA","20701"],
559
+ ["Colima","MX-COL","20702"],
560
+ ["Distrito Federal","MX-DF","20703"],
561
+ ["Durango","MX-DUR","20704"],
562
+ ["Estado de México","MX-MEX","20709"],
563
+ ["Guanajuato","MX-GUA","20706"],
564
+ ["Guerrero","MX-GRO","20705"],
565
+ ["Hidalgo","MX-HID","20707"],
566
+ ["Jalisco","MX-JAL","20708"],
567
+ ["Michoacán","MX-MIC","20710"],
568
+ ["Morelos  ","MX-MOR","20711"],
569
+ ["Nayarit","MX-NAY","20712"],
570
+ ["Nuevo León","MX-NLE","20713"],
571
+ ["Oaxaca","MX-OAX","20714"],
572
+ ["Puebla","MX-PUE","20715"],
573
+ ["Querétaro ","MX-QUE","20716"],
574
+ ["Quintana Roo","MX-ROO","20717"],
575
+ ["San Luis Potosí","MX-SLP","20719"],
576
+ ["Sinaloa","MX-SIN","20718"],
577
+ ["Sonora","MX-SON","20720"],
578
+ ["Tabasco","MX-TAB","20721"],
579
+ ["Tamaulipas","MX-TAM","20722"],
580
+ ["Tlaxcala","MX-TLA","20723"],
581
+ ["Veracruz","MX-VER","20724"],
582
+ ["Yucatán","MX-YUC","20725"],
583
+ ["Zacatecas","MX-ZAC","20726"],
584
+ ["Chaouia-Ouardigha","MA-09","21524"],
585
+ ["Doukkala-Abda","MA-10","21525"],
586
+ ["Fes-Boulemane","MA-05","21526"],
587
+ ["Gharb-Chrarda-Beni Hssen","MA-02","21527"],
588
+ ["Grand Casablanca","MA-08","21528"],
589
+ ["Guelmim-Es Semara","MA-14","21529"],
590
+ ["Laayoune-Boujdour-Sakia El Hamra","MA-15","21530"],
591
+ ["Marrakech-Tensift-El Haouz","MA-11","21531"],
592
+ ["Meknes-Tafilalet","MA-06","21532"],
593
+ ["Oriental","MA-04","21533"],
594
+ ["Rabat-Sale-Zemmour-Zaer","MA-07","21534"],
595
+ ["Souss-Massa-Draa","MA-13","21535"],
596
+ ["Tadla-Azilal","MA-12","21536"],
597
+ ["Tanger-Tetouan","MA-01","21537"],
598
+ ["Taza-Al Hoceima-Taounate","MA-03","21538"],
599
+ ["Drenthe","NL-DR","20759"],
600
+ ["Flevopolder","NL-FL","20760"],
601
+ ["Friesland","NL-FR","20761"],
602
+ ["Gelderland","NL-GE","20762"],
603
+ ["Groningen","NL-GR","20763"],
604
+ ["Limburg","NL-LI","20764"],
605
+ ["Noord-Brabant","NL-NB","20765"],
606
+ ["Noord-Holland","NL-NH","20766"],
607
+ ["Overijssel","NL-OV","20767"],
608
+ ["Utrecht","NL-UT","20768"],
609
+ ["Zeeland","NL-ZE","20769"],
610
+ ["Zuid-Holland","NL-ZH","20770"],
611
+ ["Auckland","NZ-AUK","20791"],
612
+ ["Bay of Plenty","NZ-BOP","20792"],
613
+ ["Canterbury","NZ-CAN","21302"],
614
+ ["Gisborne","NZ-GIS","21303"],
615
+ ["Hawke's Bay","NZ-HKB","21304"],
616
+ ["Manawatu-Wanganui","NZ-MWT","21305"],
617
+ ["Marlborough","NZ-MBH","21306"],
618
+ ["Nelson","NZ-NSN","21307"],
619
+ ["Northland","NZ-NTL","21308"],
620
+ ["Otago","NZ-OTA","21309"],
621
+ ["Southland","NZ-STL","21310"],
622
+ ["Taranaki","NZ-TKI","21311"],
623
+ ["Tasman","NZ-TAS","21312"],
624
+ ["Waikato","NZ-WKO","21313"],
625
+ ["Wellington","NZ-WGN","21314"],
626
+ ["West Coast","NZ-WTC","21315"],
627
+ ["Abia","NG-AB","21540"],
628
+ ["Abuja Capital Territory","NG-FC","21541"],
629
+ ["Adamawa","NG-AD","21542"],
630
+ ["Akwa Ibom","NG-AK","21543"],
631
+ ["Anambra","NG-AN","21544"],
632
+ ["Bauchi","NG-BA","21545"],
633
+ ["Bayelsa","NG-BY","21546"],
634
+ ["Benue","NG-BE","21547"],
635
+ ["Borno","NG-BO","21548"],
636
+ ["Cross River","NG-CR","21549"],
637
+ ["Delta","NG-DE","21550"],
638
+ ["Ebonyi","NG-EB","21551"],
639
+ ["Edo","NG-ED","21552"],
640
+ ["Ekiti","NG-EK","21553"],
641
+ ["Enugu","NG-EN","21554"],
642
+ ["Gombe","NG-GO","21555"],
643
+ ["Imo","NG-IM","21556"],
644
+ ["Jigawa","NG-JI","21557"],
645
+ ["Kaduna","NG-KD","21558"],
646
+ ["Kano","NG-KN","21559"],
647
+ ["Katsina","NG-KT","21560"],
648
+ ["Kebbi","NG-KB","21561"],
649
+ ["Kogi","NG-KO","21562"],
650
+ ["Kwara","NG-KW","21563"],
651
+ ["Lagos","NG-LA","21564"],
652
+ ["Nasarawa","NG-NA","21565"],
653
+ ["Niger","NG-NI","21566"],
654
+ ["Ogun","NG-OG","21567"],
655
+ ["Ondo","NG-ON","21568"],
656
+ ["Osun","NG-OS","21569"],
657
+ ["Oyo","NG-OY","21570"],
658
+ ["Plateau","NG-PL","21571"],
659
+ ["Rivers","NG-RI","21572"],
660
+ ["Sokoto","NG-SO","21573"],
661
+ ["Taraba","NG-TA","21574"],
662
+ ["Yobe","NG-YO","21575"],
663
+ ["Zamfara","NG-ZA","21576"],
664
+ ["Akershus","NO-02","20772"],
665
+ ["Aust-Agder","NO-09","20779"],
666
+ ["Buskerud","NO-06","20776"],
667
+ ["Finnmark","NO-20","20789"],
668
+ ["Hedmark","NO-04","20774"],
669
+ ["Hordaland","NO-12","20782"],
670
+ ["Moere og Romsdal","NO-15","20784"],
671
+ ["Nord-Troendelag","NO-17","20786"],
672
+ ["Nordland","NO-18","20787"],
673
+ ["Oestfold","NO-01","20771"],
674
+ ["Oppland","NO-05","20775"],
675
+ ["Oslo","NO-03","20773"],
676
+ ["Rogaland","NO-11","20781"],
677
+ ["Soer-Troendelag","NO-16","20785"],
678
+ ["Sogn og Fjordane","NO-14","20783"],
679
+ ["Telemark","NO-08","20778"],
680
+ ["Troms","NO-19","20788"],
681
+ ["Vest-Agder","NO-10","20780"],
682
+ ["Vestfold","NO-07","20777"],
683
+ ["Dolnoslaskie","PL-DS","20847"],
684
+ ["Kujawsko-Pomorskie","PL-KP","20848"],
685
+ ["Lodzkie","PL-LD","20850"],
686
+ ["Lubelskie","PL-LU","20851"],
687
+ ["Lubuskie","PL-LB","20849"],
688
+ ["Malopolskie","PL-MA","20852"],
689
+ ["Mazowieckie","PL-MZ","20853"],
690
+ ["Opolskie","PL-OP","20854"],
691
+ ["Podkarpackie","PL-PK","20856"],
692
+ ["Podlaskie","PL-PD","20855"],
693
+ ["Pomorskie","PL-PM","20857"],
694
+ ["Slaskie","PL-SL","20859"],
695
+ ["Swietokrzyskie","PL-SK","20858"],
696
+ ["Warminsko-Mazurskie","PL-WN","20860"],
697
+ ["Wielkopolskie","PL-WP","20861"],
698
+ ["Zachodnio-Pomorskie","PL-ZP","20862"],
699
+ ["Aveiro","PT-01","20865"],
700
+ ["Évora","PT-07","20870"],
701
+ ["Beja","PT-02","21255"],
702
+ ["Braga","PT-03","20866"],
703
+ ["Bragança","PT-04","20867"],
704
+ ["Castelo Branco","PT-05","20868"],
705
+ ["Colmbra","PT-06","20869"],
706
+ ["Faro","PT-08","20871"],
707
+ ["Guarda","PT-09","20872"],
708
+ ["Leiria","PT-10","20873"],
709
+ ["Lisboa","PT-11","20874"],
710
+ ["Portalegre","PT-12","20875"],
711
+ ["Porto","PT-13","20876"],
712
+ ["Regiao AutOnoma da Madeira","PT-30","20882"],
713
+ ["Regiao Autonoma dos Açores","PT-20","20881"],
714
+ ["Santarém","PT-14","20877"],
715
+ ["Setúbal","PT-15","20878"],
716
+ ["Viana do Castelo","PT-16","20879"],
717
+ ["Viseu","PT-18","20880"],
718
+ ["Adygeya, Republic","RU-AD","21250"],
719
+ ["Aginskiy Buryatskiy avtonomnyy okrug","RU-AGB","21349"],
720
+ ["Altay, Republic","RU-AL","20914"],
721
+ ["Altayskiy kray","RU-ALT","21385"],
722
+ ["Amurskaya oblast","RU-AMU","20915"],
723
+ ["Arkhangel'skaya oblast","RU-ARK","20916"],
724
+ ["Astrakhanskaya oblast","RU-AST","20917"],
725
+ ["Bashkortostan, Republic","RU-BA","20918"],
726
+ ["Belgorodskaya oblast","RU-BEL","20919"],
727
+ ["Bryanskaya oblast","RU-BRY","20920"],
728
+ ["Buryatiya, Republic","RU-BU","20921"],
729
+ ["Chechnya, Republic","RU-CE","21347"],
730
+ ["Chelyabinskaya oblast","RU-CHE","20922"],
731
+ ["Chitinskaya oblast","RU-CHI","20923"],
732
+ ["Chukotskiy avtonomnyy okrug","RU-CHU","20924"],
733
+ ["Chuvashiya, Republic","RU-CU","21348"],
734
+ ["Dagestan, Republic","RU-DA","20925"],
735
+ ["Evenkiyskiy avtonomniy okrug","RU-EVE","21353"],
736
+ ["Ingushetiya, Republic","RU-IN","21251"],
737
+ ["Irkutskaya oblast","RU-IRK","20926"],
738
+ ["Ivanovskaya oblast","RU-IVA","20927"],
739
+ ["Kabardino-Balkariya, Republic","RU-KB","20929"],
740
+ ["Kaliningradskaya oblast","RU-KGD","20933"],
741
+ ["Kalmykiya, Republic","RU-KL","21243"],
742
+ ["Kaluzhskaya oblast","RU-KLU","20939"],
743
+ ["Kamchatskaya oblast","RU-KAM","20928"],
744
+ ["Karachayevo-Cherkessiya, Republic","RU-KC","20930"],
745
+ ["Kareliya, Republic","RU-KR","20942"],
746
+ ["Kemerovskaya oblast","RU-KEM","20932"],
747
+ ["Khabarovskiy kray","RU-KHA","20935"],
748
+ ["Khakasiya, Republic","RU-KK","20938"],
749
+ ["Khanty-Mansiyskiy avtonomnyy okrug","RU-KHM","20936"],
750
+ ["Kirovskaya oblast","RU-KIR","20937"],
751
+ ["Komi, Republic","RU-KO","20940"],
752
+ ["Koryakskiy avtonomniy okrug","RU-KOR","21350"],
753
+ ["Kostromskaya oblast","RU-KOS","20941"],
754
+ ["Krasnodarskiy kray","RU-KDA","20931"],
755
+ ["Krasnoyarskiy kray","RU-KYA","20944"],
756
+ ["Kurganskaya oblast","RU-KGN","20934"],
757
+ ["Kurskaya oblast","RU-KRS","20943"],
758
+ ["Leningradskaya oblast","RU-LEN","20945"],
759
+ ["Lipetskaya oblast","RU-LIP","20946"],
760
+ ["Magadanskaya oblast","RU-MAG","20947"],
761
+ ["Mariy El, Republic","RU-ME","21234"],
762
+ ["Mordoviya, Republic","RU-MO","20948"],
763
+ ["Moscow","RU-MOW","20950"],
764
+ ["Moskovskaya oblast","RU-MOS","20949"],
765
+ ["Murmanskaya oblast","RU-MUR","20951"],
766
+ ["Nenetskiy avtonomniy okrug","RU-NEN","21351"],
767
+ ["Nizhegorodskaya oblast","RU-NIZ","20953"],
768
+ ["Novgorodskaya oblast","RU-NGR","20952"],
769
+ ["Novosibirskaya oblast","RU-NVS","20954"],
770
+ ["Omskaya oblast","RU-OMS","20955"],
771
+ ["Orenburgskaya oblast","RU-ORE","20956"],
772
+ ["Orlovskaya oblast","RU-ORL","21256"],
773
+ ["Penzenskaya oblast","RU-PNZ","20958"],
774
+ ["Permskaya oblast","RU-PER","20957"],
775
+ ["Primorskiy kray","RU-PRI","20959"],
776
+ ["Pskovskaya oblast","RU-PSK","20960"],
777
+ ["Rostovskaya oblast","RU-ROS","20961"],
778
+ ["Ryazanskaya oblast","RU-RYA","20962"],
779
+ ["Sakha, Republic","RU-SA","20963"],
780
+ ["Sakhalinskaya oblast","RU-SAK","20964"],
781
+ ["Samarskaya oblast","RU-SAM","20965"],
782
+ ["Sankt-Petersburg","RU-SPE","20968"],
783
+ ["Saratovskaya oblast","RU-SAR","20966"],
784
+ ["Severnaya Osetiya, Republic","RU-SE","21252"],
785
+ ["Smolenskaya oblast","RU-SMO","20967"],
786
+ ["Stavropol'skiy kray","RU-STA","20969"],
787
+ ["Sverdlovskaya oblast","RU-SVE","20970"],
788
+ ["Tambovskaya oblast","RU-TAM","20972"],
789
+ ["Tatarstan, Republic","RU-TA","20971"],
790
+ ["Taymyrskiy (Dolgano-Nenetskiy) avtonomnyy okrug","RU-TAY","20973"],
791
+ ["Tomskaya oblast","RU-TOM","20974"],
792
+ ["Tul'skaya oblast","RU-TUL","20975"],
793
+ ["Tverskaya oblast","RU-TVE","20976"],
794
+ ["Tyumenskaya oblast","RU-TYU","20977"],
795
+ ["Tyva, Republic","RU-TY","21346"],
796
+ ["Udmurtiya, Republic","RU-UD","20978"],
797
+ ["Ulyanovskaya oblast","RU-ULY","20979"],
798
+ ["Ust'-Ordyniskiy Buryatskiy avtonomnyy okrug","RU-UOB","21352"],
799
+ ["Vladimirskaya oblast","RU-VLA","20981"],
800
+ ["Volgogradskaya oblast","RU-VGG","20980"],
801
+ ["Vologodskaya oblast","RU-VLG","20982"],
802
+ ["Voronezhskaya oblast","RU-VOR","20983"],
803
+ ["Yamalo-Nenetskiy avtonomnyy okrug","RU-YAN","20984"],
804
+ ["Yaroslavskaya oblast","RU-YAR","20985"],
805
+ ["Yevreyskaya avtonomnaya oblast","RU-YEV","21277"],
806
+ ["Al Bahah","SA-11","21455"],
807
+ ["Al Hudud ash Shamaliyah","SA-08","21452"],
808
+ ["Al Jawf","SA-12","21456"],
809
+ ["Al Madinah","SA-03","21448"],
810
+ ["Al Qasim","SA-05","21449"],
811
+ ["Ar Riyad","SA-01","20987"],
812
+ ["Ash Sharqiyah","SA-04","20989"],
813
+ ["Asir","SA-14","21457"],
814
+ ["Hail","SA-06","21450"],
815
+ ["Jizan","SA-09","21453"],
816
+ ["Makkah","SA-02","20988"],
817
+ ["Najran","SA-10","21454"],
818
+ ["Tabuk","SA-07","21451"],
819
+ ["Eastern Cape","ZA-EC","21214"],
820
+ ["Free State","ZA-FS","21215"],
821
+ ["Gauteng","ZA-GT","21216"],
822
+ ["Kwazulu-Natal","ZA-NL","21219"],
823
+ ["Mpumalanga","ZA-MP","21217"],
824
+ ["North-West","ZA-NW","21221"],
825
+ ["Northern Cape","ZA-NC","21218"],
826
+ ["Northern Province","ZA-NP","21220"],
827
+ ["Western Cape","ZA-WC","21222"],
828
+ ["Busan Metropolitan City","KR-26","21319"],
829
+ ["Chungcheongbuk-do","KR-43","21327"],
830
+ ["Chungcheongnam-do","KR-44","21328"],
831
+ ["Daegu Metropolitan City","KR-27","21320"],
832
+ ["Daejeon Metropolitan City","KR-30","21323"],
833
+ ["Gangwon-do","KR-42","21326"],
834
+ ["Gwangju Metropolitan City","KR-29","21322"],
835
+ ["Gyeonggi-do","KR-41","21325"],
836
+ ["Gyeongsangbuk-do","KR-47","21331"],
837
+ ["Gyeongsangnam-do","KR-48","21332"],
838
+ ["Incheon Metropolitan City","KR-28","21321"],
839
+ ["Jeju-do","KR-49","21333"],
840
+ ["Jeollabuk-do","KR-45","21329"],
841
+ ["Jeollanam-do","KR-46","21330"],
842
+ ["Seoul City","KR-11","21318"],
843
+ ["Ulsan Metropolitan City","KR-31","21324"],
844
+ ["Alava","ES-VI","20299"],
845
+ ["Alicante","ES-A","20267"],
846
+ ["Almería","ES-AL","20268"],
847
+ ["Andalucía","ES-AN","20269"],
848
+ ["Aragón","ES-AR","21386"],
849
+ ["Asturias","ES-O","20286"],
850
+ ["Balearic Islands","ES-PM","20287"],
851
+ ["Barcelona","ES-B","20270"],
852
+ ["Cadiz","ES-CA","20273"],
853
+ ["Canary Islands","ES-CN","20277"],
854
+ ["Cantabria","ES-S","20290"],
855
+ ["Castilla y León","ES-CL","20275"],
856
+ ["Castilla-La Mancha","ES-CM","20276"],
857
+ ["Cataluña","ES-CT","20278"],
858
+ ["Ceuta","ES-CE","20274"],
859
+ ["Extremadura","ES-EX","20279"],
860
+ ["Galicia","ES-GA","20280"],
861
+ ["Guipuzcoa","ES-SS","20293"],
862
+ ["Illes Balears","ES-IB","21387"],
863
+ ["La Coruna","ES-C","20272"],
864
+ ["La Rioja","ES-LO","20281"],
865
+ ["Madrid","ES-M","20282"],
866
+ ["Melilla","ES-ML","20283"],
867
+ ["Murcia","ES-MU","20284"],
868
+ ["Navarra","ES-NA","20285"],
869
+ ["País Vasco (Basque Country)","ES-PV","20289"],
870
+ ["Pontevedra","ES-PO","20288"],
871
+ ["Salamanca","ES-SA","20291"],
872
+ ["Santa Cruz De Tenerife","ES-TF","20295"],
873
+ ["Segovia","ES-SG","20292"],
874
+ ["Tarragona","ES-T","20294"],
875
+ ["Toledo","ES-TO","20296"],
876
+ ["Valencia","ES-V","20297"],
877
+ ["Valenciana, Comunidad","ES-VC","21388"],
878
+ ["Valladolid","ES-VA","20298"],
879
+ ["Vizcaya","ES-BI","20271"],
880
+ ["Zaragoza","ES-Z","20300"],
881
+ ["Blekinge lan","SE-K","21010"],
882
+ ["Dalarnas lan","SE-W","21017"],
883
+ ["Gavleborgs lan","SE-X","21018"],
884
+ ["Gotlands lan","SE-I","21009"],
885
+ ["Hallands lan","SE-N","21012"],
886
+ ["Jamtlands lan","SE-Z","21020"],
887
+ ["Jonkopings lan","SE-F","21006"],
888
+ ["Kalmar lan","SE-H","21008"],
889
+ ["Kronobergs lan","SE-G","21007"],
890
+ ["Norrbottens lan","SE-BD","21002"],
891
+ ["Orebro lan","SE-T","21015"],
892
+ ["Ostergotlands lan","SE-E","21005"],
893
+ ["Skane lan","SE-M","21011"],
894
+ ["Sodermanlands lan","SE-D","21004"],
895
+ ["Stockholms lan","SE-AB","21000"],
896
+ ["Uppsala lan","SE-C","21003"],
897
+ ["Varmlands lan","SE-S","21014"],
898
+ ["Vasterbottens lan","SE-AC","21001"],
899
+ ["Vasternorrlands lan","SE-Y","21019"],
900
+ ["Vastmanlands lan","SE-U","21016"],
901
+ ["Vastra Gotalands lan","SE-O","21013"],
902
+ ["Aargau","CH-AG","20126"],
903
+ ["Appenzell Inner Rhodes","CH-AI","20127"],
904
+ ["Appenzell Outer Rhodes","CH-AR","20128"],
905
+ ["Basel-City","CH-BS","20131"],
906
+ ["Basel-Country","CH-BL","20130"],
907
+ ["Bern","CH-BE","20129"],
908
+ ["Fribourg","CH-FR","20132"],
909
+ ["Geneva","CH-GE","20133"],
910
+ ["Glarus","CH-GL","20134"],
911
+ ["Grisons","CH-GR","20135"],
912
+ ["Jura","CH-JU","20136"],
913
+ ["Lucerne","CH-LU","20137"],
914
+ ["Neuchatel","CH-NE","20138"],
915
+ ["Nidwalden","CH-NW","20139"],
916
+ ["Obwalden","CH-OW","20140"],
917
+ ["Schaffhausen","CH-SH","20142"],
918
+ ["Schwyz","CH-SZ","20144"],
919
+ ["Solothurn","CH-SO","20143"],
920
+ ["St. Gallen","CH-SG","20141"],
921
+ ["Thurgau","CH-TG","20145"],
922
+ ["Ticino","CH-TI","20146"],
923
+ ["Uri","CH-UR","20147"],
924
+ ["Valais","CH-VS","20149"],
925
+ ["Vaud","CH-VD","20148"],
926
+ ["Zug","CH-ZG","20150"],
927
+ ["Zurich","CH-ZH","20151"],
928
+ ["Chachoengsao","TH-24","21031"],
929
+ ["Chiang Mai","TH-50","21036"],
930
+ ["Chiang Rai","TH-57","21039"],
931
+ ["Chon Buri","TH-20","21030"],
932
+ ["Khon Kaen","TH-40","21035"],
933
+ ["Krung Thep Maha Nakhon Bangkok","TH-10","21025"],
934
+ ["Lampang","TH-52","21037"],
935
+ ["Nakhon Pathom","TH-73","21488"],
936
+ ["Nakhon Ratchasima","TH-30","21032"],
937
+ ["Nakhon Si Thammarat","TH-80","21041"],
938
+ ["Nonthaburi","TH-12","21026"],
939
+ ["Pathum Thani","TH-13","21027"],
940
+ ["Pattani","TH-94","21046"],
941
+ ["Phaket","TH-83","21042"],
942
+ ["Phitsanulok","TH-65","21040"],
943
+ ["Phra Nakhon Si Ayutthaya","TH-14","21028"],
944
+ ["Phrae","TH-54","21038"],
945
+ ["Prachuap Khiri Khan","TH-77","21486"],
946
+ ["Ranong","TH-85","21043"],
947
+ ["Samut Sakhon","TH-74","21487"],
948
+ ["Saraburi","TH-19","21029"],
949
+ ["Songkhla","TH-90","21044"],
950
+ ["Trang","TH-92","21045"],
951
+ ["Ubon Ratchathani","TH-34","21033"],
952
+ ["Yala","TH-95","21047"],
953
+ ["Yasothon","TH-35","21034"],
954
+ ["Adana","TR-01","21052"],
955
+ ["Adıyaman","TR-02","21354"],
956
+ ["Afyon","TR-03","21053"],
957
+ ["Aksaray","TR-68","21377"],
958
+ ["Amasya","TR-05","21355"],
959
+ ["Ankara","TR-06","21055"],
960
+ ["Antalya","TR-07","21056"],
961
+ ["Ardahan","TR-75","21382"],
962
+ ["Artvin","TR-08","21356"],
963
+ ["Aydın","TR-09","21057"],
964
+ ["Ağrı","TR-04","21054"],
965
+ ["Çanakkale","TR-17","21061"],
966
+ ["Çankırı","TR-18","21361"],
967
+ ["Çorum","TR-19","21362"],
968
+ ["Balıkesir","TR-10","21058"],
969
+ ["Bartın","TR-74","21381"],
970
+ ["Batman","TR-72","21379"],
971
+ ["Bayburt","TR-69","21378"],
972
+ ["Bilecik","TR-11","21357"],
973
+ ["Bingöl","TR-12","21358"],
974
+ ["Bitlis","TR-13","21359"],
975
+ ["Bolu","TR-14","21059"],
976
+ ["Burdur","TR-15","21360"],
977
+ ["Bursa","TR-16","21060"],
978
+ ["Denizli","TR-20","21363"],
979
+ ["Diyarbakır","TR-21","21062"],
980
+ ["Duzce","TR-81","21577"],
981
+ ["Edirne","TR-22","21364"],
982
+ ["Elazığ","TR-23","21063"],
983
+ ["Erzincan","TR-24","21287"],
984
+ ["Erzurum","TR-25","21064"],
985
+ ["Eskişehir","TR-26","21065"],
986
+ ["Gaziantep","TR-27","21066"],
987
+ ["Gümüşhane","TR-29","21366"],
988
+ ["Giresun","TR-28","21365"],
989
+ ["Hakkari","TR-30","21367"],
990
+ ["Hatay","TR-31","21067"],
991
+ ["Içel","TR-33","21068"],
992
+ ["Isparta","TR-32","21248"],
993
+ ["Istanbul","TR-34","21069"],
994
+ ["Izmir","TR-35","21070"],
995
+ ["Iğdır","TR-76","21383"],
996
+ ["Kahramanmaraş","TR-46","21079"],
997
+ ["Karabuk","TR-78","21578"],
998
+ ["Karaman","TR-70","21092"],
999
+ ["Kars","TR-36","21071"],
1000
+ ["Kastamonu","TR-37","21072"],
1001
+ ["Kayseri","TR-38","21073"],
1002
+ ["Kütahya","TR-43","21076"],
1003
+ ["Kilis","TR-79","21579"],
1004
+ ["Kocaeli","TR-41","21074"],
1005
+ ["Konya","TR-42","21075"],
1006
+ ["Kırklareli","TR-39","21368"],
1007
+ ["Kırşehir","TR-40","21369"],
1008
+ ["Kırıkkale","TR-71","21093"],
1009
+ ["Malatya","TR-44","21077"],
1010
+ ["Manisa","TR-45","21078"],
1011
+ ["Mardin","TR-47","21370"],
1012
+ ["Muş","TR-49","21081"],
1013
+ ["Muğla","TR-48","21080"],
1014
+ ["Nevşehir","TR-50","21082"],
1015
+ ["Niğde","TR-51","21083"],
1016
+ ["Ordu","TR-52","21371"],
1017
+ ["Osmaniye","TR-80","21384"],
1018
+ ["Rize","TR-53","21372"],
1019
+ ["Sakarya","TR-54","21084"],
1020
+ ["Samsun","TR-55","21085"],
1021
+ ["Sinop","TR-57","21374"],
1022
+ ["Sivas","TR-58","21086"],
1023
+ ["Tekirdağ","TR-59","21087"],
1024
+ ["Tokat","TR-60","21249"],
1025
+ ["Trabzon","TR-61","21088"],
1026
+ ["Tunceli","TR-62","21375"],
1027
+ ["Uşak","TR-64","21376"],
1028
+ ["Van","TR-65","21090"],
1029
+ ["Yalova","TR-77","21094"],
1030
+ ["Yozgat","TR-66","21257"],
1031
+ ["Zonguldak","TR-67","21091"],
1032
+ ["Şanlıurfa","TR-63","21089"],
1033
+ ["Şiirt","TR-56","21373"],
1034
+ ["Şırnak","TR-73","21380"],
1035
+ ["Cherkas'ka Oblast'","UA-71","21128"],
1036
+ ["Chernihivs'ka Oblast'","UA-74","21129"],
1037
+ ["Chernivets'ka Oblast'","UA-77","21130"],
1038
+ ["Dnipropetrovs'ka Oblast'","UA-12","21112"],
1039
+ ["Donets'ka Oblast'","UA-14","21113"],
1040
+ ["Ivano-Frankivs'ka Oblast'","UA-26","21117"],
1041
+ ["Kharkivs'ka Oblast'","UA-63","21125"],
1042
+ ["Khersons'ka Oblast'","UA-65","21126"],
1043
+ ["Khmel'nyts'ka Oblast'","UA-68","21127"],
1044
+ ["Kievs'ka oblast","UA-32","21580"],
1045
+ ["Kirovohrads'ka Oblast'","UA-35","21119"],
1046
+ ["Kyiv","UA-30","21118"],
1047
+ ["L'vivs'ka Oblast'","UA-46","21121"],
1048
+ ["Luhans'ka Oblast'","UA-09","21111"],
1049
+ ["Mykolaivs'ka oblast","UA-48","21581"],
1050
+ ["Odes 'ka Oblast'","UA-51","21122"],
1051
+ ["Poltavs'ka Oblast'","UA-53","21123"],
1052
+ ["Respublika Krym","UA-43","21120"],
1053
+ ["Rivnens'ka","UA-56","21582"],
1054
+ ["Sevastopol","UA-40","21583"],
1055
+ ["Sums 'ka Oblast'","UA-59","21124"],
1056
+ ["Ternopil's'ka Oblast'","UA-61","21292"],
1057
+ ["Vinnyts'ka Oblast'","UA-05","21109"],
1058
+ ["Volyos'ka Oblast'","UA-07","21110"],
1059
+ ["Zakarpats'ka Oblast'","UA-21","21115"],
1060
+ ["Zaporiz'ka Oblast'","UA-23","21116"],
1061
+ ["Zhytomyrs'ka Oblast'","UA-18","21114"],
1062
+ ["Channel Islands","GB-CHA","20338"],
1063
+ ["England","GB-ENG","20339"],
1064
+ ["Isle Of Man","GB-IOM","20340"],
1065
+ ["Northern Ireland","GB-NIR","20341"],
1066
+ ["Scotland","GB-SCT","20342"],
1067
+ ["Wales","GB-WLS","20343"],
1068
+ ["Alabama","US-AL","21133"],
1069
+ ["Alaska","US-AK","21132"],
1070
+ ["Arizona","US-AZ","21136"],
1071
+ ["Arkansas","US-AR","21135"],
1072
+ ["California","US-CA","21137"],
1073
+ ["Colorado","US-CO","21138"],
1074
+ ["Connecticut","US-CT","21139"],
1075
+ ["Delaware","US-DE","21141"],
1076
+ ["District of Columbia","US-DC","21140"],
1077
+ ["Florida","US-FL","21142"],
1078
+ ["Georgia","US-GA","21143"],
1079
+ ["Hawaii","US-HI","21144"],
1080
+ ["Idaho","US-ID","21146"],
1081
+ ["Illinois","US-IL","21147"],
1082
+ ["Indiana","US-IN","21148"],
1083
+ ["Iowa","US-IA","21145"],
1084
+ ["Kansas","US-KS","21149"],
1085
+ ["Kentucky","US-KY","21150"],
1086
+ ["Louisiana","US-LA","21151"],
1087
+ ["Maine","US-ME","21154"],
1088
+ ["Maryland","US-MD","21153"],
1089
+ ["Massachusetts","US-MA","21152"],
1090
+ ["Michigan","US-MI","21155"],
1091
+ ["Minnesota","US-MN","21156"],
1092
+ ["Mississippi","US-MS","21158"],
1093
+ ["Missouri","US-MO","21157"],
1094
+ ["Montana","US-MT","21159"],
1095
+ ["Nebraska","US-NE","21162"],
1096
+ ["Nevada","US-NV","21166"],
1097
+ ["New Hampshire","US-NH","21163"],
1098
+ ["New Jersey","US-NJ","21164"],
1099
+ ["New Mexico","US-NM","21165"],
1100
+ ["New York","US-NY","21167"],
1101
+ ["North Carolina","US-NC","21160"],
1102
+ ["North Dakota","US-ND","21161"],
1103
+ ["Ohio","US-OH","21168"],
1104
+ ["Oklahoma","US-OK","21169"],
1105
+ ["Oregon","US-OR","21170"],
1106
+ ["Pennsylvania","US-PA","21171"],
1107
+ ["Rhode Island","US-RI","21172"],
1108
+ ["South Carolina","US-SC","21173"],
1109
+ ["South Dakota","US-SD","21174"],
1110
+ ["Tennessee","US-TN","21175"],
1111
+ ["Texas","US-TX","21176"],
1112
+ ["Utah","US-UT","21177"],
1113
+ ["Vermont","US-VT","21179"],
1114
+ ["Virginia","US-VA","21178"],
1115
+ ["Washington","US-WA","21180"],
1116
+ ["West Virginia","US-WV","21183"],
1117
+ ["Wisconsin","US-WI","21182"],
1118
+ ["Wyoming","US-WY","21184"]
1119
+ ]
1120
+
1121
+ def self.find_name_by_province_code(province_code)
1122
+ province_code = province_code.upcase
1123
+ PROVINCES.find { |name,code,id| province_code == code }.first rescue nil
1124
+ end
1125
+
1126
+ end
1127
+ end
1128
+ end