
    <eǩ                        d dl mZ d dlmZ d dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
Z
d dlZd dlZd dlZ	 d dlZn# e$ r dZY nw xY wd dlmZ  e
j        d          pdZddez  dz
  z  dz
  Ze dz
  d	z   Zd
ZdZd
ZdZdZ G d dej                  ZdZdZej        ej        fej        ej        fej         ej         fej!        ej!        ffZ" G d dej#                  Z$ G d dej#                  Z% G d d          Z& G d d          Z' G d d          Z( G d de&e(ej#                  Z) G d de'e(ej#                  Z* G d d ej#                  Z+ ej,        edu d!           G d" d#                      Z- G d$ d%e-ej#                  Z. G d& d'e-ej#                  Z/ ej0        e	j        d(k    d)           G d* d+ej#                              Z1e2d,k    r ej3                     dS dS )-    )support)warnings_helperN)skip_if_buggy_ucrt_strfptime
SIZEOF_INT         l  i@B   i ʚ;c                       e Zd ZdZdZdZdZdS )_PyTimer   r         N)__name__
__module____qualname__ROUND_FLOORROUND_CEILINGROUND_HALF_EVENROUND_UP     %/usr/lib/python3.11/test/test_time.pyr   r      s"        KMOHHHr   r   l         l    c                      e Zd Zd Zd Zd Zd Z ej         e	e
d          d          d             Z ej         e	e
d          d           ej         e	e
d          d	          d
                         Z ej         e	e
d          d           ej         e	e
d          d          d                         Z ej         e	e
d          d          d             Z ej         e	e
d          d          d             Zd Zd Zd Zd Zd Zd Zd Zd Zed             Zd Zd Zd Zd  Z ej        ej         d!          d"             Z! ej         e	e
d#          d$          d%             Z"d& Z#d' Z$d( Z%d) Z&d* Z' ej         e(j)                    d+         d,k    d-          d.             Z*d/ Z+d0 Z, ej        ej-        d1          d2             Z.d3 Z/ ej         e	e
d          d4          d5             Z0d6 Z1d7 Z2d8S )9TimeTestCasec                 6    t          j                     | _        d S N)timetselfs    r   setUpzTimeTestCase.setUp9   s    r   c                 f    t           j         t           j         t           j         t           j         d S r   )r   altzonedaylighttimezonetznamer    s    r   test_data_attributesz!TimeTestCase.test_data_attributes<   s"    r   c                     t          j                      t          j        d          }|                     |j                   |                     |j                   d S )Nr   )r   get_clock_infoassertFalse	monotonic
assertTrue
adjustable)r!   infos     r   	test_timezTimeTestCase.test_timeB   sM    	"6**((((((((r   c                      fd} |t          j                     t          j                                |t          j                    t          j                                |t          j                    t          j                                |t          j                    t          j                               t          t           d          r. |t          j	                    t          j
                               t          t           d          rF |t          j        t           j                  t          j        t           j                             d S d S )Nc                                          |t                     t          | dz            }                    ||z
  d| |f           d S )Ng    eAl   @F )assertIsInstanceint
assertLess)secnssec_nsr!   s      r   check_nsz0TimeTestCase.test_time_ns_type.<locals>.check_nsI   sL    !!"c***s^^FOOVb[7S"I>>>>>r   thread_timeclock_gettime)r   time_nsr,   monotonic_nsperf_counterperf_counter_nsprocess_timeprocess_time_nshasattrr:   thread_time_nsr;   CLOCK_REALTIMEclock_gettime_ns)r!   r9   s   ` r   test_time_ns_typezTimeTestCase.test_time_ns_typeH   sg   	? 	? 	? 	? 	? 		! 	! 	!!!"$$	& 	& 	&"$$%''	) 	) 	)"$$%''	) 	) 	) 4'' 	,HT%''(**, , , 4)) 	AHT'(;<<*4+>??A A A A A	A 	Ar   r;   zneed time.clock_gettime()c                 x    t          j        t           j                  }|                     |t                     d S r   )r   r;   rD   r3   floatr!   r   s     r   test_clock_realtimez TimeTestCase.test_clock_realtimea   s3     t233a'''''r   CLOCK_MONOTONICzneed time.CLOCK_MONOTONICc                     t          j        t           j                  }t          j        t           j                  }|                     ||           d S r   )r   r;   rK   assertLessEqual)r!   abs      r   test_clock_monotonicz!TimeTestCase.test_clock_monotonicg   sF    
 t344t344Q"""""r   pthread_getcpuclockidz!need time.pthread_getcpuclockid()c                    t          j        t          j                              }|                     t          |          t          u            t          j                    dk    rCt          j
                                        dk    r!|                     |t           j                   n`t          j                            d          r!|                     |t           j                   n |                     |t           j                   t          j        |          }t          j        |          }|                     ||           d S )NAIX    sunos)r   rQ   	threading	get_identr-   typer4   platformsystemsysmaxsize
