AceTime  2.1.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/ace_time/zonedbx/tzfiles
5 // --output_dir /home/brian/src/AceTime/src/ace_time/zonedbx
6 // --tz_version 2022g
7 // --action zonedb
8 // --language arduino
9 // --scope extended
10 // --generate_int16_years
11 // --start_year 2000
12 // --until_year 10000
13 //
14 // using the TZ Database files
15 //
16 // africa
17 // antarctica
18 // asia
19 // australasia
20 // backward
21 // etcetera
22 // europe
23 // northamerica
24 // southamerica
25 //
26 // from https://github.com/eggert/tz/releases/tag/2022g
27 //
28 // Policies: 83
29 // Rules: 603
30 // Letter Size (bytes): 23
31 // Total Memory 8-bit (bytes): 7166
32 // Total Memory 32-bit (bytes): 8279
33 //
34 // DO NOT EDIT
35 
36 #include <ace_time/common/compat.h>
37 #include "zone_policies.h"
38 
39 namespace ace_time {
40 namespace zonedbx {
41 
42 //---------------------------------------------------------------------------
43 // Policy name: AN
44 // Rules: 9
45 // Memory (8-bit): 105
46 // Memory (32-bit): 120
47 //---------------------------------------------------------------------------
48 
49 static const extended::ZoneRule kZoneRulesAN[] ACE_TIME_PROGMEM = {
50  // Rule AN 1987 1999 - Oct lastSun 2:00s 1:00 D
51  {
52  1987 /*fromYear*/,
53  1999 /*toYear*/,
54  10 /*inMonth*/,
55  7 /*onDayOfWeek*/,
56  0 /*onDayOfMonth*/,
57  8 /*atTimeCode*/,
58  16 /*atTimeModifier (kSuffixS + minute=0)*/,
59  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
60  'D' /*letter*/,
61  },
62  // Rule AN 1990 1995 - Mar Sun>=1 2:00s 0 S
63  {
64  1990 /*fromYear*/,
65  1995 /*toYear*/,
66  3 /*inMonth*/,
67  7 /*onDayOfWeek*/,
68  1 /*onDayOfMonth*/,
69  8 /*atTimeCode*/,
70  16 /*atTimeModifier (kSuffixS + minute=0)*/,
71  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
72  'S' /*letter*/,
73  },
74  // Rule AN 1996 2005 - Mar lastSun 2:00s 0 S
75  {
76  1996 /*fromYear*/,
77  2005 /*toYear*/,
78  3 /*inMonth*/,
79  7 /*onDayOfWeek*/,
80  0 /*onDayOfMonth*/,
81  8 /*atTimeCode*/,
82  16 /*atTimeModifier (kSuffixS + minute=0)*/,
83  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
84  'S' /*letter*/,
85  },
86  // Rule AN 2000 only - Aug lastSun 2:00s 1:00 D
87  {
88  2000 /*fromYear*/,
89  2000 /*toYear*/,
90  8 /*inMonth*/,
91  7 /*onDayOfWeek*/,
92  0 /*onDayOfMonth*/,
93  8 /*atTimeCode*/,
94  16 /*atTimeModifier (kSuffixS + minute=0)*/,
95  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
96  'D' /*letter*/,
97  },
98  // Rule AN 2001 2007 - Oct lastSun 2:00s 1:00 D
99  {
100  2001 /*fromYear*/,
101  2007 /*toYear*/,
102  10 /*inMonth*/,
103  7 /*onDayOfWeek*/,
104  0 /*onDayOfMonth*/,
105  8 /*atTimeCode*/,
106  16 /*atTimeModifier (kSuffixS + minute=0)*/,
107  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
108  'D' /*letter*/,
109  },
110  // Rule AN 2006 only - Apr Sun>=1 2:00s 0 S
111  {
112  2006 /*fromYear*/,
113  2006 /*toYear*/,
114  4 /*inMonth*/,
115  7 /*onDayOfWeek*/,
116  1 /*onDayOfMonth*/,
117  8 /*atTimeCode*/,
118  16 /*atTimeModifier (kSuffixS + minute=0)*/,
119  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
120  'S' /*letter*/,
121  },
122  // Rule AN 2007 only - Mar lastSun 2:00s 0 S
123  {
124  2007 /*fromYear*/,
125  2007 /*toYear*/,
126  3 /*inMonth*/,
127  7 /*onDayOfWeek*/,
128  0 /*onDayOfMonth*/,
129  8 /*atTimeCode*/,
130  16 /*atTimeModifier (kSuffixS + minute=0)*/,
131  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
132  'S' /*letter*/,
133  },
134  // Rule AN 2008 max - Apr Sun>=1 2:00s 0 S
135  {
136  2008 /*fromYear*/,
137  9999 /*toYear*/,
138  4 /*inMonth*/,
139  7 /*onDayOfWeek*/,
140  1 /*onDayOfMonth*/,
141  8 /*atTimeCode*/,
142  16 /*atTimeModifier (kSuffixS + minute=0)*/,
143  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
144  'S' /*letter*/,
145  },
146  // Rule AN 2008 max - Oct Sun>=1 2:00s 1:00 D
147  {
148  2008 /*fromYear*/,
149  9999 /*toYear*/,
150  10 /*inMonth*/,
151  7 /*onDayOfWeek*/,
152  1 /*onDayOfMonth*/,
153  8 /*atTimeCode*/,
154  16 /*atTimeModifier (kSuffixS + minute=0)*/,
155  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
156  'D' /*letter*/,
157  },
158 
159 };
160 
161 
162 
163 const extended::ZonePolicy kZonePolicyAN ACE_TIME_PROGMEM = {
164  kZoneRulesAN /*rules*/,
165  nullptr /*letters*/,
166  9 /*numRules*/,
167  0 /*numLetters*/,
168 };
169 
170 //---------------------------------------------------------------------------
171 // Policy name: AQ
172 // Rules: 1
173 // Memory (8-bit): 17
174 // Memory (32-bit): 24
175 //---------------------------------------------------------------------------
176 
177 static const extended::ZoneRule kZoneRulesAQ[] ACE_TIME_PROGMEM = {
178  // Rule AQ 1990 1992 - Mar Sun>=1 2:00s 0 S
179  {
180  1990 /*fromYear*/,
181  1992 /*toYear*/,
182  3 /*inMonth*/,
183  7 /*onDayOfWeek*/,
184  1 /*onDayOfMonth*/,
185  8 /*atTimeCode*/,
186  16 /*atTimeModifier (kSuffixS + minute=0)*/,
187  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
188  'S' /*letter*/,
189  },
190 
191 };
192 
193 
194 
195 const extended::ZonePolicy kZonePolicyAQ ACE_TIME_PROGMEM = {
196  kZoneRulesAQ /*rules*/,
197  nullptr /*letters*/,
198  1 /*numRules*/,
199  0 /*numLetters*/,
200 };
201 
202 //---------------------------------------------------------------------------
203 // Policy name: AS
204 // Rules: 7
205 // Memory (8-bit): 83
206 // Memory (32-bit): 96
207 //---------------------------------------------------------------------------
208 
209 static const extended::ZoneRule kZoneRulesAS[] ACE_TIME_PROGMEM = {
210  // Rule AS 1987 2007 - Oct lastSun 2:00s 1:00 D
211  {
212  1987 /*fromYear*/,
213  2007 /*toYear*/,
214  10 /*inMonth*/,
215  7 /*onDayOfWeek*/,
216  0 /*onDayOfMonth*/,
217  8 /*atTimeCode*/,
218  16 /*atTimeModifier (kSuffixS + minute=0)*/,
219  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
220  'D' /*letter*/,
221  },
222  // Rule AS 1994 only - Mar 20 2:00s 0 S
223  {
224  1994 /*fromYear*/,
225  1994 /*toYear*/,
226  3 /*inMonth*/,
227  0 /*onDayOfWeek*/,
228  20 /*onDayOfMonth*/,
229  8 /*atTimeCode*/,
230  16 /*atTimeModifier (kSuffixS + minute=0)*/,
231  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
232  'S' /*letter*/,
233  },
234  // Rule AS 1995 2005 - Mar lastSun 2:00s 0 S
235  {
236  1995 /*fromYear*/,
237  2005 /*toYear*/,
238  3 /*inMonth*/,
239  7 /*onDayOfWeek*/,
240  0 /*onDayOfMonth*/,
241  8 /*atTimeCode*/,
242  16 /*atTimeModifier (kSuffixS + minute=0)*/,
243  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
244  'S' /*letter*/,
245  },
246  // Rule AS 2006 only - Apr 2 2:00s 0 S
247  {
248  2006 /*fromYear*/,
249  2006 /*toYear*/,
250  4 /*inMonth*/,
251  0 /*onDayOfWeek*/,
252  2 /*onDayOfMonth*/,
253  8 /*atTimeCode*/,
254  16 /*atTimeModifier (kSuffixS + minute=0)*/,
255  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
256  'S' /*letter*/,
257  },
258  // Rule AS 2007 only - Mar lastSun 2:00s 0 S
259  {
260  2007 /*fromYear*/,
261  2007 /*toYear*/,
262  3 /*inMonth*/,
263  7 /*onDayOfWeek*/,
264  0 /*onDayOfMonth*/,
265  8 /*atTimeCode*/,
266  16 /*atTimeModifier (kSuffixS + minute=0)*/,
267  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
268  'S' /*letter*/,
269  },
270  // Rule AS 2008 max - Apr Sun>=1 2:00s 0 S
271  {
272  2008 /*fromYear*/,
273  9999 /*toYear*/,
274  4 /*inMonth*/,
275  7 /*onDayOfWeek*/,
276  1 /*onDayOfMonth*/,
277  8 /*atTimeCode*/,
278  16 /*atTimeModifier (kSuffixS + minute=0)*/,
279  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
280  'S' /*letter*/,
281  },
282  // Rule AS 2008 max - Oct Sun>=1 2:00s 1:00 D
283  {
284  2008 /*fromYear*/,
285  9999 /*toYear*/,
286  10 /*inMonth*/,
287  7 /*onDayOfWeek*/,
288  1 /*onDayOfMonth*/,
289  8 /*atTimeCode*/,
290  16 /*atTimeModifier (kSuffixS + minute=0)*/,
291  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
292  'D' /*letter*/,
293  },
294 
295 };
296 
297 
298 
299 const extended::ZonePolicy kZonePolicyAS ACE_TIME_PROGMEM = {
300  kZoneRulesAS /*rules*/,
301  nullptr /*letters*/,
302  7 /*numRules*/,
303  0 /*numLetters*/,
304 };
305 
306 //---------------------------------------------------------------------------
307 // Policy name: AT
308 // Rules: 8
309 // Memory (8-bit): 94
310 // Memory (32-bit): 108
311 //---------------------------------------------------------------------------
312 
313 static const extended::ZoneRule kZoneRulesAT[] ACE_TIME_PROGMEM = {
314  // Rule AT 1988 1990 - Oct lastSun 2:00s 1:00 D
315  {
316  1988 /*fromYear*/,
317  1990 /*toYear*/,
318  10 /*inMonth*/,
319  7 /*onDayOfWeek*/,
320  0 /*onDayOfMonth*/,
321  8 /*atTimeCode*/,
322  16 /*atTimeModifier (kSuffixS + minute=0)*/,
323  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
324  'D' /*letter*/,
325  },
326  // Rule AT 1991 1999 - Oct Sun>=1 2:00s 1:00 D
327  {
328  1991 /*fromYear*/,
329  1999 /*toYear*/,
330  10 /*inMonth*/,
331  7 /*onDayOfWeek*/,
332  1 /*onDayOfMonth*/,
333  8 /*atTimeCode*/,
334  16 /*atTimeModifier (kSuffixS + minute=0)*/,
335  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
336  'D' /*letter*/,
337  },
338  // Rule AT 1991 2005 - Mar lastSun 2:00s 0 S
339  {
340  1991 /*fromYear*/,
341  2005 /*toYear*/,
342  3 /*inMonth*/,
343  7 /*onDayOfWeek*/,
344  0 /*onDayOfMonth*/,
345  8 /*atTimeCode*/,
346  16 /*atTimeModifier (kSuffixS + minute=0)*/,
347  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
348  'S' /*letter*/,
349  },
350  // Rule AT 2000 only - Aug lastSun 2:00s 1:00 D
351  {
352  2000 /*fromYear*/,
353  2000 /*toYear*/,
354  8 /*inMonth*/,
355  7 /*onDayOfWeek*/,
356  0 /*onDayOfMonth*/,
357  8 /*atTimeCode*/,
358  16 /*atTimeModifier (kSuffixS + minute=0)*/,
359  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
360  'D' /*letter*/,
361  },
362  // Rule AT 2001 max - Oct Sun>=1 2:00s 1:00 D
363  {
364  2001 /*fromYear*/,
365  9999 /*toYear*/,
366  10 /*inMonth*/,
367  7 /*onDayOfWeek*/,
368  1 /*onDayOfMonth*/,
369  8 /*atTimeCode*/,
370  16 /*atTimeModifier (kSuffixS + minute=0)*/,
371  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
372  'D' /*letter*/,
373  },
374  // Rule AT 2006 only - Apr Sun>=1 2:00s 0 S
375  {
376  2006 /*fromYear*/,
377  2006 /*toYear*/,
378  4 /*inMonth*/,
379  7 /*onDayOfWeek*/,
380  1 /*onDayOfMonth*/,
381  8 /*atTimeCode*/,
382  16 /*atTimeModifier (kSuffixS + minute=0)*/,
383  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
384  'S' /*letter*/,
385  },
386  // Rule AT 2007 only - Mar lastSun 2:00s 0 S
387  {
388  2007 /*fromYear*/,
389  2007 /*toYear*/,
390  3 /*inMonth*/,
391  7 /*onDayOfWeek*/,
392  0 /*onDayOfMonth*/,
393  8 /*atTimeCode*/,
394  16 /*atTimeModifier (kSuffixS + minute=0)*/,
395  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
396  'S' /*letter*/,
397  },
398  // Rule AT 2008 max - Apr Sun>=1 2:00s 0 S
399  {
400  2008 /*fromYear*/,
401  9999 /*toYear*/,
402  4 /*inMonth*/,
403  7 /*onDayOfWeek*/,
404  1 /*onDayOfMonth*/,
405  8 /*atTimeCode*/,
406  16 /*atTimeModifier (kSuffixS + minute=0)*/,
407  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
408  'S' /*letter*/,
409  },
410 
411 };
412 
413 
414 
415 const extended::ZonePolicy kZonePolicyAT ACE_TIME_PROGMEM = {
416  kZoneRulesAT /*rules*/,
417  nullptr /*letters*/,
418  8 /*numRules*/,
419  0 /*numLetters*/,
420 };
421 
422 //---------------------------------------------------------------------------
423 // Policy name: AV
424 // Rules: 9
425 // Memory (8-bit): 105
426 // Memory (32-bit): 120
427 //---------------------------------------------------------------------------
428 
429 static const extended::ZoneRule kZoneRulesAV[] ACE_TIME_PROGMEM = {
430  // Rule AV 1988 1999 - Oct lastSun 2:00s 1:00 D
431  {
432  1988 /*fromYear*/,
433  1999 /*toYear*/,
434  10 /*inMonth*/,
435  7 /*onDayOfWeek*/,
436  0 /*onDayOfMonth*/,
437  8 /*atTimeCode*/,
438  16 /*atTimeModifier (kSuffixS + minute=0)*/,
439  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
440  'D' /*letter*/,
441  },
442  // Rule AV 1991 1994 - Mar Sun>=1 2:00s 0 S
443  {
444  1991 /*fromYear*/,
445  1994 /*toYear*/,
446  3 /*inMonth*/,
447  7 /*onDayOfWeek*/,
448  1 /*onDayOfMonth*/,
449  8 /*atTimeCode*/,
450  16 /*atTimeModifier (kSuffixS + minute=0)*/,
451  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
452  'S' /*letter*/,
453  },
454  // Rule AV 1995 2005 - Mar lastSun 2:00s 0 S
455  {
456  1995 /*fromYear*/,
457  2005 /*toYear*/,
458  3 /*inMonth*/,
459  7 /*onDayOfWeek*/,
460  0 /*onDayOfMonth*/,
461  8 /*atTimeCode*/,
462  16 /*atTimeModifier (kSuffixS + minute=0)*/,
463  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
464  'S' /*letter*/,
465  },
466  // Rule AV 2000 only - Aug lastSun 2:00s 1:00 D
467  {
468  2000 /*fromYear*/,
469  2000 /*toYear*/,
470  8 /*inMonth*/,
471  7 /*onDayOfWeek*/,
472  0 /*onDayOfMonth*/,
473  8 /*atTimeCode*/,
474  16 /*atTimeModifier (kSuffixS + minute=0)*/,
475  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
476  'D' /*letter*/,
477  },
478  // Rule AV 2001 2007 - Oct lastSun 2:00s 1:00 D
479  {
480  2001 /*fromYear*/,
481  2007 /*toYear*/,
482  10 /*inMonth*/,
483  7 /*onDayOfWeek*/,
484  0 /*onDayOfMonth*/,
485  8 /*atTimeCode*/,
486  16 /*atTimeModifier (kSuffixS + minute=0)*/,
487  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
488  'D' /*letter*/,
489  },
490  // Rule AV 2006 only - Apr Sun>=1 2:00s 0 S
491  {
492  2006 /*fromYear*/,
493  2006 /*toYear*/,
494  4 /*inMonth*/,
495  7 /*onDayOfWeek*/,
496  1 /*onDayOfMonth*/,
497  8 /*atTimeCode*/,
498  16 /*atTimeModifier (kSuffixS + minute=0)*/,
499  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
500  'S' /*letter*/,
501  },
502  // Rule AV 2007 only - Mar lastSun 2:00s 0 S
503  {
504  2007 /*fromYear*/,
505  2007 /*toYear*/,
506  3 /*inMonth*/,
507  7 /*onDayOfWeek*/,
508  0 /*onDayOfMonth*/,
509  8 /*atTimeCode*/,
510  16 /*atTimeModifier (kSuffixS + minute=0)*/,
511  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
512  'S' /*letter*/,
513  },
514  // Rule AV 2008 max - Apr Sun>=1 2:00s 0 S
515  {
516  2008 /*fromYear*/,
517  9999 /*toYear*/,
518  4 /*inMonth*/,
519  7 /*onDayOfWeek*/,
520  1 /*onDayOfMonth*/,
521  8 /*atTimeCode*/,
522  16 /*atTimeModifier (kSuffixS + minute=0)*/,
523  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
524  'S' /*letter*/,
525  },
526  // Rule AV 2008 max - Oct Sun>=1 2:00s 1:00 D
527  {
528  2008 /*fromYear*/,
529  9999 /*toYear*/,
530  10 /*inMonth*/,
531  7 /*onDayOfWeek*/,
532  1 /*onDayOfMonth*/,
533  8 /*atTimeCode*/,
534  16 /*atTimeModifier (kSuffixS + minute=0)*/,
535  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
536  'D' /*letter*/,
537  },
538 
539 };
540 
541 
542 
543 const extended::ZonePolicy kZonePolicyAV ACE_TIME_PROGMEM = {
544  kZoneRulesAV /*rules*/,
545  nullptr /*letters*/,
546  9 /*numRules*/,
547  0 /*numLetters*/,
548 };
549 
550 //---------------------------------------------------------------------------
551 // Policy name: AW
552 // Rules: 4
553 // Memory (8-bit): 50
554 // Memory (32-bit): 60
555 //---------------------------------------------------------------------------
556 
557 static const extended::ZoneRule kZoneRulesAW[] ACE_TIME_PROGMEM = {
558  // Rule AW 1992 only - Mar Sun>=1 2:00s 0 S
559  {
560  1992 /*fromYear*/,
561  1992 /*toYear*/,
562  3 /*inMonth*/,
563  7 /*onDayOfWeek*/,
564  1 /*onDayOfMonth*/,
565  8 /*atTimeCode*/,
566  16 /*atTimeModifier (kSuffixS + minute=0)*/,
567  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
568  'S' /*letter*/,
569  },
570  // Rule AW 2006 only - Dec 3 2:00s 1:00 D
571  {
572  2006 /*fromYear*/,
573  2006 /*toYear*/,
574  12 /*inMonth*/,
575  0 /*onDayOfWeek*/,
576  3 /*onDayOfMonth*/,
577  8 /*atTimeCode*/,
578  16 /*atTimeModifier (kSuffixS + minute=0)*/,
579  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
580  'D' /*letter*/,
581  },
582  // Rule AW 2007 2009 - Mar lastSun 2:00s 0 S
583  {
584  2007 /*fromYear*/,
585  2009 /*toYear*/,
586  3 /*inMonth*/,
587  7 /*onDayOfWeek*/,
588  0 /*onDayOfMonth*/,
589  8 /*atTimeCode*/,
590  16 /*atTimeModifier (kSuffixS + minute=0)*/,
591  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
592  'S' /*letter*/,
593  },
594  // Rule AW 2007 2008 - Oct lastSun 2:00s 1:00 D
595  {
596  2007 /*fromYear*/,
597  2008 /*toYear*/,
598  10 /*inMonth*/,
599  7 /*onDayOfWeek*/,
600  0 /*onDayOfMonth*/,
601  8 /*atTimeCode*/,
602  16 /*atTimeModifier (kSuffixS + minute=0)*/,
603  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
604  'D' /*letter*/,
605  },
606 
607 };
608 
609 
610 
611 const extended::ZonePolicy kZonePolicyAW ACE_TIME_PROGMEM = {
612  kZoneRulesAW /*rules*/,
613  nullptr /*letters*/,
614  4 /*numRules*/,
615  0 /*numLetters*/,
616 };
617 
618 //---------------------------------------------------------------------------
619 // Policy name: Arg
620 // Rules: 6
621 // Memory (8-bit): 72
622 // Memory (32-bit): 84
623 //---------------------------------------------------------------------------
624 
625 static const extended::ZoneRule kZoneRulesArg[] ACE_TIME_PROGMEM = {
626  // Rule Arg 1989 1993 - Mar Sun>=1 0:00 0 -
627  {
628  1989 /*fromYear*/,
629  1993 /*toYear*/,
630  3 /*inMonth*/,
631  7 /*onDayOfWeek*/,
632  1 /*onDayOfMonth*/,
633  0 /*atTimeCode*/,
634  0 /*atTimeModifier (kSuffixW + minute=0)*/,
635  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
636  '-' /*letter*/,
637  },
638  // Rule Arg 1999 only - Oct Sun>=1 0:00 1:00 -
639  {
640  1999 /*fromYear*/,
641  1999 /*toYear*/,
642  10 /*inMonth*/,
643  7 /*onDayOfWeek*/,
644  1 /*onDayOfMonth*/,
645  0 /*atTimeCode*/,
646  0 /*atTimeModifier (kSuffixW + minute=0)*/,
647  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
648  '-' /*letter*/,
649  },
650  // Rule Arg 2000 only - Mar 3 0:00 0 -
651  {
652  2000 /*fromYear*/,
653  2000 /*toYear*/,
654  3 /*inMonth*/,
655  0 /*onDayOfWeek*/,
656  3 /*onDayOfMonth*/,
657  0 /*atTimeCode*/,
658  0 /*atTimeModifier (kSuffixW + minute=0)*/,
659  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
660  '-' /*letter*/,
661  },
662  // Rule Arg 2007 only - Dec 30 0:00 1:00 -
663  {
664  2007 /*fromYear*/,
665  2007 /*toYear*/,
666  12 /*inMonth*/,
667  0 /*onDayOfWeek*/,
668  30 /*onDayOfMonth*/,
669  0 /*atTimeCode*/,
670  0 /*atTimeModifier (kSuffixW + minute=0)*/,
671  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
672  '-' /*letter*/,
673  },
674  // Rule Arg 2008 2009 - Mar Sun>=15 0:00 0 -
675  {
676  2008 /*fromYear*/,
677  2009 /*toYear*/,
678  3 /*inMonth*/,
679  7 /*onDayOfWeek*/,
680  15 /*onDayOfMonth*/,
681  0 /*atTimeCode*/,
682  0 /*atTimeModifier (kSuffixW + minute=0)*/,
683  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
684  '-' /*letter*/,
685  },
686  // Rule Arg 2008 only - Oct Sun>=15 0:00 1:00 -
687  {
688  2008 /*fromYear*/,
689  2008 /*toYear*/,
690  10 /*inMonth*/,
691  7 /*onDayOfWeek*/,
692  15 /*onDayOfMonth*/,
693  0 /*atTimeCode*/,
694  0 /*atTimeModifier (kSuffixW + minute=0)*/,
695  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
696  '-' /*letter*/,
697  },
698 
699 };
700 
701 
702 
703 const extended::ZonePolicy kZonePolicyArg ACE_TIME_PROGMEM = {
704  kZoneRulesArg /*rules*/,
705  nullptr /*letters*/,
706  6 /*numRules*/,
707  0 /*numLetters*/,
708 };
709 
710 //---------------------------------------------------------------------------
711 // Policy name: Armenia
712 // Rules: 3
713 // Memory (8-bit): 39
714 // Memory (32-bit): 48
715 //---------------------------------------------------------------------------
716 
717 static const extended::ZoneRule kZoneRulesArmenia[] ACE_TIME_PROGMEM = {
718  // Anchor: Rule Armenia 2011 only - Oct lastSun 2:00s 0 -
719  {
720  0 /*fromYear*/,
721  0 /*toYear*/,
722  1 /*inMonth*/,
723  0 /*onDayOfWeek*/,
724  1 /*onDayOfMonth*/,
725  0 /*atTimeCode*/,
726  0 /*atTimeModifier (kSuffixW + minute=0)*/,
727  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
728  '-' /*letter*/,
729  },
730  // Rule Armenia 2011 only - Mar lastSun 2:00s 1:00 -
731  {
732  2011 /*fromYear*/,
733  2011 /*toYear*/,
734  3 /*inMonth*/,
735  7 /*onDayOfWeek*/,
736  0 /*onDayOfMonth*/,
737  8 /*atTimeCode*/,
738  16 /*atTimeModifier (kSuffixS + minute=0)*/,
739  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
740  '-' /*letter*/,
741  },
742  // Rule Armenia 2011 only - Oct lastSun 2:00s 0 -
743  {
744  2011 /*fromYear*/,
745  2011 /*toYear*/,
746  10 /*inMonth*/,
747  7 /*onDayOfWeek*/,
748  0 /*onDayOfMonth*/,
749  8 /*atTimeCode*/,
750  16 /*atTimeModifier (kSuffixS + minute=0)*/,
751  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
752  '-' /*letter*/,
753  },
754 
755 };
756 
757 
758 
759 const extended::ZonePolicy kZonePolicyArmenia ACE_TIME_PROGMEM = {
760  kZoneRulesArmenia /*rules*/,
761  nullptr /*letters*/,
762  3 /*numRules*/,
763  0 /*numLetters*/,
764 };
765 
766 //---------------------------------------------------------------------------
767 // Policy name: Aus
768 // Rules: 1
769 // Memory (8-bit): 17
770 // Memory (32-bit): 24
771 //---------------------------------------------------------------------------
772 
773 static const extended::ZoneRule kZoneRulesAus[] ACE_TIME_PROGMEM = {
774  // Rule Aus 1943 1944 - Mar lastSun 2:00s 0 S
775  {
776  1943 /*fromYear*/,
777  1944 /*toYear*/,
778  3 /*inMonth*/,
779  7 /*onDayOfWeek*/,
780  0 /*onDayOfMonth*/,
781  8 /*atTimeCode*/,
782  16 /*atTimeModifier (kSuffixS + minute=0)*/,
783  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
784  'S' /*letter*/,
785  },
786 
787 };
788 
789 
790 
791 const extended::ZonePolicy kZonePolicyAus ACE_TIME_PROGMEM = {
792  kZoneRulesAus /*rules*/,
793  nullptr /*letters*/,
794  1 /*numRules*/,
795  0 /*numLetters*/,
796 };
797 
798 //---------------------------------------------------------------------------
799 // Policy name: Azer
800 // Rules: 2
801 // Memory (8-bit): 28
802 // Memory (32-bit): 36
803 //---------------------------------------------------------------------------
804 
805 static const extended::ZoneRule kZoneRulesAzer[] ACE_TIME_PROGMEM = {
806  // Rule Azer 1997 2015 - Mar lastSun 4:00 1:00 -
807  {
808  1997 /*fromYear*/,
809  2015 /*toYear*/,
810  3 /*inMonth*/,
811  7 /*onDayOfWeek*/,
812  0 /*onDayOfMonth*/,
813  16 /*atTimeCode*/,
814  0 /*atTimeModifier (kSuffixW + minute=0)*/,
815  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
816  '-' /*letter*/,
817  },
818  // Rule Azer 1997 2015 - Oct lastSun 5:00 0 -
819  {
820  1997 /*fromYear*/,
821  2015 /*toYear*/,
822  10 /*inMonth*/,
823  7 /*onDayOfWeek*/,
824  0 /*onDayOfMonth*/,
825  20 /*atTimeCode*/,
826  0 /*atTimeModifier (kSuffixW + minute=0)*/,
827  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
828  '-' /*letter*/,
829  },
830 
831 };
832 
833 
834 
835 const extended::ZonePolicy kZonePolicyAzer ACE_TIME_PROGMEM = {
836  kZoneRulesAzer /*rules*/,
837  nullptr /*letters*/,
838  2 /*numRules*/,
839  0 /*numLetters*/,
840 };
841 
842 //---------------------------------------------------------------------------
843 // Policy name: Barb
844 // Rules: 1
845 // Memory (8-bit): 17
846 // Memory (32-bit): 24
847 //---------------------------------------------------------------------------
848 
849 static const extended::ZoneRule kZoneRulesBarb[] ACE_TIME_PROGMEM = {
850  // Rule Barb 1980 only - Sep 25 2:00 0 S
851  {
852  1980 /*fromYear*/,
853  1980 /*toYear*/,
854  9 /*inMonth*/,
855  0 /*onDayOfWeek*/,
856  25 /*onDayOfMonth*/,
857  8 /*atTimeCode*/,
858  0 /*atTimeModifier (kSuffixW + minute=0)*/,
859  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
860  'S' /*letter*/,
861  },
862 
863 };
864 
865 
866 
867 const extended::ZonePolicy kZonePolicyBarb ACE_TIME_PROGMEM = {
868  kZoneRulesBarb /*rules*/,
869  nullptr /*letters*/,
870  1 /*numRules*/,
871  0 /*numLetters*/,
872 };
873 
874 //---------------------------------------------------------------------------
875 // Policy name: Belize
876 // Rules: 1
877 // Memory (8-bit): 23
878 // Memory (32-bit): 32
879 //---------------------------------------------------------------------------
880 
881 static const extended::ZoneRule kZoneRulesBelize[] ACE_TIME_PROGMEM = {
882  // Rule Belize 1983 only - Feb 12 0:00 0 CST
883  {
884  1983 /*fromYear*/,
885  1983 /*toYear*/,
886  2 /*inMonth*/,
887  0 /*onDayOfWeek*/,
888  12 /*onDayOfMonth*/,
889  0 /*atTimeCode*/,
890  0 /*atTimeModifier (kSuffixW + minute=0)*/,
891  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
892  0 /*letter (index to "CST")*/,
893  },
894 
895 };
896 
897 static const char* const kLettersBelize[] ACE_TIME_PROGMEM = {
898  /*0*/ "CST",
899 
900 };
901 
902 
903 const extended::ZonePolicy kZonePolicyBelize ACE_TIME_PROGMEM = {
904  kZoneRulesBelize /*rules*/,
905  kLettersBelize /*letters*/,
906  1 /*numRules*/,
907  1 /*numLetters*/,
908 };
909 
910 //---------------------------------------------------------------------------
911 // Policy name: Brazil
912 // Rules: 20
913 // Memory (8-bit): 226
914 // Memory (32-bit): 252
915 //---------------------------------------------------------------------------
916 
917 static const extended::ZoneRule kZoneRulesBrazil[] ACE_TIME_PROGMEM = {
918  // Rule Brazil 1998 only - Oct 11 0:00 1:00 -
919  {
920  1998 /*fromYear*/,
921  1998 /*toYear*/,
922  10 /*inMonth*/,
923  0 /*onDayOfWeek*/,
924  11 /*onDayOfMonth*/,
925  0 /*atTimeCode*/,
926  0 /*atTimeModifier (kSuffixW + minute=0)*/,
927  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
928  '-' /*letter*/,
929  },
930  // Rule Brazil 1999 only - Feb 21 0:00 0 -
931  {
932  1999 /*fromYear*/,
933  1999 /*toYear*/,
934  2 /*inMonth*/,
935  0 /*onDayOfWeek*/,
936  21 /*onDayOfMonth*/,
937  0 /*atTimeCode*/,
938  0 /*atTimeModifier (kSuffixW + minute=0)*/,
939  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
940  '-' /*letter*/,
941  },
942  // Rule Brazil 1999 only - Oct 3 0:00 1:00 -
943  {
944  1999 /*fromYear*/,
945  1999 /*toYear*/,
946  10 /*inMonth*/,
947  0 /*onDayOfWeek*/,
948  3 /*onDayOfMonth*/,
949  0 /*atTimeCode*/,
950  0 /*atTimeModifier (kSuffixW + minute=0)*/,
951  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
952  '-' /*letter*/,
953  },
954  // Rule Brazil 2000 only - Feb 27 0:00 0 -
955  {
956  2000 /*fromYear*/,
957  2000 /*toYear*/,
958  2 /*inMonth*/,
959  0 /*onDayOfWeek*/,
960  27 /*onDayOfMonth*/,
961  0 /*atTimeCode*/,
962  0 /*atTimeModifier (kSuffixW + minute=0)*/,
963  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
964  '-' /*letter*/,
965  },
966  // Rule Brazil 2000 2001 - Oct Sun>=8 0:00 1:00 -
967  {
968  2000 /*fromYear*/,
969  2001 /*toYear*/,
970  10 /*inMonth*/,
971  7 /*onDayOfWeek*/,
972  8 /*onDayOfMonth*/,
973  0 /*atTimeCode*/,
974  0 /*atTimeModifier (kSuffixW + minute=0)*/,
975  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
976  '-' /*letter*/,
977  },
978  // Rule Brazil 2001 2006 - Feb Sun>=15 0:00 0 -
979  {
980  2001 /*fromYear*/,
981  2006 /*toYear*/,
982  2 /*inMonth*/,
983  7 /*onDayOfWeek*/,
984  15 /*onDayOfMonth*/,
985  0 /*atTimeCode*/,
986  0 /*atTimeModifier (kSuffixW + minute=0)*/,
987  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
988  '-' /*letter*/,
989  },
990  // Rule Brazil 2002 only - Nov 3 0:00 1:00 -
991  {
992  2002 /*fromYear*/,
993  2002 /*toYear*/,
994  11 /*inMonth*/,
995  0 /*onDayOfWeek*/,
996  3 /*onDayOfMonth*/,
997  0 /*atTimeCode*/,
998  0 /*atTimeModifier (kSuffixW + minute=0)*/,
999  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
1000  '-' /*letter*/,
1001  },
1002  // Rule Brazil 2003 only - Oct 19 0:00 1:00 -
1003  {
1004  2003 /*fromYear*/,
1005  2003 /*toYear*/,
1006  10 /*inMonth*/,
1007  0 /*onDayOfWeek*/,
1008  19 /*onDayOfMonth*/,
1009  0 /*atTimeCode*/,
1010  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1011  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
1012  '-' /*letter*/,
1013  },
1014  // Rule Brazil 2004 only - Nov 2 0:00 1:00 -
1015  {
1016  2004 /*fromYear*/,
1017  2004 /*toYear*/,
1018  11 /*inMonth*/,
1019  0 /*onDayOfWeek*/,
1020  2 /*onDayOfMonth*/,
1021  0 /*atTimeCode*/,
1022  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1023  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
1024  '-' /*letter*/,
1025  },
1026  // Rule Brazil 2005 only - Oct 16 0:00 1:00 -
1027  {
1028  2005 /*fromYear*/,
1029  2005 /*toYear*/,
1030  10 /*inMonth*/,
1031  0 /*onDayOfWeek*/,
1032  16 /*onDayOfMonth*/,
1033  0 /*atTimeCode*/,
1034  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1035  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
1036  '-' /*letter*/,
1037  },
1038  // Rule Brazil 2006 only - Nov 5 0:00 1:00 -
1039  {
1040  2006 /*fromYear*/,
1041  2006 /*toYear*/,
1042  11 /*inMonth*/,
1043  0 /*onDayOfWeek*/,
1044  5 /*onDayOfMonth*/,
1045  0 /*atTimeCode*/,
1046  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1047  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
1048  '-' /*letter*/,
1049  },
1050  // Rule Brazil 2007 only - Feb 25 0:00 0 -
1051  {
1052  2007 /*fromYear*/,
1053  2007 /*toYear*/,
1054  2 /*inMonth*/,
1055  0 /*onDayOfWeek*/,
1056  25 /*onDayOfMonth*/,
1057  0 /*atTimeCode*/,
1058  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1059  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
1060  '-' /*letter*/,
1061  },
1062  // Rule Brazil 2007 only - Oct Sun>=8 0:00 1:00 -
1063  {
1064  2007 /*fromYear*/,
1065  2007 /*toYear*/,
1066  10 /*inMonth*/,
1067  7 /*onDayOfWeek*/,
1068  8 /*onDayOfMonth*/,
1069  0 /*atTimeCode*/,
1070  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1071  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
1072  '-' /*letter*/,
1073  },
1074  // Rule Brazil 2008 2017 - Oct Sun>=15 0:00 1:00 -
1075  {
1076  2008 /*fromYear*/,
1077  2017 /*toYear*/,
1078  10 /*inMonth*/,
1079  7 /*onDayOfWeek*/,
1080  15 /*onDayOfMonth*/,
1081  0 /*atTimeCode*/,
1082  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1083  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
1084  '-' /*letter*/,
1085  },
1086  // Rule Brazil 2008 2011 - Feb Sun>=15 0:00 0 -
1087  {
1088  2008 /*fromYear*/,
1089  2011 /*toYear*/,
1090  2 /*inMonth*/,
1091  7 /*onDayOfWeek*/,
1092  15 /*onDayOfMonth*/,
1093  0 /*atTimeCode*/,
1094  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1095  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
1096  '-' /*letter*/,
1097  },
1098  // Rule Brazil 2012 only - Feb Sun>=22 0:00 0 -
1099  {
1100  2012 /*fromYear*/,
1101  2012 /*toYear*/,
1102  2 /*inMonth*/,
1103  7 /*onDayOfWeek*/,
1104  22 /*onDayOfMonth*/,
1105  0 /*atTimeCode*/,
1106  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1107  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
1108  '-' /*letter*/,
1109  },
1110  // Rule Brazil 2013 2014 - Feb Sun>=15 0:00 0 -
1111  {
1112  2013 /*fromYear*/,
1113  2014 /*toYear*/,
1114  2 /*inMonth*/,
1115  7 /*onDayOfWeek*/,
1116  15 /*onDayOfMonth*/,
1117  0 /*atTimeCode*/,
1118  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1119  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
1120  '-' /*letter*/,
1121  },
1122  // Rule Brazil 2015 only - Feb Sun>=22 0:00 0 -
1123  {
1124  2015 /*fromYear*/,
1125  2015 /*toYear*/,
1126  2 /*inMonth*/,
1127  7 /*onDayOfWeek*/,
1128  22 /*onDayOfMonth*/,
1129  0 /*atTimeCode*/,
1130  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1131  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
1132  '-' /*letter*/,
1133  },
1134  // Rule Brazil 2016 2019 - Feb Sun>=15 0:00 0 -
1135  {
1136  2016 /*fromYear*/,
1137  2019 /*toYear*/,
1138  2 /*inMonth*/,
1139  7 /*onDayOfWeek*/,
1140  15 /*onDayOfMonth*/,
1141  0 /*atTimeCode*/,
1142  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1143  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
1144  '-' /*letter*/,
1145  },
1146  // Rule Brazil 2018 only - Nov Sun>=1 0:00 1:00 -
1147  {
1148  2018 /*fromYear*/,
1149  2018 /*toYear*/,
1150  11 /*inMonth*/,
1151  7 /*onDayOfWeek*/,
1152  1 /*onDayOfMonth*/,
1153  0 /*atTimeCode*/,
1154  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1155  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
1156  '-' /*letter*/,
1157  },
1158 
1159 };
1160 
1161 
1162 
1163 const extended::ZonePolicy kZonePolicyBrazil ACE_TIME_PROGMEM = {
1164  kZoneRulesBrazil /*rules*/,
1165  nullptr /*letters*/,
1166  20 /*numRules*/,
1167  0 /*numLetters*/,
1168 };
1169 
1170 //---------------------------------------------------------------------------
1171 // Policy name: C_Eur
1172 // Rules: 3
1173 // Memory (8-bit): 39
1174 // Memory (32-bit): 48
1175 //---------------------------------------------------------------------------
1176 
1177 static const extended::ZoneRule kZoneRulesC_Eur[] ACE_TIME_PROGMEM = {
1178  // Rule C-Eur 1979 1995 - Sep lastSun 2:00s 0 -
1179  {
1180  1979 /*fromYear*/,
1181  1995 /*toYear*/,
1182  9 /*inMonth*/,
1183  7 /*onDayOfWeek*/,
1184  0 /*onDayOfMonth*/,
1185  8 /*atTimeCode*/,
1186  16 /*atTimeModifier (kSuffixS + minute=0)*/,
1187  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
1188  '-' /*letter*/,
1189  },
1190  // Rule C-Eur 1981 max - Mar lastSun 2:00s 1:00 S
1191  {
1192  1981 /*fromYear*/,
1193  9999 /*toYear*/,
1194  3 /*inMonth*/,
1195  7 /*onDayOfWeek*/,
1196  0 /*onDayOfMonth*/,
1197  8 /*atTimeCode*/,
1198  16 /*atTimeModifier (kSuffixS + minute=0)*/,
1199  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
1200  'S' /*letter*/,
1201  },
1202  // Rule C-Eur 1996 max - Oct lastSun 2:00s 0 -
1203  {
1204  1996 /*fromYear*/,
1205  9999 /*toYear*/,
1206  10 /*inMonth*/,
1207  7 /*onDayOfWeek*/,
1208  0 /*onDayOfMonth*/,
1209  8 /*atTimeCode*/,
1210  16 /*atTimeModifier (kSuffixS + minute=0)*/,
1211  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
1212  '-' /*letter*/,
1213  },
1214 
1215 };
1216 
1217 
1218 
1219 const extended::ZonePolicy kZonePolicyC_Eur ACE_TIME_PROGMEM = {
1220  kZoneRulesC_Eur /*rules*/,
1221  nullptr /*letters*/,
1222  3 /*numRules*/,
1223  0 /*numLetters*/,
1224 };
1225 
1226 //---------------------------------------------------------------------------
1227 // Policy name: CO
1228 // Rules: 1
1229 // Memory (8-bit): 17
1230 // Memory (32-bit): 24
1231 //---------------------------------------------------------------------------
1232 
1233 static const extended::ZoneRule kZoneRulesCO[] ACE_TIME_PROGMEM = {
1234  // Rule CO 1993 only - Feb 6 24:00 0 -
1235  {
1236  1993 /*fromYear*/,
1237  1993 /*toYear*/,
1238  2 /*inMonth*/,
1239  0 /*onDayOfWeek*/,
1240  6 /*onDayOfMonth*/,
1241  96 /*atTimeCode*/,
1242  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1243  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
1244  '-' /*letter*/,
1245  },
1246 
1247 };
1248 
1249 
1250 
1251 const extended::ZonePolicy kZonePolicyCO ACE_TIME_PROGMEM = {
1252  kZoneRulesCO /*rules*/,
1253  nullptr /*letters*/,
1254  1 /*numRules*/,
1255  0 /*numLetters*/,
1256 };
1257 
1258 //---------------------------------------------------------------------------
1259 // Policy name: CR
1260 // Rules: 1
1261 // Memory (8-bit): 17
1262 // Memory (32-bit): 24
1263 //---------------------------------------------------------------------------
1264 
1265 static const extended::ZoneRule kZoneRulesCR[] ACE_TIME_PROGMEM = {
1266  // Rule CR 1992 only - Mar 15 0:00 0 S
1267  {
1268  1992 /*fromYear*/,
1269  1992 /*toYear*/,
1270  3 /*inMonth*/,
1271  0 /*onDayOfWeek*/,
1272  15 /*onDayOfMonth*/,
1273  0 /*atTimeCode*/,
1274  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1275  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
1276  'S' /*letter*/,
1277  },
1278 
1279 };
1280 
1281 
1282 
1283 const extended::ZonePolicy kZonePolicyCR ACE_TIME_PROGMEM = {
1284  kZoneRulesCR /*rules*/,
1285  nullptr /*letters*/,
1286  1 /*numRules*/,
1287  0 /*numLetters*/,
1288 };
1289 
1290 //---------------------------------------------------------------------------
1291 // Policy name: Canada
1292 // Rules: 5
1293 // Memory (8-bit): 61
1294 // Memory (32-bit): 72
1295 //---------------------------------------------------------------------------
1296 
1297 static const extended::ZoneRule kZoneRulesCanada[] ACE_TIME_PROGMEM = {
1298  // Rule Canada 1974 1986 - Apr lastSun 2:00 1:00 D
1299  {
1300  1974 /*fromYear*/,
1301  1986 /*toYear*/,
1302  4 /*inMonth*/,
1303  7 /*onDayOfWeek*/,
1304  0 /*onDayOfMonth*/,
1305  8 /*atTimeCode*/,
1306  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1307  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
1308  'D' /*letter*/,
1309  },
1310  // Rule Canada 1974 2006 - Oct lastSun 2:00 0 S
1311  {
1312  1974 /*fromYear*/,
1313  2006 /*toYear*/,
1314  10 /*inMonth*/,
1315  7 /*onDayOfWeek*/,
1316  0 /*onDayOfMonth*/,
1317  8 /*atTimeCode*/,
1318  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1319  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
1320  'S' /*letter*/,
1321  },
1322  // Rule Canada 1987 2006 - Apr Sun>=1 2:00 1:00 D
1323  {
1324  1987 /*fromYear*/,
1325  2006 /*toYear*/,
1326  4 /*inMonth*/,
1327  7 /*onDayOfWeek*/,
1328  1 /*onDayOfMonth*/,
1329  8 /*atTimeCode*/,
1330  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1331  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
1332  'D' /*letter*/,
1333  },
1334  // Rule Canada 2007 max - Mar Sun>=8 2:00 1:00 D
1335  {
1336  2007 /*fromYear*/,
1337  9999 /*toYear*/,
1338  3 /*inMonth*/,
1339  7 /*onDayOfWeek*/,
1340  8 /*onDayOfMonth*/,
1341  8 /*atTimeCode*/,
1342  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1343  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
1344  'D' /*letter*/,
1345  },
1346  // Rule Canada 2007 max - Nov Sun>=1 2:00 0 S
1347  {
1348  2007 /*fromYear*/,
1349  9999 /*toYear*/,
1350  11 /*inMonth*/,
1351  7 /*onDayOfWeek*/,
1352  1 /*onDayOfMonth*/,
1353  8 /*atTimeCode*/,
1354  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1355  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
1356  'S' /*letter*/,
1357  },
1358 
1359 };
1360 
1361 
1362 
1363 const extended::ZonePolicy kZonePolicyCanada ACE_TIME_PROGMEM = {
1364  kZoneRulesCanada /*rules*/,
1365  nullptr /*letters*/,
1366  5 /*numRules*/,
1367  0 /*numLetters*/,
1368 };
1369 
1370 //---------------------------------------------------------------------------
1371 // Policy name: Chatham
1372 // Rules: 5
1373 // Memory (8-bit): 61
1374 // Memory (32-bit): 72
1375 //---------------------------------------------------------------------------
1376 
1377 static const extended::ZoneRule kZoneRulesChatham[] ACE_TIME_PROGMEM = {
1378  // Rule Chatham 1989 only - Oct Sun>=8 2:45s 1:00 -
1379  {
1380  1989 /*fromYear*/,
1381  1989 /*toYear*/,
1382  10 /*inMonth*/,
1383  7 /*onDayOfWeek*/,
1384  8 /*onDayOfMonth*/,
1385  11 /*atTimeCode*/,
1386  16 /*atTimeModifier (kSuffixS + minute=0)*/,
1387  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
1388  '-' /*letter*/,
1389  },
1390  // Rule Chatham 1990 2006 - Oct Sun>=1 2:45s 1:00 -
1391  {
1392  1990 /*fromYear*/,
1393  2006 /*toYear*/,
1394  10 /*inMonth*/,
1395  7 /*onDayOfWeek*/,
1396  1 /*onDayOfMonth*/,
1397  11 /*atTimeCode*/,
1398  16 /*atTimeModifier (kSuffixS + minute=0)*/,
1399  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
1400  '-' /*letter*/,
1401  },
1402  // Rule Chatham 1990 2007 - Mar Sun>=15 2:45s 0 -
1403  {
1404  1990 /*fromYear*/,
1405  2007 /*toYear*/,
1406  3 /*inMonth*/,
1407  7 /*onDayOfWeek*/,
1408  15 /*onDayOfMonth*/,
1409  11 /*atTimeCode*/,
1410  16 /*atTimeModifier (kSuffixS + minute=0)*/,
1411  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
1412  '-' /*letter*/,
1413  },
1414  // Rule Chatham 2007 max - Sep lastSun 2:45s 1:00 -
1415  {
1416  2007 /*fromYear*/,
1417  9999 /*toYear*/,
1418  9 /*inMonth*/,
1419  7 /*onDayOfWeek*/,
1420  0 /*onDayOfMonth*/,
1421  11 /*atTimeCode*/,
1422  16 /*atTimeModifier (kSuffixS + minute=0)*/,
1423  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
1424  '-' /*letter*/,
1425  },
1426  // Rule Chatham 2008 max - Apr Sun>=1 2:45s 0 -
1427  {
1428  2008 /*fromYear*/,
1429  9999 /*toYear*/,
1430  4 /*inMonth*/,
1431  7 /*onDayOfWeek*/,
1432  1 /*onDayOfMonth*/,
1433  11 /*atTimeCode*/,
1434  16 /*atTimeModifier (kSuffixS + minute=0)*/,
1435  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
1436  '-' /*letter*/,
1437  },
1438 
1439 };
1440 
1441 
1442 
1443 const extended::ZonePolicy kZonePolicyChatham ACE_TIME_PROGMEM = {
1444  kZoneRulesChatham /*rules*/,
1445  nullptr /*letters*/,
1446  5 /*numRules*/,
1447  0 /*numLetters*/,
1448 };
1449 
1450 //---------------------------------------------------------------------------
1451 // Policy name: Chile
1452 // Rules: 17
1453 // Memory (8-bit): 193
1454 // Memory (32-bit): 216
1455 //---------------------------------------------------------------------------
1456 
1457 static const extended::ZoneRule kZoneRulesChile[] ACE_TIME_PROGMEM = {
1458  // Rule Chile 1998 only - Sep 27 4:00u 1:00 -
1459  {
1460  1998 /*fromYear*/,
1461  1998 /*toYear*/,
1462  9 /*inMonth*/,
1463  0 /*onDayOfWeek*/,
1464  27 /*onDayOfMonth*/,
1465  16 /*atTimeCode*/,
1466  32 /*atTimeModifier (kSuffixU + minute=0)*/,
1467  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
1468  '-' /*letter*/,
1469  },
1470  // Rule Chile 1999 only - Apr 4 3:00u 0 -
1471  {
1472  1999 /*fromYear*/,
1473  1999 /*toYear*/,
1474  4 /*inMonth*/,
1475  0 /*onDayOfWeek*/,
1476  4 /*onDayOfMonth*/,
1477  12 /*atTimeCode*/,
1478  32 /*atTimeModifier (kSuffixU + minute=0)*/,
1479  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
1480  '-' /*letter*/,
1481  },
1482  // Rule Chile 1999 2010 - Oct Sun>=9 4:00u 1:00 -
1483  {
1484  1999 /*fromYear*/,
1485  2010 /*toYear*/,
1486  10 /*inMonth*/,
1487  7 /*onDayOfWeek*/,
1488  9 /*onDayOfMonth*/,
1489  16 /*atTimeCode*/,
1490  32 /*atTimeModifier (kSuffixU + minute=0)*/,
1491  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
1492  '-' /*letter*/,
1493  },
1494  // Rule Chile 2000 2007 - Mar Sun>=9 3:00u 0 -
1495  {
1496  2000 /*fromYear*/,
1497  2007 /*toYear*/,
1498  3 /*inMonth*/,
1499  7 /*onDayOfWeek*/,
1500  9 /*onDayOfMonth*/,
1501  12 /*atTimeCode*/,
1502  32 /*atTimeModifier (kSuffixU + minute=0)*/,
1503  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
1504  '-' /*letter*/,
1505  },
1506  // Rule Chile 2008 only - Mar 30 3:00u 0 -
1507  {
1508  2008 /*fromYear*/,
1509  2008 /*toYear*/,
1510  3 /*inMonth*/,
1511  0 /*onDayOfWeek*/,
1512  30 /*onDayOfMonth*/,
1513  12 /*atTimeCode*/,
1514  32 /*atTimeModifier (kSuffixU + minute=0)*/,
1515  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
1516  '-' /*letter*/,
1517  },
1518  // Rule Chile 2009 only - Mar Sun>=9 3:00u 0 -
1519  {
1520  2009 /*fromYear*/,
1521  2009 /*toYear*/,
1522  3 /*inMonth*/,
1523  7 /*onDayOfWeek*/,
1524  9 /*onDayOfMonth*/,
1525  12 /*atTimeCode*/,
1526  32 /*atTimeModifier (kSuffixU + minute=0)*/,
1527  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
1528  '-' /*letter*/,
1529  },
1530  // Rule Chile 2010 only - Apr Sun>=1 3:00u 0 -
1531  {
1532  2010 /*fromYear*/,
1533  2010 /*toYear*/,
1534  4 /*inMonth*/,
1535  7 /*onDayOfWeek*/,
1536  1 /*onDayOfMonth*/,
1537  12 /*atTimeCode*/,
1538  32 /*atTimeModifier (kSuffixU + minute=0)*/,
1539  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
1540  '-' /*letter*/,
1541  },
1542  // Rule Chile 2011 only - May Sun>=2 3:00u 0 -
1543  {
1544  2011 /*fromYear*/,
1545  2011 /*toYear*/,
1546  5 /*inMonth*/,
1547  7 /*onDayOfWeek*/,
1548  2 /*onDayOfMonth*/,
1549  12 /*atTimeCode*/,
1550  32 /*atTimeModifier (kSuffixU + minute=0)*/,
1551  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
1552  '-' /*letter*/,
1553  },
1554  // Rule Chile 2011 only - Aug Sun>=16 4:00u 1:00 -
1555  {
1556  2011 /*fromYear*/,
1557  2011 /*toYear*/,
1558  8 /*inMonth*/,
1559  7 /*onDayOfWeek*/,
1560  16 /*onDayOfMonth*/,
1561  16 /*atTimeCode*/,
1562  32 /*atTimeModifier (kSuffixU + minute=0)*/,
1563  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
1564  '-' /*letter*/,
1565  },
1566  // Rule Chile 2012 2014 - Apr Sun>=23 3:00u 0 -
1567  {
1568  2012 /*fromYear*/,
1569  2014 /*toYear*/,
1570  4 /*inMonth*/,
1571  7 /*onDayOfWeek*/,
1572  23 /*onDayOfMonth*/,
1573  12 /*atTimeCode*/,
1574  32 /*atTimeModifier (kSuffixU + minute=0)*/,
1575  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
1576  '-' /*letter*/,
1577  },
1578  // Rule Chile 2012 2014 - Sep Sun>=2 4:00u 1:00 -
1579  {
1580  2012 /*fromYear*/,
1581  2014 /*toYear*/,
1582  9 /*inMonth*/,
1583  7 /*onDayOfWeek*/,
1584  2 /*onDayOfMonth*/,
1585  16 /*atTimeCode*/,
1586  32 /*atTimeModifier (kSuffixU + minute=0)*/,
1587  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
1588  '-' /*letter*/,
1589  },
1590  // Rule Chile 2016 2018 - May Sun>=9 3:00u 0 -
1591  {
1592  2016 /*fromYear*/,
1593  2018 /*toYear*/,
1594  5 /*inMonth*/,
1595  7 /*onDayOfWeek*/,
1596  9 /*onDayOfMonth*/,
1597  12 /*atTimeCode*/,
1598  32 /*atTimeModifier (kSuffixU + minute=0)*/,
1599  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
1600  '-' /*letter*/,
1601  },
1602  // Rule Chile 2016 2018 - Aug Sun>=9 4:00u 1:00 -
1603  {
1604  2016 /*fromYear*/,
1605  2018 /*toYear*/,
1606  8 /*inMonth*/,
1607  7 /*onDayOfWeek*/,
1608  9 /*onDayOfMonth*/,
1609  16 /*atTimeCode*/,
1610  32 /*atTimeModifier (kSuffixU + minute=0)*/,
1611  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
1612  '-' /*letter*/,
1613  },
1614  // Rule Chile 2019 max - Apr Sun>=2 3:00u 0 -
1615  {
1616  2019 /*fromYear*/,
1617  9999 /*toYear*/,
1618  4 /*inMonth*/,
1619  7 /*onDayOfWeek*/,
1620  2 /*onDayOfMonth*/,
1621  12 /*atTimeCode*/,
1622  32 /*atTimeModifier (kSuffixU + minute=0)*/,
1623  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
1624  '-' /*letter*/,
1625  },
1626  // Rule Chile 2019 2021 - Sep Sun>=2 4:00u 1:00 -
1627  {
1628  2019 /*fromYear*/,
1629  2021 /*toYear*/,
1630  9 /*inMonth*/,
1631  7 /*onDayOfWeek*/,
1632  2 /*onDayOfMonth*/,
1633  16 /*atTimeCode*/,
1634  32 /*atTimeModifier (kSuffixU + minute=0)*/,
1635  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
1636  '-' /*letter*/,
1637  },
1638  // Rule Chile 2022 only - Sep Sun>=9 4:00u 1:00 -
1639  {
1640  2022 /*fromYear*/,
1641  2022 /*toYear*/,
1642  9 /*inMonth*/,
1643  7 /*onDayOfWeek*/,
1644  9 /*onDayOfMonth*/,
1645  16 /*atTimeCode*/,
1646  32 /*atTimeModifier (kSuffixU + minute=0)*/,
1647  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
1648  '-' /*letter*/,
1649  },
1650  // Rule Chile 2023 max - Sep Sun>=2 4:00u 1:00 -
1651  {
1652  2023 /*fromYear*/,
1653  9999 /*toYear*/,
1654  9 /*inMonth*/,
1655  7 /*onDayOfWeek*/,
1656  2 /*onDayOfMonth*/,
1657  16 /*atTimeCode*/,
1658  32 /*atTimeModifier (kSuffixU + minute=0)*/,
1659  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
1660  '-' /*letter*/,
1661  },
1662 
1663 };
1664 
1665 
1666 
1667 const extended::ZonePolicy kZonePolicyChile ACE_TIME_PROGMEM = {
1668  kZoneRulesChile /*rules*/,
1669  nullptr /*letters*/,
1670  17 /*numRules*/,
1671  0 /*numLetters*/,
1672 };
1673 
1674 //---------------------------------------------------------------------------
1675 // Policy name: Cook
1676 // Rules: 1
1677 // Memory (8-bit): 17
1678 // Memory (32-bit): 24
1679 //---------------------------------------------------------------------------
1680 
1681 static const extended::ZoneRule kZoneRulesCook[] ACE_TIME_PROGMEM = {
1682  // Rule Cook 1979 1991 - Mar Sun>=1 0:00 0 -
1683  {
1684  1979 /*fromYear*/,
1685  1991 /*toYear*/,
1686  3 /*inMonth*/,
1687  7 /*onDayOfWeek*/,
1688  1 /*onDayOfMonth*/,
1689  0 /*atTimeCode*/,
1690  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1691  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
1692  '-' /*letter*/,
1693  },
1694 
1695 };
1696 
1697 
1698 
1699 const extended::ZonePolicy kZonePolicyCook ACE_TIME_PROGMEM = {
1700  kZoneRulesCook /*rules*/,
1701  nullptr /*letters*/,
1702  1 /*numRules*/,
1703  0 /*numLetters*/,
1704 };
1705 
1706 //---------------------------------------------------------------------------
1707 // Policy name: Cuba
1708 // Rules: 14
1709 // Memory (8-bit): 160
1710 // Memory (32-bit): 180
1711 //---------------------------------------------------------------------------
1712 
1713 static const extended::ZoneRule kZoneRulesCuba[] ACE_TIME_PROGMEM = {
1714  // Rule Cuba 1997 only - Oct 12 0:00s 0 S
1715  {
1716  1997 /*fromYear*/,
1717  1997 /*toYear*/,
1718  10 /*inMonth*/,
1719  0 /*onDayOfWeek*/,
1720  12 /*onDayOfMonth*/,
1721  0 /*atTimeCode*/,
1722  16 /*atTimeModifier (kSuffixS + minute=0)*/,
1723  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
1724  'S' /*letter*/,
1725  },
1726  // Rule Cuba 1998 1999 - Mar lastSun 0:00s 1:00 D
1727  {
1728  1998 /*fromYear*/,
1729  1999 /*toYear*/,
1730  3 /*inMonth*/,
1731  7 /*onDayOfWeek*/,
1732  0 /*onDayOfMonth*/,
1733  0 /*atTimeCode*/,
1734  16 /*atTimeModifier (kSuffixS + minute=0)*/,
1735  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
1736  'D' /*letter*/,
1737  },
1738  // Rule Cuba 1998 2003 - Oct lastSun 0:00s 0 S
1739  {
1740  1998 /*fromYear*/,
1741  2003 /*toYear*/,
1742  10 /*inMonth*/,
1743  7 /*onDayOfWeek*/,
1744  0 /*onDayOfMonth*/,
1745  0 /*atTimeCode*/,
1746  16 /*atTimeModifier (kSuffixS + minute=0)*/,
1747  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
1748  'S' /*letter*/,
1749  },
1750  // Rule Cuba 2000 2003 - Apr Sun>=1 0:00s 1:00 D
1751  {
1752  2000 /*fromYear*/,
1753  2003 /*toYear*/,
1754  4 /*inMonth*/,
1755  7 /*onDayOfWeek*/,
1756  1 /*onDayOfMonth*/,
1757  0 /*atTimeCode*/,
1758  16 /*atTimeModifier (kSuffixS + minute=0)*/,
1759  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
1760  'D' /*letter*/,
1761  },
1762  // Rule Cuba 2004 only - Mar lastSun 0:00s 1:00 D
1763  {
1764  2004 /*fromYear*/,
1765  2004 /*toYear*/,
1766  3 /*inMonth*/,
1767  7 /*onDayOfWeek*/,
1768  0 /*onDayOfMonth*/,
1769  0 /*atTimeCode*/,
1770  16 /*atTimeModifier (kSuffixS + minute=0)*/,
1771  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
1772  'D' /*letter*/,
1773  },
1774  // Rule Cuba 2006 2010 - Oct lastSun 0:00s 0 S
1775  {
1776  2006 /*fromYear*/,
1777  2010 /*toYear*/,
1778  10 /*inMonth*/,
1779  7 /*onDayOfWeek*/,
1780  0 /*onDayOfMonth*/,
1781  0 /*atTimeCode*/,
1782  16 /*atTimeModifier (kSuffixS + minute=0)*/,
1783  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
1784  'S' /*letter*/,
1785  },
1786  // Rule Cuba 2007 only - Mar Sun>=8 0:00s 1:00 D
1787  {
1788  2007 /*fromYear*/,
1789  2007 /*toYear*/,
1790  3 /*inMonth*/,
1791  7 /*onDayOfWeek*/,
1792  8 /*onDayOfMonth*/,
1793  0 /*atTimeCode*/,
1794  16 /*atTimeModifier (kSuffixS + minute=0)*/,
1795  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
1796  'D' /*letter*/,
1797  },
1798  // Rule Cuba 2008 only - Mar Sun>=15 0:00s 1:00 D
1799  {
1800  2008 /*fromYear*/,
1801  2008 /*toYear*/,
1802  3 /*inMonth*/,
1803  7 /*onDayOfWeek*/,
1804  15 /*onDayOfMonth*/,
1805  0 /*atTimeCode*/,
1806  16 /*atTimeModifier (kSuffixS + minute=0)*/,
1807  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
1808  'D' /*letter*/,
1809  },
1810  // Rule Cuba 2009 2010 - Mar Sun>=8 0:00s 1:00 D
1811  {
1812  2009 /*fromYear*/,
1813  2010 /*toYear*/,
1814  3 /*inMonth*/,
1815  7 /*onDayOfWeek*/,
1816  8 /*onDayOfMonth*/,
1817  0 /*atTimeCode*/,
1818  16 /*atTimeModifier (kSuffixS + minute=0)*/,
1819  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
1820  'D' /*letter*/,
1821  },
1822  // Rule Cuba 2011 only - Mar Sun>=15 0:00s 1:00 D
1823  {
1824  2011 /*fromYear*/,
1825  2011 /*toYear*/,
1826  3 /*inMonth*/,
1827  7 /*onDayOfWeek*/,
1828  15 /*onDayOfMonth*/,
1829  0 /*atTimeCode*/,
1830  16 /*atTimeModifier (kSuffixS + minute=0)*/,
1831  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
1832  'D' /*letter*/,
1833  },
1834  // Rule Cuba 2011 only - Nov 13 0:00s 0 S
1835  {
1836  2011 /*fromYear*/,
1837  2011 /*toYear*/,
1838  11 /*inMonth*/,
1839  0 /*onDayOfWeek*/,
1840  13 /*onDayOfMonth*/,
1841  0 /*atTimeCode*/,
1842  16 /*atTimeModifier (kSuffixS + minute=0)*/,
1843  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
1844  'S' /*letter*/,
1845  },
1846  // Rule Cuba 2012 only - Apr 1 0:00s 1:00 D
1847  {
1848  2012 /*fromYear*/,
1849  2012 /*toYear*/,
1850  4 /*inMonth*/,
1851  0 /*onDayOfWeek*/,
1852  1 /*onDayOfMonth*/,
1853  0 /*atTimeCode*/,
1854  16 /*atTimeModifier (kSuffixS + minute=0)*/,
1855  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
1856  'D' /*letter*/,
1857  },
1858  // Rule Cuba 2012 max - Nov Sun>=1 0:00s 0 S
1859  {
1860  2012 /*fromYear*/,
1861  9999 /*toYear*/,
1862  11 /*inMonth*/,
1863  7 /*onDayOfWeek*/,
1864  1 /*onDayOfMonth*/,
1865  0 /*atTimeCode*/,
1866  16 /*atTimeModifier (kSuffixS + minute=0)*/,
1867  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
1868  'S' /*letter*/,
1869  },
1870  // Rule Cuba 2013 max - Mar Sun>=8 0:00s 1:00 D
1871  {
1872  2013 /*fromYear*/,
1873  9999 /*toYear*/,
1874  3 /*inMonth*/,
1875  7 /*onDayOfWeek*/,
1876  8 /*onDayOfMonth*/,
1877  0 /*atTimeCode*/,
1878  16 /*atTimeModifier (kSuffixS + minute=0)*/,
1879  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
1880  'D' /*letter*/,
1881  },
1882 
1883 };
1884 
1885 
1886 
1887 const extended::ZonePolicy kZonePolicyCuba ACE_TIME_PROGMEM = {
1888  kZoneRulesCuba /*rules*/,
1889  nullptr /*letters*/,
1890  14 /*numRules*/,
1891  0 /*numLetters*/,
1892 };
1893 
1894 //---------------------------------------------------------------------------
1895 // Policy name: Dhaka
1896 // Rules: 3
1897 // Memory (8-bit): 39
1898 // Memory (32-bit): 48
1899 //---------------------------------------------------------------------------
1900 
1901 static const extended::ZoneRule kZoneRulesDhaka[] ACE_TIME_PROGMEM = {
1902  // Anchor: Rule Dhaka 2009 only - Dec 31 24:00 0 -
1903  {
1904  0 /*fromYear*/,
1905  0 /*toYear*/,
1906  1 /*inMonth*/,
1907  0 /*onDayOfWeek*/,
1908  1 /*onDayOfMonth*/,
1909  0 /*atTimeCode*/,
1910  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1911  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
1912  '-' /*letter*/,
1913  },
1914  // Rule Dhaka 2009 only - Jun 19 23:00 1:00 -
1915  {
1916  2009 /*fromYear*/,
1917  2009 /*toYear*/,
1918  6 /*inMonth*/,
1919  0 /*onDayOfWeek*/,
1920  19 /*onDayOfMonth*/,
1921  92 /*atTimeCode*/,
1922  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1923  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
1924  '-' /*letter*/,
1925  },
1926  // Rule Dhaka 2009 only - Dec 31 24:00 0 -
1927  {
1928  2009 /*fromYear*/,
1929  2009 /*toYear*/,
1930  12 /*inMonth*/,
1931  0 /*onDayOfWeek*/,
1932  31 /*onDayOfMonth*/,
1933  96 /*atTimeCode*/,
1934  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1935  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
1936  '-' /*letter*/,
1937  },
1938 
1939 };
1940 
1941 
1942 
1943 const extended::ZonePolicy kZonePolicyDhaka ACE_TIME_PROGMEM = {
1944  kZoneRulesDhaka /*rules*/,
1945  nullptr /*letters*/,
1946  3 /*numRules*/,
1947  0 /*numLetters*/,
1948 };
1949 
1950 //---------------------------------------------------------------------------
1951 // Policy name: E_EurAsia
1952 // Rules: 3
1953 // Memory (8-bit): 39
1954 // Memory (32-bit): 48
1955 //---------------------------------------------------------------------------
1956 
1957 static const extended::ZoneRule kZoneRulesE_EurAsia[] ACE_TIME_PROGMEM = {
1958  // Rule E-EurAsia 1981 max - Mar lastSun 0:00 1:00 -
1959  {
1960  1981 /*fromYear*/,
1961  9999 /*toYear*/,
1962  3 /*inMonth*/,
1963  7 /*onDayOfWeek*/,
1964  0 /*onDayOfMonth*/,
1965  0 /*atTimeCode*/,
1966  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1967  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
1968  '-' /*letter*/,
1969  },
1970  // Rule E-EurAsia 1979 1995 - Sep lastSun 0:00 0 -
1971  {
1972  1979 /*fromYear*/,
1973  1995 /*toYear*/,
1974  9 /*inMonth*/,
1975  7 /*onDayOfWeek*/,
1976  0 /*onDayOfMonth*/,
1977  0 /*atTimeCode*/,
1978  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1979  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
1980  '-' /*letter*/,
1981  },
1982  // Rule E-EurAsia 1996 max - Oct lastSun 0:00 0 -
1983  {
1984  1996 /*fromYear*/,
1985  9999 /*toYear*/,
1986  10 /*inMonth*/,
1987  7 /*onDayOfWeek*/,
1988  0 /*onDayOfMonth*/,
1989  0 /*atTimeCode*/,
1990  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1991  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
1992  '-' /*letter*/,
1993  },
1994 
1995 };
1996 
1997 
1998 
1999 const extended::ZonePolicy kZonePolicyE_EurAsia ACE_TIME_PROGMEM = {
2000  kZoneRulesE_EurAsia /*rules*/,
2001  nullptr /*letters*/,
2002  3 /*numRules*/,
2003  0 /*numLetters*/,
2004 };
2005 
2006 //---------------------------------------------------------------------------
2007 // Policy name: EU
2008 // Rules: 3
2009 // Memory (8-bit): 39
2010 // Memory (32-bit): 48
2011 //---------------------------------------------------------------------------
2012 
2013 static const extended::ZoneRule kZoneRulesEU[] ACE_TIME_PROGMEM = {
2014  // Rule EU 1979 1995 - Sep lastSun 1:00u 0 -
2015  {
2016  1979 /*fromYear*/,
2017  1995 /*toYear*/,
2018  9 /*inMonth*/,
2019  7 /*onDayOfWeek*/,
2020  0 /*onDayOfMonth*/,
2021  4 /*atTimeCode*/,
2022  32 /*atTimeModifier (kSuffixU + minute=0)*/,
2023  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
2024  '-' /*letter*/,
2025  },
2026  // Rule EU 1981 max - Mar lastSun 1:00u 1:00 S
2027  {
2028  1981 /*fromYear*/,
2029  9999 /*toYear*/,
2030  3 /*inMonth*/,
2031  7 /*onDayOfWeek*/,
2032  0 /*onDayOfMonth*/,
2033  4 /*atTimeCode*/,
2034  32 /*atTimeModifier (kSuffixU + minute=0)*/,
2035  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
2036  'S' /*letter*/,
2037  },
2038  // Rule EU 1996 max - Oct lastSun 1:00u 0 -
2039  {
2040  1996 /*fromYear*/,
2041  9999 /*toYear*/,
2042  10 /*inMonth*/,
2043  7 /*onDayOfWeek*/,
2044  0 /*onDayOfMonth*/,
2045  4 /*atTimeCode*/,
2046  32 /*atTimeModifier (kSuffixU + minute=0)*/,
2047  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
2048  '-' /*letter*/,
2049  },
2050 
2051 };
2052 
2053 
2054 
2055 const extended::ZonePolicy kZonePolicyEU ACE_TIME_PROGMEM = {
2056  kZoneRulesEU /*rules*/,
2057  nullptr /*letters*/,
2058  3 /*numRules*/,
2059  0 /*numLetters*/,
2060 };
2061 
2062 //---------------------------------------------------------------------------
2063 // Policy name: EUAsia
2064 // Rules: 3
2065 // Memory (8-bit): 39
2066 // Memory (32-bit): 48
2067 //---------------------------------------------------------------------------
2068 
2069 static const extended::ZoneRule kZoneRulesEUAsia[] ACE_TIME_PROGMEM = {
2070  // Rule EUAsia 1981 max - Mar lastSun 1:00u 1:00 S
2071  {
2072  1981 /*fromYear*/,
2073  9999 /*toYear*/,
2074  3 /*inMonth*/,
2075  7 /*onDayOfWeek*/,
2076  0 /*onDayOfMonth*/,
2077  4 /*atTimeCode*/,
2078  32 /*atTimeModifier (kSuffixU + minute=0)*/,
2079  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
2080  'S' /*letter*/,
2081  },
2082  // Rule EUAsia 1979 1995 - Sep lastSun 1:00u 0 -
2083  {
2084  1979 /*fromYear*/,
2085  1995 /*toYear*/,
2086  9 /*inMonth*/,
2087  7 /*onDayOfWeek*/,
2088  0 /*onDayOfMonth*/,
2089  4 /*atTimeCode*/,
2090  32 /*atTimeModifier (kSuffixU + minute=0)*/,
2091  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
2092  '-' /*letter*/,
2093  },
2094  // Rule EUAsia 1996 max - Oct lastSun 1:00u 0 -
2095  {
2096  1996 /*fromYear*/,
2097  9999 /*toYear*/,
2098  10 /*inMonth*/,
2099  7 /*onDayOfWeek*/,
2100  0 /*onDayOfMonth*/,
2101  4 /*atTimeCode*/,
2102  32 /*atTimeModifier (kSuffixU + minute=0)*/,
2103  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
2104  '-' /*letter*/,
2105  },
2106 
2107 };
2108 
2109 
2110 
2111 const extended::ZonePolicy kZonePolicyEUAsia ACE_TIME_PROGMEM = {
2112  kZoneRulesEUAsia /*rules*/,
2113  nullptr /*letters*/,
2114  3 /*numRules*/,
2115  0 /*numLetters*/,
2116 };
2117 
2118 //---------------------------------------------------------------------------
2119 // Policy name: Ecuador
2120 // Rules: 1
2121 // Memory (8-bit): 17
2122 // Memory (32-bit): 24
2123 //---------------------------------------------------------------------------
2124 
2125 static const extended::ZoneRule kZoneRulesEcuador[] ACE_TIME_PROGMEM = {
2126  // Rule Ecuador 1993 only - Feb 5 0:00 0 -
2127  {
2128  1993 /*fromYear*/,
2129  1993 /*toYear*/,
2130  2 /*inMonth*/,
2131  0 /*onDayOfWeek*/,
2132  5 /*onDayOfMonth*/,
2133  0 /*atTimeCode*/,
2134  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2135  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
2136  '-' /*letter*/,
2137  },
2138 
2139 };
2140 
2141 
2142 
2143 const extended::ZonePolicy kZonePolicyEcuador ACE_TIME_PROGMEM = {
2144  kZoneRulesEcuador /*rules*/,
2145  nullptr /*letters*/,
2146  1 /*numRules*/,
2147  0 /*numLetters*/,
2148 };
2149 
2150 //---------------------------------------------------------------------------
2151 // Policy name: Egypt
2152 // Rules: 14
2153 // Memory (8-bit): 160
2154 // Memory (32-bit): 180
2155 //---------------------------------------------------------------------------
2156 
2157 static const extended::ZoneRule kZoneRulesEgypt[] ACE_TIME_PROGMEM = {
2158  // Rule Egypt 1966 1994 - Oct 1 3:00 0 -
2159  {
2160  1966 /*fromYear*/,
2161  1994 /*toYear*/,
2162  10 /*inMonth*/,
2163  0 /*onDayOfWeek*/,
2164  1 /*onDayOfMonth*/,
2165  12 /*atTimeCode*/,
2166  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2167  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
2168  '-' /*letter*/,
2169  },
2170  // Rule Egypt 1995 2010 - Apr lastFri 0:00s 1:00 S
2171  {
2172  1995 /*fromYear*/,
2173  2010 /*toYear*/,
2174  4 /*inMonth*/,
2175  5 /*onDayOfWeek*/,
2176  0 /*onDayOfMonth*/,
2177  0 /*atTimeCode*/,
2178  16 /*atTimeModifier (kSuffixS + minute=0)*/,
2179  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
2180  'S' /*letter*/,
2181  },
2182  // Rule Egypt 1995 2005 - Sep lastThu 24:00 0 -
2183  {
2184  1995 /*fromYear*/,
2185  2005 /*toYear*/,
2186  9 /*inMonth*/,
2187  4 /*onDayOfWeek*/,
2188  0 /*onDayOfMonth*/,
2189  96 /*atTimeCode*/,
2190  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2191  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
2192  '-' /*letter*/,
2193  },
2194  // Rule Egypt 2006 only - Sep 21 24:00 0 -
2195  {
2196  2006 /*fromYear*/,
2197  2006 /*toYear*/,
2198  9 /*inMonth*/,
2199  0 /*onDayOfWeek*/,
2200  21 /*onDayOfMonth*/,
2201  96 /*atTimeCode*/,
2202  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2203  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
2204  '-' /*letter*/,
2205  },
2206  // Rule Egypt 2007 only - Sep Thu>=1 24:00 0 -
2207  {
2208  2007 /*fromYear*/,
2209  2007 /*toYear*/,
2210  9 /*inMonth*/,
2211  4 /*onDayOfWeek*/,
2212  1 /*onDayOfMonth*/,
2213  96 /*atTimeCode*/,
2214  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2215  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
2216  '-' /*letter*/,
2217  },
2218  // Rule Egypt 2008 only - Aug lastThu 24:00 0 -
2219  {
2220  2008 /*fromYear*/,
2221  2008 /*toYear*/,
2222  8 /*inMonth*/,
2223  4 /*onDayOfWeek*/,
2224  0 /*onDayOfMonth*/,
2225  96 /*atTimeCode*/,
2226  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2227  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
2228  '-' /*letter*/,
2229  },
2230  // Rule Egypt 2009 only - Aug 20 24:00 0 -
2231  {
2232  2009 /*fromYear*/,
2233  2009 /*toYear*/,
2234  8 /*inMonth*/,
2235  0 /*onDayOfWeek*/,
2236  20 /*onDayOfMonth*/,
2237  96 /*atTimeCode*/,
2238  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2239  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
2240  '-' /*letter*/,
2241  },
2242  // Rule Egypt 2010 only - Aug 10 24:00 0 -
2243  {
2244  2010 /*fromYear*/,
2245  2010 /*toYear*/,
2246  8 /*inMonth*/,
2247  0 /*onDayOfWeek*/,
2248  10 /*onDayOfMonth*/,
2249  96 /*atTimeCode*/,
2250  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2251  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
2252  '-' /*letter*/,
2253  },
2254  // Rule Egypt 2010 only - Sep 9 24:00 1:00 S
2255  {
2256  2010 /*fromYear*/,
2257  2010 /*toYear*/,
2258  9 /*inMonth*/,
2259  0 /*onDayOfWeek*/,
2260  9 /*onDayOfMonth*/,
2261  96 /*atTimeCode*/,
2262  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2263  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
2264  'S' /*letter*/,
2265  },
2266  // Rule Egypt 2010 only - Sep lastThu 24:00 0 -
2267  {
2268  2010 /*fromYear*/,
2269  2010 /*toYear*/,
2270  9 /*inMonth*/,
2271  4 /*onDayOfWeek*/,
2272  0 /*onDayOfMonth*/,
2273  96 /*atTimeCode*/,
2274  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2275  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
2276  '-' /*letter*/,
2277  },
2278  // Rule Egypt 2014 only - May 15 24:00 1:00 S
2279  {
2280  2014 /*fromYear*/,
2281  2014 /*toYear*/,
2282  5 /*inMonth*/,
2283  0 /*onDayOfWeek*/,
2284  15 /*onDayOfMonth*/,
2285  96 /*atTimeCode*/,
2286  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2287  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
2288  'S' /*letter*/,
2289  },
2290  // Rule Egypt 2014 only - Jun 26 24:00 0 -
2291  {
2292  2014 /*fromYear*/,
2293  2014 /*toYear*/,
2294  6 /*inMonth*/,
2295  0 /*onDayOfWeek*/,
2296  26 /*onDayOfMonth*/,
2297  96 /*atTimeCode*/,
2298  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2299  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
2300  '-' /*letter*/,
2301  },
2302  // Rule Egypt 2014 only - Jul 31 24:00 1:00 S
2303  {
2304  2014 /*fromYear*/,
2305  2014 /*toYear*/,
2306  7 /*inMonth*/,
2307  0 /*onDayOfWeek*/,
2308  31 /*onDayOfMonth*/,
2309  96 /*atTimeCode*/,
2310  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2311  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
2312  'S' /*letter*/,
2313  },
2314  // Rule Egypt 2014 only - Sep lastThu 24:00 0 -
2315  {
2316  2014 /*fromYear*/,
2317  2014 /*toYear*/,
2318  9 /*inMonth*/,
2319  4 /*onDayOfWeek*/,
2320  0 /*onDayOfMonth*/,
2321  96 /*atTimeCode*/,
2322  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2323  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
2324  '-' /*letter*/,
2325  },
2326 
2327 };
2328 
2329 
2330 
2331 const extended::ZonePolicy kZonePolicyEgypt ACE_TIME_PROGMEM = {
2332  kZoneRulesEgypt /*rules*/,
2333  nullptr /*letters*/,
2334  14 /*numRules*/,
2335  0 /*numLetters*/,
2336 };
2337 
2338 //---------------------------------------------------------------------------
2339 // Policy name: Eire
2340 // Rules: 3
2341 // Memory (8-bit): 39
2342 // Memory (32-bit): 48
2343 //---------------------------------------------------------------------------
2344 
2345 static const extended::ZoneRule kZoneRulesEire[] ACE_TIME_PROGMEM = {
2346  // Rule Eire 1981 max - Mar lastSun 1:00u 0 -
2347  {
2348  1981 /*fromYear*/,
2349  9999 /*toYear*/,
2350  3 /*inMonth*/,
2351  7 /*onDayOfWeek*/,
2352  0 /*onDayOfMonth*/,
2353  4 /*atTimeCode*/,
2354  32 /*atTimeModifier (kSuffixU + minute=0)*/,
2355  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
2356  '-' /*letter*/,
2357  },
2358  // Rule Eire 1990 1995 - Oct Sun>=22 1:00u -1:00 -
2359  {
2360  1990 /*fromYear*/,
2361  1995 /*toYear*/,
2362  10 /*inMonth*/,
2363  7 /*onDayOfWeek*/,
2364  22 /*onDayOfMonth*/,
2365  4 /*atTimeCode*/,
2366  32 /*atTimeModifier (kSuffixU + minute=0)*/,
2367  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
2368  '-' /*letter*/,
2369  },
2370  // Rule Eire 1996 max - Oct lastSun 1:00u -1:00 -
2371  {
2372  1996 /*fromYear*/,
2373  9999 /*toYear*/,
2374  10 /*inMonth*/,
2375  7 /*onDayOfWeek*/,
2376  0 /*onDayOfMonth*/,
2377  4 /*atTimeCode*/,
2378  32 /*atTimeModifier (kSuffixU + minute=0)*/,
2379  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
2380  '-' /*letter*/,
2381  },
2382 
2383 };
2384 
2385 
2386 
2387 const extended::ZonePolicy kZonePolicyEire ACE_TIME_PROGMEM = {
2388  kZoneRulesEire /*rules*/,
2389  nullptr /*letters*/,
2390  3 /*numRules*/,
2391  0 /*numLetters*/,
2392 };
2393 
2394 //---------------------------------------------------------------------------
2395 // Policy name: Falk
2396 // Rules: 5
2397 // Memory (8-bit): 61
2398 // Memory (32-bit): 72
2399 //---------------------------------------------------------------------------
2400 
2401 static const extended::ZoneRule kZoneRulesFalk[] ACE_TIME_PROGMEM = {
2402  // Rule Falk 1984 1985 - Apr lastSun 0:00 0 -
2403  {
2404  1984 /*fromYear*/,
2405  1985 /*toYear*/,
2406  4 /*inMonth*/,
2407  7 /*onDayOfWeek*/,
2408  0 /*onDayOfMonth*/,
2409  0 /*atTimeCode*/,
2410  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2411  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
2412  '-' /*letter*/,
2413  },
2414  // Rule Falk 1985 2000 - Sep Sun>=9 0:00 1:00 -
2415  {
2416  1985 /*fromYear*/,
2417  2000 /*toYear*/,
2418  9 /*inMonth*/,
2419  7 /*onDayOfWeek*/,
2420  9 /*onDayOfMonth*/,
2421  0 /*atTimeCode*/,
2422  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2423  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
2424  '-' /*letter*/,
2425  },
2426  // Rule Falk 1986 2000 - Apr Sun>=16 0:00 0 -
2427  {
2428  1986 /*fromYear*/,
2429  2000 /*toYear*/,
2430  4 /*inMonth*/,
2431  7 /*onDayOfWeek*/,
2432  16 /*onDayOfMonth*/,
2433  0 /*atTimeCode*/,
2434  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2435  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
2436  '-' /*letter*/,
2437  },
2438  // Rule Falk 2001 2010 - Apr Sun>=15 2:00 0 -
2439  {
2440  2001 /*fromYear*/,
2441  2010 /*toYear*/,
2442  4 /*inMonth*/,
2443  7 /*onDayOfWeek*/,
2444  15 /*onDayOfMonth*/,
2445  8 /*atTimeCode*/,
2446  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2447  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
2448  '-' /*letter*/,
2449  },
2450  // Rule Falk 2001 2010 - Sep Sun>=1 2:00 1:00 -
2451  {
2452  2001 /*fromYear*/,
2453  2010 /*toYear*/,
2454  9 /*inMonth*/,
2455  7 /*onDayOfWeek*/,
2456  1 /*onDayOfMonth*/,
2457  8 /*atTimeCode*/,
2458  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2459  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
2460  '-' /*letter*/,
2461  },
2462 
2463 };
2464 
2465 
2466 
2467 const extended::ZonePolicy kZonePolicyFalk ACE_TIME_PROGMEM = {
2468  kZoneRulesFalk /*rules*/,
2469  nullptr /*letters*/,
2470  5 /*numRules*/,
2471  0 /*numLetters*/,
2472 };
2473 
2474 //---------------------------------------------------------------------------
2475 // Policy name: Fiji
2476 // Rules: 12
2477 // Memory (8-bit): 138
2478 // Memory (32-bit): 156
2479 //---------------------------------------------------------------------------
2480 
2481 static const extended::ZoneRule kZoneRulesFiji[] ACE_TIME_PROGMEM = {
2482  // Rule Fiji 1998 1999 - Nov Sun>=1 2:00 1:00 -
2483  {
2484  1998 /*fromYear*/,
2485  1999 /*toYear*/,
2486  11 /*inMonth*/,
2487  7 /*onDayOfWeek*/,
2488  1 /*onDayOfMonth*/,
2489  8 /*atTimeCode*/,
2490  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2491  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
2492  '-' /*letter*/,
2493  },
2494  // Rule Fiji 1999 2000 - Feb lastSun 3:00 0 -
2495  {
2496  1999 /*fromYear*/,
2497  2000 /*toYear*/,
2498  2 /*inMonth*/,
2499  7 /*onDayOfWeek*/,
2500  0 /*onDayOfMonth*/,
2501  12 /*atTimeCode*/,
2502  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2503  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
2504  '-' /*letter*/,
2505  },
2506  // Rule Fiji 2009 only - Nov 29 2:00 1:00 -
2507  {
2508  2009 /*fromYear*/,
2509  2009 /*toYear*/,
2510  11 /*inMonth*/,
2511  0 /*onDayOfWeek*/,
2512  29 /*onDayOfMonth*/,
2513  8 /*atTimeCode*/,
2514  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2515  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
2516  '-' /*letter*/,
2517  },
2518  // Rule Fiji 2010 only - Mar lastSun 3:00 0 -
2519  {
2520  2010 /*fromYear*/,
2521  2010 /*toYear*/,
2522  3 /*inMonth*/,
2523  7 /*onDayOfWeek*/,
2524  0 /*onDayOfMonth*/,
2525  12 /*atTimeCode*/,
2526  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2527  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
2528  '-' /*letter*/,
2529  },
2530  // Rule Fiji 2010 2013 - Oct Sun>=21 2:00 1:00 -
2531  {
2532  2010 /*fromYear*/,
2533  2013 /*toYear*/,
2534  10 /*inMonth*/,
2535  7 /*onDayOfWeek*/,
2536  21 /*onDayOfMonth*/,
2537  8 /*atTimeCode*/,
2538  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2539  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
2540  '-' /*letter*/,
2541  },
2542  // Rule Fiji 2011 only - Mar Sun>=1 3:00 0 -
2543  {
2544  2011 /*fromYear*/,
2545  2011 /*toYear*/,
2546  3 /*inMonth*/,
2547  7 /*onDayOfWeek*/,
2548  1 /*onDayOfMonth*/,
2549  12 /*atTimeCode*/,
2550  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2551  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
2552  '-' /*letter*/,
2553  },
2554  // Rule Fiji 2012 2013 - Jan Sun>=18 3:00 0 -
2555  {
2556  2012 /*fromYear*/,
2557  2013 /*toYear*/,
2558  1 /*inMonth*/,
2559  7 /*onDayOfWeek*/,
2560  18 /*onDayOfMonth*/,
2561  12 /*atTimeCode*/,
2562  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2563  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
2564  '-' /*letter*/,
2565  },
2566  // Rule Fiji 2014 only - Jan Sun>=18 2:00 0 -
2567  {
2568  2014 /*fromYear*/,
2569  2014 /*toYear*/,
2570  1 /*inMonth*/,
2571  7 /*onDayOfWeek*/,
2572  18 /*onDayOfMonth*/,
2573  8 /*atTimeCode*/,
2574  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2575  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
2576  '-' /*letter*/,
2577  },
2578  // Rule Fiji 2014 2018 - Nov Sun>=1 2:00 1:00 -
2579  {
2580  2014 /*fromYear*/,
2581  2018 /*toYear*/,
2582  11 /*inMonth*/,
2583  7 /*onDayOfWeek*/,
2584  1 /*onDayOfMonth*/,
2585  8 /*atTimeCode*/,
2586  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2587  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
2588  '-' /*letter*/,
2589  },
2590  // Rule Fiji 2015 2021 - Jan Sun>=12 3:00 0 -
2591  {
2592  2015 /*fromYear*/,
2593  2021 /*toYear*/,
2594  1 /*inMonth*/,
2595  7 /*onDayOfWeek*/,
2596  12 /*onDayOfMonth*/,
2597  12 /*atTimeCode*/,
2598  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2599  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
2600  '-' /*letter*/,
2601  },
2602  // Rule Fiji 2019 only - Nov Sun>=8 2:00 1:00 -
2603  {
2604  2019 /*fromYear*/,
2605  2019 /*toYear*/,
2606  11 /*inMonth*/,
2607  7 /*onDayOfWeek*/,
2608  8 /*onDayOfMonth*/,
2609  8 /*atTimeCode*/,
2610  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2611  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
2612  '-' /*letter*/,
2613  },
2614  // Rule Fiji 2020 only - Dec 20 2:00 1:00 -
2615  {
2616  2020 /*fromYear*/,
2617  2020 /*toYear*/,
2618  12 /*inMonth*/,
2619  0 /*onDayOfWeek*/,
2620  20 /*onDayOfMonth*/,
2621  8 /*atTimeCode*/,
2622  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2623  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
2624  '-' /*letter*/,
2625  },
2626 
2627 };
2628 
2629 
2630 
2631 const extended::ZonePolicy kZonePolicyFiji ACE_TIME_PROGMEM = {
2632  kZoneRulesFiji /*rules*/,
2633  nullptr /*letters*/,
2634  12 /*numRules*/,
2635  0 /*numLetters*/,
2636 };
2637 
2638 //---------------------------------------------------------------------------
2639 // Policy name: Guam
2640 // Rules: 1
2641 // Memory (8-bit): 17
2642 // Memory (32-bit): 24
2643 //---------------------------------------------------------------------------
2644 
2645 static const extended::ZoneRule kZoneRulesGuam[] ACE_TIME_PROGMEM = {
2646  // Rule Guam 1977 only - Aug 28 2:00 0 S
2647  {
2648  1977 /*fromYear*/,
2649  1977 /*toYear*/,
2650  8 /*inMonth*/,
2651  0 /*onDayOfWeek*/,
2652  28 /*onDayOfMonth*/,
2653  8 /*atTimeCode*/,
2654  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2655  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
2656  'S' /*letter*/,
2657  },
2658 
2659 };
2660 
2661 
2662 
2663 const extended::ZonePolicy kZonePolicyGuam ACE_TIME_PROGMEM = {
2664  kZoneRulesGuam /*rules*/,
2665  nullptr /*letters*/,
2666  1 /*numRules*/,
2667  0 /*numLetters*/,
2668 };
2669 
2670 //---------------------------------------------------------------------------
2671 // Policy name: Guat
2672 // Rules: 3
2673 // Memory (8-bit): 39
2674 // Memory (32-bit): 48
2675 //---------------------------------------------------------------------------
2676 
2677 static const extended::ZoneRule kZoneRulesGuat[] ACE_TIME_PROGMEM = {
2678  // Rule Guat 1991 only - Sep 7 0:00 0 S
2679  {
2680  1991 /*fromYear*/,
2681  1991 /*toYear*/,
2682  9 /*inMonth*/,
2683  0 /*onDayOfWeek*/,
2684  7 /*onDayOfMonth*/,
2685  0 /*atTimeCode*/,
2686  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2687  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
2688  'S' /*letter*/,
2689  },
2690  // Rule Guat 2006 only - Apr 30 0:00 1:00 D
2691  {
2692  2006 /*fromYear*/,
2693  2006 /*toYear*/,
2694  4 /*inMonth*/,
2695  0 /*onDayOfWeek*/,
2696  30 /*onDayOfMonth*/,
2697  0 /*atTimeCode*/,
2698  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2699  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
2700  'D' /*letter*/,
2701  },
2702  // Rule Guat 2006 only - Oct 1 0:00 0 S
2703  {
2704  2006 /*fromYear*/,
2705  2006 /*toYear*/,
2706  10 /*inMonth*/,
2707  0 /*onDayOfWeek*/,
2708  1 /*onDayOfMonth*/,
2709  0 /*atTimeCode*/,
2710  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2711  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
2712  'S' /*letter*/,
2713  },
2714 
2715 };
2716 
2717 
2718 
2719 const extended::ZonePolicy kZonePolicyGuat ACE_TIME_PROGMEM = {
2720  kZoneRulesGuat /*rules*/,
2721  nullptr /*letters*/,
2722  3 /*numRules*/,
2723  0 /*numLetters*/,
2724 };
2725 
2726 //---------------------------------------------------------------------------
2727 // Policy name: HK
2728 // Rules: 1
2729 // Memory (8-bit): 17
2730 // Memory (32-bit): 24
2731 //---------------------------------------------------------------------------
2732 
2733 static const extended::ZoneRule kZoneRulesHK[] ACE_TIME_PROGMEM = {
2734  // Rule HK 1979 only - Oct 21 3:30 0 -
2735  {
2736  1979 /*fromYear*/,
2737  1979 /*toYear*/,
2738  10 /*inMonth*/,
2739  0 /*onDayOfWeek*/,
2740  21 /*onDayOfMonth*/,
2741  14 /*atTimeCode*/,
2742  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2743  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
2744  '-' /*letter*/,
2745  },
2746 
2747 };
2748 
2749 
2750 
2751 const extended::ZonePolicy kZonePolicyHK ACE_TIME_PROGMEM = {
2752  kZoneRulesHK /*rules*/,
2753  nullptr /*letters*/,
2754  1 /*numRules*/,
2755  0 /*numLetters*/,
2756 };
2757 
2758 //---------------------------------------------------------------------------
2759 // Policy name: Haiti
2760 // Rules: 7
2761 // Memory (8-bit): 83
2762 // Memory (32-bit): 96
2763 //---------------------------------------------------------------------------
2764 
2765 static const extended::ZoneRule kZoneRulesHaiti[] ACE_TIME_PROGMEM = {
2766  // Rule Haiti 1988 1997 - Oct lastSun 1:00s 0 S
2767  {
2768  1988 /*fromYear*/,
2769  1997 /*toYear*/,
2770  10 /*inMonth*/,
2771  7 /*onDayOfWeek*/,
2772  0 /*onDayOfMonth*/,
2773  4 /*atTimeCode*/,
2774  16 /*atTimeModifier (kSuffixS + minute=0)*/,
2775  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
2776  'S' /*letter*/,
2777  },
2778  // Rule Haiti 2005 2006 - Apr Sun>=1 0:00 1:00 D
2779  {
2780  2005 /*fromYear*/,
2781  2006 /*toYear*/,
2782  4 /*inMonth*/,
2783  7 /*onDayOfWeek*/,
2784  1 /*onDayOfMonth*/,
2785  0 /*atTimeCode*/,
2786  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2787  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
2788  'D' /*letter*/,
2789  },
2790  // Rule Haiti 2005 2006 - Oct lastSun 0:00 0 S
2791  {
2792  2005 /*fromYear*/,
2793  2006 /*toYear*/,
2794  10 /*inMonth*/,
2795  7 /*onDayOfWeek*/,
2796  0 /*onDayOfMonth*/,
2797  0 /*atTimeCode*/,
2798  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2799  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
2800  'S' /*letter*/,
2801  },
2802  // Rule Haiti 2012 2015 - Mar Sun>=8 2:00 1:00 D
2803  {
2804  2012 /*fromYear*/,
2805  2015 /*toYear*/,
2806  3 /*inMonth*/,
2807  7 /*onDayOfWeek*/,
2808  8 /*onDayOfMonth*/,
2809  8 /*atTimeCode*/,
2810  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2811  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
2812  'D' /*letter*/,
2813  },
2814  // Rule Haiti 2012 2015 - Nov Sun>=1 2:00 0 S
2815  {
2816  2012 /*fromYear*/,
2817  2015 /*toYear*/,
2818  11 /*inMonth*/,
2819  7 /*onDayOfWeek*/,
2820  1 /*onDayOfMonth*/,
2821  8 /*atTimeCode*/,
2822  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2823  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
2824  'S' /*letter*/,
2825  },
2826  // Rule Haiti 2017 max - Mar Sun>=8 2:00 1:00 D
2827  {
2828  2017 /*fromYear*/,
2829  9999 /*toYear*/,
2830  3 /*inMonth*/,
2831  7 /*onDayOfWeek*/,
2832  8 /*onDayOfMonth*/,
2833  8 /*atTimeCode*/,
2834  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2835  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
2836  'D' /*letter*/,
2837  },
2838  // Rule Haiti 2017 max - Nov Sun>=1 2:00 0 S
2839  {
2840  2017 /*fromYear*/,
2841  9999 /*toYear*/,
2842  11 /*inMonth*/,
2843  7 /*onDayOfWeek*/,
2844  1 /*onDayOfMonth*/,
2845  8 /*atTimeCode*/,
2846  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2847  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
2848  'S' /*letter*/,
2849  },
2850 
2851 };
2852 
2853 
2854 
2855 const extended::ZonePolicy kZonePolicyHaiti ACE_TIME_PROGMEM = {
2856  kZoneRulesHaiti /*rules*/,
2857  nullptr /*letters*/,
2858  7 /*numRules*/,
2859  0 /*numLetters*/,
2860 };
2861 
2862 //---------------------------------------------------------------------------
2863 // Policy name: Holiday
2864 // Rules: 1
2865 // Memory (8-bit): 17
2866 // Memory (32-bit): 24
2867 //---------------------------------------------------------------------------
2868 
2869 static const extended::ZoneRule kZoneRulesHoliday[] ACE_TIME_PROGMEM = {
2870  // Rule Holiday 1993 1994 - Mar Sun>=1 2:00s 0 S
2871  {
2872  1993 /*fromYear*/,
2873  1994 /*toYear*/,
2874  3 /*inMonth*/,
2875  7 /*onDayOfWeek*/,
2876  1 /*onDayOfMonth*/,
2877  8 /*atTimeCode*/,
2878  16 /*atTimeModifier (kSuffixS + minute=0)*/,
2879  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
2880  'S' /*letter*/,
2881  },
2882 
2883 };
2884 
2885 
2886 
2887 const extended::ZonePolicy kZonePolicyHoliday ACE_TIME_PROGMEM = {
2888  kZoneRulesHoliday /*rules*/,
2889  nullptr /*letters*/,
2890  1 /*numRules*/,
2891  0 /*numLetters*/,
2892 };
2893 
2894 //---------------------------------------------------------------------------
2895 // Policy name: Hond
2896 // Rules: 3
2897 // Memory (8-bit): 39
2898 // Memory (32-bit): 48
2899 //---------------------------------------------------------------------------
2900 
2901 static const extended::ZoneRule kZoneRulesHond[] ACE_TIME_PROGMEM = {
2902  // Rule Hond 1987 1988 - Sep lastSun 0:00 0 S
2903  {
2904  1987 /*fromYear*/,
2905  1988 /*toYear*/,
2906  9 /*inMonth*/,
2907  7 /*onDayOfWeek*/,
2908  0 /*onDayOfMonth*/,
2909  0 /*atTimeCode*/,
2910  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2911  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
2912  'S' /*letter*/,
2913  },
2914  // Rule Hond 2006 only - May Sun>=1 0:00 1:00 D
2915  {
2916  2006 /*fromYear*/,
2917  2006 /*toYear*/,
2918  5 /*inMonth*/,
2919  7 /*onDayOfWeek*/,
2920  1 /*onDayOfMonth*/,
2921  0 /*atTimeCode*/,
2922  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2923  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
2924  'D' /*letter*/,
2925  },
2926  // Rule Hond 2006 only - Aug Mon>=1 0:00 0 S
2927  {
2928  2006 /*fromYear*/,
2929  2006 /*toYear*/,
2930  8 /*inMonth*/,
2931  1 /*onDayOfWeek*/,
2932  1 /*onDayOfMonth*/,
2933  0 /*atTimeCode*/,
2934  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2935  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
2936  'S' /*letter*/,
2937  },
2938 
2939 };
2940 
2941 
2942 
2943 const extended::ZonePolicy kZonePolicyHond ACE_TIME_PROGMEM = {
2944  kZoneRulesHond /*rules*/,
2945  nullptr /*letters*/,
2946  3 /*numRules*/,
2947  0 /*numLetters*/,
2948 };
2949 
2950 //---------------------------------------------------------------------------
2951 // Policy name: Iran
2952 // Rules: 27
2953 // Memory (8-bit): 303
2954 // Memory (32-bit): 336
2955 //---------------------------------------------------------------------------
2956 
2957 static const extended::ZoneRule kZoneRulesIran[] ACE_TIME_PROGMEM = {
2958  // Rule Iran 1996 only - Sep 20 24:00 0 -
2959  {
2960  1996 /*fromYear*/,
2961  1996 /*toYear*/,
2962  9 /*inMonth*/,
2963  0 /*onDayOfWeek*/,
2964  20 /*onDayOfMonth*/,
2965  96 /*atTimeCode*/,
2966  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2967  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
2968  '-' /*letter*/,
2969  },
2970  // Rule Iran 1997 1999 - Mar 21 24:00 1:00 -
2971  {
2972  1997 /*fromYear*/,
2973  1999 /*toYear*/,
2974  3 /*inMonth*/,
2975  0 /*onDayOfWeek*/,
2976  21 /*onDayOfMonth*/,
2977  96 /*atTimeCode*/,
2978  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2979  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
2980  '-' /*letter*/,
2981  },
2982  // Rule Iran 1997 1999 - Sep 21 24:00 0 -
2983  {
2984  1997 /*fromYear*/,
2985  1999 /*toYear*/,
2986  9 /*inMonth*/,
2987  0 /*onDayOfWeek*/,
2988  21 /*onDayOfMonth*/,
2989  96 /*atTimeCode*/,
2990  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2991  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
2992  '-' /*letter*/,
2993  },
2994  // Rule Iran 2000 only - Mar 20 24:00 1:00 -
2995  {
2996  2000 /*fromYear*/,
2997  2000 /*toYear*/,
2998  3 /*inMonth*/,
2999  0 /*onDayOfWeek*/,
3000  20 /*onDayOfMonth*/,
3001  96 /*atTimeCode*/,
3002  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3003  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
3004  '-' /*letter*/,
3005  },
3006  // Rule Iran 2000 only - Sep 20 24:00 0 -
3007  {
3008  2000 /*fromYear*/,
3009  2000 /*toYear*/,
3010  9 /*inMonth*/,
3011  0 /*onDayOfWeek*/,
3012  20 /*onDayOfMonth*/,
3013  96 /*atTimeCode*/,
3014  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3015  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
3016  '-' /*letter*/,
3017  },
3018  // Rule Iran 2001 2003 - Mar 21 24:00 1:00 -
3019  {
3020  2001 /*fromYear*/,
3021  2003 /*toYear*/,
3022  3 /*inMonth*/,
3023  0 /*onDayOfWeek*/,
3024  21 /*onDayOfMonth*/,
3025  96 /*atTimeCode*/,
3026  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3027  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
3028  '-' /*letter*/,
3029  },
3030  // Rule Iran 2001 2003 - Sep 21 24:00 0 -
3031  {
3032  2001 /*fromYear*/,
3033  2003 /*toYear*/,
3034  9 /*inMonth*/,
3035  0 /*onDayOfWeek*/,
3036  21 /*onDayOfMonth*/,
3037  96 /*atTimeCode*/,
3038  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3039  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
3040  '-' /*letter*/,
3041  },
3042  // Rule Iran 2004 only - Mar 20 24:00 1:00 -
3043  {
3044  2004 /*fromYear*/,
3045  2004 /*toYear*/,
3046  3 /*inMonth*/,
3047  0 /*onDayOfWeek*/,
3048  20 /*onDayOfMonth*/,
3049  96 /*atTimeCode*/,
3050  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3051  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
3052  '-' /*letter*/,
3053  },
3054  // Rule Iran 2004 only - Sep 20 24:00 0 -
3055  {
3056  2004 /*fromYear*/,
3057  2004 /*toYear*/,
3058  9 /*inMonth*/,
3059  0 /*onDayOfWeek*/,
3060  20 /*onDayOfMonth*/,
3061  96 /*atTimeCode*/,
3062  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3063  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
3064  '-' /*letter*/,
3065  },
3066  // Rule Iran 2005 only - Mar 21 24:00 1:00 -
3067  {
3068  2005 /*fromYear*/,
3069  2005 /*toYear*/,
3070  3 /*inMonth*/,
3071  0 /*onDayOfWeek*/,
3072  21 /*onDayOfMonth*/,
3073  96 /*atTimeCode*/,
3074  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3075  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
3076  '-' /*letter*/,
3077  },
3078  // Rule Iran 2005 only - Sep 21 24:00 0 -
3079  {
3080  2005 /*fromYear*/,
3081  2005 /*toYear*/,
3082  9 /*inMonth*/,
3083  0 /*onDayOfWeek*/,
3084  21 /*onDayOfMonth*/,
3085  96 /*atTimeCode*/,
3086  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3087  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
3088  '-' /*letter*/,
3089  },
3090  // Rule Iran 2008 only - Mar 20 24:00 1:00 -
3091  {
3092  2008 /*fromYear*/,
3093  2008 /*toYear*/,
3094  3 /*inMonth*/,
3095  0 /*onDayOfWeek*/,
3096  20 /*onDayOfMonth*/,
3097  96 /*atTimeCode*/,
3098  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3099  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
3100  '-' /*letter*/,
3101  },
3102  // Rule Iran 2008 only - Sep 20 24:00 0 -
3103  {
3104  2008 /*fromYear*/,
3105  2008 /*toYear*/,
3106  9 /*inMonth*/,
3107  0 /*onDayOfWeek*/,
3108  20 /*onDayOfMonth*/,
3109  96 /*atTimeCode*/,
3110  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3111  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
3112  '-' /*letter*/,
3113  },
3114  // Rule Iran 2009 2011 - Mar 21 24:00 1:00 -
3115  {
3116  2009 /*fromYear*/,
3117  2011 /*toYear*/,
3118  3 /*inMonth*/,
3119  0 /*onDayOfWeek*/,
3120  21 /*onDayOfMonth*/,
3121  96 /*atTimeCode*/,
3122  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3123  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
3124  '-' /*letter*/,
3125  },
3126  // Rule Iran 2009 2011 - Sep 21 24:00 0 -
3127  {
3128  2009 /*fromYear*/,
3129  2011 /*toYear*/,
3130  9 /*inMonth*/,
3131  0 /*onDayOfWeek*/,
3132  21 /*onDayOfMonth*/,
3133  96 /*atTimeCode*/,
3134  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3135  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
3136  '-' /*letter*/,
3137  },
3138  // Rule Iran 2012 only - Mar 20 24:00 1:00 -
3139  {
3140  2012 /*fromYear*/,
3141  2012 /*toYear*/,
3142  3 /*inMonth*/,
3143  0 /*onDayOfWeek*/,
3144  20 /*onDayOfMonth*/,
3145  96 /*atTimeCode*/,
3146  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3147  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
3148  '-' /*letter*/,
3149  },
3150  // Rule Iran 2012 only - Sep 20 24:00 0 -
3151  {
3152  2012 /*fromYear*/,
3153  2012 /*toYear*/,
3154  9 /*inMonth*/,
3155  0 /*onDayOfWeek*/,
3156  20 /*onDayOfMonth*/,
3157  96 /*atTimeCode*/,
3158  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3159  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
3160  '-' /*letter*/,
3161  },
3162  // Rule Iran 2013 2015 - Mar 21 24:00 1:00 -
3163  {
3164  2013 /*fromYear*/,
3165  2015 /*toYear*/,
3166  3 /*inMonth*/,
3167  0 /*onDayOfWeek*/,
3168  21 /*onDayOfMonth*/,
3169  96 /*atTimeCode*/,
3170  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3171  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
3172  '-' /*letter*/,
3173  },
3174  // Rule Iran 2013 2015 - Sep 21 24:00 0 -
3175  {
3176  2013 /*fromYear*/,
3177  2015 /*toYear*/,
3178  9 /*inMonth*/,
3179  0 /*onDayOfWeek*/,
3180  21 /*onDayOfMonth*/,
3181  96 /*atTimeCode*/,
3182  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3183  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
3184  '-' /*letter*/,
3185  },
3186  // Rule Iran 2016 only - Mar 20 24:00 1:00 -
3187  {
3188  2016 /*fromYear*/,
3189  2016 /*toYear*/,
3190  3 /*inMonth*/,
3191  0 /*onDayOfWeek*/,
3192  20 /*onDayOfMonth*/,
3193  96 /*atTimeCode*/,
3194  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3195  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
3196  '-' /*letter*/,
3197  },
3198  // Rule Iran 2016 only - Sep 20 24:00 0 -
3199  {
3200  2016 /*fromYear*/,
3201  2016 /*toYear*/,
3202  9 /*inMonth*/,
3203  0 /*onDayOfWeek*/,
3204  20 /*onDayOfMonth*/,
3205  96 /*atTimeCode*/,
3206  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3207  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
3208  '-' /*letter*/,
3209  },
3210  // Rule Iran 2017 2019 - Mar 21 24:00 1:00 -
3211  {
3212  2017 /*fromYear*/,
3213  2019 /*toYear*/,
3214  3 /*inMonth*/,
3215  0 /*onDayOfWeek*/,
3216  21 /*onDayOfMonth*/,
3217  96 /*atTimeCode*/,
3218  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3219  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
3220  '-' /*letter*/,
3221  },
3222  // Rule Iran 2017 2019 - Sep 21 24:00 0 -
3223  {
3224  2017 /*fromYear*/,
3225  2019 /*toYear*/,
3226  9 /*inMonth*/,
3227  0 /*onDayOfWeek*/,
3228  21 /*onDayOfMonth*/,
3229  96 /*atTimeCode*/,
3230  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3231  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
3232  '-' /*letter*/,
3233  },
3234  // Rule Iran 2020 only - Mar 20 24:00 1:00 -
3235  {
3236  2020 /*fromYear*/,
3237  2020 /*toYear*/,
3238  3 /*inMonth*/,
3239  0 /*onDayOfWeek*/,
3240  20 /*onDayOfMonth*/,
3241  96 /*atTimeCode*/,
3242  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3243  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
3244  '-' /*letter*/,
3245  },
3246  // Rule Iran 2020 only - Sep 20 24:00 0 -
3247  {
3248  2020 /*fromYear*/,
3249  2020 /*toYear*/,
3250  9 /*inMonth*/,
3251  0 /*onDayOfWeek*/,
3252  20 /*onDayOfMonth*/,
3253  96 /*atTimeCode*/,
3254  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3255  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
3256  '-' /*letter*/,
3257  },
3258  // Rule Iran 2021 2022 - Mar 21 24:00 1:00 -
3259  {
3260  2021 /*fromYear*/,
3261  2022 /*toYear*/,
3262  3 /*inMonth*/,
3263  0 /*onDayOfWeek*/,
3264  21 /*onDayOfMonth*/,
3265  96 /*atTimeCode*/,
3266  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3267  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
3268  '-' /*letter*/,
3269  },
3270  // Rule Iran 2021 2022 - Sep 21 24:00 0 -
3271  {
3272  2021 /*fromYear*/,
3273  2022 /*toYear*/,
3274  9 /*inMonth*/,
3275  0 /*onDayOfWeek*/,
3276  21 /*onDayOfMonth*/,
3277  96 /*atTimeCode*/,
3278  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3279  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
3280  '-' /*letter*/,
3281  },
3282 
3283 };
3284 
3285 
3286 
3287 const extended::ZonePolicy kZonePolicyIran ACE_TIME_PROGMEM = {
3288  kZoneRulesIran /*rules*/,
3289  nullptr /*letters*/,
3290  27 /*numRules*/,
3291  0 /*numLetters*/,
3292 };
3293 
3294 //---------------------------------------------------------------------------
3295 // Policy name: Iraq
3296 // Rules: 3
3297 // Memory (8-bit): 39
3298 // Memory (32-bit): 48
3299 //---------------------------------------------------------------------------
3300 
3301 static const extended::ZoneRule kZoneRulesIraq[] ACE_TIME_PROGMEM = {
3302  // Rule Iraq 1985 1990 - Sep lastSun 1:00s 0 -
3303  {
3304  1985 /*fromYear*/,
3305  1990 /*toYear*/,
3306  9 /*inMonth*/,
3307  7 /*onDayOfWeek*/,
3308  0 /*onDayOfMonth*/,
3309  4 /*atTimeCode*/,
3310  16 /*atTimeModifier (kSuffixS + minute=0)*/,
3311  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
3312  '-' /*letter*/,
3313  },
3314  // Rule Iraq 1991 2007 - Apr 1 3:00s 1:00 -
3315  {
3316  1991 /*fromYear*/,
3317  2007 /*toYear*/,
3318  4 /*inMonth*/,
3319  0 /*onDayOfWeek*/,
3320  1 /*onDayOfMonth*/,
3321  12 /*atTimeCode*/,
3322  16 /*atTimeModifier (kSuffixS + minute=0)*/,
3323  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
3324  '-' /*letter*/,
3325  },
3326  // Rule Iraq 1991 2007 - Oct 1 3:00s 0 -
3327  {
3328  1991 /*fromYear*/,
3329  2007 /*toYear*/,
3330  10 /*inMonth*/,
3331  0 /*onDayOfWeek*/,
3332  1 /*onDayOfMonth*/,
3333  12 /*atTimeCode*/,
3334  16 /*atTimeModifier (kSuffixS + minute=0)*/,
3335  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
3336  '-' /*letter*/,
3337  },
3338 
3339 };
3340 
3341 
3342 
3343 const extended::ZonePolicy kZonePolicyIraq ACE_TIME_PROGMEM = {
3344  kZoneRulesIraq /*rules*/,
3345  nullptr /*letters*/,
3346  3 /*numRules*/,
3347  0 /*numLetters*/,
3348 };
3349 
3350 //---------------------------------------------------------------------------
3351 // Policy name: Japan
3352 // Rules: 1
3353 // Memory (8-bit): 17
3354 // Memory (32-bit): 24
3355 //---------------------------------------------------------------------------
3356 
3357 static const extended::ZoneRule kZoneRulesJapan[] ACE_TIME_PROGMEM = {
3358  // Rule Japan 1948 1951 - Sep Sat>=8 25:00 0 S
3359  {
3360  1948 /*fromYear*/,
3361  1951 /*toYear*/,
3362  9 /*inMonth*/,
3363  6 /*onDayOfWeek*/,
3364  8 /*onDayOfMonth*/,
3365  100 /*atTimeCode*/,
3366  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3367  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
3368  'S' /*letter*/,
3369  },
3370 
3371 };
3372 
3373 
3374 
3375 const extended::ZonePolicy kZonePolicyJapan ACE_TIME_PROGMEM = {
3376  kZoneRulesJapan /*rules*/,
3377  nullptr /*letters*/,
3378  1 /*numRules*/,
3379  0 /*numLetters*/,
3380 };
3381 
3382 //---------------------------------------------------------------------------
3383 // Policy name: Jordan
3384 // Rules: 13
3385 // Memory (8-bit): 149
3386 // Memory (32-bit): 168
3387 //---------------------------------------------------------------------------
3388 
3389 static const extended::ZoneRule kZoneRulesJordan[] ACE_TIME_PROGMEM = {
3390  // Rule Jordan 1995 1998 - Sep Fri>=15 0:00s 0 -
3391  {
3392  1995 /*fromYear*/,
3393  1998 /*toYear*/,
3394  9 /*inMonth*/,
3395  5 /*onDayOfWeek*/,
3396  15 /*onDayOfMonth*/,
3397  0 /*atTimeCode*/,
3398  16 /*atTimeModifier (kSuffixS + minute=0)*/,
3399  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
3400  '-' /*letter*/,
3401  },
3402  // Rule Jordan 1999 only - Jul 1 0:00s 1:00 S
3403  {
3404  1999 /*fromYear*/,
3405  1999 /*toYear*/,
3406  7 /*inMonth*/,
3407  0 /*onDayOfWeek*/,
3408  1 /*onDayOfMonth*/,
3409  0 /*atTimeCode*/,
3410  16 /*atTimeModifier (kSuffixS + minute=0)*/,
3411  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
3412  'S' /*letter*/,
3413  },
3414  // Rule Jordan 1999 2002 - Sep lastFri 0:00s 0 -
3415  {
3416  1999 /*fromYear*/,
3417  2002 /*toYear*/,
3418  9 /*inMonth*/,
3419  5 /*onDayOfWeek*/,
3420  0 /*onDayOfMonth*/,
3421  0 /*atTimeCode*/,
3422  16 /*atTimeModifier (kSuffixS + minute=0)*/,
3423  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
3424  '-' /*letter*/,
3425  },
3426  // Rule Jordan 2000 2001 - Mar lastThu 0:00s 1:00 S
3427  {
3428  2000 /*fromYear*/,
3429  2001 /*toYear*/,
3430  3 /*inMonth*/,
3431  4 /*onDayOfWeek*/,
3432  0 /*onDayOfMonth*/,
3433  0 /*atTimeCode*/,
3434  16 /*atTimeModifier (kSuffixS + minute=0)*/,
3435  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
3436  'S' /*letter*/,
3437  },
3438  // Rule Jordan 2002 2012 - Mar lastThu 24:00 1:00 S
3439  {
3440  2002 /*fromYear*/,
3441  2012 /*toYear*/,
3442  3 /*inMonth*/,
3443  4 /*onDayOfWeek*/,
3444  0 /*onDayOfMonth*/,
3445  96 /*atTimeCode*/,
3446  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3447  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
3448  'S' /*letter*/,
3449  },
3450  // Rule Jordan 2003 only - Oct 24 0:00s 0 -
3451  {
3452  2003 /*fromYear*/,
3453  2003 /*toYear*/,
3454  10 /*inMonth*/,
3455  0 /*onDayOfWeek*/,
3456  24 /*onDayOfMonth*/,
3457  0 /*atTimeCode*/,
3458  16 /*atTimeModifier (kSuffixS + minute=0)*/,
3459  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
3460  '-' /*letter*/,
3461  },
3462  // Rule Jordan 2004 only - Oct 15 0:00s 0 -
3463  {
3464  2004 /*fromYear*/,
3465  2004 /*toYear*/,
3466  10 /*inMonth*/,
3467  0 /*onDayOfWeek*/,
3468  15 /*onDayOfMonth*/,
3469  0 /*atTimeCode*/,
3470  16 /*atTimeModifier (kSuffixS + minute=0)*/,
3471  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
3472  '-' /*letter*/,
3473  },
3474  // Rule Jordan 2005 only - Sep lastFri 0:00s 0 -
3475  {
3476  2005 /*fromYear*/,
3477  2005 /*toYear*/,
3478  9 /*inMonth*/,
3479  5 /*onDayOfWeek*/,
3480  0 /*onDayOfMonth*/,
3481  0 /*atTimeCode*/,
3482  16 /*atTimeModifier (kSuffixS + minute=0)*/,
3483  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
3484  '-' /*letter*/,
3485  },
3486  // Rule Jordan 2006 2011 - Oct lastFri 0:00s 0 -
3487  {
3488  2006 /*fromYear*/,
3489  2011 /*toYear*/,
3490  10 /*inMonth*/,
3491  5 /*onDayOfWeek*/,
3492  0 /*onDayOfMonth*/,
3493  0 /*atTimeCode*/,
3494  16 /*atTimeModifier (kSuffixS + minute=0)*/,
3495  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
3496  '-' /*letter*/,
3497  },
3498  // Rule Jordan 2013 only - Dec 20 0:00 0 -
3499  {
3500  2013 /*fromYear*/,
3501  2013 /*toYear*/,
3502  12 /*inMonth*/,
3503  0 /*onDayOfWeek*/,
3504  20 /*onDayOfMonth*/,
3505  0 /*atTimeCode*/,
3506  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3507  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
3508  '-' /*letter*/,
3509  },
3510  // Rule Jordan 2014 2021 - Mar lastThu 24:00 1:00 S
3511  {
3512  2014 /*fromYear*/,
3513  2021 /*toYear*/,
3514  3 /*inMonth*/,
3515  4 /*onDayOfWeek*/,
3516  0 /*onDayOfMonth*/,
3517  96 /*atTimeCode*/,
3518  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3519  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
3520  'S' /*letter*/,
3521  },
3522  // Rule Jordan 2014 2022 - Oct lastFri 0:00s 0 -
3523  {
3524  2014 /*fromYear*/,
3525  2022 /*toYear*/,
3526  10 /*inMonth*/,
3527  5 /*onDayOfWeek*/,
3528  0 /*onDayOfMonth*/,
3529  0 /*atTimeCode*/,
3530  16 /*atTimeModifier (kSuffixS + minute=0)*/,
3531  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
3532  '-' /*letter*/,
3533  },
3534  // Rule Jordan 2022 only - Feb lastThu 24:00 1:00 S
3535  {
3536  2022 /*fromYear*/,
3537  2022 /*toYear*/,
3538  2 /*inMonth*/,
3539  4 /*onDayOfWeek*/,
3540  0 /*onDayOfMonth*/,
3541  96 /*atTimeCode*/,
3542  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3543  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
3544  'S' /*letter*/,
3545  },
3546 
3547 };
3548 
3549 
3550 
3551 const extended::ZonePolicy kZonePolicyJordan ACE_TIME_PROGMEM = {
3552  kZoneRulesJordan /*rules*/,
3553  nullptr /*letters*/,
3554  13 /*numRules*/,
3555  0 /*numLetters*/,
3556 };
3557 
3558 //---------------------------------------------------------------------------
3559 // Policy name: Kyrgyz
3560 // Rules: 3
3561 // Memory (8-bit): 39
3562 // Memory (32-bit): 48
3563 //---------------------------------------------------------------------------
3564 
3565 static const extended::ZoneRule kZoneRulesKyrgyz[] ACE_TIME_PROGMEM = {
3566  // Rule Kyrgyz 1992 1996 - Sep lastSun 0:00 0 -
3567  {
3568  1992 /*fromYear*/,
3569  1996 /*toYear*/,
3570  9 /*inMonth*/,
3571  7 /*onDayOfWeek*/,
3572  0 /*onDayOfMonth*/,
3573  0 /*atTimeCode*/,
3574  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3575  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
3576  '-' /*letter*/,
3577  },
3578  // Rule Kyrgyz 1997 2005 - Mar lastSun 2:30 1:00 -
3579  {
3580  1997 /*fromYear*/,
3581  2005 /*toYear*/,
3582  3 /*inMonth*/,
3583  7 /*onDayOfWeek*/,
3584  0 /*onDayOfMonth*/,
3585  10 /*atTimeCode*/,
3586  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3587  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
3588  '-' /*letter*/,
3589  },
3590  // Rule Kyrgyz 1997 2004 - Oct lastSun 2:30 0 -
3591  {
3592  1997 /*fromYear*/,
3593  2004 /*toYear*/,
3594  10 /*inMonth*/,
3595  7 /*onDayOfWeek*/,
3596  0 /*onDayOfMonth*/,
3597  10 /*atTimeCode*/,
3598  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3599  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
3600  '-' /*letter*/,
3601  },
3602 
3603 };
3604 
3605 
3606 
3607 const extended::ZonePolicy kZonePolicyKyrgyz ACE_TIME_PROGMEM = {
3608  kZoneRulesKyrgyz /*rules*/,
3609  nullptr /*letters*/,
3610  3 /*numRules*/,
3611  0 /*numLetters*/,
3612 };
3613 
3614 //---------------------------------------------------------------------------
3615 // Policy name: LH
3616 // Rules: 9
3617 // Memory (8-bit): 105
3618 // Memory (32-bit): 120
3619 //---------------------------------------------------------------------------
3620 
3621 static const extended::ZoneRule kZoneRulesLH[] ACE_TIME_PROGMEM = {
3622  // Rule LH 1987 1999 - Oct lastSun 2:00 0:30 -
3623  {
3624  1987 /*fromYear*/,
3625  1999 /*toYear*/,
3626  10 /*inMonth*/,
3627  7 /*onDayOfWeek*/,
3628  0 /*onDayOfMonth*/,
3629  8 /*atTimeCode*/,
3630  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3631  6 /*deltaCode ((deltaMinutes=30)/15 + 4)*/,
3632  '-' /*letter*/,
3633  },
3634  // Rule LH 1990 1995 - Mar Sun>=1 2:00 0 -
3635  {
3636  1990 /*fromYear*/,
3637  1995 /*toYear*/,
3638  3 /*inMonth*/,
3639  7 /*onDayOfWeek*/,
3640  1 /*onDayOfMonth*/,
3641  8 /*atTimeCode*/,
3642  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3643  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
3644  '-' /*letter*/,
3645  },
3646  // Rule LH 1996 2005 - Mar lastSun 2:00 0 -
3647  {
3648  1996 /*fromYear*/,
3649  2005 /*toYear*/,
3650  3 /*inMonth*/,
3651  7 /*onDayOfWeek*/,
3652  0 /*onDayOfMonth*/,
3653  8 /*atTimeCode*/,
3654  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3655  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
3656  '-' /*letter*/,
3657  },
3658  // Rule LH 2000 only - Aug lastSun 2:00 0:30 -
3659  {
3660  2000 /*fromYear*/,
3661  2000 /*toYear*/,
3662  8 /*inMonth*/,
3663  7 /*onDayOfWeek*/,
3664  0 /*onDayOfMonth*/,
3665  8 /*atTimeCode*/,
3666  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3667  6 /*deltaCode ((deltaMinutes=30)/15 + 4)*/,
3668  '-' /*letter*/,
3669  },
3670  // Rule LH 2001 2007 - Oct lastSun 2:00 0:30 -
3671  {
3672  2001 /*fromYear*/,
3673  2007 /*toYear*/,
3674  10 /*inMonth*/,
3675  7 /*onDayOfWeek*/,
3676  0 /*onDayOfMonth*/,
3677  8 /*atTimeCode*/,
3678  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3679  6 /*deltaCode ((deltaMinutes=30)/15 + 4)*/,
3680  '-' /*letter*/,
3681  },
3682  // Rule LH 2006 only - Apr Sun>=1 2:00 0 -
3683  {
3684  2006 /*fromYear*/,
3685  2006 /*toYear*/,
3686  4 /*inMonth*/,
3687  7 /*onDayOfWeek*/,
3688  1 /*onDayOfMonth*/,
3689  8 /*atTimeCode*/,
3690  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3691  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
3692  '-' /*letter*/,
3693  },
3694  // Rule LH 2007 only - Mar lastSun 2:00 0 -
3695  {
3696  2007 /*fromYear*/,
3697  2007 /*toYear*/,
3698  3 /*inMonth*/,
3699  7 /*onDayOfWeek*/,
3700  0 /*onDayOfMonth*/,
3701  8 /*atTimeCode*/,
3702  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3703  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
3704  '-' /*letter*/,
3705  },
3706  // Rule LH 2008 max - Apr Sun>=1 2:00 0 -
3707  {
3708  2008 /*fromYear*/,
3709  9999 /*toYear*/,
3710  4 /*inMonth*/,
3711  7 /*onDayOfWeek*/,
3712  1 /*onDayOfMonth*/,
3713  8 /*atTimeCode*/,
3714  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3715  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
3716  '-' /*letter*/,
3717  },
3718  // Rule LH 2008 max - Oct Sun>=1 2:00 0:30 -
3719  {
3720  2008 /*fromYear*/,
3721  9999 /*toYear*/,
3722  10 /*inMonth*/,
3723  7 /*onDayOfWeek*/,
3724  1 /*onDayOfMonth*/,
3725  8 /*atTimeCode*/,
3726  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3727  6 /*deltaCode ((deltaMinutes=30)/15 + 4)*/,
3728  '-' /*letter*/,
3729  },
3730 
3731 };
3732 
3733 
3734 
3735 const extended::ZonePolicy kZonePolicyLH ACE_TIME_PROGMEM = {
3736  kZoneRulesLH /*rules*/,
3737  nullptr /*letters*/,
3738  9 /*numRules*/,
3739  0 /*numLetters*/,
3740 };
3741 
3742 //---------------------------------------------------------------------------
3743 // Policy name: Lebanon
3744 // Rules: 3
3745 // Memory (8-bit): 39
3746 // Memory (32-bit): 48
3747 //---------------------------------------------------------------------------
3748 
3749 static const extended::ZoneRule kZoneRulesLebanon[] ACE_TIME_PROGMEM = {
3750  // Rule Lebanon 1993 max - Mar lastSun 0:00 1:00 S
3751  {
3752  1993 /*fromYear*/,
3753  9999 /*toYear*/,
3754  3 /*inMonth*/,
3755  7 /*onDayOfWeek*/,
3756  0 /*onDayOfMonth*/,
3757  0 /*atTimeCode*/,
3758  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3759  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
3760  'S' /*letter*/,
3761  },
3762  // Rule Lebanon 1993 1998 - Sep lastSun 0:00 0 -
3763  {
3764  1993 /*fromYear*/,
3765  1998 /*toYear*/,
3766  9 /*inMonth*/,
3767  7 /*onDayOfWeek*/,
3768  0 /*onDayOfMonth*/,
3769  0 /*atTimeCode*/,
3770  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3771  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
3772  '-' /*letter*/,
3773  },
3774  // Rule Lebanon 1999 max - Oct lastSun 0:00 0 -
3775  {
3776  1999 /*fromYear*/,
3777  9999 /*toYear*/,
3778  10 /*inMonth*/,
3779  7 /*onDayOfWeek*/,
3780  0 /*onDayOfMonth*/,
3781  0 /*atTimeCode*/,
3782  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3783  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
3784  '-' /*letter*/,
3785  },
3786 
3787 };
3788 
3789 
3790 
3791 const extended::ZonePolicy kZonePolicyLebanon ACE_TIME_PROGMEM = {
3792  kZoneRulesLebanon /*rules*/,
3793  nullptr /*letters*/,
3794  3 /*numRules*/,
3795  0 /*numLetters*/,
3796 };
3797 
3798 //---------------------------------------------------------------------------
3799 // Policy name: Libya
3800 // Rules: 3
3801 // Memory (8-bit): 39
3802 // Memory (32-bit): 48
3803 //---------------------------------------------------------------------------
3804 
3805 static const extended::ZoneRule kZoneRulesLibya[] ACE_TIME_PROGMEM = {
3806  // Rule Libya 1997 only - Oct 4 0:00 0 -
3807  {
3808  1997 /*fromYear*/,
3809  1997 /*toYear*/,
3810  10 /*inMonth*/,
3811  0 /*onDayOfWeek*/,
3812  4 /*onDayOfMonth*/,
3813  0 /*atTimeCode*/,
3814  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3815  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
3816  '-' /*letter*/,
3817  },
3818  // Rule Libya 2013 only - Mar lastFri 1:00 1:00 S
3819  {
3820  2013 /*fromYear*/,
3821  2013 /*toYear*/,
3822  3 /*inMonth*/,
3823  5 /*onDayOfWeek*/,
3824  0 /*onDayOfMonth*/,
3825  4 /*atTimeCode*/,
3826  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3827  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
3828  'S' /*letter*/,
3829  },
3830  // Rule Libya 2013 only - Oct lastFri 2:00 0 -
3831  {
3832  2013 /*fromYear*/,
3833  2013 /*toYear*/,
3834  10 /*inMonth*/,
3835  5 /*onDayOfWeek*/,
3836  0 /*onDayOfMonth*/,
3837  8 /*atTimeCode*/,
3838  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3839  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
3840  '-' /*letter*/,
3841  },
3842 
3843 };
3844 
3845 
3846 
3847 const extended::ZonePolicy kZonePolicyLibya ACE_TIME_PROGMEM = {
3848  kZoneRulesLibya /*rules*/,
3849  nullptr /*letters*/,
3850  3 /*numRules*/,
3851  0 /*numLetters*/,
3852 };
3853 
3854 //---------------------------------------------------------------------------
3855 // Policy name: Macau
3856 // Rules: 1
3857 // Memory (8-bit): 17
3858 // Memory (32-bit): 24
3859 //---------------------------------------------------------------------------
3860 
3861 static const extended::ZoneRule kZoneRulesMacau[] ACE_TIME_PROGMEM = {
3862  // Rule Macau 1979 only - Oct Sun>=16 03:30 0 S
3863  {
3864  1979 /*fromYear*/,
3865  1979 /*toYear*/,
3866  10 /*inMonth*/,
3867  7 /*onDayOfWeek*/,
3868  16 /*onDayOfMonth*/,
3869  14 /*atTimeCode*/,
3870  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3871  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
3872  'S' /*letter*/,
3873  },
3874 
3875 };
3876 
3877 
3878 
3879 const extended::ZonePolicy kZonePolicyMacau ACE_TIME_PROGMEM = {
3880  kZoneRulesMacau /*rules*/,
3881  nullptr /*letters*/,
3882  1 /*numRules*/,
3883  0 /*numLetters*/,
3884 };
3885 
3886 //---------------------------------------------------------------------------
3887 // Policy name: Mauritius
3888 // Rules: 3
3889 // Memory (8-bit): 39
3890 // Memory (32-bit): 48
3891 //---------------------------------------------------------------------------
3892 
3893 static const extended::ZoneRule kZoneRulesMauritius[] ACE_TIME_PROGMEM = {
3894  // Rule Mauritius 1983 only - Mar 21 0:00 0 -
3895  {
3896  1983 /*fromYear*/,
3897  1983 /*toYear*/,
3898  3 /*inMonth*/,
3899  0 /*onDayOfWeek*/,
3900  21 /*onDayOfMonth*/,
3901  0 /*atTimeCode*/,
3902  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3903  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
3904  '-' /*letter*/,
3905  },
3906  // Rule Mauritius 2008 only - Oct lastSun 2:00 1:00 -
3907  {
3908  2008 /*fromYear*/,
3909  2008 /*toYear*/,
3910  10 /*inMonth*/,
3911  7 /*onDayOfWeek*/,
3912  0 /*onDayOfMonth*/,
3913  8 /*atTimeCode*/,
3914  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3915  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
3916  '-' /*letter*/,
3917  },
3918  // Rule Mauritius 2009 only - Mar lastSun 2:00 0 -
3919  {
3920  2009 /*fromYear*/,
3921  2009 /*toYear*/,
3922  3 /*inMonth*/,
3923  7 /*onDayOfWeek*/,
3924  0 /*onDayOfMonth*/,
3925  8 /*atTimeCode*/,
3926  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3927  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
3928  '-' /*letter*/,
3929  },
3930 
3931 };
3932 
3933 
3934 
3935 const extended::ZonePolicy kZonePolicyMauritius ACE_TIME_PROGMEM = {
3936  kZoneRulesMauritius /*rules*/,
3937  nullptr /*letters*/,
3938  3 /*numRules*/,
3939  0 /*numLetters*/,
3940 };
3941 
3942 //---------------------------------------------------------------------------
3943 // Policy name: Mexico
3944 // Rules: 7
3945 // Memory (8-bit): 83
3946 // Memory (32-bit): 96
3947 //---------------------------------------------------------------------------
3948 
3949 static const extended::ZoneRule kZoneRulesMexico[] ACE_TIME_PROGMEM = {
3950  // Rule Mexico 1950 only - Jul 30 0:00 0 S
3951  {
3952  1950 /*fromYear*/,
3953  1950 /*toYear*/,
3954  7 /*inMonth*/,
3955  0 /*onDayOfWeek*/,
3956  30 /*onDayOfMonth*/,
3957  0 /*atTimeCode*/,
3958  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3959  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
3960  'S' /*letter*/,
3961  },
3962  // Rule Mexico 1996 2000 - Apr Sun>=1 2:00 1:00 D
3963  {
3964  1996 /*fromYear*/,
3965  2000 /*toYear*/,
3966  4 /*inMonth*/,
3967  7 /*onDayOfWeek*/,
3968  1 /*onDayOfMonth*/,
3969  8 /*atTimeCode*/,
3970  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3971  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
3972  'D' /*letter*/,
3973  },
3974  // Rule Mexico 1996 2000 - Oct lastSun 2:00 0 S
3975  {
3976  1996 /*fromYear*/,
3977  2000 /*toYear*/,
3978  10 /*inMonth*/,
3979  7 /*onDayOfWeek*/,
3980  0 /*onDayOfMonth*/,
3981  8 /*atTimeCode*/,
3982  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3983  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
3984  'S' /*letter*/,
3985  },
3986  // Rule Mexico 2001 only - May Sun>=1 2:00 1:00 D
3987  {
3988  2001 /*fromYear*/,
3989  2001 /*toYear*/,
3990  5 /*inMonth*/,
3991  7 /*onDayOfWeek*/,
3992  1 /*onDayOfMonth*/,
3993  8 /*atTimeCode*/,
3994  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3995  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
3996  'D' /*letter*/,
3997  },
3998  // Rule Mexico 2001 only - Sep lastSun 2:00 0 S
3999  {
4000  2001 /*fromYear*/,
4001  2001 /*toYear*/,
4002  9 /*inMonth*/,
4003  7 /*onDayOfWeek*/,
4004  0 /*onDayOfMonth*/,
4005  8 /*atTimeCode*/,
4006  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4007  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
4008  'S' /*letter*/,
4009  },
4010  // Rule Mexico 2002 2022 - Apr Sun>=1 2:00 1:00 D
4011  {
4012  2002 /*fromYear*/,
4013  2022 /*toYear*/,
4014  4 /*inMonth*/,
4015  7 /*onDayOfWeek*/,
4016  1 /*onDayOfMonth*/,
4017  8 /*atTimeCode*/,
4018  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4019  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
4020  'D' /*letter*/,
4021  },
4022  // Rule Mexico 2002 2022 - Oct lastSun 2:00 0 S
4023  {
4024  2002 /*fromYear*/,
4025  2022 /*toYear*/,
4026  10 /*inMonth*/,
4027  7 /*onDayOfWeek*/,
4028  0 /*onDayOfMonth*/,
4029  8 /*atTimeCode*/,
4030  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4031  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
4032  'S' /*letter*/,
4033  },
4034 
4035 };
4036 
4037 
4038 
4039 const extended::ZonePolicy kZonePolicyMexico ACE_TIME_PROGMEM = {
4040  kZoneRulesMexico /*rules*/,
4041  nullptr /*letters*/,
4042  7 /*numRules*/,
4043  0 /*numLetters*/,
4044 };
4045 
4046 //---------------------------------------------------------------------------
4047 // Policy name: Moldova
4048 // Rules: 2
4049 // Memory (8-bit): 28
4050 // Memory (32-bit): 36
4051 //---------------------------------------------------------------------------
4052 
4053 static const extended::ZoneRule kZoneRulesMoldova[] ACE_TIME_PROGMEM = {
4054  // Rule Moldova 1997 max - Mar lastSun 2:00 1:00 S
4055  {
4056  1997 /*fromYear*/,
4057  9999 /*toYear*/,
4058  3 /*inMonth*/,
4059  7 /*onDayOfWeek*/,
4060  0 /*onDayOfMonth*/,
4061  8 /*atTimeCode*/,
4062  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4063  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
4064  'S' /*letter*/,
4065  },
4066  // Rule Moldova 1997 max - Oct lastSun 3:00 0 -
4067  {
4068  1997 /*fromYear*/,
4069  9999 /*toYear*/,
4070  10 /*inMonth*/,
4071  7 /*onDayOfWeek*/,
4072  0 /*onDayOfMonth*/,
4073  12 /*atTimeCode*/,
4074  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4075  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
4076  '-' /*letter*/,
4077  },
4078 
4079 };
4080 
4081 
4082 
4083 const extended::ZonePolicy kZonePolicyMoldova ACE_TIME_PROGMEM = {
4084  kZoneRulesMoldova /*rules*/,
4085  nullptr /*letters*/,
4086  2 /*numRules*/,
4087  0 /*numLetters*/,
4088 };
4089 
4090 //---------------------------------------------------------------------------
4091 // Policy name: Moncton
4092 // Rules: 3
4093 // Memory (8-bit): 39
4094 // Memory (32-bit): 48
4095 //---------------------------------------------------------------------------
4096 
4097 static const extended::ZoneRule kZoneRulesMoncton[] ACE_TIME_PROGMEM = {
4098  // Rule Moncton 1957 1972 - Oct lastSun 2:00 0 S
4099  {
4100  1957 /*fromYear*/,
4101  1972 /*toYear*/,
4102  10 /*inMonth*/,
4103  7 /*onDayOfWeek*/,
4104  0 /*onDayOfMonth*/,
4105  8 /*atTimeCode*/,
4106  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4107  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
4108  'S' /*letter*/,
4109  },
4110  // Rule Moncton 1993 2006 - Apr Sun>=1 0:01 1:00 D
4111  {
4112  1993 /*fromYear*/,
4113  2006 /*toYear*/,
4114  4 /*inMonth*/,
4115  7 /*onDayOfWeek*/,
4116  1 /*onDayOfMonth*/,
4117  0 /*atTimeCode*/,
4118  1 /*atTimeModifier (kSuffixW + minute=1)*/,
4119  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
4120  'D' /*letter*/,
4121  },
4122  // Rule Moncton 1993 2006 - Oct lastSun 0:01 0 S
4123  {
4124  1993 /*fromYear*/,
4125  2006 /*toYear*/,
4126  10 /*inMonth*/,
4127  7 /*onDayOfWeek*/,
4128  0 /*onDayOfMonth*/,
4129  0 /*atTimeCode*/,
4130  1 /*atTimeModifier (kSuffixW + minute=1)*/,
4131  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
4132  'S' /*letter*/,
4133  },
4134 
4135 };
4136 
4137 
4138 
4139 const extended::ZonePolicy kZonePolicyMoncton ACE_TIME_PROGMEM = {
4140  kZoneRulesMoncton /*rules*/,
4141  nullptr /*letters*/,
4142  3 /*numRules*/,
4143  0 /*numLetters*/,
4144 };
4145 
4146 //---------------------------------------------------------------------------
4147 // Policy name: Mongol
4148 // Rules: 6
4149 // Memory (8-bit): 72
4150 // Memory (32-bit): 84
4151 //---------------------------------------------------------------------------
4152 
4153 static const extended::ZoneRule kZoneRulesMongol[] ACE_TIME_PROGMEM = {
4154  // Rule Mongol 1984 1998 - Sep lastSun 0:00 0 -
4155  {
4156  1984 /*fromYear*/,
4157  1998 /*toYear*/,
4158  9 /*inMonth*/,
4159  7 /*onDayOfWeek*/,
4160  0 /*onDayOfMonth*/,
4161  0 /*atTimeCode*/,
4162  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4163  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
4164  '-' /*letter*/,
4165  },
4166  // Rule Mongol 2001 only - Apr lastSat 2:00 1:00 -
4167  {
4168  2001 /*fromYear*/,
4169  2001 /*toYear*/,
4170  4 /*inMonth*/,
4171  6 /*onDayOfWeek*/,
4172  0 /*onDayOfMonth*/,
4173  8 /*atTimeCode*/,
4174  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4175  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
4176  '-' /*letter*/,
4177  },
4178  // Rule Mongol 2001 2006 - Sep lastSat 2:00 0 -
4179  {
4180  2001 /*fromYear*/,
4181  2006 /*toYear*/,
4182  9 /*inMonth*/,
4183  6 /*onDayOfWeek*/,
4184  0 /*onDayOfMonth*/,
4185  8 /*atTimeCode*/,
4186  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4187  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
4188  '-' /*letter*/,
4189  },
4190  // Rule Mongol 2002 2006 - Mar lastSat 2:00 1:00 -
4191  {
4192  2002 /*fromYear*/,
4193  2006 /*toYear*/,
4194  3 /*inMonth*/,
4195  6 /*onDayOfWeek*/,
4196  0 /*onDayOfMonth*/,
4197  8 /*atTimeCode*/,
4198  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4199  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
4200  '-' /*letter*/,
4201  },
4202  // Rule Mongol 2015 2016 - Mar lastSat 2:00 1:00 -
4203  {
4204  2015 /*fromYear*/,
4205  2016 /*toYear*/,
4206  3 /*inMonth*/,
4207  6 /*onDayOfWeek*/,
4208  0 /*onDayOfMonth*/,
4209  8 /*atTimeCode*/,
4210  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4211  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
4212  '-' /*letter*/,
4213  },
4214  // Rule Mongol 2015 2016 - Sep lastSat 0:00 0 -
4215  {
4216  2015 /*fromYear*/,
4217  2016 /*toYear*/,
4218  9 /*inMonth*/,
4219  6 /*onDayOfWeek*/,
4220  0 /*onDayOfMonth*/,
4221  0 /*atTimeCode*/,
4222  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4223  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
4224  '-' /*letter*/,
4225  },
4226 
4227 };
4228 
4229 
4230 
4231 const extended::ZonePolicy kZonePolicyMongol ACE_TIME_PROGMEM = {
4232  kZoneRulesMongol /*rules*/,
4233  nullptr /*letters*/,
4234  6 /*numRules*/,
4235  0 /*numLetters*/,
4236 };
4237 
4238 //---------------------------------------------------------------------------
4239 // Policy name: Morocco
4240 // Rules: 169
4241 // Memory (8-bit): 1865
4242 // Memory (32-bit): 2040
4243 //---------------------------------------------------------------------------
4244 
4245 static const extended::ZoneRule kZoneRulesMorocco[] ACE_TIME_PROGMEM = {
4246  // Rule Morocco 1978 only - Aug 4 0:00 0 -
4247  {
4248  1978 /*fromYear*/,
4249  1978 /*toYear*/,
4250  8 /*inMonth*/,
4251  0 /*onDayOfWeek*/,
4252  4 /*onDayOfMonth*/,
4253  0 /*atTimeCode*/,
4254  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4255  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
4256  '-' /*letter*/,
4257  },
4258  // Rule Morocco 2008 only - Jun 1 0:00 1:00 -
4259  {
4260  2008 /*fromYear*/,
4261  2008 /*toYear*/,
4262  6 /*inMonth*/,
4263  0 /*onDayOfWeek*/,
4264  1 /*onDayOfMonth*/,
4265  0 /*atTimeCode*/,
4266  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4267  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
4268  '-' /*letter*/,
4269  },
4270  // Rule Morocco 2008 only - Sep 1 0:00 0 -
4271  {
4272  2008 /*fromYear*/,
4273  2008 /*toYear*/,
4274  9 /*inMonth*/,
4275  0 /*onDayOfWeek*/,
4276  1 /*onDayOfMonth*/,
4277  0 /*atTimeCode*/,
4278  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4279  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
4280  '-' /*letter*/,
4281  },
4282  // Rule Morocco 2009 only - Jun 1 0:00 1:00 -
4283  {
4284  2009 /*fromYear*/,
4285  2009 /*toYear*/,
4286  6 /*inMonth*/,
4287  0 /*onDayOfWeek*/,
4288  1 /*onDayOfMonth*/,
4289  0 /*atTimeCode*/,
4290  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4291  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
4292  '-' /*letter*/,
4293  },
4294  // Rule Morocco 2009 only - Aug 21 0:00 0 -
4295  {
4296  2009 /*fromYear*/,
4297  2009 /*toYear*/,
4298  8 /*inMonth*/,
4299  0 /*onDayOfWeek*/,
4300  21 /*onDayOfMonth*/,
4301  0 /*atTimeCode*/,
4302  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4303  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
4304  '-' /*letter*/,
4305  },
4306  // Rule Morocco 2010 only - May 2 0:00 1:00 -
4307  {
4308  2010 /*fromYear*/,
4309  2010 /*toYear*/,
4310  5 /*inMonth*/,
4311  0 /*onDayOfWeek*/,
4312  2 /*onDayOfMonth*/,
4313  0 /*atTimeCode*/,
4314  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4315  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
4316  '-' /*letter*/,
4317  },
4318  // Rule Morocco 2010 only - Aug 8 0:00 0 -
4319  {
4320  2010 /*fromYear*/,
4321  2010 /*toYear*/,
4322  8 /*inMonth*/,
4323  0 /*onDayOfWeek*/,
4324  8 /*onDayOfMonth*/,
4325  0 /*atTimeCode*/,
4326  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4327  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
4328  '-' /*letter*/,
4329  },
4330  // Rule Morocco 2011 only - Apr 3 0:00 1:00 -
4331  {
4332  2011 /*fromYear*/,
4333  2011 /*toYear*/,
4334  4 /*inMonth*/,
4335  0 /*onDayOfWeek*/,
4336  3 /*onDayOfMonth*/,
4337  0 /*atTimeCode*/,
4338  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4339  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
4340  '-' /*letter*/,
4341  },
4342  // Rule Morocco 2011 only - Jul 31 0:00 0 -
4343  {
4344  2011 /*fromYear*/,
4345  2011 /*toYear*/,
4346  7 /*inMonth*/,
4347  0 /*onDayOfWeek*/,
4348  31 /*onDayOfMonth*/,
4349  0 /*atTimeCode*/,
4350  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4351  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
4352  '-' /*letter*/,
4353  },
4354  // Rule Morocco 2012 2013 - Apr lastSun 2:00 1:00 -
4355  {
4356  2012 /*fromYear*/,
4357  2013 /*toYear*/,
4358  4 /*inMonth*/,
4359  7 /*onDayOfWeek*/,
4360  0 /*onDayOfMonth*/,
4361  8 /*atTimeCode*/,
4362  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4363  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
4364  '-' /*letter*/,
4365  },
4366  // Rule Morocco 2012 only - Jul 20 3:00 0 -
4367  {
4368  2012 /*fromYear*/,
4369  2012 /*toYear*/,
4370  7 /*inMonth*/,
4371  0 /*onDayOfWeek*/,
4372  20 /*onDayOfMonth*/,
4373  12 /*atTimeCode*/,
4374  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4375  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
4376  '-' /*letter*/,
4377  },
4378  // Rule Morocco 2012 only - Aug 20 2:00 1:00 -
4379  {
4380  2012 /*fromYear*/,
4381  2012 /*toYear*/,
4382  8 /*inMonth*/,
4383  0 /*onDayOfWeek*/,
4384  20 /*onDayOfMonth*/,
4385  8 /*atTimeCode*/,
4386  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4387  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
4388  '-' /*letter*/,
4389  },
4390  // Rule Morocco 2012 only - Sep 30 3:00 0 -
4391  {
4392  2012 /*fromYear*/,
4393  2012 /*toYear*/,
4394  9 /*inMonth*/,
4395  0 /*onDayOfWeek*/,
4396  30 /*onDayOfMonth*/,
4397  12 /*atTimeCode*/,
4398  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4399  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
4400  '-' /*letter*/,
4401  },
4402  // Rule Morocco 2013 only - Jul 7 3:00 0 -
4403  {
4404  2013 /*fromYear*/,
4405  2013 /*toYear*/,
4406  7 /*inMonth*/,
4407  0 /*onDayOfWeek*/,
4408  7 /*onDayOfMonth*/,
4409  12 /*atTimeCode*/,
4410  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4411  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
4412  '-' /*letter*/,
4413  },
4414  // Rule Morocco 2013 only - Aug 10 2:00 1:00 -
4415  {
4416  2013 /*fromYear*/,
4417  2013 /*toYear*/,
4418  8 /*inMonth*/,
4419  0 /*onDayOfWeek*/,
4420  10 /*onDayOfMonth*/,
4421  8 /*atTimeCode*/,
4422  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4423  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
4424  '-' /*letter*/,
4425  },
4426  // Rule Morocco 2013 2018 - Oct lastSun 3:00 0 -
4427  {
4428  2013 /*fromYear*/,
4429  2018 /*toYear*/,
4430  10 /*inMonth*/,
4431  7 /*onDayOfWeek*/,
4432  0 /*onDayOfMonth*/,
4433  12 /*atTimeCode*/,
4434  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4435  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
4436  '-' /*letter*/,
4437  },
4438  // Rule Morocco 2014 2018 - Mar lastSun 2:00 1:00 -
4439  {
4440  2014 /*fromYear*/,
4441  2018 /*toYear*/,
4442  3 /*inMonth*/,
4443  7 /*onDayOfWeek*/,
4444  0 /*onDayOfMonth*/,
4445  8 /*atTimeCode*/,
4446  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4447  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
4448  '-' /*letter*/,
4449  },
4450  // Rule Morocco 2014 only - Jun 28 3:00 0 -
4451  {
4452  2014 /*fromYear*/,
4453  2014 /*toYear*/,
4454  6 /*inMonth*/,
4455  0 /*onDayOfWeek*/,
4456  28 /*onDayOfMonth*/,
4457  12 /*atTimeCode*/,
4458  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4459  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
4460  '-' /*letter*/,
4461  },
4462  // Rule Morocco 2014 only - Aug 2 2:00 1:00 -
4463  {
4464  2014 /*fromYear*/,
4465  2014 /*toYear*/,
4466  8 /*inMonth*/,
4467  0 /*onDayOfWeek*/,
4468  2 /*onDayOfMonth*/,
4469  8 /*atTimeCode*/,
4470  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4471  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
4472  '-' /*letter*/,
4473  },
4474  // Rule Morocco 2015 only - Jun 14 3:00 0 -
4475  {
4476  2015 /*fromYear*/,
4477  2015 /*toYear*/,
4478  6 /*inMonth*/,
4479  0 /*onDayOfWeek*/,
4480  14 /*onDayOfMonth*/,
4481  12 /*atTimeCode*/,
4482  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4483  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
4484  '-' /*letter*/,
4485  },
4486  // Rule Morocco 2015 only - Jul 19 2:00 1:00 -
4487  {
4488  2015 /*fromYear*/,
4489  2015 /*toYear*/,
4490  7 /*inMonth*/,
4491  0 /*onDayOfWeek*/,
4492  19 /*onDayOfMonth*/,
4493  8 /*atTimeCode*/,
4494  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4495  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
4496  '-' /*letter*/,
4497  },
4498  // Rule Morocco 2016 only - Jun 5 3:00 0 -
4499  {
4500  2016 /*fromYear*/,
4501  2016 /*toYear*/,
4502  6 /*inMonth*/,
4503  0 /*onDayOfWeek*/,
4504  5 /*onDayOfMonth*/,
4505  12 /*atTimeCode*/,
4506  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4507  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
4508  '-' /*letter*/,
4509  },
4510  // Rule Morocco 2016 only - Jul 10 2:00 1:00 -
4511  {
4512  2016 /*fromYear*/,
4513  2016 /*toYear*/,
4514  7 /*inMonth*/,
4515  0 /*onDayOfWeek*/,
4516  10 /*onDayOfMonth*/,
4517  8 /*atTimeCode*/,
4518  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4519  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
4520  '-' /*letter*/,
4521  },
4522  // Rule Morocco 2017 only - May 21 3:00 0 -
4523  {
4524  2017 /*fromYear*/,
4525  2017 /*toYear*/,
4526  5 /*inMonth*/,
4527  0 /*onDayOfWeek*/,
4528  21 /*onDayOfMonth*/,
4529  12 /*atTimeCode*/,
4530  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4531  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
4532  '-' /*letter*/,
4533  },
4534  // Rule Morocco 2017 only - Jul 2 2:00 1:00 -
4535  {
4536  2017 /*fromYear*/,
4537  2017 /*toYear*/,
4538  7 /*inMonth*/,
4539  0 /*onDayOfWeek*/,
4540  2 /*onDayOfMonth*/,
4541  8 /*atTimeCode*/,
4542  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4543  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
4544  '-' /*letter*/,
4545  },
4546  // Rule Morocco 2018 only - May 13 3:00 0 -
4547  {
4548  2018 /*fromYear*/,
4549  2018 /*toYear*/,
4550  5 /*inMonth*/,
4551  0 /*onDayOfWeek*/,
4552  13 /*onDayOfMonth*/,
4553  12 /*atTimeCode*/,
4554  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4555  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
4556  '-' /*letter*/,
4557  },
4558  // Rule Morocco 2018 only - Jun 17 2:00 1:00 -
4559  {
4560  2018 /*fromYear*/,
4561  2018 /*toYear*/,
4562  6 /*inMonth*/,
4563  0 /*onDayOfWeek*/,
4564  17 /*onDayOfMonth*/,
4565  8 /*atTimeCode*/,
4566  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4567  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
4568  '-' /*letter*/,
4569  },
4570  // Rule Morocco 2019 only - May 5 3:00 -1:00 -
4571  {
4572  2019 /*fromYear*/,
4573  2019 /*toYear*/,
4574  5 /*inMonth*/,
4575  0 /*onDayOfWeek*/,
4576  5 /*onDayOfMonth*/,
4577  12 /*atTimeCode*/,
4578  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4579  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
4580  '-' /*letter*/,
4581  },
4582  // Rule Morocco 2019 only - Jun 9 2:00 0 -
4583  {
4584  2019 /*fromYear*/,
4585  2019 /*toYear*/,
4586  6 /*inMonth*/,
4587  0 /*onDayOfWeek*/,
4588  9 /*onDayOfMonth*/,
4589  8 /*atTimeCode*/,
4590  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4591  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
4592  '-' /*letter*/,
4593  },
4594  // Rule Morocco 2020 only - Apr 19 3:00 -1:00 -
4595  {
4596  2020 /*fromYear*/,
4597  2020 /*toYear*/,
4598  4 /*inMonth*/,
4599  0 /*onDayOfWeek*/,
4600  19 /*onDayOfMonth*/,
4601  12 /*atTimeCode*/,
4602  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4603  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
4604  '-' /*letter*/,
4605  },
4606  // Rule Morocco 2020 only - May 31 2:00 0 -
4607  {
4608  2020 /*fromYear*/,
4609  2020 /*toYear*/,
4610  5 /*inMonth*/,
4611  0 /*onDayOfWeek*/,
4612  31 /*onDayOfMonth*/,
4613  8 /*atTimeCode*/,
4614  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4615  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
4616  '-' /*letter*/,
4617  },
4618  // Rule Morocco 2021 only - Apr 11 3:00 -1:00 -
4619  {
4620  2021 /*fromYear*/,
4621  2021 /*toYear*/,
4622  4 /*inMonth*/,
4623  0 /*onDayOfWeek*/,
4624  11 /*onDayOfMonth*/,
4625  12 /*atTimeCode*/,
4626  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4627  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
4628  '-' /*letter*/,
4629  },
4630  // Rule Morocco 2021 only - May 16 2:00 0 -
4631  {
4632  2021 /*fromYear*/,
4633  2021 /*toYear*/,
4634  5 /*inMonth*/,
4635  0 /*onDayOfWeek*/,
4636  16 /*onDayOfMonth*/,
4637  8 /*atTimeCode*/,
4638  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4639  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
4640  '-' /*letter*/,
4641  },
4642  // Rule Morocco 2022 only - Mar 27 3:00 -1:00 -
4643  {
4644  2022 /*fromYear*/,
4645  2022 /*toYear*/,
4646  3 /*inMonth*/,
4647  0 /*onDayOfWeek*/,
4648  27 /*onDayOfMonth*/,
4649  12 /*atTimeCode*/,
4650  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4651  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
4652  '-' /*letter*/,
4653  },
4654  // Rule Morocco 2022 only - May 8 2:00 0 -
4655  {
4656  2022 /*fromYear*/,
4657  2022 /*toYear*/,
4658  5 /*inMonth*/,
4659  0 /*onDayOfWeek*/,
4660  8 /*onDayOfMonth*/,
4661  8 /*atTimeCode*/,
4662  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4663  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
4664  '-' /*letter*/,
4665  },
4666  // Rule Morocco 2023 only - Mar 19 3:00 -1:00 -
4667  {
4668  2023 /*fromYear*/,
4669  2023 /*toYear*/,
4670  3 /*inMonth*/,
4671  0 /*onDayOfWeek*/,
4672  19 /*onDayOfMonth*/,
4673  12 /*atTimeCode*/,
4674  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4675  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
4676  '-' /*letter*/,
4677  },
4678  // Rule Morocco 2023 only - Apr 30 2:00 0 -
4679  {
4680  2023 /*fromYear*/,
4681  2023 /*toYear*/,
4682  4 /*inMonth*/,
4683  0 /*onDayOfWeek*/,
4684  30 /*onDayOfMonth*/,
4685  8 /*atTimeCode*/,
4686  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4687  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
4688  '-' /*letter*/,
4689  },
4690  // Rule Morocco 2024 only - Mar 10 3:00 -1:00 -
4691  {
4692  2024 /*fromYear*/,
4693  2024 /*toYear*/,
4694  3 /*inMonth*/,
4695  0 /*onDayOfWeek*/,
4696  10 /*onDayOfMonth*/,
4697  12 /*atTimeCode*/,
4698  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4699  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
4700  '-' /*letter*/,
4701  },
4702  // Rule Morocco 2024 only - Apr 14 2:00 0 -
4703  {
4704  2024 /*fromYear*/,
4705  2024 /*toYear*/,
4706  4 /*inMonth*/,
4707  0 /*onDayOfWeek*/,
4708  14 /*onDayOfMonth*/,
4709  8 /*atTimeCode*/,
4710  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4711  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
4712  '-' /*letter*/,
4713  },
4714  // Rule Morocco 2025 only - Feb 23 3:00 -1:00 -
4715  {
4716  2025 /*fromYear*/,
4717  2025 /*toYear*/,
4718  2 /*inMonth*/,
4719  0 /*onDayOfWeek*/,
4720  23 /*onDayOfMonth*/,
4721  12 /*atTimeCode*/,
4722  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4723  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
4724  '-' /*letter*/,
4725  },
4726  // Rule Morocco 2025 only - Apr 6 2:00 0 -
4727  {
4728  2025 /*fromYear*/,
4729  2025 /*toYear*/,
4730  4 /*inMonth*/,
4731  0 /*onDayOfWeek*/,
4732  6 /*onDayOfMonth*/,
4733  8 /*atTimeCode*/,
4734  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4735  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
4736  '-' /*letter*/,
4737  },
4738  // Rule Morocco 2026 only - Feb 15 3:00 -1:00 -
4739  {
4740  2026 /*fromYear*/,
4741  2026 /*toYear*/,
4742  2 /*inMonth*/,
4743  0 /*onDayOfWeek*/,
4744  15 /*onDayOfMonth*/,
4745  12 /*atTimeCode*/,
4746  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4747  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
4748  '-' /*letter*/,
4749  },
4750  // Rule Morocco 2026 only - Mar 22 2:00 0 -
4751  {
4752  2026 /*fromYear*/,
4753  2026 /*toYear*/,
4754  3 /*inMonth*/,
4755  0 /*onDayOfWeek*/,
4756  22 /*onDayOfMonth*/,
4757  8 /*atTimeCode*/,
4758  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4759  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
4760  '-' /*letter*/,
4761  },
4762  // Rule Morocco 2027 only - Feb 7 3:00 -1:00 -
4763  {
4764  2027 /*fromYear*/,
4765  2027 /*toYear*/,
4766  2 /*inMonth*/,
4767  0 /*onDayOfWeek*/,
4768  7 /*onDayOfMonth*/,
4769  12 /*atTimeCode*/,
4770  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4771  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
4772  '-' /*letter*/,
4773  },
4774  // Rule Morocco 2027 only - Mar 14 2:00 0 -
4775  {
4776  2027 /*fromYear*/,
4777  2027 /*toYear*/,
4778  3 /*inMonth*/,
4779  0 /*onDayOfWeek*/,
4780  14 /*onDayOfMonth*/,
4781  8 /*atTimeCode*/,
4782  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4783  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
4784  '-' /*letter*/,
4785  },
4786  // Rule Morocco 2028 only - Jan 23 3:00 -1:00 -
4787  {
4788  2028 /*fromYear*/,
4789  2028 /*toYear*/,
4790  1 /*inMonth*/,
4791  0 /*onDayOfWeek*/,
4792  23 /*onDayOfMonth*/,
4793  12 /*atTimeCode*/,
4794  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4795  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
4796  '-' /*letter*/,
4797  },
4798  // Rule Morocco 2028 only - Mar 5 2:00 0 -
4799  {
4800  2028 /*fromYear*/,
4801  2028 /*toYear*/,
4802  3 /*inMonth*/,
4803  0 /*onDayOfWeek*/,
4804  5 /*onDayOfMonth*/,
4805  8 /*atTimeCode*/,
4806  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4807  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
4808  '-' /*letter*/,
4809  },
4810  // Rule Morocco 2029 only - Jan 14 3:00 -1:00 -
4811  {
4812  2029 /*fromYear*/,
4813  2029 /*toYear*/,
4814  1 /*inMonth*/,
4815  0 /*onDayOfWeek*/,
4816  14 /*onDayOfMonth*/,
4817  12 /*atTimeCode*/,
4818  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4819  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
4820  '-' /*letter*/,
4821  },
4822  // Rule Morocco 2029 only - Feb 18 2:00 0 -
4823  {
4824  2029 /*fromYear*/,
4825  2029 /*toYear*/,
4826  2 /*inMonth*/,
4827  0 /*onDayOfWeek*/,
4828  18 /*onDayOfMonth*/,
4829  8 /*atTimeCode*/,
4830  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4831  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
4832  '-' /*letter*/,
4833  },
4834  // Rule Morocco 2029 only - Dec 30 3:00 -1:00 -
4835  {
4836  2029 /*fromYear*/,
4837  2029 /*toYear*/,
4838  12 /*inMonth*/,
4839  0 /*onDayOfWeek*/,
4840  30 /*onDayOfMonth*/,
4841  12 /*atTimeCode*/,
4842  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4843  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
4844  '-' /*letter*/,
4845  },
4846  // Rule Morocco 2030 only - Feb 10 2:00 0 -
4847  {
4848  2030 /*fromYear*/,
4849  2030 /*toYear*/,
4850  2 /*inMonth*/,
4851  0 /*onDayOfWeek*/,
4852  10 /*onDayOfMonth*/,
4853  8 /*atTimeCode*/,
4854  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4855  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
4856  '-' /*letter*/,
4857  },
4858  // Rule Morocco 2030 only - Dec 22 3:00 -1:00 -
4859  {
4860  2030 /*fromYear*/,
4861  2030 /*toYear*/,
4862  12 /*inMonth*/,
4863  0 /*onDayOfWeek*/,
4864  22 /*onDayOfMonth*/,
4865  12 /*atTimeCode*/,
4866  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4867  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
4868  '-' /*letter*/,
4869  },
4870  // Rule Morocco 2031 only - Feb 2 2:00 0 -
4871  {
4872  2031 /*fromYear*/,
4873  2031 /*toYear*/,
4874  2 /*inMonth*/,
4875  0 /*onDayOfWeek*/,
4876  2 /*onDayOfMonth*/,
4877  8 /*atTimeCode*/,
4878  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4879  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
4880  '-' /*letter*/,
4881  },
4882  // Rule Morocco 2031 only - Dec 14 3:00 -1:00 -
4883  {
4884  2031 /*fromYear*/,
4885  2031 /*toYear*/,
4886  12 /*inMonth*/,
4887  0 /*onDayOfWeek*/,
4888  14 /*onDayOfMonth*/,
4889  12 /*atTimeCode*/,
4890  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4891  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
4892  '-' /*letter*/,
4893  },
4894  // Rule Morocco 2032 only - Jan 18 2:00 0 -
4895  {
4896  2032 /*fromYear*/,
4897  2032 /*toYear*/,
4898  1 /*inMonth*/,
4899  0 /*onDayOfWeek*/,
4900  18 /*onDayOfMonth*/,
4901  8 /*atTimeCode*/,
4902  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4903  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
4904  '-' /*letter*/,
4905  },
4906  // Rule Morocco 2032 only - Nov 28 3:00 -1:00 -
4907  {
4908  2032 /*fromYear*/,
4909  2032 /*toYear*/,
4910  11 /*inMonth*/,
4911  0 /*onDayOfWeek*/,
4912  28 /*onDayOfMonth*/,
4913  12 /*atTimeCode*/,
4914  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4915  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
4916  '-' /*letter*/,
4917  },
4918  // Rule Morocco 2033 only - Jan 9 2:00 0 -
4919  {
4920  2033 /*fromYear*/,
4921  2033 /*toYear*/,
4922  1 /*inMonth*/,
4923  0 /*onDayOfWeek*/,
4924  9 /*onDayOfMonth*/,
4925  8 /*atTimeCode*/,
4926  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4927  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
4928  '-' /*letter*/,
4929  },
4930  // Rule Morocco 2033 only - Nov 20 3:00 -1:00 -
4931  {
4932  2033 /*fromYear*/,
4933  2033 /*toYear*/,
4934  11 /*inMonth*/,
4935  0 /*onDayOfWeek*/,
4936  20 /*onDayOfMonth*/,
4937  12 /*atTimeCode*/,
4938  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4939  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
4940  '-' /*letter*/,
4941  },
4942  // Rule Morocco 2033 only - Dec 25 2:00 0 -
4943  {
4944  2033 /*fromYear*/,
4945  2033 /*toYear*/,
4946  12 /*inMonth*/,
4947  0 /*onDayOfWeek*/,
4948  25 /*onDayOfMonth*/,
4949  8 /*atTimeCode*/,
4950  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4951  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
4952  '-' /*letter*/,
4953  },
4954  // Rule Morocco 2034 only - Nov 5 3:00 -1:00 -
4955  {
4956  2034 /*fromYear*/,
4957  2034 /*toYear*/,
4958  11 /*inMonth*/,
4959  0 /*onDayOfWeek*/,
4960  5 /*onDayOfMonth*/,
4961  12 /*atTimeCode*/,
4962  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4963  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
4964  '-' /*letter*/,
4965  },
4966  // Rule Morocco 2034 only - Dec 17 2:00 0 -
4967  {
4968  2034 /*fromYear*/,
4969  2034 /*toYear*/,
4970  12 /*inMonth*/,
4971  0 /*onDayOfWeek*/,
4972  17 /*onDayOfMonth*/,
4973  8 /*atTimeCode*/,
4974  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4975  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
4976  '-' /*letter*/,
4977  },
4978  // Rule Morocco 2035 only - Oct 28 3:00 -1:00 -
4979  {
4980  2035 /*fromYear*/,
4981  2035 /*toYear*/,
4982  10 /*inMonth*/,
4983  0 /*onDayOfWeek*/,
4984  28 /*onDayOfMonth*/,
4985  12 /*atTimeCode*/,
4986  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4987  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
4988  '-' /*letter*/,
4989  },
4990  // Rule Morocco 2035 only - Dec 9 2:00 0 -
4991  {
4992  2035 /*fromYear*/,
4993  2035 /*toYear*/,
4994  12 /*inMonth*/,
4995  0 /*onDayOfWeek*/,
4996  9 /*onDayOfMonth*/,
4997  8 /*atTimeCode*/,
4998  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4999  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
5000  '-' /*letter*/,
5001  },
5002  // Rule Morocco 2036 only - Oct 19 3:00 -1:00 -
5003  {
5004  2036 /*fromYear*/,
5005  2036 /*toYear*/,
5006  10 /*inMonth*/,
5007  0 /*onDayOfWeek*/,
5008  19 /*onDayOfMonth*/,
5009  12 /*atTimeCode*/,
5010  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5011  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
5012  '-' /*letter*/,
5013  },
5014  // Rule Morocco 2036 only - Nov 23 2:00 0 -
5015  {
5016  2036 /*fromYear*/,
5017  2036 /*toYear*/,
5018  11 /*inMonth*/,
5019  0 /*onDayOfWeek*/,
5020  23 /*onDayOfMonth*/,
5021  8 /*atTimeCode*/,
5022  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5023  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
5024  '-' /*letter*/,
5025  },
5026  // Rule Morocco 2037 only - Oct 4 3:00 -1:00 -
5027  {
5028  2037 /*fromYear*/,
5029  2037 /*toYear*/,
5030  10 /*inMonth*/,
5031  0 /*onDayOfWeek*/,
5032  4 /*onDayOfMonth*/,
5033  12 /*atTimeCode*/,
5034  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5035  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
5036  '-' /*letter*/,
5037  },
5038  // Rule Morocco 2037 only - Nov 15 2:00 0 -
5039  {
5040  2037 /*fromYear*/,
5041  2037 /*toYear*/,
5042  11 /*inMonth*/,
5043  0 /*onDayOfWeek*/,
5044  15 /*onDayOfMonth*/,
5045  8 /*atTimeCode*/,
5046  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5047  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
5048  '-' /*letter*/,
5049  },
5050  // Rule Morocco 2038 only - Sep 26 3:00 -1:00 -
5051  {
5052  2038 /*fromYear*/,
5053  2038 /*toYear*/,
5054  9 /*inMonth*/,
5055  0 /*onDayOfWeek*/,
5056  26 /*onDayOfMonth*/,
5057  12 /*atTimeCode*/,
5058  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5059  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
5060  '-' /*letter*/,
5061  },
5062  // Rule Morocco 2038 only - Nov 7 2:00 0 -
5063  {
5064  2038 /*fromYear*/,
5065  2038 /*toYear*/,
5066  11 /*inMonth*/,
5067  0 /*onDayOfWeek*/,
5068  7 /*onDayOfMonth*/,
5069  8 /*atTimeCode*/,
5070  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5071  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
5072  '-' /*letter*/,
5073  },
5074  // Rule Morocco 2039 only - Sep 18 3:00 -1:00 -
5075  {
5076  2039 /*fromYear*/,
5077  2039 /*toYear*/,
5078  9 /*inMonth*/,
5079  0 /*onDayOfWeek*/,
5080  18 /*onDayOfMonth*/,
5081  12 /*atTimeCode*/,
5082  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5083  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
5084  '-' /*letter*/,
5085  },
5086  // Rule Morocco 2039 only - Oct 23 2:00 0 -
5087  {
5088  2039 /*fromYear*/,
5089  2039 /*toYear*/,
5090  10 /*inMonth*/,
5091  0 /*onDayOfWeek*/,
5092  23 /*onDayOfMonth*/,
5093  8 /*atTimeCode*/,
5094  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5095  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
5096  '-' /*letter*/,
5097  },
5098  // Rule Morocco 2040 only - Sep 2 3:00 -1:00 -
5099  {
5100  2040 /*fromYear*/,
5101  2040 /*toYear*/,
5102  9 /*inMonth*/,
5103  0 /*onDayOfWeek*/,
5104  2 /*onDayOfMonth*/,
5105  12 /*atTimeCode*/,
5106  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5107  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
5108  '-' /*letter*/,
5109  },
5110  // Rule Morocco 2040 only - Oct 14 2:00 0 -
5111  {
5112  2040 /*fromYear*/,
5113  2040 /*toYear*/,
5114  10 /*inMonth*/,
5115  0 /*onDayOfWeek*/,
5116  14 /*onDayOfMonth*/,
5117  8 /*atTimeCode*/,
5118  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5119  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
5120  '-' /*letter*/,
5121  },
5122  // Rule Morocco 2041 only - Aug 25 3:00 -1:00 -
5123  {
5124  2041 /*fromYear*/,
5125  2041 /*toYear*/,
5126  8 /*inMonth*/,
5127  0 /*onDayOfWeek*/,
5128  25 /*onDayOfMonth*/,
5129  12 /*atTimeCode*/,
5130  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5131  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
5132  '-' /*letter*/,
5133  },
5134  // Rule Morocco 2041 only - Sep 29 2:00 0 -
5135  {
5136  2041 /*fromYear*/,
5137  2041 /*toYear*/,
5138  9 /*inMonth*/,
5139  0 /*onDayOfWeek*/,
5140  29 /*onDayOfMonth*/,
5141  8 /*atTimeCode*/,
5142  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5143  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
5144  '-' /*letter*/,
5145  },
5146  // Rule Morocco 2042 only - Aug 10 3:00 -1:00 -
5147  {
5148  2042 /*fromYear*/,
5149  2042 /*toYear*/,
5150  8 /*inMonth*/,
5151  0 /*onDayOfWeek*/,
5152  10 /*onDayOfMonth*/,
5153  12 /*atTimeCode*/,
5154  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5155  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
5156  '-' /*letter*/,
5157  },
5158  // Rule Morocco 2042 only - Sep 21 2:00 0 -
5159  {
5160  2042 /*fromYear*/,
5161  2042 /*toYear*/,
5162  9 /*inMonth*/,
5163  0 /*onDayOfWeek*/,
5164  21 /*onDayOfMonth*/,
5165  8 /*atTimeCode*/,
5166  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5167  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
5168  '-' /*letter*/,
5169  },
5170  // Rule Morocco 2043 only - Aug 2 3:00 -1:00 -
5171  {
5172  2043 /*fromYear*/,
5173  2043 /*toYear*/,
5174  8 /*inMonth*/,
5175  0 /*onDayOfWeek*/,
5176  2 /*onDayOfMonth*/,
5177  12 /*atTimeCode*/,
5178  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5179  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
5180  '-' /*letter*/,
5181  },
5182  // Rule Morocco 2043 only - Sep 13 2:00 0 -
5183  {
5184  2043 /*fromYear*/,
5185  2043 /*toYear*/,
5186  9 /*inMonth*/,
5187  0 /*onDayOfWeek*/,
5188  13 /*onDayOfMonth*/,
5189  8 /*atTimeCode*/,
5190  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5191  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
5192  '-' /*letter*/,
5193  },
5194  // Rule Morocco 2044 only - Jul 24 3:00 -1:00 -
5195  {
5196  2044 /*fromYear*/,
5197  2044 /*toYear*/,
5198  7 /*inMonth*/,
5199  0 /*onDayOfWeek*/,
5200  24 /*onDayOfMonth*/,
5201  12 /*atTimeCode*/,
5202  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5203  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
5204  '-' /*letter*/,
5205  },
5206  // Rule Morocco 2044 only - Aug 28 2:00 0 -
5207  {
5208  2044 /*fromYear*/,
5209  2044 /*toYear*/,
5210  8 /*inMonth*/,
5211  0 /*onDayOfWeek*/,
5212  28 /*onDayOfMonth*/,
5213  8 /*atTimeCode*/,
5214  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5215  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
5216  '-' /*letter*/,
5217  },
5218  // Rule Morocco 2045 only - Jul 9 3:00 -1:00 -
5219  {
5220  2045 /*fromYear*/,
5221  2045 /*toYear*/,
5222  7 /*inMonth*/,
5223  0 /*onDayOfWeek*/,
5224  9 /*onDayOfMonth*/,
5225  12 /*atTimeCode*/,
5226  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5227  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
5228  '-' /*letter*/,
5229  },
5230  // Rule Morocco 2045 only - Aug 20 2:00 0 -
5231  {
5232  2045 /*fromYear*/,
5233  2045 /*toYear*/,
5234  8 /*inMonth*/,
5235  0 /*onDayOfWeek*/,
5236  20 /*onDayOfMonth*/,
5237  8 /*atTimeCode*/,
5238  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5239  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
5240  '-' /*letter*/,
5241  },
5242  // Rule Morocco 2046 only - Jul 1 3:00 -1:00 -
5243  {
5244  2046 /*fromYear*/,
5245  2046 /*toYear*/,
5246  7 /*inMonth*/,
5247  0 /*onDayOfWeek*/,
5248  1 /*onDayOfMonth*/,
5249  12 /*atTimeCode*/,
5250  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5251  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
5252  '-' /*letter*/,
5253  },
5254  // Rule Morocco 2046 only - Aug 12 2:00 0 -
5255  {
5256  2046 /*fromYear*/,
5257  2046 /*toYear*/,
5258  8 /*inMonth*/,
5259  0 /*onDayOfWeek*/,
5260  12 /*onDayOfMonth*/,
5261  8 /*atTimeCode*/,
5262  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5263  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
5264  '-' /*letter*/,
5265  },
5266  // Rule Morocco 2047 only - Jun 23 3:00 -1:00 -
5267  {
5268  2047 /*fromYear*/,
5269  2047 /*toYear*/,
5270  6 /*inMonth*/,
5271  0 /*onDayOfWeek*/,
5272  23 /*onDayOfMonth*/,
5273  12 /*atTimeCode*/,
5274  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5275  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
5276  '-' /*letter*/,
5277  },
5278  // Rule Morocco 2047 only - Jul 28 2:00 0 -
5279  {
5280  2047 /*fromYear*/,
5281  2047 /*toYear*/,
5282  7 /*inMonth*/,
5283  0 /*onDayOfWeek*/,
5284  28 /*onDayOfMonth*/,
5285  8 /*atTimeCode*/,
5286  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5287  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
5288  '-' /*letter*/,
5289  },
5290  // Rule Morocco 2048 only - Jun 7 3:00 -1:00 -
5291  {
5292  2048 /*fromYear*/,
5293  2048 /*toYear*/,
5294  6 /*inMonth*/,
5295  0 /*onDayOfWeek*/,
5296  7 /*onDayOfMonth*/,
5297  12 /*atTimeCode*/,
5298  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5299  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
5300  '-' /*letter*/,
5301  },
5302  // Rule Morocco 2048 only - Jul 19 2:00 0 -
5303  {
5304  2048 /*fromYear*/,
5305  2048 /*toYear*/,
5306  7 /*inMonth*/,
5307  0 /*onDayOfWeek*/,
5308  19 /*onDayOfMonth*/,
5309  8 /*atTimeCode*/,
5310  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5311  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
5312  '-' /*letter*/,
5313  },
5314  // Rule Morocco 2049 only - May 30 3:00 -1:00 -
5315  {
5316  2049 /*fromYear*/,
5317  2049 /*toYear*/,
5318  5 /*inMonth*/,
5319  0 /*onDayOfWeek*/,
5320  30 /*onDayOfMonth*/,
5321  12 /*atTimeCode*/,
5322  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5323  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
5324  '-' /*letter*/,
5325  },
5326  // Rule Morocco 2049 only - Jul 4 2:00 0 -
5327  {
5328  2049 /*fromYear*/,
5329  2049 /*toYear*/,
5330  7 /*inMonth*/,
5331  0 /*onDayOfWeek*/,
5332  4 /*onDayOfMonth*/,
5333  8 /*atTimeCode*/,
5334  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5335  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
5336  '-' /*letter*/,
5337  },
5338  // Rule Morocco 2050 only - May 15 3:00 -1:00 -
5339  {
5340  2050 /*fromYear*/,
5341  2050 /*toYear*/,
5342  5 /*inMonth*/,
5343  0 /*onDayOfWeek*/,
5344  15 /*onDayOfMonth*/,
5345  12 /*atTimeCode*/,
5346  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5347  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
5348  '-' /*letter*/,
5349  },
5350  // Rule Morocco 2050 only - Jun 26 2:00 0 -
5351  {
5352  2050 /*fromYear*/,
5353  2050 /*toYear*/,
5354  6 /*inMonth*/,
5355  0 /*onDayOfWeek*/,
5356  26 /*onDayOfMonth*/,
5357  8 /*atTimeCode*/,
5358  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5359  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
5360  '-' /*letter*/,
5361  },
5362  // Rule Morocco 2051 only - May 7 3:00 -1:00 -
5363  {
5364  2051 /*fromYear*/,
5365  2051 /*toYear*/,
5366  5 /*inMonth*/,
5367  0 /*onDayOfWeek*/,
5368  7 /*onDayOfMonth*/,
5369  12 /*atTimeCode*/,
5370  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5371  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
5372  '-' /*letter*/,
5373  },
5374  // Rule Morocco 2051 only - Jun 18 2:00 0 -
5375  {
5376  2051 /*fromYear*/,
5377  2051 /*toYear*/,
5378  6 /*inMonth*/,
5379  0 /*onDayOfWeek*/,
5380  18 /*onDayOfMonth*/,
5381  8 /*atTimeCode*/,
5382  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5383  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
5384  '-' /*letter*/,
5385  },
5386  // Rule Morocco 2052 only - Apr 28 3:00 -1:00 -
5387  {
5388  2052 /*fromYear*/,
5389  2052 /*toYear*/,
5390  4 /*inMonth*/,
5391  0 /*onDayOfWeek*/,
5392  28 /*onDayOfMonth*/,
5393  12 /*atTimeCode*/,
5394  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5395  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
5396  '-' /*letter*/,
5397  },
5398  // Rule Morocco 2052 only - Jun 2 2:00 0 -
5399  {
5400  2052 /*fromYear*/,
5401  2052 /*toYear*/,
5402  6 /*inMonth*/,
5403  0 /*onDayOfWeek*/,
5404  2 /*onDayOfMonth*/,
5405  8 /*atTimeCode*/,
5406  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5407  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
5408  '-' /*letter*/,
5409  },
5410  // Rule Morocco 2053 only - Apr 13 3:00 -1:00 -
5411  {
5412  2053 /*fromYear*/,
5413  2053 /*toYear*/,
5414  4 /*inMonth*/,
5415  0 /*onDayOfWeek*/,
5416  13 /*onDayOfMonth*/,
5417  12 /*atTimeCode*/,
5418  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5419  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
5420  '-' /*letter*/,
5421  },
5422  // Rule Morocco 2053 only - May 25 2:00 0 -
5423  {
5424  2053 /*fromYear*/,
5425  2053 /*toYear*/,
5426  5 /*inMonth*/,
5427  0 /*onDayOfWeek*/,
5428  25 /*onDayOfMonth*/,
5429  8 /*atTimeCode*/,
5430  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5431  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
5432  '-' /*letter*/,
5433  },
5434  // Rule Morocco 2054 only - Apr 5 3:00 -1:00 -
5435  {
5436  2054 /*fromYear*/,
5437  2054 /*toYear*/,
5438  4 /*inMonth*/,
5439  0 /*onDayOfWeek*/,
5440  5 /*onDayOfMonth*/,
5441  12 /*atTimeCode*/,
5442  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5443  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
5444  '-' /*letter*/,
5445  },
5446  // Rule Morocco 2054 only - May 17 2:00 0 -
5447  {
5448  2054 /*fromYear*/,
5449  2054 /*toYear*/,
5450  5 /*inMonth*/,
5451  0 /*onDayOfWeek*/,
5452  17 /*onDayOfMonth*/,
5453  8 /*atTimeCode*/,
5454  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5455  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
5456  '-' /*letter*/,
5457  },
5458  // Rule Morocco 2055 only - Mar 28 3:00 -1:00 -
5459  {
5460  2055 /*fromYear*/,
5461  2055 /*toYear*/,
5462  3 /*inMonth*/,
5463  0 /*onDayOfWeek*/,
5464  28 /*onDayOfMonth*/,
5465  12 /*atTimeCode*/,
5466  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5467  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
5468  '-' /*letter*/,
5469  },
5470  // Rule Morocco 2055 only - May 2 2:00 0 -
5471  {
5472  2055 /*fromYear*/,
5473  2055 /*toYear*/,
5474  5 /*inMonth*/,
5475  0 /*onDayOfWeek*/,
5476  2 /*onDayOfMonth*/,
5477  8 /*atTimeCode*/,
5478  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5479  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
5480  '-' /*letter*/,
5481  },
5482  // Rule Morocco 2056 only - Mar 12 3:00 -1:00 -
5483  {
5484  2056 /*fromYear*/,
5485  2056 /*toYear*/,
5486  3 /*inMonth*/,
5487  0 /*onDayOfWeek*/,
5488  12 /*onDayOfMonth*/,
5489  12 /*atTimeCode*/,
5490  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5491  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
5492  '-' /*letter*/,
5493  },
5494  // Rule Morocco 2056 only - Apr 23 2:00 0 -
5495  {
5496  2056 /*fromYear*/,
5497  2056 /*toYear*/,
5498  4 /*inMonth*/,
5499  0 /*onDayOfWeek*/,
5500  23 /*onDayOfMonth*/,
5501  8 /*atTimeCode*/,
5502  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5503  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
5504  '-' /*letter*/,
5505  },
5506  // Rule Morocco 2057 only - Mar 4 3:00 -1:00 -
5507  {
5508  2057 /*fromYear*/,
5509  2057 /*toYear*/,
5510  3 /*inMonth*/,
5511  0 /*onDayOfWeek*/,
5512  4 /*onDayOfMonth*/,
5513  12 /*atTimeCode*/,
5514  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5515  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
5516  '-' /*letter*/,
5517  },
5518  // Rule Morocco 2057 only - Apr 8 2:00 0 -
5519  {
5520  2057 /*fromYear*/,
5521  2057 /*toYear*/,
5522  4 /*inMonth*/,
5523  0 /*onDayOfWeek*/,
5524  8 /*onDayOfMonth*/,
5525  8 /*atTimeCode*/,
5526  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5527  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
5528  '-' /*letter*/,
5529  },
5530  // Rule Morocco 2058 only - Feb 17 3:00 -1:00 -
5531  {
5532  2058 /*fromYear*/,
5533  2058 /*toYear*/,
5534  2 /*inMonth*/,
5535  0 /*onDayOfWeek*/,
5536  17 /*onDayOfMonth*/,
5537  12 /*atTimeCode*/,
5538  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5539  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
5540  '-' /*letter*/,
5541  },
5542  // Rule Morocco 2058 only - Mar 31 2:00 0 -
5543  {
5544  2058 /*fromYear*/,
5545  2058 /*toYear*/,
5546  3 /*inMonth*/,
5547  0 /*onDayOfWeek*/,
5548  31 /*onDayOfMonth*/,
5549  8 /*atTimeCode*/,
5550  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5551  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
5552  '-' /*letter*/,
5553  },
5554  // Rule Morocco 2059 only - Feb 9 3:00 -1:00 -
5555  {
5556  2059 /*fromYear*/,
5557  2059 /*toYear*/,
5558  2 /*inMonth*/,
5559  0 /*onDayOfWeek*/,
5560  9 /*onDayOfMonth*/,
5561  12 /*atTimeCode*/,
5562  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5563  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
5564  '-' /*letter*/,
5565  },
5566  // Rule Morocco 2059 only - Mar 23 2:00 0 -
5567  {
5568  2059 /*fromYear*/,
5569  2059 /*toYear*/,
5570  3 /*inMonth*/,
5571  0 /*onDayOfWeek*/,
5572  23 /*onDayOfMonth*/,
5573  8 /*atTimeCode*/,
5574  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5575  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
5576  '-' /*letter*/,
5577  },
5578  // Rule Morocco 2060 only - Feb 1 3:00 -1:00 -
5579  {
5580  2060 /*fromYear*/,
5581  2060 /*toYear*/,
5582  2 /*inMonth*/,
5583  0 /*onDayOfWeek*/,
5584  1 /*onDayOfMonth*/,
5585  12 /*atTimeCode*/,
5586  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5587  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
5588  '-' /*letter*/,
5589  },
5590  // Rule Morocco 2060 only - Mar 7 2:00 0 -
5591  {
5592  2060 /*fromYear*/,
5593  2060 /*toYear*/,
5594  3 /*inMonth*/,
5595  0 /*onDayOfWeek*/,
5596  7 /*onDayOfMonth*/,
5597  8 /*atTimeCode*/,
5598  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5599  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
5600  '-' /*letter*/,
5601  },
5602  // Rule Morocco 2061 only - Jan 16 3:00 -1:00 -
5603  {
5604  2061 /*fromYear*/,
5605  2061 /*toYear*/,
5606  1 /*inMonth*/,
5607  0 /*onDayOfWeek*/,
5608  16 /*onDayOfMonth*/,
5609  12 /*atTimeCode*/,
5610  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5611  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
5612  '-' /*letter*/,
5613  },
5614  // Rule Morocco 2061 only - Feb 27 2:00 0 -
5615  {
5616  2061 /*fromYear*/,
5617  2061 /*toYear*/,
5618  2 /*inMonth*/,
5619  0 /*onDayOfWeek*/,
5620  27 /*onDayOfMonth*/,
5621  8 /*atTimeCode*/,
5622  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5623  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
5624  '-' /*letter*/,
5625  },
5626  // Rule Morocco 2062 only - Jan 8 3:00 -1:00 -
5627  {
5628  2062 /*fromYear*/,
5629  2062 /*toYear*/,
5630  1 /*inMonth*/,
5631  0 /*onDayOfWeek*/,
5632  8 /*onDayOfMonth*/,
5633  12 /*atTimeCode*/,
5634  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5635  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
5636  '-' /*letter*/,
5637  },
5638  // Rule Morocco 2062 only - Feb 19 2:00 0 -
5639  {
5640  2062 /*fromYear*/,
5641  2062 /*toYear*/,
5642  2 /*inMonth*/,
5643  0 /*onDayOfWeek*/,
5644  19 /*onDayOfMonth*/,
5645  8 /*atTimeCode*/,
5646  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5647  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
5648  '-' /*letter*/,
5649  },
5650  // Rule Morocco 2062 only - Dec 31 3:00 -1:00 -
5651  {
5652  2062 /*fromYear*/,
5653  2062 /*toYear*/,
5654  12 /*inMonth*/,
5655  0 /*onDayOfWeek*/,
5656  31 /*onDayOfMonth*/,
5657  12 /*atTimeCode*/,
5658  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5659  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
5660  '-' /*letter*/,
5661  },
5662  // Rule Morocco 2063 only - Feb 4 2:00 0 -
5663  {
5664  2063 /*fromYear*/,
5665  2063 /*toYear*/,
5666  2 /*inMonth*/,
5667  0 /*onDayOfWeek*/,
5668  4 /*onDayOfMonth*/,
5669  8 /*atTimeCode*/,
5670  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5671  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
5672  '-' /*letter*/,
5673  },
5674  // Rule Morocco 2063 only - Dec 16 3:00 -1:00 -
5675  {
5676  2063 /*fromYear*/,
5677  2063 /*toYear*/,
5678  12 /*inMonth*/,
5679  0 /*onDayOfWeek*/,
5680  16 /*onDayOfMonth*/,
5681  12 /*atTimeCode*/,
5682  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5683  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
5684  '-' /*letter*/,
5685  },
5686  // Rule Morocco 2064 only - Jan 27 2:00 0 -
5687  {
5688  2064 /*fromYear*/,
5689  2064 /*toYear*/,
5690  1 /*inMonth*/,
5691  0 /*onDayOfWeek*/,
5692  27 /*onDayOfMonth*/,
5693  8 /*atTimeCode*/,
5694  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5695  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
5696  '-' /*letter*/,
5697  },
5698  // Rule Morocco 2064 only - Dec 7 3:00 -1:00 -
5699  {
5700  2064 /*fromYear*/,
5701  2064 /*toYear*/,
5702  12 /*inMonth*/,
5703  0 /*onDayOfWeek*/,
5704  7 /*onDayOfMonth*/,
5705  12 /*atTimeCode*/,
5706  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5707  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
5708  '-' /*letter*/,
5709  },
5710  // Rule Morocco 2065 only - Jan 11 2:00 0 -
5711  {
5712  2065 /*fromYear*/,
5713  2065 /*toYear*/,
5714  1 /*inMonth*/,
5715  0 /*onDayOfWeek*/,
5716  11 /*onDayOfMonth*/,
5717  8 /*atTimeCode*/,
5718  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5719  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
5720  '-' /*letter*/,
5721  },
5722  // Rule Morocco 2065 only - Nov 22 3:00 -1:00 -
5723  {
5724  2065 /*fromYear*/,
5725  2065 /*toYear*/,
5726  11 /*inMonth*/,
5727  0 /*onDayOfWeek*/,
5728  22 /*onDayOfMonth*/,
5729  12 /*atTimeCode*/,
5730  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5731  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
5732  '-' /*letter*/,
5733  },
5734  // Rule Morocco 2066 only - Jan 3 2:00 0 -
5735  {
5736  2066 /*fromYear*/,
5737  2066 /*toYear*/,
5738  1 /*inMonth*/,
5739  0 /*onDayOfWeek*/,
5740  3 /*onDayOfMonth*/,
5741  8 /*atTimeCode*/,
5742  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5743  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
5744  '-' /*letter*/,
5745  },
5746  // Rule Morocco 2066 only - Nov 14 3:00 -1:00 -
5747  {
5748  2066 /*fromYear*/,
5749  2066 /*toYear*/,
5750  11 /*inMonth*/,
5751  0 /*onDayOfWeek*/,
5752  14 /*onDayOfMonth*/,
5753  12 /*atTimeCode*/,
5754  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5755  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
5756  '-' /*letter*/,
5757  },
5758  // Rule Morocco 2066 only - Dec 26 2:00 0 -
5759  {
5760  2066 /*fromYear*/,
5761  2066 /*toYear*/,
5762  12 /*inMonth*/,
5763  0 /*onDayOfWeek*/,
5764  26 /*onDayOfMonth*/,
5765  8 /*atTimeCode*/,
5766  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5767  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
5768  '-' /*letter*/,
5769  },
5770  // Rule Morocco 2067 only - Nov 6 3:00 -1:00 -
5771  {
5772  2067 /*fromYear*/,
5773  2067 /*toYear*/,
5774  11 /*inMonth*/,
5775  0 /*onDayOfWeek*/,
5776  6 /*onDayOfMonth*/,
5777  12 /*atTimeCode*/,
5778  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5779  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
5780  '-' /*letter*/,
5781  },
5782  // Rule Morocco 2067 only - Dec 11 2:00 0 -
5783  {
5784  2067 /*fromYear*/,
5785  2067 /*toYear*/,
5786  12 /*inMonth*/,
5787  0 /*onDayOfWeek*/,
5788  11 /*onDayOfMonth*/,
5789  8 /*atTimeCode*/,
5790  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5791  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
5792  '-' /*letter*/,
5793  },
5794  // Rule Morocco 2068 only - Oct 21 3:00 -1:00 -
5795  {
5796  2068 /*fromYear*/,
5797  2068 /*toYear*/,
5798  10 /*inMonth*/,
5799  0 /*onDayOfWeek*/,
5800  21 /*onDayOfMonth*/,
5801  12 /*atTimeCode*/,
5802  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5803  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
5804  '-' /*letter*/,
5805  },
5806  // Rule Morocco 2068 only - Dec 2 2:00 0 -
5807  {
5808  2068 /*fromYear*/,
5809  2068 /*toYear*/,
5810  12 /*inMonth*/,
5811  0 /*onDayOfWeek*/,
5812  2 /*onDayOfMonth*/,
5813  8 /*atTimeCode*/,
5814  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5815  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
5816  '-' /*letter*/,
5817  },
5818  // Rule Morocco 2069 only - Oct 13 3:00 -1:00 -
5819  {
5820  2069 /*fromYear*/,
5821  2069 /*toYear*/,
5822  10 /*inMonth*/,
5823  0 /*onDayOfWeek*/,
5824  13 /*onDayOfMonth*/,
5825  12 /*atTimeCode*/,
5826  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5827  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
5828  '-' /*letter*/,
5829  },
5830  // Rule Morocco 2069 only - Nov 24 2:00 0 -
5831  {
5832  2069 /*fromYear*/,
5833  2069 /*toYear*/,
5834  11 /*inMonth*/,
5835  0 /*onDayOfWeek*/,
5836  24 /*onDayOfMonth*/,
5837  8 /*atTimeCode*/,
5838  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5839  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
5840  '-' /*letter*/,
5841  },
5842  // Rule Morocco 2070 only - Oct 5 3:00 -1:00 -
5843  {
5844  2070 /*fromYear*/,
5845  2070 /*toYear*/,
5846  10 /*inMonth*/,
5847  0 /*onDayOfWeek*/,
5848  5 /*onDayOfMonth*/,
5849  12 /*atTimeCode*/,
5850  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5851  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
5852  '-' /*letter*/,
5853  },
5854  // Rule Morocco 2070 only - Nov 9 2:00 0 -
5855  {
5856  2070 /*fromYear*/,
5857  2070 /*toYear*/,
5858  11 /*inMonth*/,
5859  0 /*onDayOfWeek*/,
5860  9 /*onDayOfMonth*/,
5861  8 /*atTimeCode*/,
5862  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5863  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
5864  '-' /*letter*/,
5865  },
5866  // Rule Morocco 2071 only - Sep 20 3:00 -1:00 -
5867  {
5868  2071 /*fromYear*/,
5869  2071 /*toYear*/,
5870  9 /*inMonth*/,
5871  0 /*onDayOfWeek*/,
5872  20 /*onDayOfMonth*/,
5873  12 /*atTimeCode*/,
5874  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5875  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
5876  '-' /*letter*/,
5877  },
5878  // Rule Morocco 2071 only - Nov 1 2:00 0 -
5879  {
5880  2071 /*fromYear*/,
5881  2071 /*toYear*/,
5882  11 /*inMonth*/,
5883  0 /*onDayOfWeek*/,
5884  1 /*onDayOfMonth*/,
5885  8 /*atTimeCode*/,
5886  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5887  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
5888  '-' /*letter*/,
5889  },
5890  // Rule Morocco 2072 only - Sep 11 3:00 -1:00 -
5891  {
5892  2072 /*fromYear*/,
5893  2072 /*toYear*/,
5894  9 /*inMonth*/,
5895  0 /*onDayOfWeek*/,
5896  11 /*onDayOfMonth*/,
5897  12 /*atTimeCode*/,
5898  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5899  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
5900  '-' /*letter*/,
5901  },
5902  // Rule Morocco 2072 only - Oct 16 2:00 0 -
5903  {
5904  2072 /*fromYear*/,
5905  2072 /*toYear*/,
5906  10 /*inMonth*/,
5907  0 /*onDayOfWeek*/,
5908  16 /*onDayOfMonth*/,
5909  8 /*atTimeCode*/,
5910  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5911  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
5912  '-' /*letter*/,
5913  },
5914  // Rule Morocco 2073 only - Aug 27 3:00 -1:00 -
5915  {
5916  2073 /*fromYear*/,
5917  2073 /*toYear*/,
5918  8 /*inMonth*/,
5919  0 /*onDayOfWeek*/,
5920  27 /*onDayOfMonth*/,
5921  12 /*atTimeCode*/,
5922  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5923  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
5924  '-' /*letter*/,
5925  },
5926  // Rule Morocco 2073 only - Oct 8 2:00 0 -
5927  {
5928  2073 /*fromYear*/,
5929  2073 /*toYear*/,
5930  10 /*inMonth*/,
5931  0 /*onDayOfWeek*/,
5932  8 /*onDayOfMonth*/,
5933  8 /*atTimeCode*/,
5934  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5935  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
5936  '-' /*letter*/,
5937  },
5938  // Rule Morocco 2074 only - Aug 19 3:00 -1:00 -
5939  {
5940  2074 /*fromYear*/,
5941  2074 /*toYear*/,
5942  8 /*inMonth*/,
5943  0 /*onDayOfWeek*/,
5944  19 /*onDayOfMonth*/,
5945  12 /*atTimeCode*/,
5946  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5947  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
5948  '-' /*letter*/,
5949  },
5950  // Rule Morocco 2074 only - Sep 30 2:00 0 -
5951  {
5952  2074 /*fromYear*/,
5953  2074 /*toYear*/,
5954  9 /*inMonth*/,
5955  0 /*onDayOfWeek*/,
5956  30 /*onDayOfMonth*/,
5957  8 /*atTimeCode*/,
5958  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5959  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
5960  '-' /*letter*/,
5961  },
5962  // Rule Morocco 2075 only - Aug 11 3:00 -1:00 -
5963  {
5964  2075 /*fromYear*/,
5965  2075 /*toYear*/,
5966  8 /*inMonth*/,
5967  0 /*onDayOfWeek*/,
5968  11 /*onDayOfMonth*/,
5969  12 /*atTimeCode*/,
5970  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5971  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
5972  '-' /*letter*/,
5973  },
5974  // Rule Morocco 2075 only - Sep 15 2:00 0 -
5975  {
5976  2075 /*fromYear*/,
5977  2075 /*toYear*/,
5978  9 /*inMonth*/,
5979  0 /*onDayOfWeek*/,
5980  15 /*onDayOfMonth*/,
5981  8 /*atTimeCode*/,
5982  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5983  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
5984  '-' /*letter*/,
5985  },
5986  // Rule Morocco 2076 only - Jul 26 3:00 -1:00 -
5987  {
5988  2076 /*fromYear*/,
5989  2076 /*toYear*/,
5990  7 /*inMonth*/,
5991  0 /*onDayOfWeek*/,
5992  26 /*onDayOfMonth*/,
5993  12 /*atTimeCode*/,
5994  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5995  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
5996  '-' /*letter*/,
5997  },
5998  // Rule Morocco 2076 only - Sep 6 2:00 0 -
5999  {
6000  2076 /*fromYear*/,
6001  2076 /*toYear*/,
6002  9 /*inMonth*/,
6003  0 /*onDayOfWeek*/,
6004  6 /*onDayOfMonth*/,
6005  8 /*atTimeCode*/,
6006  0 /*atTimeModifier (kSuffixW + minute=0)*/,
6007  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
6008  '-' /*letter*/,
6009  },
6010  // Rule Morocco 2077 only - Jul 18 3:00 -1:00 -
6011  {
6012  2077 /*fromYear*/,
6013  2077 /*toYear*/,
6014  7 /*inMonth*/,
6015  0 /*onDayOfWeek*/,
6016  18 /*onDayOfMonth*/,
6017  12 /*atTimeCode*/,
6018  0 /*atTimeModifier (kSuffixW + minute=0)*/,
6019  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
6020  '-' /*letter*/,
6021  },
6022  // Rule Morocco 2077 only - Aug 29 2:00 0 -
6023  {
6024  2077 /*fromYear*/,
6025  2077 /*toYear*/,
6026  8 /*inMonth*/,
6027  0 /*onDayOfWeek*/,
6028  29 /*onDayOfMonth*/,
6029  8 /*atTimeCode*/,
6030  0 /*atTimeModifier (kSuffixW + minute=0)*/,
6031  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
6032  '-' /*letter*/,
6033  },
6034  // Rule Morocco 2078 only - Jul 10 3:00 -1:00 -
6035  {
6036  2078 /*fromYear*/,
6037  2078 /*toYear*/,
6038  7 /*inMonth*/,
6039  0 /*onDayOfWeek*/,
6040  10 /*onDayOfMonth*/,
6041  12 /*atTimeCode*/,
6042  0 /*atTimeModifier (kSuffixW + minute=0)*/,
6043  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
6044  '-' /*letter*/,
6045  },
6046  // Rule Morocco 2078 only - Aug 14 2:00 0 -
6047  {
6048  2078 /*fromYear*/,
6049  2078 /*toYear*/,
6050  8 /*inMonth*/,
6051  0 /*onDayOfWeek*/,
6052  14 /*onDayOfMonth*/,
6053  8 /*atTimeCode*/,
6054  0 /*atTimeModifier (kSuffixW + minute=0)*/,
6055  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
6056  '-' /*letter*/,
6057  },
6058  // Rule Morocco 2079 only - Jun 25 3:00 -1:00 -
6059  {
6060  2079 /*fromYear*/,
6061  2079 /*toYear*/,
6062  6 /*inMonth*/,
6063  0 /*onDayOfWeek*/,
6064  25 /*onDayOfMonth*/,
6065  12 /*atTimeCode*/,
6066  0 /*atTimeModifier (kSuffixW + minute=0)*/,
6067  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
6068  '-' /*letter*/,
6069  },
6070  // Rule Morocco 2079 only - Aug 6 2:00 0 -
6071  {
6072  2079 /*fromYear*/,
6073  2079 /*toYear*/,
6074  8 /*inMonth*/,
6075  0 /*onDayOfWeek*/,
6076  6 /*onDayOfMonth*/,
6077  8 /*atTimeCode*/,
6078  0 /*atTimeModifier (kSuffixW + minute=0)*/,
6079  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
6080  '-' /*letter*/,
6081  },
6082  // Rule Morocco 2080 only - Jun 16 3:00 -1:00 -
6083  {
6084  2080 /*fromYear*/,
6085  2080 /*toYear*/,
6086  6 /*inMonth*/,
6087  0 /*onDayOfWeek*/,
6088  16 /*onDayOfMonth*/,
6089  12 /*atTimeCode*/,
6090  0 /*atTimeModifier (kSuffixW + minute=0)*/,
6091  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
6092  '-' /*letter*/,
6093  },
6094  // Rule Morocco 2080 only - Jul 21 2:00 0 -
6095  {
6096  2080 /*fromYear*/,
6097  2080 /*toYear*/,
6098  7 /*inMonth*/,
6099  0 /*onDayOfWeek*/,
6100  21 /*onDayOfMonth*/,
6101  8 /*atTimeCode*/,
6102  0 /*atTimeModifier (kSuffixW + minute=0)*/,
6103  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
6104  '-' /*letter*/,
6105  },
6106  // Rule Morocco 2081 only - Jun 1 3:00 -1:00 -
6107  {
6108  2081 /*fromYear*/,
6109  2081 /*toYear*/,
6110  6 /*inMonth*/,
6111  0 /*onDayOfWeek*/,
6112  1 /*onDayOfMonth*/,
6113  12 /*atTimeCode*/,
6114  0 /*atTimeModifier (kSuffixW + minute=0)*/,
6115  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
6116  '-' /*letter*/,
6117  },
6118  // Rule Morocco 2081 only - Jul 13 2:00 0 -
6119  {
6120  2081 /*fromYear*/,
6121  2081 /*toYear*/,
6122  7 /*inMonth*/,
6123  0 /*onDayOfWeek*/,
6124  13 /*onDayOfMonth*/,
6125  8 /*atTimeCode*/,
6126  0 /*atTimeModifier (kSuffixW + minute=0)*/,
6127  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
6128  '-' /*letter*/,
6129  },
6130  // Rule Morocco 2082 only - May 24 3:00 -1:00 -
6131  {
6132  2082 /*fromYear*/,
6133  2082 /*toYear*/,
6134  5 /*inMonth*/,
6135  0 /*onDayOfWeek*/,
6136  24 /*onDayOfMonth*/,
6137  12 /*atTimeCode*/,
6138  0 /*atTimeModifier (kSuffixW + minute=0)*/,
6139  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
6140  '-' /*letter*/,
6141  },
6142  // Rule Morocco 2082 only - Jul 5 2:00 0 -
6143  {
6144  2082 /*fromYear*/,
6145  2082 /*toYear*/,
6146  7 /*inMonth*/,
6147  0 /*onDayOfWeek*/,
6148  5 /*onDayOfMonth*/,
6149  8 /*atTimeCode*/,
6150  0 /*atTimeModifier (kSuffixW + minute=0)*/,
6151  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
6152  '-' /*letter*/,
6153  },
6154  // Rule Morocco 2083 only - May 16 3:00 -1:00 -
6155  {
6156  2083 /*fromYear*/,
6157  2083 /*toYear*/,
6158  5 /*inMonth*/,
6159  0 /*onDayOfWeek*/,
6160  16 /*onDayOfMonth*/,
6161  12 /*atTimeCode*/,
6162  0 /*atTimeModifier (kSuffixW + minute=0)*/,
6163  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
6164  '-' /*letter*/,
6165  },
6166  // Rule Morocco 2083 only - Jun 20 2:00 0 -
6167  {
6168  2083 /*fromYear*/,
6169  2083 /*toYear*/,
6170  6 /*inMonth*/,
6171  0 /*onDayOfWeek*/,
6172  20 /*onDayOfMonth*/,
6173  8 /*atTimeCode*/,
6174  0 /*atTimeModifier (kSuffixW + minute=0)*/,
6175  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
6176  '-' /*letter*/,
6177  },
6178  // Rule Morocco 2084 only - Apr 30 3:00 -1:00 -
6179  {
6180  2084 /*fromYear*/,
6181  2084 /*toYear*/,
6182  4 /*inMonth*/,
6183  0 /*onDayOfWeek*/,
6184  30 /*onDayOfMonth*/,
6185  12 /*atTimeCode*/,
6186  0 /*atTimeModifier (kSuffixW + minute=0)*/,
6187  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
6188  '-' /*letter*/,
6189  },
6190  // Rule Morocco 2084 only - Jun 11 2:00 0 -
6191  {
6192  2084 /*fromYear*/,
6193  2084 /*toYear*/,
6194  6 /*inMonth*/,
6195  0 /*onDayOfWeek*/,
6196  11 /*onDayOfMonth*/,
6197  8 /*atTimeCode*/,
6198  0 /*atTimeModifier (kSuffixW + minute=0)*/,
6199  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
6200  '-' /*letter*/,
6201  },
6202  // Rule Morocco 2085 only - Apr 22 3:00 -1:00 -
6203  {
6204  2085 /*fromYear*/,
6205  2085 /*toYear*/,
6206  4 /*inMonth*/,
6207  0 /*onDayOfWeek*/,
6208  22 /*onDayOfMonth*/,
6209  12 /*atTimeCode*/,
6210  0 /*atTimeModifier (kSuffixW + minute=0)*/,
6211  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
6212  '-' /*letter*/,
6213  },
6214  // Rule Morocco 2085 only - Jun 3 2:00 0 -
6215  {
6216  2085 /*fromYear*/,
6217  2085 /*toYear*/,
6218  6 /*inMonth*/,
6219  0 /*onDayOfWeek*/,
6220  3 /*onDayOfMonth*/,
6221  8 /*atTimeCode*/,
6222  0 /*atTimeModifier (kSuffixW + minute=0)*/,
6223  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
6224  '-' /*letter*/,
6225  },
6226  // Rule Morocco 2086 only - Apr 14 3:00 -1:00 -
6227  {
6228  2086 /*fromYear*/,
6229  2086 /*toYear*/,
6230  4 /*inMonth*/,
6231  0 /*onDayOfWeek*/,
6232  14 /*onDayOfMonth*/,
6233  12 /*atTimeCode*/,
6234  0 /*atTimeModifier (kSuffixW + minute=0)*/,
6235  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
6236  '-' /*letter*/,
6237  },
6238  // Rule Morocco 2086 only - May 19 2:00 0 -
6239  {
6240  2086 /*fromYear*/,
6241  2086 /*toYear*/,
6242  5 /*inMonth*/,
6243  0 /*onDayOfWeek*/,
6244  19 /*onDayOfMonth*/,
6245  8 /*atTimeCode*/,
6246  0 /*atTimeModifier (kSuffixW + minute=0)*/,
6247  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
6248  '-' /*letter*/,
6249  },
6250  // Rule Morocco 2087 only - Mar 30 3:00 -1:00 -
6251  {
6252  2087 /*fromYear*/,
6253  2087 /*toYear*/,
6254  3 /*inMonth*/,
6255  0 /*onDayOfWeek*/,
6256  30 /*onDayOfMonth*/,
6257  12 /*atTimeCode*/,
6258  0 /*atTimeModifier (kSuffixW + minute=0)*/,
6259  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
6260  '-' /*letter*/,
6261  },
6262  // Rule Morocco 2087 only - May 11 2:00 0 -
6263  {
6264  2087 /*fromYear*/,
6265  2087 /*toYear*/,
6266  5 /*inMonth*/,
6267  0 /*onDayOfWeek*/,
6268  11 /*onDayOfMonth*/,
6269  8 /*atTimeCode*/,
6270  0 /*atTimeModifier (kSuffixW + minute=0)*/,
6271  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
6272  '-' /*letter*/,
6273  },
6274 
6275 };
6276 
6277 
6278 
6279 const extended::ZonePolicy kZonePolicyMorocco ACE_TIME_PROGMEM = {
6280  kZoneRulesMorocco /*rules*/,
6281  nullptr /*letters*/,
6282  169 /*numRules*/,
6283  0 /*numLetters*/,
6284 };
6285 
6286 //---------------------------------------------------------------------------
6287 // Policy name: NC
6288 // Rules: 1
6289 // Memory (8-bit): 17
6290 // Memory (32-bit): 24
6291 //---------------------------------------------------------------------------
6292 
6293 static const extended::ZoneRule kZoneRulesNC[] ACE_TIME_PROGMEM = {
6294  // Rule NC 1997 only - Mar 2 2:00s 0 -
6295  {
6296  1997 /*fromYear*/,
6297  1997 /*toYear*/,
6298  3 /*inMonth*/,
6299  0 /*onDayOfWeek*/,
6300  2 /*onDayOfMonth*/,
6301  8 /*atTimeCode*/,
6302  16 /*atTimeModifier (kSuffixS + minute=0)*/,
6303  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
6304  '-' /*letter*/,
6305  },
6306 
6307 };
6308 
6309 
6310 
6311 const extended::ZonePolicy kZonePolicyNC ACE_TIME_PROGMEM = {
6312  kZoneRulesNC /*rules*/,
6313  nullptr /*letters*/,
6314  1 /*numRules*/,
6315  0 /*numLetters*/,
6316 };
6317 
6318 //---------------------------------------------------------------------------
6319 // Policy name: NT_YK
6320 // Rules: 3
6321 // Memory (8-bit): 39
6322 // Memory (32-bit): 48
6323 //---------------------------------------------------------------------------
6324 
6325 static const extended::ZoneRule kZoneRulesNT_YK[] ACE_TIME_PROGMEM = {
6326  // Rule NT_YK 1972 1986 - Apr lastSun 2:00 1:00 D
6327  {
6328  1972 /*fromYear*/,
6329  1986 /*toYear*/,
6330  4 /*inMonth*/,
6331  7 /*onDayOfWeek*/,
6332  0 /*onDayOfMonth*/,
6333  8 /*atTimeCode*/,
6334  0 /*atTimeModifier (kSuffixW + minute=0)*/,
6335  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
6336  'D' /*letter*/,
6337  },
6338  // Rule NT_YK 1972 2006 - Oct lastSun 2:00 0 S
6339  {
6340  1972 /*fromYear*/,
6341  2006 /*toYear*/,
6342  10 /*inMonth*/,
6343  7 /*onDayOfWeek*/,
6344  0 /*onDayOfMonth*/,
6345  8 /*atTimeCode*/,
6346  0 /*atTimeModifier (kSuffixW + minute=0)*/,
6347  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
6348  'S' /*letter*/,
6349  },
6350  // Rule NT_YK 1987 2006 - Apr Sun>=1 2:00 1:00 D
6351  {
6352  1987 /*fromYear*/,
6353  2006 /*toYear*/,
6354  4 /*inMonth*/,
6355  7 /*onDayOfWeek*/,
6356  1 /*onDayOfMonth*/,
6357  8 /*atTimeCode*/,
6358  0 /*atTimeModifier (kSuffixW + minute=0)*/,
6359  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
6360  'D' /*letter*/,
6361  },
6362 
6363 };
6364 
6365 
6366 
6367 const extended::ZonePolicy kZonePolicyNT_YK ACE_TIME_PROGMEM = {
6368  kZoneRulesNT_YK /*rules*/,
6369  nullptr /*letters*/,
6370  3 /*numRules*/,
6371  0 /*numLetters*/,
6372 };
6373 
6374 //---------------------------------------------------------------------------
6375 // Policy name: NZ
6376 // Rules: 5
6377 // Memory (8-bit): 61
6378 // Memory (32-bit): 72
6379 //---------------------------------------------------------------------------
6380 
6381 static const extended::ZoneRule kZoneRulesNZ[] ACE_TIME_PROGMEM = {
6382  // Rule NZ 1989 only - Oct Sun>=8 2:00s 1:00 D
6383  {
6384  1989 /*fromYear*/,
6385  1989 /*toYear*/,
6386  10 /*inMonth*/,
6387  7 /*onDayOfWeek*/,
6388  8 /*onDayOfMonth*/,
6389  8 /*atTimeCode*/,
6390  16 /*atTimeModifier (kSuffixS + minute=0)*/,
6391  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
6392  'D' /*letter*/,
6393  },
6394  // Rule NZ 1990 2006 - Oct Sun>=1 2:00s 1:00 D
6395  {
6396  1990 /*fromYear*/,
6397  2006 /*toYear*/,
6398  10 /*inMonth*/,
6399  7 /*onDayOfWeek*/,
6400  1 /*onDayOfMonth*/,
6401  8 /*atTimeCode*/,
6402  16 /*atTimeModifier (kSuffixS + minute=0)*/,
6403  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
6404  'D' /*letter*/,
6405  },
6406  // Rule NZ 1990 2007 - Mar Sun>=15 2:00s 0 S
6407  {
6408  1990 /*fromYear*/,
6409  2007 /*toYear*/,
6410  3 /*inMonth*/,
6411  7 /*onDayOfWeek*/,
6412  15 /*onDayOfMonth*/,
6413  8 /*atTimeCode*/,
6414  16 /*atTimeModifier (kSuffixS + minute=0)*/,
6415  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
6416  'S' /*letter*/,
6417  },
6418  // Rule NZ 2007 max - Sep lastSun 2:00s 1:00 D
6419  {
6420  2007 /*fromYear*/,
6421  9999 /*toYear*/,
6422  9 /*inMonth*/,
6423  7 /*onDayOfWeek*/,
6424  0 /*onDayOfMonth*/,
6425  8 /*atTimeCode*/,
6426  16 /*atTimeModifier (kSuffixS + minute=0)*/,
6427  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
6428  'D' /*letter*/,
6429  },
6430  // Rule NZ 2008 max - Apr Sun>=1 2:00s 0 S
6431  {
6432  2008 /*fromYear*/,
6433  9999 /*toYear*/,
6434  4 /*inMonth*/,
6435  7 /*onDayOfWeek*/,
6436  1 /*onDayOfMonth*/,
6437  8 /*atTimeCode*/,
6438  16 /*atTimeModifier (kSuffixS + minute=0)*/,
6439  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
6440  'S' /*letter*/,
6441  },
6442 
6443 };
6444 
6445 
6446 
6447 const extended::ZonePolicy kZonePolicyNZ ACE_TIME_PROGMEM = {
6448  kZoneRulesNZ /*rules*/,
6449  nullptr /*letters*/,
6450  5 /*numRules*/,
6451  0 /*numLetters*/,
6452 };
6453 
6454 //---------------------------------------------------------------------------
6455 // Policy name: Namibia
6456 // Rules: 3
6457 // Memory (8-bit): 51
6458 // Memory (32-bit): 64
6459 //---------------------------------------------------------------------------
6460 
6461 static const extended::ZoneRule kZoneRulesNamibia[] ACE_TIME_PROGMEM = {
6462  // Rule Namibia 1994 only - Mar 21 0:00 -1:00 WAT
6463  {
6464  1994 /*fromYear*/,
6465  1994 /*toYear*/,
6466  3 /*inMonth*/,
6467  0 /*onDayOfWeek*/,
6468  21 /*onDayOfMonth*/,
6469  0 /*atTimeCode*/,
6470  0 /*atTimeModifier (kSuffixW + minute=0)*/,
6471  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
6472  1 /*letter (index to "WAT")*/,
6473  },
6474  // Rule Namibia 1994 2017 - Sep Sun>=1 2:00 0 CAT
6475  {
6476  1994 /*fromYear*/,
6477  2017 /*toYear*/,
6478  9 /*inMonth*/,
6479  7 /*onDayOfWeek*/,
6480  1 /*onDayOfMonth*/,
6481  8 /*atTimeCode*/,
6482  0 /*atTimeModifier (kSuffixW + minute=0)*/,
6483  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
6484  0 /*letter (index to "CAT")*/,
6485  },
6486  // Rule Namibia 1995 2017 - Apr Sun>=1 2:00 -1:00 WAT
6487  {
6488  1995 /*fromYear*/,
6489  2017 /*toYear*/,
6490  4 /*inMonth*/,
6491  7 /*onDayOfWeek*/,
6492  1 /*onDayOfMonth*/,
6493  8 /*atTimeCode*/,
6494  0 /*atTimeModifier (kSuffixW + minute=0)*/,
6495  0 /*deltaCode ((deltaMinutes=-60)/15 + 4)*/,
6496  1 /*letter (index to "WAT")*/,
6497  },
6498 
6499 };
6500 
6501 static const char* const kLettersNamibia[] ACE_TIME_PROGMEM = {
6502  /*0*/ "CAT",
6503  /*1*/ "WAT",
6504 
6505 };
6506 
6507 
6508 const extended::ZonePolicy kZonePolicyNamibia ACE_TIME_PROGMEM = {
6509  kZoneRulesNamibia /*rules*/,
6510  kLettersNamibia /*letters*/,
6511  3 /*numRules*/,
6512  2 /*numLetters*/,
6513 };
6514 
6515 //---------------------------------------------------------------------------
6516 // Policy name: Nic
6517 // Rules: 5
6518 // Memory (8-bit): 61
6519 // Memory (32-bit): 72
6520 //---------------------------------------------------------------------------
6521 
6522 static const extended::ZoneRule kZoneRulesNic[] ACE_TIME_PROGMEM = {
6523  // Rule Nic 1979 1980 - Jun Mon>=23 0:00 0 S
6524  {
6525  1979 /*fromYear*/,
6526  1980 /*toYear*/,
6527  6 /*inMonth*/,
6528  1 /*onDayOfWeek*/,
6529  23 /*onDayOfMonth*/,
6530  0 /*atTimeCode*/,
6531  0 /*atTimeModifier (kSuffixW + minute=0)*/,
6532  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
6533  'S' /*letter*/,
6534  },
6535  // Rule Nic 2005 only - Apr 10 0:00 1:00 D
6536  {
6537  2005 /*fromYear*/,
6538  2005 /*toYear*/,
6539  4 /*inMonth*/,
6540  0 /*onDayOfWeek*/,
6541  10 /*onDayOfMonth*/,
6542  0 /*atTimeCode*/,
6543  0 /*atTimeModifier (kSuffixW + minute=0)*/,
6544  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
6545  'D' /*letter*/,
6546  },
6547  // Rule Nic 2005 only - Oct Sun>=1 0:00 0 S
6548  {
6549  2005 /*fromYear*/,
6550  2005 /*toYear*/,
6551  10 /*inMonth*/,
6552  7 /*onDayOfWeek*/,
6553  1 /*onDayOfMonth*/,
6554  0 /*atTimeCode*/,
6555  0 /*atTimeModifier (kSuffixW + minute=0)*/,
6556  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
6557  'S' /*letter*/,
6558  },
6559  // Rule Nic 2006 only - Apr 30 2:00 1:00 D
6560  {
6561  2006 /*fromYear*/,
6562  2006 /*toYear*/,
6563  4 /*inMonth*/,
6564  0 /*onDayOfWeek*/,
6565  30 /*onDayOfMonth*/,
6566  8 /*atTimeCode*/,
6567  0 /*atTimeModifier (kSuffixW + minute=0)*/,
6568  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
6569  'D' /*letter*/,
6570  },
6571  // Rule Nic 2006 only - Oct Sun>=1 1:00 0 S
6572  {
6573  2006 /*fromYear*/,
6574  2006 /*toYear*/,
6575  10 /*inMonth*/,
6576  7 /*onDayOfWeek*/,
6577  1 /*onDayOfMonth*/,
6578  4 /*atTimeCode*/,
6579  0 /*atTimeModifier (kSuffixW + minute=0)*/,
6580  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
6581  'S' /*letter*/,
6582  },
6583 
6584 };
6585 
6586 
6587 
6588 const extended::ZonePolicy kZonePolicyNic ACE_TIME_PROGMEM = {
6589  kZoneRulesNic /*rules*/,
6590  nullptr /*letters*/,
6591  5 /*numRules*/,
6592  0 /*numLetters*/,
6593 };
6594 
6595 //---------------------------------------------------------------------------
6596 // Policy name: PRC
6597 // Rules: 1
6598 // Memory (8-bit): 17
6599 // Memory (32-bit): 24
6600 //---------------------------------------------------------------------------
6601 
6602 static const extended::ZoneRule kZoneRulesPRC[] ACE_TIME_PROGMEM = {
6603  // Rule PRC 1986 1991 - Sep Sun>=11 2:00 0 S
6604  {
6605  1986 /*fromYear*/,
6606  1991 /*toYear*/,
6607  9 /*inMonth*/,
6608  7 /*onDayOfWeek*/,
6609  11 /*onDayOfMonth*/,
6610  8 /*atTimeCode*/,
6611  0 /*atTimeModifier (kSuffixW + minute=0)*/,
6612  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
6613  'S' /*letter*/,
6614  },
6615 
6616 };
6617 
6618 
6619 
6620 const extended::ZonePolicy kZonePolicyPRC ACE_TIME_PROGMEM = {
6621  kZoneRulesPRC /*rules*/,
6622  nullptr /*letters*/,
6623  1 /*numRules*/,
6624  0 /*numLetters*/,
6625 };
6626 
6627 //---------------------------------------------------------------------------
6628 // Policy name: Pakistan
6629 // Rules: 6
6630 // Memory (8-bit): 72
6631 // Memory (32-bit): 84
6632 //---------------------------------------------------------------------------
6633 
6634 static const extended::ZoneRule kZoneRulesPakistan[] ACE_TIME_PROGMEM = {
6635  // Anchor: Rule Pakistan 2002 only - Oct Sun>=2 0:00 0 -
6636  {
6637  0 /*fromYear*/,
6638  0 /*toYear*/,
6639  1 /*inMonth*/,
6640  0 /*onDayOfWeek*/,
6641  1 /*onDayOfMonth*/,
6642  0 /*atTimeCode*/,
6643  0 /*atTimeModifier (kSuffixW + minute=0)*/,
6644  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
6645  '-' /*letter*/,
6646  },
6647  // Rule Pakistan 2002 only - Apr Sun>=2 0:00 1:00 S
6648  {
6649  2002 /*fromYear*/,
6650  2002 /*toYear*/,
6651  4 /*inMonth*/,
6652  7 /*onDayOfWeek*/,
6653  2 /*onDayOfMonth*/,
6654  0 /*atTimeCode*/,
6655  0 /*atTimeModifier (kSuffixW + minute=0)*/,
6656  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
6657  'S' /*letter*/,
6658  },
6659  // Rule Pakistan 2002 only - Oct Sun>=2 0:00 0 -
6660  {
6661  2002 /*fromYear*/,
6662  2002 /*toYear*/,
6663  10 /*inMonth*/,
6664  7 /*onDayOfWeek*/,
6665  2 /*onDayOfMonth*/,
6666  0 /*atTimeCode*/,
6667  0 /*atTimeModifier (kSuffixW + minute=0)*/,
6668  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
6669  '-' /*letter*/,
6670  },
6671  // Rule Pakistan 2008 only - Jun 1 0:00 1:00 S
6672  {
6673  2008 /*fromYear*/,
6674  2008 /*toYear*/,
6675  6 /*inMonth*/,
6676  0 /*onDayOfWeek*/,
6677  1 /*onDayOfMonth*/,
6678  0 /*atTimeCode*/,
6679  0 /*atTimeModifier (kSuffixW + minute=0)*/,
6680  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
6681  'S' /*letter*/,
6682  },
6683  // Rule Pakistan 2008 2009 - Nov 1 0:00 0 -
6684  {
6685  2008 /*fromYear*/,
6686  2009 /*toYear*/,
6687  11 /*inMonth*/,
6688  0 /*onDayOfWeek*/,
6689  1 /*onDayOfMonth*/,
6690  0 /*atTimeCode*/,
6691  0 /*atTimeModifier (kSuffixW + minute=0)*/,
6692  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
6693  '-' /*letter*/,
6694  },
6695  // Rule Pakistan 2009 only - Apr 15 0:00 1:00 S
6696  {
6697  2009 /*fromYear*/,
6698  2009 /*toYear*/,
6699  4 /*inMonth*/,
6700  0 /*onDayOfWeek*/,
6701  15 /*onDayOfMonth*/,
6702  0 /*atTimeCode*/,
6703  0 /*atTimeModifier (kSuffixW + minute=0)*/,
6704  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
6705  'S' /*letter*/,
6706  },
6707 
6708 };
6709 
6710 
6711 
6712 const extended::ZonePolicy kZonePolicyPakistan ACE_TIME_PROGMEM = {
6713  kZoneRulesPakistan /*rules*/,
6714  nullptr /*letters*/,
6715  6 /*numRules*/,
6716  0 /*numLetters*/,
6717 };
6718 
6719 //---------------------------------------------------------------------------
6720 // Policy name: Palestine
6721 // Rules: 33
6722 // Memory (8-bit): 369
6723 // Memory (32-bit): 408
6724 //---------------------------------------------------------------------------
6725 
6726 static const extended::ZoneRule kZoneRulesPalestine[] ACE_TIME_PROGMEM = {
6727  // Anchor: Rule Palestine 1999 2003 - Oct Fri>=15 0:00 0 -
6728  {
6729  0 /*fromYear*/,
6730  0 /*toYear*/,
6731  1 /*inMonth*/,
6732  0 /*onDayOfWeek*/,
6733  1 /*onDayOfMonth*/,
6734  0 /*atTimeCode*/,
6735  0 /*atTimeModifier (kSuffixW + minute=0)*/,
6736  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
6737  '-' /*letter*/,
6738  },
6739  // Rule Palestine 1999 2005 - Apr Fri>=15 0:00 1:00 S
6740  {
6741  1999 /*fromYear*/,
6742  2005 /*toYear*/,
6743  4 /*inMonth*/,
6744  5 /*onDayOfWeek*/,
6745  15 /*onDayOfMonth*/,
6746  0 /*atTimeCode*/,
6747  0 /*atTimeModifier (kSuffixW + minute=0)*/,
6748  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
6749  'S' /*letter*/,
6750  },
6751  // Rule Palestine 1999 2003 - Oct Fri>=15 0:00 0 -
6752  {
6753  1999 /*fromYear*/,
6754  2003 /*toYear*/,
6755  10 /*inMonth*/,
6756  5 /*onDayOfWeek*/,
6757  15 /*onDayOfMonth*/,
6758  0 /*atTimeCode*/,
6759  0 /*atTimeModifier (kSuffixW + minute=0)*/,
6760  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
6761  '-' /*letter*/,
6762  },
6763  // Rule Palestine 2004 only - Oct 1 1:00 0 -
6764  {
6765  2004 /*fromYear*/,
6766  2004 /*toYear*/,
6767  10 /*inMonth*/,
6768  0 /*onDayOfWeek*/,
6769  1 /*onDayOfMonth*/,
6770  4 /*atTimeCode*/,
6771  0 /*atTimeModifier (kSuffixW + minute=0)*/,
6772  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
6773  '-' /*letter*/,
6774  },
6775  // Rule Palestine 2005 only - Oct 4 2:00 0 -
6776  {
6777  2005 /*fromYear*/,
6778  2005 /*toYear*/,
6779  10 /*inMonth*/,
6780  0 /*onDayOfWeek*/,
6781  4 /*onDayOfMonth*/,
6782  8 /*atTimeCode*/,
6783  0 /*atTimeModifier (kSuffixW + minute=0)*/,
6784  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
6785  '-' /*letter*/,
6786  },
6787  // Rule Palestine 2006 2007 - Apr 1 0:00 1:00 S
6788  {
6789  2006 /*fromYear*/,
6790  2007 /*toYear*/,
6791  4 /*inMonth*/,
6792  0 /*onDayOfWeek*/,
6793  1 /*onDayOfMonth*/,
6794  0 /*atTimeCode*/,
6795  0 /*atTimeModifier (kSuffixW + minute=0)*/,
6796  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
6797  'S' /*letter*/,
6798  },
6799  // Rule Palestine 2006 only - Sep 22 0:00 0 -
6800  {
6801  2006 /*fromYear*/,
6802  2006 /*toYear*/,
6803  9 /*inMonth*/,
6804  0 /*onDayOfWeek*/,
6805  22 /*onDayOfMonth*/,
6806  0 /*atTimeCode*/,
6807  0 /*atTimeModifier (kSuffixW + minute=0)*/,
6808  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
6809  '-' /*letter*/,
6810  },
6811  // Rule Palestine 2007 only - Sep 13 2:00 0 -
6812  {
6813  2007 /*fromYear*/,
6814  2007 /*toYear*/,
6815  9 /*inMonth*/,
6816  0 /*onDayOfWeek*/,
6817  13 /*onDayOfMonth*/,
6818  8 /*atTimeCode*/,
6819  0 /*atTimeModifier (kSuffixW + minute=0)*/,
6820  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
6821  '-' /*letter*/,
6822  },
6823  // Rule Palestine 2008 2009 - Mar lastFri 0:00 1:00 S
6824  {
6825  2008 /*fromYear*/,
6826  2009 /*toYear*/,
6827  3 /*inMonth*/,
6828  5 /*onDayOfWeek*/,
6829  0 /*onDayOfMonth*/,
6830  0 /*atTimeCode*/,
6831  0 /*atTimeModifier (kSuffixW + minute=0)*/,
6832  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
6833  'S' /*letter*/,
6834  },
6835  // Rule Palestine 2008 only - Sep 1 0:00 0 -
6836  {
6837  2008 /*fromYear*/,
6838  2008 /*toYear*/,
6839  9 /*inMonth*/,
6840  0 /*onDayOfWeek*/,
6841  1 /*onDayOfMonth*/,
6842  0 /*atTimeCode*/,
6843  0 /*atTimeModifier (kSuffixW + minute=0)*/,
6844  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
6845  '-' /*letter*/,
6846  },
6847  // Rule Palestine 2009 only - Sep 4 1:00 0 -
6848  {
6849  2009 /*fromYear*/,
6850  2009 /*toYear*/,
6851  9 /*inMonth*/,
6852  0 /*onDayOfWeek*/,
6853  4 /*onDayOfMonth*/,
6854  4 /*atTimeCode*/,
6855  0 /*atTimeModifier (kSuffixW + minute=0)*/,
6856  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
6857  '-' /*letter*/,
6858  },
6859  // Rule Palestine 2010 only - Mar 26 0:00 1:00 S
6860  {
6861  2010 /*fromYear*/,
6862  2010 /*toYear*/,
6863  3 /*inMonth*/,
6864  0 /*onDayOfWeek*/,
6865  26 /*onDayOfMonth*/,
6866  0 /*atTimeCode*/,
6867  0 /*atTimeModifier (kSuffixW + minute=0)*/,
6868  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
6869  'S' /*letter*/,
6870  },
6871  // Rule Palestine 2010 only - Aug 11 0:00 0 -
6872  {
6873  2010 /*fromYear*/,
6874  2010 /*toYear*/,
6875  8 /*inMonth*/,
6876  0 /*onDayOfWeek*/,
6877  11 /*onDayOfMonth*/,
6878  0 /*atTimeCode*/,
6879  0 /*atTimeModifier (kSuffixW + minute=0)*/,
6880  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
6881  '-' /*letter*/,
6882  },
6883  // Rule Palestine 2011 only - Apr 1 0:01 1:00 S
6884  {
6885  2011 /*fromYear*/,
6886  2011 /*toYear*/,
6887  4 /*inMonth*/,
6888  0 /*onDayOfWeek*/,
6889  1 /*onDayOfMonth*/,
6890  0 /*atTimeCode*/,
6891  1 /*atTimeModifier (kSuffixW + minute=1)*/,
6892  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
6893  'S' /*letter*/,
6894  },
6895  // Rule Palestine 2011 only - Aug 1 0:00 0 -
6896  {
6897  2011 /*fromYear*/,
6898  2011 /*toYear*/,
6899  8 /*inMonth*/,
6900  0 /*onDayOfWeek*/,
6901  1 /*onDayOfMonth*/,
6902  0 /*atTimeCode*/,
6903  0 /*atTimeModifier (kSuffixW + minute=0)*/,
6904  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
6905  '-' /*letter*/,
6906  },
6907  // Rule Palestine 2011 only - Aug 30 0:00 1:00 S
6908  {
6909  2011 /*fromYear*/,
6910  2011 /*toYear*/,
6911  8 /*inMonth*/,
6912  0 /*onDayOfWeek*/,
6913  30 /*onDayOfMonth*/,
6914  0 /*atTimeCode*/,
6915  0 /*atTimeModifier (kSuffixW + minute=0)*/,
6916  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
6917  'S' /*letter*/,
6918  },
6919  // Rule Palestine 2011 only - Sep 30 0:00 0 -
6920  {
6921  2011 /*fromYear*/,
6922  2011 /*toYear*/,
6923  9 /*inMonth*/,
6924  0 /*onDayOfWeek*/,
6925  30 /*onDayOfMonth*/,
6926  0 /*atTimeCode*/,
6927  0 /*atTimeModifier (kSuffixW + minute=0)*/,
6928  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
6929  '-' /*letter*/,
6930  },
6931  // Rule Palestine 2012 2014 - Mar lastThu 24:00 1:00 S
6932  {
6933  2012 /*fromYear*/,
6934  2014 /*toYear*/,
6935  3 /*inMonth*/,
6936  4 /*onDayOfWeek*/,
6937  0 /*onDayOfMonth*/,
6938  96 /*atTimeCode*/,
6939  0 /*atTimeModifier (kSuffixW + minute=0)*/,
6940  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
6941  'S' /*letter*/,
6942  },
6943  // Rule Palestine 2012 only - Sep 21 1:00 0 -
6944  {
6945  2012 /*fromYear*/,
6946  2012 /*toYear*/,
6947  9 /*inMonth*/,
6948  0 /*onDayOfWeek*/,
6949  21 /*onDayOfMonth*/,
6950  4 /*atTimeCode*/,
6951  0 /*atTimeModifier (kSuffixW + minute=0)*/,
6952  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
6953  '-' /*letter*/,
6954  },
6955  // Rule Palestine 2013 only - Sep 27 0:00 0 -
6956  {
6957  2013 /*fromYear*/,
6958  2013 /*toYear*/,
6959  9 /*inMonth*/,
6960  0 /*onDayOfWeek*/,
6961  27 /*onDayOfMonth*/,
6962  0 /*atTimeCode*/,
6963  0 /*atTimeModifier (kSuffixW + minute=0)*/,
6964  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
6965  '-' /*letter*/,
6966  },
6967  // Rule Palestine 2014 only - Oct 24 0:00 0 -
6968  {
6969  2014 /*fromYear*/,
6970  2014 /*toYear*/,
6971  10 /*inMonth*/,
6972  0 /*onDayOfWeek*/,
6973  24 /*onDayOfMonth*/,
6974  0 /*atTimeCode*/,
6975  0 /*atTimeModifier (kSuffixW + minute=0)*/,
6976  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
6977  '-' /*letter*/,
6978  },
6979  // Rule Palestine 2015 only - Mar 28 0:00 1:00 S
6980  {
6981  2015 /*fromYear*/,
6982  2015 /*toYear*/,
6983  3 /*inMonth*/,
6984  0 /*onDayOfWeek*/,
6985  28 /*onDayOfMonth*/,
6986  0 /*atTimeCode*/,
6987  0 /*atTimeModifier (kSuffixW + minute=0)*/,
6988  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
6989  'S' /*letter*/,
6990  },
6991  // Rule Palestine 2015 only - Oct 23 1:00 0 -
6992  {
6993  2015 /*fromYear*/,
6994  2015 /*toYear*/,
6995  10 /*inMonth*/,
6996  0 /*onDayOfWeek*/,
6997  23 /*onDayOfMonth*/,
6998  4 /*atTimeCode*/,
6999  0 /*atTimeModifier (kSuffixW + minute=0)*/,
7000  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
7001  '-' /*letter*/,
7002  },
7003  // Rule Palestine 2016 2018 - Mar Sat<=30 1:00 1:00 S
7004  {
7005  2016 /*fromYear*/,
7006  2018 /*toYear*/,
7007  3 /*inMonth*/,
7008  6 /*onDayOfWeek*/,
7009  -30 /*onDayOfMonth*/,
7010  4 /*atTimeCode*/,
7011  0 /*atTimeModifier (kSuffixW + minute=0)*/,
7012  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
7013  'S' /*letter*/,
7014  },
7015  // Rule Palestine 2016 2018 - Oct Sat<=30 1:00 0 -
7016  {
7017  2016 /*fromYear*/,
7018  2018 /*toYear*/,
7019  10 /*inMonth*/,
7020  6 /*onDayOfWeek*/,
7021  -30 /*onDayOfMonth*/,
7022  4 /*atTimeCode*/,
7023  0 /*atTimeModifier (kSuffixW + minute=0)*/,
7024  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
7025  '-' /*letter*/,
7026  },
7027  // Rule Palestine 2019 only - Mar 29 0:00 1:00 S
7028  {
7029  2019 /*fromYear*/,
7030  2019 /*toYear*/,
7031  3 /*inMonth*/,
7032  0 /*onDayOfWeek*/,
7033  29 /*onDayOfMonth*/,
7034  0 /*atTimeCode*/,
7035  0 /*atTimeModifier (kSuffixW + minute=0)*/,
7036  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
7037  'S' /*letter*/,
7038  },
7039  // Rule Palestine 2019 only - Oct Sat<=30 0:00 0 -
7040  {
7041  2019 /*fromYear*/,
7042  2019 /*toYear*/,
7043  10 /*inMonth*/,
7044  6 /*onDayOfWeek*/,
7045  -30 /*onDayOfMonth*/,
7046  0 /*atTimeCode*/,
7047  0 /*atTimeModifier (kSuffixW + minute=0)*/,
7048  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
7049  '-' /*letter*/,
7050  },
7051  // Rule Palestine 2020 2021 - Mar Sat<=30 0:00 1:00 S
7052  {
7053  2020 /*fromYear*/,
7054  2021 /*toYear*/,
7055  3 /*inMonth*/,
7056  6 /*onDayOfWeek*/,
7057  -30 /*onDayOfMonth*/,
7058  0 /*atTimeCode*/,
7059  0 /*atTimeModifier (kSuffixW + minute=0)*/,
7060  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
7061  'S' /*letter*/,
7062  },
7063  // Rule Palestine 2020 only - Oct 24 1:00 0 -
7064  {
7065  2020 /*fromYear*/,
7066  2020 /*toYear*/,
7067  10 /*inMonth*/,
7068  0 /*onDayOfWeek*/,
7069  24 /*onDayOfMonth*/,
7070  4 /*atTimeCode*/,
7071  0 /*atTimeModifier (kSuffixW + minute=0)*/,
7072  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
7073  '-' /*letter*/,
7074  },
7075  // Rule Palestine 2021 only - Oct 29 1:00 0 -
7076  {
7077  2021 /*fromYear*/,
7078  2021 /*toYear*/,
7079  10 /*inMonth*/,
7080  0 /*onDayOfWeek*/,
7081  29 /*onDayOfMonth*/,
7082  4 /*atTimeCode*/,
7083  0 /*atTimeModifier (kSuffixW + minute=0)*/,
7084  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
7085  '-' /*letter*/,
7086  },
7087  // Rule Palestine 2022 only - Mar 27 0:00 1:00 S
7088  {
7089  2022 /*fromYear*/,
7090  2022 /*toYear*/,
7091  3 /*inMonth*/,
7092  0 /*onDayOfWeek*/,
7093  27 /*onDayOfMonth*/,
7094  0 /*atTimeCode*/,
7095  0 /*atTimeModifier (kSuffixW + minute=0)*/,
7096  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
7097  'S' /*letter*/,
7098  },
7099  // Rule Palestine 2022 max - Oct Sat<=30 2:00 0 -
7100  {
7101  2022 /*fromYear*/,
7102  9999 /*toYear*/,
7103  10 /*inMonth*/,
7104  6 /*onDayOfWeek*/,
7105  -30 /*onDayOfMonth*/,
7106  8 /*atTimeCode*/,
7107  0 /*atTimeModifier (kSuffixW + minute=0)*/,
7108  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
7109  '-' /*letter*/,
7110  },
7111  // Rule Palestine 2023 max - Mar Sat<=30 2:00 1:00 S
7112  {
7113  2023 /*fromYear*/,
7114  9999 /*toYear*/,
7115  3 /*inMonth*/,
7116  6 /*onDayOfWeek*/,
7117  -30 /*onDayOfMonth*/,
7118  8 /*atTimeCode*/,
7119  0 /*atTimeModifier (kSuffixW + minute=0)*/,
7120  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
7121  'S' /*letter*/,
7122  },
7123 
7124 };
7125 
7126 
7127 
7128 const extended::ZonePolicy kZonePolicyPalestine ACE_TIME_PROGMEM = {
7129  kZoneRulesPalestine /*rules*/,
7130  nullptr /*letters*/,
7131  33 /*numRules*/,
7132  0 /*numLetters*/,
7133 };
7134 
7135 //---------------------------------------------------------------------------
7136 // Policy name: Para
7137 // Rules: 10
7138 // Memory (8-bit): 116
7139 // Memory (32-bit): 132
7140 //---------------------------------------------------------------------------
7141 
7142 static const extended::ZoneRule kZoneRulesPara[] ACE_TIME_PROGMEM = {
7143  // Rule Para 1996 2001 - Oct Sun>=1 0:00 1:00 -
7144  {
7145  1996 /*fromYear*/,
7146  2001 /*toYear*/,
7147  10 /*inMonth*/,
7148  7 /*onDayOfWeek*/,
7149  1 /*onDayOfMonth*/,
7150  0 /*atTimeCode*/,
7151  0 /*atTimeModifier (kSuffixW + minute=0)*/,
7152  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
7153  '-' /*letter*/,
7154  },
7155  // Rule Para 1997 only - Feb lastSun 0:00 0 -
7156  {
7157  1997 /*fromYear*/,
7158  1997 /*toYear*/,
7159  2 /*inMonth*/,
7160  7 /*onDayOfWeek*/,
7161  0 /*onDayOfMonth*/,
7162  0 /*atTimeCode*/,
7163  0 /*atTimeModifier (kSuffixW + minute=0)*/,
7164  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
7165  '-' /*letter*/,
7166  },
7167  // Rule Para 1998 2001 - Mar Sun>=1 0:00 0 -
7168  {
7169  1998 /*fromYear*/,
7170  2001 /*toYear*/,
7171  3 /*inMonth*/,
7172  7 /*onDayOfWeek*/,
7173  1 /*onDayOfMonth*/,
7174  0 /*atTimeCode*/,
7175  0 /*atTimeModifier (kSuffixW + minute=0)*/,
7176  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
7177  '-' /*letter*/,
7178  },
7179  // Rule Para 2002 2004 - Apr Sun>=1 0:00 0 -
7180  {
7181  2002 /*fromYear*/,
7182  2004 /*toYear*/,
7183  4 /*inMonth*/,
7184  7 /*onDayOfWeek*/,
7185  1 /*onDayOfMonth*/,
7186  0 /*atTimeCode*/,
7187  0 /*atTimeModifier (kSuffixW + minute=0)*/,
7188  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
7189  '-' /*letter*/,
7190  },
7191  // Rule Para 2002 2003 - Sep Sun>=1 0:00 1:00 -
7192  {
7193  2002 /*fromYear*/,
7194  2003 /*toYear*/,
7195  9 /*inMonth*/,
7196  7 /*onDayOfWeek*/,
7197  1 /*onDayOfMonth*/,
7198  0 /*atTimeCode*/,
7199  0 /*atTimeModifier (kSuffixW + minute=0)*/,
7200  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
7201  '-' /*letter*/,
7202  },
7203  // Rule Para 2004 2009 - Oct Sun>=15 0:00 1:00 -
7204  {
7205  2004 /*fromYear*/,
7206  2009 /*toYear*/,
7207  10 /*inMonth*/,
7208  7 /*onDayOfWeek*/,
7209  15 /*onDayOfMonth*/,
7210  0 /*atTimeCode*/,
7211  0 /*atTimeModifier (kSuffixW + minute=0)*/,
7212  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
7213  '-' /*letter*/,
7214  },
7215  // Rule Para 2005 2009 - Mar Sun>=8 0:00 0 -
7216  {
7217  2005 /*fromYear*/,
7218  2009 /*toYear*/,
7219  3 /*inMonth*/,
7220  7 /*onDayOfWeek*/,
7221  8 /*onDayOfMonth*/,
7222  0 /*atTimeCode*/,
7223  0 /*atTimeModifier (kSuffixW + minute=0)*/,
7224  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
7225  '-' /*letter*/,
7226  },
7227  // Rule Para 2010 max - Oct Sun>=1 0:00 1:00 -
7228  {
7229  2010 /*fromYear*/,
7230  9999 /*toYear*/,
7231  10 /*inMonth*/,
7232  7 /*onDayOfWeek*/,
7233  1 /*onDayOfMonth*/,
7234  0 /*atTimeCode*/,
7235  0 /*atTimeModifier (kSuffixW + minute=0)*/,
7236  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
7237  '-' /*letter*/,
7238  },
7239  // Rule Para 2010 2012 - Apr Sun>=8 0:00 0 -
7240  {
7241  2010 /*fromYear*/,
7242  2012 /*toYear*/,
7243  4 /*inMonth*/,
7244  7 /*onDayOfWeek*/,
7245  8 /*onDayOfMonth*/,
7246  0 /*atTimeCode*/,
7247  0 /*atTimeModifier (kSuffixW + minute=0)*/,
7248  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
7249  '-' /*letter*/,
7250  },
7251  // Rule Para 2013 max - Mar Sun>=22 0:00 0 -
7252  {
7253  2013 /*fromYear*/,
7254  9999 /*toYear*/,
7255  3 /*inMonth*/,
7256  7 /*onDayOfWeek*/,
7257  22 /*onDayOfMonth*/,
7258  0 /*atTimeCode*/,
7259  0 /*atTimeModifier (kSuffixW + minute=0)*/,
7260  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
7261  '-' /*letter*/,
7262  },
7263 
7264 };
7265 
7266 
7267 
7268 const extended::ZonePolicy kZonePolicyPara ACE_TIME_PROGMEM = {
7269  kZoneRulesPara /*rules*/,
7270  nullptr /*letters*/,
7271  10 /*numRules*/,
7272  0 /*numLetters*/,
7273 };
7274 
7275 //---------------------------------------------------------------------------
7276 // Policy name: Peru
7277 // Rules: 1
7278 // Memory (8-bit): 17
7279 // Memory (32-bit): 24
7280 //---------------------------------------------------------------------------
7281 
7282 static const extended::ZoneRule kZoneRulesPeru[] ACE_TIME_PROGMEM = {
7283  // Rule Peru 1994 only - Apr 1 0:00 0 -
7284  {
7285  1994 /*fromYear*/,
7286  1994 /*toYear*/,
7287  4 /*inMonth*/,
7288  0 /*onDayOfWeek*/,
7289  1 /*onDayOfMonth*/,
7290  0 /*atTimeCode*/,
7291  0 /*atTimeModifier (kSuffixW + minute=0)*/,
7292  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
7293  '-' /*letter*/,
7294  },
7295 
7296 };
7297 
7298 
7299 
7300 const extended::ZonePolicy kZonePolicyPeru ACE_TIME_PROGMEM = {
7301  kZoneRulesPeru /*rules*/,
7302  nullptr /*letters*/,
7303  1 /*numRules*/,
7304  0 /*numLetters*/,
7305 };
7306 
7307 //---------------------------------------------------------------------------
7308 // Policy name: Phil
7309 // Rules: 1
7310 // Memory (8-bit): 17
7311 // Memory (32-bit): 24
7312 //---------------------------------------------------------------------------
7313 
7314 static const extended::ZoneRule kZoneRulesPhil[] ACE_TIME_PROGMEM = {
7315  // Rule Phil 1978 only - Sep 21 0:00 0 S
7316  {
7317  1978 /*fromYear*/,
7318  1978 /*toYear*/,
7319  9 /*inMonth*/,
7320  0 /*onDayOfWeek*/,
7321  21 /*onDayOfMonth*/,
7322  0 /*atTimeCode*/,
7323  0 /*atTimeModifier (kSuffixW + minute=0)*/,
7324  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
7325  'S' /*letter*/,
7326  },
7327 
7328 };
7329 
7330 
7331 
7332 const extended::ZonePolicy kZonePolicyPhil ACE_TIME_PROGMEM = {
7333  kZoneRulesPhil /*rules*/,
7334  nullptr /*letters*/,
7335  1 /*numRules*/,
7336  0 /*numLetters*/,
7337 };
7338 
7339 //---------------------------------------------------------------------------
7340 // Policy name: ROK
7341 // Rules: 1
7342 // Memory (8-bit): 17
7343 // Memory (32-bit): 24
7344 //---------------------------------------------------------------------------
7345 
7346 static const extended::ZoneRule kZoneRulesROK[] ACE_TIME_PROGMEM = {
7347  // Rule ROK 1987 1988 - Oct Sun>=8 3:00 0 S
7348  {
7349  1987 /*fromYear*/,
7350  1988 /*toYear*/,
7351  10 /*inMonth*/,
7352  7 /*onDayOfWeek*/,
7353  8 /*onDayOfMonth*/,
7354  12 /*atTimeCode*/,
7355  0 /*atTimeModifier (kSuffixW + minute=0)*/,
7356  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
7357  'S' /*letter*/,
7358  },
7359 
7360 };
7361 
7362 
7363 
7364 const extended::ZonePolicy kZonePolicyROK ACE_TIME_PROGMEM = {
7365  kZoneRulesROK /*rules*/,
7366  nullptr /*letters*/,
7367  1 /*numRules*/,
7368  0 /*numLetters*/,
7369 };
7370 
7371 //---------------------------------------------------------------------------
7372 // Policy name: Russia
7373 // Rules: 3
7374 // Memory (8-bit): 39
7375 // Memory (32-bit): 48
7376 //---------------------------------------------------------------------------
7377 
7378 static const extended::ZoneRule kZoneRulesRussia[] ACE_TIME_PROGMEM = {
7379  // Rule Russia 1984 1995 - Sep lastSun 2:00s 0 -
7380  {
7381  1984 /*fromYear*/,
7382  1995 /*toYear*/,
7383  9 /*inMonth*/,
7384  7 /*onDayOfWeek*/,
7385  0 /*onDayOfMonth*/,
7386  8 /*atTimeCode*/,
7387  16 /*atTimeModifier (kSuffixS + minute=0)*/,
7388  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
7389  '-' /*letter*/,
7390  },
7391  // Rule Russia 1985 2010 - Mar lastSun 2:00s 1:00 S
7392  {
7393  1985 /*fromYear*/,
7394  2010 /*toYear*/,
7395  3 /*inMonth*/,
7396  7 /*onDayOfWeek*/,
7397  0 /*onDayOfMonth*/,
7398  8 /*atTimeCode*/,
7399  16 /*atTimeModifier (kSuffixS + minute=0)*/,
7400  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
7401  'S' /*letter*/,
7402  },
7403  // Rule Russia 1996 2010 - Oct lastSun 2:00s 0 -
7404  {
7405  1996 /*fromYear*/,
7406  2010 /*toYear*/,
7407  10 /*inMonth*/,
7408  7 /*onDayOfWeek*/,
7409  0 /*onDayOfMonth*/,
7410  8 /*atTimeCode*/,
7411  16 /*atTimeModifier (kSuffixS + minute=0)*/,
7412  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
7413  '-' /*letter*/,
7414  },
7415 
7416 };
7417 
7418 
7419 
7420 const extended::ZonePolicy kZonePolicyRussia ACE_TIME_PROGMEM = {
7421  kZoneRulesRussia /*rules*/,
7422  nullptr /*letters*/,
7423  3 /*numRules*/,
7424  0 /*numLetters*/,
7425 };
7426 
7427 //---------------------------------------------------------------------------
7428 // Policy name: RussiaAsia
7429 // Rules: 3
7430 // Memory (8-bit): 39
7431 // Memory (32-bit): 48
7432 //---------------------------------------------------------------------------
7433 
7434 static const extended::ZoneRule kZoneRulesRussiaAsia[] ACE_TIME_PROGMEM = {
7435  // Rule RussiaAsia 1984 1995 - Sep lastSun 2:00s 0 -
7436  {
7437  1984 /*fromYear*/,
7438  1995 /*toYear*/,
7439  9 /*inMonth*/,
7440  7 /*onDayOfWeek*/,
7441  0 /*onDayOfMonth*/,
7442  8 /*atTimeCode*/,
7443  16 /*atTimeModifier (kSuffixS + minute=0)*/,
7444  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
7445  '-' /*letter*/,
7446  },
7447  // Rule RussiaAsia 1985 2010 - Mar lastSun 2:00s 1:00 -
7448  {
7449  1985 /*fromYear*/,
7450  2010 /*toYear*/,
7451  3 /*inMonth*/,
7452  7 /*onDayOfWeek*/,
7453  0 /*onDayOfMonth*/,
7454  8 /*atTimeCode*/,
7455  16 /*atTimeModifier (kSuffixS + minute=0)*/,
7456  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
7457  '-' /*letter*/,
7458  },
7459  // Rule RussiaAsia 1996 2010 - Oct lastSun 2:00s 0 -
7460  {
7461  1996 /*fromYear*/,
7462  2010 /*toYear*/,
7463  10 /*inMonth*/,
7464  7 /*onDayOfWeek*/,
7465  0 /*onDayOfMonth*/,
7466  8 /*atTimeCode*/,
7467  16 /*atTimeModifier (kSuffixS + minute=0)*/,
7468  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
7469  '-' /*letter*/,
7470  },
7471 
7472 };
7473 
7474 
7475 
7476 const extended::ZonePolicy kZonePolicyRussiaAsia ACE_TIME_PROGMEM = {
7477  kZoneRulesRussiaAsia /*rules*/,
7478  nullptr /*letters*/,
7479  3 /*numRules*/,
7480  0 /*numLetters*/,
7481 };
7482 
7483 //---------------------------------------------------------------------------
7484 // Policy name: SA
7485 // Rules: 1
7486 // Memory (8-bit): 17
7487 // Memory (32-bit): 24
7488 //---------------------------------------------------------------------------
7489 
7490 static const extended::ZoneRule kZoneRulesSA[] ACE_TIME_PROGMEM = {
7491  // Rule SA 1943 1944 - Mar Sun>=15 2:00 0 -
7492  {
7493  1943 /*fromYear*/,
7494  1944 /*toYear*/,
7495  3 /*inMonth*/,
7496  7 /*onDayOfWeek*/,
7497  15 /*onDayOfMonth*/,
7498  8 /*atTimeCode*/,
7499  0 /*atTimeModifier (kSuffixW + minute=0)*/,
7500  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
7501  '-' /*letter*/,
7502  },
7503 
7504 };
7505 
7506 
7507 
7508 const extended::ZonePolicy kZonePolicySA ACE_TIME_PROGMEM = {
7509  kZoneRulesSA /*rules*/,
7510  nullptr /*letters*/,
7511  1 /*numRules*/,
7512  0 /*numLetters*/,
7513 };
7514 
7515 //---------------------------------------------------------------------------
7516 // Policy name: Salv
7517 // Rules: 1
7518 // Memory (8-bit): 17
7519 // Memory (32-bit): 24
7520 //---------------------------------------------------------------------------
7521 
7522 static const extended::ZoneRule kZoneRulesSalv[] ACE_TIME_PROGMEM = {
7523  // Rule Salv 1987 1988 - Sep lastSun 0:00 0 S
7524  {
7525  1987 /*fromYear*/,
7526  1988 /*toYear*/,
7527  9 /*inMonth*/,
7528  7 /*onDayOfWeek*/,
7529  0 /*onDayOfMonth*/,
7530  0 /*atTimeCode*/,
7531  0 /*atTimeModifier (kSuffixW + minute=0)*/,
7532  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
7533  'S' /*letter*/,
7534  },
7535 
7536 };
7537 
7538 
7539 
7540 const extended::ZonePolicy kZonePolicySalv ACE_TIME_PROGMEM = {
7541  kZoneRulesSalv /*rules*/,
7542  nullptr /*letters*/,
7543  1 /*numRules*/,
7544  0 /*numLetters*/,
7545 };
7546 
7547 //---------------------------------------------------------------------------
7548 // Policy name: SanLuis
7549 // Rules: 3
7550 // Memory (8-bit): 39
7551 // Memory (32-bit): 48
7552 //---------------------------------------------------------------------------
7553 
7554 static const extended::ZoneRule kZoneRulesSanLuis[] ACE_TIME_PROGMEM = {
7555  // Anchor: Rule SanLuis 2008 2009 - Mar Sun>=8 0:00 0 -
7556  {
7557  0 /*fromYear*/,
7558  0 /*toYear*/,
7559  1 /*inMonth*/,
7560  0 /*onDayOfWeek*/,
7561  1 /*onDayOfMonth*/,
7562  0 /*atTimeCode*/,
7563  0 /*atTimeModifier (kSuffixW + minute=0)*/,
7564  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
7565  '-' /*letter*/,
7566  },
7567  // Rule SanLuis 2008 2009 - Mar Sun>=8 0:00 0 -
7568  {
7569  2008 /*fromYear*/,
7570  2009 /*toYear*/,
7571  3 /*inMonth*/,
7572  7 /*onDayOfWeek*/,
7573  8 /*onDayOfMonth*/,
7574  0 /*atTimeCode*/,
7575  0 /*atTimeModifier (kSuffixW + minute=0)*/,
7576  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
7577  '-' /*letter*/,
7578  },
7579  // Rule SanLuis 2007 2008 - Oct Sun>=8 0:00 1:00 -
7580  {
7581  2007 /*fromYear*/,
7582  2008 /*toYear*/,
7583  10 /*inMonth*/,
7584  7 /*onDayOfWeek*/,
7585  8 /*onDayOfMonth*/,
7586  0 /*atTimeCode*/,
7587  0 /*atTimeModifier (kSuffixW + minute=0)*/,
7588  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
7589  '-' /*letter*/,
7590  },
7591 
7592 };
7593 
7594 
7595 
7596 const extended::ZonePolicy kZonePolicySanLuis ACE_TIME_PROGMEM = {
7597  kZoneRulesSanLuis /*rules*/,
7598  nullptr /*letters*/,
7599  3 /*numRules*/,
7600  0 /*numLetters*/,
7601 };
7602 
7603 //---------------------------------------------------------------------------
7604 // Policy name: StJohns
7605 // Rules: 5
7606 // Memory (8-bit): 66
7607 // Memory (32-bit): 79
7608 //---------------------------------------------------------------------------
7609 
7610 static const extended::ZoneRule kZoneRulesStJohns[] ACE_TIME_PROGMEM = {
7611  // Rule StJohns 1987 2006 - Oct lastSun 0:01 0 S
7612  {
7613  1987 /*fromYear*/,
7614  2006 /*toYear*/,
7615  10 /*inMonth*/,
7616  7 /*onDayOfWeek*/,
7617  0 /*onDayOfMonth*/,
7618  0 /*atTimeCode*/,
7619  1 /*atTimeModifier (kSuffixW + minute=1)*/,
7620  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
7621  'S' /*letter*/,
7622  },
7623  // Rule StJohns 1988 only - Apr Sun>=1 0:01 2:00 DD
7624  {
7625  1988 /*fromYear*/,
7626  1988 /*toYear*/,
7627  4 /*inMonth*/,
7628  7 /*onDayOfWeek*/,
7629  1 /*onDayOfMonth*/,
7630  0 /*atTimeCode*/,
7631  1 /*atTimeModifier (kSuffixW + minute=1)*/,
7632  12 /*deltaCode ((deltaMinutes=120)/15 + 4)*/,
7633  0 /*letter (index to "DD")*/,
7634  },
7635  // Rule StJohns 1989 2006 - Apr Sun>=1 0:01 1:00 D
7636  {
7637  1989 /*fromYear*/,
7638  2006 /*toYear*/,
7639  4 /*inMonth*/,
7640  7 /*onDayOfWeek*/,
7641  1 /*onDayOfMonth*/,
7642  0 /*atTimeCode*/,
7643  1 /*atTimeModifier (kSuffixW + minute=1)*/,
7644  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
7645  'D' /*letter*/,
7646  },
7647  // Rule StJohns 2007 2011 - Mar Sun>=8 0:01 1:00 D
7648  {
7649  2007 /*fromYear*/,
7650  2011 /*toYear*/,
7651  3 /*inMonth*/,
7652  7 /*onDayOfWeek*/,
7653  8 /*onDayOfMonth*/,
7654  0 /*atTimeCode*/,
7655  1 /*atTimeModifier (kSuffixW + minute=1)*/,
7656  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
7657  'D' /*letter*/,
7658  },
7659  // Rule StJohns 2007 2010 - Nov Sun>=1 0:01 0 S
7660  {
7661  2007 /*fromYear*/,
7662  2010 /*toYear*/,
7663  11 /*inMonth*/,
7664  7 /*onDayOfWeek*/,
7665  1 /*onDayOfMonth*/,
7666  0 /*atTimeCode*/,
7667  1 /*atTimeModifier (kSuffixW + minute=1)*/,
7668  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
7669  'S' /*letter*/,
7670  },
7671 
7672 };
7673 
7674 static const char* const kLettersStJohns[] ACE_TIME_PROGMEM = {
7675  /*0*/ "DD",
7676 
7677 };
7678 
7679 
7680 const extended::ZonePolicy kZonePolicyStJohns ACE_TIME_PROGMEM = {
7681  kZoneRulesStJohns /*rules*/,
7682  kLettersStJohns /*letters*/,
7683  5 /*numRules*/,
7684  1 /*numLetters*/,
7685 };
7686 
7687 //---------------------------------------------------------------------------
7688 // Policy name: Sudan
7689 // Rules: 1
7690 // Memory (8-bit): 17
7691 // Memory (32-bit): 24
7692 //---------------------------------------------------------------------------
7693 
7694 static const extended::ZoneRule kZoneRulesSudan[] ACE_TIME_PROGMEM = {
7695  // Rule Sudan 1970 1985 - Oct 15 0:00 0 -
7696  {
7697  1970 /*fromYear*/,
7698  1985 /*toYear*/,
7699  10 /*inMonth*/,
7700  0 /*onDayOfWeek*/,
7701  15 /*onDayOfMonth*/,
7702  0 /*atTimeCode*/,
7703  0 /*atTimeModifier (kSuffixW + minute=0)*/,
7704  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
7705  '-' /*letter*/,
7706  },
7707 
7708 };
7709 
7710 
7711 
7712 const extended::ZonePolicy kZonePolicySudan ACE_TIME_PROGMEM = {
7713  kZoneRulesSudan /*rules*/,
7714  nullptr /*letters*/,
7715  1 /*numRules*/,
7716  0 /*numLetters*/,
7717 };
7718 
7719 //---------------------------------------------------------------------------
7720 // Policy name: Syria
7721 // Rules: 12
7722 // Memory (8-bit): 138
7723 // Memory (32-bit): 156
7724 //---------------------------------------------------------------------------
7725 
7726 static const extended::ZoneRule kZoneRulesSyria[] ACE_TIME_PROGMEM = {
7727  // Rule Syria 1994 2005 - Oct 1 0:00 0 -
7728  {
7729  1994 /*fromYear*/,
7730  2005 /*toYear*/,
7731  10 /*inMonth*/,
7732  0 /*onDayOfWeek*/,
7733  1 /*onDayOfMonth*/,
7734  0 /*atTimeCode*/,
7735  0 /*atTimeModifier (kSuffixW + minute=0)*/,
7736  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
7737  '-' /*letter*/,
7738  },
7739  // Rule Syria 1997 1998 - Mar lastMon 0:00 1:00 S
7740  {
7741  1997 /*fromYear*/,
7742  1998 /*toYear*/,
7743  3 /*inMonth*/,
7744  1 /*onDayOfWeek*/,
7745  0 /*onDayOfMonth*/,
7746  0 /*atTimeCode*/,
7747  0 /*atTimeModifier (kSuffixW + minute=0)*/,
7748  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
7749  'S' /*letter*/,
7750  },
7751  // Rule Syria 1999 2006 - Apr 1 0:00 1:00 S
7752  {
7753  1999 /*fromYear*/,
7754  2006 /*toYear*/,
7755  4 /*inMonth*/,
7756  0 /*onDayOfWeek*/,
7757  1 /*onDayOfMonth*/,
7758  0 /*atTimeCode*/,
7759  0 /*atTimeModifier (kSuffixW + minute=0)*/,
7760  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
7761  'S' /*letter*/,
7762  },
7763  // Rule Syria 2006 only - Sep 22 0:00 0 -
7764  {
7765  2006 /*fromYear*/,
7766  2006 /*toYear*/,
7767  9 /*inMonth*/,
7768  0 /*onDayOfWeek*/,
7769  22 /*onDayOfMonth*/,
7770  0 /*atTimeCode*/,
7771  0 /*atTimeModifier (kSuffixW + minute=0)*/,
7772  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
7773  '-' /*letter*/,
7774  },
7775  // Rule Syria 2007 only - Mar lastFri 0:00 1:00 S
7776  {
7777  2007 /*fromYear*/,
7778  2007 /*toYear*/,
7779  3 /*inMonth*/,
7780  5 /*onDayOfWeek*/,
7781  0 /*onDayOfMonth*/,
7782  0 /*atTimeCode*/,
7783  0 /*atTimeModifier (kSuffixW + minute=0)*/,
7784  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
7785  'S' /*letter*/,
7786  },
7787  // Rule Syria 2007 only - Nov Fri>=1 0:00 0 -
7788  {
7789  2007 /*fromYear*/,
7790  2007 /*toYear*/,
7791  11 /*inMonth*/,
7792  5 /*onDayOfWeek*/,
7793  1 /*onDayOfMonth*/,
7794  0 /*atTimeCode*/,
7795  0 /*atTimeModifier (kSuffixW + minute=0)*/,
7796  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
7797  '-' /*letter*/,
7798  },
7799  // Rule Syria 2008 only - Apr Fri>=1 0:00 1:00 S
7800  {
7801  2008 /*fromYear*/,
7802  2008 /*toYear*/,
7803  4 /*inMonth*/,
7804  5 /*onDayOfWeek*/,
7805  1 /*onDayOfMonth*/,
7806  0 /*atTimeCode*/,
7807  0 /*atTimeModifier (kSuffixW + minute=0)*/,
7808  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
7809  'S' /*letter*/,
7810  },
7811  // Rule Syria 2008 only - Nov 1 0:00 0 -
7812  {
7813  2008 /*fromYear*/,
7814  2008 /*toYear*/,
7815  11 /*inMonth*/,
7816  0 /*onDayOfWeek*/,
7817  1 /*onDayOfMonth*/,
7818  0 /*atTimeCode*/,
7819  0 /*atTimeModifier (kSuffixW + minute=0)*/,
7820  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
7821  '-' /*letter*/,
7822  },
7823  // Rule Syria 2009 only - Mar lastFri 0:00 1:00 S
7824  {
7825  2009 /*fromYear*/,
7826  2009 /*toYear*/,
7827  3 /*inMonth*/,
7828  5 /*onDayOfWeek*/,
7829  0 /*onDayOfMonth*/,
7830  0 /*atTimeCode*/,
7831  0 /*atTimeModifier (kSuffixW + minute=0)*/,
7832  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
7833  'S' /*letter*/,
7834  },
7835  // Rule Syria 2010 2011 - Apr Fri>=1 0:00 1:00 S
7836  {
7837  2010 /*fromYear*/,
7838  2011 /*toYear*/,
7839  4 /*inMonth*/,
7840  5 /*onDayOfWeek*/,
7841  1 /*onDayOfMonth*/,
7842  0 /*atTimeCode*/,
7843  0 /*atTimeModifier (kSuffixW + minute=0)*/,
7844  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
7845  'S' /*letter*/,
7846  },
7847  // Rule Syria 2012 2022 - Mar lastFri 0:00 1:00 S
7848  {
7849  2012 /*fromYear*/,
7850  2022 /*toYear*/,
7851  3 /*inMonth*/,
7852  5 /*onDayOfWeek*/,
7853  0 /*onDayOfMonth*/,
7854  0 /*atTimeCode*/,
7855  0 /*atTimeModifier (kSuffixW + minute=0)*/,
7856  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
7857  'S' /*letter*/,
7858  },
7859  // Rule Syria 2009 2022 - Oct lastFri 0:00 0 -
7860  {
7861  2009 /*fromYear*/,
7862  2022 /*toYear*/,
7863  10 /*inMonth*/,
7864  5 /*onDayOfWeek*/,
7865  0 /*onDayOfMonth*/,
7866  0 /*atTimeCode*/,
7867  0 /*atTimeModifier (kSuffixW + minute=0)*/,
7868  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
7869  '-' /*letter*/,
7870  },
7871 
7872 };
7873 
7874 
7875 
7876 const extended::ZonePolicy kZonePolicySyria ACE_TIME_PROGMEM = {
7877  kZoneRulesSyria /*rules*/,
7878  nullptr /*letters*/,
7879  12 /*numRules*/,
7880  0 /*numLetters*/,
7881 };
7882 
7883 //---------------------------------------------------------------------------
7884 // Policy name: Taiwan
7885 // Rules: 1
7886 // Memory (8-bit): 17
7887 // Memory (32-bit): 24
7888 //---------------------------------------------------------------------------
7889 
7890 static const extended::ZoneRule kZoneRulesTaiwan[] ACE_TIME_PROGMEM = {
7891  // Rule Taiwan 1979 only - Oct 1 0:00 0 S
7892  {
7893  1979 /*fromYear*/,
7894  1979 /*toYear*/,
7895  10 /*inMonth*/,
7896  0 /*onDayOfWeek*/,
7897  1 /*onDayOfMonth*/,
7898  0 /*atTimeCode*/,
7899  0 /*atTimeModifier (kSuffixW + minute=0)*/,
7900  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
7901  'S' /*letter*/,
7902  },
7903 
7904 };
7905 
7906 
7907 
7908 const extended::ZonePolicy kZonePolicyTaiwan ACE_TIME_PROGMEM = {
7909  kZoneRulesTaiwan /*rules*/,
7910  nullptr /*letters*/,
7911  1 /*numRules*/,
7912  0 /*numLetters*/,
7913 };
7914 
7915 //---------------------------------------------------------------------------
7916 // Policy name: Thule
7917 // Rules: 5
7918 // Memory (8-bit): 61
7919 // Memory (32-bit): 72
7920 //---------------------------------------------------------------------------
7921 
7922 static const extended::ZoneRule kZoneRulesThule[] ACE_TIME_PROGMEM = {
7923  // Rule Thule 1991 1992 - Sep lastSun 2:00 0 S
7924  {
7925  1991 /*fromYear*/,
7926  1992 /*toYear*/,
7927  9 /*inMonth*/,
7928  7 /*onDayOfWeek*/,
7929  0 /*onDayOfMonth*/,
7930  8 /*atTimeCode*/,
7931  0 /*atTimeModifier (kSuffixW + minute=0)*/,
7932  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
7933  'S' /*letter*/,
7934  },
7935  // Rule Thule 1993 2006 - Apr Sun>=1 2:00 1:00 D
7936  {
7937  1993 /*fromYear*/,
7938  2006 /*toYear*/,
7939  4 /*inMonth*/,
7940  7 /*onDayOfWeek*/,
7941  1 /*onDayOfMonth*/,
7942  8 /*atTimeCode*/,
7943  0 /*atTimeModifier (kSuffixW + minute=0)*/,
7944  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
7945  'D' /*letter*/,
7946  },
7947  // Rule Thule 1993 2006 - Oct lastSun 2:00 0 S
7948  {
7949  1993 /*fromYear*/,
7950  2006 /*toYear*/,
7951  10 /*inMonth*/,
7952  7 /*onDayOfWeek*/,
7953  0 /*onDayOfMonth*/,
7954  8 /*atTimeCode*/,
7955  0 /*atTimeModifier (kSuffixW + minute=0)*/,
7956  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
7957  'S' /*letter*/,
7958  },
7959  // Rule Thule 2007 max - Mar Sun>=8 2:00 1:00 D
7960  {
7961  2007 /*fromYear*/,
7962  9999 /*toYear*/,
7963  3 /*inMonth*/,
7964  7 /*onDayOfWeek*/,
7965  8 /*onDayOfMonth*/,
7966  8 /*atTimeCode*/,
7967  0 /*atTimeModifier (kSuffixW + minute=0)*/,
7968  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
7969  'D' /*letter*/,
7970  },
7971  // Rule Thule 2007 max - Nov Sun>=1 2:00 0 S
7972  {
7973  2007 /*fromYear*/,
7974  9999 /*toYear*/,
7975  11 /*inMonth*/,
7976  7 /*onDayOfWeek*/,
7977  1 /*onDayOfMonth*/,
7978  8 /*atTimeCode*/,
7979  0 /*atTimeModifier (kSuffixW + minute=0)*/,
7980  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
7981  'S' /*letter*/,
7982  },
7983 
7984 };
7985 
7986 
7987 
7988 const extended::ZonePolicy kZonePolicyThule ACE_TIME_PROGMEM = {
7989  kZoneRulesThule /*rules*/,
7990  nullptr /*letters*/,
7991  5 /*numRules*/,
7992  0 /*numLetters*/,
7993 };
7994 
7995 //---------------------------------------------------------------------------
7996 // Policy name: Tonga
7997 // Rules: 7
7998 // Memory (8-bit): 83
7999 // Memory (32-bit): 96
8000 //---------------------------------------------------------------------------
8001 
8002 static const extended::ZoneRule kZoneRulesTonga[] ACE_TIME_PROGMEM = {
8003  // Anchor: Rule Tonga 2000 only - Mar 19 2:00s 0 -
8004  {
8005  0 /*fromYear*/,
8006  0 /*toYear*/,
8007  1 /*inMonth*/,
8008  0 /*onDayOfWeek*/,
8009  1 /*onDayOfMonth*/,
8010  0 /*atTimeCode*/,
8011  0 /*atTimeModifier (kSuffixW + minute=0)*/,
8012  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
8013  '-' /*letter*/,
8014  },
8015  // Rule Tonga 1999 only - Oct 7 2:00s 1:00 -
8016  {
8017  1999 /*fromYear*/,
8018  1999 /*toYear*/,
8019  10 /*inMonth*/,
8020  0 /*onDayOfWeek*/,
8021  7 /*onDayOfMonth*/,
8022  8 /*atTimeCode*/,
8023  16 /*atTimeModifier (kSuffixS + minute=0)*/,
8024  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
8025  '-' /*letter*/,
8026  },
8027  // Rule Tonga 2000 only - Mar 19 2:00s 0 -
8028  {
8029  2000 /*fromYear*/,
8030  2000 /*toYear*/,
8031  3 /*inMonth*/,
8032  0 /*onDayOfWeek*/,
8033  19 /*onDayOfMonth*/,
8034  8 /*atTimeCode*/,
8035  16 /*atTimeModifier (kSuffixS + minute=0)*/,
8036  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
8037  '-' /*letter*/,
8038  },
8039  // Rule Tonga 2000 2001 - Nov Sun>=1 2:00 1:00 -
8040  {
8041  2000 /*fromYear*/,
8042  2001 /*toYear*/,
8043  11 /*inMonth*/,
8044  7 /*onDayOfWeek*/,
8045  1 /*onDayOfMonth*/,
8046  8 /*atTimeCode*/,
8047  0 /*atTimeModifier (kSuffixW + minute=0)*/,
8048  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
8049  '-' /*letter*/,
8050  },
8051  // Rule Tonga 2001 2002 - Jan lastSun 2:00 0 -
8052  {
8053  2001 /*fromYear*/,
8054  2002 /*toYear*/,
8055  1 /*inMonth*/,
8056  7 /*onDayOfWeek*/,
8057  0 /*onDayOfMonth*/,
8058  8 /*atTimeCode*/,
8059  0 /*atTimeModifier (kSuffixW + minute=0)*/,
8060  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
8061  '-' /*letter*/,
8062  },
8063  // Rule Tonga 2016 only - Nov Sun>=1 2:00 1:00 -
8064  {
8065  2016 /*fromYear*/,
8066  2016 /*toYear*/,
8067  11 /*inMonth*/,
8068  7 /*onDayOfWeek*/,
8069  1 /*onDayOfMonth*/,
8070  8 /*atTimeCode*/,
8071  0 /*atTimeModifier (kSuffixW + minute=0)*/,
8072  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
8073  '-' /*letter*/,
8074  },
8075  // Rule Tonga 2017 only - Jan Sun>=15 3:00 0 -
8076  {
8077  2017 /*fromYear*/,
8078  2017 /*toYear*/,
8079  1 /*inMonth*/,
8080  7 /*onDayOfWeek*/,
8081  15 /*onDayOfMonth*/,
8082  12 /*atTimeCode*/,
8083  0 /*atTimeModifier (kSuffixW + minute=0)*/,
8084  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
8085  '-' /*letter*/,
8086  },
8087 
8088 };
8089 
8090 
8091 
8092 const extended::ZonePolicy kZonePolicyTonga ACE_TIME_PROGMEM = {
8093  kZoneRulesTonga /*rules*/,
8094  nullptr /*letters*/,
8095  7 /*numRules*/,
8096  0 /*numLetters*/,
8097 };
8098 
8099 //---------------------------------------------------------------------------
8100 // Policy name: Troll
8101 // Rules: 3
8102 // Memory (8-bit): 51
8103 // Memory (32-bit): 64
8104 //---------------------------------------------------------------------------
8105 
8106 static const extended::ZoneRule kZoneRulesTroll[] ACE_TIME_PROGMEM = {
8107  // Anchor: Rule Troll 2004 max - Oct lastSun 1:00u 0:00 +00
8108  {
8109  0 /*fromYear*/,
8110  0 /*toYear*/,
8111  1 /*inMonth*/,
8112  0 /*onDayOfWeek*/,
8113  1 /*onDayOfMonth*/,
8114  0 /*atTimeCode*/,
8115  0 /*atTimeModifier (kSuffixW + minute=0)*/,
8116  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
8117  0 /*letter (index to "+00")*/,
8118  },
8119  // Rule Troll 2005 max - Mar lastSun 1:00u 2:00 +02
8120  {
8121  2005 /*fromYear*/,
8122  9999 /*toYear*/,
8123  3 /*inMonth*/,
8124  7 /*onDayOfWeek*/,
8125  0 /*onDayOfMonth*/,
8126  4 /*atTimeCode*/,
8127  32 /*atTimeModifier (kSuffixU + minute=0)*/,
8128  12 /*deltaCode ((deltaMinutes=120)/15 + 4)*/,
8129  1 /*letter (index to "+02")*/,
8130  },
8131  // Rule Troll 2004 max - Oct lastSun 1:00u 0:00 +00
8132  {
8133  2004 /*fromYear*/,
8134  9999 /*toYear*/,
8135  10 /*inMonth*/,
8136  7 /*onDayOfWeek*/,
8137  0 /*onDayOfMonth*/,
8138  4 /*atTimeCode*/,
8139  32 /*atTimeModifier (kSuffixU + minute=0)*/,
8140  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
8141  0 /*letter (index to "+00")*/,
8142  },
8143 
8144 };
8145 
8146 static const char* const kLettersTroll[] ACE_TIME_PROGMEM = {
8147  /*0*/ "+00",
8148  /*1*/ "+02",
8149 
8150 };
8151 
8152 
8153 const extended::ZonePolicy kZonePolicyTroll ACE_TIME_PROGMEM = {
8154  kZoneRulesTroll /*rules*/,
8155  kLettersTroll /*letters*/,
8156  3 /*numRules*/,
8157  2 /*numLetters*/,
8158 };
8159 
8160 //---------------------------------------------------------------------------
8161 // Policy name: Tunisia
8162 // Rules: 5
8163 // Memory (8-bit): 61
8164 // Memory (32-bit): 72
8165 //---------------------------------------------------------------------------
8166 
8167 static const extended::ZoneRule kZoneRulesTunisia[] ACE_TIME_PROGMEM = {
8168  // Rule Tunisia 1988 1990 - Sep lastSun 0:00s 0 -
8169  {
8170  1988 /*fromYear*/,
8171  1990 /*toYear*/,
8172  9 /*inMonth*/,
8173  7 /*onDayOfWeek*/,
8174  0 /*onDayOfMonth*/,
8175  0 /*atTimeCode*/,
8176  16 /*atTimeModifier (kSuffixS + minute=0)*/,
8177  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
8178  '-' /*letter*/,
8179  },
8180  // Rule Tunisia 2005 only - May 1 0:00s 1:00 S
8181  {
8182  2005 /*fromYear*/,
8183  2005 /*toYear*/,
8184  5 /*inMonth*/,
8185  0 /*onDayOfWeek*/,
8186  1 /*onDayOfMonth*/,
8187  0 /*atTimeCode*/,
8188  16 /*atTimeModifier (kSuffixS + minute=0)*/,
8189  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
8190  'S' /*letter*/,
8191  },
8192  // Rule Tunisia 2005 only - Sep 30 1:00s 0 -
8193  {
8194  2005 /*fromYear*/,
8195  2005 /*toYear*/,
8196  9 /*inMonth*/,
8197  0 /*onDayOfWeek*/,
8198  30 /*onDayOfMonth*/,
8199  4 /*atTimeCode*/,
8200  16 /*atTimeModifier (kSuffixS + minute=0)*/,
8201  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
8202  '-' /*letter*/,
8203  },
8204  // Rule Tunisia 2006 2008 - Mar lastSun 2:00s 1:00 S
8205  {
8206  2006 /*fromYear*/,
8207  2008 /*toYear*/,
8208  3 /*inMonth*/,
8209  7 /*onDayOfWeek*/,
8210  0 /*onDayOfMonth*/,
8211  8 /*atTimeCode*/,
8212  16 /*atTimeModifier (kSuffixS + minute=0)*/,
8213  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
8214  'S' /*letter*/,
8215  },
8216  // Rule Tunisia 2006 2008 - Oct lastSun 2:00s 0 -
8217  {
8218  2006 /*fromYear*/,
8219  2008 /*toYear*/,
8220  10 /*inMonth*/,
8221  7 /*onDayOfWeek*/,
8222  0 /*onDayOfMonth*/,
8223  8 /*atTimeCode*/,
8224  16 /*atTimeModifier (kSuffixS + minute=0)*/,
8225  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
8226  '-' /*letter*/,
8227  },
8228 
8229 };
8230 
8231 
8232 
8233 const extended::ZonePolicy kZonePolicyTunisia ACE_TIME_PROGMEM = {
8234  kZoneRulesTunisia /*rules*/,
8235  nullptr /*letters*/,
8236  5 /*numRules*/,
8237  0 /*numLetters*/,
8238 };
8239 
8240 //---------------------------------------------------------------------------
8241 // Policy name: Turkey
8242 // Rules: 3
8243 // Memory (8-bit): 39
8244 // Memory (32-bit): 48
8245 //---------------------------------------------------------------------------
8246 
8247 static const extended::ZoneRule kZoneRulesTurkey[] ACE_TIME_PROGMEM = {
8248  // Rule Turkey 1986 1995 - Sep lastSun 1:00s 0 -
8249  {
8250  1986 /*fromYear*/,
8251  1995 /*toYear*/,
8252  9 /*inMonth*/,
8253  7 /*onDayOfWeek*/,
8254  0 /*onDayOfMonth*/,
8255  4 /*atTimeCode*/,
8256  16 /*atTimeModifier (kSuffixS + minute=0)*/,
8257  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
8258  '-' /*letter*/,
8259  },
8260  // Rule Turkey 1995 2006 - Mar lastSun 1:00s 1:00 S
8261  {
8262  1995 /*fromYear*/,
8263  2006 /*toYear*/,
8264  3 /*inMonth*/,
8265  7 /*onDayOfWeek*/,
8266  0 /*onDayOfMonth*/,
8267  4 /*atTimeCode*/,
8268  16 /*atTimeModifier (kSuffixS + minute=0)*/,
8269  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
8270  'S' /*letter*/,
8271  },
8272  // Rule Turkey 1996 2006 - Oct lastSun 1:00s 0 -
8273  {
8274  1996 /*fromYear*/,
8275  2006 /*toYear*/,
8276  10 /*inMonth*/,
8277  7 /*onDayOfWeek*/,
8278  0 /*onDayOfMonth*/,
8279  4 /*atTimeCode*/,
8280  16 /*atTimeModifier (kSuffixS + minute=0)*/,
8281  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
8282  '-' /*letter*/,
8283  },
8284 
8285 };
8286 
8287 
8288 
8289 const extended::ZonePolicy kZonePolicyTurkey ACE_TIME_PROGMEM = {
8290  kZoneRulesTurkey /*rules*/,
8291  nullptr /*letters*/,
8292  3 /*numRules*/,
8293  0 /*numLetters*/,
8294 };
8295 
8296 //---------------------------------------------------------------------------
8297 // Policy name: US
8298 // Rules: 5
8299 // Memory (8-bit): 61
8300 // Memory (32-bit): 72
8301 //---------------------------------------------------------------------------
8302 
8303 static const extended::ZoneRule kZoneRulesUS[] ACE_TIME_PROGMEM = {
8304  // Rule US 1967 2006 - Oct lastSun 2:00 0 S
8305  {
8306  1967 /*fromYear*/,
8307  2006 /*toYear*/,
8308  10 /*inMonth*/,
8309  7 /*onDayOfWeek*/,
8310  0 /*onDayOfMonth*/,
8311  8 /*atTimeCode*/,
8312  0 /*atTimeModifier (kSuffixW + minute=0)*/,
8313  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
8314  'S' /*letter*/,
8315  },
8316  // Rule US 1976 1986 - Apr lastSun 2:00 1:00 D
8317  {
8318  1976 /*fromYear*/,
8319  1986 /*toYear*/,
8320  4 /*inMonth*/,
8321  7 /*onDayOfWeek*/,
8322  0 /*onDayOfMonth*/,
8323  8 /*atTimeCode*/,
8324  0 /*atTimeModifier (kSuffixW + minute=0)*/,
8325  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
8326  'D' /*letter*/,
8327  },
8328  // Rule US 1987 2006 - Apr Sun>=1 2:00 1:00 D
8329  {
8330  1987 /*fromYear*/,
8331  2006 /*toYear*/,
8332  4 /*inMonth*/,
8333  7 /*onDayOfWeek*/,
8334  1 /*onDayOfMonth*/,
8335  8 /*atTimeCode*/,
8336  0 /*atTimeModifier (kSuffixW + minute=0)*/,
8337  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
8338  'D' /*letter*/,
8339  },
8340  // Rule US 2007 max - Mar Sun>=8 2:00 1:00 D
8341  {
8342  2007 /*fromYear*/,
8343  9999 /*toYear*/,
8344  3 /*inMonth*/,
8345  7 /*onDayOfWeek*/,
8346  8 /*onDayOfMonth*/,
8347  8 /*atTimeCode*/,
8348  0 /*atTimeModifier (kSuffixW + minute=0)*/,
8349  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
8350  'D' /*letter*/,
8351  },
8352  // Rule US 2007 max - Nov Sun>=1 2:00 0 S
8353  {
8354  2007 /*fromYear*/,
8355  9999 /*toYear*/,
8356  11 /*inMonth*/,
8357  7 /*onDayOfWeek*/,
8358  1 /*onDayOfMonth*/,
8359  8 /*atTimeCode*/,
8360  0 /*atTimeModifier (kSuffixW + minute=0)*/,
8361  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
8362  'S' /*letter*/,
8363  },
8364 
8365 };
8366 
8367 
8368 
8369 const extended::ZonePolicy kZonePolicyUS ACE_TIME_PROGMEM = {
8370  kZoneRulesUS /*rules*/,
8371  nullptr /*letters*/,
8372  5 /*numRules*/,
8373  0 /*numLetters*/,
8374 };
8375 
8376 //---------------------------------------------------------------------------
8377 // Policy name: Uruguay
8378 // Rules: 6
8379 // Memory (8-bit): 72
8380 // Memory (32-bit): 84
8381 //---------------------------------------------------------------------------
8382 
8383 static const extended::ZoneRule kZoneRulesUruguay[] ACE_TIME_PROGMEM = {
8384  // Rule Uruguay 1993 only - Feb 28 0:00 0 -
8385  {
8386  1993 /*fromYear*/,
8387  1993 /*toYear*/,
8388  2 /*inMonth*/,
8389  0 /*onDayOfWeek*/,
8390  28 /*onDayOfMonth*/,
8391  0 /*atTimeCode*/,
8392  0 /*atTimeModifier (kSuffixW + minute=0)*/,
8393  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
8394  '-' /*letter*/,
8395  },
8396  // Rule Uruguay 2004 only - Sep 19 0:00 1:00 -
8397  {
8398  2004 /*fromYear*/,
8399  2004 /*toYear*/,
8400  9 /*inMonth*/,
8401  0 /*onDayOfWeek*/,
8402  19 /*onDayOfMonth*/,
8403  0 /*atTimeCode*/,
8404  0 /*atTimeModifier (kSuffixW + minute=0)*/,
8405  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
8406  '-' /*letter*/,
8407  },
8408  // Rule Uruguay 2005 only - Mar 27 2:00 0 -
8409  {
8410  2005 /*fromYear*/,
8411  2005 /*toYear*/,
8412  3 /*inMonth*/,
8413  0 /*onDayOfWeek*/,
8414  27 /*onDayOfMonth*/,
8415  8 /*atTimeCode*/,
8416  0 /*atTimeModifier (kSuffixW + minute=0)*/,
8417  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
8418  '-' /*letter*/,
8419  },
8420  // Rule Uruguay 2005 only - Oct 9 2:00 1:00 -
8421  {
8422  2005 /*fromYear*/,
8423  2005 /*toYear*/,
8424  10 /*inMonth*/,
8425  0 /*onDayOfWeek*/,
8426  9 /*onDayOfMonth*/,
8427  8 /*atTimeCode*/,
8428  0 /*atTimeModifier (kSuffixW + minute=0)*/,
8429  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
8430  '-' /*letter*/,
8431  },
8432  // Rule Uruguay 2006 2015 - Mar Sun>=8 2:00 0 -
8433  {
8434  2006 /*fromYear*/,
8435  2015 /*toYear*/,
8436  3 /*inMonth*/,
8437  7 /*onDayOfWeek*/,
8438  8 /*onDayOfMonth*/,
8439  8 /*atTimeCode*/,
8440  0 /*atTimeModifier (kSuffixW + minute=0)*/,
8441  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
8442  '-' /*letter*/,
8443  },
8444  // Rule Uruguay 2006 2014 - Oct Sun>=1 2:00 1:00 -
8445  {
8446  2006 /*fromYear*/,
8447  2014 /*toYear*/,
8448  10 /*inMonth*/,
8449  7 /*onDayOfWeek*/,
8450  1 /*onDayOfMonth*/,
8451  8 /*atTimeCode*/,
8452  0 /*atTimeModifier (kSuffixW + minute=0)*/,
8453  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
8454  '-' /*letter*/,
8455  },
8456 
8457 };
8458 
8459 
8460 
8461 const extended::ZonePolicy kZonePolicyUruguay ACE_TIME_PROGMEM = {
8462  kZoneRulesUruguay /*rules*/,
8463  nullptr /*letters*/,
8464  6 /*numRules*/,
8465  0 /*numLetters*/,
8466 };
8467 
8468 //---------------------------------------------------------------------------
8469 // Policy name: Vanuatu
8470 // Rules: 1
8471 // Memory (8-bit): 17
8472 // Memory (32-bit): 24
8473 //---------------------------------------------------------------------------
8474 
8475 static const extended::ZoneRule kZoneRulesVanuatu[] ACE_TIME_PROGMEM = {
8476  // Rule Vanuatu 1992 1993 - Jan Sat>=22 24:00 0 -
8477  {
8478  1992 /*fromYear*/,
8479  1993 /*toYear*/,
8480  1 /*inMonth*/,
8481  6 /*onDayOfWeek*/,
8482  22 /*onDayOfMonth*/,
8483  96 /*atTimeCode*/,
8484  0 /*atTimeModifier (kSuffixW + minute=0)*/,
8485  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
8486  '-' /*letter*/,
8487  },
8488 
8489 };
8490 
8491 
8492 
8493 const extended::ZonePolicy kZonePolicyVanuatu ACE_TIME_PROGMEM = {
8494  kZoneRulesVanuatu /*rules*/,
8495  nullptr /*letters*/,
8496  1 /*numRules*/,
8497  0 /*numLetters*/,
8498 };
8499 
8500 //---------------------------------------------------------------------------
8501 // Policy name: WS
8502 // Rules: 6
8503 // Memory (8-bit): 72
8504 // Memory (32-bit): 84
8505 //---------------------------------------------------------------------------
8506 
8507 static const extended::ZoneRule kZoneRulesWS[] ACE_TIME_PROGMEM = {
8508  // Anchor: Rule WS 2011 only - Apr Sat>=1 4:00 0 -
8509  {
8510  0 /*fromYear*/,
8511  0 /*toYear*/,
8512  1 /*inMonth*/,
8513  0 /*onDayOfWeek*/,
8514  1 /*onDayOfMonth*/,
8515  0 /*atTimeCode*/,
8516  0 /*atTimeModifier (kSuffixW + minute=0)*/,
8517  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
8518  '-' /*letter*/,
8519  },
8520  // Rule WS 2010 only - Sep lastSun 0:00 1 -
8521  {
8522  2010 /*fromYear*/,
8523  2010 /*toYear*/,
8524  9 /*inMonth*/,
8525  7 /*onDayOfWeek*/,
8526  0 /*onDayOfMonth*/,
8527  0 /*atTimeCode*/,
8528  0 /*atTimeModifier (kSuffixW + minute=0)*/,
8529  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
8530  '-' /*letter*/,
8531  },
8532  // Rule WS 2011 only - Apr Sat>=1 4:00 0 -
8533  {
8534  2011 /*fromYear*/,
8535  2011 /*toYear*/,
8536  4 /*inMonth*/,
8537  6 /*onDayOfWeek*/,
8538  1 /*onDayOfMonth*/,
8539  16 /*atTimeCode*/,
8540  0 /*atTimeModifier (kSuffixW + minute=0)*/,
8541  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
8542  '-' /*letter*/,
8543  },
8544  // Rule WS 2011 only - Sep lastSat 3:00 1 -
8545  {
8546  2011 /*fromYear*/,
8547  2011 /*toYear*/,
8548  9 /*inMonth*/,
8549  6 /*onDayOfWeek*/,
8550  0 /*onDayOfMonth*/,
8551  12 /*atTimeCode*/,
8552  0 /*atTimeModifier (kSuffixW + minute=0)*/,
8553  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
8554  '-' /*letter*/,
8555  },
8556  // Rule WS 2012 2021 - Apr Sun>=1 4:00 0 -
8557  {
8558  2012 /*fromYear*/,
8559  2021 /*toYear*/,
8560  4 /*inMonth*/,
8561  7 /*onDayOfWeek*/,
8562  1 /*onDayOfMonth*/,
8563  16 /*atTimeCode*/,
8564  0 /*atTimeModifier (kSuffixW + minute=0)*/,
8565  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
8566  '-' /*letter*/,
8567  },
8568  // Rule WS 2012 2020 - Sep lastSun 3:00 1 -
8569  {
8570  2012 /*fromYear*/,
8571  2020 /*toYear*/,
8572  9 /*inMonth*/,
8573  7 /*onDayOfWeek*/,
8574  0 /*onDayOfMonth*/,
8575  12 /*atTimeCode*/,
8576  0 /*atTimeModifier (kSuffixW + minute=0)*/,
8577  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
8578  '-' /*letter*/,
8579  },
8580 
8581 };
8582 
8583 
8584 
8585 const extended::ZonePolicy kZonePolicyWS ACE_TIME_PROGMEM = {
8586  kZoneRulesWS /*rules*/,
8587  nullptr /*letters*/,
8588  6 /*numRules*/,
8589  0 /*numLetters*/,
8590 };
8591 
8592 //---------------------------------------------------------------------------
8593 // Policy name: Winn
8594 // Rules: 3
8595 // Memory (8-bit): 39
8596 // Memory (32-bit): 48
8597 //---------------------------------------------------------------------------
8598 
8599 static const extended::ZoneRule kZoneRulesWinn[] ACE_TIME_PROGMEM = {
8600  // Rule Winn 1966 1986 - Apr lastSun 2:00s 1:00 D
8601  {
8602  1966 /*fromYear*/,
8603  1986 /*toYear*/,
8604  4 /*inMonth*/,
8605  7 /*onDayOfWeek*/,
8606  0 /*onDayOfMonth*/,
8607  8 /*atTimeCode*/,
8608  16 /*atTimeModifier (kSuffixS + minute=0)*/,
8609  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
8610  'D' /*letter*/,
8611  },
8612  // Rule Winn 1966 2005 - Oct lastSun 2:00s 0 S
8613  {
8614  1966 /*fromYear*/,
8615  2005 /*toYear*/,
8616  10 /*inMonth*/,
8617  7 /*onDayOfWeek*/,
8618  0 /*onDayOfMonth*/,
8619  8 /*atTimeCode*/,
8620  16 /*atTimeModifier (kSuffixS + minute=0)*/,
8621  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
8622  'S' /*letter*/,
8623  },
8624  // Rule Winn 1987 2005 - Apr Sun>=1 2:00s 1:00 D
8625  {
8626  1987 /*fromYear*/,
8627  2005 /*toYear*/,
8628  4 /*inMonth*/,
8629  7 /*onDayOfWeek*/,
8630  1 /*onDayOfMonth*/,
8631  8 /*atTimeCode*/,
8632  16 /*atTimeModifier (kSuffixS + minute=0)*/,
8633  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
8634  'D' /*letter*/,
8635  },
8636 
8637 };
8638 
8639 
8640 
8641 const extended::ZonePolicy kZonePolicyWinn ACE_TIME_PROGMEM = {
8642  kZoneRulesWinn /*rules*/,
8643  nullptr /*letters*/,
8644  3 /*numRules*/,
8645  0 /*numLetters*/,
8646 };
8647 
8648 //---------------------------------------------------------------------------
8649 // Policy name: Zion
8650 // Rules: 24
8651 // Memory (8-bit): 270
8652 // Memory (32-bit): 300
8653 //---------------------------------------------------------------------------
8654 
8655 static const extended::ZoneRule kZoneRulesZion[] ACE_TIME_PROGMEM = {
8656  // Rule Zion 1998 only - Sep 6 0:00 0 S
8657  {
8658  1998 /*fromYear*/,
8659  1998 /*toYear*/,
8660  9 /*inMonth*/,
8661  0 /*onDayOfWeek*/,
8662  6 /*onDayOfMonth*/,
8663  0 /*atTimeCode*/,
8664  0 /*atTimeModifier (kSuffixW + minute=0)*/,
8665  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
8666  'S' /*letter*/,
8667  },
8668  // Rule Zion 1999 only - Apr 2 2:00 1:00 D
8669  {
8670  1999 /*fromYear*/,
8671  1999 /*toYear*/,
8672  4 /*inMonth*/,
8673  0 /*onDayOfWeek*/,
8674  2 /*onDayOfMonth*/,
8675  8 /*atTimeCode*/,
8676  0 /*atTimeModifier (kSuffixW + minute=0)*/,
8677  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
8678  'D' /*letter*/,
8679  },
8680  // Rule Zion 1999 only - Sep 3 2:00 0 S
8681  {
8682  1999 /*fromYear*/,
8683  1999 /*toYear*/,
8684  9 /*inMonth*/,
8685  0 /*onDayOfWeek*/,
8686  3 /*onDayOfMonth*/,
8687  8 /*atTimeCode*/,
8688  0 /*atTimeModifier (kSuffixW + minute=0)*/,
8689  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
8690  'S' /*letter*/,
8691  },
8692  // Rule Zion 2000 only - Apr 14 2:00 1:00 D
8693  {
8694  2000 /*fromYear*/,
8695  2000 /*toYear*/,
8696  4 /*inMonth*/,
8697  0 /*onDayOfWeek*/,
8698  14 /*onDayOfMonth*/,
8699  8 /*atTimeCode*/,
8700  0 /*atTimeModifier (kSuffixW + minute=0)*/,
8701  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
8702  'D' /*letter*/,
8703  },
8704  // Rule Zion 2000 only - Oct 6 1:00 0 S
8705  {
8706  2000 /*fromYear*/,
8707  2000 /*toYear*/,
8708  10 /*inMonth*/,
8709  0 /*onDayOfWeek*/,
8710  6 /*onDayOfMonth*/,
8711  4 /*atTimeCode*/,
8712  0 /*atTimeModifier (kSuffixW + minute=0)*/,
8713  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
8714  'S' /*letter*/,
8715  },
8716  // Rule Zion 2001 only - Apr 9 1:00 1:00 D
8717  {
8718  2001 /*fromYear*/,
8719  2001 /*toYear*/,
8720  4 /*inMonth*/,
8721  0 /*onDayOfWeek*/,
8722  9 /*onDayOfMonth*/,
8723  4 /*atTimeCode*/,
8724  0 /*atTimeModifier (kSuffixW + minute=0)*/,
8725  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
8726  'D' /*letter*/,
8727  },
8728  // Rule Zion 2001 only - Sep 24 1:00 0 S
8729  {
8730  2001 /*fromYear*/,
8731  2001 /*toYear*/,
8732  9 /*inMonth*/,
8733  0 /*onDayOfWeek*/,
8734  24 /*onDayOfMonth*/,
8735  4 /*atTimeCode*/,
8736  0 /*atTimeModifier (kSuffixW + minute=0)*/,
8737  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
8738  'S' /*letter*/,
8739  },
8740  // Rule Zion 2002 only - Mar 29 1:00 1:00 D
8741  {
8742  2002 /*fromYear*/,
8743  2002 /*toYear*/,
8744  3 /*inMonth*/,
8745  0 /*onDayOfWeek*/,
8746  29 /*onDayOfMonth*/,
8747  4 /*atTimeCode*/,
8748  0 /*atTimeModifier (kSuffixW + minute=0)*/,
8749  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
8750  'D' /*letter*/,
8751  },
8752  // Rule Zion 2002 only - Oct 7 1:00 0 S
8753  {
8754  2002 /*fromYear*/,
8755  2002 /*toYear*/,
8756  10 /*inMonth*/,
8757  0 /*onDayOfWeek*/,
8758  7 /*onDayOfMonth*/,
8759  4 /*atTimeCode*/,
8760  0 /*atTimeModifier (kSuffixW + minute=0)*/,
8761  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
8762  'S' /*letter*/,
8763  },
8764  // Rule Zion 2003 only - Mar 28 1:00 1:00 D
8765  {
8766  2003 /*fromYear*/,
8767  2003 /*toYear*/,
8768  3 /*inMonth*/,
8769  0 /*onDayOfWeek*/,
8770  28 /*onDayOfMonth*/,
8771  4 /*atTimeCode*/,
8772  0 /*atTimeModifier (kSuffixW + minute=0)*/,
8773  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
8774  'D' /*letter*/,
8775  },
8776  // Rule Zion 2003 only - Oct 3 1:00 0 S
8777  {
8778  2003 /*fromYear*/,
8779  2003 /*toYear*/,
8780  10 /*inMonth*/,
8781  0 /*onDayOfWeek*/,
8782  3 /*onDayOfMonth*/,
8783  4 /*atTimeCode*/,
8784  0 /*atTimeModifier (kSuffixW + minute=0)*/,
8785  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
8786  'S' /*letter*/,
8787  },
8788  // Rule Zion 2004 only - Apr 7 1:00 1:00 D
8789  {
8790  2004 /*fromYear*/,
8791  2004 /*toYear*/,
8792  4 /*inMonth*/,
8793  0 /*onDayOfWeek*/,
8794  7 /*onDayOfMonth*/,
8795  4 /*atTimeCode*/,
8796  0 /*atTimeModifier (kSuffixW + minute=0)*/,
8797  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
8798  'D' /*letter*/,
8799  },
8800  // Rule Zion 2004 only - Sep 22 1:00 0 S
8801  {
8802  2004 /*fromYear*/,
8803  2004 /*toYear*/,
8804  9 /*inMonth*/,
8805  0 /*onDayOfWeek*/,
8806  22 /*onDayOfMonth*/,
8807  4 /*atTimeCode*/,
8808  0 /*atTimeModifier (kSuffixW + minute=0)*/,
8809  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
8810  'S' /*letter*/,
8811  },
8812  // Rule Zion 2005 2012 - Apr Fri<=1 2:00 1:00 D
8813  {
8814  2005 /*fromYear*/,
8815  2012 /*toYear*/,
8816  4 /*inMonth*/,
8817  5 /*onDayOfWeek*/,
8818  -1 /*onDayOfMonth*/,
8819  8 /*atTimeCode*/,
8820  0 /*atTimeModifier (kSuffixW + minute=0)*/,
8821  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
8822  'D' /*letter*/,
8823  },
8824  // Rule Zion 2005 only - Oct 9 2:00 0 S
8825  {
8826  2005 /*fromYear*/,
8827  2005 /*toYear*/,
8828  10 /*inMonth*/,
8829  0 /*onDayOfWeek*/,
8830  9 /*onDayOfMonth*/,
8831  8 /*atTimeCode*/,
8832  0 /*atTimeModifier (kSuffixW + minute=0)*/,
8833  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
8834  'S' /*letter*/,
8835  },
8836  // Rule Zion 2006 only - Oct 1 2:00 0 S
8837  {
8838  2006 /*fromYear*/,
8839  2006 /*toYear*/,
8840  10 /*inMonth*/,
8841  0 /*onDayOfWeek*/,
8842  1 /*onDayOfMonth*/,
8843  8 /*atTimeCode*/,
8844  0 /*atTimeModifier (kSuffixW + minute=0)*/,
8845  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
8846  'S' /*letter*/,
8847  },
8848  // Rule Zion 2007 only - Sep 16 2:00 0 S
8849  {
8850  2007 /*fromYear*/,
8851  2007 /*toYear*/,
8852  9 /*inMonth*/,
8853  0 /*onDayOfWeek*/,
8854  16 /*onDayOfMonth*/,
8855  8 /*atTimeCode*/,
8856  0 /*atTimeModifier (kSuffixW + minute=0)*/,
8857  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
8858  'S' /*letter*/,
8859  },
8860  // Rule Zion 2008 only - Oct 5 2:00 0 S
8861  {
8862  2008 /*fromYear*/,
8863  2008 /*toYear*/,
8864  10 /*inMonth*/,
8865  0 /*onDayOfWeek*/,
8866  5 /*onDayOfMonth*/,
8867  8 /*atTimeCode*/,
8868  0 /*atTimeModifier (kSuffixW + minute=0)*/,
8869  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
8870  'S' /*letter*/,
8871  },
8872  // Rule Zion 2009 only - Sep 27 2:00 0 S
8873  {
8874  2009 /*fromYear*/,
8875  2009 /*toYear*/,
8876  9 /*inMonth*/,
8877  0 /*onDayOfWeek*/,
8878  27 /*onDayOfMonth*/,
8879  8 /*atTimeCode*/,
8880  0 /*atTimeModifier (kSuffixW + minute=0)*/,
8881  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
8882  'S' /*letter*/,
8883  },
8884  // Rule Zion 2010 only - Sep 12 2:00 0 S
8885  {
8886  2010 /*fromYear*/,
8887  2010 /*toYear*/,
8888  9 /*inMonth*/,
8889  0 /*onDayOfWeek*/,
8890  12 /*onDayOfMonth*/,
8891  8 /*atTimeCode*/,
8892  0 /*atTimeModifier (kSuffixW + minute=0)*/,
8893  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
8894  'S' /*letter*/,
8895  },
8896  // Rule Zion 2011 only - Oct 2 2:00 0 S
8897  {
8898  2011 /*fromYear*/,
8899  2011 /*toYear*/,
8900  10 /*inMonth*/,
8901  0 /*onDayOfWeek*/,
8902  2 /*onDayOfMonth*/,
8903  8 /*atTimeCode*/,
8904  0 /*atTimeModifier (kSuffixW + minute=0)*/,
8905  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
8906  'S' /*letter*/,
8907  },
8908  // Rule Zion 2012 only - Sep 23 2:00 0 S
8909  {
8910  2012 /*fromYear*/,
8911  2012 /*toYear*/,
8912  9 /*inMonth*/,
8913  0 /*onDayOfWeek*/,
8914  23 /*onDayOfMonth*/,
8915  8 /*atTimeCode*/,
8916  0 /*atTimeModifier (kSuffixW + minute=0)*/,
8917  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
8918  'S' /*letter*/,
8919  },
8920  // Rule Zion 2013 max - Mar Fri>=23 2:00 1:00 D
8921  {
8922  2013 /*fromYear*/,
8923  9999 /*toYear*/,
8924  3 /*inMonth*/,
8925  5 /*onDayOfWeek*/,
8926  23 /*onDayOfMonth*/,
8927  8 /*atTimeCode*/,
8928  0 /*atTimeModifier (kSuffixW + minute=0)*/,
8929  8 /*deltaCode ((deltaMinutes=60)/15 + 4)*/,
8930  'D' /*letter*/,
8931  },
8932  // Rule Zion 2013 max - Oct lastSun 2:00 0 S
8933  {
8934  2013 /*fromYear*/,
8935  9999 /*toYear*/,
8936  10 /*inMonth*/,
8937  7 /*onDayOfWeek*/,
8938  0 /*onDayOfMonth*/,
8939  8 /*atTimeCode*/,
8940  0 /*atTimeModifier (kSuffixW + minute=0)*/,
8941  4 /*deltaCode ((deltaMinutes=0)/15 + 4)*/,
8942  'S' /*letter*/,
8943  },
8944 
8945 };
8946 
8947 
8948 
8949 const extended::ZonePolicy kZonePolicyZion ACE_TIME_PROGMEM = {
8950  kZoneRulesZion /*rules*/,
8951  nullptr /*letters*/,
8952  24 /*numRules*/,
8953  0 /*numLetters*/,
8954 };
8955 
8956 
8957 
8958 }
8959 }
Macros and definitions that provide a consistency layer among the various Arduino boards for compatib...