AceTime  2.2.0
Date and time classes for Arduino that support timezones from the TZ Database.
zone_policies.cpp
1 // This file was generated by the following script:
2 //
3 // $ /home/brian/src/AceTimeTools/src/acetimetools/tzcompiler.py
4 // --input_dir /home/brian/src/AceTime/src/tzonedbx/tzfiles
5 // --output_dir /home/brian/src/AceTime/src/tzonedbx
6 // --tz_version 2022g
7 // --action zonedb
8 // --language arduino
9 // --scope extended
10 // --db_namespace tzonedbx
11 // --generate_int16_years
12 // --include_list include_list.txt
13 // --nocompress
14 // --start_year 1980
15 // --until_year 10000
16 //
17 // using the TZ Database files
18 //
19 // africa
20 // antarctica
21 // asia
22 // australasia
23 // backward
24 // etcetera
25 // europe
26 // northamerica
27 // southamerica
28 //
29 // from https://github.com/eggert/tz/releases/tag/2022g
30 //
31 // Supported Zones: 16 (15 zones, 1 links)
32 // Unsupported Zones: 580 (336 zones, 244 links)
33 //
34 // Original Years: [1844,2087]
35 // Generated Years: [1945,2087]
36 // Estimator Years: [1945,2090]
37 // Max Buffer Size: 7
38 //
39 // Records:
40 // Infos: 16
41 // Eras: 30
42 // Policies: 12
43 // Rules: 227
44 //
45 // Memory (8-bits):
46 // Rules: 2497
47 // Policies: 36
48 // Eras: 360
49 // Zones: 195
50 // Links: 13
51 // Registry: 32
52 // Formats: 92
53 // Letters: 23
54 // Fragments: 0
55 // Names: 260 (original: 260)
56 // TOTAL: 3508
57 //
58 // Memory (32-bits):
59 // Rules: 2724
60 // Policies: 96
61 // Eras: 480
62 // Zones: 360
63 // Links: 24
64 // Registry: 64
65 // Formats: 92
66 // Letters: 33
67 // Fragments: 0
68 // Names: 260 (original: 260)
69 // TOTAL: 4133
70 //
71 // DO NOT EDIT
72 
73 #include <zoneinfo/compat.h>
74 #include "zone_policies.h"
75 
76 namespace ace_time {
77 namespace tzonedbx {
78 
79 //---------------------------------------------------------------------------
80 // Policies: 12
81 // Rules: 227
82 //---------------------------------------------------------------------------
83 
84 //---------------------------------------------------------------------------
85 // Policy name: Aus
86 // Rules: 1
87 //---------------------------------------------------------------------------
88 
89 static const extended::ZoneRule kZoneRulesAus[] ACE_TIME_PROGMEM = {
90  // Anchor: Rule Aus 1943 1944 - Mar lastSun 2:00s 0 S
91  {
92  -32767 /*fromYear*/,
93  -32767 /*toYear*/,
94  1 /*inMonth*/,
95  0 /*onDayOfWeek*/,
96  1 /*onDayOfMonth*/,
97  0 /*atTimeCode*/,
98  0 /*atTimeModifier (kSuffixW + minute=0)*/,
99  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
100  3 /*letterIndex ("S")*/,
101  },
102 
103 };
104 
105 const extended::ZonePolicy kZonePolicyAus ACE_TIME_PROGMEM = {
106  kZoneRulesAus /*rules*/,
107  1 /*numRules*/,
108 };
109 
110 //---------------------------------------------------------------------------
111 // Policy name: Canada
112 // Rules: 7
113 //---------------------------------------------------------------------------
114 
115 static const extended::ZoneRule kZoneRulesCanada[] ACE_TIME_PROGMEM = {
116  // Anchor: Rule Canada 1945 only - Sep 30 2:00 0 S
117  {
118  -32767 /*fromYear*/,
119  -32767 /*toYear*/,
120  1 /*inMonth*/,
121  0 /*onDayOfWeek*/,
122  1 /*onDayOfMonth*/,
123  0 /*atTimeCode*/,
124  0 /*atTimeModifier (kSuffixW + minute=0)*/,
125  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
126  3 /*letterIndex ("S")*/,
127  },
128  // Rule Canada 1945 only - Sep 30 2:00 0 S
129  {
130  1945 /*fromYear*/,
131  1945 /*toYear*/,
132  9 /*inMonth*/,
133  0 /*onDayOfWeek*/,
134  30 /*onDayOfMonth*/,
135  8 /*atTimeCode*/,
136  0 /*atTimeModifier (kSuffixW + minute=0)*/,
137  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
138  3 /*letterIndex ("S")*/,
139  },
140  // Rule Canada 1974 1986 - Apr lastSun 2:00 1:00 D
141  {
142  1974 /*fromYear*/,
143  1986 /*toYear*/,
144  4 /*inMonth*/,
145  7 /*onDayOfWeek*/,
146  0 /*onDayOfMonth*/,
147  8 /*atTimeCode*/,
148  0 /*atTimeModifier (kSuffixW + minute=0)*/,
149  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
150  2 /*letterIndex ("D")*/,
151  },
152  // Rule Canada 1974 2006 - Oct lastSun 2:00 0 S
153  {
154  1974 /*fromYear*/,
155  2006 /*toYear*/,
156  10 /*inMonth*/,
157  7 /*onDayOfWeek*/,
158  0 /*onDayOfMonth*/,
159  8 /*atTimeCode*/,
160  0 /*atTimeModifier (kSuffixW + minute=0)*/,
161  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
162  3 /*letterIndex ("S")*/,
163  },
164  // Rule Canada 1987 2006 - Apr Sun>=1 2:00 1:00 D
165  {
166  1987 /*fromYear*/,
167  2006 /*toYear*/,
168  4 /*inMonth*/,
169  7 /*onDayOfWeek*/,
170  1 /*onDayOfMonth*/,
171  8 /*atTimeCode*/,
172  0 /*atTimeModifier (kSuffixW + minute=0)*/,
173  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
174  2 /*letterIndex ("D")*/,
175  },
176  // Rule Canada 2007 max - Mar Sun>=8 2:00 1:00 D
177  {
178  2007 /*fromYear*/,
179  32766 /*toYear*/,
180  3 /*inMonth*/,
181  7 /*onDayOfWeek*/,
182  8 /*onDayOfMonth*/,
183  8 /*atTimeCode*/,
184  0 /*atTimeModifier (kSuffixW + minute=0)*/,
185  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
186  2 /*letterIndex ("D")*/,
187  },
188  // Rule Canada 2007 max - Nov Sun>=1 2:00 0 S
189  {
190  2007 /*fromYear*/,
191  32766 /*toYear*/,
192  11 /*inMonth*/,
193  7 /*onDayOfWeek*/,
194  1 /*onDayOfMonth*/,
195  8 /*atTimeCode*/,
196  0 /*atTimeModifier (kSuffixW + minute=0)*/,
197  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
198  3 /*letterIndex ("S")*/,
199  },
200 
201 };
202 
203 const extended::ZonePolicy kZonePolicyCanada ACE_TIME_PROGMEM = {
204  kZoneRulesCanada /*rules*/,
205  7 /*numRules*/,
206 };
207 
208 //---------------------------------------------------------------------------
209 // Policy name: EU
210 // Rules: 6
211 //---------------------------------------------------------------------------
212 
213 static const extended::ZoneRule kZoneRulesEU[] ACE_TIME_PROGMEM = {
214  // Anchor: Rule EU 1978 only - Oct 1 1:00u 0 -
215  {
216  -32767 /*fromYear*/,
217  -32767 /*toYear*/,
218  1 /*inMonth*/,
219  0 /*onDayOfWeek*/,
220  1 /*onDayOfMonth*/,
221  0 /*atTimeCode*/,
222  0 /*atTimeModifier (kSuffixW + minute=0)*/,
223  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
224  0 /*letterIndex ("")*/,
225  },
226  // Rule EU 1977 1980 - Apr Sun>=1 1:00u 1:00 S
227  {
228  1977 /*fromYear*/,
229  1980 /*toYear*/,
230  4 /*inMonth*/,
231  7 /*onDayOfWeek*/,
232  1 /*onDayOfMonth*/,
233  4 /*atTimeCode*/,
234  32 /*atTimeModifier (kSuffixU + minute=0)*/,
235  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
236  3 /*letterIndex ("S")*/,
237  },
238  // Rule EU 1978 only - Oct 1 1:00u 0 -
239  {
240  1978 /*fromYear*/,
241  1978 /*toYear*/,
242  10 /*inMonth*/,
243  0 /*onDayOfWeek*/,
244  1 /*onDayOfMonth*/,
245  4 /*atTimeCode*/,
246  32 /*atTimeModifier (kSuffixU + minute=0)*/,
247  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
248  0 /*letterIndex ("")*/,
249  },
250  // Rule EU 1979 1995 - Sep lastSun 1:00u 0 -
251  {
252  1979 /*fromYear*/,
253  1995 /*toYear*/,
254  9 /*inMonth*/,
255  7 /*onDayOfWeek*/,
256  0 /*onDayOfMonth*/,
257  4 /*atTimeCode*/,
258  32 /*atTimeModifier (kSuffixU + minute=0)*/,
259  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
260  0 /*letterIndex ("")*/,
261  },
262  // Rule EU 1981 max - Mar lastSun 1:00u 1:00 S
263  {
264  1981 /*fromYear*/,
265  32766 /*toYear*/,
266  3 /*inMonth*/,
267  7 /*onDayOfWeek*/,
268  0 /*onDayOfMonth*/,
269  4 /*atTimeCode*/,
270  32 /*atTimeModifier (kSuffixU + minute=0)*/,
271  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
272  3 /*letterIndex ("S")*/,
273  },
274  // Rule EU 1996 max - Oct lastSun 1:00u 0 -
275  {
276  1996 /*fromYear*/,
277  32766 /*toYear*/,
278  10 /*inMonth*/,
279  7 /*onDayOfWeek*/,
280  0 /*onDayOfMonth*/,
281  4 /*atTimeCode*/,
282  32 /*atTimeModifier (kSuffixU + minute=0)*/,
283  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
284  0 /*letterIndex ("")*/,
285  },
286 
287 };
288 
289 const extended::ZonePolicy kZonePolicyEU ACE_TIME_PROGMEM = {
290  kZoneRulesEU /*rules*/,
291  6 /*numRules*/,
292 };
293 
294 //---------------------------------------------------------------------------
295 // Policy name: Edm
296 // Rules: 4
297 //---------------------------------------------------------------------------
298 
299 static const extended::ZoneRule kZoneRulesEdm[] ACE_TIME_PROGMEM = {
300  // Anchor: Rule Edm 1947 only - Sep lastSun 2:00 0 S
301  {
302  -32767 /*fromYear*/,
303  -32767 /*toYear*/,
304  1 /*inMonth*/,
305  0 /*onDayOfWeek*/,
306  1 /*onDayOfMonth*/,
307  0 /*atTimeCode*/,
308  0 /*atTimeModifier (kSuffixW + minute=0)*/,
309  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
310  3 /*letterIndex ("S")*/,
311  },
312  // Rule Edm 1947 only - Sep lastSun 2:00 0 S
313  {
314  1947 /*fromYear*/,
315  1947 /*toYear*/,
316  9 /*inMonth*/,
317  7 /*onDayOfWeek*/,
318  0 /*onDayOfMonth*/,
319  8 /*atTimeCode*/,
320  0 /*atTimeModifier (kSuffixW + minute=0)*/,
321  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
322  3 /*letterIndex ("S")*/,
323  },
324  // Rule Edm 1972 1986 - Apr lastSun 2:00 1:00 D
325  {
326  1972 /*fromYear*/,
327  1986 /*toYear*/,
328  4 /*inMonth*/,
329  7 /*onDayOfWeek*/,
330  0 /*onDayOfMonth*/,
331  8 /*atTimeCode*/,
332  0 /*atTimeModifier (kSuffixW + minute=0)*/,
333  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
334  2 /*letterIndex ("D")*/,
335  },
336  // Rule Edm 1972 2006 - Oct lastSun 2:00 0 S
337  {
338  1972 /*fromYear*/,
339  2006 /*toYear*/,
340  10 /*inMonth*/,
341  7 /*onDayOfWeek*/,
342  0 /*onDayOfMonth*/,
343  8 /*atTimeCode*/,
344  0 /*atTimeModifier (kSuffixW + minute=0)*/,
345  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
346  3 /*letterIndex ("S")*/,
347  },
348 
349 };
350 
351 const extended::ZonePolicy kZonePolicyEdm ACE_TIME_PROGMEM = {
352  kZoneRulesEdm /*rules*/,
353  4 /*numRules*/,
354 };
355 
356 //---------------------------------------------------------------------------
357 // Policy name: Morocco
358 // Rules: 170
359 //---------------------------------------------------------------------------
360 
361 static const extended::ZoneRule kZoneRulesMorocco[] ACE_TIME_PROGMEM = {
362  // Anchor: Rule Morocco 1978 only - Aug 4 0:00 0 -
363  {
364  -32767 /*fromYear*/,
365  -32767 /*toYear*/,
366  1 /*inMonth*/,
367  0 /*onDayOfWeek*/,
368  1 /*onDayOfMonth*/,
369  0 /*atTimeCode*/,
370  0 /*atTimeModifier (kSuffixW + minute=0)*/,
371  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
372  0 /*letterIndex ("")*/,
373  },
374  // Rule Morocco 1978 only - Aug 4 0:00 0 -
375  {
376  1978 /*fromYear*/,
377  1978 /*toYear*/,
378  8 /*inMonth*/,
379  0 /*onDayOfWeek*/,
380  4 /*onDayOfMonth*/,
381  0 /*atTimeCode*/,
382  0 /*atTimeModifier (kSuffixW + minute=0)*/,
383  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
384  0 /*letterIndex ("")*/,
385  },
386  // Rule Morocco 2008 only - Jun 1 0:00 1:00 -
387  {
388  2008 /*fromYear*/,
389  2008 /*toYear*/,
390  6 /*inMonth*/,
391  0 /*onDayOfWeek*/,
392  1 /*onDayOfMonth*/,
393  0 /*atTimeCode*/,
394  0 /*atTimeModifier (kSuffixW + minute=0)*/,
395  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
396  0 /*letterIndex ("")*/,
397  },
398  // Rule Morocco 2008 only - Sep 1 0:00 0 -
399  {
400  2008 /*fromYear*/,
401  2008 /*toYear*/,
402  9 /*inMonth*/,
403  0 /*onDayOfWeek*/,
404  1 /*onDayOfMonth*/,
405  0 /*atTimeCode*/,
406  0 /*atTimeModifier (kSuffixW + minute=0)*/,
407  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
408  0 /*letterIndex ("")*/,
409  },
410  // Rule Morocco 2009 only - Jun 1 0:00 1:00 -
411  {
412  2009 /*fromYear*/,
413  2009 /*toYear*/,
414  6 /*inMonth*/,
415  0 /*onDayOfWeek*/,
416  1 /*onDayOfMonth*/,
417  0 /*atTimeCode*/,
418  0 /*atTimeModifier (kSuffixW + minute=0)*/,
419  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
420  0 /*letterIndex ("")*/,
421  },
422  // Rule Morocco 2009 only - Aug 21 0:00 0 -
423  {
424  2009 /*fromYear*/,
425  2009 /*toYear*/,
426  8 /*inMonth*/,
427  0 /*onDayOfWeek*/,
428  21 /*onDayOfMonth*/,
429  0 /*atTimeCode*/,
430  0 /*atTimeModifier (kSuffixW + minute=0)*/,
431  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
432  0 /*letterIndex ("")*/,
433  },
434  // Rule Morocco 2010 only - May 2 0:00 1:00 -
435  {
436  2010 /*fromYear*/,
437  2010 /*toYear*/,
438  5 /*inMonth*/,
439  0 /*onDayOfWeek*/,
440  2 /*onDayOfMonth*/,
441  0 /*atTimeCode*/,
442  0 /*atTimeModifier (kSuffixW + minute=0)*/,
443  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
444  0 /*letterIndex ("")*/,
445  },
446  // Rule Morocco 2010 only - Aug 8 0:00 0 -
447  {
448  2010 /*fromYear*/,
449  2010 /*toYear*/,
450  8 /*inMonth*/,
451  0 /*onDayOfWeek*/,
452  8 /*onDayOfMonth*/,
453  0 /*atTimeCode*/,
454  0 /*atTimeModifier (kSuffixW + minute=0)*/,
455  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
456  0 /*letterIndex ("")*/,
457  },
458  // Rule Morocco 2011 only - Apr 3 0:00 1:00 -
459  {
460  2011 /*fromYear*/,
461  2011 /*toYear*/,
462  4 /*inMonth*/,
463  0 /*onDayOfWeek*/,
464  3 /*onDayOfMonth*/,
465  0 /*atTimeCode*/,
466  0 /*atTimeModifier (kSuffixW + minute=0)*/,
467  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
468  0 /*letterIndex ("")*/,
469  },
470  // Rule Morocco 2011 only - Jul 31 0:00 0 -
471  {
472  2011 /*fromYear*/,
473  2011 /*toYear*/,
474  7 /*inMonth*/,
475  0 /*onDayOfWeek*/,
476  31 /*onDayOfMonth*/,
477  0 /*atTimeCode*/,
478  0 /*atTimeModifier (kSuffixW + minute=0)*/,
479  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
480  0 /*letterIndex ("")*/,
481  },
482  // Rule Morocco 2012 2013 - Apr lastSun 2:00 1:00 -
483  {
484  2012 /*fromYear*/,
485  2013 /*toYear*/,
486  4 /*inMonth*/,
487  7 /*onDayOfWeek*/,
488  0 /*onDayOfMonth*/,
489  8 /*atTimeCode*/,
490  0 /*atTimeModifier (kSuffixW + minute=0)*/,
491  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
492  0 /*letterIndex ("")*/,
493  },
494  // Rule Morocco 2012 only - Jul 20 3:00 0 -
495  {
496  2012 /*fromYear*/,
497  2012 /*toYear*/,
498  7 /*inMonth*/,
499  0 /*onDayOfWeek*/,
500  20 /*onDayOfMonth*/,
501  12 /*atTimeCode*/,
502  0 /*atTimeModifier (kSuffixW + minute=0)*/,
503  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
504  0 /*letterIndex ("")*/,
505  },
506  // Rule Morocco 2012 only - Aug 20 2:00 1:00 -
507  {
508  2012 /*fromYear*/,
509  2012 /*toYear*/,
510  8 /*inMonth*/,
511  0 /*onDayOfWeek*/,
512  20 /*onDayOfMonth*/,
513  8 /*atTimeCode*/,
514  0 /*atTimeModifier (kSuffixW + minute=0)*/,
515  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
516  0 /*letterIndex ("")*/,
517  },
518  // Rule Morocco 2012 only - Sep 30 3:00 0 -
519  {
520  2012 /*fromYear*/,
521  2012 /*toYear*/,
522  9 /*inMonth*/,
523  0 /*onDayOfWeek*/,
524  30 /*onDayOfMonth*/,
525  12 /*atTimeCode*/,
526  0 /*atTimeModifier (kSuffixW + minute=0)*/,
527  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
528  0 /*letterIndex ("")*/,
529  },
530  // Rule Morocco 2013 only - Jul 7 3:00 0 -
531  {
532  2013 /*fromYear*/,
533  2013 /*toYear*/,
534  7 /*inMonth*/,
535  0 /*onDayOfWeek*/,
536  7 /*onDayOfMonth*/,
537  12 /*atTimeCode*/,
538  0 /*atTimeModifier (kSuffixW + minute=0)*/,
539  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
540  0 /*letterIndex ("")*/,
541  },
542  // Rule Morocco 2013 only - Aug 10 2:00 1:00 -
543  {
544  2013 /*fromYear*/,
545  2013 /*toYear*/,
546  8 /*inMonth*/,
547  0 /*onDayOfWeek*/,
548  10 /*onDayOfMonth*/,
549  8 /*atTimeCode*/,
550  0 /*atTimeModifier (kSuffixW + minute=0)*/,
551  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
552  0 /*letterIndex ("")*/,
553  },
554  // Rule Morocco 2013 2018 - Oct lastSun 3:00 0 -
555  {
556  2013 /*fromYear*/,
557  2018 /*toYear*/,
558  10 /*inMonth*/,
559  7 /*onDayOfWeek*/,
560  0 /*onDayOfMonth*/,
561  12 /*atTimeCode*/,
562  0 /*atTimeModifier (kSuffixW + minute=0)*/,
563  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
564  0 /*letterIndex ("")*/,
565  },
566  // Rule Morocco 2014 2018 - Mar lastSun 2:00 1:00 -
567  {
568  2014 /*fromYear*/,
569  2018 /*toYear*/,
570  3 /*inMonth*/,
571  7 /*onDayOfWeek*/,
572  0 /*onDayOfMonth*/,
573  8 /*atTimeCode*/,
574  0 /*atTimeModifier (kSuffixW + minute=0)*/,
575  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
576  0 /*letterIndex ("")*/,
577  },
578  // Rule Morocco 2014 only - Jun 28 3:00 0 -
579  {
580  2014 /*fromYear*/,
581  2014 /*toYear*/,
582  6 /*inMonth*/,
583  0 /*onDayOfWeek*/,
584  28 /*onDayOfMonth*/,
585  12 /*atTimeCode*/,
586  0 /*atTimeModifier (kSuffixW + minute=0)*/,
587  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
588  0 /*letterIndex ("")*/,
589  },
590  // Rule Morocco 2014 only - Aug 2 2:00 1:00 -
591  {
592  2014 /*fromYear*/,
593  2014 /*toYear*/,
594  8 /*inMonth*/,
595  0 /*onDayOfWeek*/,
596  2 /*onDayOfMonth*/,
597  8 /*atTimeCode*/,
598  0 /*atTimeModifier (kSuffixW + minute=0)*/,
599  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
600  0 /*letterIndex ("")*/,
601  },
602  // Rule Morocco 2015 only - Jun 14 3:00 0 -
603  {
604  2015 /*fromYear*/,
605  2015 /*toYear*/,
606  6 /*inMonth*/,
607  0 /*onDayOfWeek*/,
608  14 /*onDayOfMonth*/,
609  12 /*atTimeCode*/,
610  0 /*atTimeModifier (kSuffixW + minute=0)*/,
611  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
612  0 /*letterIndex ("")*/,
613  },
614  // Rule Morocco 2015 only - Jul 19 2:00 1:00 -
615  {
616  2015 /*fromYear*/,
617  2015 /*toYear*/,
618  7 /*inMonth*/,
619  0 /*onDayOfWeek*/,
620  19 /*onDayOfMonth*/,
621  8 /*atTimeCode*/,
622  0 /*atTimeModifier (kSuffixW + minute=0)*/,
623  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
624  0 /*letterIndex ("")*/,
625  },
626  // Rule Morocco 2016 only - Jun 5 3:00 0 -
627  {
628  2016 /*fromYear*/,
629  2016 /*toYear*/,
630  6 /*inMonth*/,
631  0 /*onDayOfWeek*/,
632  5 /*onDayOfMonth*/,
633  12 /*atTimeCode*/,
634  0 /*atTimeModifier (kSuffixW + minute=0)*/,
635  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
636  0 /*letterIndex ("")*/,
637  },
638  // Rule Morocco 2016 only - Jul 10 2:00 1:00 -
639  {
640  2016 /*fromYear*/,
641  2016 /*toYear*/,
642  7 /*inMonth*/,
643  0 /*onDayOfWeek*/,
644  10 /*onDayOfMonth*/,
645  8 /*atTimeCode*/,
646  0 /*atTimeModifier (kSuffixW + minute=0)*/,
647  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
648  0 /*letterIndex ("")*/,
649  },
650  // Rule Morocco 2017 only - May 21 3:00 0 -
651  {
652  2017 /*fromYear*/,
653  2017 /*toYear*/,
654  5 /*inMonth*/,
655  0 /*onDayOfWeek*/,
656  21 /*onDayOfMonth*/,
657  12 /*atTimeCode*/,
658  0 /*atTimeModifier (kSuffixW + minute=0)*/,
659  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
660  0 /*letterIndex ("")*/,
661  },
662  // Rule Morocco 2017 only - Jul 2 2:00 1:00 -
663  {
664  2017 /*fromYear*/,
665  2017 /*toYear*/,
666  7 /*inMonth*/,
667  0 /*onDayOfWeek*/,
668  2 /*onDayOfMonth*/,
669  8 /*atTimeCode*/,
670  0 /*atTimeModifier (kSuffixW + minute=0)*/,
671  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
672  0 /*letterIndex ("")*/,
673  },
674  // Rule Morocco 2018 only - May 13 3:00 0 -
675  {
676  2018 /*fromYear*/,
677  2018 /*toYear*/,
678  5 /*inMonth*/,
679  0 /*onDayOfWeek*/,
680  13 /*onDayOfMonth*/,
681  12 /*atTimeCode*/,
682  0 /*atTimeModifier (kSuffixW + minute=0)*/,
683  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
684  0 /*letterIndex ("")*/,
685  },
686  // Rule Morocco 2018 only - Jun 17 2:00 1:00 -
687  {
688  2018 /*fromYear*/,
689  2018 /*toYear*/,
690  6 /*inMonth*/,
691  0 /*onDayOfWeek*/,
692  17 /*onDayOfMonth*/,
693  8 /*atTimeCode*/,
694  0 /*atTimeModifier (kSuffixW + minute=0)*/,
695  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
696  0 /*letterIndex ("")*/,
697  },
698  // Rule Morocco 2019 only - May 5 3:00 -1:00 -
699  {
700  2019 /*fromYear*/,
701  2019 /*toYear*/,
702  5 /*inMonth*/,
703  0 /*onDayOfWeek*/,
704  5 /*onDayOfMonth*/,
705  12 /*atTimeCode*/,
706  0 /*atTimeModifier (kSuffixW + minute=0)*/,
707  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
708  0 /*letterIndex ("")*/,
709  },
710  // Rule Morocco 2019 only - Jun 9 2:00 0 -
711  {
712  2019 /*fromYear*/,
713  2019 /*toYear*/,
714  6 /*inMonth*/,
715  0 /*onDayOfWeek*/,
716  9 /*onDayOfMonth*/,
717  8 /*atTimeCode*/,
718  0 /*atTimeModifier (kSuffixW + minute=0)*/,
719  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
720  0 /*letterIndex ("")*/,
721  },
722  // Rule Morocco 2020 only - Apr 19 3:00 -1:00 -
723  {
724  2020 /*fromYear*/,
725  2020 /*toYear*/,
726  4 /*inMonth*/,
727  0 /*onDayOfWeek*/,
728  19 /*onDayOfMonth*/,
729  12 /*atTimeCode*/,
730  0 /*atTimeModifier (kSuffixW + minute=0)*/,
731  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
732  0 /*letterIndex ("")*/,
733  },
734  // Rule Morocco 2020 only - May 31 2:00 0 -
735  {
736  2020 /*fromYear*/,
737  2020 /*toYear*/,
738  5 /*inMonth*/,
739  0 /*onDayOfWeek*/,
740  31 /*onDayOfMonth*/,
741  8 /*atTimeCode*/,
742  0 /*atTimeModifier (kSuffixW + minute=0)*/,
743  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
744  0 /*letterIndex ("")*/,
745  },
746  // Rule Morocco 2021 only - Apr 11 3:00 -1:00 -
747  {
748  2021 /*fromYear*/,
749  2021 /*toYear*/,
750  4 /*inMonth*/,
751  0 /*onDayOfWeek*/,
752  11 /*onDayOfMonth*/,
753  12 /*atTimeCode*/,
754  0 /*atTimeModifier (kSuffixW + minute=0)*/,
755  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
756  0 /*letterIndex ("")*/,
757  },
758  // Rule Morocco 2021 only - May 16 2:00 0 -
759  {
760  2021 /*fromYear*/,
761  2021 /*toYear*/,
762  5 /*inMonth*/,
763  0 /*onDayOfWeek*/,
764  16 /*onDayOfMonth*/,
765  8 /*atTimeCode*/,
766  0 /*atTimeModifier (kSuffixW + minute=0)*/,
767  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
768  0 /*letterIndex ("")*/,
769  },
770  // Rule Morocco 2022 only - Mar 27 3:00 -1:00 -
771  {
772  2022 /*fromYear*/,
773  2022 /*toYear*/,
774  3 /*inMonth*/,
775  0 /*onDayOfWeek*/,
776  27 /*onDayOfMonth*/,
777  12 /*atTimeCode*/,
778  0 /*atTimeModifier (kSuffixW + minute=0)*/,
779  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
780  0 /*letterIndex ("")*/,
781  },
782  // Rule Morocco 2022 only - May 8 2:00 0 -
783  {
784  2022 /*fromYear*/,
785  2022 /*toYear*/,
786  5 /*inMonth*/,
787  0 /*onDayOfWeek*/,
788  8 /*onDayOfMonth*/,
789  8 /*atTimeCode*/,
790  0 /*atTimeModifier (kSuffixW + minute=0)*/,
791  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
792  0 /*letterIndex ("")*/,
793  },
794  // Rule Morocco 2023 only - Mar 19 3:00 -1:00 -
795  {
796  2023 /*fromYear*/,
797  2023 /*toYear*/,
798  3 /*inMonth*/,
799  0 /*onDayOfWeek*/,
800  19 /*onDayOfMonth*/,
801  12 /*atTimeCode*/,
802  0 /*atTimeModifier (kSuffixW + minute=0)*/,
803  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
804  0 /*letterIndex ("")*/,
805  },
806  // Rule Morocco 2023 only - Apr 30 2:00 0 -
807  {
808  2023 /*fromYear*/,
809  2023 /*toYear*/,
810  4 /*inMonth*/,
811  0 /*onDayOfWeek*/,
812  30 /*onDayOfMonth*/,
813  8 /*atTimeCode*/,
814  0 /*atTimeModifier (kSuffixW + minute=0)*/,
815  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
816  0 /*letterIndex ("")*/,
817  },
818  // Rule Morocco 2024 only - Mar 10 3:00 -1:00 -
819  {
820  2024 /*fromYear*/,
821  2024 /*toYear*/,
822  3 /*inMonth*/,
823  0 /*onDayOfWeek*/,
824  10 /*onDayOfMonth*/,
825  12 /*atTimeCode*/,
826  0 /*atTimeModifier (kSuffixW + minute=0)*/,
827  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
828  0 /*letterIndex ("")*/,
829  },
830  // Rule Morocco 2024 only - Apr 14 2:00 0 -
831  {
832  2024 /*fromYear*/,
833  2024 /*toYear*/,
834  4 /*inMonth*/,
835  0 /*onDayOfWeek*/,
836  14 /*onDayOfMonth*/,
837  8 /*atTimeCode*/,
838  0 /*atTimeModifier (kSuffixW + minute=0)*/,
839  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
840  0 /*letterIndex ("")*/,
841  },
842  // Rule Morocco 2025 only - Feb 23 3:00 -1:00 -
843  {
844  2025 /*fromYear*/,
845  2025 /*toYear*/,
846  2 /*inMonth*/,
847  0 /*onDayOfWeek*/,
848  23 /*onDayOfMonth*/,
849  12 /*atTimeCode*/,
850  0 /*atTimeModifier (kSuffixW + minute=0)*/,
851  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
852  0 /*letterIndex ("")*/,
853  },
854  // Rule Morocco 2025 only - Apr 6 2:00 0 -
855  {
856  2025 /*fromYear*/,
857  2025 /*toYear*/,
858  4 /*inMonth*/,
859  0 /*onDayOfWeek*/,
860  6 /*onDayOfMonth*/,
861  8 /*atTimeCode*/,
862  0 /*atTimeModifier (kSuffixW + minute=0)*/,
863  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
864  0 /*letterIndex ("")*/,
865  },
866  // Rule Morocco 2026 only - Feb 15 3:00 -1:00 -
867  {
868  2026 /*fromYear*/,
869  2026 /*toYear*/,
870  2 /*inMonth*/,
871  0 /*onDayOfWeek*/,
872  15 /*onDayOfMonth*/,
873  12 /*atTimeCode*/,
874  0 /*atTimeModifier (kSuffixW + minute=0)*/,
875  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
876  0 /*letterIndex ("")*/,
877  },
878  // Rule Morocco 2026 only - Mar 22 2:00 0 -
879  {
880  2026 /*fromYear*/,
881  2026 /*toYear*/,
882  3 /*inMonth*/,
883  0 /*onDayOfWeek*/,
884  22 /*onDayOfMonth*/,
885  8 /*atTimeCode*/,
886  0 /*atTimeModifier (kSuffixW + minute=0)*/,
887  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
888  0 /*letterIndex ("")*/,
889  },
890  // Rule Morocco 2027 only - Feb 7 3:00 -1:00 -
891  {
892  2027 /*fromYear*/,
893  2027 /*toYear*/,
894  2 /*inMonth*/,
895  0 /*onDayOfWeek*/,
896  7 /*onDayOfMonth*/,
897  12 /*atTimeCode*/,
898  0 /*atTimeModifier (kSuffixW + minute=0)*/,
899  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
900  0 /*letterIndex ("")*/,
901  },
902  // Rule Morocco 2027 only - Mar 14 2:00 0 -
903  {
904  2027 /*fromYear*/,
905  2027 /*toYear*/,
906  3 /*inMonth*/,
907  0 /*onDayOfWeek*/,
908  14 /*onDayOfMonth*/,
909  8 /*atTimeCode*/,
910  0 /*atTimeModifier (kSuffixW + minute=0)*/,
911  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
912  0 /*letterIndex ("")*/,
913  },
914  // Rule Morocco 2028 only - Jan 23 3:00 -1:00 -
915  {
916  2028 /*fromYear*/,
917  2028 /*toYear*/,
918  1 /*inMonth*/,
919  0 /*onDayOfWeek*/,
920  23 /*onDayOfMonth*/,
921  12 /*atTimeCode*/,
922  0 /*atTimeModifier (kSuffixW + minute=0)*/,
923  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
924  0 /*letterIndex ("")*/,
925  },
926  // Rule Morocco 2028 only - Mar 5 2:00 0 -
927  {
928  2028 /*fromYear*/,
929  2028 /*toYear*/,
930  3 /*inMonth*/,
931  0 /*onDayOfWeek*/,
932  5 /*onDayOfMonth*/,
933  8 /*atTimeCode*/,
934  0 /*atTimeModifier (kSuffixW + minute=0)*/,
935  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
936  0 /*letterIndex ("")*/,
937  },
938  // Rule Morocco 2029 only - Jan 14 3:00 -1:00 -
939  {
940  2029 /*fromYear*/,
941  2029 /*toYear*/,
942  1 /*inMonth*/,
943  0 /*onDayOfWeek*/,
944  14 /*onDayOfMonth*/,
945  12 /*atTimeCode*/,
946  0 /*atTimeModifier (kSuffixW + minute=0)*/,
947  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
948  0 /*letterIndex ("")*/,
949  },
950  // Rule Morocco 2029 only - Feb 18 2:00 0 -
951  {
952  2029 /*fromYear*/,
953  2029 /*toYear*/,
954  2 /*inMonth*/,
955  0 /*onDayOfWeek*/,
956  18 /*onDayOfMonth*/,
957  8 /*atTimeCode*/,
958  0 /*atTimeModifier (kSuffixW + minute=0)*/,
959  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
960  0 /*letterIndex ("")*/,
961  },
962  // Rule Morocco 2029 only - Dec 30 3:00 -1:00 -
963  {
964  2029 /*fromYear*/,
965  2029 /*toYear*/,
966  12 /*inMonth*/,
967  0 /*onDayOfWeek*/,
968  30 /*onDayOfMonth*/,
969  12 /*atTimeCode*/,
970  0 /*atTimeModifier (kSuffixW + minute=0)*/,
971  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
972  0 /*letterIndex ("")*/,
973  },
974  // Rule Morocco 2030 only - Feb 10 2:00 0 -
975  {
976  2030 /*fromYear*/,
977  2030 /*toYear*/,
978  2 /*inMonth*/,
979  0 /*onDayOfWeek*/,
980  10 /*onDayOfMonth*/,
981  8 /*atTimeCode*/,
982  0 /*atTimeModifier (kSuffixW + minute=0)*/,
983  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
984  0 /*letterIndex ("")*/,
985  },
986  // Rule Morocco 2030 only - Dec 22 3:00 -1:00 -
987  {
988  2030 /*fromYear*/,
989  2030 /*toYear*/,
990  12 /*inMonth*/,
991  0 /*onDayOfWeek*/,
992  22 /*onDayOfMonth*/,
993  12 /*atTimeCode*/,
994  0 /*atTimeModifier (kSuffixW + minute=0)*/,
995  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
996  0 /*letterIndex ("")*/,
997  },
998  // Rule Morocco 2031 only - Feb 2 2:00 0 -
999  {
1000  2031 /*fromYear*/,
1001  2031 /*toYear*/,
1002  2 /*inMonth*/,
1003  0 /*onDayOfWeek*/,
1004  2 /*onDayOfMonth*/,
1005  8 /*atTimeCode*/,
1006  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1007  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
1008  0 /*letterIndex ("")*/,
1009  },
1010  // Rule Morocco 2031 only - Dec 14 3:00 -1:00 -
1011  {
1012  2031 /*fromYear*/,
1013  2031 /*toYear*/,
1014  12 /*inMonth*/,
1015  0 /*onDayOfWeek*/,
1016  14 /*onDayOfMonth*/,
1017  12 /*atTimeCode*/,
1018  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1019  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
1020  0 /*letterIndex ("")*/,
1021  },
1022  // Rule Morocco 2032 only - Jan 18 2:00 0 -
1023  {
1024  2032 /*fromYear*/,
1025  2032 /*toYear*/,
1026  1 /*inMonth*/,
1027  0 /*onDayOfWeek*/,
1028  18 /*onDayOfMonth*/,
1029  8 /*atTimeCode*/,
1030  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1031  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
1032  0 /*letterIndex ("")*/,
1033  },
1034  // Rule Morocco 2032 only - Nov 28 3:00 -1:00 -
1035  {
1036  2032 /*fromYear*/,
1037  2032 /*toYear*/,
1038  11 /*inMonth*/,
1039  0 /*onDayOfWeek*/,
1040  28 /*onDayOfMonth*/,
1041  12 /*atTimeCode*/,
1042  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1043  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
1044  0 /*letterIndex ("")*/,
1045  },
1046  // Rule Morocco 2033 only - Jan 9 2:00 0 -
1047  {
1048  2033 /*fromYear*/,
1049  2033 /*toYear*/,
1050  1 /*inMonth*/,
1051  0 /*onDayOfWeek*/,
1052  9 /*onDayOfMonth*/,
1053  8 /*atTimeCode*/,
1054  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1055  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
1056  0 /*letterIndex ("")*/,
1057  },
1058  // Rule Morocco 2033 only - Nov 20 3:00 -1:00 -
1059  {
1060  2033 /*fromYear*/,
1061  2033 /*toYear*/,
1062  11 /*inMonth*/,
1063  0 /*onDayOfWeek*/,
1064  20 /*onDayOfMonth*/,
1065  12 /*atTimeCode*/,
1066  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1067  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
1068  0 /*letterIndex ("")*/,
1069  },
1070  // Rule Morocco 2033 only - Dec 25 2:00 0 -
1071  {
1072  2033 /*fromYear*/,
1073  2033 /*toYear*/,
1074  12 /*inMonth*/,
1075  0 /*onDayOfWeek*/,
1076  25 /*onDayOfMonth*/,
1077  8 /*atTimeCode*/,
1078  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1079  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
1080  0 /*letterIndex ("")*/,
1081  },
1082  // Rule Morocco 2034 only - Nov 5 3:00 -1:00 -
1083  {
1084  2034 /*fromYear*/,
1085  2034 /*toYear*/,
1086  11 /*inMonth*/,
1087  0 /*onDayOfWeek*/,
1088  5 /*onDayOfMonth*/,
1089  12 /*atTimeCode*/,
1090  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1091  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
1092  0 /*letterIndex ("")*/,
1093  },
1094  // Rule Morocco 2034 only - Dec 17 2:00 0 -
1095  {
1096  2034 /*fromYear*/,
1097  2034 /*toYear*/,
1098  12 /*inMonth*/,
1099  0 /*onDayOfWeek*/,
1100  17 /*onDayOfMonth*/,
1101  8 /*atTimeCode*/,
1102  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1103  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
1104  0 /*letterIndex ("")*/,
1105  },
1106  // Rule Morocco 2035 only - Oct 28 3:00 -1:00 -
1107  {
1108  2035 /*fromYear*/,
1109  2035 /*toYear*/,
1110  10 /*inMonth*/,
1111  0 /*onDayOfWeek*/,
1112  28 /*onDayOfMonth*/,
1113  12 /*atTimeCode*/,
1114  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1115  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
1116  0 /*letterIndex ("")*/,
1117  },
1118  // Rule Morocco 2035 only - Dec 9 2:00 0 -
1119  {
1120  2035 /*fromYear*/,
1121  2035 /*toYear*/,
1122  12 /*inMonth*/,
1123  0 /*onDayOfWeek*/,
1124  9 /*onDayOfMonth*/,
1125  8 /*atTimeCode*/,
1126  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1127  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
1128  0 /*letterIndex ("")*/,
1129  },
1130  // Rule Morocco 2036 only - Oct 19 3:00 -1:00 -
1131  {
1132  2036 /*fromYear*/,
1133  2036 /*toYear*/,
1134  10 /*inMonth*/,
1135  0 /*onDayOfWeek*/,
1136  19 /*onDayOfMonth*/,
1137  12 /*atTimeCode*/,
1138  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1139  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
1140  0 /*letterIndex ("")*/,
1141  },
1142  // Rule Morocco 2036 only - Nov 23 2:00 0 -
1143  {
1144  2036 /*fromYear*/,
1145  2036 /*toYear*/,
1146  11 /*inMonth*/,
1147  0 /*onDayOfWeek*/,
1148  23 /*onDayOfMonth*/,
1149  8 /*atTimeCode*/,
1150  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1151  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
1152  0 /*letterIndex ("")*/,
1153  },
1154  // Rule Morocco 2037 only - Oct 4 3:00 -1:00 -
1155  {
1156  2037 /*fromYear*/,
1157  2037 /*toYear*/,
1158  10 /*inMonth*/,
1159  0 /*onDayOfWeek*/,
1160  4 /*onDayOfMonth*/,
1161  12 /*atTimeCode*/,
1162  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1163  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
1164  0 /*letterIndex ("")*/,
1165  },
1166  // Rule Morocco 2037 only - Nov 15 2:00 0 -
1167  {
1168  2037 /*fromYear*/,
1169  2037 /*toYear*/,
1170  11 /*inMonth*/,
1171  0 /*onDayOfWeek*/,
1172  15 /*onDayOfMonth*/,
1173  8 /*atTimeCode*/,
1174  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1175  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
1176  0 /*letterIndex ("")*/,
1177  },
1178  // Rule Morocco 2038 only - Sep 26 3:00 -1:00 -
1179  {
1180  2038 /*fromYear*/,
1181  2038 /*toYear*/,
1182  9 /*inMonth*/,
1183  0 /*onDayOfWeek*/,
1184  26 /*onDayOfMonth*/,
1185  12 /*atTimeCode*/,
1186  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1187  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
1188  0 /*letterIndex ("")*/,
1189  },
1190  // Rule Morocco 2038 only - Nov 7 2:00 0 -
1191  {
1192  2038 /*fromYear*/,
1193  2038 /*toYear*/,
1194  11 /*inMonth*/,
1195  0 /*onDayOfWeek*/,
1196  7 /*onDayOfMonth*/,
1197  8 /*atTimeCode*/,
1198  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1199  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
1200  0 /*letterIndex ("")*/,
1201  },
1202  // Rule Morocco 2039 only - Sep 18 3:00 -1:00 -
1203  {
1204  2039 /*fromYear*/,
1205  2039 /*toYear*/,
1206  9 /*inMonth*/,
1207  0 /*onDayOfWeek*/,
1208  18 /*onDayOfMonth*/,
1209  12 /*atTimeCode*/,
1210  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1211  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
1212  0 /*letterIndex ("")*/,
1213  },
1214  // Rule Morocco 2039 only - Oct 23 2:00 0 -
1215  {
1216  2039 /*fromYear*/,
1217  2039 /*toYear*/,
1218  10 /*inMonth*/,
1219  0 /*onDayOfWeek*/,
1220  23 /*onDayOfMonth*/,
1221  8 /*atTimeCode*/,
1222  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1223  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
1224  0 /*letterIndex ("")*/,
1225  },
1226  // Rule Morocco 2040 only - Sep 2 3:00 -1:00 -
1227  {
1228  2040 /*fromYear*/,
1229  2040 /*toYear*/,
1230  9 /*inMonth*/,
1231  0 /*onDayOfWeek*/,
1232  2 /*onDayOfMonth*/,
1233  12 /*atTimeCode*/,
1234  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1235  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
1236  0 /*letterIndex ("")*/,
1237  },
1238  // Rule Morocco 2040 only - Oct 14 2:00 0 -
1239  {
1240  2040 /*fromYear*/,
1241  2040 /*toYear*/,
1242  10 /*inMonth*/,
1243  0 /*onDayOfWeek*/,
1244  14 /*onDayOfMonth*/,
1245  8 /*atTimeCode*/,
1246  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1247  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
1248  0 /*letterIndex ("")*/,
1249  },
1250  // Rule Morocco 2041 only - Aug 25 3:00 -1:00 -
1251  {
1252  2041 /*fromYear*/,
1253  2041 /*toYear*/,
1254  8 /*inMonth*/,
1255  0 /*onDayOfWeek*/,
1256  25 /*onDayOfMonth*/,
1257  12 /*atTimeCode*/,
1258  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1259  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
1260  0 /*letterIndex ("")*/,
1261  },
1262  // Rule Morocco 2041 only - Sep 29 2:00 0 -
1263  {
1264  2041 /*fromYear*/,
1265  2041 /*toYear*/,
1266  9 /*inMonth*/,
1267  0 /*onDayOfWeek*/,
1268  29 /*onDayOfMonth*/,
1269  8 /*atTimeCode*/,
1270  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1271  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
1272  0 /*letterIndex ("")*/,
1273  },
1274  // Rule Morocco 2042 only - Aug 10 3:00 -1:00 -
1275  {
1276  2042 /*fromYear*/,
1277  2042 /*toYear*/,
1278  8 /*inMonth*/,
1279  0 /*onDayOfWeek*/,
1280  10 /*onDayOfMonth*/,
1281  12 /*atTimeCode*/,
1282  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1283  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
1284  0 /*letterIndex ("")*/,
1285  },
1286  // Rule Morocco 2042 only - Sep 21 2:00 0 -
1287  {
1288  2042 /*fromYear*/,
1289  2042 /*toYear*/,
1290  9 /*inMonth*/,
1291  0 /*onDayOfWeek*/,
1292  21 /*onDayOfMonth*/,
1293  8 /*atTimeCode*/,
1294  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1295  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
1296  0 /*letterIndex ("")*/,
1297  },
1298  // Rule Morocco 2043 only - Aug 2 3:00 -1:00 -
1299  {
1300  2043 /*fromYear*/,
1301  2043 /*toYear*/,
1302  8 /*inMonth*/,
1303  0 /*onDayOfWeek*/,
1304  2 /*onDayOfMonth*/,
1305  12 /*atTimeCode*/,
1306  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1307  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
1308  0 /*letterIndex ("")*/,
1309  },
1310  // Rule Morocco 2043 only - Sep 13 2:00 0 -
1311  {
1312  2043 /*fromYear*/,
1313  2043 /*toYear*/,
1314  9 /*inMonth*/,
1315  0 /*onDayOfWeek*/,
1316  13 /*onDayOfMonth*/,
1317  8 /*atTimeCode*/,
1318  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1319  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
1320  0 /*letterIndex ("")*/,
1321  },
1322  // Rule Morocco 2044 only - Jul 24 3:00 -1:00 -
1323  {
1324  2044 /*fromYear*/,
1325  2044 /*toYear*/,
1326  7 /*inMonth*/,
1327  0 /*onDayOfWeek*/,
1328  24 /*onDayOfMonth*/,
1329  12 /*atTimeCode*/,
1330  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1331  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
1332  0 /*letterIndex ("")*/,
1333  },
1334  // Rule Morocco 2044 only - Aug 28 2:00 0 -
1335  {
1336  2044 /*fromYear*/,
1337  2044 /*toYear*/,
1338  8 /*inMonth*/,
1339  0 /*onDayOfWeek*/,
1340  28 /*onDayOfMonth*/,
1341  8 /*atTimeCode*/,
1342  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1343  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
1344  0 /*letterIndex ("")*/,
1345  },
1346  // Rule Morocco 2045 only - Jul 9 3:00 -1:00 -
1347  {
1348  2045 /*fromYear*/,
1349  2045 /*toYear*/,
1350  7 /*inMonth*/,
1351  0 /*onDayOfWeek*/,
1352  9 /*onDayOfMonth*/,
1353  12 /*atTimeCode*/,
1354  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1355  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
1356  0 /*letterIndex ("")*/,
1357  },
1358  // Rule Morocco 2045 only - Aug 20 2:00 0 -
1359  {
1360  2045 /*fromYear*/,
1361  2045 /*toYear*/,
1362  8 /*inMonth*/,
1363  0 /*onDayOfWeek*/,
1364  20 /*onDayOfMonth*/,
1365  8 /*atTimeCode*/,
1366  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1367  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
1368  0 /*letterIndex ("")*/,
1369  },
1370  // Rule Morocco 2046 only - Jul 1 3:00 -1:00 -
1371  {
1372  2046 /*fromYear*/,
1373  2046 /*toYear*/,
1374  7 /*inMonth*/,
1375  0 /*onDayOfWeek*/,
1376  1 /*onDayOfMonth*/,
1377  12 /*atTimeCode*/,
1378  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1379  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
1380  0 /*letterIndex ("")*/,
1381  },
1382  // Rule Morocco 2046 only - Aug 12 2:00 0 -
1383  {
1384  2046 /*fromYear*/,
1385  2046 /*toYear*/,
1386  8 /*inMonth*/,
1387  0 /*onDayOfWeek*/,
1388  12 /*onDayOfMonth*/,
1389  8 /*atTimeCode*/,
1390  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1391  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
1392  0 /*letterIndex ("")*/,
1393  },
1394  // Rule Morocco 2047 only - Jun 23 3:00 -1:00 -
1395  {
1396  2047 /*fromYear*/,
1397  2047 /*toYear*/,
1398  6 /*inMonth*/,
1399  0 /*onDayOfWeek*/,
1400  23 /*onDayOfMonth*/,
1401  12 /*atTimeCode*/,
1402  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1403  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
1404  0 /*letterIndex ("")*/,
1405  },
1406  // Rule Morocco 2047 only - Jul 28 2:00 0 -
1407  {
1408  2047 /*fromYear*/,
1409  2047 /*toYear*/,
1410  7 /*inMonth*/,
1411  0 /*onDayOfWeek*/,
1412  28 /*onDayOfMonth*/,
1413  8 /*atTimeCode*/,
1414  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1415  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
1416  0 /*letterIndex ("")*/,
1417  },
1418  // Rule Morocco 2048 only - Jun 7 3:00 -1:00 -
1419  {
1420  2048 /*fromYear*/,
1421  2048 /*toYear*/,
1422  6 /*inMonth*/,
1423  0 /*onDayOfWeek*/,
1424  7 /*onDayOfMonth*/,
1425  12 /*atTimeCode*/,
1426  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1427  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
1428  0 /*letterIndex ("")*/,
1429  },
1430  // Rule Morocco 2048 only - Jul 19 2:00 0 -
1431  {
1432  2048 /*fromYear*/,
1433  2048 /*toYear*/,
1434  7 /*inMonth*/,
1435  0 /*onDayOfWeek*/,
1436  19 /*onDayOfMonth*/,
1437  8 /*atTimeCode*/,
1438  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1439  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
1440  0 /*letterIndex ("")*/,
1441  },
1442  // Rule Morocco 2049 only - May 30 3:00 -1:00 -
1443  {
1444  2049 /*fromYear*/,
1445  2049 /*toYear*/,
1446  5 /*inMonth*/,
1447  0 /*onDayOfWeek*/,
1448  30 /*onDayOfMonth*/,
1449  12 /*atTimeCode*/,
1450  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1451  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
1452  0 /*letterIndex ("")*/,
1453  },
1454  // Rule Morocco 2049 only - Jul 4 2:00 0 -
1455  {
1456  2049 /*fromYear*/,
1457  2049 /*toYear*/,
1458  7 /*inMonth*/,
1459  0 /*onDayOfWeek*/,
1460  4 /*onDayOfMonth*/,
1461  8 /*atTimeCode*/,
1462  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1463  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
1464  0 /*letterIndex ("")*/,
1465  },
1466  // Rule Morocco 2050 only - May 15 3:00 -1:00 -
1467  {
1468  2050 /*fromYear*/,
1469  2050 /*toYear*/,
1470  5 /*inMonth*/,
1471  0 /*onDayOfWeek*/,
1472  15 /*onDayOfMonth*/,
1473  12 /*atTimeCode*/,
1474  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1475  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
1476  0 /*letterIndex ("")*/,
1477  },
1478  // Rule Morocco 2050 only - Jun 26 2:00 0 -
1479  {
1480  2050 /*fromYear*/,
1481  2050 /*toYear*/,
1482  6 /*inMonth*/,
1483  0 /*onDayOfWeek*/,
1484  26 /*onDayOfMonth*/,
1485  8 /*atTimeCode*/,
1486  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1487  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
1488  0 /*letterIndex ("")*/,
1489  },
1490  // Rule Morocco 2051 only - May 7 3:00 -1:00 -
1491  {
1492  2051 /*fromYear*/,
1493  2051 /*toYear*/,
1494  5 /*inMonth*/,
1495  0 /*onDayOfWeek*/,
1496  7 /*onDayOfMonth*/,
1497  12 /*atTimeCode*/,
1498  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1499  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
1500  0 /*letterIndex ("")*/,
1501  },
1502  // Rule Morocco 2051 only - Jun 18 2:00 0 -
1503  {
1504  2051 /*fromYear*/,
1505  2051 /*toYear*/,
1506  6 /*inMonth*/,
1507  0 /*onDayOfWeek*/,
1508  18 /*onDayOfMonth*/,
1509  8 /*atTimeCode*/,
1510  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1511  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
1512  0 /*letterIndex ("")*/,
1513  },
1514  // Rule Morocco 2052 only - Apr 28 3:00 -1:00 -
1515  {
1516  2052 /*fromYear*/,
1517  2052 /*toYear*/,
1518  4 /*inMonth*/,
1519  0 /*onDayOfWeek*/,
1520  28 /*onDayOfMonth*/,
1521  12 /*atTimeCode*/,
1522  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1523  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
1524  0 /*letterIndex ("")*/,
1525  },
1526  // Rule Morocco 2052 only - Jun 2 2:00 0 -
1527  {
1528  2052 /*fromYear*/,
1529  2052 /*toYear*/,
1530  6 /*inMonth*/,
1531  0 /*onDayOfWeek*/,
1532  2 /*onDayOfMonth*/,
1533  8 /*atTimeCode*/,
1534  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1535  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
1536  0 /*letterIndex ("")*/,
1537  },
1538  // Rule Morocco 2053 only - Apr 13 3:00 -1:00 -
1539  {
1540  2053 /*fromYear*/,
1541  2053 /*toYear*/,
1542  4 /*inMonth*/,
1543  0 /*onDayOfWeek*/,
1544  13 /*onDayOfMonth*/,
1545  12 /*atTimeCode*/,
1546  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1547  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
1548  0 /*letterIndex ("")*/,
1549  },
1550  // Rule Morocco 2053 only - May 25 2:00 0 -
1551  {
1552  2053 /*fromYear*/,
1553  2053 /*toYear*/,
1554  5 /*inMonth*/,
1555  0 /*onDayOfWeek*/,
1556  25 /*onDayOfMonth*/,
1557  8 /*atTimeCode*/,
1558  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1559  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
1560  0 /*letterIndex ("")*/,
1561  },
1562  // Rule Morocco 2054 only - Apr 5 3:00 -1:00 -
1563  {
1564  2054 /*fromYear*/,
1565  2054 /*toYear*/,
1566  4 /*inMonth*/,
1567  0 /*onDayOfWeek*/,
1568  5 /*onDayOfMonth*/,
1569  12 /*atTimeCode*/,
1570  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1571  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
1572  0 /*letterIndex ("")*/,
1573  },
1574  // Rule Morocco 2054 only - May 17 2:00 0 -
1575  {
1576  2054 /*fromYear*/,
1577  2054 /*toYear*/,
1578  5 /*inMonth*/,
1579  0 /*onDayOfWeek*/,
1580  17 /*onDayOfMonth*/,
1581  8 /*atTimeCode*/,
1582  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1583  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
1584  0 /*letterIndex ("")*/,
1585  },
1586  // Rule Morocco 2055 only - Mar 28 3:00 -1:00 -
1587  {
1588  2055 /*fromYear*/,
1589  2055 /*toYear*/,
1590  3 /*inMonth*/,
1591  0 /*onDayOfWeek*/,
1592  28 /*onDayOfMonth*/,
1593  12 /*atTimeCode*/,
1594  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1595  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
1596  0 /*letterIndex ("")*/,
1597  },
1598  // Rule Morocco 2055 only - May 2 2:00 0 -
1599  {
1600  2055 /*fromYear*/,
1601  2055 /*toYear*/,
1602  5 /*inMonth*/,
1603  0 /*onDayOfWeek*/,
1604  2 /*onDayOfMonth*/,
1605  8 /*atTimeCode*/,
1606  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1607  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
1608  0 /*letterIndex ("")*/,
1609  },
1610  // Rule Morocco 2056 only - Mar 12 3:00 -1:00 -
1611  {
1612  2056 /*fromYear*/,
1613  2056 /*toYear*/,
1614  3 /*inMonth*/,
1615  0 /*onDayOfWeek*/,
1616  12 /*onDayOfMonth*/,
1617  12 /*atTimeCode*/,
1618  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1619  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
1620  0 /*letterIndex ("")*/,
1621  },
1622  // Rule Morocco 2056 only - Apr 23 2:00 0 -
1623  {
1624  2056 /*fromYear*/,
1625  2056 /*toYear*/,
1626  4 /*inMonth*/,
1627  0 /*onDayOfWeek*/,
1628  23 /*onDayOfMonth*/,
1629  8 /*atTimeCode*/,
1630  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1631  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
1632  0 /*letterIndex ("")*/,
1633  },
1634  // Rule Morocco 2057 only - Mar 4 3:00 -1:00 -
1635  {
1636  2057 /*fromYear*/,
1637  2057 /*toYear*/,
1638  3 /*inMonth*/,
1639  0 /*onDayOfWeek*/,
1640  4 /*onDayOfMonth*/,
1641  12 /*atTimeCode*/,
1642  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1643  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
1644  0 /*letterIndex ("")*/,
1645  },
1646  // Rule Morocco 2057 only - Apr 8 2:00 0 -
1647  {
1648  2057 /*fromYear*/,
1649  2057 /*toYear*/,
1650  4 /*inMonth*/,
1651  0 /*onDayOfWeek*/,
1652  8 /*onDayOfMonth*/,
1653  8 /*atTimeCode*/,
1654  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1655  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
1656  0 /*letterIndex ("")*/,
1657  },
1658  // Rule Morocco 2058 only - Feb 17 3:00 -1:00 -
1659  {
1660  2058 /*fromYear*/,
1661  2058 /*toYear*/,
1662  2 /*inMonth*/,
1663  0 /*onDayOfWeek*/,
1664  17 /*onDayOfMonth*/,
1665  12 /*atTimeCode*/,
1666  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1667  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
1668  0 /*letterIndex ("")*/,
1669  },
1670  // Rule Morocco 2058 only - Mar 31 2:00 0 -
1671  {
1672  2058 /*fromYear*/,
1673  2058 /*toYear*/,
1674  3 /*inMonth*/,
1675  0 /*onDayOfWeek*/,
1676  31 /*onDayOfMonth*/,
1677  8 /*atTimeCode*/,
1678  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1679  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
1680  0 /*letterIndex ("")*/,
1681  },
1682  // Rule Morocco 2059 only - Feb 9 3:00 -1:00 -
1683  {
1684  2059 /*fromYear*/,
1685  2059 /*toYear*/,
1686  2 /*inMonth*/,
1687  0 /*onDayOfWeek*/,
1688  9 /*onDayOfMonth*/,
1689  12 /*atTimeCode*/,
1690  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1691  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
1692  0 /*letterIndex ("")*/,
1693  },
1694  // Rule Morocco 2059 only - Mar 23 2:00 0 -
1695  {
1696  2059 /*fromYear*/,
1697  2059 /*toYear*/,
1698  3 /*inMonth*/,
1699  0 /*onDayOfWeek*/,
1700  23 /*onDayOfMonth*/,
1701  8 /*atTimeCode*/,
1702  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1703  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
1704  0 /*letterIndex ("")*/,
1705  },
1706  // Rule Morocco 2060 only - Feb 1 3:00 -1:00 -
1707  {
1708  2060 /*fromYear*/,
1709  2060 /*toYear*/,
1710  2 /*inMonth*/,
1711  0 /*onDayOfWeek*/,
1712  1 /*onDayOfMonth*/,
1713  12 /*atTimeCode*/,
1714  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1715  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
1716  0 /*letterIndex ("")*/,
1717  },
1718  // Rule Morocco 2060 only - Mar 7 2:00 0 -
1719  {
1720  2060 /*fromYear*/,
1721  2060 /*toYear*/,
1722  3 /*inMonth*/,
1723  0 /*onDayOfWeek*/,
1724  7 /*onDayOfMonth*/,
1725  8 /*atTimeCode*/,
1726  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1727  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
1728  0 /*letterIndex ("")*/,
1729  },
1730  // Rule Morocco 2061 only - Jan 16 3:00 -1:00 -
1731  {
1732  2061 /*fromYear*/,
1733  2061 /*toYear*/,
1734  1 /*inMonth*/,
1735  0 /*onDayOfWeek*/,
1736  16 /*onDayOfMonth*/,
1737  12 /*atTimeCode*/,
1738  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1739  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
1740  0 /*letterIndex ("")*/,
1741  },
1742  // Rule Morocco 2061 only - Feb 27 2:00 0 -
1743  {
1744  2061 /*fromYear*/,
1745  2061 /*toYear*/,
1746  2 /*inMonth*/,
1747  0 /*onDayOfWeek*/,
1748  27 /*onDayOfMonth*/,
1749  8 /*atTimeCode*/,
1750  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1751  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
1752  0 /*letterIndex ("")*/,
1753  },
1754  // Rule Morocco 2062 only - Jan 8 3:00 -1:00 -
1755  {
1756  2062 /*fromYear*/,
1757  2062 /*toYear*/,
1758  1 /*inMonth*/,
1759  0 /*onDayOfWeek*/,
1760  8 /*onDayOfMonth*/,
1761  12 /*atTimeCode*/,
1762  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1763  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
1764  0 /*letterIndex ("")*/,
1765  },
1766  // Rule Morocco 2062 only - Feb 19 2:00 0 -
1767  {
1768  2062 /*fromYear*/,
1769  2062 /*toYear*/,
1770  2 /*inMonth*/,
1771  0 /*onDayOfWeek*/,
1772  19 /*onDayOfMonth*/,
1773  8 /*atTimeCode*/,
1774  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1775  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
1776  0 /*letterIndex ("")*/,
1777  },
1778  // Rule Morocco 2062 only - Dec 31 3:00 -1:00 -
1779  {
1780  2062 /*fromYear*/,
1781  2062 /*toYear*/,
1782  12 /*inMonth*/,
1783  0 /*onDayOfWeek*/,
1784  31 /*onDayOfMonth*/,
1785  12 /*atTimeCode*/,
1786  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1787  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
1788  0 /*letterIndex ("")*/,
1789  },
1790  // Rule Morocco 2063 only - Feb 4 2:00 0 -
1791  {
1792  2063 /*fromYear*/,
1793  2063 /*toYear*/,
1794  2 /*inMonth*/,
1795  0 /*onDayOfWeek*/,
1796  4 /*onDayOfMonth*/,
1797  8 /*atTimeCode*/,
1798  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1799  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
1800  0 /*letterIndex ("")*/,
1801  },
1802  // Rule Morocco 2063 only - Dec 16 3:00 -1:00 -
1803  {
1804  2063 /*fromYear*/,
1805  2063 /*toYear*/,
1806  12 /*inMonth*/,
1807  0 /*onDayOfWeek*/,
1808  16 /*onDayOfMonth*/,
1809  12 /*atTimeCode*/,
1810  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1811  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
1812  0 /*letterIndex ("")*/,
1813  },
1814  // Rule Morocco 2064 only - Jan 27 2:00 0 -
1815  {
1816  2064 /*fromYear*/,
1817  2064 /*toYear*/,
1818  1 /*inMonth*/,
1819  0 /*onDayOfWeek*/,
1820  27 /*onDayOfMonth*/,
1821  8 /*atTimeCode*/,
1822  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1823  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
1824  0 /*letterIndex ("")*/,
1825  },
1826  // Rule Morocco 2064 only - Dec 7 3:00 -1:00 -
1827  {
1828  2064 /*fromYear*/,
1829  2064 /*toYear*/,
1830  12 /*inMonth*/,
1831  0 /*onDayOfWeek*/,
1832  7 /*onDayOfMonth*/,
1833  12 /*atTimeCode*/,
1834  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1835  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
1836  0 /*letterIndex ("")*/,
1837  },
1838  // Rule Morocco 2065 only - Jan 11 2:00 0 -
1839  {
1840  2065 /*fromYear*/,
1841  2065 /*toYear*/,
1842  1 /*inMonth*/,
1843  0 /*onDayOfWeek*/,
1844  11 /*onDayOfMonth*/,
1845  8 /*atTimeCode*/,
1846  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1847  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
1848  0 /*letterIndex ("")*/,
1849  },
1850  // Rule Morocco 2065 only - Nov 22 3:00 -1:00 -
1851  {
1852  2065 /*fromYear*/,
1853  2065 /*toYear*/,
1854  11 /*inMonth*/,
1855  0 /*onDayOfWeek*/,
1856  22 /*onDayOfMonth*/,
1857  12 /*atTimeCode*/,
1858  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1859  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
1860  0 /*letterIndex ("")*/,
1861  },
1862  // Rule Morocco 2066 only - Jan 3 2:00 0 -
1863  {
1864  2066 /*fromYear*/,
1865  2066 /*toYear*/,
1866  1 /*inMonth*/,
1867  0 /*onDayOfWeek*/,
1868  3 /*onDayOfMonth*/,
1869  8 /*atTimeCode*/,
1870  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1871  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
1872  0 /*letterIndex ("")*/,
1873  },
1874  // Rule Morocco 2066 only - Nov 14 3:00 -1:00 -
1875  {
1876  2066 /*fromYear*/,
1877  2066 /*toYear*/,
1878  11 /*inMonth*/,
1879  0 /*onDayOfWeek*/,
1880  14 /*onDayOfMonth*/,
1881  12 /*atTimeCode*/,
1882  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1883  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
1884  0 /*letterIndex ("")*/,
1885  },
1886  // Rule Morocco 2066 only - Dec 26 2:00 0 -
1887  {
1888  2066 /*fromYear*/,
1889  2066 /*toYear*/,
1890  12 /*inMonth*/,
1891  0 /*onDayOfWeek*/,
1892  26 /*onDayOfMonth*/,
1893  8 /*atTimeCode*/,
1894  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1895  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
1896  0 /*letterIndex ("")*/,
1897  },
1898  // Rule Morocco 2067 only - Nov 6 3:00 -1:00 -
1899  {
1900  2067 /*fromYear*/,
1901  2067 /*toYear*/,
1902  11 /*inMonth*/,
1903  0 /*onDayOfWeek*/,
1904  6 /*onDayOfMonth*/,
1905  12 /*atTimeCode*/,
1906  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1907  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
1908  0 /*letterIndex ("")*/,
1909  },
1910  // Rule Morocco 2067 only - Dec 11 2:00 0 -
1911  {
1912  2067 /*fromYear*/,
1913  2067 /*toYear*/,
1914  12 /*inMonth*/,
1915  0 /*onDayOfWeek*/,
1916  11 /*onDayOfMonth*/,
1917  8 /*atTimeCode*/,
1918  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1919  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
1920  0 /*letterIndex ("")*/,
1921  },
1922  // Rule Morocco 2068 only - Oct 21 3:00 -1:00 -
1923  {
1924  2068 /*fromYear*/,
1925  2068 /*toYear*/,
1926  10 /*inMonth*/,
1927  0 /*onDayOfWeek*/,
1928  21 /*onDayOfMonth*/,
1929  12 /*atTimeCode*/,
1930  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1931  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
1932  0 /*letterIndex ("")*/,
1933  },
1934  // Rule Morocco 2068 only - Dec 2 2:00 0 -
1935  {
1936  2068 /*fromYear*/,
1937  2068 /*toYear*/,
1938  12 /*inMonth*/,
1939  0 /*onDayOfWeek*/,
1940  2 /*onDayOfMonth*/,
1941  8 /*atTimeCode*/,
1942  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1943  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
1944  0 /*letterIndex ("")*/,
1945  },
1946  // Rule Morocco 2069 only - Oct 13 3:00 -1:00 -
1947  {
1948  2069 /*fromYear*/,
1949  2069 /*toYear*/,
1950  10 /*inMonth*/,
1951  0 /*onDayOfWeek*/,
1952  13 /*onDayOfMonth*/,
1953  12 /*atTimeCode*/,
1954  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1955  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
1956  0 /*letterIndex ("")*/,
1957  },
1958  // Rule Morocco 2069 only - Nov 24 2:00 0 -
1959  {
1960  2069 /*fromYear*/,
1961  2069 /*toYear*/,
1962  11 /*inMonth*/,
1963  0 /*onDayOfWeek*/,
1964  24 /*onDayOfMonth*/,
1965  8 /*atTimeCode*/,
1966  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1967  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
1968  0 /*letterIndex ("")*/,
1969  },
1970  // Rule Morocco 2070 only - Oct 5 3:00 -1:00 -
1971  {
1972  2070 /*fromYear*/,
1973  2070 /*toYear*/,
1974  10 /*inMonth*/,
1975  0 /*onDayOfWeek*/,
1976  5 /*onDayOfMonth*/,
1977  12 /*atTimeCode*/,
1978  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1979  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
1980  0 /*letterIndex ("")*/,
1981  },
1982  // Rule Morocco 2070 only - Nov 9 2:00 0 -
1983  {
1984  2070 /*fromYear*/,
1985  2070 /*toYear*/,
1986  11 /*inMonth*/,
1987  0 /*onDayOfWeek*/,
1988  9 /*onDayOfMonth*/,
1989  8 /*atTimeCode*/,
1990  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1991  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
1992  0 /*letterIndex ("")*/,
1993  },
1994  // Rule Morocco 2071 only - Sep 20 3:00 -1:00 -
1995  {
1996  2071 /*fromYear*/,
1997  2071 /*toYear*/,
1998  9 /*inMonth*/,
1999  0 /*onDayOfWeek*/,
2000  20 /*onDayOfMonth*/,
2001  12 /*atTimeCode*/,
2002  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2003  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
2004  0 /*letterIndex ("")*/,
2005  },
2006  // Rule Morocco 2071 only - Nov 1 2:00 0 -
2007  {
2008  2071 /*fromYear*/,
2009  2071 /*toYear*/,
2010  11 /*inMonth*/,
2011  0 /*onDayOfWeek*/,
2012  1 /*onDayOfMonth*/,
2013  8 /*atTimeCode*/,
2014  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2015  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
2016  0 /*letterIndex ("")*/,
2017  },
2018  // Rule Morocco 2072 only - Sep 11 3:00 -1:00 -
2019  {
2020  2072 /*fromYear*/,
2021  2072 /*toYear*/,
2022  9 /*inMonth*/,
2023  0 /*onDayOfWeek*/,
2024  11 /*onDayOfMonth*/,
2025  12 /*atTimeCode*/,
2026  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2027  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
2028  0 /*letterIndex ("")*/,
2029  },
2030  // Rule Morocco 2072 only - Oct 16 2:00 0 -
2031  {
2032  2072 /*fromYear*/,
2033  2072 /*toYear*/,
2034  10 /*inMonth*/,
2035  0 /*onDayOfWeek*/,
2036  16 /*onDayOfMonth*/,
2037  8 /*atTimeCode*/,
2038  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2039  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
2040  0 /*letterIndex ("")*/,
2041  },
2042  // Rule Morocco 2073 only - Aug 27 3:00 -1:00 -
2043  {
2044  2073 /*fromYear*/,
2045  2073 /*toYear*/,
2046  8 /*inMonth*/,
2047  0 /*onDayOfWeek*/,
2048  27 /*onDayOfMonth*/,
2049  12 /*atTimeCode*/,
2050  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2051  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
2052  0 /*letterIndex ("")*/,
2053  },
2054  // Rule Morocco 2073 only - Oct 8 2:00 0 -
2055  {
2056  2073 /*fromYear*/,
2057  2073 /*toYear*/,
2058  10 /*inMonth*/,
2059  0 /*onDayOfWeek*/,
2060  8 /*onDayOfMonth*/,
2061  8 /*atTimeCode*/,
2062  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2063  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
2064  0 /*letterIndex ("")*/,
2065  },
2066  // Rule Morocco 2074 only - Aug 19 3:00 -1:00 -
2067  {
2068  2074 /*fromYear*/,
2069  2074 /*toYear*/,
2070  8 /*inMonth*/,
2071  0 /*onDayOfWeek*/,
2072  19 /*onDayOfMonth*/,
2073  12 /*atTimeCode*/,
2074  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2075  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
2076  0 /*letterIndex ("")*/,
2077  },
2078  // Rule Morocco 2074 only - Sep 30 2:00 0 -
2079  {
2080  2074 /*fromYear*/,
2081  2074 /*toYear*/,
2082  9 /*inMonth*/,
2083  0 /*onDayOfWeek*/,
2084  30 /*onDayOfMonth*/,
2085  8 /*atTimeCode*/,
2086  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2087  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
2088  0 /*letterIndex ("")*/,
2089  },
2090  // Rule Morocco 2075 only - Aug 11 3:00 -1:00 -
2091  {
2092  2075 /*fromYear*/,
2093  2075 /*toYear*/,
2094  8 /*inMonth*/,
2095  0 /*onDayOfWeek*/,
2096  11 /*onDayOfMonth*/,
2097  12 /*atTimeCode*/,
2098  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2099  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
2100  0 /*letterIndex ("")*/,
2101  },
2102  // Rule Morocco 2075 only - Sep 15 2:00 0 -
2103  {
2104  2075 /*fromYear*/,
2105  2075 /*toYear*/,
2106  9 /*inMonth*/,
2107  0 /*onDayOfWeek*/,
2108  15 /*onDayOfMonth*/,
2109  8 /*atTimeCode*/,
2110  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2111  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
2112  0 /*letterIndex ("")*/,
2113  },
2114  // Rule Morocco 2076 only - Jul 26 3:00 -1:00 -
2115  {
2116  2076 /*fromYear*/,
2117  2076 /*toYear*/,
2118  7 /*inMonth*/,
2119  0 /*onDayOfWeek*/,
2120  26 /*onDayOfMonth*/,
2121  12 /*atTimeCode*/,
2122  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2123  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
2124  0 /*letterIndex ("")*/,
2125  },
2126  // Rule Morocco 2076 only - Sep 6 2:00 0 -
2127  {
2128  2076 /*fromYear*/,
2129  2076 /*toYear*/,
2130  9 /*inMonth*/,
2131  0 /*onDayOfWeek*/,
2132  6 /*onDayOfMonth*/,
2133  8 /*atTimeCode*/,
2134  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2135  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
2136  0 /*letterIndex ("")*/,
2137  },
2138  // Rule Morocco 2077 only - Jul 18 3:00 -1:00 -
2139  {
2140  2077 /*fromYear*/,
2141  2077 /*toYear*/,
2142  7 /*inMonth*/,
2143  0 /*onDayOfWeek*/,
2144  18 /*onDayOfMonth*/,
2145  12 /*atTimeCode*/,
2146  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2147  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
2148  0 /*letterIndex ("")*/,
2149  },
2150  // Rule Morocco 2077 only - Aug 29 2:00 0 -
2151  {
2152  2077 /*fromYear*/,
2153  2077 /*toYear*/,
2154  8 /*inMonth*/,
2155  0 /*onDayOfWeek*/,
2156  29 /*onDayOfMonth*/,
2157  8 /*atTimeCode*/,
2158  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2159  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
2160  0 /*letterIndex ("")*/,
2161  },
2162  // Rule Morocco 2078 only - Jul 10 3:00 -1:00 -
2163  {
2164  2078 /*fromYear*/,
2165  2078 /*toYear*/,
2166  7 /*inMonth*/,
2167  0 /*onDayOfWeek*/,
2168  10 /*onDayOfMonth*/,
2169  12 /*atTimeCode*/,
2170  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2171  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
2172  0 /*letterIndex ("")*/,
2173  },
2174  // Rule Morocco 2078 only - Aug 14 2:00 0 -
2175  {
2176  2078 /*fromYear*/,
2177  2078 /*toYear*/,
2178  8 /*inMonth*/,
2179  0 /*onDayOfWeek*/,
2180  14 /*onDayOfMonth*/,
2181  8 /*atTimeCode*/,
2182  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2183  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
2184  0 /*letterIndex ("")*/,
2185  },
2186  // Rule Morocco 2079 only - Jun 25 3:00 -1:00 -
2187  {
2188  2079 /*fromYear*/,
2189  2079 /*toYear*/,
2190  6 /*inMonth*/,
2191  0 /*onDayOfWeek*/,
2192  25 /*onDayOfMonth*/,
2193  12 /*atTimeCode*/,
2194  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2195  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
2196  0 /*letterIndex ("")*/,
2197  },
2198  // Rule Morocco 2079 only - Aug 6 2:00 0 -
2199  {
2200  2079 /*fromYear*/,
2201  2079 /*toYear*/,
2202  8 /*inMonth*/,
2203  0 /*onDayOfWeek*/,
2204  6 /*onDayOfMonth*/,
2205  8 /*atTimeCode*/,
2206  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2207  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
2208  0 /*letterIndex ("")*/,
2209  },
2210  // Rule Morocco 2080 only - Jun 16 3:00 -1:00 -
2211  {
2212  2080 /*fromYear*/,
2213  2080 /*toYear*/,
2214  6 /*inMonth*/,
2215  0 /*onDayOfWeek*/,
2216  16 /*onDayOfMonth*/,
2217  12 /*atTimeCode*/,
2218  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2219  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
2220  0 /*letterIndex ("")*/,
2221  },
2222  // Rule Morocco 2080 only - Jul 21 2:00 0 -
2223  {
2224  2080 /*fromYear*/,
2225  2080 /*toYear*/,
2226  7 /*inMonth*/,
2227  0 /*onDayOfWeek*/,
2228  21 /*onDayOfMonth*/,
2229  8 /*atTimeCode*/,
2230  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2231  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
2232  0 /*letterIndex ("")*/,
2233  },
2234  // Rule Morocco 2081 only - Jun 1 3:00 -1:00 -
2235  {
2236  2081 /*fromYear*/,
2237  2081 /*toYear*/,
2238  6 /*inMonth*/,
2239  0 /*onDayOfWeek*/,
2240  1 /*onDayOfMonth*/,
2241  12 /*atTimeCode*/,
2242  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2243  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
2244  0 /*letterIndex ("")*/,
2245  },
2246  // Rule Morocco 2081 only - Jul 13 2:00 0 -
2247  {
2248  2081 /*fromYear*/,
2249  2081 /*toYear*/,
2250  7 /*inMonth*/,
2251  0 /*onDayOfWeek*/,
2252  13 /*onDayOfMonth*/,
2253  8 /*atTimeCode*/,
2254  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2255  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
2256  0 /*letterIndex ("")*/,
2257  },
2258  // Rule Morocco 2082 only - May 24 3:00 -1:00 -
2259  {
2260  2082 /*fromYear*/,
2261  2082 /*toYear*/,
2262  5 /*inMonth*/,
2263  0 /*onDayOfWeek*/,
2264  24 /*onDayOfMonth*/,
2265  12 /*atTimeCode*/,
2266  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2267  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
2268  0 /*letterIndex ("")*/,
2269  },
2270  // Rule Morocco 2082 only - Jul 5 2:00 0 -
2271  {
2272  2082 /*fromYear*/,
2273  2082 /*toYear*/,
2274  7 /*inMonth*/,
2275  0 /*onDayOfWeek*/,
2276  5 /*onDayOfMonth*/,
2277  8 /*atTimeCode*/,
2278  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2279  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
2280  0 /*letterIndex ("")*/,
2281  },
2282  // Rule Morocco 2083 only - May 16 3:00 -1:00 -
2283  {
2284  2083 /*fromYear*/,
2285  2083 /*toYear*/,
2286  5 /*inMonth*/,
2287  0 /*onDayOfWeek*/,
2288  16 /*onDayOfMonth*/,
2289  12 /*atTimeCode*/,
2290  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2291  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
2292  0 /*letterIndex ("")*/,
2293  },
2294  // Rule Morocco 2083 only - Jun 20 2:00 0 -
2295  {
2296  2083 /*fromYear*/,
2297  2083 /*toYear*/,
2298  6 /*inMonth*/,
2299  0 /*onDayOfWeek*/,
2300  20 /*onDayOfMonth*/,
2301  8 /*atTimeCode*/,
2302  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2303  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
2304  0 /*letterIndex ("")*/,
2305  },
2306  // Rule Morocco 2084 only - Apr 30 3:00 -1:00 -
2307  {
2308  2084 /*fromYear*/,
2309  2084 /*toYear*/,
2310  4 /*inMonth*/,
2311  0 /*onDayOfWeek*/,
2312  30 /*onDayOfMonth*/,
2313  12 /*atTimeCode*/,
2314  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2315  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
2316  0 /*letterIndex ("")*/,
2317  },
2318  // Rule Morocco 2084 only - Jun 11 2:00 0 -
2319  {
2320  2084 /*fromYear*/,
2321  2084 /*toYear*/,
2322  6 /*inMonth*/,
2323  0 /*onDayOfWeek*/,
2324  11 /*onDayOfMonth*/,
2325  8 /*atTimeCode*/,
2326  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2327  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
2328  0 /*letterIndex ("")*/,
2329  },
2330  // Rule Morocco 2085 only - Apr 22 3:00 -1:00 -
2331  {
2332  2085 /*fromYear*/,
2333  2085 /*toYear*/,
2334  4 /*inMonth*/,
2335  0 /*onDayOfWeek*/,
2336  22 /*onDayOfMonth*/,
2337  12 /*atTimeCode*/,
2338  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2339  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
2340  0 /*letterIndex ("")*/,
2341  },
2342  // Rule Morocco 2085 only - Jun 3 2:00 0 -
2343  {
2344  2085 /*fromYear*/,
2345  2085 /*toYear*/,
2346  6 /*inMonth*/,
2347  0 /*onDayOfWeek*/,
2348  3 /*onDayOfMonth*/,
2349  8 /*atTimeCode*/,
2350  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2351  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
2352  0 /*letterIndex ("")*/,
2353  },
2354  // Rule Morocco 2086 only - Apr 14 3:00 -1:00 -
2355  {
2356  2086 /*fromYear*/,
2357  2086 /*toYear*/,
2358  4 /*inMonth*/,
2359  0 /*onDayOfWeek*/,
2360  14 /*onDayOfMonth*/,
2361  12 /*atTimeCode*/,
2362  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2363  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
2364  0 /*letterIndex ("")*/,
2365  },
2366  // Rule Morocco 2086 only - May 19 2:00 0 -
2367  {
2368  2086 /*fromYear*/,
2369  2086 /*toYear*/,
2370  5 /*inMonth*/,
2371  0 /*onDayOfWeek*/,
2372  19 /*onDayOfMonth*/,
2373  8 /*atTimeCode*/,
2374  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2375  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
2376  0 /*letterIndex ("")*/,
2377  },
2378  // Rule Morocco 2087 only - Mar 30 3:00 -1:00 -
2379  {
2380  2087 /*fromYear*/,
2381  2087 /*toYear*/,
2382  3 /*inMonth*/,
2383  0 /*onDayOfWeek*/,
2384  30 /*onDayOfMonth*/,
2385  12 /*atTimeCode*/,
2386  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2387  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
2388  0 /*letterIndex ("")*/,
2389  },
2390  // Rule Morocco 2087 only - May 11 2:00 0 -
2391  {
2392  2087 /*fromYear*/,
2393  2087 /*toYear*/,
2394  5 /*inMonth*/,
2395  0 /*onDayOfWeek*/,
2396  11 /*onDayOfMonth*/,
2397  8 /*atTimeCode*/,
2398  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2399  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
2400  0 /*letterIndex ("")*/,
2401  },
2402 
2403 };
2404 
2405 const extended::ZonePolicy kZonePolicyMorocco ACE_TIME_PROGMEM = {
2406  kZoneRulesMorocco /*rules*/,
2407  170 /*numRules*/,
2408 };
2409 
2410 //---------------------------------------------------------------------------
2411 // Policy name: Namibia
2412 // Rules: 4
2413 //---------------------------------------------------------------------------
2414 
2415 static const extended::ZoneRule kZoneRulesNamibia[] ACE_TIME_PROGMEM = {
2416  // Anchor: Rule Namibia 1994 2017 - Sep Sun>=1 2:00 0 CAT
2417  {
2418  -32767 /*fromYear*/,
2419  -32767 /*toYear*/,
2420  1 /*inMonth*/,
2421  0 /*onDayOfWeek*/,
2422  1 /*onDayOfMonth*/,
2423  0 /*atTimeCode*/,
2424  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2425  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
2426  1 /*letterIndex ("CAT")*/,
2427  },
2428  // Rule Namibia 1994 only - Mar 21 0:00 -1:00 WAT
2429  {
2430  1994 /*fromYear*/,
2431  1994 /*toYear*/,
2432  3 /*inMonth*/,
2433  0 /*onDayOfWeek*/,
2434  21 /*onDayOfMonth*/,
2435  0 /*atTimeCode*/,
2436  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2437  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
2438  4 /*letterIndex ("WAT")*/,
2439  },
2440  // Rule Namibia 1994 2017 - Sep Sun>=1 2:00 0 CAT
2441  {
2442  1994 /*fromYear*/,
2443  2017 /*toYear*/,
2444  9 /*inMonth*/,
2445  7 /*onDayOfWeek*/,
2446  1 /*onDayOfMonth*/,
2447  8 /*atTimeCode*/,
2448  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2449  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
2450  1 /*letterIndex ("CAT")*/,
2451  },
2452  // Rule Namibia 1995 2017 - Apr Sun>=1 2:00 -1:00 WAT
2453  {
2454  1995 /*fromYear*/,
2455  2017 /*toYear*/,
2456  4 /*inMonth*/,
2457  7 /*onDayOfWeek*/,
2458  1 /*onDayOfMonth*/,
2459  8 /*atTimeCode*/,
2460  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2461  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
2462  4 /*letterIndex ("WAT")*/,
2463  },
2464 
2465 };
2466 
2467 const extended::ZonePolicy kZonePolicyNamibia ACE_TIME_PROGMEM = {
2468  kZoneRulesNamibia /*rules*/,
2469  4 /*numRules*/,
2470 };
2471 
2472 //---------------------------------------------------------------------------
2473 // Policy name: Port
2474 // Rules: 7
2475 //---------------------------------------------------------------------------
2476 
2477 static const extended::ZoneRule kZoneRulesPort[] ACE_TIME_PROGMEM = {
2478  // Anchor: Rule Port 1978 only - Oct 1 0:00s 0 -
2479  {
2480  -32767 /*fromYear*/,
2481  -32767 /*toYear*/,
2482  1 /*inMonth*/,
2483  0 /*onDayOfWeek*/,
2484  1 /*onDayOfMonth*/,
2485  0 /*atTimeCode*/,
2486  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2487  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
2488  0 /*letterIndex ("")*/,
2489  },
2490  // Rule Port 1978 1979 - Apr Sun>=1 0:00s 1:00 S
2491  {
2492  1978 /*fromYear*/,
2493  1979 /*toYear*/,
2494  4 /*inMonth*/,
2495  7 /*onDayOfWeek*/,
2496  1 /*onDayOfMonth*/,
2497  0 /*atTimeCode*/,
2498  16 /*atTimeModifier (kSuffixS + minute=0)*/,
2499  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
2500  3 /*letterIndex ("S")*/,
2501  },
2502  // Rule Port 1978 only - Oct 1 0:00s 0 -
2503  {
2504  1978 /*fromYear*/,
2505  1978 /*toYear*/,
2506  10 /*inMonth*/,
2507  0 /*onDayOfWeek*/,
2508  1 /*onDayOfMonth*/,
2509  0 /*atTimeCode*/,
2510  16 /*atTimeModifier (kSuffixS + minute=0)*/,
2511  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
2512  0 /*letterIndex ("")*/,
2513  },
2514  // Rule Port 1979 1982 - Sep lastSun 1:00s 0 -
2515  {
2516  1979 /*fromYear*/,
2517  1982 /*toYear*/,
2518  9 /*inMonth*/,
2519  7 /*onDayOfWeek*/,
2520  0 /*onDayOfMonth*/,
2521  4 /*atTimeCode*/,
2522  16 /*atTimeModifier (kSuffixS + minute=0)*/,
2523  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
2524  0 /*letterIndex ("")*/,
2525  },
2526  // Rule Port 1980 only - Mar lastSun 0:00s 1:00 S
2527  {
2528  1980 /*fromYear*/,
2529  1980 /*toYear*/,
2530  3 /*inMonth*/,
2531  7 /*onDayOfWeek*/,
2532  0 /*onDayOfMonth*/,
2533  0 /*atTimeCode*/,
2534  16 /*atTimeModifier (kSuffixS + minute=0)*/,
2535  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
2536  3 /*letterIndex ("S")*/,
2537  },
2538  // Rule Port 1981 1982 - Mar lastSun 1:00s 1:00 S
2539  {
2540  1981 /*fromYear*/,
2541  1982 /*toYear*/,
2542  3 /*inMonth*/,
2543  7 /*onDayOfWeek*/,
2544  0 /*onDayOfMonth*/,
2545  4 /*atTimeCode*/,
2546  16 /*atTimeModifier (kSuffixS + minute=0)*/,
2547  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
2548  3 /*letterIndex ("S")*/,
2549  },
2550  // Rule Port 1983 only - Mar lastSun 2:00s 1:00 S
2551  {
2552  1983 /*fromYear*/,
2553  1983 /*toYear*/,
2554  3 /*inMonth*/,
2555  7 /*onDayOfWeek*/,
2556  0 /*onDayOfMonth*/,
2557  8 /*atTimeCode*/,
2558  16 /*atTimeModifier (kSuffixS + minute=0)*/,
2559  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
2560  3 /*letterIndex ("S")*/,
2561  },
2562 
2563 };
2564 
2565 const extended::ZonePolicy kZonePolicyPort ACE_TIME_PROGMEM = {
2566  kZoneRulesPort /*rules*/,
2567  7 /*numRules*/,
2568 };
2569 
2570 //---------------------------------------------------------------------------
2571 // Policy name: US
2572 // Rules: 7
2573 //---------------------------------------------------------------------------
2574 
2575 static const extended::ZoneRule kZoneRulesUS[] ACE_TIME_PROGMEM = {
2576  // Anchor: Rule US 1967 2006 - Oct lastSun 2:00 0 S
2577  {
2578  -32767 /*fromYear*/,
2579  -32767 /*toYear*/,
2580  1 /*inMonth*/,
2581  0 /*onDayOfWeek*/,
2582  1 /*onDayOfMonth*/,
2583  0 /*atTimeCode*/,
2584  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2585  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
2586  3 /*letterIndex ("S")*/,
2587  },
2588  // Rule US 1967 2006 - Oct lastSun 2:00 0 S
2589  {
2590  1967 /*fromYear*/,
2591  2006 /*toYear*/,
2592  10 /*inMonth*/,
2593  7 /*onDayOfWeek*/,
2594  0 /*onDayOfMonth*/,
2595  8 /*atTimeCode*/,
2596  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2597  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
2598  3 /*letterIndex ("S")*/,
2599  },
2600  // Rule US 1975 only - Feb lastSun 2:00 1:00 D
2601  {
2602  1975 /*fromYear*/,
2603  1975 /*toYear*/,
2604  2 /*inMonth*/,
2605  7 /*onDayOfWeek*/,
2606  0 /*onDayOfMonth*/,
2607  8 /*atTimeCode*/,
2608  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2609  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
2610  2 /*letterIndex ("D")*/,
2611  },
2612  // Rule US 1976 1986 - Apr lastSun 2:00 1:00 D
2613  {
2614  1976 /*fromYear*/,
2615  1986 /*toYear*/,
2616  4 /*inMonth*/,
2617  7 /*onDayOfWeek*/,
2618  0 /*onDayOfMonth*/,
2619  8 /*atTimeCode*/,
2620  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2621  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
2622  2 /*letterIndex ("D")*/,
2623  },
2624  // Rule US 1987 2006 - Apr Sun>=1 2:00 1:00 D
2625  {
2626  1987 /*fromYear*/,
2627  2006 /*toYear*/,
2628  4 /*inMonth*/,
2629  7 /*onDayOfWeek*/,
2630  1 /*onDayOfMonth*/,
2631  8 /*atTimeCode*/,
2632  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2633  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
2634  2 /*letterIndex ("D")*/,
2635  },
2636  // Rule US 2007 max - Mar Sun>=8 2:00 1:00 D
2637  {
2638  2007 /*fromYear*/,
2639  32766 /*toYear*/,
2640  3 /*inMonth*/,
2641  7 /*onDayOfWeek*/,
2642  8 /*onDayOfMonth*/,
2643  8 /*atTimeCode*/,
2644  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2645  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
2646  2 /*letterIndex ("D")*/,
2647  },
2648  // Rule US 2007 max - Nov Sun>=1 2:00 0 S
2649  {
2650  2007 /*fromYear*/,
2651  32766 /*toYear*/,
2652  11 /*inMonth*/,
2653  7 /*onDayOfWeek*/,
2654  1 /*onDayOfMonth*/,
2655  8 /*atTimeCode*/,
2656  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2657  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
2658  3 /*letterIndex ("S")*/,
2659  },
2660 
2661 };
2662 
2663 const extended::ZonePolicy kZonePolicyUS ACE_TIME_PROGMEM = {
2664  kZoneRulesUS /*rules*/,
2665  7 /*numRules*/,
2666 };
2667 
2668 //---------------------------------------------------------------------------
2669 // Policy name: Vanc
2670 // Rules: 4
2671 //---------------------------------------------------------------------------
2672 
2673 static const extended::ZoneRule kZoneRulesVanc[] ACE_TIME_PROGMEM = {
2674  // Anchor: Rule Vanc 1947 1961 - Sep lastSun 2:00 0 S
2675  {
2676  -32767 /*fromYear*/,
2677  -32767 /*toYear*/,
2678  1 /*inMonth*/,
2679  0 /*onDayOfWeek*/,
2680  1 /*onDayOfMonth*/,
2681  0 /*atTimeCode*/,
2682  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2683  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
2684  3 /*letterIndex ("S")*/,
2685  },
2686  // Rule Vanc 1946 1986 - Apr lastSun 2:00 1:00 D
2687  {
2688  1946 /*fromYear*/,
2689  1986 /*toYear*/,
2690  4 /*inMonth*/,
2691  7 /*onDayOfWeek*/,
2692  0 /*onDayOfMonth*/,
2693  8 /*atTimeCode*/,
2694  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2695  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
2696  2 /*letterIndex ("D")*/,
2697  },
2698  // Rule Vanc 1947 1961 - Sep lastSun 2:00 0 S
2699  {
2700  1947 /*fromYear*/,
2701  1961 /*toYear*/,
2702  9 /*inMonth*/,
2703  7 /*onDayOfWeek*/,
2704  0 /*onDayOfMonth*/,
2705  8 /*atTimeCode*/,
2706  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2707  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
2708  3 /*letterIndex ("S")*/,
2709  },
2710  // Rule Vanc 1962 2006 - Oct lastSun 2:00 0 S
2711  {
2712  1962 /*fromYear*/,
2713  2006 /*toYear*/,
2714  10 /*inMonth*/,
2715  7 /*onDayOfWeek*/,
2716  0 /*onDayOfMonth*/,
2717  8 /*atTimeCode*/,
2718  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2719  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
2720  3 /*letterIndex ("S")*/,
2721  },
2722 
2723 };
2724 
2725 const extended::ZonePolicy kZonePolicyVanc ACE_TIME_PROGMEM = {
2726  kZoneRulesVanc /*rules*/,
2727  4 /*numRules*/,
2728 };
2729 
2730 //---------------------------------------------------------------------------
2731 // Policy name: W-Eur
2732 // Rules: 6
2733 //---------------------------------------------------------------------------
2734 
2735 static const extended::ZoneRule kZoneRulesW_Eur[] ACE_TIME_PROGMEM = {
2736  // Anchor: Rule W-Eur 1978 only - Oct 1 1:00s 0 -
2737  {
2738  -32767 /*fromYear*/,
2739  -32767 /*toYear*/,
2740  1 /*inMonth*/,
2741  0 /*onDayOfWeek*/,
2742  1 /*onDayOfMonth*/,
2743  0 /*atTimeCode*/,
2744  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2745  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
2746  0 /*letterIndex ("")*/,
2747  },
2748  // Rule W-Eur 1977 1980 - Apr Sun>=1 1:00s 1:00 S
2749  {
2750  1977 /*fromYear*/,
2751  1980 /*toYear*/,
2752  4 /*inMonth*/,
2753  7 /*onDayOfWeek*/,
2754  1 /*onDayOfMonth*/,
2755  4 /*atTimeCode*/,
2756  16 /*atTimeModifier (kSuffixS + minute=0)*/,
2757  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
2758  3 /*letterIndex ("S")*/,
2759  },
2760  // Rule W-Eur 1978 only - Oct 1 1:00s 0 -
2761  {
2762  1978 /*fromYear*/,
2763  1978 /*toYear*/,
2764  10 /*inMonth*/,
2765  0 /*onDayOfWeek*/,
2766  1 /*onDayOfMonth*/,
2767  4 /*atTimeCode*/,
2768  16 /*atTimeModifier (kSuffixS + minute=0)*/,
2769  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
2770  0 /*letterIndex ("")*/,
2771  },
2772  // Rule W-Eur 1979 1995 - Sep lastSun 1:00s 0 -
2773  {
2774  1979 /*fromYear*/,
2775  1995 /*toYear*/,
2776  9 /*inMonth*/,
2777  7 /*onDayOfWeek*/,
2778  0 /*onDayOfMonth*/,
2779  4 /*atTimeCode*/,
2780  16 /*atTimeModifier (kSuffixS + minute=0)*/,
2781  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
2782  0 /*letterIndex ("")*/,
2783  },
2784  // Rule W-Eur 1981 max - Mar lastSun 1:00s 1:00 S
2785  {
2786  1981 /*fromYear*/,
2787  32766 /*toYear*/,
2788  3 /*inMonth*/,
2789  7 /*onDayOfWeek*/,
2790  0 /*onDayOfMonth*/,
2791  4 /*atTimeCode*/,
2792  16 /*atTimeModifier (kSuffixS + minute=0)*/,
2793  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
2794  3 /*letterIndex ("S")*/,
2795  },
2796  // Rule W-Eur 1996 max - Oct lastSun 1:00s 0 -
2797  {
2798  1996 /*fromYear*/,
2799  32766 /*toYear*/,
2800  10 /*inMonth*/,
2801  7 /*onDayOfWeek*/,
2802  0 /*onDayOfMonth*/,
2803  4 /*atTimeCode*/,
2804  16 /*atTimeModifier (kSuffixS + minute=0)*/,
2805  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
2806  0 /*letterIndex ("")*/,
2807  },
2808 
2809 };
2810 
2811 const extended::ZonePolicy kZonePolicyW_Eur ACE_TIME_PROGMEM = {
2812  kZoneRulesW_Eur /*rules*/,
2813  6 /*numRules*/,
2814 };
2815 
2816 //---------------------------------------------------------------------------
2817 // Policy name: WS
2818 // Rules: 6
2819 //---------------------------------------------------------------------------
2820 
2821 static const extended::ZoneRule kZoneRulesWS[] ACE_TIME_PROGMEM = {
2822  // Anchor: Rule WS 2011 only - Apr Sat>=1 4:00 0 -
2823  {
2824  -32767 /*fromYear*/,
2825  -32767 /*toYear*/,
2826  1 /*inMonth*/,
2827  0 /*onDayOfWeek*/,
2828  1 /*onDayOfMonth*/,
2829  0 /*atTimeCode*/,
2830  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2831  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
2832  0 /*letterIndex ("")*/,
2833  },
2834  // Rule WS 2010 only - Sep lastSun 0:00 1 -
2835  {
2836  2010 /*fromYear*/,
2837  2010 /*toYear*/,
2838  9 /*inMonth*/,
2839  7 /*onDayOfWeek*/,
2840  0 /*onDayOfMonth*/,
2841  0 /*atTimeCode*/,
2842  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2843  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
2844  0 /*letterIndex ("")*/,
2845  },
2846  // Rule WS 2011 only - Apr Sat>=1 4:00 0 -
2847  {
2848  2011 /*fromYear*/,
2849  2011 /*toYear*/,
2850  4 /*inMonth*/,
2851  6 /*onDayOfWeek*/,
2852  1 /*onDayOfMonth*/,
2853  16 /*atTimeCode*/,
2854  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2855  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
2856  0 /*letterIndex ("")*/,
2857  },
2858  // Rule WS 2011 only - Sep lastSat 3:00 1 -
2859  {
2860  2011 /*fromYear*/,
2861  2011 /*toYear*/,
2862  9 /*inMonth*/,
2863  6 /*onDayOfWeek*/,
2864  0 /*onDayOfMonth*/,
2865  12 /*atTimeCode*/,
2866  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2867  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
2868  0 /*letterIndex ("")*/,
2869  },
2870  // Rule WS 2012 2021 - Apr Sun>=1 4:00 0 -
2871  {
2872  2012 /*fromYear*/,
2873  2021 /*toYear*/,
2874  4 /*inMonth*/,
2875  7 /*onDayOfWeek*/,
2876  1 /*onDayOfMonth*/,
2877  16 /*atTimeCode*/,
2878  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2879  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
2880  0 /*letterIndex ("")*/,
2881  },
2882  // Rule WS 2012 2020 - Sep lastSun 3:00 1 -
2883  {
2884  2012 /*fromYear*/,
2885  2020 /*toYear*/,
2886  9 /*inMonth*/,
2887  7 /*onDayOfWeek*/,
2888  0 /*onDayOfMonth*/,
2889  12 /*atTimeCode*/,
2890  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2891  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
2892  0 /*letterIndex ("")*/,
2893  },
2894 
2895 };
2896 
2897 const extended::ZonePolicy kZonePolicyWS ACE_TIME_PROGMEM = {
2898  kZoneRulesWS /*rules*/,
2899  6 /*numRules*/,
2900 };
2901 
2902 //---------------------------------------------------------------------------
2903 // Policy name: Winn
2904 // Rules: 5
2905 //---------------------------------------------------------------------------
2906 
2907 static const extended::ZoneRule kZoneRulesWinn[] ACE_TIME_PROGMEM = {
2908  // Anchor: Rule Winn 1963 only - Sep 22 2:00 0 S
2909  {
2910  -32767 /*fromYear*/,
2911  -32767 /*toYear*/,
2912  1 /*inMonth*/,
2913  0 /*onDayOfWeek*/,
2914  1 /*onDayOfMonth*/,
2915  0 /*atTimeCode*/,
2916  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2917  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
2918  3 /*letterIndex ("S")*/,
2919  },
2920  // Rule Winn 1963 only - Sep 22 2:00 0 S
2921  {
2922  1963 /*fromYear*/,
2923  1963 /*toYear*/,
2924  9 /*inMonth*/,
2925  0 /*onDayOfWeek*/,
2926  22 /*onDayOfMonth*/,
2927  8 /*atTimeCode*/,
2928  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2929  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
2930  3 /*letterIndex ("S")*/,
2931  },
2932  // Rule Winn 1966 1986 - Apr lastSun 2:00s 1:00 D
2933  {
2934  1966 /*fromYear*/,
2935  1986 /*toYear*/,
2936  4 /*inMonth*/,
2937  7 /*onDayOfWeek*/,
2938  0 /*onDayOfMonth*/,
2939  8 /*atTimeCode*/,
2940  16 /*atTimeModifier (kSuffixS + minute=0)*/,
2941  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
2942  2 /*letterIndex ("D")*/,
2943  },
2944  // Rule Winn 1966 2005 - Oct lastSun 2:00s 0 S
2945  {
2946  1966 /*fromYear*/,
2947  2005 /*toYear*/,
2948  10 /*inMonth*/,
2949  7 /*onDayOfWeek*/,
2950  0 /*onDayOfMonth*/,
2951  8 /*atTimeCode*/,
2952  16 /*atTimeModifier (kSuffixS + minute=0)*/,
2953  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
2954  3 /*letterIndex ("S")*/,
2955  },
2956  // Rule Winn 1987 2005 - Apr Sun>=1 2:00s 1:00 D
2957  {
2958  1987 /*fromYear*/,
2959  2005 /*toYear*/,
2960  4 /*inMonth*/,
2961  7 /*onDayOfWeek*/,
2962  1 /*onDayOfMonth*/,
2963  8 /*atTimeCode*/,
2964  16 /*atTimeModifier (kSuffixS + minute=0)*/,
2965  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
2966  2 /*letterIndex ("D")*/,
2967  },
2968 
2969 };
2970 
2971 const extended::ZonePolicy kZonePolicyWinn ACE_TIME_PROGMEM = {
2972  kZoneRulesWinn /*rules*/,
2973  5 /*numRules*/,
2974 };
2975 
2976 
2977 
2978 }
2979 }
Macros and definitions that provide a consistency layer among the various Arduino boards for compatib...