zmc
2023-08-08 e792e9a60d958b93aef96050644f369feb25d61b
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
U
«ý°d‰õã@sœdZddlZddlZddlZddlZddlZddlZddlZddlm    Z    ddl
Z
ddl
m Z ddl m Z ddlmZmZddlmZmZdd    lmZdd
lmZmZdd lmZzdd lmZmZWnek
ràdZZYnXdd lmZe d¡Zej  d¡Z!e! "¡Z#e
 $e¡Gdd„dej%ƒƒZ&e&ƒZ'e
 $e¡Gdd„dej%ƒƒZ(Gdd„deƒZ)Gdd„de*ƒZ+Gdd„de*ƒZ,Gdd„deƒZ-Gdd„deƒZ.e
 $e¡Gdd„de.ƒƒZ/Gdd„de*ƒZ0Gd d!„d!eƒZ1Gd"d#„d#e*ƒZ2ej3d$krd%d&gZ4d'd(d)d*gZ5ngZ4gZ5d+d,„Z6e6ƒZ7[6d<d-d.„Z8d=d/d0„Z9d1d2„Z:d3d4„Z;ej<d5krXd6d7„Z=nd8d7„Z=zdd9l>m?Z@Wn&ek
r–Gd:d;„d;e*ƒZ@YnXdS)>a
This module offers timezone implementations subclassing the abstract
:py:class:`datetime.tzinfo` type. There are classes to handle tzfile format
files (usually are in :file:`/etc/localtime`, :file:`/usr/share/zoneinfo`,
etc), TZ environment string (in all known formats), given ranges (with help
from relative deltas), local machine timezone, fixed offset timezone, and UTC
timezone.
éN)Ú OrderedDict)Ú string_types)Ú_threadé)Útzname_in_python2Ú_tzinfo)Ú tzrangebaseÚenfold)Ú_validate_fromutc_inputs)Ú _TzSingletonÚ_TzOffsetFactory)Ú _TzStrFactory)ÚtzwinÚ
tzwinlocal)Úwarnc@sbeZdZdZdd„Zdd„Zedd„ƒZdd    „Ze    d
d „ƒZ
d d „Z dZ dd„Z dd„ZejZdS)Útzutcaî
    This is a tzinfo object that represents the UTC time zone.
 
    **Examples:**
 
    .. doctest::
 
        >>> from datetime import *
        >>> from dateutil.tz import *
 
        >>> datetime.now()
        datetime.datetime(2003, 9, 27, 9, 40, 1, 521290)
 
        >>> datetime.now(tzutc())
        datetime.datetime(2003, 9, 27, 12, 40, 12, 156379, tzinfo=tzutc())
 
        >>> datetime.now(tzutc()).tzname()
        'UTC'
 
    .. versionchanged:: 2.7.0
        ``tzutc()`` is now a singleton, so the result of ``tzutc()`` will
        always return the same object.
 
        .. doctest::
 
            >>> from dateutil.tz import tzutc, UTC
            >>> tzutc() is tzutc()
            True
            >>> tzutc() is UTC
            True
    cCstS©N©ÚZERO©ÚselfÚdt©rúEd:\z\workplace\vscode\pyvenv\venv\Lib\site-packages\dateutil/tz/tz.pyÚ    utcoffsetJsztzutc.utcoffsetcCstSrrrrrrÚdstMsz    tzutc.dstcCsdS)NÚUTCrrrrrÚtznamePsz tzutc.tznamecCsdS)á6
        Whether or not the "wall time" of a given datetime is ambiguous in this
        zone.
 
        :param dt:
            A :py:class:`datetime.datetime`, naive or time zone aware.
 
 
        :return:
            Returns ``True`` if ambiguous, ``False`` otherwise.
 
        .. versionadded:: 2.6.0
        FrrrrrÚ is_ambiguousTsztzutc.is_ambiguouscCs|S)z
        Fast track version of fromutc() returns the original ``dt`` object for
        any valid :py:class:`datetime.datetime` object.
        rrrrrÚfromutcdsz tzutc.fromutccCs0t|ttfƒstSt|tƒp.t|tƒo.|jtkSr)Ú
isinstancerÚtzoffsetÚNotImplementedÚ_offsetr©rÚotherrrrÚ__eq__ls
 
ÿz tzutc.__eq__NcCs
||k Srrr%rrrÚ__ne__usz tzutc.__ne__cCs d|jjS©Nz%s()©Ú    __class__Ú__name__©rrrrÚ__repr__xsztzutc.__repr__)r,Ú
__module__Ú __qualname__Ú__doc__rrrrrr
r r'Ú__hash__r(r.ÚobjectÚ
__reduce__rrrrr)s
 
rc@sjeZdZdZdd„Zdd„Zdd„Zedd    „ƒZe    d
d „ƒZ
d d „Z dd„Z dZ dd„Zdd„ZejZdS)r"a1
    A simple class for representing a fixed offset from UTC.
 
    :param name:
        The timezone name, to be returned when ``tzname()`` is called.
    :param offset:
        The time zone offset in seconds, or (since version 2.6.0, represented
        as a :py:class:`datetime.timedelta` object).
    c    CsB||_z | ¡}Wnttfk
r*YnXtjt|ƒd|_dS©N©Úseconds)Ú_nameÚ total_secondsÚ    TypeErrorÚAttributeErrorÚdatetimeÚ    timedeltaÚ_get_supported_offsetr$)rÚnameÚoffsetrrrÚ__init__s  ztzoffset.__init__cCs|jSr©r$rrrrršsztzoffset.utcoffsetcCstSrrrrrrrsz tzoffset.dstcCs|jSr)r8rrrrr sztzoffset.tznamecCs
||jSrrBrrrrr ¤sztzoffset.fromutccCsdS)a4
        Whether or not the "wall time" of a given datetime is ambiguous in this
        zone.
 
        :param dt:
            A :py:class:`datetime.datetime`, naive or time zone aware.
        :return:
            Returns ``True`` if ambiguous, ``False`` otherwise.
 
        .. versionadded:: 2.6.0
        Frrrrrr¨s ztzoffset.is_ambiguouscCst|tƒstS|j|jkSr)r!r"r#r$r%rrrr'¶s