bit_lengthassertEqualCLOCK_THREAD_CPUTIME_ID
startswithassertNotEqualr;   rM   )r!   clk_idt1t2s       r   test_pthread_getcpuclockidz'TimeTestCase.test_pthread_getcpuclockidp   s   
 +I,?,A,ABBV+,,,?%%3;+A+A+C+Cr+I+IVT%ABBBB\$$W-- 	FVT%ABBBB(DEEE''''R$$$$$r   clock_getreszneed time.clock_getres()c                     t          j        t           j                  }|                     |d           |                     |d           d S )N              ?)r   rf   rD   assertGreaterrM   )r!   ress     r   test_clock_getreszTimeTestCase.test_clock_getres   sI      3443$$$S#&&&&&r   clock_settimezneed time.clock_settime()c                 4   t          j        t           j                  }	 t          j        t           j        |           n# t          $ r Y nw xY wt          t           d          r3|                     t          t           j        t           j        d           d S d S )NrK   r   )	r   r;   rD   rm   PermissionErrorrB   assertRaisesOSErrorrK   rI   s     r   test_clock_settimezTimeTestCase.test_clock_settime   s     t233	t2A6666 	 	 	D	 4*++ 	Kg"0$2FK K K K K	K 	Ks   A   
AAc           	      n   |                      t          j        | j                  t          j        t          j        | j                                       |                      t          t          j        t          j        | j                                      t          | j                             d S r   )r^   r   ctimer   asctime	localtimer4   mktimer    s    r   test_conversionszTimeTestCase.test_conversions   s    DF++dnTV&<&<==	? 	? 	?T[)?)?@@AATV	& 	& 	& 	& 	&r   c                     |                      t          t          j        d           |                      t          t          j        d           t          j        d           d S )Ng333333?)rp   
ValueErrorr   sleepr    s    r   
test_sleepzTimeTestCase.test_sleep   sG    *dj"555*dj"555
3r   c                     t          j        d          }|                     t          |          d d         d|           d S )Nr      )i  r   r   r   r   r   )r   gmtimer^   tuple)r!   epochs     r   
test_epochzTimeTestCase.test_epoch   s?     Aubqb)+@%HHHHHr   c                 d   t          j        | j                  }dD ]E}d|z   }	 t          j        ||           # t          $ r |                     d|z             Y Bw xY w|                     t          t           j        d|           |                     t          t           j        d|           d S )NrN   ArO   BcdHIjmMpSUwWxXyYZ%z %z conversion specifier: %r failed.s   %Sz%S )r   r   r   strftimer|   failrp   	TypeError)r!   tt	directiveformats       r   test_strftimezTimeTestCase.test_strftime   s    [  G 	G 	GI I%FGfb)))) G G G		<vEFFFFFG 	)T]E2>>>*dmVR@@@@@s   :"AAc                 
    |d            |d           |                      t          |d           |                      t          |d            |d            |d           |                      t          |d           |                      t          |d            |d	           |                      t          |d
           |                      t          |d            |d           |                      t          |d           |                      t          |d           |                      t          |d            |d            |d           |                      t          |d           |                      |d           |d                     |                      t          |d            |d            |d           |                      t          |d           |                      t          |d           d S )N)	r
   r   r   r   r   r   r   r   r{   )	r
      r   r   r   r   r   r   r{   )	r
   r{   r   r   r   r   r   r   r{   )	r
      r   r   r   r   r   r   r{   )	r
   r   r   r   r   r   r   r   r{   )	r
   r      r   r   r   r   r   r{   )	r
   r   r{   r   r   r   r   r   r{   )	r
   r   rT   r   r   r   r   r   r{   )	r
   r   r      r   r   r   r   r{   )	r
   r   r   r{   r   r   r   r   r{   )	r
   r   r      r   r   r   r   r{   )	r
   r   r   r   ;   r   r   r   r{   )	r
   r   r   r   r{   r   r   r   r{   )	r
   r   r   r   <   r   r   r   r{   )	r
   r   r   r   r   r{   r   r   r{   )	r
   r   r   r   r   r   r   r   r{   )	r
   r   r   r   r   =   r   r   r{   )	r
   r   r   r   r   >   r   r   r{   )	r
   r   r   r   r   r   r{   r   r{   )	r
   r   r   r   r   r   r   r   r{   )	r
   r   r   r   r   r   rz   r   r{   )	r
   r   r   r   r   r   r   r   r{   )	r
   r   r   r   r   r   r   in  r{   )	r
   r   r   r   r   r   r   r{   r{   )	r
   r   r   r   r   r   r   io  r{   )rp   r|   r^   )r!   funcs     r   _bounds_checkingzTimeTestCase._bounds_checking   s    	,----...*d<	> 	> 	>*d<	> 	> 	> 	,----...*d<	> 	> 	>*d<	> 	> 	> 	-...*d<	> 	> 	>*d<	> 	> 	> 	-...*d<	> 	> 	>*d<	> 	> 	> 	*d<	> 	> 	> 	-...-...*d<	> 	> 	> 	>??>??	A 	A 	A*d<	> 	> 	> 	,---.///*d<	> 	> 	>*d=	? 	? 	? 	? 	?r   c                 2    |                      d            d S )Nc                 ,    t          j        d|           S )N r   r   )tups    r   <lambda>z;TimeTestCase.test_strftime_bounding_check.<locals>.<lambda>   s    $-C*@*@ r   )r   r    s    r   test_strftime_bounding_checkz)TimeTestCase.test_strftime_bounding_check   s     @@AAAAAr   c                     dD ]E}t          dd          D ]2}dD ]-}	 t          j        ||z  |z              # t          $ r Y *w xY w3Fd S )N)r   r   z%Az%AAr      )r   zA%zAA%z%A%zA%A%z%#)ranger   r   r|   )r!   r   r   zs       r   test_strftime_format_checkz'TimeTestCase.test_strftime_format_check   s    
 * 	 	A3%%  B  Aa!eai0000%   	 	s   7
A	A	c                     d}t          j                    5  t          j        dd          }d d d            n# 1 swxY w Y   |                     ||           d S )Nz2000 01 01 00 00 00 1 001z%Y %m %d %H %M %S %w %j)	  r   r   r   r   r   r   r   r   )r   check_warningsr   r   r^   )r!   expectedresults      r   test_default_values_for_zeroz)TimeTestCase.test_default_values_for_zero  s    
 /+-- 	N 	N]#<nMMF	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N6*****s   8<<c           	          t          j        | j                  }dD ]^}d|z   }t          j        ||          }	 t          j        ||           3# t
          $ r |                     d|d|d           Y [w xY wd S )Nr   r   zconversion specifier z failed with 'z' input.)r   r   r   r   strptimer|   r   )r!   r   r   r   strf_outputs        r   test_strptimezTimeTestCase.test_strptime  s     [  G 		1 		1I 9_F-33K1k62222 1 1 1			!66;;;0 1 1 1 1 11		1 		1s   A&A87A8c                     |                      t          t          j        dd           |                      t          t          j        dd           d S )Ns   2009%Y2009s   %Y)rp   r   r   r   r    s    r   test_strptime_bytesz TimeTestCase.test_strptime_bytes  s@    )T]GTBBB)T]FEBBBBBr   c                    |                      t                    5 }t          j        dd           d d d            n# 1 swxY w Y   |                     |j        j        d           |                      t                    5 }t          j        dd           d d d            n# 1 swxY w Y   |                     |j        j        d           d S )Nr   z%DT19z%Y %)rp   r|   r   r   assertIs	exception__suppress_context__)r!   es     r   test_strptime_exception_contextz,TimeTestCase.test_strptime_exception_context   s*   z** 	$aM"d###	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ak6===z** 	(aM$'''	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	(ak6=====s!   =AAB$$B(+B(c           	         t          j        t          j        | j                             t          t
          fD ]b}t          j        |ddfdz             }|                     |t          t          |                     d          t          |                     c| 	                    t          t           j        t          dz   fdz              | 	                    t          t           j        t
          dz
  fdz              | 	                    t          t           j        d           | 	                    t          t           j        d           | 	                    t          t           j        d           d S )Nr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )
r   r   r   r   r   r   r   r   r   r   )r   ru   r   r   TIME_MAXYEARTIME_MINYEARr^   lenstrrp   OverflowErrorr   )r!   bigyearascs      r   test_asctimezTimeTestCase.test_asctime*  s;   T[(())) $\1 	E 	EG,A9::CS#c'll"3"3!3!4!45s7||DDDD-'!+-8	: 	: 	:-'!+-8	: 	: 	:)T\1555)T\2666)T\9=====r   c                 D    |                      t          j                   d S r   )r   r   ru   r    s    r   test_asctime_bounding_checkz(TimeTestCase.test_asctime_bounding_check9  s    dl+++++r   (musl libc issue on Emscripten, bpo-46390c                    t          j        d          }|                     t          j        |          d           t          j        d          }|                     t          j        |          d           dD ]q}	 t          j        |ddfdz             }|                     t          j        |          d	d          t	          |                     [# t
          t          f$ r Y nw xY wd S )
N)	i  	   r   r   r   4   r   r   r{   zSun Sep 16 01:03:52 1973)	r   r   r   r   r   r   r   r   r{   zSat Jan  1 00:00:00 2000)id   r   r   i  '  r   
   r      )r   rw   r^   rt   r   r|   r   )r!   r   yeartestvals       r   
test_ctimezTimeTestCase.test_ctime<  s     K9::A(BCCCK788A(BCCC8 	F 	FDF+tQmf&<==   G!4!4RSS!93t99EEEE .    	F 	Fs   >CC*)C*tzsetz"time module has no attribute tzsetc                 R   ddl m} d}d}d}d}|                    dd           }	 ||d<   t          j                     ||d<   t          j                     |                     t          j        |          t          j        |                     |                     t          j        d           |                     t          j	        d           |                     t          j        |          j
        d           ||d<   t          j                     |                     t          j        |          t          j        |                     |                     t          j        d           |                     t          t          j                  d	           |                     t          j        d
           |                     t          j	        d           |                     t          j        d           |                     t          j        |          j
        d           |                     t          t          j                  d	           ||d<   t          j                     |                     t          j        |          t          j        |                     |                     t          j        d         dt          j        d                    |                     t          j        d
         dv t#          t          j        d
                              |                     t          t          j                  d	           |                     t          j        d
           |                     t          j	        d           |                     t          j        d           |                     t          j        |          j
        d
           |||d<   nd|v r|d= t          j                     d S # |||d<   nd|v r|d= t          j                     w xY w)Nr   )environg   zAzEST+05EDT,M4.1.0,M10.5.0zAEST-10AEDT-11,M10.5.0,M3.5.0zUTC+0TZ)ESTEDTr   r   PF  i@8  AESTEST)AEDTr   i`siPe)osr   getr   r   r^   r   rv   r%   r&   tm_isdstra   r'   r   r$   assertInr-   r   )r!   r   xmas2002easternvictoriautcorg_TZs          r   
test_tzsetzTimeTestCase.test_tzsetN  s{    	   -2T$''5	 $GDMJLLLGDMJLLLH%%t~h'?'?   T]A...T]A...T^H55>BBB $GDMJLLLH 5 5t~h7O7OPPPT[.999S--q111T]A...T]E222T\5111T^H55>BBBS--q111 %GDMJLLLH 5 5t~h7O7OPPP MM$+a.<$+a.IIIOODKNo=s4;q>?R?RSSSS--q111T]A...T]F333T\6222T^H55>BBB
 ! &DMJLLLLL	 ! &DMJLLLLs   N8P $P&c                     t           j        t           j        t           j        fD ]#}dD ]}|                     t
          ||           $d S )N)gZbtgZbti)r   rt   r   rv   rp   r   )r!   r   unreasonables      r   test_insane_timestampsz#TimeTestCase.test_insane_timestamps  s`    
 JT^; 	E 	ED - E E!!-|DDDDE	E 	Er   c                 T    t          j                     t          j        d            d S r   )r   rt   r    s    r   test_ctime_without_argz#TimeTestCase.test_ctime_without_arg  s%     	

4r   c                     t          j                    }t          j        d           }t          j        |          }t          j        |          }|                     ||d           d S Ng?)delta)r   r   rw   assertAlmostEqual)r!   gt0gt1t0rc   s        r   test_gmtime_without_argz$TimeTestCase.test_gmtime_without_arg  s[    kmmk$[[r2S11111r   c                     t          j                    }t          j        d           }t          j        |          }t          j        |          }|                     ||d           d S r   )r   rv   rw   r  )r!   lt0lt1r  rc   s        r   test_localtime_without_argz'TimeTestCase.test_localtime_without_arg  s]    nnT""[[r2S11111r   c                     dD ]V}	 t          j        |          }|                     t          j        |          |           @# t          t
          f$ r Y Sw xY wd S )N)rz   r{   r   r   )r   rv   r^   rw   r   rq   )r!   r   r   s      r   test_mktimezTimeTestCase.test_mktime  sy     	5 	5A5^A&&   R!4444 "7+   	5 	5s   AAAr   glibcz0disabled because of a bug in glibc. Issue #13309c                 ,   t          j        | j                  }t          j        d|          }|                     |d           	 t          j        d           n# t          $ r Y nw xY w|                     t          j        d|          |           d S )N%ZLMT)	r{   r   r   r   r   r   r{   r{   r{   )r   r   r   r   ra   rw   r   r^   )r!   r   r'   s      r   test_mktime_errorzTimeTestCase.test_mktime_error  s     [  tR((FE***	K78888 	 	 	D	tR00&99999s   A 
A('A(c                    d t          d          D             }|d         }|dd          D ]}|                     ||d|z             |}t          j                    }t          j        d           t          j                    }||z
  }|                     ||           |                     d|k               t          j        d          }|                     |j                   |                     |j	                   d S )	Nc                 4    g | ]}t          j                    S r   )r   r,   ).0ns     r   
