adapi 0.0.7 → 0.0.8

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.
@@ -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