ztzoffset.__eq__NcCs
||k Srrr%rrrr(¾sztzoffset.__ne__cCs"d|jjt|jƒt|j ¡ƒfS)Nz
%s(%s, %s))r+r,Úreprr8Úintr$r9r-rrrr.Ás þztzoffset.__repr__)r,r/r0r1rArrrrr
r rr'r2r(r.r3r4rrrrr"„s     
 
r"csxeZdZdZ‡fdd„Zdd„Zdd„Zedd    „ƒZd
d „Z    d d „Z
ddd„Z dd„Z dZ dd„Zdd„ZejZ‡ZS)ÚtzlocalzR
    A :class:`tzinfo` subclass built around the ``time`` timezone functions.
    csltt|ƒ ¡tjtj d|_tjr:tjtj     d|_
n|j|_
|j
|j|_ t |j ƒ|_ ttjƒ|_dSr5)ÚsuperrErAr<r=ÚtimeÚtimezoneÚ _std_offsetÚdaylightÚaltzoneÚ _dst_offsetÚ
_dst_savedÚboolÚ_hasdstÚtuplerÚ_tznamesr-©r+rrrAÍs ztzlocal.__init__cCs,|dkr|jrdS| |¡r"|jS|jSdSr)rOÚ_isdstrLrIrrrrrÚs
 
ztzlocal.utcoffsetcCs0|dkr|jrdS| |¡r(|j|jStSdSr)rOrSrLrIrrrrrrãs
 
 z tzlocal.dstcCs|j| |¡Sr)rQrSrrrrrìsztzlocal.tznamecCs$| |¡}| o"|| ||j¡kS)r)Ú _naive_is_dstrM)rrZ    naive_dstrrrrðs
ÿztzlocal.is_ambiguouscCst|ƒ}t |tj¡jSr)Ú_datetime_to_timestamprGÚ    localtimerHÚtm_isdst)rrÚ    timestamprrrrTsztzlocal._naive_is_dstTcCsF|js
dS| |¡}t|ddƒ}| |¡rB|dk    r>| |¡ SdS|S)NFÚfoldT)rOrTÚgetattrrÚ_fold)rrZ
fold_naiveZdstvalrYrrrrSs
 
 ztzlocal._isdstcCs‚t|tƒr"|j|jko |j|jkSt|tƒrL|j oJ|jddkoJ|jtkSt|tƒrz|j ox|jd|j    kox|j|j
kSt SdS)Nr>rÚGMT) r!rErIrLrrOrQrr"r8r$r#r%rrrr'.s"
 
ÿ
 ÿþ
ÿ
þztzlocal.__eq__NcCs
||k Srrr%rrrr(?sztzlocal.__ne__cCs d|jjSr)r*r-rrrr.Bsztzlocal.__repr__)T)r,r/r0r1rArrrrrrTrSr'r2r(r.r3r4Ú __classcell__rrrRrrEÉs         
 
(rEc@sReZdZdddddddgZdd    „Zd
d „Zd d „ZdZdd„Zdd„Z    dd„Z
dS)Ú_ttinfor@ÚdeltaÚisdstÚabbrÚisstdÚisgmtÚ    dstoffsetcCs|jD]}t||dƒqdSr©Ú    __slots__Úsetattr)rÚattrrrrrALs
z_ttinfo.__init__cCsNg}|jD],}t||ƒ}|dk    r
| d|t|ƒf¡q
d|jjd |¡fS)Nz%s=%sú%s(%s)z, )rfrZÚappendrCr+r,Újoin)rÚlrhÚvaluerrrr.Ps 
 
z_ttinfo.__repr__cCsbt|tƒstS|j|jko`|j|jko`|j|jko`|j|jko`|j|jko`|j|jko`|j    |j    kSr)
r!r^r#r@r_r`rarbrcrdr%rrrr'Xs
 
ÿ
þ
ý
ü
û
úz_ttinfo.__eq__NcCs
||k Srrr%rrrr(fsz_ttinfo.__ne__cCs$i}|jD]}t||dƒ||<q
|Sr)rfrZ©rÚstater?rrrÚ __getstate__is
z_ttinfo.__getstate__cCs(|jD]}||krt||||ƒqdSrrernrrrÚ __setstate__os
z_ttinfo.__setstate__) r,r/r0rfrAr.r'r2r(rprqrrrrr^Hsÿ r^c@s,eZdZdZdddddddd    gZd
d „Zd S) Ú_tzfilezw
    Lightweight class for holding the relevant transition and time zone
    information read from binary tzfiles.
    Ú