<listcomp>z/TimeTestCase.test_monotonic.<locals>.<listcomp>  s     666a!!666r   r   r   r   ztimes=%sg      ?g?r,   )
r   assertGreaterEqualr   r,   r}   rj   r-   r*   r+   r.   )r!   timesrc   rd   dtr/   s         r   test_monotoniczTimeTestCase.test_monotonic  s   665::6661X) 	 	B##BJ,>???BB ^
3^"W2r""" 	$$$ ";//''')))))r   c                 ,    t          j                     d S r   )r   r>   r    s    r   test_perf_counterzTimeTestCase.test_perf_counter  s    r   z"process_time not available on WASIc                 <   t          j                    }t          j        d           t          j                    }|                     ||z
  d           t          j        d          }|                     |j                   |                     |j                   d S )N皙?{Gz?r@   )	r   r@   r}   r5   r*   r-   r,   r+   r.   r!   startstopr/   s       r   test_process_timezTimeTestCase.test_process_time  s    
 !##
5 "" 	ue,,,">22''')))))r   c                    t          t          d          sWt          j                            d          r#|                     dt          j                   n|                     d           t          j                    }t          j        d           t          j                    }| 	                    ||z
  d           t          j
        d          }|                     |j                   |                     |j                   d S )Nr:   )linuxwinz*time.thread_time() should be available on zneed time.thread_timer  r  )rB   r   r[   rY   r`   r   skipTestr:   r}   r5   r*   r-   r,   r+   r.   r   s       r   test_thread_timezTimeTestCase.test_thread_time  s    t]++ 	7|&&'788 7			 \\, - - - - 5666  ""
5!! 	ue,,,"=11''')))))r   zneed time.clock_settimec                    t          j                    }t          j        t           j                  }	 t          j        t           j        |dz
             n,# t
          $ r}|                     |           Y d }~nd }~ww xY wt          j                    }t          j        t           j        |           |                     ||           d S )Ni  )r   r,   r;   rD   rm   ro   r'  r  )r!   rc   realtimeerrrd   s        r   test_monotonic_settimez#TimeTestCase.test_monotonic_settime  s     ^%d&9::	t2HtODDDD 	 	 	MM#	^4.999B'''''s   "A 
A? A::A?c                 6   d }dD ]J}	 t          j        |           # t          $ r |                     d           Y 9t          $ r |}Y  nw xY w||                     d           |                     t          t           j        |           |                     t          t           j        |           |                     t          t           j        t          d                     |                     t          t           j        t          d                     d S )N)r{   i   @l        l            zneed 64-bit time_tz&unable to find an invalid time_t valuenan)	r   rv   r   r'  rq   rp   rt   r|   rH   )r!   invalid_time_ttime_ts      r   test_localtime_failurez#TimeTestCase.test_localtime_failure  s   / 	 	Fv&&&&  4 4 4233333   !' !MMBCCC'4>>BBB'4:~>>> 	*dneEllCCC*dj%,,?????s   AAAc                    g d}t          t          d          r|                    d           |D ]}|                     |          5  t          j        |          }|                     |j        t                     |                     |j        d           |                     |j	        t                     |                     |j        t                     |                     |j        d           |                     |j        d           |                     |j        t                     d d d            n# 1 swxY w Y   |                     t"          t          j        d           d S )N)r,   r>   r@   r   r:   )namer   rh   ri   xxx)rB   r   appendsubTestr*   r3   implementationr   ra   r,   bool
resolutionrH   rj   rM   r.   rp   r|   )r!   clocksr3  r/   s       r   test_get_clock_infoz TimeTestCase.test_get_clock_info4  s   
 
 
 4'' 	)MM-((( 	= 	=D4(( 
= 
=*400%%d&93???##D$7<<<%%dnd;;;%%dou===""4?C888$$T_c:::%%dot<<<
= 
= 
= 
= 
= 
= 
= 
= 
= 
= 
= 
= 
= 
= 
= 	*d&95AAAAAs   
C&D<<E 	E 	N)3r   r   r   r"   r(   r0   rF   unittest
skipUnlessrB   r   rJ   rP   re   rl   rr   rx   r~   r   r   r   r   r   r   r   r   r   r   r   r   skipIfr   is_emscriptenr   r   r   r   r  r
  r  rY   libc_verr  r  r  is_wasir#  r(  r,  r1  r;  r   r   r   r   r   7   s           ) ) )A A A2 X7746 6( (6 6( X7746 6X'89946 6# #6 66 6#
 X'>??<> >X7746 6% %6 6> >% X~6635 5' '5 5'
 X7746 6	K 	K6 6	K& & &  
I I IA A A7? 7? 7?rB B B  + + + "1 1 "!1C C C
> > >> > >, , , X_I F F F Xw//=? ?G G? ?GRE E E  2 2 22 2 25 5 5 X**,,Q/7:KM M: :M M:* * *.   X_= * * ** * *( X7724 4( (4 4(@ @ @*B B B B Br   r   c                        e Zd Zd Zd Zd ZdS )
TestLocalec                 L    t          j        t           j                  | _        d S r   locale	setlocaleLC_ALLoldlocr    s    r   r"   zTestLocale.setUpO  s    &v}55r   c                 N    t          j        t           j        | j                   d S r   rE  r    s    r   tearDownzTestLocale.tearDownR  s    44444r   c                     	 t          j        t           j        d          }n*# t           j        $ r |                     d           Y nw xY wt          j        dd           d S )Nfr_FRz$could not set locale.LC_ALL to fr_FRz%B)	i  r   r   r   r   r   r   r   r   )rF  rG  rH  Errorr'  r   r   )r!   tmps     r   test_bug_3061zTestLocale.test_bug_3061U  ss    	B"6='::CC| 	B 	B 	BMM@AAAAA	B 	d233333s   " $A	A	N)r   r   r   r"   rK  rP  r   r   r   rC  rC  N  sA        6 6 65 5 54 4 4 4 4r   rC  c                       e Zd ZdZd Zd ZdS )_TestAsctimeYear%dc                 b    t          j        |fdz                                             d         S )Nr   r{   )r   ru   splitr!   r   s     r   yearstrz_TestAsctimeYear.yearstra  s)    |QD8O,,2244R88r   c                     |                      |                     d          d           |                      |                     d          d           d S )N90  12345[	123456789)r^   rW  r    s    r   test_large_yearz _TestAsctimeYear.test_large_yeard  sL    e,,g666i00+>>>>>r   N)r   r   r   _formatrW  r]  r   r   r   rR  rR  ^  s7        G9 9 9? ? ? ? ?r   rR  c                        e Zd Z ej        dd          dk    rdZndZd Z ej        e	j
        d          d             Zd	 Z ed
           fd            Z ed           fd            Z[ xZS )_TestStrftimeYearr   )	r   r   r   r   r   r   r   r   r   0001%04drS  c                 4    t          j        d|fdz             S )Nr   r   r   rV  s     r   rW  z_TestStrftimeYear.yearstru  s    }TA4(?333r   zrequires strftime extensionc                 ~    | j         dk    r|                     d           d S d }|                     d|           d S )Nrb  c                 4    t          j        d| fdz             S )Nz%4Yr   r   )r   s    r   year4dz-_TestStrftimeYear.test_4dyear.<locals>.year4d  s    }UQD8O<<<r   )r   )r^  	test_year)r!   rf  s     r   test_4dyearz_TestStrftimeYear.test_4dyearx  sT    
 <6!!NN6"""""= = =NN6N/////r   c                     d}	 t          j        d| fdz              d}n# t          $ r d}Y nw xY wt          j        ||          S )Nz5strftime() is limited to [1; 9999] with Visual Studior   r   TF)r   r   r|   r<  r=  )r   msgconds      r   skip_if_not_supportedz'_TestStrftimeYear.skip_if_not_supported  sh    E	M$x000 DD  	 	 	DDD	 "4---s     //r   c                 D    t                                                      S r   )superr]  r!   	__class__s    r   r]  z!_TestStrftimeYear.test_large_year  s    ww&&(((r   r   c                 D    t                                                      S r   )rn  test_negativero  s    r   rr  z_TestStrftimeYear.test_negative  s    ww$$&&&r   )r   r   r   r   r   r^  rW  r<  r=  r   has_strftime_extensionsrh  rl  r]  rr  __classcell__)rp  s   @r   r`  r`  i  s         t}T?++v554 4 4 X')F 0 0 0	. 	. 	. 5!!) ) ) ) "!) 1' ' ' ' ' 	r   r`  c                   &    e Zd ZdZddZd Zd ZdS )_Test4dYearrS  Nc                    |p| j         }|p| j        }|                      |d          |dz             |                      |d          |dz             |                      |d          |dz             |                      |d          |dz             |                      |d          |dz             |                      |d          |dz             d S )Nr   D   E   c     '  )r^  rW  r^   )r!   fmtr   s      r   rg  z_Test4dYear.test_year  s    !T\#t|aS1W---bS2X...bS2X...bS2X...cS3Y///dS4Z00000r   c                    |                      |                     d                              d          d           |                      |                     d                              d          d           |                      |                     t                                        d          t	          t                               |                     t          | j        t          dz              d S )NrY  +rZ  r[  r\  r   )r^   rW  lstripr   r   rp   r   r    s    r   r]  z_Test4dYear.test_large_year  s    e,,33C88'BBBi0077<<kJJJl33::3??\ARARSSS-|a7GHHHHHr   c                 X   |                      |                     d          | j        dz             |                      |                     d          d           |                      |                     d          d           |                      |                     d          t          d                     |                      |                     d          t          d                     |                      |                     t                    t          t                               |                     t          | j        t          dz
             |                     t                    5  |                     t           dz
             d d d            d S # 1 swxY w Y   d S )	Nr{   i.z-1234iz-123456i2i.ir   )r^   rW  r^  r   r   rp   r   r   r    s    r   rr  z_Test4dYear.test_negative  s   b))4<"+<===e,,g666g..	:::j113z??CCCk22C4D4DEEEl33S5F5FGGG-|a7GHHH}-- 	, 	,LL,*+++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,s   3FF#&F#)NN)r   r   r   r^  rg  r]  rr  r   r   r   rv  rv    sN        G1 1 1 1I I I