trans_listÚtrans_list_utcÚ    trans_idxÚ ttinfo_listÚ
ttinfo_stdÚ
ttinfo_dstÚ ttinfo_beforeÚ ttinfo_firstcKs$|jD]}t||| |d¡ƒqdSr)ÚattrsrgÚget)rÚkwargsrhrrrrA}s
z_tzfile.__init__N)r,r/r0r1r{rArrrrrrusÿrrcs®eZdZdZd&‡fdd„    Zdd„Zdd„Zd'd
d „Zd d „Zdd„Z    dd„Z
d(dd„Z dd„Z dd„Z dd„Zedd„ƒZdd„ZdZdd„Zd d!„Zd"d#„Zd$d%„Z‡ZS))Útzfileaè    
    This is a ``tzinfo`` subclass that allows one to use the ``tzfile(5)``
    format timezone files to extract current and historical zone information.
 
    :param fileobj:
        This can be an opened file stream or a file name that the time zone
        information can be read from.
 
    :param filename:
        This is an optional parameter specifying the source of the time zone
        information in the event that ``fileobj`` is a file object. If omitted
        and ``fileobj`` is a file stream, this parameter will be set either to
        ``fileobj``'s ``name`` attribute or to ``repr(fileobj)``.
 
    See `Sources for Time Zone and Daylight Saving Time Data
    <https://data.iana.org/time-zones/tz-link.html>`_ for more information.
    Time zone files can be compiled from the `IANA Time Zone database files
    <https://www.iana.org/time-zones>`_ with the `zic time zone compiler
    <https://www.freebsd.org/cgi/man.cgi?query=zic&sektion=8>`_
 
    .. note::
 
        Only construct a ``tzfile`` directly if you have a specific timezone
        file on disk that you want to read into a Python ``tzinfo`` object.
        If you want to get a ``tzfile`` representing a specific IANA zone,
        (e.g. ``'America/New_York'``), you should call
        :func:`dateutil.tz.gettz` with the zone identifier.
 
 
    **Examples:**
 
    Using the US Eastern time zone as an example, we can see that a ``tzfile``
    provides time zone information for the standard Daylight Saving offsets:
 
    .. testsetup:: tzfile
 
        from dateutil.tz import gettz
        from datetime import datetime
 
    .. doctest:: tzfile
 
        >>> NYC = gettz('America/New_York')
        >>> NYC
        tzfile('/usr/share/zoneinfo/America/New_York')
 
        >>> print(datetime(2016, 1, 3, tzinfo=NYC))     # EST
        2016-01-03 00:00:00-05:00
 
        >>> print(datetime(2016, 7, 7, tzinfo=NYC))     # EDT
        2016-07-07 00:00:00-04:00
 
 
    The ``tzfile`` structure contains a fully history of the time zone,
    so historical dates will also have the right offsets. For example, before
    the adoption of the UTC standards, New York used local solar  mean time:
 
    .. doctest:: tzfile
 
       >>> print(datetime(1901, 4, 12, tzinfo=NYC))    # LMT
       1901-04-12 00:00:00-04:56
 
    And during World War II, New York was on "Eastern War Time", which was a
    state of permanent daylight saving time:
 
    .. doctest:: tzfile
 
        >>> print(datetime(1944, 2, 7, tzinfo=NYC))    # EWT
        1944-02-07 00:00:00-04:00
 
    Nc    sœtt|ƒ ¡d}t|tƒr2||_t|dƒ}d}n.|dk    rB||_nt|dƒrV|j|_n
t    |ƒ|_|dk    r˜|stt
|ƒ}|}|  |¡}W5QRX|  |¡dS)NFÚrbTr?) rFr~rAr!rÚ    _filenameÚopenÚhasattrr?rCÚ _nullcontextÚ _read_tzfileÚ _set_tzdata)rÚfileobjÚfilenameZfile_opened_hereZ file_streamÚtzobjrRrrrAÊs"
 
 
 
 
ztzfile.__init__cCs&tjD]}t|d|t||ƒƒqdS)z= Set the time zone data of this object from a _tzfile object Ú_N)rrr{rgrZ)rrˆrhrrrr…âs
ztzfile._set_tzdatac    s´tƒ‰| d¡ ¡dkr tdƒ‚| d¡t d| d¡¡\}}}}}}|rntt d|| |d¡¡ƒˆ_ngˆ_|r’t d|| |¡¡ˆ_ngˆ_g}t    |ƒD]}    | 
t d    | d
¡¡¡q¤| |¡ ¡}
|ræ|  |d t j ¡|rt d || |¡¡} |rt d || |¡¡} gˆ_t    |ƒD]š}    ||    \} }}t| ƒ} tƒ}| |_t d ¡|_tj| d|_||_|
||
 d|¡…|_||    koœ| |    d k|_||    ko´| |    d k|_ˆj 
|¡q,‡fdd„ˆjDƒˆ_dˆ_dˆ_dˆ_ˆjrÀˆjsˆjd ˆ_ˆ_n¬t    |dddƒD]T}    ˆj|    }ˆjsJ|jsJ|ˆ_nˆjs`|jr`|ˆ_ˆjr$ˆjr$q’q$ˆjr’ˆjs’ˆjˆ_ˆjD]}|js˜|ˆ_qÀq˜ˆjd ˆ_d}d}d}d}gˆ_t ˆjƒD]ª\}    }|j}d }|dk    r4|jr4|s||}|s"|r"|}tj|d|_|}||}|}|dk    rd||krd|j|krd|}|j}|}|}ˆj 
ˆj|    |¡qàt!ˆjƒˆ_t!ˆjƒˆ_t!ˆjƒˆ_ˆS)NéZTZifzmagic not foundéz>6léz>%dlz>%dBz>lbbééz>%dbrr6úcsg|]}ˆj|‘qSr)rv)Ú.0Úidx©ÚoutrrÚ
<listcomp>ssz'tzfile._read_tzfile.<locals>.<listcomp>réÿÿÿÿ)"rrÚreadÚdecodeÚ
ValueErrorÚstructÚunpackÚlistrtruÚrangerjÚseekÚosÚSEEK_CURrvr>r^r@r<r=rdr_r`ÚfindrarbrcrwrxryrzrsÚ    enumeraterP)rr†Z
ttisgmtcntZ
ttisstdcntZleapcntZtimecntZtypecntZcharcntZttinfoÚirarbrcÚgmtoffr`ZabbrindÚttiZlastdstZ
lastoffsetZ lastdstoffsetZlastbaseoffsetr@rdZ
baseoffsetZ
adjustmentrr’rr„èsÊ 
é   ÿ
    
ÿ   
 
ÿ 
ÿ  
 
 
 
     
 ÿ   ztzfile._read_tzfileFcCs6|js
dSt|ƒ}|r|jn|j}t ||¡}|dS)Nr)Ú _trans_listrUZ_trans_list_utcÚbisectÚ bisect_right)rrÚin_utcrXrsr‘rrrÚ_find_last_transitionÈs  ztzfile._find_last_transitioncCs8|dks|dt|jƒkr |jS|dkr.|jS|j|S)Nrr)Úlenr¥Ú _ttinfo_stdZ_ttinfo_beforeÚ
_trans_idx)rr‘rrrÚ _get_ttinfo×s
ztzfile._get_ttinfocCs| |¡}| |¡Sr)Ú_resolve_ambiguous_timer­)rrr‘rrrÚ _find_ttinfoâs
ztzfile._find_ttinfocCsnt|tjƒstdƒ‚|j|k    r&tdƒ‚|j|dd}| |¡}|tj|jd}|j    ||d}t
|t |ƒdS)a
        The ``tzfile`` implementation of :py:func:`datetime.tzinfo.fromutc`.
 
        :param dt:
            A :py:class:`datetime.datetime` object.
 
        :raises TypeError:
            Raised if ``dt`` is not a :py:class:`datetime.datetime` object.
 
        :raises ValueError:
            Raised if this is called with a ``dt`` which does not have this
            ``tzinfo`` attached.
 
        :return:
            Returns a :py:class:`datetime.datetime` object representing the
            wall time in ``self``'s time zone.
        z&fromutc() requires a datetime argumentzdt.tzinfo is not selfT)r¨r6)r‘©rY) r!r<r:Útzinfor˜r©r­r=r@rr    rD)rrr‘r¤Zdt_outrYrrrr çs 
 
ztzfile.fromutccCsd|dkr| |¡}t|ƒ}| |¡}|dks4|dkr8dS| |d¡j|j}|j|}|||kS)rNrFr)r©rUr­r@r¥)rrr‘rXr¤ZodÚttrrrr s
 
 
ztzfile.is_ambiguouscCsF| |¡}| |¡}|dks$|dkr(|St| o:| ||¡ƒ}||S)Nr)r©r[rDr)rrr‘r[Z
idx_offsetrrrr®(s 
 
ztzfile._resolve_ambiguous_timecCs"|dkr dS|jstS| |¡jSr)r«rr¯r_rrrrr5s
ztzfile.utcoffsetcCs0|dkr dS|jstS| |¡}|js*tS|jSr)Z _ttinfo_dstrr¯r`rd)rrr¤rrrr>s
z
tzfile.dstcCs|jr|dkrdS| |¡jSr)r«r¯rarrrrrNsz tzfile.tznamecCs2t|tƒstS|j|jko0|j|jko0|j|jkSr)r!r~r#r¥r¬Z _ttinfo_listr%rrrr'Ts
 
ÿ
þz tzfile.__eq__cCs
||k Srrr%rrrr(]sz tzfile.__ne__cCsd|jjt|jƒfS©Nri)r+r,rCr€r-rrrr.`sztzfile.__repr__cCs
| d¡Sr)Ú __reduce_ex__r-rrrr4csztzfile.__reduce__cCs|jd|jf|jfSr)r+r€Ú__dict__)rÚprotocolrrrr´fsztzfile.__reduce_ex__)N)F)N)r,r/r0r1rAr…r„r©r­r¯r rr®rrrrr'r2r(r.r4r´r]rrrRrr~‚s*Ga
 $
     
r~c@s6eZdZdZd dd„Zdd„Zdd„Zed    d
„ƒZdS) Útzrangea[
    The ``tzrange`` object is a time zone specified by a set of offsets and
    abbreviations, equivalent to the way the ``TZ`` variable can be specified
    in POSIX-like systems, but using Python delta objects to specify DST
    start, end and offsets.
 
    :param stdabbr:
        The abbreviation for standard time (e.g. ``'EST'``).
 
    :param stdoffset:
        An integer or :class:`datetime.timedelta` object or equivalent
        specifying the base offset from UTC.
 
        If unspecified, +00:00 is used.
 
    :param dstabbr:
        The abbreviation for DST / "Summer" time (e.g. ``'EDT'``).
 
        If specified, with no other DST information, DST is assumed to occur
        and the default behavior or ``dstoffset``, ``start`` and ``end`` is
        used. If unspecified and no other DST information is specified, it
        is assumed that this zone has no DST.
 
        If this is unspecified and other DST information is *is* specified,
        DST occurs in the zone but the time zone abbreviation is left
        unchanged.
 
    :param dstoffset:
        A an integer or :class:`datetime.timedelta` object or equivalent
        specifying the UTC offset during DST. If unspecified and any other DST
        information is specified, it is assumed to be the STD offset +1 hour.
 
    :param start:
        A :class:`relativedelta.relativedelta` object or equivalent specifying
        the time and time of year that daylight savings time starts. To
        specify, for example, that DST starts at 2AM on the 2nd Sunday in
        March, pass:
 
            ``relativedelta(hours=2, month=3, day=1, weekday=SU(+2))``
 
        If unspecified and any other DST information is specified, the default
        value is 2 AM on the first Sunday in April.
 
    :param end:
        A :class:`relativedelta.relativedelta` object or equivalent
        representing the time and time of year that daylight savings time
        ends, with the same specification method as in ``start``. One note is
        that this should point to the first time in the *standard* zone, so if
        a transition occurs at 2AM in the DST zone and the clocks are set back
        1 hour to 1AM, set the ``hours`` parameter to +1.
 
 
    **Examples:**
 
    .. testsetup:: tzrange
 
        from dateutil.tz import tzrange, tzstr
 
    .. doctest:: tzrange
 
        >>> tzstr('EST5EDT') == tzrange("EST", -18000, "EDT")
        True
 
        >>> from dateutil.relativedelta import *
        >>> range1 = tzrange("EST", -18000, "EDT")
        >>> range2 = tzrange("EST", -18000, "EDT", -14400,
        ...                  relativedelta(hours=+2, month=4, day=1,
        ...                                weekday=SU(+1)),
        ...                  relativedelta(hours=+1, month=10, day=31,
        ...                                weekday=SU(-1)))
        >>> tzstr('EST5EDT') == range1 == range2
        True
 
    Nc    Cs@ddlma||_||_z | ¡}Wnttfk