, 
, 
, 
, 
,r   rv  c                       e Zd ZdS )TestAsctime4dyearNr   r   r   r   r   r   r  r            Dr   r  c                       e Zd ZdS )TestStrftime4dyearNr  r   r   r   r  r    r  r   r  c                   (   e Zd Ze ej        ej        dk    d           ej        e	j
        d          d                                     Z ej        ej        dk    d          d             Z ej        ej        dk    d          d             ZdS )
TestPytime   zneeds tm_zone supportr   c                    t          j                    }|                     t          |d                     |                     t          |d                     |j        *|                     t          t           d                      n=|                     |j        t           j        t           j        g|j                             |j	        *|                     t          t           d                      n0|                     |j	        t           j
        |j                            t          j        |          }t          j        |d d                   }|                     ||           t          j        |          }t          j        |          }|                     ||           |                     |j        |j                   |                     |j	        |j	                   |                     ||           |                     |j        |j                   |                     |j	        |j	                   d S )N	tm_gmtofftm_zoner&   r'   r   )r   rv   r-   rB   r  r^   r&   r$   r   r  r'   rw   )r!   ltr   t9new_ltnew_lt9s         r   test_localtime_timezonez"TestPytime.test_localtime_timezone  s    ^K00111I../// <OOj 9 99::::R\T]DL,I"+,V+VWWW:OOh 7 778888RZR[)ABBB
 KOO$+b!f"5"5RB ""dnR.@.@G$$$)2<888444"%%%)2<888"*55555r   c                     t          j        dd          }|                     |j        d           t          j        dd          }|                     |j        d           d S )NUTCr  z+0500z%zr   )r   r   r^   r  r  rI   s     r   test_strptime_timezonez!TestPytime.test_strptime_timezone  sZ    M%&&E***M'4((h/////r   c                     dd l }d}|                    |          }|                     |j        d            |                     |j        d            d S )Nr   sL   ctime
struct_time
p0
((I2007
I8
I11
I1
I24
I49
I5
I223
I1
tp1
(dp2
tp3
Rp4
.)pickleloadsr   r  r  )r!   r  str  s       r   test_short_timeszTestPytime.test_short_times  sX     	 m\\"blD)))bj$'''''r   N)r   r   r   r   r<  r=  r   _STRUCT_TM_ITEMSr>  r   r?  r  r  r  r   r   r   r  r    s        !X."46MNNX_I  6  6  ON "!
 6D X."46MNN0 0 ON0 X."46MNN( ( ON( ( (r   r  zneed the _testcapi modulec                   L    e Zd ZdZdZd Zd Zd Z	 ddZ	 ddZ		 dd	Z
d
 ZdS )CPyTimeTestCasez1
    Base class to test the C _PyTime_t API.
    Nc                 R    ddl m} |dz  dz
  }d|z   | _        d|z  dz
  | _        d S )Nr   )SIZEOF_TIME_Tr	   r   r   )	_testcapir  