r<YnXz | ¡}Wnttfk
rbYnX|dk    r|tj|d|_    nt
|_    |dk    rštj|d|_ n(|r¼|dk    r¼|j    tjdd|_ nt
|_ |rê|dkrêtjdddt  d¡d|_ n||_ |r|dkrtjdd    d
t  d ¡d|_n||_|j |j    |_t|j ƒ|_dS) Nr©Ú relativedeltar6r©ÚhoursérŠ)r»ÚmonthÚdayÚweekdayé
ér•)Údateutilr¹Ú    _std_abbrÚ    _dst_abbrr9r:r;r<r=rIrrLÚSUÚ _start_deltaÚ
_end_deltaÚ_dst_base_offset_rNÚhasdst)rÚstdabbrÚ    stdoffsetÚdstabbrrdÚstartÚendrrrrAµsJ     ÿ
ÿ
ztzrange.__init__cCs4|js
dSt |dd¡}||j}||j}||fS)aô
        For a given year, get the DST on and off transition times, expressed
        always on the standard time side. For zones with no transitions, this
        function returns ``None``.
 
        :param year:
            The year whose transitions you would like to query.
 
        :return:
            Returns a :class:`tuple` of :class:`datetime.datetime` objects,
            ``(dston, dstoff)`` for zones with an annual DST transition, or
            ``None`` for fixed offset zones.
        Nr)rÉr<rÆrÇ)rÚyearZ    base_yearrÍrÎrrrÚ transitionsäs 
 
ztzrange.transitionscCsVt|tƒstS|j|jkoT|j|jkoT|j|jkoT|j|jkoT|j|jkoT|j|jkSr)    r!r·r#rÃrÄrIrLrÆrÇr%rrrr'üs
 
ÿ
þ
ý
ü
ûztzrange.__eq__cCs|jSr)rÈr-rrrÚ_dst_base_offsetsztzrange._dst_base_offset)NNNNN)    r,r/r0r1rArÐr'ÚpropertyrÑrrrrr·jsJþ
/ r·c@s,eZdZdZd dd„Zd dd„Zdd    „Zd
S) Útzstraº
    ``tzstr`` objects are time zone objects specified by a time-zone string as
    it would be passed to a ``TZ`` variable on POSIX-style systems (see
    the `GNU C Library: TZ Variable`_ for more details).
 
    There is one notable exception, which is that POSIX-style time zones use an
    inverted offset format, so normally ``GMT+3`` would be parsed as an offset
    3 hours *behind* GMT. The ``tzstr`` time zone object will parse this as an
    offset 3 hours *ahead* of GMT. If you would like to maintain the POSIX
    behavior, pass a ``True`` value to ``posix_offset``.
 
    The :class:`tzrange` object provides the same functionality, but is
    specified using :class:`relativedelta.relativedelta` objects. rather than
    strings.
 
    :param s:
        A time zone string in ``TZ`` variable format. This can be a
        :class:`bytes` (2.x: :class:`str`), :class:`str` (2.x:
        :class:`unicode`) or a stream emitting unicode characters
        (e.g. :class:`StringIO`).
 
    :param posix_offset:
        Optional. If set to ``True``, interpret strings such as ``GMT+3`` or
        ``UTC+3`` as being 3 hours *behind* UTC rather than ahead, per the
        POSIX standard.
 
    .. caution::
 
        Prior to version 2.7.0, this function also supported time zones
        in the format:
 
            * ``EST5EDT,4,0,6,7200,10,0,26,7200,3600``
            * ``EST5EDT,4,1,0,7200,10,-1,0,7200,3600``
 
        This format is non-standard and has been deprecated; this function
        will raise a :class:`DeprecatedTZFormatWarning` until
        support is removed in a future version.
 
    .. _`GNU C Library: TZ Variable`:
        https://www.gnu.org/software/libc/manual/html_node/TZ-Variable.html
    Fc    Cs¸ddlma||_t |¡}|dks*|jr2tdƒ‚|jdkrN|sN|jd9_t    j
||j|j|j |j ddd|j s‚d|_ d|_n&| |j¡|_ |j r¨|j|jdd    |_t|j ƒ|_dS)
Nr)Ú_parserzunknown string format©r\rr•F)rÍrÎr)Úisend)Zdateutil.parserrÔÚparserÚ_sZ_parsetzZany_unused_tokensr˜rÊrËr·rArÌrdrÆrÇÚ_deltarÍrÎrNrÉ)rÚsZ posix_offsetÚresrrrrA7s( 
þztzstr.__init__rcCs:ddlm}i}|jdk    rr|j|d<|jdk    r`| |j|j¡|d<|jdkrVd|d<qpd|d<qœ|jrœ|j|d<n*|jdk    rˆ|j|d<n|jdk    rœ|j|d    <|sâ|sÄd
|d<d|d<| d¡|d<nd |d<d|d<| d ¡|d<|j    dk    rø|j    |d <nd|d <|r.|j
|j }|d |j |j d8<|jf|ŽS)Nrr¸r½r¿rr¾rÁZyeardayZ    nlyeardayrŠrÀr•r7i i€Q)rÂr¹r½r¿Úweekr¾ZydayZjydayrÅrGrLrIr7Údays)rÚxrÖr¹r}r_rrrrÙWs< 
 
 
 
 
 
 
 
 
 
  z tzstr._deltacCsd|jjt|jƒfSr³©r+r,rCrØr-rrrr.€sztzstr.__repr__N)F)r)r,r/r0r1rArÙr.rrrrrÓ s)
 
)rÓc@seZdZddd„ZdS)Ú_tzicalvtzcompNcCs@tj|d|_tj|d|_|j|j|_||_||_||_dSr5)r<r=Ú tzoffsetfromÚ
tzoffsettoÚ tzoffsetdiffr`rÚrrule)rrárâr`rrärrrrA…s z_tzicalvtzcomp.__init__)NN)r,r/r0rArrrrrà„sÿràcsZeZdZgf‡fdd„    Zdd„Zdd„Zdd„Zd    d
„Zed d „ƒZ    d d„Z
e j Z ‡Z S)Ú
_tzicalvtzcs4tt|ƒ ¡||_||_g|_g|_t ¡|_    dSr)
rFrårAÚ_tzidÚ_compsÚ
_cachedateÚ
_cachecomprÚ allocate_lockÚ _cache_lock)rÚtzidÚcompsrRrrrAs z_tzicalvtz.__init__c
Cs4t|jƒdkr|jdS|jdd}z<|j,|j|j || |¡f¡W5QR£WSQRXWntk
rtYnXd}d}|jD](}|     ||¡}|r„|r¤||kr„|}|}q„|sÔ|jD]}|j
s¸|}qÔq¸|d}|jP|j  d|| |¡f¡|j  d|¡t|jƒdkr&|j  ¡|j  ¡W5QRX|S)Nrr©r±rÀ) rªrçÚreplacerërérèÚindexr[r˜Ú _find_compdtr`ÚinsertÚpop)rrZ
lastcompdtZlastcompÚcompÚcompdtrrrÚ
_find_comp™s<
 
 ÿ
 
 
z_tzicalvtz._find_compcCs2|jtkr| |¡r||j8}|jj|dd}|S)NT)Úinc)rãrr[räZbefore)rrôrrõrrrrñÆs
z_tzicalvtz._find_compdtcCs|dkr dS| |¡jSr)rörârrrrrÎsz_tzicalvtz.utcoffsetcCs| |¡}|jr|jStSdSr)rör`rãr)rrrôrrrrÔs
z_tzicalvtz.dstcCs | |¡jSr)rörrrrrrÛsz_tzicalvtz.tznamecCsdt|jƒS)Nz<tzicalvtz %s>)rCrær-rrrr.ßsz_tzicalvtz.__repr__)r,r/r0rArörñrrrrr.r3r4r]rrrRrrås    -
råc@sBeZdZdZdd„Zdd„Zddd„Zd    d
„Zd d „Zd d„Z    dS)Útzicala[
    This object is designed to parse an iCalendar-style ``VTIMEZONE`` structure
    as set out in `RFC 5545`_ Section 4.6.5 into one or more `tzinfo` objects.
 
    :param `fileobj`:
        A file or stream in iCalendar format, which should be UTF-8 encoded
        with CRLF endings.
 
    .. _`RFC 5545`: https://tools.ietf.org/html/rfc5545
    c    Csjddlmat|tƒr(||_t|dƒ}nt|dt|ƒƒ|_t|ƒ}i|_    |}| 
|  ¡¡W5QRXdS)Nr)räÚrr?) rÂrär!rrØrrZrCrƒÚ_vtzÚ
_parse_rfcr–)rr†ZfobjrrrrAðs 
 ztzical.__init__cCst|j ¡ƒS)z?
        Retrieves the available time zones as a list.
        )r›rúÚkeysr-rrrrüsz tzical.keysNcCsP|dkrDt|jƒdkr tdƒ‚nt|jƒdkr6tdƒ‚tt|jƒƒ}|j |¡S)a˜
        Retrieve a :py:class:`datetime.tzinfo` object by its ``tzid``.
 
        :param tzid:
            If there is exactly one time zone available, omitting ``tzid``
            or passing :py:const:`None` value returns it. Otherwise a valid
            key (which can be retrieved from :func:`keys`) is required.
 
        :raises ValueError:
            Raised if ``tzid`` is not specified but there are either more
            or fewer than 1 zone defined.
 
        :returns:
            Returns either a :py:class:`datetime.tzinfo` object representing
            the relevant time zone or :py:const:`None` if the ``tzid`` was
            not found.
        Nrzno timezones definedrz more than one timezone available)rªrúr˜ÚnextÚiterr|)rrìrrrr|s
z
tzical.getcCsÒ| ¡}|stdƒ‚|ddkr>d|ddk}|dd…}nd}t|ƒdkrzt|dd…ƒd    t|dd…ƒd
|St|ƒd krÂt|dd…ƒd    t|dd…ƒd
t|dd…ƒ|Std |ƒ‚dS) Nz empty offsetr)ú+ú-)r•rrÿrrŠr¼ié<rzinvalid offset: )Ústripr˜rªrD)rrÚÚsignalrrrÚ _parse_offset"s  , <ztzical._parse_offsetcCsb| ¡}|stdƒ‚d}|t|ƒkr~|| ¡}|s<||=q|dkrt|ddkrt||d|dd…7<||=q|d7}qd}g}d}d}|D]È}|sžq’| dd¡\}    }
|     d¡} | sÄtdƒ‚| d ¡}    | dd…} |r@|    d    kr|
d
krön td |
ƒ‚|
}d} d} d}g}d}q\|    d kr|
d krv|rDtd|ƒ‚|sRtdƒ‚|s`tdƒ‚t||ƒ|j|<d}nŽ|
|krø| sŽtdƒ‚| dkr tdƒ‚|dkr²tdƒ‚d}|rÔtj    d 
|¡dddd}t | ||dk||ƒ}|  |¡d}n td|
ƒ‚q\|r|    dkrN| D] }|dkrd|}t|ƒ‚q|  |¡d} n°|    dkrd|  |¡nš|    dkr”| rˆtd|    | dfƒ‚|  |
¡} nj|    dkrÀ| r´td| dƒ‚|  |
¡}n>|    d kræ| ràtd!| dƒ‚|
}n|    d"kròn td#|    ƒ‚n>|    d$kr&| r td%| dƒ‚|
}n|    d&kr2n td#|    ƒ‚q’|    d    kr’|
d kr’d}g}d}q’dS)'Nz empty stringrú rFú:ú;zempty property nameZBEGIN)ZSTANDARDÚDAYLIGHTzunknown component: ZENDZ    VTIMEZONEzcomponent not closed: zmandatory TZID not foundz at least one component is neededzmandatory DTSTART not foundz mandatory TZOFFSETFROM not foundÚ
T)Ú
compatibleZignoretzÚcacherzinvalid component end: ZDTSTARTzVALUE=DATE-TIMEz(Unsupported DTSTART param in VTIMEZONE: )ZRRULEZRDATEZEXRULEZEXDATEZ TZOFFSETFROMzunsupported %s parm: %s Z
TZOFFSETTOzunsupported TZOFFSETTO parm: ZTZNAMEzunsupported TZNAME parm: ÚCOMMENTzunsupported property: ZTZIDzunsupported TZID parm: )ZTZURLz LAST-MODIFIEDr )Ú
splitlinesr˜rªÚrstripÚsplitÚupperrårúräZrrulestrrkràrjr)rrÚÚlinesr¢ÚlinerìríZinvtzÚcomptyper?rmZparmsZ founddtstartrárâZ
rrulelinesrÚrrrôZparmÚmsgrrrrû2sð  
 
 
 
 
 
 ÿ
 