time_t_min
time_t_max)r!   r  bitss      r   r"   zCPyTimeTestCase.setUp  sC    ++++++q 1$9*t)a-r   c                 6    | j         |cxk    o
| j        k    nc S r   )r  r  )r!   secondss     r   time_t_filterzCPyTimeTestCase.time_t_filter	  s(    7====do====>r   c           
      <   dt           t          t          g}|r|                    d           d}dg}|D ]$}|D ]}||z  }|                    | |f            %dD ]9}d|z  t          z  }|                    | dz
  | | dz   |dz
  ||dz   f           :t
          j        t
          j        fD ]}	|                    |	t          z              |r#dD ] }d| z  }|                    | |f           !d	t          z  t          z  }|                    | |f           |S )
z'Build timestamps used to test rounding.r   gMbP?)r   r         {   i  i  r   rz  r{  r|  i i?B i  i  i  i  i  i  i	  i  i  r   )	r   r  r         r   r      !   r   )r   r  r   r  g       @l            )US_TO_NSMS_TO_NS	SEC_TO_NSr5  extendr  INT_MININT_MAX)
r!   	use_floatunitsvaluesns_timestampsunitvaluer7   pow2r  s
             r   _rounding_valuesz CPyTimeTestCase._rounding_values  s    Hh	2 	LL