ÿ
ÿ ýþ
 
 
ÿ 
 
 
ÿ 
 
ÿ 
 
ÿ
 
 
ÿ
ztzical._parse_rfccCsd|jjt|jƒfSr³rßr-rrrr.¯sztzical.__repr__)N)
r,r/r0r1rArür|rrûr.rrrrrøås
 
}røÚwin32z/etc/localtimerVz/usr/share/zoneinfoz/usr/lib/zoneinfoz/usr/share/lib/zoneinfoz /etc/zoneinfocs2tf‰tdk    rˆtf7‰G‡fdd„dtƒ}|ƒS)NcsDeZdZdZdd„Zd ‡fdd„    Zdd„Zd    d
„Zedd d „ƒZ    dS)z__get_gettz.<locals>.GettzFunca     
        Retrieve a time zone object from a string representation
 
        This function is intended to retrieve the :py:class:`tzinfo` subclass
        that best represents the time zone that would be used if a POSIX
        `TZ variable`_ were set to the same value.
 
        If no argument or an empty string is passed to ``gettz``, local time
        is returned:
 
        .. code-block:: python3
 
            >>> gettz()
            tzfile('/etc/localtime')
 
        This function is also the preferred way to map IANA tz database keys
        to :class:`tzfile` objects:
 
        .. code-block:: python3
 
            >>> gettz('Pacific/Kiritimati')
            tzfile('/usr/share/zoneinfo/Pacific/Kiritimati')
 
        On Windows, the standard is extended to include the Windows-specific
        zone names provided by the operating system:
 
        .. code-block:: python3
 
            >>> gettz('Egypt Standard Time')
            tzwin('Egypt Standard Time')
 
        Passing a GNU ``TZ`` style string time zone specification returns a
        :class:`tzstr` object:
 
        .. code-block:: python3
 
            >>> gettz('AEST-10AEDT-11,M10.1.0/2,M4.1.0/3')
            tzstr('AEST-10AEDT-11,M10.1.0/2,M4.1.0/3')
 
        :param name:
            A time zone name (IANA, or, on Windows, Windows keys), location of
            a ``tzfile(5)`` zoneinfo file or ``TZ`` variable style time zone
            specifier. An empty string, no argument or ``None`` is interpreted
            as local time.
 
        :return:
            Returns an instance of one of ``dateutil``'s :py:class:`tzinfo`
            subclasses.
 
        .. versionchanged:: 2.7.0
 
            After version 2.7.0, any two calls to ``gettz`` using the same
            input strings will return the same object:
 
            .. code-block:: python3
 
                >>> tz.gettz('America/Chicago') is tz.gettz('America/Chicago')
                True
 
            In addition to improving performance, this ensures that
            `"same zone" semantics`_ are used for datetimes in the same zone.
 
 
        .. _`TZ variable`:
            https://www.gnu.org/software/libc/manual/html_node/TZ-Variable.html
 
        .. _`"same zone" semantics`:
            https://blog.ganssle.io/articles/2018/02/aware-datetime-arithmetic.html
        cSs&t ¡|_d|_tƒ|_t ¡|_dS)NrŽ)    ÚweakrefÚWeakValueDictionaryÚ_GettzFunc__instancesÚ_GettzFunc__strong_cache_sizerÚ_GettzFunc__strong_cacherrêrër-rrrrA    s
z'__get_gettz.<locals>.GettzFunc.__init__Nc
s |j|j |d¡}|dkr`|j|d}|dksPt|ˆƒsP|dksP||j|<n|W5QR£S|j ||¡|j|<t|jƒ|jkr’|jj    ddW5QRX|S)N)r?F©Úlast)
rërr|Únocacher!rrórªrÚpopitem)rr?Úrv©Ztzlocal_classesrrÚ__call__s ÿþ     z'__get_gettz.<locals>.GettzFunc.__call__c    Ss:|j*||_t|jƒ|kr,|jjddqW5QRXdS)NFr)rërrªrr)rÚsizerrrÚset_cache_size+sz-__get_gettz.<locals>.GettzFunc.set_cache_sizec    Ss*|jt ¡|_|j ¡W5QRXdSr)rërrrrÚclearr-rrrÚ cache_clear1s
z*__get_gettz.<locals>.GettzFunc.cache_clearc     Ss’d}|s,ztjd}Wntk
r*YnX|dks<|dkrÄtD]x}tj |¡s~|}tD]"}tj ||¡}tj |¡rXq~qXq@tj |¡r@zt    |ƒ}WqÀWq@t
t t fk
r¶Yq@Xq@t ƒ}nÊz| d¡rÜ|dd…}WnHtk
r&}z(t|tƒrd}t t|ƒ|¡n‚W5d}~XYnXtj |¡rVtj |¡rNt    |ƒ}nd}n8tD]r}tj ||¡}tj |¡s˜| dd¡}tj |¡s˜qZzt    |ƒ}WqŽWnt
t t fk
rÈYnXqZd}tdk    rz t|ƒ}Wnttfk
rd}YnX|s&d    d
lm}|ƒ |¡}|sŽ|D]:}|d kr0z t|ƒ}Wnt k
r`YnXqސq0|d kr|t}n|tjkrŽt ƒ}|S) zA non-cached version of gettzNZTZ)Úrrrz'gettz argument should be str, not bytesrr‰r)Úget_zonefile_instanceÚ
0123456789rÕ)ržÚenvironÚKeyErrorÚTZFILESÚpathÚisabsÚTZPATHSrkÚisfiler~ÚIOErrorÚOSErrorr˜rEÚ
startswithr:r!ÚbytesÚsixÚ
raise_fromrïrÚ WindowsErrorÚUnicodeEncodeErrorZdateutil.zoneinfor(r|rÓrrGr)    r?ÚtzÚfilepathr‡r-ÚeZnew_msgr(Úcrrrr6s†   
 
 
 
 
 
 
 
 
 
 z&__get_gettz.<locals>.GettzFunc.nocache)N)N)