$  	0 	0D 0 0T\$$rc2Y////0 7 	 	Dt)y(B  AsRCE1b"Q$"     ")9+<= 	6 	6G  9!45555 	0& 0 0dU^$$rc2Y//// "i/rc2Y'''r   c                    fd}|                                } ||          }t          D ]\  }	}
t          j                    5 }|
|_        |D ]_}||
d}	  |||	          } ||          }n(# t
          $ r |                     d|z             Y nw xY w|                     |||           `	 d d d            n# 1 swxY w Y   | j        t          z  }| |f} ||          }t          D ]O\  }	}|D ]G}||	d}| 
                    t          |          5   |||	           d d d            n# 1 swxY w Y   HPd S )Nc                     r&t           t                    z  fd| D             }nt           z  fd| D             }rt          |          }t          t	          |                    S )Nc                     g | ]}|z  S r   r   r  r7   
unit_to_nss     r   r  zKCPyTimeTestCase._check_rounding.<locals>.convert_values.<locals>.<listcomp>E  s    BBBb"z/BBBr   c                     g | ]}|z  S r   r   r  s     r   r  zKCPyTimeTestCase._check_rounding.<locals>.convert_values.<locals>.<listcomp>H  s    CCCr"
*CCCr   )r  rH   filtersortedset)r  r  r  unit_to_secr  value_filters     @r   convert_valuesz7CPyTimeTestCase._check_rounding.<locals>.convert_valuesB  s     D&{););;
BBBBMBBB&+5
CCCC]CCC 6f55 #f++&&&r   )r  roundingz!Error on timestamp conversion: %s)rj  )r  ROUNDING_MODESdecimallocalcontextr  	Exceptionr   r^   OVERFLOW_SECONDSr  rp   r   )r!   pytime_converterexpected_funcr  r  r  r  r  valid_valuestime_rnddecimal_rndcontextr  
debug_infor   r   r7   overflow_values_s      ```             r   _check_roundingzCPyTimeTestCase._check_rounding?  s_   	' 	' 	' 	' 	' 	' 	' --i88%~m44%3 	1 	1!Hk%'' 17#. ) 	1 	1E+0k!J!JJT!1!1%!B!B#0=#7#7$ T T T		"E
"RSSSSST$$V%-%/1 1 1 1	11 1 1 1 1 1 1 1 1 1 1 1 1 1 1 "Y.b	(.77) 	6 	6KHa( 6 6',(CC
&&}*&EE 6 6$$UH5556 6 6 6 6 6 6 6 6 6 6 6 6 6 66	6 	6sH   
CA43C4"B	CB	CC	C	D66D:=D:r   c                 8    |                      ||d||           d S )NFr  r!   r  r  r  r  s        r   check_int_roundingz"CPyTimeTestCase.check_int_roundingl  s0    -}"K	? 	? 	? 	? 	?r   c                 8    |                      ||d||           d S )NTr  r  s        r   check_float_roundingz$CPyTimeTestCase.check_float_roundingq  s0    -}!;	> 	> 	> 	> 	>r   c                 r    t          j        |          }|                    d          }t          |          S )Nr   )r  Decimalquantizer4   )r!   r   r   s      r   decimal_roundzCPyTimeTestCase.decimal_roundv  s+    OAJJqMM1vvr   r   )r   N)r   r   r   __doc__r  r"   r  r  r  r  r  r  r   r   r   r  r    s          ( ( (? ? ?1 1 1h >B+6 +6 +6 +6\ 8<? ? ? ? :>> > > >
    r   r  c                   :   e Zd ZdZ ej        dez            Zd Zd Z	d Z
d Zd Z ej         eed          d	          d
             Z ej         eed          d          d             Z ej         eed          d          d             Zd Zd ZdS )TestCPyTimez#
    Test the C _PyTime_t API.
    l           c                     ddl m d }|                     fdd |           t          D ]O\  }}|                     t
                    5   t          d                     d d d            n# 1 swxY w Y   Pd S )Nr   )PyTime_FromSecondsc                 J    t           j        | cxk    ot           j        k    nc S r   )r  r  r  secss    r   c_int_filterz2TestCPyTime.test_FromSeconds.<locals>.c_int_filter  s*    %BBBB1BBBBBCr   c                      |           S r   r   )r  rndr  s     r   r   z.TestCPyTime.test_FromSeconds.<locals>.<lambda>  s    2D2DT2J2J r   c                     | t           z  S r   r  r  s    r   r   z.TestCPyTime.test_FromSeconds.<locals>.<lambda>  s    TI-= r   r  r.  )r  r  r  r  rp   r   rH   )r!   r  r  r  r  s       @r   test_FromSecondszTestCPyTime.test_FromSeconds  s    000000	D 	D 	D 	 J J J J = =-9 	  	; 	; 	;
 * 	1 	1KHa""9-- 1 1""5<<0001 1 1 1 1 1 1 1 1 1 1 1 1 1 1	1 	1s   A22A6	9A6	c                 $    ddl m}                      |d                                 | fd           t          D ]P\  }}                     t                    5   |t          d          |           d d d            n# 1 swxY w Y   Qd S )Nr   )PyTime_FromSecondsObjectc                     | t           z  S r   r  r  s    r   r   z4TestCPyTime.test_FromSecondsObject.<locals>.<lambda>  s    	) r   c                 >                         | t          z            S r   )r  r  )r7   r!   s    r   r   z4TestCPyTime.test_FromSecondsObject.<locals>.<lambda>  s    t))"y.99 r   r.  )r  r  r  r  r  rp   r|   rH   )r!   r  r  r  s   `   r   test_FromSecondsObjectz"TestCPyTime.test_FromSecondsObject  s   666666$))	+ 	+ 	+ 	!!$9999	; 	; 	;
 * 	A 	AKHa"":.. A A((ux@@@A A A A A A A A A A A A A A A	A 	As   BB	B	c                    ddl m d }|                     fd|t                     t          D ]O\  }}|                     t                    5   t          d                     d d d            n# 1 swxY w Y   Pd S )Nr   )PyTime_AsSecondsDoublec                     t          |           t          z  dk    rt          | t          z            S t          |           t          z  S Nr   )absr  rH   r7   s    r   float_converterz9TestCPyTime.test_AsSecondsDouble.<locals>.float_converter  s;    2ww"a''R9_---Ryy9,,r   c                      |           S r   r   )r7   r  r  s     r   r   z2TestCPyTime.test_AsSecondsDouble.<locals>.<lambda>  s    0F0Fr0J0J r   r.  )r  r  r  	NS_TO_SECr  rp   r   rH   )r!   r  r  r  r  s       @r   test_AsSecondsDoublez TestCPyTime.test_AsSecondsDouble  s    444444	- 	- 	- 	 J J J J / )	+ 	+ 	+
 * 	5 	5KHa""9-- 5 5&&uU||4445 5 5 5 5 5 5 5 5 5 5 5 5 5 5	5 	5s   A55A9	<A9	c                 >     t          j        |           fd}|S )Nc                 \    t          j        |           z  }                    |          S r   )r  r  r  )r  r   denomr!   s     r   	converterz7TestCPyTime.create_decimal_converter.<locals>.converter  s+    &&.A%%a(((r   )r  r  )r!   denominatorr  r  s   `  @r   create_decimal_converterz$TestCPyTime.create_decimal_converter  s9    ,,	) 	) 	) 	) 	) 	) r   c                     ddl m} |                     t                    fd}t          j        dk    rddl mm fd}n| j        }| 	                    ||t          |           d S )Nr   )PyTime_AsTimevalc                 D     |           }t          |t                    S r   )divmod	SEC_TO_US)r7   usus_converters     r   timeval_converterz5TestCPyTime.test_AsTimeval.<locals>.timeval_converter  s"    b!!B"i(((r   win32LONG_MINLONG_MAXc                 $    | cxk    ok    nc S r   r   )r  r  r  s    r   seconds_filterz2TestCPyTime.test_AsTimeval.<locals>.seconds_filter  s%    43333833333r   r  )r  r  r  r  r[   rY   r  r  r  r  r  )r!   r  r  r  r  r  r  s       @@@r   test_AsTimevalzTestCPyTime.test_AsTimeval  s    ......44X>>	) 	) 	) 	) 	) <7""444444444 4 4 4 4 4 4 "/N 0 1 )-; 	  	= 	= 	= 	= 	=r   PyTime_AsTimespecz need _testcapi.PyTime_AsTimespecc                 f    ddl m d }|                     fd|t          | j                   d S )Nr   )r  c                 ,    t          | t                    S r   )r
  r  r  s    r   timespec_converterz7TestCPyTime.test_AsTimespec.<locals>.timespec_converter  s    "i(((r   c                      |           S r   r   )r7   r  r  s     r   r   z-TestCPyTime.test_AsTimespec.<locals>.<lambda>  s    0A0A"0E0E r   r  )r  r  r  r  r  )r!   r  r  s     @r   test_AsTimespeczTestCPyTime.test_AsTimespec  sl     	0/////	) 	) 	) 	 E E E E 2 )-1-? 	  	A 	A 	A 	A 	Ar   PyTime_AsTimeval_clampz%need _testcapi.PyTime_AsTimeval_clampc                    ddl m} t          j        dk    rddl m}m} |}|}n| j        }| j        }t          t          fD ]} ||t          j                  }t          j                    5 }t          j        |_        |                     t          j        |          t"          z            }	d d d            n# 1 swxY w Y   t%          |	t&                    \  }
}||
k     r|}
d}n
|
|k     r|}
d}|                     ||
|f           d S )Nr   )r  r  r  )r  r  r[   rY   r  r  r  r  _PyTime_MIN_PyTime_MAXr   r   r  r  r  r  r  r  r
  r  r^   )r!   r  r  r  
tv_sec_max
tv_sec_minr   tsr  r  tv_sectv_usecs               r   test_AsTimeval_clampz TestCPyTime.test_AsTimeval_clamp  s    	544444<7""44444444!J!JJJJ{+ 	4 	4A''7+@AAB%'' G7#*#8 ''(:(:X(EFFG G G G G G G G G G G G G G G %R33OFGF""#*$$#R&'!23333	4 	4s   +AB88B<	?B<	PyTime_AsTimespec_clampz&need _testcapi.PyTime_AsTimespec_clampc                     ddl m} t          t          fD ]f} ||          }t	          |t
                    \  }}| j        |k     r
| j        }d}n|| j        k     r	| j        }d}|                     |||f           gd S )Nr   )r&  )	r  r&  r  r  r
  r  r  r  r^   )r!   r&  r   r"  r#  tv_nsecs         r   test_AsTimespec_clampz!TestCPyTime.test_AsTimespec_clamp  s     	655555{+ 		4 		4A((++B$Q	22OFG''$/))R&'!23333		4 		4r   c                 z    ddl m} |                     ||                     t                    t
                     d S )Nr   )PyTime_AsMilliseconds)r  r+  r  r  r  r  )r!   r+  s     r   test_AsMillisecondszTestCPyTime.test_AsMilliseconds  M    333333 5 $ = =h G G )	+ 	+ 	+ 	+ 	+r   c                 z    ddl m} |                     ||                     t                    t
                     d S )Nr   )PyTime_AsMicroseconds)r  r/  r  r  r  r  )r!   r/  s     r   test_AsMicrosecondszTestCPyTime.test_AsMicroseconds  r-  r   N)r   r   r   r  mathceilr  r  r  r  r   r  r  r<  r=  rB   r  r  r%  r)  r,  r0  r   r   r   r  r  |  sk         !ty)y!8991 1 1 A A A 5 5 5$  = = =. X,?@@;= =	A 	A= =	A X,DEE@B B4 4B B42 X,EFFAC C4 4C C4+ + ++ + + + +r   r  c                   .    e Zd ZdZdZd Zd Zd Zd ZdS )TestOldPyTimezH
    Test the old C _PyTime_t API: _PyTime_ObjectToXXX() functions.
    l            c                     ddl m} |                     |d | j                   |                     || j        | j                   d S )Nr   )pytime_object_to_time_tc                     | S r   r   r  s    r   r   z5TestOldPyTime.test_object_to_time_t.<locals>.<lambda>(  s    T r   r  )r  r6  r  r  r  r  )r!   r6  s     r   test_object_to_time_tz#TestOldPyTime.test_object_to_time_t$  s    555555 7 1 1-1-? 	  	A 	A 	A 	!!"9"&"4/3/A 	" 	C 	C 	C 	C 	Cr   c                       fd}|S )Nc                     t          j        |           \  }}t          |          }|z  }                    |          }|dk     r|z  }|dz  }n|k    r
|z  }|dz  }||fS )Nr   r   )r1  modfr4   r  )r  	floatpartintpartsec_to_unitr!   s      r   r  z1TestOldPyTime.create_converter.<locals>.converter0  s    !%4Iw'llG$I**955I1}}[(	1k))[(	1Y''r   r   )r!   r>  r  s   `` r   create_converterzTestOldPyTime.create_converter/  s*    	( 	( 	( 	( 	( 	( r   c                 h   ddl m} |                     |d | j                   |                     ||                     t                    | j                   t          D ]P\  }}|                     t                    5   |t          d          |           d d d            n# 1 swxY w Y   Qd S )Nr   )pytime_object_to_timevalc                 
    | dfS r  r   r  s    r   r   z6TestOldPyTime.test_object_to_timeval.<locals>.<lambda>B  
    dAY r   r  r.  )r  rA  r  r  r  r?  r  r  rp   r|   rH   )r!   rA  r  r  s       r   test_object_to_timevalz$TestOldPyTime.test_object_to_timeval>  s6   666666 8 6 6-1-? 	  	A 	A 	A 	!!":"&"7"7	"B"B/3/A 	" 	C 	C 	C
 * 	A 	AKHa"":.. A A((ux@@@A A A A A A A A A A A A A A A	A 	A    B&&B*	-B*	c                 h   ddl m} |                     |d | j                   |                     ||                     t                    | j                   t          D ]P\  }}|                     t                    5   |t          d          |           d d d            n# 1 swxY w Y   Qd S )Nr   )pytime_object_to_timespecc                 
    | dfS r  r   r  s    r   r   z7TestOldPyTime.test_object_to_timespec.<locals>.<lambda>R  rC  r   r  r.  )r  rG  r  r  r  r?  r  r  rp   r|   rH   )r!   rG  r  r  s       r   test_object_to_timespecz%TestOldPyTime.test_object_to_timespecN  s6   777777 9 6 6-1-? 	  	A 	A 	A 	!!";"&"7"7	"B"B/3/A 	" 	C 	C 	C
 * 	B 	BKHa"":.. B B))%,,AAAB B B B B B B B B B B B B B B	B 	BrE  N)	r   r   r   r  r  r8  r?  rD  rI  r   r   r   r4  r4    sm         
 	C 	C 	C  A A A B B B B Br   r4  darwinztest weak linking on macOSc                       e Zd Zd ZdS )TestTimeWeaklinkingc                    dd l }dd l} |j                    }d}||vs||         st          j        | d          t          d  |j                    d                             d          D                       }g d}|dk    r4|D ]/}|                     t          t          |          d| d           0d S |D ]/}|                     t          t          |          d| d	           0d S )
Nr   HAVE_CLOCK_GETTIMEz is not availablec              3   4   K   | ]}t          |          V  d S r   )r4   )r  r   s     r   	<genexpr>z;TestTimeWeaklinking.test_clock_functions.<locals>.<genexpr>n  s(      II1AIIIIIIr   .)rK   r;   rE   rm   clock_settime_nsrf   )r   r   ztime.z is available)	sysconfigrY   get_config_varsr<  SkipTestr   mac_verrU  r-   rB   r   r+   )r!   rS  rY   config_varsvar_namerV  clock_namesr3  s           r   test_clock_functionsz(TestTimeWeaklinking.test_clock_functionse  sL   /i/11';&&k(.C&#x$B$B$BCCCII(8(8(:(:1(=(C(CC(H(HIIIII0 0 0 h# V Vd 3 35TT5T5T5TUUUUV V $ S S  t!4!46Qd6Q6Q6QRRRRS Sr   N)r   r   r   rZ  r   r   r   rL  rL  ^  s(        S S S S Sr   rL  __main__)4testr   test.supportr   r  enumrF  r1  rY   r[   rS  r   rV   r<  r  ImportErrorr   get_config_varr   r   r   r  r  r  r  r  IntEnumr   r  r  r   r   r   r   r  TestCaser   rC  rR  r`  rv  r  r  r  r>  r  r  r4  r=  rL  r   mainr   r   r   <module>rd     sk         ( ( ( ( ( (      



             III 6 5 5 5 5 5 &Y%l338q
Q^a''1,}q 4'			    dl    
 '-.G12g56w'(TB TB TB TB TB8$ TB TB TBn4 4 4 4 4" 4 4 4 	? 	? 	? 	? 	? 	? 	? 	?. . . . . . . .b, , , , , , , ,@	 	 	 	 	(+x7H 	 	 		 	 	 	 	*K9J 	 	 	8( 8( 8( 8( 8(" 8( 8( 8(v d"$?@@| | | | | | | A@|~]+ ]+ ]+ ]+ ]+/8#4 ]+ ]+ ]+@@B @B @B @B @BOX%6 @B @B @BD S\X-/KLLS S S S S(+ S S MLS< zHMOOOOO s   ; AA