r,r/r0r1rAr"r$r&Ú staticmethodrrr!rrÚ    GettzFuncÃsEr>)rErr3)r>rr!rÚ __get_gettz¾s 
Jr?cCsX|dkr |jdkrtdƒ‚|j}|jdd}|j|d t¡ |¡}|jdd}||kS)a
    Given a datetime and a time zone, determine whether or not a given datetime
    would fall in a gap.
 
    :param dt:
        A :class:`datetime.datetime` (whose time zone will be ignored if ``tz``
        is provided.)
 
    :param tz:
        A :class:`datetime.tzinfo` with support for the ``fold`` attribute. If
        ``None`` or not provided, the datetime's own time zone will be used.
 
    :return:
        Returns a boolean value whether or not the "wall time" exists in
        ``tz``.
 
    .. versionadded:: 2.7.0
    Nú,Datetime is naive and no time zone provided.rî)r±r˜rïÚ
astimezoner)rr9Zdt_rtrrrÚdatetime_exists“s
  rBcCs¤|dkr |jdkrtdƒ‚|j}t|ddƒ}|dk    rVz | |¡WStk
rTYnX|j|d}t|dd}t|dd}| ¡| ¡k}| ¡| ¡k}|o | S)a\
    Given a datetime and a time zone, determine whether or not a given datetime
    is ambiguous (i.e if there are two times differentiated only by their DST
    status).
 
    :param dt:
        A :class:`datetime.datetime` (whose time zone will be ignored if ``tz``
        is provided.)
 
    :param tz:
        A :class:`datetime.tzinfo` with support for the ``fold`` attribute. If
        ``None`` or not provided, the datetime's own time zone will be used.
 
    :return:
        Returns a boolean value whether or not the "wall time" is ambiguous in
        ``tz``.
 
    .. versionadded:: 2.6.0
    Nr@rrîrr°r)    r±r˜rZrÚ    Exceptionrïr    rr)rr9Zis_ambiguous_fnZwall_0Zwall_1Z same_offsetZsame_dstrrrÚdatetime_ambiguousµs 
     rDcCsJ|jdk    rFt|ƒsF|tjdd ¡}|tjdd ¡}|||7}|S)aZ
    Given a datetime that may be imaginary, return an existing datetime.
 
    This function assumes that an imaginary datetime represents what the
    wall time would be in a zone had the offset transition not occurred, so
    it will always fall forward by the transition's change in offset.
 
    .. doctest::
 
        >>> from dateutil import tz
        >>> from datetime import datetime
        >>> NYC = tz.gettz('America/New_York')
        >>> print(tz.resolve_imaginary(datetime(2017, 3, 12, 2, 30, tzinfo=NYC)))
        2017-03-12 03:30:00-04:00
 
        >>> KIR = tz.gettz('Pacific/Kiritimati')
        >>> print(tz.resolve_imaginary(datetime(1995, 1, 1, 12, 30, tzinfo=KIR)))
        1995-01-02 12:30:00+14:00
 
    As a note, :func:`datetime.astimezone` is guaranteed to produce a valid,
    existing datetime, so a round-trip to and from UTC is sufficient to get
    an extant datetime, however, this generally "falls back" to an earlier time
    rather than falling forward to the STD side (though no guarantees are made
    about this behavior).
 
    :param dt:
        A :class:`datetime.datetime` which may or may not exist.
 
    :return:
        Returns an existing :class:`datetime.datetime`. If ``dt`` was not
        imaginary, the datetime returned is guaranteed to be the same object
        passed to the function.
 
    .. versionadded:: 2.7.0
    NrŒrº)r±rBr<r=r)rZ curr_offsetÚ
old_offsetrrrÚresolve_imaginaryãs
$ rFcCs|jddt ¡S)z‰
    Convert a :class:`datetime.datetime` object to an epoch timestamp in
    seconds since January 1, 1970, ignoring the time zone.
    Nrî)rïÚEPOCHr9)rrrrrUsrU)ércCs|Srr)Ú second_offsetrrrr>sr>cCs|}d|dd}|S)Nrér)rIrEZcalculated_offsetrrrr>s)Ú nullcontextc@s(eZdZdZdd„Zdd„Zdd„ZdS)    rƒzj
        Class for wrapping contexts so that they are passed through in a
        with statement.
        cCs
||_dSr©Úcontext)rrMrrrrA0sz_nullcontext.__init__cCs|jSrrLr-rrrÚ    __enter__3sz_nullcontext.__enter__cOsdSrr)Úargsr}rrrÚ__exit__6sz_nullcontext.__exit__N)r,r/r0r1rArNrPrrrrrƒ+srƒ)N)N)Ar1r<r™rGÚsysržr¦rÚ collectionsrr5rZ    six.movesrZ_commonrrrr    r
Z
_factoriesr r r ÚwinrrÚ ImportErrorÚwarningsrr=rÚutcfromtimestamprGÚ    toordinalZ EPOCHORDINALÚ add_metaclassr±rrr"rEr3r^rrr~r·rÓràrårøÚplatformr,r/r?ZgettzrBrDrFrUÚ version_infor>Ú
contextlibrKrƒrrrrÚ<module>sˆ      
 WD- k#w VO ýR
"
..